27

Qualcuno ha provato a utilizzare ExoPlayer per raggiungere questo obiettivo? Ho provato a cercare online senza successo.Android ExoPlayer: risolve il problema della riproduzione senza interruzioni/interruzione che è stata interrotta per Android Media Player

Quando parlo di riproduzione senza pause, mi riferisco al problema dell'utilizzo del lettore multimediale per riprodurre i video locali di nuovo. Dopo aver completato la riproduzione del primo video, si verifica un ritardo notevole di 1 secondo prima dell'avvio del secondo video.

Sperare che questa domanda aiuti a comprendere ulteriormente questo problema. Per riferimento si prega di guardare alla seguente domanda:

Android: MediaPlayer gapless or seamless Video Playing

risposta

1

ExoPlayer 2, che è ora ufficialmente rilasciato, sembra supportare la riproduzione senza pause utilizzando la classe ConcatenatingMediaSource. Da its developer guide:

Le transizioni tra le fonti sono fluide. Non è necessario che le fonti concatenate abbiano lo stesso formato (ad esempio, è sufficiente concatenare un file video contenente 480p H264 con uno che contiene 720p VP9). Le sorgenti possono anche essere di tipi diversi (ad esempio è bene concatenare un video con un flusso solo audio).

E il codice di esempio:

MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...); 
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...); 
// Plays the first video, then the second video. 
ConcatenatingMediaSource concatenatedSource = 
    new ConcatenatingMediaSource(firstSource, secondSource); 
+0

Questo è fantastico. Proverò presto. – LostPuppy

+0

Non è fantastico, per quanto riguarda gli scenari comuni come sto scrivendo un lettore di musica in streaming (per esempio) e quando inizio la prima canzone non so quali saranno i prossimi (l'utente aggiunge alla coda durante la riproduzione) –

0

So che questa non è la risposta che stavate cercando, ma è l'unica risposta ragionevole. L'unico modo per non lasciare spazi vuoti nella riproduzione è scaricare l'intero file per primo e iniziare la riproduzione quando è terminato. Altrimenti, nel caso in cui si perda la connettività prima del completamento del download del file, la sospensione è inevitabile.

+0

Credo che la mia domanda è molto vauge e fuorviante. L'ho aggiornato. Mie scuse. – LostPuppy

0

Ho appena provato a passare a ExoPlayer dall'implementazione di MediaPlayer standard e il divario è lo stesso se non peggio. Tuttavia, ho usato un metodo molto semplice per riavviare il lettore quando lo stato cambia a finito. Non so se c'è un modo migliore per farlo, forse con 2 diversi ExoPlayer.

+0

Interessante. Pubblica un follow-up qui se ti imbatti in un migliore. Grazie – LostPuppy

+1

Ecco qualcuno che prova a lavorare su una soluzione per ExoPlayer: https://github.com/google/ExoPlayer/pull/1070 – Flyview

+0

Ora posso confermare che è possibile avere una riproduzione video senza pause (almeno dello stesso video) con nuova modalità di looping in ExoPlayer2. – Flyview

3

MODIFICA:ExoPlayer 2 supporta la riproduzione senza pause, ma al momento della scrittura è ancora inedito come versione stabile.

Probabilmente non sarai mai in grado di ottenere una perfetta riproduzione senza pause di più tracce con ExoPlayer o Android Media Player. Nessuno dei due è stato scritto per supportare l'avvio di più tracce e immagino che rimarrà fuori portata per entrambi.

È possibile ottenere una riproduzione senza pause utilizzando 2 diverse istanze del lettore, una volta avviato e riprodotto il primo, è possibile caricare il secondo e avviare la riproduzione una volta terminato il primo. Usando questo metodo potresti avere una soluzione senza pause, a patto che tu prepari il secondo video durante la riproduzione del primo.

Per continuare, è possibile utilizzare anche 2 diverse trame di superficie per il rendering di più video, una volta che il primo video raggiunge la fine è possibile sfumare la trama e sfumare in quella nuova. Risultato in un piacevole effetto video senza interruzioni.

A causa della natura di riproduzione di più video contemporaneamente, molto probabilmente si desidera creare il proprio timer per incrementare il tempo e decidere quando passare al video successivo, piuttosto che provare a utilizzare i callback di ExoPlayer o Android Media . Ciò ti consentirà di tenere traccia del tempo in modo più accurato, senza dover continuare a parlare con più codec video.

Problemi correlati