以下代码用于播放我的远程视频:
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
。
这是什么意思?
以及如何避免它?
答案 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;
}
};