Android視頻播放

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

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

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

  (2)在主Activity中完成如下操做:
spa

  ◆聲明VideoView控件及查找到ID線程

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

   ◆設置資源的路徑,這裏咱們把視頻放到了sdCard上,注意得到幾乎全部手機sdCard路徑的方式code

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

   ◆添加系統的控制器視頻

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

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

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

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

  二:將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 = new MediaPlayer();

  (4)start操做的實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void start() {
//重置
mediaPlayer.reset();
try {
// 設置視頻資源
mediaPlayer.setDataSource( this , Uri.fromFile( new File(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的用處遠不在於此,還能夠用於圖形圖像處理當中,咱們明日再續。。不見不散

相關文章
相關標籤/搜索