mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
rtsp-client: Fix url for generating key in media factory
The mount point at / can be accessed by both the URL forms rtsp://<IP>:<PORT> and rtsp://<IP>:<PORT>/. To make media factory generating the same key for both the URL forms, the url sent to gst_rtsp_media_factory_construct() needs to be normalized first. This commit creates a new GstRTSPUrl as the normalized url to send to gst_rtsp_media_factory_construct(). Fixes:https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1297 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2681>
This commit is contained in:
parent
3511be9a05
commit
ebd8bd8f13
1 changed files with 13 additions and 1 deletions
|
@ -977,6 +977,7 @@ find_media (GstRTSPClient * client, GstRTSPContext * ctx, gchar * path,
|
|||
GstRTSPClientPrivate *priv = client->priv;
|
||||
GstRTSPMediaFactory *factory;
|
||||
GstRTSPMedia *media;
|
||||
GstRTSPUrl *url;
|
||||
gint path_len;
|
||||
|
||||
/* find the longest matching factory for the uri first */
|
||||
|
@ -997,13 +998,20 @@ find_media (GstRTSPClient * client, GstRTSPContext * ctx, gchar * path,
|
|||
else
|
||||
path_len = strlen (path);
|
||||
|
||||
url = gst_rtsp_url_copy (ctx->uri);
|
||||
/* normalize rtsp://<IP>:<PORT> to rtsp://<IP>:<PORT>/ */
|
||||
if (url->abspath[0] == 0) {
|
||||
g_free (url->abspath);
|
||||
url->abspath = g_strdup ("/");
|
||||
}
|
||||
|
||||
if (!paths_are_equal (priv->path, path, path_len)) {
|
||||
/* remove any previously cached values before we try to construct a new
|
||||
* media for uri */
|
||||
clean_cached_media (client, TRUE);
|
||||
|
||||
/* prepare the media and add it to the pipeline */
|
||||
if (!(media = gst_rtsp_media_factory_construct (factory, ctx->uri)))
|
||||
if (!(media = gst_rtsp_media_factory_construct (factory, url)))
|
||||
goto no_media;
|
||||
|
||||
ctx->media = media;
|
||||
|
@ -1032,6 +1040,7 @@ find_media (GstRTSPClient * client, GstRTSPContext * ctx, gchar * path,
|
|||
GST_INFO ("reusing cached media %p for path %s", media, priv->path);
|
||||
}
|
||||
|
||||
gst_rtsp_url_free (url);
|
||||
g_object_unref (factory);
|
||||
ctx->factory = NULL;
|
||||
|
||||
|
@ -1068,6 +1077,7 @@ no_media:
|
|||
{
|
||||
GST_ERROR ("client %p: can't create media", client);
|
||||
send_generic_response (client, GST_RTSP_STS_BAD_REQUEST, ctx);
|
||||
gst_rtsp_url_free (url);
|
||||
g_object_unref (factory);
|
||||
ctx->factory = NULL;
|
||||
return NULL;
|
||||
|
@ -1076,6 +1086,7 @@ no_thread:
|
|||
{
|
||||
GST_ERROR ("client %p: can't create thread", client);
|
||||
send_generic_response (client, GST_RTSP_STS_SERVICE_UNAVAILABLE, ctx);
|
||||
gst_rtsp_url_free (url);
|
||||
g_object_unref (media);
|
||||
ctx->media = NULL;
|
||||
g_object_unref (factory);
|
||||
|
@ -1086,6 +1097,7 @@ no_prepare:
|
|||
{
|
||||
GST_ERROR ("client %p: can't prepare media", client);
|
||||
send_generic_response (client, GST_RTSP_STS_SERVICE_UNAVAILABLE, ctx);
|
||||
gst_rtsp_url_free (url);
|
||||
g_object_unref (media);
|
||||
ctx->media = NULL;
|
||||
g_object_unref (factory);
|
||||
|
|
Loading…
Reference in a new issue