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方法開始視頻的播放對象
(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
|
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()
+
"/視頻路徑及文件名後綴"
)));
mediaPlayer.setDisplay(sv.getHolder());
mediaPlayer.prepare();
mediaPlayer.start();
}
catch
(IOException e) {
e.printStackTrace();
}
}
|
|
(5)stop操做的實現
(6)pause操做的實現
1
2
3
4
5
6
|
if
(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
else
{
mediaPlayer.start();
}
|
|
(7)setPosition操做的實現
1
|
mediaPlayer.seekTo(
5000
);
|
|
(8)結果:實現了視頻的播放
SurfaceView的用處遠不在於此,還能夠用於圖形圖像處理當中,咱們明日再續。。不見不散