diff options
author | Jan Schmidt <jan@centricular.com> | 2016-03-09 03:07:22 +1100 |
---|---|---|
committer | Jan Schmidt <jan@centricular.com> | 2016-08-03 23:49:54 +1000 |
commit | f3397e0d547fbb2ecc3d5fb4cbc87b9f6d6aa23e (patch) | |
tree | 3805e1e1bc995b16074036438275d27bfbbdf0c1 /ext/hls/m3u8.c | |
parent | 4df6f1ee930af0ec7961ade57e21bd904f199fa9 (diff) | |
download | gstreamer-plugins-bad-f3397e0d547fbb2ecc3d5fb4cbc87b9f6d6aa23e.tar.gz |
hlsdemux: Choose the default variant and track it when updating
Modify playlist updating to track information across updates
better, although still hackish.
When connection_speed == 0, choose the default variant
not the first one in the (now sorted) variant list, as that
will have the lowest bitrate.
Diffstat (limited to 'ext/hls/m3u8.c')
-rw-r--r-- | ext/hls/m3u8.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c index 0f327adc1..db5d89855 100644 --- a/ext/hls/m3u8.c +++ b/ext/hls/m3u8.c @@ -1552,6 +1552,29 @@ gst_hls_variant_stream_is_live (GstHLSVariantStream * variant) return is_live; } +static gint +compare_media (const GstHLSMedia * a, const GstHLSMedia * b) +{ + return strcmp (a->name, b->name); +} + +GstHLSMedia * +gst_hls_variant_find_matching_media (GstHLSVariantStream * stream, + GstHLSMedia * media) +{ + GList *mlist = stream->media[media->mtype]; + GList *match; + + if (mlist == NULL) + return NULL; + + match = g_list_find_custom (mlist, media, (GCompareFunc) compare_media); + if (match == NULL) + return NULL; + + return match->data; +} + GstHLSVariantStream * gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist * playlist, GstHLSVariantStream * current_variant, guint bitrate) @@ -1574,3 +1597,15 @@ gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist * return variant; } + +GstHLSVariantStream * +gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist, + GstHLSVariantStream * current_variant) +{ + if (current_variant->iframe) { + return find_variant_stream_by_uri (playlist->iframe_variants, + current_variant->uri); + } + + return find_variant_stream_by_uri (playlist->variants, current_variant->uri); +} |