Das folgende Quellcode-Snippet wird angegeben:
%Vor%Ich streame HLS-Streams mit Android 3.x + -Geräten und versuche, einen Ladedialog zu verbergen, sobald die Pufferung abgeschlossen ist. Das Video-Streaming funktioniert, aber die Info-Ereignisse werden nie ausgelöst.
Irgendwelche Ideen?
Ich bin mir nicht ganz sicher, was das OP verlangt, aber hier sind einige sehr frühe Informationen.
Ich würde mich nicht auf onPrepared verlassen. Ich finde es unzuverlässig.
Ich habe herausgefunden, dass die zwei nützlichsten Informationen für HLS-Streaming durch den MediaPlayer die Dauer des Videos und die Fortschrittsposition des Videos sind. Sie erhalten beide, indem Sie Fortschritts-Updates hören.
Wenn die Dauer größer als Null ist, wissen Sie, dass das Video wirklich vorbereitet ist und manipuliert werden kann (Scrub). Wenn sich die Fortschrittsposition ändert, wissen Sie, dass das Video gepuffert ist und mit der Wiedergabe begonnen hat. Dieser letzte Punkt funktioniert nur, wenn das Video natürlich abgespielt wird. Der MediaPlayer neigt dazu, ungenaue Informationen weiterzuleiten.
Diese Informationen sind meistens korrekt und können normalerweise als "ziemlich" zeitgemäß angesehen werden. Diese Aktualität variiert von Gerät zu Gerät.
Ich weiß es zu spät, aber posten es für die Benutzer immer noch auf der Suche nach der Lösung (Das funktionierte für mich):
%Vor% onPrepared
wird aufgerufen, wenn das MediaPlayer
bereit ist, die Pufferung zu starten, nicht wenn das Video vollständig gepuffert ist. Es ist jedoch völlig normal, den Ladedialog innerhalb der Methode onPrepared
zu schließen.
Auch MEDIA_INFO_BUFFERING_END
wird verwendet wenn MediaPlayer
die Wiedergabe nach dem Füllen von Puffern wieder aufnimmt , also denke ich nicht, dass es etwas sein sollte, um den Dialog zu schließen. Also sollte das funktionieren:
Sie können OnPreparedListener in videoView festlegen, da es Ihr Objekt ist, aber wenn Sie die Quelle von VideoView werden Sie feststellen, dass der mMediaPlayer sein privates Mitglied ist, so dass Änderungen, die Sie von extern vornehmen, nicht darauf angewendet werden.
Gemäß Ihrer Anforderung benötigen Sie den Pufferungsstatus, damit Sie einen Thread oder Handler oder etwas haben können, so dass Sie Ihre Benutzeroberfläche aktualisieren können, um den Pufferstatus zu erhalten. Es gibt eine Methode
%Vor%Sie müssen nicht durch setOnInfoListener
gehendurch Überschreiben der Methode setOnPreparedListener ist ausreichend. wie in der api-show
public void setOnPreparedListener (MediaPlayer.OnPreparedListener l)
Registrieren Sie einen Rückruf, der beim Laden der Mediendatei aufgerufen werden soll bereit zu gehen.
Sie können also Ihr Dialogfeld innerhalb der setOnPreparedListener-Methode schließen
gefällt das
%Vor%Wenn Sie das Laden jedes Mal anzeigen möchten, wenn es gepuffert wird (Anfangszeit oder nachfolgende Pufferunterläufe), stellen Sie sicher, dass es erneut angezeigt wird:
%Vor%Also wird diese Ereignissequenz wie gewünscht funktionieren:
%Vor%Aktualisierung:
Dies setzt voraus, dass die Info-Ereignisse funktionieren. Natürlich.
Tags und Links android video-streaming android-mediaplayer