From eb5a99fb87006febc7793376e6da60d6d47968f4 Mon Sep 17 00:00:00 2001 From: SeokHoon Lee Date: Tue, 31 May 2016 14:01:52 +0900 Subject: [PATCH] code integration - add RTCP_STATS signal - midification for create socket code - add gst_rtsp_client_set_watch_flushing function Signed-off-by: SeokHoon Lee Change-Id: I0ce3273d9399f580f4035e9c6d752ccdb120a970 --- gst/rtsp-server/gstwfdmessage.h | 0 gst/rtsp-server/rtsp-client.c | 23 +++++++++++++++++++++++ gst/rtsp-server/rtsp-client.h | 1 + gst/rtsp-server/rtsp-server.c | 9 +++++++-- gst/rtsp-server/rtsp-server.h | 1 + gst/rtsp-server/rtsp-stream.c | 10 ++++++++++ 6 files changed, 42 insertions(+), 2 deletions(-) mode change 100755 => 100644 gst/rtsp-server/gstwfdmessage.h diff --git a/gst/rtsp-server/gstwfdmessage.h b/gst/rtsp-server/gstwfdmessage.h old mode 100755 new mode 100644 diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 4f3212d..a600537 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -3944,3 +3944,26 @@ restart: return result; } + +/** + * gst_rtsp_client_set_watch_flushing: + * @client: a #GstRTSPClient + * @val: a boolean value + * + * sets watch flushing to @val on watch to accet/ignore new messages. + */ +void +gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val) +{ + GstRTSPClientPrivate *priv = NULL; + g_return_if_fail (GST_IS_RTSP_CLIENT (client)); + + priv = GST_RTSP_CLIENT_GET_PRIVATE (client); + + /* make sure we unblock/block the backlog and accept/don't accept new messages on the watch */ + if (priv->watch != NULL) + { + GST_INFO("Set watch flushing as %d", val); + gst_rtsp_watch_set_flushing (priv->watch, val); + } +} diff --git a/gst/rtsp-server/rtsp-client.h b/gst/rtsp-server/rtsp-client.h index 13fa2d1..2e6bbf7 100644 --- a/gst/rtsp-server/rtsp-client.h +++ b/gst/rtsp-server/rtsp-client.h @@ -171,6 +171,7 @@ GstRTSPResult gst_rtsp_client_handle_message (GstRTSPClient *client, GstRTSPResult gst_rtsp_client_send_message (GstRTSPClient * client, GstRTSPSession *session, GstRTSPMessage *message); +void gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val); /** * GstRTSPClientSessionFilterFunc: * @client: a #GstRTSPClient object diff --git a/gst/rtsp-server/rtsp-server.c b/gst/rtsp-server/rtsp-server.c index 45ae9db..144cb3a 100644 --- a/gst/rtsp-server/rtsp-server.c +++ b/gst/rtsp-server/rtsp-server.c @@ -230,6 +230,7 @@ gst_rtsp_server_class_init (GstRTSPServerClass * klass) GST_TYPE_RTSP_CLIENT); klass->create_client = default_create_client; + klass->create_socket = gst_rtsp_server_create_socket; GST_DEBUG_CATEGORY_INIT (rtsp_server_debug, "rtspserver", 0, "GstRTSPServer"); } @@ -1256,14 +1257,18 @@ gst_rtsp_server_create_source (GstRTSPServer * server, GCancellable * cancellable, GError ** error) { GstRTSPServerPrivate *priv; - GSocket *socket, *old; + GstRTSPServerClass *klass; + GSocket *socket = NULL, *old; GSource *source; g_return_val_if_fail (GST_IS_RTSP_SERVER (server), NULL); priv = server->priv; + klass = GST_RTSP_SERVER_GET_CLASS (server); + + if (klass->create_socket) + socket = klass->create_socket (server, NULL, error); - socket = gst_rtsp_server_create_socket (server, NULL, error); if (socket == NULL) goto no_socket; diff --git a/gst/rtsp-server/rtsp-server.h b/gst/rtsp-server/rtsp-server.h index 9a6f9d4..4cb0495 100644 --- a/gst/rtsp-server/rtsp-server.h +++ b/gst/rtsp-server/rtsp-server.h @@ -85,6 +85,7 @@ struct _GstRTSPServerClass { GObjectClass parent_class; GstRTSPClient * (*create_client) (GstRTSPServer *server); + GSocket * (*create_socket) (GstRTSPServer * server, GCancellable * cancellable, GError ** error); /* signals */ void (*client_connected) (GstRTSPServer *server, GstRTSPClient *client); diff --git a/gst/rtsp-server/rtsp-stream.c b/gst/rtsp-server/rtsp-stream.c index a015346..ce2f5a4 100644 --- a/gst/rtsp-server/rtsp-stream.c +++ b/gst/rtsp-server/rtsp-stream.c @@ -184,6 +184,7 @@ enum { SIGNAL_NEW_RTP_ENCODER, SIGNAL_NEW_RTCP_ENCODER, + SIGNAL_RTCP_STATS, SIGNAL_LAST }; @@ -241,6 +242,11 @@ gst_rtsp_stream_class_init (GstRTSPStreamClass * klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT); + gst_rtsp_stream_signals[SIGNAL_RTCP_STATS] = + g_signal_new ("rtcp-statistics", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, + G_TYPE_NONE, 1, GST_TYPE_STRUCTURE); + GST_DEBUG_CATEGORY_INIT (rtsp_stream_debug, "rtspstream", 0, "GstRTSPStream"); ssrc_stream_map_key = g_quark_from_static_string ("GstRTSPServer.stream"); @@ -1594,6 +1600,8 @@ check_transport (GObject * source, GstRTSPStream * stream) dump_structure (stats); + g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats); + rtcp_from = gst_structure_get_string (stats, "rtcp-from"); if ((trans = find_transport (stream, rtcp_from))) { GST_INFO ("%p: found transport %p for source %p", stream, trans, @@ -1643,6 +1651,8 @@ on_ssrc_active (GObject * session, GObject * source, GstRTSPStream * stream) GstStructure *stats; g_object_get (source, "stats", &stats, NULL); if (stats) { + g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats); + dump_structure (stats); gst_structure_free (stats); } -- 2.7.4