setVideoSurfaceTexture失败:媒体播放器中的-22

时间:2012-08-22 11:45:46

标签: android media-player surfaceview

我尝试使用MediaPlayer(Android ICS)循环播放多个视频,并在每次调用oncompletion()时更改视频。

它工作得很好但是随机时间之后应用程序冻结并且我得到了错误:

  

[SurfaceView]连接:已连接(cur = 3,req = 3)   setVideoSurfaceTexture失败:-22

发生此错误时,会在内部调用重置播放器

ref: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()的通知并开始播放。

实际上由于这个错误而没有播放。

所以我尝试重置媒体播放器并在发生此问题并且没有播放媒体播放器时调用prepare(),但我无法捕获此错误(mp.isPlaying() - > true(bec'z called start ()inprepreared())。

我尝试像

这样的逻辑
onprepared() {
    mp.start();
    if (pbm : [SurfaceView] connect : already connected (cur=3, req=3)
                                      setVideoSurfaceTexture failed : -22  ) {
        reset the mediaplayer source and call prepare
    }
}

如何找到此错误以重新启动媒体播放器?

1 个答案:

答案 0 :(得分:10)

我们可以通过以下方式避免这个问题...

   mediaPlayer.setDisplay(null);

   mediaPlayer.reset();

之后再次启动媒体播放器

之前再设置Surfaceholder
    mediaPlayer.setDisplay(surfaceHolder1);

    mediaPlayer.start();  in onprepared notification.