2012-08-22 7 views
7

Intento reproducir varios videos en loop utilizando MediaPlayer (Android ICS) y cambio los videos cada vez que se llama oncompletion().setVideoSurfaceTexture failed: -22 en mediaplayer

Funciona muy bien pero después de un tiempo aleatorio la congelación de la aplicación y me sale el error:

[SurfaceView] Conectar: ​​ya conectado (act = 3, req = 3) setVideoSurfaceTexture falló: -22

Cuando ocurre este error, internamente se llama el jugador de reposición

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

según mi código, recibo la notificación de onprepared() y empiezo a jugar.

Actualmente no hay reproducción debido a este error.

Así que intento restablecer el reproductor y llamar a prepare() cuando ocurrió este problema y el reproductor multimedia no se reproduce, pero no puedo capturar este error (mp.isPlaying() -> true (bec'z called start)() en onprepared()).

i tratar la lógica como

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

¿Cómo puedo localizar este error para reiniciar el reproductor multimedia de nuevo?

Respuesta

9

podemos evitar este problema mediante la siguiente manera. ..

mediaPlayer.setDisplay(null); 

    mediaPlayer.reset(); 

después de este ajuste el surfaceholder de nuevo antes de iniciar el reproductor de medios

mediaPlayer.setDisplay(surfaceHolder1); 

    mediaPlayer.start(); in onprepared notification.