mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-06-04 22:24:35 -04:00
Calculate output bitrate from output channel count
This commit is contained in:
parent
edc627fd5b
commit
3e74377036
@ -223,7 +223,7 @@ public class DynamicHlsHelper
|
|||||||
sdrVideoUrl += "&AllowVideoStreamCopy=false";
|
sdrVideoUrl += "&AllowVideoStreamCopy=false";
|
||||||
|
|
||||||
var sdrOutputVideoBitrate = _encodingHelper.GetVideoBitrateParamValue(state.VideoRequest, state.VideoStream, state.OutputVideoCodec);
|
var sdrOutputVideoBitrate = _encodingHelper.GetVideoBitrateParamValue(state.VideoRequest, state.VideoStream, state.OutputVideoCodec);
|
||||||
var sdrOutputAudioBitrate = _encodingHelper.GetAudioBitrateParam(state.VideoRequest, state.AudioStream) ?? 0;
|
var sdrOutputAudioBitrate = _encodingHelper.GetAudioBitrateParam(state.VideoRequest, state.AudioStream, state.OutputAudioChannels) ?? 0;
|
||||||
var sdrTotalBitrate = sdrOutputAudioBitrate + sdrOutputVideoBitrate;
|
var sdrTotalBitrate = sdrOutputAudioBitrate + sdrOutputVideoBitrate;
|
||||||
|
|
||||||
var sdrPlaylist = AppendPlaylist(builder, state, sdrVideoUrl, sdrTotalBitrate, subtitleGroup);
|
var sdrPlaylist = AppendPlaylist(builder, state, sdrVideoUrl, sdrTotalBitrate, subtitleGroup);
|
||||||
|
@ -183,7 +183,7 @@ public static class StreamingHelpers
|
|||||||
|
|
||||||
state.OutputContainer = (containerInternal ?? string.Empty).TrimStart('.');
|
state.OutputContainer = (containerInternal ?? string.Empty).TrimStart('.');
|
||||||
|
|
||||||
state.OutputAudioBitrate = encodingHelper.GetAudioBitrateParam(streamingRequest.AudioBitRate, streamingRequest.AudioCodec, state.AudioStream);
|
state.OutputAudioBitrate = encodingHelper.GetAudioBitrateParam(streamingRequest.AudioBitRate, streamingRequest.AudioCodec, state.AudioStream, state.OutputAudioChannels);
|
||||||
|
|
||||||
state.OutputAudioCodec = streamingRequest.AudioCodec;
|
state.OutputAudioCodec = streamingRequest.AudioCodec;
|
||||||
|
|
||||||
|
@ -2111,42 +2111,40 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
return Convert.ToInt32(scaleFactor * bitrate);
|
return Convert.ToInt32(scaleFactor * bitrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int? GetAudioBitrateParam(BaseEncodingJobOptions request, MediaStream audioStream)
|
public int? GetAudioBitrateParam(BaseEncodingJobOptions request, MediaStream audioStream, int? outputAudioChannels)
|
||||||
{
|
{
|
||||||
return GetAudioBitrateParam(request.AudioBitRate, request.AudioCodec, audioStream);
|
return GetAudioBitrateParam(request.AudioBitRate, request.AudioCodec, audioStream, outputAudioChannels);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int? GetAudioBitrateParam(int? audioBitRate, string audioCodec, MediaStream audioStream)
|
public int? GetAudioBitrateParam(int? audioBitRate, string audioCodec, MediaStream audioStream, int? outputAudioChannels)
|
||||||
{
|
{
|
||||||
if (audioStream is null)
|
if (audioStream is null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (audioBitRate.HasValue && string.IsNullOrEmpty(audioCodec))
|
var inputChannels = audioStream.Channels ?? 0;
|
||||||
{
|
var outputChannels = outputAudioChannels ?? 0;
|
||||||
return Math.Min(384000, audioBitRate.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (audioBitRate.HasValue && !string.IsNullOrEmpty(audioCodec))
|
if (audioBitRate.HasValue && (string.IsNullOrEmpty(audioCodec)
|
||||||
{
|
|| string.Equals(audioCodec, "aac", StringComparison.OrdinalIgnoreCase)
|
||||||
if (string.Equals(audioCodec, "aac", StringComparison.OrdinalIgnoreCase)
|
|
||||||
|| string.Equals(audioCodec, "mp3", StringComparison.OrdinalIgnoreCase)
|
|| string.Equals(audioCodec, "mp3", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(audioCodec, "opus", StringComparison.OrdinalIgnoreCase)
|
|| string.Equals(audioCodec, "opus", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(audioCodec, "vorbis", StringComparison.OrdinalIgnoreCase)
|
|| string.Equals(audioCodec, "vorbis", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(audioCodec, "ac3", StringComparison.OrdinalIgnoreCase)
|
|| string.Equals(audioCodec, "ac3", StringComparison.OrdinalIgnoreCase)
|
||||||
|| string.Equals(audioCodec, "eac3", StringComparison.OrdinalIgnoreCase))
|
|| string.Equals(audioCodec, "eac3", StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
if ((audioStream.Channels ?? 0) >= 6)
|
return (inputChannels, outputChannels) switch
|
||||||
{
|
{
|
||||||
return Math.Min(640000, audioBitRate.Value);
|
(>= 6, >= 6 or 0) => Math.Min(640000, audioBitRate.Value),
|
||||||
|
(> 0, > 0) => Math.Min(outputChannels * 128000, audioBitRate.Value),
|
||||||
|
(> 0, _) => Math.Min(inputChannels * 128000, audioBitRate.Value),
|
||||||
|
(_, _) => Math.Min(384000, audioBitRate.Value)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return Math.Min(384000, audioBitRate.Value);
|
if (audioBitRate.HasValue && (string.Equals(audioCodec, "flac", StringComparison.OrdinalIgnoreCase)
|
||||||
}
|
|| string.Equals(audioCodec, "alac", StringComparison.OrdinalIgnoreCase)))
|
||||||
|
|
||||||
if (string.Equals(audioCodec, "flac", StringComparison.OrdinalIgnoreCase)
|
|
||||||
|| string.Equals(audioCodec, "alac", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
{
|
||||||
if ((audioStream.Channels ?? 0) >= 6)
|
if ((audioStream.Channels ?? 0) >= 6)
|
||||||
{
|
{
|
||||||
@ -2155,7 +2153,6 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
|
|
||||||
return Math.Min(1536000, audioBitRate.Value);
|
return Math.Min(1536000, audioBitRate.Value);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Empty bitrate area is not allow on iOS
|
// Empty bitrate area is not allow on iOS
|
||||||
// Default audio bitrate to 128K if it is not being requested
|
// Default audio bitrate to 128K if it is not being requested
|
||||||
|
Loading…
x
Reference in New Issue
Block a user