mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> Co-authored-by: Nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
parent
5d4f71eb9a
commit
df00909b85
@ -1914,7 +1914,26 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
}
|
}
|
||||||
|
|
||||||
var profile = state.GetRequestedProfiles(targetVideoCodec).FirstOrDefault() ?? string.Empty;
|
var profile = state.GetRequestedProfiles(targetVideoCodec).FirstOrDefault() ?? string.Empty;
|
||||||
profile = WhiteSpaceRegex().Replace(profile, string.Empty);
|
profile = WhiteSpaceRegex().Replace(profile, string.Empty).ToLowerInvariant();
|
||||||
|
|
||||||
|
var videoProfiles = Array.Empty<string>();
|
||||||
|
if (string.Equals("h264", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
videoProfiles = _videoProfilesH264;
|
||||||
|
}
|
||||||
|
else if (string.Equals("hevc", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
videoProfiles = _videoProfilesH265;
|
||||||
|
}
|
||||||
|
else if (string.Equals("av1", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
videoProfiles = _videoProfilesAv1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!videoProfiles.Contains(profile, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
profile = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
// We only transcode to HEVC 8-bit for now, force Main Profile.
|
// We only transcode to HEVC 8-bit for now, force Main Profile.
|
||||||
if (profile.Contains("main10", StringComparison.OrdinalIgnoreCase)
|
if (profile.Contains("main10", StringComparison.OrdinalIgnoreCase)
|
||||||
|
@ -925,7 +925,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
audioStream = directAudioStream;
|
audioStream = directAudioStream;
|
||||||
playlistItem.AudioStreamIndex = audioStream.Index;
|
playlistItem.AudioStreamIndex = audioStream.Index;
|
||||||
playlistItem.AudioCodecs = new[] { audioStream.Codec };
|
playlistItem.AudioCodecs = audioCodecs = new[] { audioStream.Codec };
|
||||||
|
|
||||||
// Copy matching audio codec options
|
// Copy matching audio codec options
|
||||||
playlistItem.AudioSampleRate = audioStream.SampleRate;
|
playlistItem.AudioSampleRate = audioStream.SampleRate;
|
||||||
@ -966,15 +966,14 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
|
|
||||||
var appliedVideoConditions = options.Profile.CodecProfiles
|
var appliedVideoConditions = options.Profile.CodecProfiles
|
||||||
.Where(i => i.Type == CodecType.Video &&
|
.Where(i => i.Type == CodecType.Video &&
|
||||||
i.ContainsAnyCodec(videoStream?.Codec, container, useSubContainer) &&
|
i.ContainsAnyCodec(videoCodecs, container, useSubContainer) &&
|
||||||
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)))
|
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)))
|
||||||
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
|
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
|
||||||
.Reverse();
|
.Reverse();
|
||||||
|
|
||||||
foreach (var i in appliedVideoConditions)
|
foreach (var i in appliedVideoConditions)
|
||||||
{
|
{
|
||||||
var transcodingVideoCodecs = ContainerProfile.SplitValue(videoCodec);
|
foreach (var transcodingVideoCodec in videoCodecs)
|
||||||
foreach (var transcodingVideoCodec in transcodingVideoCodecs)
|
|
||||||
{
|
{
|
||||||
if (i.ContainsAnyCodec(transcodingVideoCodec, container, useSubContainer))
|
if (i.ContainsAnyCodec(transcodingVideoCodec, container, useSubContainer))
|
||||||
{
|
{
|
||||||
@ -999,15 +998,14 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
|
|
||||||
var appliedAudioConditions = options.Profile.CodecProfiles
|
var appliedAudioConditions = options.Profile.CodecProfiles
|
||||||
.Where(i => i.Type == CodecType.VideoAudio &&
|
.Where(i => i.Type == CodecType.VideoAudio &&
|
||||||
i.ContainsAnyCodec(audioStream?.Codec, container) &&
|
i.ContainsAnyCodec(audioCodecs, container) &&
|
||||||
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio)))
|
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio)))
|
||||||
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
|
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
|
||||||
.Reverse();
|
.Reverse();
|
||||||
|
|
||||||
foreach (var codecProfile in appliedAudioConditions)
|
foreach (var codecProfile in appliedAudioConditions)
|
||||||
{
|
{
|
||||||
var transcodingAudioCodecs = ContainerProfile.SplitValue(audioCodec);
|
foreach (var transcodingAudioCodec in audioCodecs)
|
||||||
foreach (var transcodingAudioCodec in transcodingAudioCodecs)
|
|
||||||
{
|
{
|
||||||
if (codecProfile.ContainsAnyCodec(transcodingAudioCodec, container))
|
if (codecProfile.ContainsAnyCodec(transcodingAudioCodec, container))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user