Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setVideoSurfaceTexture failed : -22 in mediaplayer

I try to play multiple videos in loop using MediaPlayer (Android ICS) and change the videos each time when oncompletion() called.

It works great but after a random time the application freeze and I get the error :

[SurfaceView] connect : already connected (cur=3, req=3) setVideoSurfaceTexture failed : -22

When this error happen, internally it call the reset player

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;
}

as per my code i get the notification for onprepared() and start playing.

Actually there is no playback due to this err.

So i try to reset the mediaplayer and call prepare() when this problem happened and mediaplayer is not playing, but i am not able to capture this bug ( mp.isPlaying()->true (bec'z called start() in onprepared()).

i try the logic like

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

how can i locate this bug to restart the mediaplayer again?

like image 674
Muthuraj Avatar asked Aug 22 '12 11:08

Muthuraj


1 Answers

we can avoid this problem by the following way...

   mediaPlayer.setDisplay(null);

   mediaPlayer.reset();

after this set the surfaceholder again before start the mediaplayer

    mediaPlayer.setDisplay(surfaceHolder1);

    mediaPlayer.start();  in onprepared notification.
like image 154
Muthuraj Avatar answered Oct 01 '22 14:10

Muthuraj