Android視頻播放

   Android中的音頻播放使用的是MediaPlayer類,但是這個類沒有提供視頻畫面的播放位置,所以這裏視頻的播放顯得略有不同,大致分爲兩種播放方式:直接調用系統的VideoView播放視頻或者利用Mediaplayer與SurfaceView的結合使用達到視頻播放。    

  一:直接利用系統的VideoView實現的視頻播放

  (1)在主界面上拖拽一個VideoView控件

  (2)在主Activity中完成以下操作:

  ◆聲明VideoView控件及查找到ID

1
vv = (VideoView) findViewById(R.id.videoView1);

   ◆設置資源的路徑,這裏我們把視頻放到了sdCard上,注意獲得幾乎所有手機sdCard路徑的方式

1
2
//設置視頻的路徑
vv.setVideoURI(Uri.fromFile(newFile(Environment.getExternalStorageDirectory().getAbsoluteFile()+"/視頻的播放路徑及文件名")));

   ◆添加系統的控制器

1
2
//添加系統的控制器,能出現快進快退等控制條
vv.setMediaController(newMediaController(this));

   ◆調用start方法開始視頻的播放

1
2
//開始播放視頻
vv.start();

  (3)結果:調用系統的VideoView完成視頻的播放

  二:將MediaPlayer與SurfaceView結合實現視頻播放

   1:SurfaceView

  一般情況下,我們會把繪製圖形等操作放在主UI中操作,這樣主UI不僅要處理繪製操作,還要處理用戶的其他單擊操作等,這樣未免顯得過於臃腫。因此,對於SurfaceView的提出,就是把這樣的一些耗時操作放到另外一個單獨的線程中去完成的過程。

  他提供了一個Surface,並可以通過控制器SurfaceHolder去控制Surface的操作。通過getHolder方法可以獲得控制器對象。需要重寫的幾個方法如下

  (1)surfaceCreated方法:當Surfaceview第一次創建的時候出發的方法,主要完成初始化的工作,一般不要在這裏完成繪製操作。

  (2)surfaceChanged方法:當Surface的狀態發生變化時,觸發的方法

  (3)surfaceDestroyed方法:當Surface銷燬前觸發的狀態,用於清理資源

  2:視頻的播放

  (1)在主界面上拖拽一個surfaceview,下面擺放四個按鈕,用來自己定義控制視頻的播放

  (2)獲得控制器對象,設置相應的屬性

1
2
//SurfaceView自己不管理緩衝區,讓頻幕渲染器引擎自動管理視頻到用戶面前
sv.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

  (3)實例化MediaPlayer對象

1
mediaPlayer = newMediaPlayer();

  (4)start操作的實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
publicvoidstart() {
//重置
mediaPlayer.reset();
try{
// 設置視頻資源
mediaPlayer.setDataSource(this, Uri.fromFile(newFile(Environment
.getExternalStorageDirectory().getAbsoluteFile()
+ "/視頻路徑及文件名後綴")));
// 設置視頻顯示的位置,這裏是在surfaceView上
mediaPlayer.setDisplay(sv.getHolder());
// 準備資源
mediaPlayer.prepare();
// 啓動視頻
mediaPlayer.start();
} catch(IOException e) {
e.printStackTrace();
}
}

  (5)stop操作的實現

1
mediaPlayer.stop();//停止視頻

  (6)pause操作的實現

1
2
3
4
5
6
// 視頻是否在播放
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();// 是就停止
} else{
mediaPlayer.start();// 不是就開始
}

  (7)setPosition操作的實現

1
mediaPlayer.seekTo(5000);// 跳到5000毫秒的位置,不論你現在在哪個位置上

  (8)結果:實現了視頻的播放


  SurfaceView的用處遠不在於此,還可以用於圖形圖像處理當中,我們明日再續。。不見不散


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章