8

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

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

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

当这个错误发生时,它会在内部调用重置播放器

参考:媒体播放器.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 在 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
    }
}

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

4

1 回答 1

10

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

   mediaPlayer.setDisplay(null);

   mediaPlayer.reset();

在此之后再次设置surfaceholder,然后再启动媒体播放器

    mediaPlayer.setDisplay(surfaceHolder1);

    mediaPlayer.start();  in onprepared notification.
于 2012-08-28T12:16:17.223 回答