setVideoSurfaceTexture失败:mediaplayer中的-22



我尝试使用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.

最新更新