Seek events are sent upstream on each sink, so if we receive multiple
seeks with the same seqnum, we must only perform one seek, not N seeks
where N = the number of sinks in the pipeline connected to rtspsrc.
This is the same thing done by demuxers like qtdemux or matrsokademux.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/938>
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
- res = gst_rtspsrc_perform_seek (src, event);
+ {
+ guint32 seqnum = gst_event_get_seqnum (event);
+ if (seqnum == src->seek_seqnum) {
+ GST_LOG_OBJECT (pad, "Drop duplicated SEEK event seqnum %"
+ G_GUINT32_FORMAT, seqnum);
+ } else {
+ res = gst_rtspsrc_perform_seek (src, event);
+ }
+ }
forward = FALSE;
break;
case GST_EVENT_QOS: