使用 SurfaceView + MediaPlayer 有幾項要注意的重點,不然是無法順利播放影片。

  • MediaPlayer.setDisplay(SurfaceHolder) 必須在 surfaceCreated 之後才能執行,不然只會聽到聲音看不到影像。
  • SurfaceHolder.setType() 必須設定成 SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS,否則播放會出錯。
  • SurfaceHolder.setType() 必須在 surfaceCreated 之前設定完成,不然只會聽到聲音看不到影像。。
  • MediaPlayer.setDisplay() 不一定要在 MediaPlayer.start() 前面,隨時都可以變更。
  • MediaPlayer.setDataSource() 可以輸入網址或是檔案路徑。
  • 如果要重覆撥放,需要設定 OnCompletionListener,在 onCompletion 放一個 mediaPlayer.start() 即可。
  • 如果撥完要撥另一個檔案,則需要先下 reset() 進入 IDLE stage,才能再用 setDataSource(),不然會出現 error stage 的錯誤訊息。
import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class VideoTestActivity extends Activity { MediaPlayer mediaPlayer; SurfaceView surfaceView; SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); surfaceView = new SurfaceView(this); surfaceHolder = surfaceView.getHolder(); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); setContentView(surfaceView); mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource("/mnt/sdcard/video/video2.3gp"); mediaPlayer.prepare(); } catch (Exception e) { } mediaPlayer.start(); mediaPlayer.setOnCompletionListener( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { try { mp.reset(); mp.setDataSource("/mnt/sdcard/video/video1.3gp"); mp.prepare(); } catch (Exception e) { } // repeat play 只要下 start() mp.start(); } }); surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { Log.e("video","surfaceChanged"); } @Override public void surfaceCreated(SurfaceHolder arg0) { Log.e("video","surfaceCreated"); mediaPlayer.setDisplay(surfaceHolder); } @Override public void surfaceDestroyed(SurfaceHolder arg0) { Log.e("video","surfaceDestroyed"); if (mediaPlayer != null) mediaPlayer.release(); } }); } }
創作者介紹

邱小新の工作筆記

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()