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

Mut*_*raj 8 android surfaceview media-player

我尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)

根据我的代码,我得到onprepared()的通知并开始播放.

实际上由于这个错误没有回放.

因此我尝试重置媒体播放器并在发生此问题并且没有播放媒体播放器时调用prepare(),但我无法捕获此错误(mp.isPlaying() - > true(在preprepared中称为start() ()).

我尝试逻辑

onprepared() {
    mp.start();
    if (pbm : [SurfaceView] connect : already connected (cur=3, req=3)
                                      setVideoSurfaceTexture failed : -22  ) {
        reset the mediaplayer source and call prepare
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到这个bug再次重启媒体播放器?

Mut*_*raj 10

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

   mediaPlayer.setDisplay(null);

   mediaPlayer.reset();
Run Code Online (Sandbox Code Playgroud)

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

    mediaPlayer.setDisplay(surfaceHolder1);

    mediaPlayer.start();  in onprepared notification.
Run Code Online (Sandbox Code Playgroud)