浏览代码

added codec profiles

Luke Pulverenti 11 年之前
父节点
当前提交
e2c0194744

+ 51 - 0
MediaBrowser.Controller/Dlna/CodecProfile.cs

@@ -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
+    }
+}

+ 2 - 0
MediaBrowser.Controller/Dlna/DeviceProfile.cs

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

+ 0 - 27
MediaBrowser.Controller/Dlna/DirectPlayProfile.cs

@@ -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
     public enum DlnaProfileType
     {
     {
         Audio = 0,
         Audio = 0,
         Video = 1,
         Video = 1,
         Photo = 2
         Photo = 2
     }
     }
-
-    public enum ProfileConditionType
-    {
-        Equals = 0,
-        NotEquals = 1,
-        LessThanEqual = 2,
-        GreaterThanEqual = 3
-    }
-
-    public enum ProfileConditionValue
-    {
-        AudioChannels,
-        AudioBitrate,
-        Filesize,
-        VideoWidth,
-        VideoHeight,
-        VideoBitrate,
-        VideoFramerate,
-        VideoLevel
-    }
 }
 }

+ 1 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

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

+ 49 - 1
MediaBrowser.Dlna/DlnaManager.cs

@@ -657,7 +657,7 @@ namespace MediaBrowser.Dlna
                 {
                 {
                     new DirectPlayProfile
                     new DirectPlayProfile
                     {
                     {
-                        Containers = new[]{"mp3", "flac", "m4a", "wma"}, 
+                        Containers = new[]{"mp3", "flac", "m4a", "wma", "aac"}, 
                         Type = DlnaProfileType.Audio
                         Type = DlnaProfileType.Audio
                     },
                     },
 
 
@@ -665,6 +665,54 @@ namespace MediaBrowser.Dlna
                     {
                     {
                         Containers = new[]{"avi", "mp4", "mkv", "ts"}, 
                         Containers = new[]{"avi", "mp4", "mkv", "ts"}, 
                         Type = DlnaProfileType.Video
                         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"}
+                        }
                     }
                     }
                 }
                 }
             });
             });

+ 23 - 14
MediaBrowser.Dlna/PlayTo/PlaylistItemFactory.cs

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