mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Add support for OPUS and fixes for FLAC case issue in HLS
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
parent
3a5503be5f
commit
9799136daf
@ -204,6 +204,13 @@ namespace Jellyfin.Api.Helpers
|
|||||||
|
|
||||||
if (state.VideoStream != null && state.VideoRequest != null)
|
if (state.VideoStream != null && state.VideoRequest != null)
|
||||||
{
|
{
|
||||||
|
// Provide a workaround for the case issue between flac and fLaC.
|
||||||
|
var flacWaPlaylist = ApplyFlacCaseWorkaround(state, basicPlaylist.ToString());
|
||||||
|
if (!String.IsNullOrEmpty(flacWaPlaylist))
|
||||||
|
{
|
||||||
|
builder.Append(flacWaPlaylist);
|
||||||
|
}
|
||||||
|
|
||||||
var encodingOptions = _serverConfigurationManager.GetEncodingOptions();
|
var encodingOptions = _serverConfigurationManager.GetEncodingOptions();
|
||||||
|
|
||||||
// Provide SDR HEVC entrance for backward compatibility.
|
// Provide SDR HEVC entrance for backward compatibility.
|
||||||
@ -237,7 +244,7 @@ namespace Jellyfin.Api.Helpers
|
|||||||
|
|
||||||
// Provide a workaround for the case issue between flac and fLaC.
|
// Provide a workaround for the case issue between flac and fLaC.
|
||||||
flacWaPlaylist = ApplyFlacCaseWorkaround(state, sdrPlaylist.ToString());
|
flacWaPlaylist = ApplyFlacCaseWorkaround(state, sdrPlaylist.ToString());
|
||||||
if (!string.IsNullOrEmpty(flacWaPlaylist))
|
if (!String.IsNullOrEmpty(flacWaPlaylist))
|
||||||
{
|
{
|
||||||
builder.Append(flacWaPlaylist);
|
builder.Append(flacWaPlaylist);
|
||||||
}
|
}
|
||||||
@ -270,6 +277,13 @@ namespace Jellyfin.Api.Helpers
|
|||||||
state.VideoStream.Level = originalLevel;
|
state.VideoStream.Level = originalLevel;
|
||||||
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.
|
||||||
|
flacWaPlaylist = ApplyFlacCaseWorkaround(state, newPlaylist);
|
||||||
|
if (!String.IsNullOrEmpty(flacWaPlaylist))
|
||||||
|
{
|
||||||
|
builder.Append(flacWaPlaylist);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,6 +642,11 @@ namespace Jellyfin.Api.Helpers
|
|||||||
return HlsCodecStringHelpers.GetALACString();
|
return HlsCodecStringHelpers.GetALACString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.Equals(state.ActualOutputAudioCodec, "opus", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return HlsCodecStringHelpers.GetOPUSString();
|
||||||
|
}
|
||||||
|
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -726,7 +745,19 @@ namespace Jellyfin.Api.Helpers
|
|||||||
return oldPlaylist.Replace(
|
return oldPlaylist.Replace(
|
||||||
oldValue.ToString(),
|
oldValue.ToString(),
|
||||||
newValue.ToString(),
|
newValue.ToString(),
|
||||||
StringComparison.OrdinalIgnoreCase);
|
StringComparison.Ordinal);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ApplyFlacCaseWorkaround(StreamState state, string srcPlaylist)
|
||||||
|
{
|
||||||
|
if (!string.Equals(state.ActualOutputAudioCodec, "flac", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newPlaylist = srcPlaylist.Replace(",flac\"", ",fLaC\"", StringComparison.Ordinal);
|
||||||
|
|
||||||
|
return newPlaylist.Contains(",fLaC\"", StringComparison.Ordinal) ? newPlaylist : string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,13 +27,18 @@ namespace Jellyfin.Api.Helpers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Codec name for FLAC.
|
/// Codec name for FLAC.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string FLAC = "fLaC";
|
public const string FLAC = "flac";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Codec name for ALAC.
|
/// Codec name for ALAC.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string ALAC = "alac";
|
public const string ALAC = "alac";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Codec name for OPUS.
|
||||||
|
/// </summary>
|
||||||
|
public const string OPUS = "opus";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a MP3 codec string.
|
/// Gets a MP3 codec string.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -101,6 +106,15 @@ namespace Jellyfin.Api.Helpers
|
|||||||
return ALAC;
|
return ALAC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an OPUS codec string.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>OPUS codec string.</returns>
|
||||||
|
public static string GetOPUSString()
|
||||||
|
{
|
||||||
|
return OPUS;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a H.264 codec string.
|
/// Gets a H.264 codec string.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user