소스 검색

Merge pull request #2676 from MediaBrowser/dev

Dev
Luke 8 년 전
부모
커밋
4e10daf646

+ 12 - 0
Emby.Dlna/Profiles/DefaultProfile.cs

@@ -135,6 +135,18 @@ namespace Emby.Dlna.Profiles
                 {
                     Format = "sub",
                     Method = SubtitleDeliveryMethod.Embed
+                },
+
+                new SubtitleProfile
+                {
+                    Format = "subrip",
+                    Method = SubtitleDeliveryMethod.Embed
+                },
+
+                new SubtitleProfile
+                {
+                    Format = "vtt",
+                    Method = SubtitleDeliveryMethod.Embed
                 }
             };
 

+ 2 - 0
Emby.Dlna/Profiles/Xml/Default.xml

@@ -55,5 +55,7 @@
     <SubtitleProfile format="pgs" method="Embed" />
     <SubtitleProfile format="pgssub" method="Embed" />
     <SubtitleProfile format="sub" method="Embed" />
+    <SubtitleProfile format="subrip" method="Embed" />
+    <SubtitleProfile format="vtt" method="Embed" />
   </SubtitleProfiles>
 </Profile>

+ 2 - 0
Emby.Dlna/Profiles/Xml/Denon AVR.xml

@@ -55,5 +55,7 @@
     <SubtitleProfile format="pgs" method="Embed" />
     <SubtitleProfile format="pgssub" method="Embed" />
     <SubtitleProfile format="sub" method="Embed" />
+    <SubtitleProfile format="subrip" method="Embed" />
+    <SubtitleProfile format="vtt" method="Embed" />
   </SubtitleProfiles>
 </Profile>

+ 2 - 0
Emby.Dlna/Profiles/Xml/MediaMonkey.xml

@@ -61,5 +61,7 @@
     <SubtitleProfile format="pgs" method="Embed" />
     <SubtitleProfile format="pgssub" method="Embed" />
     <SubtitleProfile format="sub" method="Embed" />
+    <SubtitleProfile format="subrip" method="Embed" />
+    <SubtitleProfile format="vtt" method="Embed" />
   </SubtitleProfiles>
 </Profile>

+ 2 - 0
Emby.Dlna/Profiles/Xml/foobar2000.xml

@@ -61,5 +61,7 @@
     <SubtitleProfile format="pgs" method="Embed" />
     <SubtitleProfile format="pgssub" method="Embed" />
     <SubtitleProfile format="sub" method="Embed" />
+    <SubtitleProfile format="subrip" method="Embed" />
+    <SubtitleProfile format="vtt" method="Embed" />
   </SubtitleProfiles>
 </Profile>

+ 15 - 3
Emby.Server.Implementations/HttpServer/HttpResultFactory.cs

@@ -58,6 +58,18 @@ namespace Emby.Server.Implementations.HttpServer
             return GetHttpResult(content, contentType, true, responseHeaders);
         }
 
+        public object GetRedirectResult(string url)
+        {
+            var responseHeaders = new Dictionary<string, string>();
+            responseHeaders["Location"] = url;
+
+            var result = new HttpResult(new byte[] { }, "text/plain", HttpStatusCode.Redirect);
+
+            AddResponseHeaders(result, responseHeaders);
+
+            return result;
+        }
+
         /// <summary>
         /// Gets the HTTP result.
         /// </summary>
@@ -599,9 +611,9 @@ namespace Emby.Server.Implementations.HttpServer
             }
         }
 
-        private async Task<IHasHeaders> GetCompressedResult(Stream stream, 
-            string requestedCompressionType, 
-            IDictionary<string,string> responseHeaders,
+        private async Task<IHasHeaders> GetCompressedResult(Stream stream,
+            string requestedCompressionType,
+            IDictionary<string, string> responseHeaders,
             bool isHeadRequest,
             string contentType)
         {

+ 26 - 3
MediaBrowser.Api/Playback/UniversalAudioService.cs

@@ -1,7 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Globalization;
-using System.IO;
 using System.Threading.Tasks;
 using MediaBrowser.Api.Playback.Hls;
 using MediaBrowser.Api.Playback.Progressive;
@@ -42,6 +41,7 @@ namespace MediaBrowser.Api.Playback
         public string Container { get; set; }
 
         public int? MaxAudioChannels { get; set; }
+        public int? TranscodingAudioChannels { get; set; }
 
         public long? MaxStreamingBitrate { get; set; }
 
@@ -51,6 +51,15 @@ namespace MediaBrowser.Api.Playback
         public string TranscodingContainer { get; set; }
         public string TranscodingProtocol { get; set; }
         public int? MaxAudioSampleRate { get; set; }
+
+        public bool EnableRedirection { get; set; }
+        public bool EnableRemoteMedia { get; set; }
+        public bool BreakOnNonKeyFrames { get; set; }
+
+        public BaseUniversalRequest()
+        {
+            EnableRedirection = true;
+        }
     }
 
     [Route("/Audio/{Id}/universal.{Container}", "GET", Summary = "Gets an audio stream")]
@@ -133,7 +142,9 @@ namespace MediaBrowser.Api.Playback
                     Context = EncodingContext.Streaming,
                     Container = request.TranscodingContainer,
                     AudioCodec = request.AudioCodec,
-                    Protocol = request.TranscodingProtocol
+                    Protocol = request.TranscodingProtocol,
+                    BreakOnNonKeyFrames = request.BreakOnNonKeyFrames,
+                    MaxAudioChannels = request.TranscodingAudioChannels.HasValue ? request.TranscodingAudioChannels.Value.ToString(CultureInfo.InvariantCulture) : null
                 }
             };
 
@@ -205,6 +216,17 @@ namespace MediaBrowser.Api.Playback
 
             var mediaSource = playbackInfoResult.MediaSources[0];
 
+            if (mediaSource.SupportsDirectPlay && mediaSource.Protocol == MediaProtocol.Http)
+            {
+                if (request.EnableRedirection)
+                {
+                    if (mediaSource.IsRemote && request.EnableRemoteMedia)
+                    {
+                        return ResultFactory.GetRedirectResult(mediaSource.Path);
+                    }
+                }
+            }
+
             var isStatic = mediaSource.SupportsDirectStream;
 
             if (!isStatic && string.Equals(mediaSource.TranscodingSubProtocol, "hls", StringComparison.OrdinalIgnoreCase))
@@ -242,7 +264,8 @@ namespace MediaBrowser.Api.Playback
                     StartTimeTicks = request.StartTimeTicks,
                     Static = isStatic,
                     SegmentContainer = request.TranscodingContainer,
-                    AudioSampleRate = request.MaxAudioSampleRate
+                    AudioSampleRate = request.MaxAudioSampleRate,
+                    BreakOnNonKeyFrames = transcodingProfile.BreakOnNonKeyFrames
                 };
 
                 if (isHeadRequest)

+ 1 - 0
MediaBrowser.Api/StartupWizardService.cs

@@ -100,6 +100,7 @@ namespace MediaBrowser.Api
             config.EnableSimpleArtistDetection = true;
             config.EnableNormalizedItemByNameIds = true;
             config.DisableLiveTvChannelUserDataName = true;
+            config.EnableSimpleSortNameHandling = true;
         }
 
         public void Post(UpdateStartupConfiguration request)

+ 11 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -655,7 +655,17 @@ namespace MediaBrowser.Controller.Entities
 
         private string CreateSortNameFromCustomValue(string value)
         {
-            return string.IsNullOrWhiteSpace(value) ? null : ModifySortChunks(value).ToLower();
+            return string.IsNullOrWhiteSpace(value) ? null : NormalizeCustomSortName(value);
+        }
+
+        protected virtual string NormalizeCustomSortName(string value)
+        {
+            if (ConfigurationManager.Configuration.EnableSimpleSortNameHandling)
+            {
+                return value.RemoveDiacritics().ToLower();
+            }
+
+            return ModifySortChunks(value).ToLower();
         }
 
         public bool IsSortNameDefault(string value)

+ 1 - 1
MediaBrowser.Controller/LiveTv/LiveTvChannel.cs

@@ -101,7 +101,7 @@ namespace MediaBrowser.Controller.LiveTv
                 }
             }
 
-            return Number + "-" + (Name ?? string.Empty);
+            return (Number ?? string.Empty) + "-" + (Name ?? string.Empty);
         }
 
         [IgnoreDataMember]

+ 2 - 0
MediaBrowser.Controller/Net/IHttpResultFactory.cs

@@ -22,6 +22,8 @@ namespace MediaBrowser.Controller.Net
         /// <returns>System.Object.</returns>
         object GetResult(object content, string contentType, IDictionary<string,string> responseHeaders = null);
 
+        object GetRedirectResult(string url);
+
         /// <summary>
         /// Gets the optimized result.
         /// </summary>

+ 2 - 2
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -17,6 +17,8 @@ namespace MediaBrowser.Model.Configuration
         /// <value><c>true</c> if [enable u pn p]; otherwise, <c>false</c>.</value>
         public bool EnableUPnP { get; set; }
 
+        public bool EnableSimpleSortNameHandling { get; set; }
+
         /// <summary>
         /// Gets or sets the public mapped port.
         /// </summary>
@@ -77,8 +79,6 @@ namespace MediaBrowser.Model.Configuration
         public string MetadataPath { get; set; }
         public string MetadataNetworkPath { get; set; }
 
-        public string LastVersion { get; set; }
-
         /// <summary>
         /// Gets or sets the display name of the season zero.
         /// </summary>