rtsp-stream: add functions to get rtp and rtcp multicast sockets
authorPatricia Muscalu <patricia@axis.com>
Mon, 16 Oct 2017 09:15:55 +0000 (11:15 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 15 Nov 2017 15:46:00 +0000 (17:46 +0200)
Change-Id: Iddfe6e0bd250cb0159096d5eba9e4202d22b56db

https://bugzilla.gnome.org/show_bug.cgi?id=788340

gst/rtsp-server/rtsp-stream.c
gst/rtsp-server/rtsp-stream.h

index 2551895..90eb825 100644 (file)
@@ -3546,6 +3546,70 @@ gst_rtsp_stream_get_rtcp_socket (GstRTSPStream * stream, GSocketFamily family)
 }
 
 /**
+ * gst_rtsp_stream_get_rtp_multicast_socket:
+ * @stream: a #GstRTSPStream
+ * @family: the socket family
+ *
+ * Get the multicast RTP socket from @stream for a @family.
+ *
+ * Returns: (transfer full) (nullable): the multicast RTP socket or %NULL if no
+ * socket could be allocated for @family. Unref after usage
+ */
+GSocket *
+gst_rtsp_stream_get_rtp_multicast_socket (GstRTSPStream * stream, GSocketFamily family)
+{
+  GstRTSPStreamPrivate *priv = GST_RTSP_STREAM_GET_PRIVATE (stream);
+  GSocket *socket;
+  const gchar *name;
+
+  g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
+  g_return_val_if_fail (family == G_SOCKET_FAMILY_IPV4 ||
+      family == G_SOCKET_FAMILY_IPV6, NULL);
+  g_return_val_if_fail (priv->mcast_udpsink[0], NULL);
+
+  if (family == G_SOCKET_FAMILY_IPV6)
+    name = "socket-v6";
+  else
+    name = "socket";
+
+  g_object_get (priv->mcast_udpsink[0], name, &socket, NULL);
+
+  return socket;
+}
+
+/**
+ * gst_rtsp_stream_get_rtcp_multicast_socket:
+ * @stream: a #GstRTSPStream
+ * @family: the socket family
+ *
+ * Get the multicast RTCP socket from @stream for a @family.
+ *
+ * Returns: (transfer full) (nullable): the multicast RTCP socket or %NULL if no
+ * socket could be allocated for @family. Unref after usage
+ */
+GSocket *
+gst_rtsp_stream_get_rtcp_multicast_socket (GstRTSPStream * stream, GSocketFamily family)
+{
+  GstRTSPStreamPrivate *priv = GST_RTSP_STREAM_GET_PRIVATE (stream);
+  GSocket *socket;
+  const gchar *name;
+
+  g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
+  g_return_val_if_fail (family == G_SOCKET_FAMILY_IPV4 ||
+      family == G_SOCKET_FAMILY_IPV6, NULL);
+  g_return_val_if_fail (priv->mcast_udpsink[1], NULL);
+
+  if (family == G_SOCKET_FAMILY_IPV6)
+    name = "socket-v6";
+  else
+    name = "socket";
+
+  g_object_get (priv->mcast_udpsink[1], name, &socket, NULL);
+
+  return socket;
+}
+
+/**
  * gst_rtsp_stream_set_seqnum:
  * @stream: a #GstRTSPStream
  * @seqnum: a new sequence number
index a934ab5..7aa1aa2 100644 (file)
@@ -220,6 +220,14 @@ GSocket *         gst_rtsp_stream_get_rtcp_socket  (GstRTSPStream *stream,
                                                     GSocketFamily family);
 
 GST_EXPORT
+GSocket *         gst_rtsp_stream_get_rtp_multicast_socket (GstRTSPStream *stream,
+                                                            GSocketFamily family);
+
+GST_EXPORT
+GSocket *         gst_rtsp_stream_get_rtcp_multicast_socket (GstRTSPStream *stream,
+                                                             GSocketFamily family);
+
+GST_EXPORT
 gboolean          gst_rtsp_stream_update_crypto    (GstRTSPStream * stream,
                                                     guint ssrc, GstCaps * crypto);