浏览代码

support all inclusive direct play profile

Luke Pulverenti 8 年之前
父节点
当前提交
a0e7cdd2dc

+ 3 - 2
Emby.Dlna/PlayTo/PlaylistItemFactory.cs

@@ -56,8 +56,9 @@ namespace Emby.Dlna.PlayTo
             if (profile.Container.Length > 0)
             {
                 // Check container type
-                var mediaContainer = Path.GetExtension(mediaPath);
-                if (!profile.GetContainers().Any(i => string.Equals("." + i.TrimStart('.'), mediaContainer, StringComparison.OrdinalIgnoreCase)))
+                var mediaContainer = (Path.GetExtension(mediaPath) ?? string.Empty).TrimStart('.');
+
+                if (!profile.SupportsContainer(mediaContainer))
                 {
                     return false;
                 }

+ 0 - 5
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs

@@ -855,11 +855,6 @@ namespace MediaBrowser.Api.Playback.Hls
             {
                 return string.Empty;
             }
-            // No known video stream
-            if (state.VideoStream == null)
-            {
-                return string.Empty;
-            }
 
             var codec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions());
 

+ 0 - 5
MediaBrowser.Api/Playback/Hls/VideoHlsService.cs

@@ -79,11 +79,6 @@ namespace MediaBrowser.Api.Playback.Hls
             {
                 return string.Empty;
             }
-            // No known video stream
-            if (state.VideoStream == null)
-            {
-                return string.Empty;
-            }
 
             var codec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions());
 

+ 16 - 2
MediaBrowser.Model/Dlna/DirectPlayProfile.cs

@@ -1,6 +1,7 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Xml.Serialization;
-using MediaBrowser.Model.Dlna;
 
 namespace MediaBrowser.Model.Dlna
 {
@@ -28,6 +29,19 @@ namespace MediaBrowser.Model.Dlna
             return list;
         }
 
+        public bool SupportsContainer(string container)
+        {
+            var all = GetContainers();
+
+            // Only allow unknown container if the profile is all inclusive
+            if (string.IsNullOrWhiteSpace(container))
+            {
+                return all.Count == 0;
+            }
+
+            return all.Count == 0 || all.Contains(container, StringComparer.OrdinalIgnoreCase);
+        }
+
         public List<string> GetAudioCodecs()
         {
             List<string> list = new List<string>();

+ 36 - 69
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -492,52 +492,45 @@ namespace MediaBrowser.Model.Dlna
 
             foreach (var profile in directPlayProfiles)
             {
-                if (profile.Container.Length > 0)
+                // Check container type
+                if (profile.SupportsContainer(item.Container))
                 {
-                    // Check container type
-                    string mediaContainer = item.Container ?? string.Empty;
-                    foreach (string i in profile.GetContainers())
+                    containerSupported = true;
+
+                    if (videoStream != null)
                     {
-                        if (StringHelper.EqualsIgnoreCase(i, mediaContainer))
+                        // Check video codec
+                        List<string> videoCodecs = profile.GetVideoCodecs();
+                        if (videoCodecs.Count > 0)
                         {
-                            containerSupported = true;
-
-                            if (videoStream != null)
+                            string videoCodec = videoStream.Codec;
+                            if (!string.IsNullOrEmpty(videoCodec) && ListHelper.ContainsIgnoreCase(videoCodecs, videoCodec))
                             {
-                                // Check video codec
-                                List<string> videoCodecs = profile.GetVideoCodecs();
-                                if (videoCodecs.Count > 0)
-                                {
-                                    string videoCodec = videoStream.Codec;
-                                    if (!string.IsNullOrEmpty(videoCodec) && ListHelper.ContainsIgnoreCase(videoCodecs, videoCodec))
-                                    {
-                                        videoSupported = true;
-                                    }
-                                }
-                                else
-                                {
-                                    videoSupported = true;
-                                }
+                                videoSupported = true;
                             }
+                        }
+                        else
+                        {
+                            videoSupported = true;
+                        }
+                    }
 
-                            if (audioStream != null)
+                    if (audioStream != null)
+                    {
+                        // Check audio codec
+                        List<string> audioCodecs = profile.GetAudioCodecs();
+                        if (audioCodecs.Count > 0)
+                        {
+                            string audioCodec = audioStream.Codec;
+                            if (!string.IsNullOrEmpty(audioCodec) && ListHelper.ContainsIgnoreCase(audioCodecs, audioCodec))
                             {
-                                // Check audio codec
-                                List<string> audioCodecs = profile.GetAudioCodecs();
-                                if (audioCodecs.Count > 0)
-                                {
-                                    string audioCodec = audioStream.Codec;
-                                    if (!string.IsNullOrEmpty(audioCodec) && ListHelper.ContainsIgnoreCase(audioCodecs, audioCodec))
-                                    {
-                                        audioSupported = true;
-                                    }
-                                }
-                                else
-                                {
-                                    audioSupported = true;
-                                }
+                                audioSupported = true;
                             }
                         }
+                        else
+                        {
+                            audioSupported = true;
+                        }
                     }
                 }
             }
@@ -1538,23 +1531,10 @@ namespace MediaBrowser.Model.Dlna
 
         private bool IsAudioDirectPlaySupported(DirectPlayProfile profile, MediaSourceInfo item, MediaStream audioStream)
         {
-            if (profile.Container.Length > 0)
+            // Check container type
+            if (!profile.SupportsContainer(item.Container))
             {
-                // Check container type
-                string mediaContainer = item.Container ?? string.Empty;
-                bool any = false;
-                foreach (string i in profile.GetContainers())
-                {
-                    if (StringHelper.EqualsIgnoreCase(i, mediaContainer))
-                    {
-                        any = true;
-                        break;
-                    }
-                }
-                if (!any)
-                {
-                    return false;
-                }
+                return false;
             }
 
             // Check audio codec
@@ -1574,23 +1554,10 @@ namespace MediaBrowser.Model.Dlna
 
         private bool IsVideoDirectPlaySupported(DirectPlayProfile profile, MediaSourceInfo item, MediaStream videoStream, MediaStream audioStream)
         {
-            if (profile.Container.Length > 0)
+            // Check container type
+            if (!profile.SupportsContainer(item.Container))
             {
-                // Check container type
-                string mediaContainer = item.Container ?? string.Empty;
-                bool any = false;
-                foreach (string i in profile.GetContainers())
-                {
-                    if (StringHelper.EqualsIgnoreCase(i, mediaContainer))
-                    {
-                        any = true;
-                        break;
-                    }
-                }
-                if (!any)
-                {
-                    return false;
-                }
+                return false;
             }
 
             // Check video codec

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.25.3")]
+[assembly: AssemblyVersion("3.2.25.4")]