added codec profiles

This commit is contained in:
Luke Pulverenti 2014-03-22 16:02:10 -04:00
parent bd7486b952
commit e2c0194744
6 changed files with 126 additions and 42 deletions

View File

@ -0,0 +1,51 @@
using System.Collections.Generic;
namespace MediaBrowser.Controller.Dlna
{
public class CodecProfile
{
public CodecType Type { get; set; }
public List<ProfileCondition> Conditions { get; set; }
public string[] Codecs { get; set; }
public CodecProfile()
{
Conditions = new List<ProfileCondition>();
Codecs = new string[] { };
}
}
public enum CodecType
{
VideoCodec = 0,
VideoAudioCodec = 1,
AudioCodec = 2
}
public class ProfileCondition
{
public ProfileConditionType Condition { get; set; }
public ProfileConditionValue Property { get; set; }
public string Value { get; set; }
}
public enum ProfileConditionType
{
Equals = 0,
NotEquals = 1,
LessThanEqual = 2,
GreaterThanEqual = 3
}
public enum ProfileConditionValue
{
AudioChannels,
AudioBitrate,
Filesize,
Width,
Height,
VideoBitrate,
VideoFramerate,
VideoLevel
}
}

View File

@ -56,12 +56,14 @@ namespace MediaBrowser.Controller.Dlna
public string ProtocolInfo { get; set; }
public MediaProfile[] MediaProfiles { get; set; }
public CodecProfile[] CodecProfiles { get; set; }
public DeviceProfile()
{
DirectPlayProfiles = new DirectPlayProfile[] { };
TranscodingProfiles = new TranscodingProfile[] { };
MediaProfiles = new MediaProfile[] { };
CodecProfiles = new CodecProfile[] { };
}
}
}

View File

@ -22,37 +22,10 @@ namespace MediaBrowser.Controller.Dlna
}
}
public class ProfileCondition
{
public ProfileConditionType Condition { get; set; }
public ProfileConditionValue Property { get; set; }
public string Value { get; set; }
}
public enum DlnaProfileType
{
Audio = 0,
Video = 1,
Photo = 2
}
public enum ProfileConditionType
{
Equals = 0,
NotEquals = 1,
LessThanEqual = 2,
GreaterThanEqual = 3
}
public enum ProfileConditionValue
{
AudioChannels,
AudioBitrate,
Filesize,
VideoWidth,
VideoHeight,
VideoBitrate,
VideoFramerate,
VideoLevel
}
}

View File

@ -78,6 +78,7 @@
<Compile Include="Channels\Channel.cs" />
<Compile Include="Collections\CollectionCreationOptions.cs" />
<Compile Include="Collections\ICollectionManager.cs" />
<Compile Include="Dlna\CodecProfile.cs" />
<Compile Include="Dlna\DeviceIdentification.cs" />
<Compile Include="Dlna\DirectPlayProfile.cs" />
<Compile Include="Dlna\IDlnaManager.cs" />

View File

@ -657,7 +657,7 @@ namespace MediaBrowser.Dlna
{
new DirectPlayProfile
{
Containers = new[]{"mp3", "flac", "m4a", "wma"},
Containers = new[]{"mp3", "flac", "m4a", "wma", "aac"},
Type = DlnaProfileType.Audio
},
@ -665,6 +665,54 @@ namespace MediaBrowser.Dlna
{
Containers = new[]{"avi", "mp4", "mkv", "ts"},
Type = DlnaProfileType.Video
},
new DirectPlayProfile
{
Type = DlnaProfileType.Photo,
Conditions = new List<ProfileCondition>
{
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.Width, Value = "1920"},
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.Height, Value = "1080"}
}
}
},
MediaProfiles = new[]
{
new MediaProfile
{
Container ="ts",
OrgPn = "MPEG_TS_SD_NA",
Type = DlnaProfileType.Video
}
},
CodecProfiles = new[]
{
new CodecProfile
{
Type = CodecType.VideoCodec,
Codecs = new[]{"h264"},
Conditions = new List<ProfileCondition>
{
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.Width, Value = "1920"},
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.Height, Value = "1080"},
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.VideoLevel, Value = "41"}
}
},
new CodecProfile
{
Type = CodecType.VideoAudioCodec,
Codecs = new[]{"aac"},
Conditions = new List<ProfileCondition>
{
new ProfileCondition{ Condition = ProfileConditionType.LessThanEqual, Property = ProfileConditionValue.AudioChannels, Value = "2"}
}
}
}
});

View File

@ -171,12 +171,15 @@ namespace MediaBrowser.Dlna.PlayTo
{
var mediaPath = item.Path;
if (profile.Containers.Length > 0)
{
// Check container type
var mediaContainer = Path.GetExtension(mediaPath);
if (!profile.Containers.Any(i => string.Equals("." + i.TrimStart('.'), mediaContainer, StringComparison.OrdinalIgnoreCase)))
{
return false;
}
}
// Check additional conditions
if (!profile.Conditions.Any(i => IsConditionSatisfied(i, mediaPath, null, null)))
@ -191,12 +194,15 @@ namespace MediaBrowser.Dlna.PlayTo
{
var mediaPath = item.Path;
if (profile.Containers.Length > 0)
{
// Check container type
var mediaContainer = Path.GetExtension(mediaPath);
if (!profile.Containers.Any(i => string.Equals("." + i.TrimStart('.'), mediaContainer, StringComparison.OrdinalIgnoreCase)))
{
return false;
}
}
// Check additional conditions
if (!profile.Conditions.Any(i => IsConditionSatisfied(i, mediaPath, null, audioStream)))
@ -216,12 +222,15 @@ namespace MediaBrowser.Dlna.PlayTo
var mediaPath = item.Path;
if (profile.Containers.Length > 0)
{
// Check container type
var mediaContainer = Path.GetExtension(mediaPath);
if (!profile.Containers.Any(i => string.Equals("." + i.TrimStart('.'), mediaContainer, StringComparison.OrdinalIgnoreCase)))
{
return false;
}
}
// Check video codec
if (profile.VideoCodecs.Length > 0)
@ -330,9 +339,9 @@ namespace MediaBrowser.Dlna.PlayTo
return videoStream == null ? null : videoStream.BitRate;
case ProfileConditionValue.VideoFramerate:
return videoStream == null ? null : (ConvertToLong(videoStream.AverageFrameRate ?? videoStream.RealFrameRate));
case ProfileConditionValue.VideoHeight:
case ProfileConditionValue.Height:
return videoStream == null ? null : videoStream.Height;
case ProfileConditionValue.VideoWidth:
case ProfileConditionValue.Width:
return videoStream == null ? null : videoStream.Width;
case ProfileConditionValue.VideoLevel:
return videoStream == null ? null : ConvertToLong(videoStream.Level);