2012-08-22 9 views
7

Próbuję odtwarzać wiele filmów w pętli za pomocą MediaPlayer (Android ICS) i zmieniać filmy za każdym razem, gdy wywoływana jest funkcja oncompletion().setVideoSurfaceTexture nie powiodło się: -22 w odtwarzaczu multimediów

Działa świetnie, ale po losowym czasie zamrożenia aplikacji i pojawia się błąd:

[SurfaceView] connect: już podłączony (bież = 3, req = 3) setVideoSurfaceTexture failed: -22

Kiedy zdarzy ten błąd, to wewnętrznie zadzwonić graczowi wyzerować,

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

zgodnie z moim kodem otrzymuję powiadomienie dla onprepared() i zaczynam grać.

W rzeczywistości nie ma odtwarzania z powodu tego błędu.

Więc próbuję zresetować mediaplayer i zadzwonić do prepare(), gdy wystąpił ten problem, a mediaplayer nie gra, ale nie jestem w stanie uchwycić tego błędu (mp.isPlaying() -> true (bec'z called start() w onprepared()).

próbuję logikę jak

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

jak mogę zlokalizować ten problem, aby ponownie uruchomić mediaplayer ponownie?

Odpowiedz

9

możemy uniknąć tego problemu poprzez następujący sposób. ..

mediaPlayer.setDisplay(null); 

    mediaPlayer.reset(); 

po to ustawić surfaceholder ponownie przed rozpoczęciem mediaplayer

mediaPlayer.setDisplay(surfaceHolder1); 

    mediaPlayer.start(); in onprepared notification. 
Powiązane problemy