|
|
|
@ -436,9 +436,9 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
{
|
|
|
|
|
containerSupported = true;
|
|
|
|
|
|
|
|
|
|
videoSupported = videoStream != null && profile.SupportsVideoCodec(videoStream.Codec);
|
|
|
|
|
videoSupported = videoStream == null || profile.SupportsVideoCodec(videoStream.Codec);
|
|
|
|
|
|
|
|
|
|
audioSupported = audioStream != null && profile.SupportsAudioCodec(audioStream.Codec);
|
|
|
|
|
audioSupported = audioStream == null || profile.SupportsAudioCodec(audioStream.Codec);
|
|
|
|
|
|
|
|
|
|
if (videoSupported && audioSupported)
|
|
|
|
|
{
|
|
|
|
@ -447,18 +447,17 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var list = new List<TranscodeReason>();
|
|
|
|
|
if (!containerSupported)
|
|
|
|
|
{
|
|
|
|
|
reasons |= TranscodeReason.ContainerNotSupported;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (videoStream != null && !videoSupported)
|
|
|
|
|
if (!videoSupported)
|
|
|
|
|
{
|
|
|
|
|
reasons |= TranscodeReason.VideoCodecNotSupported;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (audioStream != null && !audioSupported)
|
|
|
|
|
if (!audioSupported)
|
|
|
|
|
{
|
|
|
|
|
reasons |= TranscodeReason.AudioCodecNotSupported;
|
|
|
|
|
}
|
|
|
|
@ -590,21 +589,19 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Collect candidate audio streams
|
|
|
|
|
IEnumerable<MediaStream> candidateAudioStreams = audioStream == null ? Array.Empty<MediaStream>() : new[] { audioStream };
|
|
|
|
|
ICollection<MediaStream> candidateAudioStreams = audioStream == null ? Array.Empty<MediaStream>() : new[] { audioStream };
|
|
|
|
|
if (!options.AudioStreamIndex.HasValue || options.AudioStreamIndex < 0)
|
|
|
|
|
{
|
|
|
|
|
if (audioStream?.IsDefault == true)
|
|
|
|
|
{
|
|
|
|
|
candidateAudioStreams = item.MediaStreams.Where(stream => stream.Type == MediaStreamType.Audio && stream.IsDefault);
|
|
|
|
|
candidateAudioStreams = item.MediaStreams.Where(stream => stream.Type == MediaStreamType.Audio && stream.IsDefault).ToArray();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
candidateAudioStreams = item.MediaStreams.Where(stream => stream.Type == MediaStreamType.Audio && stream.Language == audioStream?.Language);
|
|
|
|
|
candidateAudioStreams = item.MediaStreams.Where(stream => stream.Type == MediaStreamType.Audio && stream.Language == audioStream?.Language).ToArray();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
candidateAudioStreams = candidateAudioStreams.ToArray();
|
|
|
|
|
|
|
|
|
|
var videoStream = item.VideoStream;
|
|
|
|
|
|
|
|
|
|
var directPlayBitrateEligibility = IsBitrateEligibleForDirectPlayback(item, options.GetMaxBitrate(false) ?? 0, options, PlayMethod.DirectPlay);
|
|
|
|
@ -1060,7 +1057,7 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
MediaSourceInfo mediaSource,
|
|
|
|
|
MediaStream videoStream,
|
|
|
|
|
MediaStream audioStream,
|
|
|
|
|
IEnumerable<MediaStream> candidateAudioStreams,
|
|
|
|
|
ICollection<MediaStream> candidateAudioStreams,
|
|
|
|
|
MediaStream subtitleStream,
|
|
|
|
|
bool isEligibleForDirectPlay,
|
|
|
|
|
bool isEligibleForDirectStream)
|
|
|
|
@ -1182,14 +1179,18 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check audio codec
|
|
|
|
|
var selectedAudioStream = candidateAudioStreams.FirstOrDefault(audioStream => directPlayProfile.SupportsAudioCodec(audioStream.Codec));
|
|
|
|
|
if (selectedAudioStream == null)
|
|
|
|
|
{
|
|
|
|
|
directPlayProfileReasons |= TranscodeReason.AudioCodecNotSupported;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
MediaStream selectedAudioStream = null;
|
|
|
|
|
if (candidateAudioStreams.Any())
|
|
|
|
|
{
|
|
|
|
|
audioCodecProfileReasons = audioStreamMatches.GetValueOrDefault(selectedAudioStream);
|
|
|
|
|
selectedAudioStream = candidateAudioStreams.FirstOrDefault(audioStream => directPlayProfile.SupportsAudioCodec(audioStream.Codec));
|
|
|
|
|
if (selectedAudioStream == null)
|
|
|
|
|
{
|
|
|
|
|
directPlayProfileReasons |= TranscodeReason.AudioCodecNotSupported;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
audioCodecProfileReasons = audioStreamMatches.GetValueOrDefault(selectedAudioStream);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var failureReasons = directPlayProfileReasons | containerProfileReasons | subtitleProfileReasons;
|
|
|
|
|