Correct the HLS Opus codec string

Apple doesn't support Opus via HLS yet, but if they ever do, they will
definitely expect "Opus" instead of "opus".

See https://mp4ra.org/#/codecs

Fixes: #10066
This commit is contained in:
Jan Müller 2023-08-01 17:22:42 +02:00
parent e9f23c61c9
commit 19fb061381
2 changed files with 16 additions and 14 deletions

View File

@ -198,11 +198,11 @@ public class DynamicHlsHelper
var basicPlaylist = AppendPlaylist(builder, state, playlistUrl, totalBitrate, subtitleGroup); var basicPlaylist = AppendPlaylist(builder, state, playlistUrl, totalBitrate, subtitleGroup);
// Provide a workaround for the case issue between flac and fLaC. // Provide a workaround for alternative codec string capitalization.
var flacWaPlaylist = ApplyFlacCaseWorkaround(state, basicPlaylist.ToString()); var alternativeCodecCapitalizationPlaylist = ApplyCodecCapitalizationWorkaround(state, basicPlaylist.ToString());
if (!string.IsNullOrEmpty(flacWaPlaylist)) if (!string.IsNullOrEmpty(alternativeCodecCapitalizationPlaylist))
{ {
builder.Append(flacWaPlaylist); builder.Append(alternativeCodecCapitalizationPlaylist);
} }
if (state.VideoStream is not null && state.VideoRequest is not null) if (state.VideoStream is not null && state.VideoRequest is not null)
@ -238,11 +238,11 @@ public class DynamicHlsHelper
var sdrTotalBitrate = sdrOutputAudioBitrate + sdrOutputVideoBitrate; var sdrTotalBitrate = sdrOutputAudioBitrate + sdrOutputVideoBitrate;
var sdrPlaylist = AppendPlaylist(builder, state, sdrVideoUrl, sdrTotalBitrate, subtitleGroup); var sdrPlaylist = AppendPlaylist(builder, state, sdrVideoUrl, sdrTotalBitrate, subtitleGroup);
// Provide a workaround for the case issue between flac and fLaC. // Provide a workaround for alternative codec string capitalization.
flacWaPlaylist = ApplyFlacCaseWorkaround(state, sdrPlaylist.ToString()); alternativeCodecCapitalizationPlaylist = ApplyCodecCapitalizationWorkaround(state, sdrPlaylist.ToString());
if (!string.IsNullOrEmpty(flacWaPlaylist)) if (!string.IsNullOrEmpty(alternativeCodecCapitalizationPlaylist))
{ {
builder.Append(flacWaPlaylist); builder.Append(alternativeCodecCapitalizationPlaylist);
} }
// Restore the video codec // Restore the video codec
@ -275,11 +275,11 @@ public class DynamicHlsHelper
var newPlaylist = ReplacePlaylistCodecsField(basicPlaylist, playlistCodecsField, newPlaylistCodecsField); var newPlaylist = ReplacePlaylistCodecsField(basicPlaylist, playlistCodecsField, newPlaylistCodecsField);
builder.Append(newPlaylist); builder.Append(newPlaylist);
// Provide a workaround for the case issue between flac and fLaC. // Provide a workaround for alternative codec string capitalization.
flacWaPlaylist = ApplyFlacCaseWorkaround(state, newPlaylist); alternativeCodecCapitalizationPlaylist = ApplyCodecCapitalizationWorkaround(state, newPlaylist);
if (!string.IsNullOrEmpty(flacWaPlaylist)) if (!string.IsNullOrEmpty(alternativeCodecCapitalizationPlaylist))
{ {
builder.Append(flacWaPlaylist); builder.Append(alternativeCodecCapitalizationPlaylist);
} }
} }
} }
@ -768,7 +768,7 @@ public class DynamicHlsHelper
StringComparison.Ordinal); StringComparison.Ordinal);
} }
private string ApplyFlacCaseWorkaround(StreamState state, string srcPlaylist) private string ApplyCodecCapitalizationWorkaround(StreamState state, string srcPlaylist)
{ {
if (!string.Equals(state.ActualOutputAudioCodec, "flac", StringComparison.OrdinalIgnoreCase)) if (!string.Equals(state.ActualOutputAudioCodec, "flac", StringComparison.OrdinalIgnoreCase))
{ {
@ -779,6 +779,8 @@ public class DynamicHlsHelper
newPlaylist = newPlaylist.Replace(",fLaC\"", ",flac\"", StringComparison.Ordinal); newPlaylist = newPlaylist.Replace(",fLaC\"", ",flac\"", StringComparison.Ordinal);
newPlaylist = newPlaylist.Replace("\"fLaC\"", "\"flac\"", StringComparison.Ordinal); newPlaylist = newPlaylist.Replace("\"fLaC\"", "\"flac\"", StringComparison.Ordinal);
newPlaylist = newPlaylist.Replace(",Opus\"", ",opus\"", StringComparison.Ordinal);
newPlaylist = newPlaylist.Replace("\"Opus\"", "\"opus\"", StringComparison.Ordinal);
return string.Equals(srcPlaylist, newPlaylist, StringComparison.Ordinal) ? string.Empty : newPlaylist; return string.Equals(srcPlaylist, newPlaylist, StringComparison.Ordinal) ? string.Empty : newPlaylist;
} }

View File

@ -39,7 +39,7 @@ public static class HlsCodecStringHelpers
/// <summary> /// <summary>
/// Codec name for OPUS. /// Codec name for OPUS.
/// </summary> /// </summary>
public const string OPUS = "opus"; public const string OPUS = "Opus";
/// <summary> /// <summary>
/// Gets a MP3 codec string. /// Gets a MP3 codec string.