From 4fb8938d09e4dea8e5753b45e27da5d383cd6e67 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 20 Sep 2015 12:15:25 -0400 Subject: [PATCH] update video frame analysis setting --- .../Encoder/MediaEncoder.cs | 27 +++++++++++++++---- .../Configuration/ServerConfiguration.cs | 6 +---- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 5d5e76074d..4fcc71f975 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Session; using MediaBrowser.MediaEncoding.Probing; using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.IO; @@ -243,14 +244,11 @@ namespace MediaBrowser.MediaEncoding.Encoder if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.HasValue) { - if (ConfigurationManager.Configuration.EnableVideoFrameAnalysis && mediaInfo.Size.HasValue && mediaInfo.Size.Value <= ConfigurationManager.Configuration.VideoFrameAnalysisLimitBytes) + if (ConfigurationManager.Configuration.EnableVideoFrameByFrameAnalysis && mediaInfo.Size.HasValue) { foreach (var stream in mediaInfo.MediaStreams) { - if (stream.Type == MediaStreamType.Video && - string.Equals(stream.Codec, "h264", StringComparison.OrdinalIgnoreCase) && - !stream.IsInterlaced && - !(stream.IsAnamorphic ?? false)) + if (EnableKeyframeExtraction(mediaInfo, stream)) { try { @@ -287,6 +285,25 @@ namespace MediaBrowser.MediaEncoding.Encoder throw new ApplicationException(string.Format("FFProbe failed for {0}", inputPath)); } + private bool EnableKeyframeExtraction(MediaSourceInfo mediaSource, MediaStream videoStream) + { + if (videoStream.Type == MediaStreamType.Video && string.Equals(videoStream.Codec, "h264", StringComparison.OrdinalIgnoreCase) && + !videoStream.IsInterlaced && + !(videoStream.IsAnamorphic ?? false)) + { + var audioStreams = mediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio).ToList(); + + // If it has aac audio then it will probably direct stream anyway, so don't bother with this + if (audioStreams.Count == 1 && string.Equals(audioStreams[0].Codec, "aac", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return true; + } + return false; + } + private async Task> GetKeyFrames(string inputPath, int videoStreamIndex, CancellationToken cancellationToken) { inputPath = inputPath.Split(new[] { ':' }, 2).Last().Trim('"'); diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 9f95953cf9..87b5e4fd71 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -222,8 +222,7 @@ namespace MediaBrowser.Model.Configuration public bool DisableXmlSavers { get; set; } public bool EnableWindowsShortcuts { get; set; } - public bool EnableVideoFrameAnalysis { get; set; } - public long VideoFrameAnalysisLimitBytes { get; set; } + public bool EnableVideoFrameByFrameAnalysis { get; set; } /// /// Initializes a new instance of the class. @@ -273,9 +272,6 @@ namespace MediaBrowser.Model.Configuration PeopleMetadataOptions = new PeopleMetadataOptions(); - EnableVideoFrameAnalysis = true; - VideoFrameAnalysisLimitBytes = 600000000; - InsecureApps9 = new[] { "Chromecast",