Autore Topic: Usare MediaPlayer::setNextMediaPlayer con 2 video...  (Letto 498 volte)

Offline matttt

Usare MediaPlayer::setNextMediaPlayer con 2 video...
« il: 23 Giugno 2014, 09:20:20 CEST »
0
Sto cercando di usare la funzione setNextMediaPlayer con 2 video.
MediaPlayer | Android Developers

Codice: [Seleziona]
mp0 = new MediaPlayer();
mp1 = new MediaPlayer();
mp0.setDataSource("/mnt/sdcard/video1.mp4");
mp0.setDisplay(holder);  // surface holder set
mp0.prepare();
mp1.setDataSource("/mnt/sdcard/video2.mp4");
//mp1.setDisplay(holder);  // la superficie holder è già in uso, se decommento questa riga in on video size changed ricevo width 0 e height 0
mp1.prepare();
mp0.setNextMediaPlayer( mp1 );
mp0.start();

Così vedo il primo video, poi passa al secondo ma di quello sento solo l'audio.
Il problema mi sembra essere la SurfaceHolder condivisa in sostanza... in alternativa potrei invocare "mp1.setDisplay(holder);" nell' on completed del mp0... ma non so se è un buon metodo.

Qualcuno sa come utilizzare quella funzione?
« Ultima modifica: 23 Giugno 2014, 09:36:58 CEST da matttt »
Le mie apps su Google Play Store:

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Usare MediaPlayer::setNextMediaPlayer con 2 video...
« Risposta #1 il: 23 Giugno 2014, 11:26:07 CEST »
0
No puoi avere due MediaPlayer sulla stessa surface, il motivo mi pare ovvio. Dipende da cosa vuoi fare veramente: o usi la stessa superficie in sequenza, prima con un MediaPlayer, finita la riproduzione liberi la surface e la riutilizzi con il secondo; o usi due surface diversi associati a due MediaPlayer, ma qui dipende dal hardware del dispositivo, la GPU potrebbe non gestire più di una surface o la CPU non reggere due flussi video e audio in contemporanea, troppi dati da elaborare.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline matttt

Re:Usare MediaPlayer::setNextMediaPlayer con 2 video...
« Risposta #2 il: 23 Giugno 2014, 12:08:01 CEST »
0
Con setNextMediaPlayer puoi soltanto impostare video in sequenza (e gapless), che è quello che mi serve.
Se faccio a meno di quella funzione mi funziona eh, però visto che c'è e fornirebbe proprio un playback gapless non mi dispiacerebbe usarla :)

Se devo gestire io il riutilizzo della stessa surface quella funzione non è poi così utile usando 2 video... non pensi?
E nella documentazione non pongono vincoli audio / video riguardo alla modalità gapless:
Android 4.1 APIs | Android Developers

Se usassi 2 surface e le scambiassi (giocando con l'attributo visibility ad esempio)... mi sembra più casino che altro. A quel punto rinuncio a quella funzione.
Comincio a pensare che l'abbiano pensata solo per l'audio... :)
Le mie apps su Google Play Store:

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Usare MediaPlayer::setNextMediaPlayer con 2 video...
« Risposta #3 il: 23 Giugno 2014, 18:40:35 CEST »
0
Non ho mai usato il metodo setNextMediaPlayer, è stato introdotto dal API 16, quindi abbastanza recente.

Dalle ricerche che ho fatto nessuno è riuscito a usarlo con i video, pare solo col audio funziona.

Esiste una segnalazione nel report bug di Android:

https://code.google.com/p/android/issues/detail?id=37181

Credo che devi trovare metodi alternativi come usare due superfici e visualizzarle quando servono.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG