From 3cd79c4262e3a356dbae7f4c1f0c39427c1eeb7a Mon Sep 17 00:00:00 2001 From: Hosang Lee Date: Thu, 11 Aug 2022 09:34:58 +0900 Subject: [PATCH] mssdemux2: Use gsturi structure to form fragment urls Utilize gsturi to form fragment url paths. A token query may contain the string "manifest" and this would lead to improper url creations. Part-of: --- .../ext/adaptivedemux2/mss/gstmssdemux.c | 33 ++++++++++++++-------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/mss/gstmssdemux.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/mss/gstmssdemux.c index 5e3997d..7711811 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/mss/gstmssdemux.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/mss/gstmssdemux.c @@ -267,11 +267,20 @@ gst_mss_demux_stream_update_fragment_info (GstAdaptiveDemux2Stream * stream) ret = gst_mss_stream_get_fragment_url (mssstream->manifest_stream, &path); if (ret == GST_FLOW_OK) { - stream->fragment.uri = g_strdup_printf ("%s/%s", mssdemux->base_url, path); + GstUri *base_url, *frag_url; + + base_url = gst_uri_from_string (mssdemux->base_url); + frag_url = gst_uri_from_string_with_base (base_url, path); + + g_free (stream->fragment.uri); + stream->fragment.uri = gst_uri_to_string (frag_url); stream->fragment.stream_time = gst_mss_stream_get_fragment_gst_timestamp (mssstream->manifest_stream); stream->fragment.duration = gst_mss_stream_get_fragment_gst_duration (mssstream->manifest_stream); + + gst_uri_unref (base_url); + gst_uri_unref (frag_url); } g_free (path); @@ -458,25 +467,25 @@ static void gst_mss_demux_update_base_url (GstMssDemux * mssdemux) { GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (mssdemux); - gchar *baseurl_end; + GstUri *base_url; + gchar *path; g_free (mssdemux->base_url); mssdemux->base_url = g_strdup (demux->manifest_base_uri ? demux->manifest_base_uri : demux-> manifest_uri); - baseurl_end = g_strrstr (mssdemux->base_url, "/Manifest"); - if (baseurl_end == NULL) { - /* second try */ - baseurl_end = g_strrstr (mssdemux->base_url, "/manifest"); - } - if (baseurl_end) { - /* set the new end of the string */ - baseurl_end[0] = '\0'; - } else { + + base_url = gst_uri_from_string (mssdemux->base_url); + path = gst_uri_get_path (base_url); + GST_DEBUG ("%s", path); + + if (!g_str_has_suffix (path, "/Manifest") + && !g_str_has_suffix (path, "/manifest")) GST_WARNING_OBJECT (mssdemux, "Stream's URI didn't end with /manifest"); - } + g_free (path); + gst_uri_unref (base_url); } static gboolean -- 2.7.4