27

Hat jemand versucht, ExoPlayer zu verwenden, um dies zu erreichen? Ich habe versucht, online ohne Erfolg zu suchen.Android ExoPlayer: Löst es lückenloses/nahtloses Wiedergabeproblem, das für den Android Media Player defekt ist

Wenn ich sage lückenlose Wiedergabe, beziehe ich mich auf das Problem der Verwendung des Media Players, um lokale Videos Rücken an Rücken zu spielen. Nachdem das erste Video abgespielt wurde, dauert es eine Sekunde, bis das zweite Video startet.

In der Hoffnung, dass diese Frage hilft, dieses Problem weiter zu verstehen. als Referenz betrachten Sie bitte die folgenden Fragen:

Android: MediaPlayer gapless or seamless Video Playing

Antwort

1

ExoPlayer 2, die jetzt offiziell freigegeben ist, scheint eine lückenlose Wiedergabe mit der ConcatenatingMediaSource Klasse zu unterstützen. Von its developer guide:

Übergänge zwischen Quellen sind nahtlos. Es ist nicht erforderlich, dass die verketteten Quellen das gleiche Format aufweisen (z. B. ist es gut, eine Videodatei, die 480p H264 enthält, mit einer zu verketten, die 720p VP9 enthält). Die Quellen können sogar unterschiedliche Typen aufweisen (z. B. ist es gut, ein Video mit einem Nur-Audio-Stream zu verketten).

Und der Beispielcode:

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

Das ist großartig. Werde es bald ausprobieren. – LostPuppy

+0

Das ist nicht genial, was ist mit üblichen Szenarien wie ich schreibe einen Streaming-Musik-Player (zum Beispiel) und wenn ich den ersten Song ich weiß nicht, welche Songs werden als nächstes (Benutzer fügt in die Warteschlange während der Wiedergabe) –

0

Ich weiß, dass dies nicht die Antwort ist, dass Sie gesucht haben, aber es ist die einzige vernünftige Antwort. Der einzige Weg, um keine Lücken in der Wiedergabe zu bekommen, besteht darin, zuerst die gesamte Datei herunterzuladen und die Wiedergabe zu starten, wenn sie fertig ist. Andernfalls, wenn Sie die Verbindung verlieren, bevor die Datei heruntergeladen wurde, ist das Anhalten unausweichlich.

+0

Ich denke, meine Frage sehr vauge ist und irreführend. Ich habe es aktualisiert. Entschuldigen Sie. – LostPuppy

0

Ich habe gerade versucht, von der Standard-MediaPlayer-Implementierung zum ExoPlayer zu wechseln und die Lücke ist die gleiche, wenn nicht sogar schlimmer. Allerdings habe ich eine sehr einfache Methode zum Neustart des Players verwendet, wenn der Status zu Ende geht. Ich weiß nicht, ob es einen besseren Weg gibt, vielleicht mit zwei verschiedenen ExoPlayern.

+0

Interessant. Veröffentlichen Sie hier ein Follow-up, wenn Sie ein besseres finden. Danke – LostPuppy

+1

Hier ist jemand, der versucht, an einer Lösung für ExoPlayer zu arbeiten: https://github.com/google/ExoPlayer/pull/1070 – Flyview

+0

Ich kann jetzt bestätigen, dass Sie eine lückenlose Videowiedergabe (mindestens des gleichen Videos) mit der haben können neuer Looping-Modus im ExoPlayer2 – Flyview

3

EDIT:ExoPlayer 2 unterstützt lückenlose Wiedergabe, aber seit der Zeit des Schreibens ist noch unveröffentlicht als stabile Version.

Sie werden mit ExoPlayer oder Android Media Player wahrscheinlich nie die perfekte lückenlose Wiedergabe mehrerer Tracks erreichen. Weder wurde geschrieben, um das Starten mehrerer Tracks zu unterstützen, und ich kann mir vorstellen, dass es für beide nicht in Betracht kommt.

Sie können eine lückenlose Wiedergabe erreichen, indem Sie zwei verschiedene Player-Instanzen verwenden. Sobald Sie die erste Instanz gestartet und abgespielt haben, können Sie die zweite laden und die Wiedergabe starten. Mit dieser Methode können Sie eine lückenlose Lösung haben, solange Sie das zweite Video während der Wiedergabe des ersten vorbereiten.

Um es weiter zu bringen, können Sie auch zwei verschiedene Oberflächenstrukturen für das Rendern der mehreren Videos verwenden, sobald das erste Video das Ende erreicht hat, können Sie die Textur ausblenden und die neue ausblenden. Daraus resultiert ein schöner nahtloser Videoeffekt.

Da mehrere Videos gleichzeitig abgespielt werden, möchten Sie höchstwahrscheinlich einen eigenen Timer erstellen, um die Zeit zu erhöhen und zu entscheiden, wann Sie zum nächsten Video wechseln, anstatt die Rückrufe von ExoPlayer oder Android Media zu verwenden . Auf diese Weise können Sie die Zeit genauer verfolgen, ohne mit mehreren Video-Codecs sprechen zu müssen.