mssdemux2: Use gsturi structure to form fragment urls
authorHosang Lee <hosang10.lee@lge.com>
Thu, 11 Aug 2022 00:34:58 +0000 (09:34 +0900)
committerHosang Lee <hosang10.lee@lge.com>
Tue, 16 Aug 2022 08:57:19 +0000 (17:57 +0900)
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2859>

subprojects/gst-plugins-good/ext/adaptivedemux2/mss/gstmssdemux.c

index 5e3997d..7711811 100644 (file)
@@ -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