天天看點

android多媒體視訊播放,android多媒體(視訊播放器)

##視訊處理

一丶VideoView控件

點選建立一個播放器并播放視訊

public void play(View view){

vv.setVideoPath(path);

vv.start();

vv.seekTo(currentPositon);//從停的位置開始播放

}

public void pause(View view){

if(vv != null){

//記錄目前播放的位置

currentPositon = vv.getCurrentPosition();

vv.pause();

//重新播放vv.resume();

}

}

public void stop(View view){

if(vv != null){

vv.stopPlayback();

}

}

注://保持不要屏保

vv.setKeepScreenOn(true);

//支援畫中畫的效果

vv.setZOrderMediaOverlay(true);

二丶SurfaceView 表面視圖

可以在别的線程修改更新UI

雙緩沖概念:兩個線程共同作用

适合視訊播放,适合遊戲界面的渲染

SurfaceView重量級控件, 記憶體開銷比較大,cpu開銷比較大,

雙緩沖切換器建立好了

隻有SurfaceView界面使用者可見了。才可以執行邏輯。

如果SurfaceView界面使用者不可見。資源就會被回收。

例:

public class MainActivity extends Activity {

private SurfaceView sfv;

private MediaPlayer mp;

private String path = "視訊的位址";

private SurfaceHolder sh;

private int currentposition ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

sfv = (SurfaceView) findViewById(R.id.sfv);

//surfaceholder控制器,作用:1.維護雙緩沖機制,另一個是控制視訊播放

sh = sfv.getHolder();

//設定一個回掉函數

sh.addCallback(new SurfaceHolder.Callback() {

// 當播放停止的時候調用(點選最小化及退出按鈕時)

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if(mp != null && mp.isPlaying()){

mp.stop();

}

}

//當視訊架構建立時調用

@Override

public void surfaceCreated(SurfaceHolder holder) {

try {

System.out.println("視訊播放器準備好了!");

//執行個體化

mp = new MediaPlayer();

//設定播放路徑

mp.setDataSource(path);

//設定播放器的控制器

mp.setDisplay(sh);

//準備播放

mp.prepareAsync();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

}

});

//不要黑屏

sfv.setKeepScreenOn(true);

//支援畫中畫

sfv.setZOrderMediaOverlay(true);

}

public void play(View view){

if(mp == null){

mp = new MediaPlayer();

try {

//将mp設定為初始狀态

mp.reset();

//設定播放路徑

mp.setDataSource("http://192.168.1.21:8080/video/tianlongbabu.mp4");

//設定播放器

mp.setDisplay(sh);

//準備播放(異步準備)

mp.prepareAsync();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mp.start();

mp.seekTo(currentposition);

}

}

public void pause(View view){

if(mp != null && mp.isPlaying()){

currentposition = mp.getCurrentPosition();

mp.pause();

}

}

public void stop(View view){

if(mp != null && mp.isPlaying()){

currentposition = mp.getCurrentPosition();

mp.stop();

mp.release();

mp = null;

}

}

}