標籤:android 多媒體 視頻播放器 null public
##視頻處理
一丶VideoView控制項
點擊建立一個播放器並播放視頻
/**
* 播放視頻
* @param view
*/
public void play(View view){
vv.setVideoPath(path);
vv.start();
vv.seekTo(currentPositon);//從停的位置開始播放
}
/**
* 暫停播放
* @param view
*/
public void pause(View view){
if(vv != null){
//記錄當前播放的位置
currentPositon = vv.getCurrentPosition();
vv.pause();
//重新播放vv.resume();
}
}
/**
* 停止播放
* @param view
*/
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);
}
/**
* 開始播放
* @param view
*/
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);
}
}
/**
* 暫停
* @param view
*/
public void pause(View view){
if(mp != null && mp.isPlaying()){
currentposition = mp.getCurrentPosition();
mp.pause();
}
}
/**
* 停止播放
* @param view
*/
public void stop(View view){
if(mp != null && mp.isPlaying()){
currentposition = mp.getCurrentPosition();
mp.stop();
mp.release();
mp = null;
}
}
}
本文出自 “android筆記” 部落格,請務必保留此出處http://2585211.blog.51cto.com/10044233/1672671
android多媒體(視頻播放器)