hlsdemux2: Allow DSN mismatches when re-syncing playlists
authorEdward Hervey <edward@centricular.com>
Mon, 13 Jun 2022 13:26:22 +0000 (15:26 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 4 Aug 2022 13:49:12 +0000 (14:49 +0100)
Some providers provide completely incompatible DSN across bitrates/renditions,
but do keep MSN consistent.

If we fail to synchronize playlist with DSN, retry without the DSN taken into
account.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2839>

subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c

index 1edd690..72eabcc 100644 (file)
@@ -1180,6 +1180,7 @@ gst_hls_media_playlist_sync_to_playlist (GstHLSMediaPlaylist * playlist,
 
   g_return_val_if_fail (playlist && reference, FALSE);
 
+retry_without_dsn:
   /* The new playlist is supposed to be an update of the reference playlist,
    * therefore we will try from the last segment of the reference playlist and
    * go backwards */
@@ -1191,6 +1192,16 @@ gst_hls_media_playlist_sync_to_playlist (GstHLSMediaPlaylist * playlist,
   }
 
   if (res == NULL) {
+    if (playlist->has_ext_x_dsn) {
+      /* There is a possibility that the server doesn't have coherent DSN
+       * accross variants/renditions. If we reach this section, this means that
+       * we have already attempted matching by PDT, URI, stream time. The last
+       * matching would have been by MSN/DSN, therefore try it again without
+       * taking DSN into account. */
+      GST_DEBUG ("Retrying matching without taking DSN into account");
+      playlist->has_ext_x_dsn = FALSE;
+      goto retry_without_dsn;
+    }
     GST_WARNING ("Could not synchronize media playlists");
     return FALSE;
   }