在Android中播放視頻用到的也是MediaPlayer,展示視頻通常使用SurfaceView控件。
在main.xml布局文件添加用於視頻畫面繪制的SurfaceView 控件:
<SurfaceView android:layout_width="fill_parent"android:layout_height="240dip"android:id="@+id/surfaceView"/>
MeidaPlayer播放視頻相關API使用方法:
- SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.surfaceView);
- surfaceView.getHolder().setFixedSize(176, 144); //設置分辨率
- /*下面設置Surface不維護自己的緩沖區,而是等待屏幕的渲染引擎將內容推送到用戶面前*/
- surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- MediaPlayer mediaPlayer = new MediaPlayer();
- mediaPlayer.reset();//重置為初始狀態
- mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- /* 設置Video影片以SurfaceHolder播放 */
- mediaPlayer.setDisplay(surfaceView.getHolder());
- mediaPlayer.setDataSource("/mnt/sdcard/oppo.mp4");
- mediaPlayer.prepare();//緩沖
- mediaPlayer.start();//播放
- mediaPlayer.pause();//暫停播放
- mediaPlayer.start();//恢復播放
- mediaPlayer.stop();//停止播放
- mediaPlayer.release();//釋放資源
下面介紹一個播放視頻的簡易例子,在模擬器上運行時最好用2.1, 2.1以後的模擬器播放視頻時會有問題,視頻播放同樣需要處理一些來電類的情況,需要覆寫Activity生命周期裡的幾個方法,需要注意的是,當Surface控件被其他Activity遮擋住是,會被銷毀,所以需要為他寫一個回調函數,否則當當前Activity被其他Activity打斷後,又回到當前Activity是,視頻播放界面會是黑屏。
詳細代碼:
布局文件layout/main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:background="#ffffff"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/filename"
- />
-
- <EditText
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="oppo.mp4"
- android:id="@+id/filename"
- />
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- >
- <ImageButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/play"
- android:id="@+id/play"
- />
- <ImageButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/pause"
- android:id="@+id/pause"
- />
- <ImageButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/reset"
- android:id="@+id/reset"
- />
- <ImageButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/stop"
- android:id="@+id/stop"
- />
- </LinearLayout>
-
- <SurfaceView
- android:layout_width="fill_parent"
- android:layout_height="240dip"
- android:id="@+id/surfaceView"
- />
- </LinearLayout>