码迷,mamicode.com
首页 > 其他好文 > 详细

mediaplayer

时间:2015-07-16 18:35:07      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

mediaplayer报错  

prepareAsync called in state 1        
是因为在setDataSource之前调用了prepare。因为setDataSource放到了线程里,忘了start(事实证明也不能放到线程中,因为会和prepareAsync异步执行,导致还没setDataSource,就prepareAsync了)
Error (-38, 0) "stop called in state 0"        是因为 比如还没播放,用户就点了返回。没start没prepare,就直接stop了
start called in state 64               因为stop之后直接播放了,没有重新prepare。
 

容易ANR的:reset release setDataSource prepare(所以要用prepareAsync,但是要设置prepared监听,准备完才能播放start)

 

media server died错误,需要实现接口 onErrorListener(on Error())。在what == MediaPlayer.MEDIA_ERROR_SERVER_DIED 时,重新reset,release,置null,然后 new MediaPlayer(), 再从setDataSource开始流程

@Override
    public boolean onError(MediaPlayer mp, int what, int extra) {

       if(what == MediaPlayer.MEDIA_ERROR_SERVER_DIED){
           Log.d("VideoPlayer", "MEDIA_ERROR_SERVER_DIED");
            try{
                reInitVideoPlayer();
            }catch(Exception e){
                
            }finally{
                playVideo(mLoadingImage);
            }
           
       }
       return false;
    }

 

reset()在重置MediaPlayer的时候用,重置完,播放下一首,重新setDataResource prepare start。

release()不是每首歌之后都release,而是最后不用MediaPlayer了。比如在onPause或者 onDestroy里边调用。

mediaplayer

标签:

原文地址:http://www.cnblogs.com/maxiaodoubao/p/4651683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!