Hi all
We have an issue with gst-rtsp-server used with 2 parallel clients requesting two stream/connections to pipeline
first client requires RTP_TCP stream for example on 4444 server port
second client requires an RTSP_over_HTTP stream on the same 4444 server port
RtspServer pipeline is set in "shared" mode so second client should use always the unique instance of pipeline What happens is that, when receiving first RTP_TCP connection all is ok because the url supplied is of the form
rtsp://10.31.7.78:4444/chan1
and like shown above this url has "port" explicitly declared
When receiving second RTSP_over_HTTP connection, the HTTP handshaking part is ok, but when start the tunnel
part in RTSP our url has not port declared in it because it is not necessary, like you see below rtsp://10.31.7.78/chan1/ so port is not necessary because it has already been specified in the HTTP part of tunnel At this point rtspServer internally decide to start a new rtsp-media with a new pipeline, and this is a big problem for our aims. If we go to the source code we see that the second media/pipeline is started because in this source file "../gst/rtsp-server/rtsp-media-factory.c" there is the following code and in "default_gen_key()" function reported below ... you can see that "port" is used to
create key used in media hashTable, ....
So the question is: why is present "port" in default_gen_key() method ? Could it be better to remove "port" from default_gen_key() method ?
The removal is because port was already read and used by rtspServer
Let’s know thankYou Maurizio 1218 /* convert the url to a key for the hashtable. NULL return or a NULL function 1219 * will not cache anything for this factory. */ 1220 if (klass->gen_key) 1221 key = klass->gen_key (factory, url); // <<<<<<<<<<<<<<<<<<<<<< 1222 else 1223 key = NULL; 1224 1225 g_mutex_lock (&priv->medias_lock); 1226 if (key) { 1227 /* we have a key, see if we find a cached media */ 1228 media = g_hash_table_lookup (priv->medias, key); // <<<<<<<<<<<<<<<<<<<<< 1229 if (media) 1230 g_object_ref (media); 1231 } else 1232 media = NULL; 1233 static gchar * default_gen_key (GstRTSPMediaFactory * factory, const GstRTSPUrl * url) { gchar *result; const gchar *pre_query; const gchar *query; guint16 port; pre_query = url->query ? "?" : ""; query = url->query ? url->query : ""; gst_rtsp_url_get_port (url, &port); result = g_strdup_printf ("%u%s%s%s", port, url->abspath, pre_query, query); // <<<<<<<<<<<<<<<<<<<< return result; } _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |