浏览代码

dummy up audio bitrates when needed

Luke Pulverenti 8 年之前
父节点
当前提交
e915ceda1b
共有 2 个文件被更改,包括 40 次插入0 次删除
  1. 34 0
      MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs
  2. 6 0
      MediaBrowser.Model/Drawing/ImageSize.cs

+ 34 - 0
MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs

@@ -176,6 +176,14 @@ namespace MediaBrowser.MediaEncoding.Probing
                     info.Video3DFormat = Video3DFormat.FullSideBySide;
                 }
 
+                foreach (var mediaStream in info.MediaStreams)
+                {
+                    if (mediaStream.Type == MediaStreamType.Audio && !mediaStream.BitRate.HasValue)
+                    {
+                        mediaStream.BitRate = GetEstimatedAudioBitrate(mediaStream.Codec, mediaStream.Channels);
+                    }
+                }
+
                 var videoStreamsBitrate = info.MediaStreams.Where(i => i.Type == MediaStreamType.Video).Select(i => i.BitRate ?? 0).Sum();
                 // If ffprobe reported the container bitrate as being the same as the video stream bitrate, then it's wrong
                 if (videoStreamsBitrate == (info.Bitrate ?? 0))
@@ -187,6 +195,32 @@ namespace MediaBrowser.MediaEncoding.Probing
             return info;
         }
 
+        private int? GetEstimatedAudioBitrate(string codec, int? channels)
+        {
+            if (!channels.HasValue)
+            {
+                return null;
+            }
+
+            var channelsValue = channels.Value;
+
+            if (string.Equals(codec, "aac", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(codec, "mp3", StringComparison.OrdinalIgnoreCase))
+            {
+                if (channelsValue <= 2)
+                {
+                    return 192000;
+                }
+
+                if (channelsValue >= 5)
+                {
+                    return 320000;
+                }
+            }
+
+            return null;
+        }
+
         private void FetchFromItunesInfo(string xml, MediaInfo info)
         {
             // Make things simpler and strip out the dtd

+ 6 - 0
MediaBrowser.Model/Drawing/ImageSize.cs

@@ -61,6 +61,12 @@ namespace MediaBrowser.Model.Drawing
             _height = height;
         }
 
+        public ImageSize(double width, double height)
+        {
+            _width = width;
+            _height = height;
+        }
+
         private void ParseValue(string value)
         {
             if (!string.IsNullOrEmpty(value))