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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2839>
This commit is contained in:
Edward Hervey 2022-06-13 15:26:22 +02:00 committed by Tim-Philipp Müller
parent da65a7b0ba
commit c20ad629c7

View 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;
}