rtpssrcdemux: set different stream-id on each src pad
authorGuillaume Desmottes <guillaume.desmottes@onestream.live>
Tue, 31 Jan 2023 14:28:22 +0000 (15:28 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 1 Feb 2023 17:46:29 +0000 (17:46 +0000)
All the RTP src pads were sharing the same stream-id while each actually
carry a different stream.

This was causing problem for example when funneling the streams together
and then trying to split them using 'streamiddemux'.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3866>

subprojects/gst-plugins-good/gst/rtpmanager/gstrtpssrcdemux.c

index 9713131..243449b 100644 (file)
@@ -226,6 +226,30 @@ add_ssrc_and_ref (GstEvent * event, guint32 ssrc)
       gst_caps_unref (newcaps);
       break;
     }
+    case GST_EVENT_STREAM_START:
+    {
+      const gchar *stream_id;
+      gchar *new_stream_id;
+      guint group_id;
+      GstStreamFlags flags;
+      GstEvent *new_event;
+
+      gst_event_parse_stream_start (event, &stream_id);
+
+      new_stream_id =
+          g_strdup_printf ("%s/%u", stream_id ? stream_id : "", ssrc);
+      new_event = gst_event_new_stream_start (new_stream_id);
+      g_free (new_stream_id);
+
+      if (gst_event_parse_group_id (event, &group_id))
+        gst_event_set_group_id (new_event, group_id);
+      gst_event_parse_stream_flags (event, &flags);
+      gst_event_set_stream_flags (new_event, flags);
+
+      event = new_event;
+
+      break;
+    }
     default:
       gst_event_ref (event);
       break;