diff options
| author | Jan Müller <github@lonebyte.de> | 2023-08-01 17:11:32 +0200 |
|---|---|---|
| committer | Jan Müller <github@lonebyte.de> | 2023-08-01 17:11:32 +0200 |
| commit | e9f23c61c937b230b1d3bd7865a083aeb3d51657 (patch) | |
| tree | 80ee7c13cd6f3c49632eceb150c4c6cd35718dda | |
| parent | d3c7af0d5c3709e18eac71fdb0279e985b6a9113 (diff) | |
Fix the fLaC/flac HLS issue also for audio-only
I moved the first application of the workaround out of the if block
so that it also applies to audio-only streams. The workaround was
extended likewise.
We should first and foremost adhere to the specifications and apply
workarounds afterwards for software that doesn't follow them. So I
turned around the workaround to first output the fLaC variant and then
the alternative flac variant.
Fixes: #10066
| -rw-r--r-- | Jellyfin.Api/Helpers/DynamicHlsHelper.cs | 21 | ||||
| -rw-r--r-- | Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs | 6 |
2 files changed, 16 insertions, 11 deletions
diff --git a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs index 63667e7e6..dfcccddfc 100644 --- a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs +++ b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs @@ -198,15 +198,15 @@ public class DynamicHlsHelper var basicPlaylist = AppendPlaylist(builder, state, playlistUrl, totalBitrate, subtitleGroup); - if (state.VideoStream is not null && state.VideoRequest is not null) + // Provide a workaround for the case issue between flac and fLaC. + var flacWaPlaylist = ApplyFlacCaseWorkaround(state, basicPlaylist.ToString()); + if (!string.IsNullOrEmpty(flacWaPlaylist)) { - // Provide a workaround for the case issue between flac and fLaC. - var flacWaPlaylist = ApplyFlacCaseWorkaround(state, basicPlaylist.ToString()); - if (!string.IsNullOrEmpty(flacWaPlaylist)) - { - builder.Append(flacWaPlaylist); - } + builder.Append(flacWaPlaylist); + } + if (state.VideoStream is not null && state.VideoRequest is not null) + { var encodingOptions = _serverConfigurationManager.GetEncodingOptions(); // Provide SDR HEVC entrance for backward compatibility. @@ -775,8 +775,11 @@ public class DynamicHlsHelper return string.Empty; } - var newPlaylist = srcPlaylist.Replace(",flac\"", ",fLaC\"", StringComparison.Ordinal); + var newPlaylist = srcPlaylist; + + newPlaylist = newPlaylist.Replace(",fLaC\"", ",flac\"", StringComparison.Ordinal); + newPlaylist = newPlaylist.Replace("\"fLaC\"", "\"flac\"", StringComparison.Ordinal); - return newPlaylist.Contains(",fLaC\"", StringComparison.Ordinal) ? newPlaylist : string.Empty; + return string.Equals(srcPlaylist, newPlaylist, StringComparison.Ordinal) ? string.Empty : newPlaylist; } } diff --git a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs index 9a141a16d..9b1c52045 100644 --- a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs +++ b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs @@ -5,7 +5,9 @@ using System.Text; namespace Jellyfin.Api.Helpers; /// <summary> -/// Hls Codec string helpers. +/// Helpers to generate HLS codec strings according to +/// <a href="https://datatracker.ietf.org/doc/html/rfc6381#section-3.3">RFC 6381 section 3.3</a> +/// and the <a href="https://mp4ra.org">MP4 Registration Authority</a>. /// </summary> public static class HlsCodecStringHelpers { @@ -27,7 +29,7 @@ public static class HlsCodecStringHelpers /// <summary> /// Codec name for FLAC. /// </summary> - public const string FLAC = "flac"; + public const string FLAC = "fLaC"; /// <summary> /// Codec name for ALAC. |
