srtobject: allow passing SRT Stream ID in stream URI
authorJakub Adam <jakub.adam@collabora.com>
Mon, 18 Nov 2019 15:15:21 +0000 (16:15 +0100)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 20 Nov 2019 17:09:34 +0000 (17:09 +0000)
Based on Stream ID, the application can accept or reject the connection,
select the desired data stream, or set an appropriate passphrase for the
connection. Example usage:

  srt://127.0.0.1:1234?streamid=mystream

ext/srt/gstsrtobject.c

index 95c04c9..26bfe0b 100644 (file)
@@ -174,6 +174,18 @@ gst_srt_object_set_common_params (SRTSOCKET sock, GstSRTObject * srtobject,
     }
   }
 
+  if (gst_structure_has_field (srtobject->parameters, "streamid")) {
+    const gchar *streamid;
+
+    streamid = gst_structure_get_string (srtobject->parameters, "streamid");
+    if (streamid != NULL && streamid[0] != '\0') {
+      if (srt_setsockopt (sock, 0, SRTO_STREAMID, streamid, strlen (streamid))) {
+        g_set_error (error, GST_LIBRARY_ERROR, GST_LIBRARY_ERROR_SETTINGS,
+            "failed to set stream ID (reason: %s)", srt_getlasterror_str ());
+      }
+    }
+  }
+
   return TRUE;
 }
 
@@ -587,6 +599,8 @@ gst_srt_object_set_uri (GstSRTObject * srtobject, const gchar * uri,
       } else if (!g_strcmp0 ("pbkeylen", key)) {
         gst_srt_object_set_enum_value (srtobject->parameters,
             GST_TYPE_SRT_KEY_LENGTH, key, value);
+      } else if (!g_strcmp0 ("streamid", key)) {
+        gst_srt_object_set_string_value (srtobject->parameters, key, value);
       }
     }