浏览代码

Merge pull request #2511 from MediaBrowser/dev

Dev
Luke 8 年之前
父节点
当前提交
881d442058

+ 3 - 1
Emby.Drawing.ImageMagick/ImageMagickEncoder.cs

@@ -44,7 +44,9 @@ namespace Emby.Drawing.ImageMagick
                     "cr2", 
                     "cr2", 
                     "crw", 
                     "crw", 
                     "dng", 
                     "dng", 
-                    "nef", 
+
+                    // Remove until supported
+                    //"nef", 
                     "orf", 
                     "orf", 
                     "pef", 
                     "pef", 
                     "arw", 
                     "arw", 

+ 1 - 1
Emby.Server.Implementations/Dto/DtoService.cs

@@ -491,7 +491,7 @@ namespace Emby.Server.Implementations.Dto
                 }
                 }
             }
             }
 
 
-            if (!(item is LiveTvProgram))
+            if (!(item is LiveTvProgram) || fields.Contains(ItemFields.PlayAccess))
             {
             {
                 dto.PlayAccess = item.GetPlayAccess(user);
                 dto.PlayAccess = item.GetPlayAccess(user);
             }
             }

+ 1 - 2
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -425,8 +425,7 @@ namespace Emby.Server.Implementations.Library
 
 
                 if (parent != null)
                 if (parent != null)
                 {
                 {
-                    await parent.ValidateChildren(new Progress<double>(), CancellationToken.None)
-                              .ConfigureAwait(false);
+                    await parent.ValidateChildren(new Progress<double>(), CancellationToken.None, new MetadataRefreshOptions(_fileSystem), false) .ConfigureAwait(false);
                 }
                 }
             }
             }
             else if (parent != null)
             else if (parent != null)

+ 5 - 2
Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs

@@ -6,7 +6,6 @@ using System.Threading.Tasks;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Model.Dlna;
 using MediaBrowser.Model.Dlna;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Model.Logging;
 
 
 namespace Emby.Server.Implementations.LiveTv
 namespace Emby.Server.Implementations.LiveTv
@@ -16,6 +15,8 @@ namespace Emby.Server.Implementations.LiveTv
         private readonly IMediaEncoder _mediaEncoder;
         private readonly IMediaEncoder _mediaEncoder;
         private readonly ILogger _logger;
         private readonly ILogger _logger;
 
 
+        const int AnalyzeDurationMs = 2000;
+
         public LiveStreamHelper(IMediaEncoder mediaEncoder, ILogger logger)
         public LiveStreamHelper(IMediaEncoder mediaEncoder, ILogger logger)
         {
         {
             _mediaEncoder = mediaEncoder;
             _mediaEncoder = mediaEncoder;
@@ -34,7 +35,7 @@ namespace Emby.Server.Implementations.LiveTv
                 Protocol = mediaSource.Protocol,
                 Protocol = mediaSource.Protocol,
                 MediaType = isAudio ? DlnaProfileType.Audio : DlnaProfileType.Video,
                 MediaType = isAudio ? DlnaProfileType.Audio : DlnaProfileType.Video,
                 ExtractChapters = false,
                 ExtractChapters = false,
-                AnalyzeDurationSections = 2
+                AnalyzeDurationMs = AnalyzeDurationMs
 
 
             }, cancellationToken).ConfigureAwait(false);
             }, cancellationToken).ConfigureAwait(false);
 
 
@@ -98,6 +99,8 @@ namespace Emby.Server.Implementations.LiveTv
 
 
             // Try to estimate this
             // Try to estimate this
             mediaSource.InferTotalBitrate(true);
             mediaSource.InferTotalBitrate(true);
+
+            mediaSource.AnalyzeDurationMs = AnalyzeDurationMs;
         }
         }
     }
     }
 }
 }

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -188,7 +188,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             using (var manager = new HdHomerunManager(_socketFactory))
             using (var manager = new HdHomerunManager(_socketFactory))
             {
             {
                 // Legacy HdHomeruns are IPv4 only
                 // Legacy HdHomeruns are IPv4 only
-                var ipInfo = new IpAddressInfo(uri.Host, IpAddressFamily.InterNetwork);
+                var ipInfo = _networkManager.ParseIpAddress(uri.Host);
 
 
                 for (int i = 0; i < model.TunerCount; ++i)
                 for (int i = 0; i < model.TunerCount; ++i)
                 {
                 {

+ 2 - 2
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs

@@ -96,9 +96,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 {
                 {
                     using (var hdHomerunManager = new HdHomerunManager(_socketFactory))
                     using (var hdHomerunManager = new HdHomerunManager(_socketFactory))
                     {
                     {
-                        var remoteAddress = new IpAddressInfo(remoteIp, IpAddressFamily.InterNetwork);
+                        var remoteAddress = _networkManager.ParseIpAddress(remoteIp);
                         IpAddressInfo localAddress = null;
                         IpAddressInfo localAddress = null;
-                        using (var tcpSocket = _socketFactory.CreateSocket(IpAddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, false))
+                        using (var tcpSocket = _socketFactory.CreateSocket(remoteAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp, false))
                         {
                         {
                             try
                             try
                             {
                             {

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs

@@ -40,7 +40,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
 
 
                     _sharedBuffer.Enqueue(copy);
                     _sharedBuffer.Enqueue(copy);
 
 
-                    while (_sharedBuffer.Count > 3000)
+                    while (_sharedBuffer.Count > 10000)
                     {
                     {
                         byte[] bytes;
                         byte[] bytes;
                         _sharedBuffer.TryDequeue(out bytes);
                         _sharedBuffer.TryDequeue(out bytes);

+ 37 - 17
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -175,6 +175,10 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
             {
                 return null;
                 return null;
             }
             }
+            if (string.Equals(container, "rec", StringComparison.OrdinalIgnoreCase))
+            {
+                return null;
+            }
 
 
             return container;
             return container;
         }
         }
@@ -459,21 +463,6 @@ namespace MediaBrowser.Controller.MediaEncoding
             return level;
             return level;
         }
         }
 
 
-        /// <summary>
-        /// Gets the probe size argument.
-        /// </summary>
-        /// <param name="state">The state.</param>
-        /// <returns>System.String.</returns>
-        public string GetProbeSizeArgument(EncodingJobInfo state)
-        {
-            if (state.PlayableStreamFileNames.Count > 0)
-            {
-                return _mediaEncoder.GetProbeSizeAndAnalyzeDurationArgument(state.PlayableStreamFileNames.ToArray(), state.InputProtocol);
-            }
-            
-            return _mediaEncoder.GetProbeSizeAndAnalyzeDurationArgument(new[] { state.MediaPath }, state.InputProtocol);
-        }
-
         /// <summary>
         /// <summary>
         /// Gets the text subtitle param.
         /// Gets the text subtitle param.
         /// </summary>
         /// </summary>
@@ -1448,12 +1437,43 @@ namespace MediaBrowser.Controller.MediaEncoding
             }
             }
         }
         }
 
 
+        public static string GetProbeSizeArgument(int numInputFiles)
+        {
+            return numInputFiles > 1 ? "-probesize 1G" : "";
+        }
+
+        public static string GetAnalyzeDurationArgument(int numInputFiles)
+        {
+            return numInputFiles > 1 ? "-analyzeduration 200M" : "";
+        }
+
         public string GetInputModifier(EncodingJobInfo state, EncodingOptions encodingOptions)
         public string GetInputModifier(EncodingJobInfo state, EncodingOptions encodingOptions)
         {
         {
             var inputModifier = string.Empty;
             var inputModifier = string.Empty;
 
 
-            var probeSize = GetProbeSizeArgument(state);
-            inputModifier += " " + probeSize;
+            var numInputFiles = state.PlayableStreamFileNames.Count > 0 ? state.PlayableStreamFileNames.Count : 1;
+            var probeSizeArgument = GetProbeSizeArgument(numInputFiles);
+
+            string analyzeDurationArgument;
+            if (state.MediaSource.AnalyzeDurationMs.HasValue)
+            {
+                analyzeDurationArgument = "-analyzeduration " + (state.MediaSource.AnalyzeDurationMs.Value * 1000).ToString(CultureInfo.InvariantCulture);
+            }
+            else
+            {
+                analyzeDurationArgument = GetAnalyzeDurationArgument(numInputFiles);
+            }
+
+            if (!string.IsNullOrWhiteSpace(probeSizeArgument))
+            {
+                inputModifier += " " + probeSizeArgument;
+            }
+
+            if (!string.IsNullOrWhiteSpace(analyzeDurationArgument))
+            {
+                inputModifier += " " + analyzeDurationArgument;
+            }
+
             inputModifier = inputModifier.Trim();
             inputModifier = inputModifier.Trim();
 
 
             var userAgentParam = GetUserAgentParam(state);
             var userAgentParam = GetUserAgentParam(state);

+ 0 - 8
MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs

@@ -78,14 +78,6 @@ namespace MediaBrowser.Controller.MediaEncoding
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         Task<MediaInfo> GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken);
         Task<MediaInfo> GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken);
 
 
-        /// <summary>
-        /// Gets the probe size argument.
-        /// </summary>
-        /// <param name="inputFiles">The input files.</param>
-        /// <param name="protocol">The protocol.</param>
-        /// <returns>System.String.</returns>
-        string GetProbeSizeAndAnalyzeDurationArgument(string[] inputFiles, MediaProtocol protocol);
-
         /// <summary>
         /// <summary>
         /// Gets the input argument.
         /// Gets the input argument.
         /// </summary>
         /// </summary>

+ 1 - 1
MediaBrowser.Controller/MediaEncoding/MediaInfoRequest.cs

@@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.MediaEncoding
         public IIsoMount MountedIso { get; set; }
         public IIsoMount MountedIso { get; set; }
         public VideoType VideoType { get; set; }
         public VideoType VideoType { get; set; }
         public List<string> PlayableStreamFileNames { get; set; }
         public List<string> PlayableStreamFileNames { get; set; }
-        public int AnalyzeDurationSections { get; set; }
+        public int AnalyzeDurationMs { get; set; }
 
 
         public MediaInfoRequest()
         public MediaInfoRequest()
         {
         {

+ 1 - 1
MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs

@@ -177,7 +177,7 @@ namespace MediaBrowser.LocalMetadata.Images
                 "default"
                 "default"
             };
             };
 
 
-            if (item is MusicAlbum || item is MusicArtist || item is PhotoAlbum)
+            if (item is MusicAlbum || item is MusicArtist || item is PhotoAlbum || item is Person)
             {
             {
                 // these prefer folder
                 // these prefer folder
                 names.Insert(0, "poster");
                 names.Insert(0, "poster");

+ 6 - 1
MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs

@@ -90,6 +90,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
             var required = new[]
             var required = new[]
             {
             {
                 "h264_qsv",
                 "h264_qsv",
+                "hevc_qsv",
                 "mpeg2_qsv",
                 "mpeg2_qsv",
                 "vc1_qsv"
                 "vc1_qsv"
             };
             };
@@ -134,9 +135,13 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 "libvorbis",
                 "libvorbis",
                 "srt",
                 "srt",
                 "h264_nvenc",
                 "h264_nvenc",
+                "hevc_nvenc",
                 "h264_qsv",
                 "h264_qsv",
+                "hevc_qsv",
                 "h264_omx",
                 "h264_omx",
+                "hevc_omx",
                 "h264_vaapi",
                 "h264_vaapi",
+                "hevc_vaapi",
                 "ac3"
                 "ac3"
             };
             };
 
 
@@ -205,4 +210,4 @@ namespace MediaBrowser.MediaEncoding.Encoder
             }
             }
         }
         }
     }
     }
-}
+}

+ 0 - 10
MediaBrowser.MediaEncoding/Encoder/EncodingUtils.cs

@@ -61,15 +61,5 @@ namespace MediaBrowser.MediaEncoding.Encoder
             // Quotes are valid path characters in linux and they need to be escaped here with a leading \
             // Quotes are valid path characters in linux and they need to be escaped here with a leading \
             return path.Replace("\"", "\\\"");
             return path.Replace("\"", "\\\"");
         }
         }
-
-        public static string GetProbeSizeArgument(int numInputFiles)
-        {
-            return numInputFiles > 1 ? "-probesize 1G" : "";
-        }
-
-        public static string GetAnalyzeDurationArgument(int numInputFiles)
-        {
-            return numInputFiles > 1 ? "-analyzeduration 200M" : "";
-        }
     }
     }
 }
 }

+ 22 - 35
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs

@@ -523,17 +523,17 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
 
             var inputFiles = MediaEncoderHelpers.GetInputArgument(FileSystem, request.InputPath, request.Protocol, request.MountedIso, request.PlayableStreamFileNames);
             var inputFiles = MediaEncoderHelpers.GetInputArgument(FileSystem, request.InputPath, request.Protocol, request.MountedIso, request.PlayableStreamFileNames);
 
 
-            var probeSize = EncodingUtils.GetProbeSizeArgument(inputFiles.Length);
+            var probeSize = EncodingHelper.GetProbeSizeArgument(inputFiles.Length);
             string analyzeDuration;
             string analyzeDuration;
 
 
-            if (request.AnalyzeDurationSections > 0)
+            if (request.AnalyzeDurationMs > 0)
             {
             {
                 analyzeDuration = "-analyzeduration " +
                 analyzeDuration = "-analyzeduration " +
-                                  (request.AnalyzeDurationSections * 1000000).ToString(CultureInfo.InvariantCulture);
+                                  (request.AnalyzeDurationMs * 1000).ToString(CultureInfo.InvariantCulture);
             }
             }
             else
             else
             {
             {
-                analyzeDuration = EncodingUtils.GetAnalyzeDurationArgument(inputFiles.Length);
+                analyzeDuration = EncodingHelper.GetAnalyzeDurationArgument(inputFiles.Length);
             }
             }
 
 
             probeSize = probeSize + " " + analyzeDuration;
             probeSize = probeSize + " " + analyzeDuration;
@@ -557,31 +557,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
             return EncodingUtils.GetInputArgument(inputFiles.ToList(), protocol);
             return EncodingUtils.GetInputArgument(inputFiles.ToList(), protocol);
         }
         }
 
 
-        /// <summary>
-        /// Gets the probe size argument.
-        /// </summary>
-        /// <param name="inputFiles">The input files.</param>
-        /// <param name="protocol">The protocol.</param>
-        /// <returns>System.String.</returns>
-        public string GetProbeSizeAndAnalyzeDurationArgument(string[] inputFiles, MediaProtocol protocol)
-        {
-            var results = new List<string>();
-
-            var probeSize = EncodingUtils.GetProbeSizeArgument(inputFiles.Length);
-            var analyzeDuration = EncodingUtils.GetAnalyzeDurationArgument(inputFiles.Length);
-
-            if (!string.IsNullOrWhiteSpace(probeSize))
-            {
-                results.Add(probeSize);
-            }
-
-            if (!string.IsNullOrWhiteSpace(analyzeDuration))
-            {
-                results.Add(analyzeDuration);
-            }
-            return string.Join(" ", results.ToArray());
-        }
-
         /// <summary>
         /// <summary>
         /// Gets the media info internal.
         /// Gets the media info internal.
         /// </summary>
         /// </summary>
@@ -984,11 +959,17 @@ namespace MediaBrowser.MediaEncoding.Encoder
             var args = useIFrame ? string.Format("-i {0}{3} -threads 0 -v quiet -vframes 1 -vf \"{2}{4}\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg, thumbnail) :
             var args = useIFrame ? string.Format("-i {0}{3} -threads 0 -v quiet -vframes 1 -vf \"{2}{4}\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg, thumbnail) :
                 string.Format("-i {0}{3} -threads 0 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg);
                 string.Format("-i {0}{3} -threads 0 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, tempExtractPath, vf, mapArg);
 
 
-            var probeSize = GetProbeSizeAndAnalyzeDurationArgument(new[] { inputPath }, protocol);
+            var probeSizeArgument = EncodingHelper.GetProbeSizeArgument(1);
+            var analyzeDurationArgument = EncodingHelper.GetAnalyzeDurationArgument(1);
+
+            if (!string.IsNullOrWhiteSpace(probeSizeArgument))
+            {
+                args = probeSizeArgument + " " + args;
+            }
 
 
-            if (!string.IsNullOrEmpty(probeSize))
+            if (!string.IsNullOrWhiteSpace(analyzeDurationArgument))
             {
             {
-                args = probeSize + " " + args;
+                args = analyzeDurationArgument + " " + args;
             }
             }
 
 
             if (offset.HasValue)
             if (offset.HasValue)
@@ -1092,11 +1073,17 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
 
             var args = string.Format("-i {0} -threads 0 -v quiet -vf \"{2}\" -f image2 \"{1}\"", inputArgument, outputPath, vf);
             var args = string.Format("-i {0} -threads 0 -v quiet -vf \"{2}\" -f image2 \"{1}\"", inputArgument, outputPath, vf);
 
 
-            var probeSize = GetProbeSizeAndAnalyzeDurationArgument(new[] { inputArgument }, protocol);
+            var probeSizeArgument = EncodingHelper.GetProbeSizeArgument(1);
+            var analyzeDurationArgument = EncodingHelper.GetAnalyzeDurationArgument(1);
+
+            if (!string.IsNullOrWhiteSpace(probeSizeArgument))
+            {
+                args = probeSizeArgument + " " + args;
+            }
 
 
-            if (!string.IsNullOrEmpty(probeSize))
+            if (!string.IsNullOrWhiteSpace(analyzeDurationArgument))
             {
             {
-                args = probeSize + " " + args;
+                args = analyzeDurationArgument + " " + args;
             }
             }
 
 
             var process = _processFactory.Create(new ProcessOptions
             var process = _processFactory.Create(new ProcessOptions

+ 2 - 0
MediaBrowser.Model/Dto/MediaSourceInfo.cs

@@ -60,6 +60,8 @@ namespace MediaBrowser.Model.Dto
         public string TranscodingSubProtocol { get; set; }
         public string TranscodingSubProtocol { get; set; }
         public string TranscodingContainer { get; set; }
         public string TranscodingContainer { get; set; }
 
 
+        public int? AnalyzeDurationMs { get; set; }
+
         public MediaSourceInfo()
         public MediaSourceInfo()
         {
         {
             Formats = new List<string>();
             Formats = new List<string>();

+ 2 - 0
MediaBrowser.Model/Querying/ItemFields.cs

@@ -151,6 +151,8 @@
         /// </summary>
         /// </summary>
         People,
         People,
 
 
+        PlayAccess,
+
         /// <summary>
         /// <summary>
         /// The production locations
         /// The production locations
         /// </summary>
         /// </summary>

+ 4 - 0
MediaBrowser.Model/Session/PlaybackProgressInfo.cs

@@ -73,6 +73,10 @@ namespace MediaBrowser.Model.Session
         /// <value>The volume level.</value>
         /// <value>The volume level.</value>
         public int? VolumeLevel { get; set; }
         public int? VolumeLevel { get; set; }
 
 
+        public int? Brightness { get; set; }
+
+        public string AspectRatio { get; set; }
+
         /// <summary>
         /// <summary>
         /// Gets or sets the play method.
         /// Gets or sets the play method.
         /// </summary>
         /// </summary>

+ 1 - 0
MediaBrowser.Providers/Manager/ImageSaver.cs

@@ -410,6 +410,7 @@ namespace MediaBrowser.Providers.Manager
             var folderName = item is MusicAlbum ||
             var folderName = item is MusicAlbum ||
                 item is MusicArtist ||
                 item is MusicArtist ||
                 item is PhotoAlbum ||
                 item is PhotoAlbum ||
+                item is Person ||
                 (saveLocally && _config.Configuration.ImageSavingConvention == ImageSavingConvention.Legacy) ?
                 (saveLocally && _config.Configuration.ImageSavingConvention == ImageSavingConvention.Legacy) ?
                 "folder" :
                 "folder" :
                 "poster";
                 "poster";

+ 1 - 1
SharedVersion.cs

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