浏览代码

add break on non keyframes

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

+ 8 - 2
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs

@@ -912,7 +912,12 @@ namespace MediaBrowser.Api.Playback.Hls
                     segmentFormat = "mpegts";
                 }
 
-                return string.Format("{0} {1} -map_metadata -1 -map_chapters -1 -threads {2} {3} {4} {5} -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time {6} {10} -individual_header_trailer 0 -segment_format {11} -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"",
+                var videoCodec = EncodingHelper.GetVideoEncoder(state, ApiEntryPoint.Instance.GetEncodingOptions());
+                var breakOnNonKeyFrames = state.Request.BreakOnNonKeyFrames && string.Equals(videoCodec, "copy", StringComparison.OrdinalIgnoreCase);
+
+                var breakOnNonKeyFramesArg = breakOnNonKeyFrames ? " -break_non_keyframes 1" : "";
+
+                return string.Format("{0} {1} -map_metadata -1 -map_chapters -1 -threads {2} {3} {4} {5} -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time {6} {10} -individual_header_trailer 0{12} -segment_format {11} -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"",
                     inputModifier,
                     EncodingHelper.GetInputArgument(state, encodingOptions),
                     threads,
@@ -924,7 +929,8 @@ namespace MediaBrowser.Api.Playback.Hls
                     outputPath,
                     outputTsArg,
                     timeDeltaParam,
-                    segmentFormat
+                    segmentFormat,
+                    breakOnNonKeyFramesArg
                 ).Trim();
             }
 

+ 1 - 0
MediaBrowser.Api/Playback/StreamRequest.cs

@@ -43,6 +43,7 @@ namespace MediaBrowser.Api.Playback
 
         public int? SegmentLength { get; set; }
         public int? MinSegments { get; set; }
+        public bool BreakOnNonKeyFrames { get; set; }
     }
 
     public class VideoStreamRequest : StreamRequest

+ 2 - 0
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -484,6 +484,8 @@ namespace MediaBrowser.Model.Dlna
                 playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps;
                 playlistItem.EnableSubtitlesInManifest = transcodingProfile.EnableSubtitlesInManifest;
 
+                playlistItem.BreakOnNonKeyFrames = transcodingProfile.BreakOnNonKeyFrames;
+
                 if (transcodingProfile.MinSegments > 0)
                 {
                     playlistItem.MinSegments = transcodingProfile.MinSegments;

+ 3 - 0
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -40,6 +40,7 @@ namespace MediaBrowser.Model.Dlna
 
         public int? SegmentLength { get; set; }
         public int? MinSegments { get; set; }
+        public bool BreakOnNonKeyFrames { get; set; }
 
         public bool RequireAvc { get; set; }
         public bool DeInterlace { get; set; }
@@ -305,6 +306,8 @@ namespace MediaBrowser.Model.Dlna
                 {
                     list.Add(new NameValuePair("MinSegments", item.MinSegments.Value.ToString(CultureInfo.InvariantCulture)));
                 }
+
+                list.Add(new NameValuePair("BreakOnNonKeyFrames", item.BreakOnNonKeyFrames.ToString()));
             }
 
             return list;

+ 3 - 0
MediaBrowser.Model/Dlna/TranscodingProfile.cs

@@ -48,6 +48,9 @@ namespace MediaBrowser.Model.Dlna
         [XmlAttribute("segmentLength")]
         public int SegmentLength { get; set; }
 
+        [XmlAttribute("breakOnNonKeyFrames")]
+        public bool BreakOnNonKeyFrames { get; set; }
+
         public List<string> GetAudioCodecs()
         {
             List<string> list = new List<string>();