在做一个视频播放器,遇到一问题,就是正常可以播放的文件,重新在播放列表中点击的时候,应该会跳到播放界面正常播放,但是有时候点击之后会进到onErrorListener()回调里面,这是什么情况,搞不清楚问题出在哪里,请高人给点思路?

解决方案 »

  1.   

    这是复写的监听
            MediaPlayer.OnErrorListener errorListener = new MediaPlayer.OnErrorListener() {
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    switch (what) {
                    case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                        if (!mQuietMode) {
                            Toast.makeText(MediaPlaybackService.this, R.string.mediaplayer_failed, Toast.LENGTH_SHORT).show();
                        }
                        mIsInitialized = false;
                        mCurrentMediaPlayer.release();
                        if (mNextMediaPlayer != null){
                            mNextMediaPlayer.release();
                        }
                        // Creating a new MediaPlayer and settings its wakemode does not
                        // require the media service, so it's OK to do this now, while the
                        // service is still being restarted
                        mCurrentMediaPlayer = new CompatMediaPlayer(); 
                        mCurrentMediaPlayer.setWakeMode(MediaPlaybackService.this, PowerManager.PARTIAL_WAKE_LOCK);
                        mHandler.sendMessageDelayed(mHandler.obtainMessage(SERVER_DIED), 2000);
                        return true;
                    default:
                        Log.d("MultiPlayer", "Error: " + what + "," + extra);
                        // Reset status of mediaplayer
                        mIsInitialized = false;
                        if (null != mCurrentMediaPlayer) {
                            mCurrentMediaPlayer.reset();
                        }
                        if (null != mNextMediaPlayer) {
                            mNextMediaPlayer.reset();
                        }                    if (!mQuietMode) {
                            Toast.makeText(MediaPlaybackService.this, R.string.unknown_failed, Toast.LENGTH_SHORT).show();
                        }
                        break;
                    }
                    return false;
               }
            };
      

  2.   

    FYI------如不支持的音频/视频格式,缺少隔行扫描的音频/视频,分辨率太高,流超时等原因,等等。因此,错误报告和恢复在这种情况下是非常重要的。有时,由于编程错误,在处于无效状态的情况下调用了一个播放控制操作可能发生。在所有这些错误条件下,内部的播放引擎会调用一个由客户端程序员提供的OnErrorListener.onError()方法。
      

  3.   

    reset()一个 Mediaplay对象时会有触发onError()的概率...