Lines Matching refs:demux
78 static gboolean gst_hls_demux_update_playlist (GstHLSDemux * demux,
83 static gboolean gst_hls_demux_change_playlist (GstHLSDemux * demux,
85 static GstBuffer *gst_hls_demux_decrypt_fragment (GstHLSDemux * demux,
92 static gboolean gst_hls_demux_is_live (GstAdaptiveDemux * demux);
93 static GstClockTime gst_hls_demux_get_duration (GstAdaptiveDemux * demux);
95 demux);
96 static gboolean gst_hls_demux_process_manifest (GstAdaptiveDemux * demux,
98 static GstFlowReturn gst_hls_demux_update_manifest (GstAdaptiveDemux * demux);
99 static gboolean gst_hls_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek);
104 gst_hls_demux_start_fragment (GstAdaptiveDemux * demux,
106 static GstFlowReturn gst_hls_demux_finish_fragment (GstAdaptiveDemux * demux,
108 static GstFlowReturn gst_hls_demux_data_received (GstAdaptiveDemux * demux,
119 static void gst_hls_demux_reset (GstAdaptiveDemux * demux);
120 static gboolean gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux,
128 static gboolean gst_hls_demux_get_bitrate_info(GstAdaptiveDemux * demux,
145 GstHLSDemux *demux = GST_HLS_DEMUX (obj); in gst_hls_demux_finalize() local
147 gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux)); in gst_hls_demux_finalize()
148 g_mutex_clear (&demux->keys_lock); in gst_hls_demux_finalize()
149 if (demux->keys) { in gst_hls_demux_finalize()
150 g_hash_table_unref (demux->keys); in gst_hls_demux_finalize()
151 demux->keys = NULL; in gst_hls_demux_finalize()
219 gst_hls_demux_init (GstHLSDemux * demux) in gst_hls_demux_init() argument
221 gst_adaptive_demux_set_stream_struct_size (GST_ADAPTIVE_DEMUX_CAST (demux), in gst_hls_demux_init()
224 demux->keys = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); in gst_hls_demux_init()
225 g_mutex_init (&demux->keys_lock); in gst_hls_demux_init()
232 GstHLSDemux *demux = GST_HLS_DEMUX (element); in gst_hls_demux_change_state() local
236 gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux)); in gst_hls_demux_change_state()
246 gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux)); in gst_hls_demux_change_state()
247 g_hash_table_remove_all (demux->keys); in gst_hls_demux_change_state()
271 GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (hlsdemux); in gst_hls_demux_get_bitrate() local
278 if (demux->streams) { in gst_hls_demux_get_bitrate()
279 GstAdaptiveDemuxStream *stream = demux->streams->data; in gst_hls_demux_get_bitrate()
301 GstAdaptiveDemux *demux = (GstAdaptiveDemux *) hlsdemux; in gst_hls_demux_clear_all_pending_data() local
304 for (walk = demux->streams; walk != NULL; walk = walk->next) { in gst_hls_demux_clear_all_pending_data()
346 gst_hls_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek) in gst_hls_demux_seek() argument
348 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_seek()
366 old_rate = demux->segment.rate; in gst_hls_demux_seek()
378 gst_uri_downloader_reset (demux->downloader); in gst_hls_demux_seek()
397 gst_uri_downloader_reset (demux->downloader); in gst_hls_demux_seek()
415 for (walk = demux->streams; walk; walk = g_list_next (walk)) { in gst_hls_demux_seek()
429 gst_segment_do_seek (&demux->segment, rate, format, flags, start_type, in gst_hls_demux_seek()
432 gst_segment_do_seek (&demux->segment, rate, format, flags, start_type, in gst_hls_demux_seek()
497 if (GST_CLOCK_TIME_IS_VALID(stream->demux->slice_position)) { in gst_hls_demux_stream_seek()
498 stream->demux->slice_position = GST_CLOCK_TIME_NONE; in gst_hls_demux_stream_seek()
519 gst_hls_demux_update_manifest (GstAdaptiveDemux * demux) in gst_hls_demux_update_manifest() argument
521 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_update_manifest()
529 create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist, in create_stream_for_playlist() argument
532 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in create_stream_for_playlist()
538 GST_LOG_OBJECT (demux, "Ignoring not-selected stream"); in create_stream_for_playlist()
542 GST_DEBUG_OBJECT (demux, in create_stream_for_playlist()
546 stream = gst_adaptive_demux_stream_new (demux, in create_stream_for_playlist()
561 find_adaptive_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist) in find_adaptive_stream_for_playlist() argument
565 GST_DEBUG_OBJECT (demux, "Looking for existing stream for '%s' %s", in find_adaptive_stream_for_playlist()
568 for (tmp = demux->streams; tmp; tmp = tmp->next) { in find_adaptive_stream_for_playlist()
584 new_variant_is_compatible (GstAdaptiveDemux * demux) in new_variant_is_compatible() argument
586 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in new_variant_is_compatible()
591 GST_DEBUG_OBJECT (demux, in new_variant_is_compatible()
597 GST_LOG_OBJECT (demux, "Number of medias for type %s don't match", in new_variant_is_compatible()
606 GST_LOG_OBJECT (demux, in new_variant_is_compatible()
619 GST_LOG_OBJECT (demux, in new_variant_is_compatible()
628 GST_DEBUG_OBJECT (demux, "Variants are compatible"); in new_variant_is_compatible()
634 gst_hls_demux_setup_streams (GstAdaptiveDemux * demux) in gst_hls_demux_setup_streams() argument
636 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_setup_streams()
641 GST_WARNING_OBJECT (demux, "Can't configure streams - no variant selected"); in gst_hls_demux_setup_streams()
645 GST_DEBUG_OBJECT (demux, "Setting up streams"); in gst_hls_demux_setup_streams()
647 new_variant_is_compatible (demux)) { in gst_hls_demux_setup_streams()
649 GST_DEBUG_OBJECT (demux, "Have a previous variant, Re-using streams"); in gst_hls_demux_setup_streams()
653 find_adaptive_stream_for_playlist (demux, in gst_hls_demux_setup_streams()
670 GST_FIXME_OBJECT (demux, "Handle new stream !"); in gst_hls_demux_setup_streams()
674 GST_DEBUG_OBJECT (demux, "Identical stream !"); in gst_hls_demux_setup_streams()
678 find_adaptive_stream_for_playlist (demux, old_media->playlist); in gst_hls_demux_setup_streams()
682 GST_DEBUG_OBJECT (demux, "Found matching stream"); in gst_hls_demux_setup_streams()
686 GST_DEBUG_OBJECT (demux, "Skipping stream of type %s", in gst_hls_demux_setup_streams()
701 create_stream_for_playlist (demux, playlist->m3u8, TRUE, TRUE); in gst_hls_demux_setup_streams()
711 GST_LOG_OBJECT (demux, "Skipping stream %s type %s with no URI", in gst_hls_demux_setup_streams()
716 GST_LOG_OBJECT (demux, "media of type %s - %s, uri: %s", in gst_hls_demux_setup_streams()
718 create_stream_for_playlist (demux, media->playlist, FALSE, in gst_hls_demux_setup_streams()
731 GST_ERROR_OBJECT (demux, "Should not happen ! Could not find old stream"); in gst_hls_demux_setup_streams()
801 gst_hls_demux_process_manifest (GstAdaptiveDemux * demux, GstBuffer * buf) in gst_hls_demux_process_manifest() argument
804 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_process_manifest()
807 GST_INFO_OBJECT (demux, "Initial playlist location: %s (base uri: %s)", in gst_hls_demux_process_manifest()
808 demux->manifest_uri, demux->manifest_base_uri); in gst_hls_demux_process_manifest()
812 GST_WARNING_OBJECT (demux, "Error validating initial playlist"); in gst_hls_demux_process_manifest()
818 gst_adaptive_demux_get_manifest_ref_uri (demux)); in gst_hls_demux_process_manifest()
824 GST_ELEMENT_ERROR (demux, STREAM, DECODE, ("Invalid playlist."), in gst_hls_demux_process_manifest()
831 if (demux->connection_speed == 0) { in gst_hls_demux_process_manifest()
836 NULL, demux->connection_speed); in gst_hls_demux_process_manifest()
849 GST_ELEMENT_ERROR_FROM_ERROR (demux, "Could not fetch media playlist", in gst_hls_demux_process_manifest()
857 return gst_hls_demux_setup_streams (demux); in gst_hls_demux_process_manifest()
861 gst_hls_demux_get_duration (GstAdaptiveDemux * demux) in gst_hls_demux_get_duration() argument
863 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_get_duration()
873 gst_hls_demux_is_live (GstAdaptiveDemux * demux) in gst_hls_demux_is_live() argument
875 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_is_live()
885 gst_hls_demux_get_key (GstHLSDemux * demux, const gchar * key_url, in gst_hls_demux_get_key() argument
893 GST_LOG_OBJECT (demux, "Looking up key for key url %s", key_url); in gst_hls_demux_get_key()
895 g_mutex_lock (&demux->keys_lock); in gst_hls_demux_get_key()
897 key = g_hash_table_lookup (demux->keys, key_url); in gst_hls_demux_get_key()
900 GST_LOG_OBJECT (demux, "Found key for key url %s in key cache", key_url); in gst_hls_demux_get_key()
904 GST_INFO_OBJECT (demux, "Fetching key %s", key_url); in gst_hls_demux_get_key()
907 gst_uri_downloader_fetch_uri (GST_ADAPTIVE_DEMUX (demux)->downloader, in gst_hls_demux_get_key()
911 GST_WARNING_OBJECT (demux, "Failed to download key to decrypt data: %s", in gst_hls_demux_get_key()
921 GST_WARNING_OBJECT (demux, "Download decryption key is too short!"); in gst_hls_demux_get_key()
923 g_hash_table_insert (demux->keys, g_strdup (key_url), key); in gst_hls_demux_get_key()
930 g_mutex_unlock (&demux->keys_lock); in gst_hls_demux_get_key()
933 GST_MEMDUMP_OBJECT (demux, "Key", key->data, 16); in gst_hls_demux_get_key()
939 gst_hls_demux_start_fragment (GstAdaptiveDemux * demux, in gst_hls_demux_start_fragment() argument
943 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_start_fragment()
975 GST_ELEMENT_ERROR (demux, STREAM, DECRYPT_NOKEY, in gst_hls_demux_start_fragment()
977 GST_WARNING_OBJECT (demux, "Failed to decrypt data"); in gst_hls_demux_start_fragment()
982 GST_ELEMENT_ERROR (demux, STREAM, DECRYPT, ("Failed to start decrypt"), in gst_hls_demux_start_fragment()
1002 gst_hls_demux_handle_buffer (GstAdaptiveDemux * demux, in gst_hls_demux_handle_buffer() argument
1006 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_handle_buffer()
1085 return gst_hls_demux_handle_buffer (demux, stream, buffer, at_eos); in gst_hls_demux_handle_buffer()
1099 gst_hls_demux_finish_fragment (GstAdaptiveDemux * demux, in gst_hls_demux_finish_fragment() argument
1125 gst_hls_demux_handle_buffer (demux, stream, in gst_hls_demux_finish_fragment()
1135 gst_hls_demux_handle_buffer (demux, stream, buf, TRUE); in gst_hls_demux_finish_fragment()
1142 ret = gst_hls_demux_handle_buffer (demux, stream, buf, TRUE); in gst_hls_demux_finish_fragment()
1158 return gst_adaptive_demux_stream_advance_fragment (demux, stream, in gst_hls_demux_finish_fragment()
1164 gst_hls_demux_data_received (GstAdaptiveDemux * demux, in gst_hls_demux_data_received() argument
1168 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_data_received()
1196 GST_ELEMENT_ERROR (demux, STREAM, DECODE, ("Failed to decrypt buffer"), in gst_hls_demux_data_received()
1207 return gst_hls_demux_handle_buffer (demux, stream, buffer, FALSE); in gst_hls_demux_data_received()
1212 static gboolean gst_hls_demux_get_bitrate_info(GstAdaptiveDemux * demux, in gst_hls_demux_get_bitrate_info() argument
1215 GstHLSDemux *hls_demux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_get_bitrate_info()
1257 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux); in gst_hls_demux_get_current_bandwidth()
1319 has_next = gst_m3u8_has_next_fragment (m3u8, stream->demux->segment.rate > 0); in gst_hls_demux_stream_has_next_fragment()
1333 if (GST_CLOCK_TIME_IS_VALID(stream->demux->slice_position)) { in gst_hls_demux_advance_fragment()
1334 …gst_m3u8_advance_fragment_by_position (m3u8, stream->demux->slice_position, stream->demux->segment… in gst_hls_demux_advance_fragment()
1335 stream->demux->slice_position = GST_CLOCK_TIME_NONE; in gst_hls_demux_advance_fragment()
1337 gst_m3u8_advance_fragment (m3u8, stream->demux->segment.rate > 0); in gst_hls_demux_advance_fragment()
1340 gst_m3u8_advance_fragment (m3u8, stream->demux->segment.rate > 0); in gst_hls_demux_advance_fragment()
1351 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux); in gst_hls_demux_update_fragment_info()
1359 forward = (stream->demux->segment.rate > 0); in gst_hls_demux_update_fragment_info()
1384 || stream->demux->segment.rate < 0.0) { in gst_hls_demux_update_fragment_info()
1420 GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (stream->demux); in gst_hls_demux_select_bitrate() local
1422 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (stream->demux); in gst_hls_demux_select_bitrate()
1449 ABS (demux->segment.rate)), &changed); in gst_hls_demux_select_bitrate()
1459 GstHLSDemux *demux = GST_HLS_DEMUX_CAST (ademux); in gst_hls_demux_reset() local
1461 GST_DEBUG_OBJECT (demux, "resetting"); in gst_hls_demux_reset()
1464 if (demux->master) { in gst_hls_demux_reset()
1465 gst_hls_master_playlist_unref (demux->master); in gst_hls_demux_reset()
1466 demux->master = NULL; in gst_hls_demux_reset()
1468 if (demux->current_variant != NULL) { in gst_hls_demux_reset()
1469 gst_hls_variant_stream_unref (demux->current_variant); in gst_hls_demux_reset()
1470 demux->current_variant = NULL; in gst_hls_demux_reset()
1472 if (demux->previous_variant != NULL) { in gst_hls_demux_reset()
1473 gst_hls_variant_stream_unref (demux->previous_variant); in gst_hls_demux_reset()
1474 demux->previous_variant = NULL; in gst_hls_demux_reset()
1476 demux->srcpad_counter = 0; in gst_hls_demux_reset()
1477 demux->streams_aware = GST_OBJECT_PARENT (demux) in gst_hls_demux_reset()
1478 && GST_OBJECT_FLAG_IS_SET (GST_OBJECT_PARENT (demux), in gst_hls_demux_reset()
1480 GST_DEBUG_OBJECT (demux, "Streams aware : %d", demux->streams_aware); in gst_hls_demux_reset()
1482 gst_hls_demux_clear_all_pending_data (demux); in gst_hls_demux_reset()
1619 gst_hls_demux_update_rendition_manifest (GstHLSDemux * demux, in gst_hls_demux_update_rendition_manifest() argument
1622 GstAdaptiveDemux *adaptive_demux = GST_ADAPTIVE_DEMUX (demux); in gst_hls_demux_update_rendition_manifest()
1653 GST_WARNING_OBJECT (demux, "Couldn't validate playlist encoding"); in gst_hls_demux_update_rendition_manifest()
1660 GST_WARNING_OBJECT (demux, "Couldn't update playlist"); in gst_hls_demux_update_rendition_manifest()
1670 gst_hls_demux_update_playlist (GstHLSDemux * demux, gboolean update, in gst_hls_demux_update_playlist() argument
1673 GstAdaptiveDemux *adaptive_demux = GST_ADAPTIVE_DEMUX (demux); in gst_hls_demux_update_playlist()
1684 uri = gst_m3u8_get_uri (demux->current_variant->m3u8); in gst_hls_demux_update_playlist()
1692 if (!update || main_checked || demux->master->is_simple in gst_hls_demux_update_playlist()
1693 || !gst_adaptive_demux_is_running (GST_ADAPTIVE_DEMUX_CAST (demux))) { in gst_hls_demux_update_playlist()
1698 GST_INFO_OBJECT (demux, in gst_hls_demux_update_playlist()
1714 GST_WARNING_OBJECT (demux, in gst_hls_demux_update_playlist()
1732 if (!gst_hls_demux_update_variant_playlist (demux, playlist, uri, base_uri)) { in gst_hls_demux_update_playlist()
1733 GST_WARNING_OBJECT (demux, "Failed to update the variant playlist"); in gst_hls_demux_update_playlist()
1747 m3u8 = demux->current_variant->m3u8; in gst_hls_demux_update_playlist()
1752 demux->current_variant->name); in gst_hls_demux_update_playlist()
1755 demux->current_variant->name); in gst_hls_demux_update_playlist()
1764 GST_WARNING_OBJECT (demux, "Couldn't validate playlist encoding"); in gst_hls_demux_update_playlist()
1771 GST_WARNING_OBJECT (demux, "Couldn't update playlist"); in gst_hls_demux_update_playlist()
1778 GList *mlist = demux->current_variant->media[i]; in gst_hls_demux_update_playlist()
1789 GST_LOG_OBJECT (demux, in gst_hls_demux_update_playlist()
1793 if (!gst_hls_demux_update_rendition_manifest (demux, media, err)) in gst_hls_demux_update_playlist()
1805 GST_M3U8_CLIENT_LOCK (demux->client); in gst_hls_demux_update_playlist()
1811 GST_DEBUG_OBJECT (demux, in gst_hls_demux_update_playlist()
1819 GST_DEBUG_OBJECT (demux, in gst_hls_demux_update_playlist()
1823 GST_M3U8_CLIENT_UNLOCK (demux->client); in gst_hls_demux_update_playlist()
1833 GST_M3U8_CLIENT_LOCK (demux->client); in gst_hls_demux_update_playlist()
1836 if (GST_ADAPTIVE_DEMUX_CAST (demux)->streams) { in gst_hls_demux_update_playlist()
1842 GST_ADAPTIVE_DEMUX_CAST (demux)->streams->data; in gst_hls_demux_update_playlist()
1852 GST_LOG_OBJECT (demux, "Looking for sequence position %" in gst_hls_demux_update_playlist()
1871 GST_M3U8_CLIENT_UNLOCK (demux->client); in gst_hls_demux_update_playlist()
1878 gst_hls_demux_change_playlist (GstHLSDemux * demux, guint max_bitrate, in gst_hls_demux_change_playlist() argument
1884 GstAdaptiveDemux *adaptive_demux = GST_ADAPTIVE_DEMUX_CAST (demux); in gst_hls_demux_change_playlist()
1892 previous_variant = gst_hls_variant_stream_ref (demux->current_variant); in gst_hls_demux_change_playlist()
1894 gst_hls_master_playlist_get_variant_for_bitrate (demux->master, in gst_hls_demux_change_playlist()
1895 demux->current_variant, max_bitrate); in gst_hls_demux_change_playlist()
1897 GST_M3U8_CLIENT_LOCK (demux->client); in gst_hls_demux_change_playlist()
1905 GST_M3U8_CLIENT_UNLOCK (demux->client); in gst_hls_demux_change_playlist()
1910 GST_M3U8_CLIENT_UNLOCK (demux->client); in gst_hls_demux_change_playlist()
1912 gst_hls_demux_set_current_variant (demux, new_variant); in gst_hls_demux_change_playlist()
1914 GST_INFO_OBJECT (demux, "Client was on %dbps, max allowed is %dbps, switching" in gst_hls_demux_change_playlist()
1917 if (gst_hls_demux_update_playlist (demux, TRUE, NULL)) { in gst_hls_demux_change_playlist()
1923 gst_element_post_message (GST_ELEMENT_CAST (demux), in gst_hls_demux_change_playlist()
1924 gst_message_new_element (GST_OBJECT_CAST (demux), in gst_hls_demux_change_playlist()
1933 } else if (gst_adaptive_demux_is_running (GST_ADAPTIVE_DEMUX_CAST (demux))) { in gst_hls_demux_change_playlist()
1937 GST_INFO_OBJECT (demux, "Unable to update playlist. Switching back"); in gst_hls_demux_change_playlist()
1938 GST_M3U8_CLIENT_LOCK (demux->client); in gst_hls_demux_change_playlist()
1943 failover = g_list_find (demux->master->variants, new_variant); in gst_hls_demux_change_playlist()
1953 GST_M3U8_CLIENT_UNLOCK (demux->client); in gst_hls_demux_change_playlist()
1954 gst_hls_demux_set_current_variant (demux, previous_variant); in gst_hls_demux_change_playlist()
1957 lowest_ivariant = demux->master->iframe_variants->data; in gst_hls_demux_change_playlist()
1961 lowest_variant = demux->master->variants->data; in gst_hls_demux_change_playlist()
1965 return gst_hls_demux_change_playlist (demux, new_bandwidth - 1, changed); in gst_hls_demux_change_playlist()
2131 gst_hls_demux_decrypt_fragment (GstHLSDemux * demux, GstHLSDemuxStream * stream, in gst_hls_demux_decrypt_fragment() argument
2157 GST_ERROR_OBJECT (demux, "Failed to decrypt fragment"); in gst_hls_demux_decrypt_fragment()
2171 gst_hls_demux_get_manifest_update_interval (GstAdaptiveDemux * demux) in gst_hls_demux_get_manifest_update_interval() argument
2173 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_get_manifest_update_interval()
2187 gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux, gint64 * start, in gst_hls_demux_get_live_seek_range() argument
2190 GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux); in gst_hls_demux_get_live_seek_range()