mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 12:32:29 +00:00
adaptivedemux: Fix broken updates loop on live streams
Prevent the manifest update loop from looping endlessly after a seek event, by clearing the variable that tells the task function not to immediately exit.
This commit is contained in:
parent
0a63569fd1
commit
389e35d032
3 changed files with 55 additions and 0 deletions
|
@ -679,6 +679,9 @@ gst_adaptive_demux_sink_event (GstPad * pad, GstObject * parent,
|
|||
gst_adaptive_demux_is_live (demux));
|
||||
gst_adaptive_demux_start_tasks (demux);
|
||||
if (gst_adaptive_demux_is_live (demux)) {
|
||||
g_mutex_lock (&demux->priv->updates_timed_lock);
|
||||
demux->priv->stop_updates_task = FALSE;
|
||||
g_mutex_unlock (&demux->priv->updates_timed_lock);
|
||||
/* Task to periodically update the manifest */
|
||||
gst_task_start (demux->priv->updates_task);
|
||||
}
|
||||
|
|
39
gst-libs/gst/adaptivedemux/gstadaptivedemux.c.rej
Normal file
39
gst-libs/gst/adaptivedemux/gstadaptivedemux.c.rej
Normal file
|
@ -0,0 +1,39 @@
|
|||
--- gst-libs/gst/adaptivedemux/gstadaptivedemux.c
|
||||
+++ gst-libs/gst/adaptivedemux/gstadaptivedemux.c
|
||||
@@ -1821,12 +1926,36 @@ gst_adaptive_demux_stream_push_buffer (GstAdaptiveDemuxStream * stream,
|
||||
gst_caps_unref (stream->pending_caps);
|
||||
stream->pending_caps = NULL;
|
||||
}
|
||||
+
|
||||
+ if (stream->do_block) {
|
||||
+
|
||||
+ g_mutex_lock (&demux->priv->preroll_lock);
|
||||
+ GST_MANIFEST_UNLOCK (demux);
|
||||
+
|
||||
+ gst_adaptive_demux_handle_preroll (demux, stream);
|
||||
+
|
||||
+ while (stream->do_block && !stream->cancelled) {
|
||||
+ GST_LOG_OBJECT (demux, "Stream %p sleeping for preroll", stream);
|
||||
+ g_cond_wait (&demux->priv->preroll_cond, &demux->priv->preroll_lock);
|
||||
+ }
|
||||
+ if (stream->cancelled) {
|
||||
+ GST_LOG_OBJECT (demux, "stream %p cancelled", stream);
|
||||
+ gst_buffer_unref (buffer);
|
||||
+ g_mutex_unlock (&demux->priv->preroll_lock);
|
||||
+ return GST_FLOW_FLUSHING;
|
||||
+ }
|
||||
+
|
||||
+ g_mutex_unlock (&demux->priv->preroll_lock);
|
||||
+ GST_MANIFEST_LOCK (demux);
|
||||
+ }
|
||||
+
|
||||
if (G_UNLIKELY (stream->pending_segment)) {
|
||||
GST_DEBUG_OBJECT (stream->pad, "Sending pending seg: %" GST_PTR_FORMAT,
|
||||
stream->pending_segment);
|
||||
gst_pad_push_event (stream->pad, stream->pending_segment);
|
||||
stream->pending_segment = NULL;
|
||||
}
|
||||
+
|
||||
if (G_UNLIKELY (stream->pending_tags || stream->bitrate_changed)) {
|
||||
GstTagList *tags = stream->pending_tags;
|
||||
|
13
gst-libs/gst/adaptivedemux/set_state_keep.patch
Normal file
13
gst-libs/gst/adaptivedemux/set_state_keep.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
|
||||
index a7cf6c0..34ea3aa 100644
|
||||
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
|
||||
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
|
||||
@@ -2533,6 +2533,8 @@ gst_adaptive_demux_stream_download_uri (GstAdaptiveDemux * demux,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ gst_element_set_state (stream->src, GST_STATE_PLAYING);
|
||||
+
|
||||
/* wait for the fragment to be completely downloaded */
|
||||
GST_DEBUG_OBJECT (stream->pad,
|
||||
"Waiting for fragment download to finish: %s", uri);
|
Loading…
Reference in a new issue