2

Ich habe eine kleine App entwickelt, die kleine Videos aufnehmen und abspielen kann (bis zu 10 Sekunden). Die App zeichnet Videos mit 6 Mbps auf. Um eine schnellere Videowiedergabe zu gewährleisten, versuche ich HLS (http Livestreaming) zu implementieren. Aber mir ist aufgefallen, dass die App immer zuerst den Stream mit der niedrigsten Bitrate aufnimmt und erst nach 10 Sekunden auf den besten verfügbaren Stream (basierend auf der Netzwerkbandbreite) umschaltet.HLS adaptive Streaming in Android ändert Streams nur nach 10 Sekunden?

Ich habe verschiedene Media Player wie Android Media Player, exoplayer usw. getestet, aber das Verhalten ist konsistent. Das Video ändert die Streams erst nach genau 10 Sekunden. Ist dies die Standard-Implementierung von hls in Android? oder vermisse ich etwas? Die m3u8 I Test verwendete http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

 localUrl = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; 
     vidView.setVideoPath(localUrl); 
     Log.i("GenericRequest", "VideoUrl " + localUrl); 
     vidView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
      vidView.start(); 
      } 
     }); 

Antwort

6

Wenn man sich die Inhalte der in bipbopall.m3u8 aufgeführt Wiedergabelisten suchen, werden Sie sehen, dass die Segmentdauer 10 Sekunden beträgt. Dies erklärt wahrscheinlich, warum Sie den Schalter nach 10 Sekunden sehen.

Der Player lädt die unter bipbopall.m3u8 aufgelistete erste Wiedergabeliste herunter, die in diesem Fall der Stream mit der niedrigsten Bitrate ist, und beginnt mit der Wiedergabe des ersten Segments. Anschließend wird berechnet, dass zusätzliche Bandbreite verfügbar ist, sodass zu einem Stream mit höherer Bitrate gewechselt wird.

Wenn die Segmentdauer unterschiedlich ist, wird der Switch wahrscheinlich zu einem anderen Zeitpunkt angezeigt.