多媒體之播放視訊——VideoView和MediaPlayer(MediaPlayer和SurfaceView結合)
VideoView
一、簡介:
後面講解SurfaceView。
VideoView將視訊的顯示和控制集於一身,它的用法和MediaPlayer很相似,因為VideoView只是做好了一個封裝而已,它的背後仍然是MediaPlayer來對視訊檔案進行的控制。而且VideoView並不是萬能的視訊播放工具,只支援3gp和MP4格式的視訊格式的播放,但如果只是用於播放一些遊戲的片頭動畫,或者某個應用的視訊宣傳,使用VideoView還是綽綽有餘的,但編寫強大的視訊播放器就不太現實了呢。
二、使用:
VideoView的使用非常簡單,佈局只需要新增VideoView元件,設定寬高即可,程式碼中,主要用到下面劃紅線的方法
注:不要忘了加許可權,這裡播放手機中儲存的視訊,需要讀許可權:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
常用的其他方法:
resume():將視訊重頭開始播放。
seekTo()
setVideoPath()
start()
isPlaying()
getDuration()釋放資源:
在onDestroy中需要調研過年suspend()方法,將資源釋放掉。
不過一般我們不使用VideoView來播放視訊,會用到第三方的播放器
三、範例:
功能:播放SD卡下名稱為my.3gp的視訊
MediaView:
讀SD卡的許可權:
MediaPlayer和SurfaceView結合
這裡介紹一下SurfaceView和View的區別:
View:
View必須由UI主執行緒去繪製。SurfaceView:
SurfaceView是自帶繪製執行緒,獨立於UI主執行緒之外;一些遊戲介面,例如五子棋、飛機大戰、貪吃蛇等可以用 SurfaceView來做,視訊的播放也可以用 SurfaceView(此時它是獨立的執行緒來繪製的視訊介面。)
這裡我們僅展示一下SurfaceView中視訊播放這樣一個小功能,和MediaPlayer相結合。
用法:
- 讀許可權:
- 用法:
1)佈局中新增SurfaceView控制元件
2)其他是MediaPlayer的用法,設定資源地址,型別,唯一不同的是需要設定setdisplay,在SurfaceView上進行播放視訊。
範例:
總程式碼:
public class MainActivity extends Activity {
private Button mButtonsurface;
private SurfaceView surface;
private MediaPlayer mediaPlayer;//全域性變數,避免每次點選都建立新物件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonsurface = (Button) findViewById(R.id.buttonsurface);
surface = (SurfaceView) findViewById(R.id.surfaceView);
mButtonsurface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
mediaPlayer.reset();
try {
//設定視訊地址
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/my.3gp");
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//設定播放聲音型別
mediaPlayer.setDisplay(surface.getHolder());//設定在surfaceView上播放
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();//準備需要一段時間,所以用監聽
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
功能:點選按鈕時,相應的視訊在SurfaceView上進行播放。