summaryrefslogtreecommitdiff
path: root/gst/rtsp-sink/gstrtspclientsink.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtsp-sink/gstrtspclientsink.c')
-rw-r--r--gst/rtsp-sink/gstrtspclientsink.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gst/rtsp-sink/gstrtspclientsink.c b/gst/rtsp-sink/gstrtspclientsink.c
index c420e46..090a264 100644
--- a/gst/rtsp-sink/gstrtspclientsink.c
+++ b/gst/rtsp-sink/gstrtspclientsink.c
@@ -246,6 +246,7 @@ enum
SIGNAL_NEW_PAYLOADER,
SIGNAL_REQUEST_RTCP_KEY,
SIGNAL_ACCEPT_CERTIFICATE,
+ SIGNAL_UPDATE_SDP,
LAST_SIGNAL
};
@@ -805,6 +806,22 @@ gst_rtsp_client_sink_class_init (GstRTSPClientSinkClass * klass)
G_TYPE_BOOLEAN, 3, G_TYPE_TLS_CONNECTION, G_TYPE_TLS_CERTIFICATE,
G_TYPE_TLS_CERTIFICATE_FLAGS);
+ /**
+ * GstRTSPClientSink::update-sdp:
+ * @rtsp_client_sink: a #GstRTSPClientSink
+ * @sdp: a #GstSDPMessage
+ *
+ * Emitted right before the ANNOUNCE request is sent to the server with the
+ * generated SDP. The SDP can be updated from signal handlers but the order
+ * and number of medias must not be changed.
+ *
+ * Since: 1.20
+ */
+ gst_rtsp_client_sink_signals[SIGNAL_UPDATE_SDP] =
+ g_signal_new_class_handler ("update-sdp", G_TYPE_FROM_CLASS (klass),
+ 0, 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 1, GST_TYPE_SDP_MESSAGE | G_SIGNAL_TYPE_STATIC_SCOPE);
+
gstelement_class->provide_clock = gst_rtsp_client_sink_provide_clock;
gstelement_class->change_state = gst_rtsp_client_sink_change_state;
gstelement_class->request_new_pad =
@@ -4453,6 +4470,8 @@ gst_rtsp_client_sink_record (GstRTSPClientSink * sink, gboolean async)
if (res < 0)
goto create_request_failed;
+ g_signal_emit (sink, gst_rtsp_client_sink_signals[SIGNAL_UPDATE_SDP], 0, sdp);
+
gst_rtsp_message_add_header (&request, GST_RTSP_HDR_CONTENT_TYPE,
"application/sdp");