mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 12:32:29 +00:00
2ce4f6a8e4
When a stream gets a not-linked return, it will be marked as so and won't download any more new fragments until a reconfigure event is received. This will make mssdemux expose all pads, but only download fragments for the streams that are actually being used. Relying on the pads being linked/unlinked isn't enough in this scenario as there might be an input-selector downstream that is actually discarding buffers for a given linked pad. When streams are switching, the old active stream can be blocked because input-selector will block not-linked streams. In case the mssdemux's stream loop is blocked pushing a buffer to a full queue downstream it will never unblock as the queue will not drain (input-selector is blocking). In this scenario, stream switching will deadlock as input-selector is waiting for the newly active stream data and the stream_loop that would push this data is blocked waiting for input-selector. To solve this issue, whenever an stream is reactivated on a reconfigure it will enter into the 'catch up mode', in this mode it can push buffers from its download thread until it reaches the currrent GstSegment's position. This works because this timestamp will always be behind or equal to the maximum timestamp pushed for all streams, after pushing data for this timestamp, the stream will go back to default and be pushed sequentially from the main streaming thread. By this time, the input-selector should have already released the thread. https://bugzilla.gnome.org/show_bug.cgi?id=711849 |
||
---|---|---|
.. | ||
gstdownloadrate.c | ||
gstdownloadrate.h | ||
gstmssdemux.c | ||
gstmssdemux.h | ||
gstmssmanifest.c | ||
gstmssmanifest.h | ||
gstsmoothstreaming-plugin.c | ||
Makefile.am |