From: Wim Taymans Date: Tue, 26 May 2009 09:42:41 +0000 (+0200) Subject: media: keep track of active transports X-Git-Tag: 1.6.0~936 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5955fc7d12cb0c168a9c6088c5be96173b9e2a00;p=platform%2Fupstream%2Fgst-rtsp-server.git media: keep track of active transports Keep track of which transport is active to avoid closing the connection too soon. Remove the destination transport also when going to NULL. Print some stats about the SDES and other RTCP messages we receive from the clients. --- diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c index d1f737e..d07b380 100644 --- a/gst/rtsp-server/rtsp-media.c +++ b/gst/rtsp-server/rtsp-media.c @@ -691,15 +691,39 @@ caps_notify (GstPad * pad, GParamSpec * unused, GstRTSPMediaStream * stream) } static void +dump_structure (const GstStructure *s) +{ + gchar *sstr; + + sstr = gst_structure_to_string (s); + g_message ("structure: %s", sstr); + g_free (sstr); +} + +static void on_new_ssrc (GObject *session, GObject *source, GstRTSPMedia *media) { g_message ("%p: new source %p", media, source); } static void +on_ssrc_sdes (GObject *session, GObject *source, GstRTSPMedia *media) +{ + GstStructure *sdes; + + g_message ("%p: new SDES %p", media, source); + g_object_get (source, "sdes", &sdes, NULL); + dump_structure (sdes); +} + +static void on_ssrc_active (GObject *session, GObject *source, GstRTSPMedia *media) { + GstStructure *stats; + g_message ("%p: source %p is active", media, source); + g_object_get (source, "stats", &stats, NULL); + dump_structure (stats); } static void @@ -813,6 +837,8 @@ setup_stream (GstRTSPMediaStream *stream, guint idx, GstRTSPMedia *media) g_signal_connect (stream->session, "on-new-ssrc", (GCallback) on_new_ssrc, media); + g_signal_connect (stream->session, "on-ssrc-sdes", (GCallback) on_ssrc_sdes, + media); g_signal_connect (stream->session, "on-ssrc-active", (GCallback) on_ssrc_active, media); g_signal_connect (stream->session, "on-bye-ssrc", (GCallback) on_bye_ssrc, @@ -1025,6 +1051,10 @@ default_handle_message (GstRTSPMedia *media, GstMessage *message) g_free (debug); break; } + case GST_MESSAGE_ELEMENT: + { + break; + } default: g_message ("%p: got message type %s", media, gst_message_type_get_name (type)); break; @@ -1279,11 +1309,13 @@ gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state, GArray *transport add = remove = FALSE; + g_message ("going to state %s media %p", gst_element_state_get_name (state), media); + switch (state) { case GST_STATE_NULL: /* unlock the streams so that they follow the state changes from now on */ unlock_streams (media); - break; + /* fallthrough */ case GST_STATE_PAUSED: /* we're going from PLAYING to PAUSED, READY or NULL, remove */ if (media->target_state == GST_STATE_PLAYING) @@ -1325,27 +1357,31 @@ gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state, GArray *transport min = trans->client_port.min; max = trans->client_port.max; - if (add) { + if (add && !tr->active) { g_message ("adding %s:%d-%d", dest, min, max); g_signal_emit_by_name (stream->udpsink[0], "add", dest, min, NULL); g_signal_emit_by_name (stream->udpsink[1], "add", dest, max, NULL); + tr->active = TRUE; media->active++; - } else if (remove) { + } else if (remove && tr->active) { g_message ("removing %s:%d-%d", dest, min, max); g_signal_emit_by_name (stream->udpsink[0], "remove", dest, min, NULL); g_signal_emit_by_name (stream->udpsink[1], "remove", dest, max, NULL); + tr->active = FALSE; media->active--; } break; } case GST_RTSP_LOWER_TRANS_TCP: - if (add) { + if (add && !tr->active) { g_message ("adding TCP %s", trans->destination); stream->transports = g_list_prepend (stream->transports, tr); + tr->active = TRUE; media->active++; - } else if (remove) { + } else if (remove && tr->active) { g_message ("removing TCP %s", trans->destination); stream->transports = g_list_remove (stream->transports, tr); + tr->active = FALSE; media->active--; } break; diff --git a/gst/rtsp-server/rtsp-media.h b/gst/rtsp-server/rtsp-media.h index 29e9989..d41075f 100644 --- a/gst/rtsp-server/rtsp-media.h +++ b/gst/rtsp-server/rtsp-media.h @@ -61,6 +61,7 @@ struct _GstRTSPMediaTrans { GstRTSPSendFunc send_rtcp; gpointer user_data; GDestroyNotify notify; + gboolean active; GstRTSPTransport *transport; };