[vlc-devel] [PATCH 08/48] hls: Choose best stream

Hugo Beauzée-Luyssen beauze.h at gmail.com
Mon Jan 9 16:16:17 CET 2012


From: Luc Saillard <luc.saillard at sfr.com>

---
 modules/stream_filter/httplive.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index 35d5da2..ff386ce 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -1373,7 +1373,7 @@ static int hls_ReloadPlaylist(stream_t *s)
         return VLC_ENOMEM;
 
     int count = vlc_array_count(p_sys->hls_stream);
-    for (int n = 0; n < count; n++)
+    for (int n = p_sys->playback.stream; n < count; n++)
     {
         int err;
         hls_stream_t *hls = vlc_array_item_at_index(p_sys->hls_stream, n);
@@ -1424,6 +1424,26 @@ fail:
     return VLC_EGENERIC;
 }
 
+static void hls_ChooseDefaultStream(stream_sys_t *p_sys)
+{
+        uint64_t current_bw = 0;
+	unsigned int n;
+	unsigned int stream = 0;
+
+        int count = vlc_array_count(p_sys->hls_stream);
+        for (n = 0; n < count; n++)
+        {
+                hls_stream_t *hls = hls_Get(p_sys->hls_stream, n);
+                if (hls && hls->bandwidth > current_bw) {
+			stream = n;
+                        current_bw = hls->bandwidth;
+                }
+        }
+	p_sys->playback.stream = stream;
+	p_sys->download.stream = stream;
+}
+
+
 /****************************************************************************
  * hls_Thread
  ****************************************************************************/
@@ -1506,6 +1526,9 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
     msg_Info(s, "downloaded segment %d from stream %d",
                 segment->sequence, *cur_stream);
 
+    /* Do not change bandwidth */
+    return VLC_SUCCESS;
+
     /* check for division by zero */
     double ms = (double)duration / 1000.0; /* ms */
     if (ms <= 0.0)
@@ -1924,7 +1947,8 @@ static int Open(vlc_object_t *p_this)
     free(buffer);
 
     /* Choose first HLS stream to start with */
-    int current = p_sys->playback.stream = 0;
+    hls_ChooseDefaultStream(p_sys);
+    int current = p_sys->playback.stream;
     p_sys->playback.segment = p_sys->download.segment = ChooseSegment(s, current);
 
     /* manage encryption key if needed */
-- 
1.7.8.3




More information about the vlc-devel mailing list