diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c index e7c4fe6c03..70b6255d7f 100644 --- a/ext/smoothstreaming/gstmssdemux.c +++ b/ext/smoothstreaming/gstmssdemux.c @@ -1207,6 +1207,31 @@ _src_query (GstPad * pad, GstObject * parent, GstQuery * query) return gst_pad_query_default (pad, parent, query); } +static gboolean +_mss_demux_pad_remove_eos_sticky (GstPad * pad, GstEvent ** event, + gpointer udata) +{ + if (GST_EVENT_TYPE (*event) == GST_EVENT_EOS) { + gst_event_replace (event, NULL); + return FALSE; + } + return TRUE; +} + +static void +gst_mss_demux_stream_clear_eos_state (GstMssDemuxStream * stream) +{ + GstPad *internal_pad; + + internal_pad = + GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad))); + gst_pad_sticky_events_foreach (internal_pad, + _mss_demux_pad_remove_eos_sticky, NULL); + GST_OBJECT_FLAG_UNSET (internal_pad, GST_PAD_FLAG_EOS); + + gst_object_unref (internal_pad); +} + static gboolean gst_mss_demux_stream_update_source (GstMssDemuxStream * stream, const gchar * uri, const gchar * referer, gboolean refresh, @@ -1360,8 +1385,8 @@ gst_mss_demux_stream_download_uri (GstMssDemux * demux, /* flush the proxypads so that the EOS state is reset */ gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_start ()); gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_stop (TRUE)); - gst_element_set_state (stream->src, GST_STATE_READY); + gst_mss_demux_stream_clear_eos_state (stream); } static GstFlowReturn