您的位置:首页 > 移动开发 > Android开发

android MediaPlayer 简记

2015-06-10 08:03 549 查看

基本用法

1.开一个线程完成耗时操作

new Thread(){
public void run(){
initPlayer(i);
}
}.start();


开启MediaPlayer的时候,由于需要调用底层native方法做硬件初始化,所以直接把初始化方法放到线程中


2.开启操作

* 注意holder的创建,需要底层native函数反应,是异步事件

* player本身准备也要调用native函数,是异步事件

异步事件必须等待处理完毕后再使用相关方法,否则容易出现播不出来(黑屏)的现象

private void initPlayer(int i){

isTimeOut = false;

//最好延时一下
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}

if(i >= videoPath.length){
return ;
}

if(TextUtils.isEmpty(videoPath[i])){
return;
}

try {
//由于这个方法需要反复调用,每次reset复位
player.reset();

//设置要播放的资源
player.setDataSource(videoPath[i]);

//准备播放
player.prepareAsync();

//获取一个holder, 内部应该是个异步事件,不能当下获取holder
final SurfaceHolder holder = sfv.getHolder();
holder.addCallback(new Callback() {

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {

}
});
//******创建holder完延时一下
SystemClock.sleep(40);

//此处如果直接设置holder,可能会导致异常,结果是没有办法载入画面
//player.setDisplay(holder);

//等待底层工作完毕后 开始播放
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {

if(isTimeOut == false){
//******硬件初始化完毕后*******
//******最后再设置holder******
player.setDisplay(holder);
//******开始播放*********
player.start();

currentPosition = 0;       //重置播放位置
ThreadUtils.runUIThread(new Runnable(){
@Override
public void run() {
pb_wait.setVisibility(View.GONE);   //加载完毕后让View消失
}
});
}
}
});

} catch (Exception e) {
e.printStackTrace();
}
}


3.暂停&继续

暂停

//计算当前进度条所在位置
currentPosition = player.getCurrentPosition();
int totle = player.getDuration();
sb_prograss.setProgress((int)((((float)currentPosition)/totle)*100));         //将当前进度赋值给进度条

//System.out.println("**********stop********"+currentPosition+"*********************");
player.pause();


继续

player.seekTo(currentPosition);
player.start();


4.释放资源

player.stop();
player.release();
player = null;    //最好把player置位为null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: