我尝试使用MediaPlayer(Android ICS)循环播放多个视频,每次调用oncomplex()时都会更改视频。
它工作得很好,但在一段随机时间后,应用程序冻结,我得到错误:
[SurfaceView]连接:已连接(cur=3,req=3)setVideoSurfaceTexture失败:-22
当这个错误发生时,它在内部调用重置播放器
参考:mediaplayer.cpp
if (err != OK) {
LOGE("setVideoSurfaceTexture failed: %d", err);
// Note that we must do the reset before disconnecting from the ANW.
// Otherwise queue/dequeue calls could be made on the disconnected
// ANW, which may result in errors.
reset();
disconnectNativeWindow();
return err;
}
根据我的代码,我收到了onprepared()的通知并开始播放。
实际上,由于这个错误,没有播放。
因此,当这个问题发生并且mediaplayer没有播放时,我试图重置mediaplayer并调用prepare(),但我无法捕捉到这个错误(mp.isPlay()->true(bec'z在onprepared()中调用了start()))。
我试试这样的逻辑
onprepared() {
mp.start();
if (pbm : [SurfaceView] connect : already connected (cur=3, req=3)
setVideoSurfaceTexture failed : -22 ) {
reset the mediaplayer source and call prepare
}
}
如何定位此错误以重新启动媒体播放器?
我们可以通过以下方式来避免这个问题。。。
mediaPlayer.setDisplay(null);
mediaPlayer.reset();
在此之后,在启动媒体播放器之前再次设置表面支架
mediaPlayer.setDisplay(surfaceHolder1);
mediaPlayer.start(); in onprepared notification.