2012-08-22 21 views
7

Provo a riprodurre più video in loop utilizzando MediaPlayer (Android ICS) e cambio i video ogni volta che oncompletion() chiama.setVideoSurfaceTexture non riuscito: -22 in mediaplayer

Funziona benissimo, ma dopo un tempo casuale il blocco dell'applicazione e ottengo l'errore:

[SurfaceView] Connect: già collegato (corr = 3, req = 3) setVideoSurfaceTexture non riuscita: -22

Quando questo errore accadere, internamente chiamare il giocatore di reset

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

come da mio codice ottengo la notifica per onprepared() e inizio a giocare.

In realtà non c'è riproduzione a causa di questo errore.

Così provo a reimpostare il mediaplayer e chiamare prepare() quando si è verificato questo problema e il lettore multimediale non sta riproducendo, ma non sono in grado di catturare questo bug (mp.isPlaying() -> true (bec'z chiama start() in onprepared()).

provo la logica come

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

come posso trovare questo bug per riavviare il mediaplayer di nuovo?

risposta

9

possiamo evitare questo problema dal seguente senso. ..

mediaPlayer.setDisplay(null); 

    mediaPlayer.reset(); 

dopo questo impostare il surfaceholder ancora prima di avviare il mediaplayer

mediaPlayer.setDisplay(surfaceHolder1); 

    mediaPlayer.start(); in onprepared notification.