Android中的错误代码(200,-82),MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK

时间:2012-05-28 09:08:10

标签: android android-videoview

以下代码用于播放我的远程视频:

Uri uri = Uri.parse(URLPath);

vv.setVideoURI(uri);
vv.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//play next one
}
});

vv.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});

适用于我的大多数设备 但它在某些设备中不起作用(例如三星Galaxy S2) 我收到错误代码Error (200,-82) 我发现它是MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK。 这是什么意思?
以及如何避免它?

1 个答案:

答案 0 :(得分:2)

正如文档所说,

MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK

  

视频是流式传输的,其容器对渐进式无效   回放,即视频的索引(例如moov atom)不在开头   文件。

MediaPlayer在播放视频时经常会更改为错误状态,然后提示“无法播放此视频”对话框,因此您必须通过记住播放时间并在重置MediaPlayer引擎后重播视频来处理这些错误。

您可以在代码中实现OnErrorListener以处理此类错误:

private MediaPlayer.OnErrorListener mOnErrorListener = new MediaPlayer.OnErrorListener() {

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

   switch (what) {

    case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
         Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_SERVER_DIED",
                                                    Toast.LENGTH_SHORT).show();                         
         return true;
    case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
        Toast.makeText(PlayerActivity.this,
                                            "MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK",
                                                    Toast.LENGTH_SHORT).show();
         break;
     case MediaPlayer.MEDIA_ERROR_UNKNOWN:
         Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_UNKNOWN",
                                                    Toast.LENGTH_SHORT).show();
         break;
        }

         setProgressContainer(true, getString(R.string.msg_handle_error));
        int position=mVideoView.getCurrentPosition();
        if(position>0){
                   mCurPosition=position;
        }
         mVideoView.setVideoPath(mCurrentMediaUrl,position);

         return true;
         }

};