視頻播放器的開發:
一、顯示視頻的控制項SurfaceView:
1、主要完成單位時間內的顯示。
2、內部使用雙緩衝機制:
3、直接操作顯卡的顯存,速度較快。
二、視屏播放開發的具體步驟:
1、化布局介面:
android:layout_width="fill_parent"
>
android:orientation="vertical" >
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:textSize="20sp" />
android:id="@+id/et_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
android:id="@+id/play"
android:layout_width="0dip"
>
android:layout_weight="1"
android:text="播放" />
android:id="@+id/pause"
android:layout_width="0dip"
android:layout_height="wrap_content"
>
android:text="暫停" />
android:id="@+id/replay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
>
android:id="@+id/stop"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止" />
//顯示視頻的控制項:
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
2、視頻播放器的 各種操作:
①、播放:
MediaPlayer>
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//擷取SurfaceView對象:
SurfaceView>
//通過SurfaceView 擷取SurfaceHolder 對象
SurfaceHolder>
//指定播放的視頻顯示到那個控制項裡面
mediaPlayer.setDisplay(holder);
//設定播放資源的路徑, 如:/sdcard/oppo.3gp
mediaPlayer.setDataSource(path);
//初始化播放器:
方式一:同步的:
mediaPlayer.prepare();
方式二:非同步:
mediaPlayer.prepareAsync();// 非同步準備
//設定非同步準備完成的監聽器 ,當非同步準備完成後調用裡面的方法:
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public>
>
>
>
>
>
}
③、停止:
private>
//擷取當前播放的位置
>
>
>
>
//通過SurfaceView 擷取SurfaceHolder 對象
SurfaceHolder>
//指定播放的視頻顯示到那個控制項裡面
mediaPlayer.setDisplay(holder);
②、解決方案:要為SurfaceHolder對象設定回呼函數:
Surfaceview>
//設定SurfaceHolder 的回調方法;
sv.getHolder().addCallback(new Callback() {
//當SurfaceHolder被銷毀的時候調用該方法:
>
mediaplater.reset(); //回到Idle狀態
2. 使用setDataSource(); 設定播放的資料來源
3. 底層的c代碼初始化播放器
方式一:mediaplayer.prepare();
同步的方法.
如果沒有準備完畢 不會執行下面的代碼
mediaplayer.start();
方式二:mediaplayer.prepareAsync();
非同步方法,
要想知道什麼時候準備完畢需要註冊onPreparedListener的監聽事件,在準備完畢後會調用內部的onPrepared()方法:
在onPrepared()方法裡面完成視頻的播放.
五、播放線上的視頻檔案:
1、如果我們想線上的播放一個流媒體資源:
要求一定是一個支援漸進式下載的資源檔,就是視頻分為若干個幀的資源,每一個幀都是一個可以被獨立播放的畫面。
2、支援漸進式下載的資源:
3gp 格式的支援http://協議下載
rtsp://>