2012年4月11日 星期三

使用 MediaPlayer 遇到的問題

依據 SDK 文件說明,以下是 State Diagram



使用 MediaPlayer 發現一些問題

1.當 setDataSource() 是網路上的檔案(http),在呼叫 prepareAsync() 必定有一段連線的時間,如果使用者在這時候決定不播了,由於還未進入 Prepared state 而是在 Initialized state,無法呼叫 stop()、release() 來終止 MediaPlayer。
而且通常要讀取一些(Buffer)才會進入 Prepared state,也就是說呼叫 prepareAsync() 之後但是還未進入 Prepared state 的這段時間(依據網路狀態),無法中終止 MediaPlayer,目前只能在 onPrepared() 另外判斷是不是要終止 MediaPlayer。

2.stop(),如果在不適合的 state 呼叫,之後的 Player 會出現不穩或不能播其他多媒體的狀況,就算使用 try catch 也一樣,如果任何 state 都可以呼叫,那第一點也就有辦法停止。

3.當進入 Prepared state 時,OnBufferingUpdateListener 會送出一個 percent = 100 的 event,這在判斷是否已經讀完整個多媒體檔案會造成誤判,必須多使用一個 boolean 變數在 prepareAsync() 前設為 false,在 onPrepared() 設為 true,如果是 true 才是真的讀完多媒體檔案。

4.當兩個 MediaPlayer 分別在兩個 SurfaceView 同時播放同一個影片時,會造成一個 MediaPlayer 畫面延遲或斜影但聲音正常,哪一個會有問題則不一定,不知道是架構問題還是硬體問題。

沒有留言:

張貼留言