From c20ad629c707b44b43ef7d9be1e5a18de39ccae0 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 13 Jun 2022 15:26:22 +0200 Subject: [PATCH] hlsdemux2: Allow DSN mismatches when re-syncing playlists 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: --- .../gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c index 1edd69067c..72eabccc5b 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c @@ -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; }