|
|
|
@ -109,15 +109,7 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
|
|
|
|
|
int? maxBitrateSetting = options.MaxBitrate ?? options.Profile.MaxBitrate;
|
|
|
|
|
|
|
|
|
|
MediaStream audioStream = null;
|
|
|
|
|
foreach (MediaStream i in item.MediaStreams)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == MediaStreamType.Audio)
|
|
|
|
|
{
|
|
|
|
|
audioStream = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MediaStream audioStream = item.DefaultAudioStream;
|
|
|
|
|
|
|
|
|
|
// Honor the max bitrate setting
|
|
|
|
|
if (IsAudioEligibleForDirectPlay(item, maxBitrateSetting))
|
|
|
|
@ -191,11 +183,20 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
playlistItem.AudioCodec = transcodingProfile.AudioCodec;
|
|
|
|
|
playlistItem.Protocol = transcodingProfile.Protocol;
|
|
|
|
|
|
|
|
|
|
List<ProfileCondition> audioTranscodingConditions = options.Profile.CodecProfiles
|
|
|
|
|
.Where(i => i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
|
|
|
|
.Take(1)
|
|
|
|
|
.SelectMany(i => i.Conditions)
|
|
|
|
|
.ToList();
|
|
|
|
|
List<CodecProfile> audioCodecProfiles = new List<CodecProfile>();
|
|
|
|
|
foreach (CodecProfile i in options.Profile.CodecProfiles)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == CodecType.Audio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
|
|
|
|
{
|
|
|
|
|
audioCodecProfiles.Add(i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (audioCodecProfiles.Count >= 1) break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<ProfileCondition> audioTranscodingConditions = new List<ProfileCondition>();
|
|
|
|
|
foreach (CodecProfile i in audioCodecProfiles)
|
|
|
|
|
audioTranscodingConditions.AddRange(i.Conditions);
|
|
|
|
|
|
|
|
|
|
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions);
|
|
|
|
|
|
|
|
|
@ -229,25 +230,8 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
RunTimeTicks = item.RunTimeTicks
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
MediaStream audioStream = null;
|
|
|
|
|
foreach (MediaStream i in item.MediaStreams)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == MediaStreamType.Audio)
|
|
|
|
|
{
|
|
|
|
|
audioStream = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MediaStream videoStream = null;
|
|
|
|
|
foreach (MediaStream i in item.MediaStreams)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == MediaStreamType.Video)
|
|
|
|
|
{
|
|
|
|
|
videoStream = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
MediaStream audioStream = item.DefaultAudioStream;
|
|
|
|
|
MediaStream videoStream = item.VideoStream;
|
|
|
|
|
|
|
|
|
|
int? maxBitrateSetting = options.MaxBitrate ?? options.Profile.MaxBitrate;
|
|
|
|
|
|
|
|
|
@ -288,18 +272,26 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
playlistItem.AudioStreamIndex = options.AudioStreamIndex;
|
|
|
|
|
playlistItem.SubtitleStreamIndex = options.SubtitleStreamIndex;
|
|
|
|
|
|
|
|
|
|
IEnumerable<ProfileCondition> videoTranscodingConditions = options.Profile.CodecProfiles
|
|
|
|
|
.Where(i => i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec))
|
|
|
|
|
.Take(1)
|
|
|
|
|
.SelectMany(i => i.Conditions);
|
|
|
|
|
|
|
|
|
|
List<ProfileCondition> videoTranscodingConditions = new List<ProfileCondition>();
|
|
|
|
|
foreach (CodecProfile i in options.Profile.CodecProfiles)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == CodecType.Video && i.ContainsCodec(transcodingProfile.VideoCodec))
|
|
|
|
|
{
|
|
|
|
|
videoTranscodingConditions.AddRange(i.Conditions);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApplyTranscodingConditions(playlistItem, videoTranscodingConditions);
|
|
|
|
|
|
|
|
|
|
IEnumerable<ProfileCondition> audioTranscodingConditions = options.Profile.CodecProfiles
|
|
|
|
|
.Where(i => i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
|
|
|
|
.Take(1)
|
|
|
|
|
.SelectMany(i => i.Conditions);
|
|
|
|
|
|
|
|
|
|
List<ProfileCondition> audioTranscodingConditions = new List<ProfileCondition>();
|
|
|
|
|
foreach (CodecProfile i in options.Profile.CodecProfiles)
|
|
|
|
|
{
|
|
|
|
|
if (i.Type == CodecType.VideoAudio && i.ContainsCodec(transcodingProfile.AudioCodec))
|
|
|
|
|
{
|
|
|
|
|
audioTranscodingConditions.AddRange(i.Conditions);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions);
|
|
|
|
|
|
|
|
|
|
// Honor requested max channels
|
|
|
|
@ -453,12 +445,6 @@ namespace MediaBrowser.Model.Dlna
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (options.AudioStreamIndex.HasValue &&
|
|
|
|
|
item.MediaStreams.Count(i => i.Type == MediaStreamType.Audio) > 1)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return IsAudioEligibleForDirectPlay(item, maxBitrate);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|