diff --git a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs
index 16e51151d9..44e1c6d5a2 100644
--- a/Jellyfin.Api/Helpers/DynamicHlsHelper.cs
+++ b/Jellyfin.Api/Helpers/DynamicHlsHelper.cs
@@ -754,7 +754,9 @@ public class DynamicHlsHelper
{
if (string.Equals(state.ActualOutputAudioCodec, "aac", StringComparison.OrdinalIgnoreCase))
{
- string? profile = state.GetRequestedProfiles("aac").FirstOrDefault();
+ string? profile = EncodingHelper.IsCopyCodec(state.OutputAudioCodec)
+ ? state.AudioStream?.Profile : state.GetRequestedProfiles("aac").FirstOrDefault();
+
return HlsCodecStringHelpers.GetAACString(profile);
}
@@ -788,6 +790,19 @@ public class DynamicHlsHelper
return HlsCodecStringHelpers.GetOPUSString();
}
+ if (string.Equals(state.ActualOutputAudioCodec, "truehd", StringComparison.OrdinalIgnoreCase))
+ {
+ return HlsCodecStringHelpers.GetTRUEHDString();
+ }
+
+ if (string.Equals(state.ActualOutputAudioCodec, "dts", StringComparison.OrdinalIgnoreCase))
+ {
+ // lavc only support encoding DTS core profile
+ string? profile = EncodingHelper.IsCopyCodec(state.OutputAudioCodec) ? state.AudioStream?.Profile : "DTS";
+
+ return HlsCodecStringHelpers.GetDTSString(profile);
+ }
+
return string.Empty;
}
diff --git a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
index 0efb7f45de..cf42d5f10b 100644
--- a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
+++ b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
@@ -41,6 +41,11 @@ public static class HlsCodecStringHelpers
///
public const string OPUS = "Opus";
+ ///
+ /// Codec name for TRUEHD.
+ ///
+ public const string TRUEHD = "mlpa";
+
///
/// Gets a MP3 codec string.
///
@@ -59,7 +64,7 @@ public static class HlsCodecStringHelpers
{
StringBuilder result = new StringBuilder("mp4a", 9);
- if (string.Equals(profile, "HE", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(profile, "HE-AAC", StringComparison.OrdinalIgnoreCase))
{
result.Append(".40.5");
}
@@ -117,6 +122,46 @@ public static class HlsCodecStringHelpers
return OPUS;
}
+ ///
+ /// Gets an TRUEHD codec string.
+ ///
+ /// TRUEHD codec string.
+ public static string GetTRUEHDString()
+ {
+ return TRUEHD;
+ }
+
+ ///
+ /// Gets an DTS codec string.
+ ///
+ /// DTS profile.
+ /// DTS codec string.
+ public static string GetDTSString(string? profile)
+ {
+ if (string.Equals(profile, "DTS", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(profile, "DTS-ES", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(profile, "DTS 96/24", StringComparison.OrdinalIgnoreCase))
+ {
+ return "dtsc";
+ }
+
+ if (string.Equals(profile, "DTS-HD HRA", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(profile, "DTS-HD MA", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(profile, "DTS-HD MA + DTS:X", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(profile, "DTS-HD MA + DTS:X IMAX", StringComparison.OrdinalIgnoreCase))
+ {
+ return "dtsh";
+ }
+
+ if (string.Equals(profile, "DTS Express", StringComparison.OrdinalIgnoreCase))
+ {
+ return "dtse";
+ }
+
+ // Default to DTS core if profile is invalid
+ return "dtsc";
+ }
+
///
/// Gets a H.264 codec string.
///