2017-01-23 3 views
0

Ich habe eine ExoPlayer-Instanz und eine Suchleiste. Wenn der Nutzer sucht, möchte ich ExoPlayer.seekTo() verwenden, um die Position des Videos zu aktualisieren.Exoplayer - kannst du während der Pufferung seekTo() aufrufen?

Können Sie ExoPlayer.seekTo() so oft wie Sie möchten anrufen, und es sollte behandeln Abbrechen vorherige seekTo() Anfragen, wenn sie nicht fertig sind? Oder müssen wir verhindern, dass sich seekTo() Anrufe selbst überlappen?

Dank

Antwort

0

Können Sie ExoPlayer.seekTo() aufrufen, so oft wie Sie wollen, und es sollte Cancelling vorherigen seekTo() Anfragen bearbeiten, wenn sie nicht fertig sind? Oder müssen wir verhindern, dass sich ovelapping seekTo() selbst aufruft?

Ich denke, Sie könnten.

Es wird NICHT vorherige Suchanfrage abbrechen. Tatsächlich sind mindestens drei Threads in einem Suchprozess involviert. enter image description here

  1. Anwendung thread: es ist der rote Faden Sie ExoPlayer.seekTo() aufrufen.
  2. interne Wiedergabe Thread: es ist der Thread zum Festlegen der Zielposition & interne Einstellungen zu EXOplayer intern tun; as seekToInternal(), seekToPeriodPosition() und seekToPeriodPosition() ... so der Klasse ExoPlayerImplInternal.
  3. der Lade-Thread: Sie können es in load.java finden. Wenn Schritt 2 der interne Wiedergabethread die Einstellung vorgenommen hat, ruft er continueLoading() auf, damit der Lade-Thread Zieldaten um das Suchziel herum herunterladen kann.

Sobald interne Wiedergabe Thread die Handhabung einer Suchaktion getan hat, kann es die Wirkung von doSomeWork ordnen, wenn dort zu sehen versucht werden decodiert Rahmen gerendert werden (oder übersprungen). Wenn das Suchziel gerendert wird, können Sie den Moment des Suchziels auf dem Display sehen.

Kurz gesagt, Sie können die nächste Suche erneut drücken (liefern), sobald die vorherige Suchaktion (z. B. ExoPlayer.seekTo()) die entsprechende Nachricht in die Nachrichtenwarteschlange von internalPlaybackThread gesendet hat. Die Suchaktionen sind serialisiert und in der Reihenfolge von internen Wiedergabe Thread behandelt.

Sobald der interne Wiedergabethread eine Suchnachricht abruft & hat es behandelt. Der Lade-Thread beginnt zu laden. Wenn Sie herunterladen, demux & entschlüsseln schnell genug sowie gibt es eine DoSomeWork vor dem nächsten Suchvorgang, können Sie das Suchergebnis sehen. Andernfalls wird der nächste Suchvorgang beendet. & Suche erneut (in diesem Fall sieht es so aus, als ob die vorherige Suche abgebrochen ist).

Als Ergebnis hängt es davon ab, wie schnell Sie eine konsekutive Suchaktion und die Ausführungssequenz intern liefern.

Verwandte Themen