Kaynağa Gözat

update hls playback

Luke Pulverenti 9 yıl önce
ebeveyn
işleme
a38086126f

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

@@ -2058,7 +2058,6 @@ namespace MediaBrowser.Api.Playback
                     if (state.VideoRequest != null)
                     {
                         state.VideoRequest.CopyTimestamps = transcodingProfile.CopyTimestamps;
-                        state.VideoRequest.ForceLiveStream = transcodingProfile.ForceLiveStream;
                     }
                 }
             }

+ 0 - 5
MediaBrowser.Api/Playback/Hls/BaseHlsService.cs

@@ -282,11 +282,6 @@ namespace MediaBrowser.Api.Playback.Hls
         {
             var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
 
-            if (state.VideoRequest.ForceLiveStream)
-            {
-                return true;
-            }
-
             return isLiveStream;
         }
 

+ 12 - 14
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs

@@ -504,11 +504,6 @@ namespace MediaBrowser.Api.Playback.Hls
         {
             var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
 
-            if (state.VideoRequest.ForceLiveStream)
-            {
-                return true;
-            }
-
             return isLiveStream;
         }
 
@@ -830,7 +825,6 @@ namespace MediaBrowser.Api.Playback.Hls
             {
                 if (state.VideoStream != null && IsH264(state.VideoStream) && !string.Equals(state.VideoStream.NalLengthSize, "0", StringComparison.OrdinalIgnoreCase))
                 {
-                    Logger.Debug("Enabling h264_mp4toannexb due to nal_length_size of {0}", state.VideoStream.NalLengthSize);
                     args += " -bsf:v h264_mp4toannexb";
                 }
 
@@ -862,12 +856,17 @@ namespace MediaBrowser.Api.Playback.Hls
                 args += " -flags -global_header -sc_threshold 0";
             }
 
+            if (EnableCopyTs(state) && args.IndexOf("-copyts", StringComparison.OrdinalIgnoreCase) == -1)
+            {
+                args += " -copyts";
+            }
+
             return args;
         }
 
         private bool EnableCopyTs(StreamState state)
         {
-            return state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.VideoRequest.SubtitleMethod == SubtitleDeliveryMethod.Encode;
+            return true;
         }
 
         protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding)
@@ -891,7 +890,7 @@ namespace MediaBrowser.Api.Playback.Hls
 
             //var outputTsArg = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(outputPath)) + "%d" + GetSegmentFileExtension(state);
 
-            //return string.Format("{0} {11} {1}{10} -map_metadata -1 -threads {2} {3} {4} {5} -f segment -segment_time {6} -segment_format mpegts -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"",
+            //return string.Format("{0} {10} {1} -map_metadata -1 -threads {2} {3} {4} {5} -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time {6} -segment_format mpegts -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"",
             //    inputModifier,
             //    GetInputArgument(state),
             //    threads,
@@ -902,11 +901,10 @@ namespace MediaBrowser.Api.Playback.Hls
             //    startNumberParam,
             //    outputPath,
             //    outputTsArg,
-            //            slowSeekParam,
             //            toTimeParam
             //    ).Trim();
 
-            return string.Format("{0}{11} {1} -map_metadata -1 -threads {2} {3} {4}{5} {6} -hls_time {7} -start_number {8} -hls_list_size {9} -y \"{10}\"",
+            return string.Format("{0}{11} {1} -map_metadata -1 -threads {2} {3} {4}{5} {6} -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -hls_time {7} -start_number {8} -hls_list_size {9} -y \"{10}\"",
                             inputModifier,
                             GetInputArgument(state),
                             threads,
@@ -946,10 +944,10 @@ namespace MediaBrowser.Api.Playback.Hls
         {
             var isLiveStream = IsLiveStream(state);
 
-            if (!isLiveStream)
-            {
-                return false;
-            }
+            //if (!isLiveStream && Request.QueryString["AllowCustomSegmenting"] != "true")
+            //{
+            //    return false;
+            //}
 
             return base.CanStreamCopyVideo(state);
         }

+ 0 - 1
MediaBrowser.Api/Playback/Hls/VideoHlsService.cs

@@ -89,7 +89,6 @@ namespace MediaBrowser.Api.Playback.Hls
                 // if h264_mp4toannexb is ever added, do not use it for live tv
                 if (state.VideoStream != null && IsH264(state.VideoStream) && !string.Equals(state.VideoStream.NalLengthSize, "0", StringComparison.OrdinalIgnoreCase))
                 {
-                    Logger.Debug("Enabling h264_mp4toannexb due to nal_length_size of {0}", state.VideoStream.NalLengthSize);
                     args += " -bsf:v h264_mp4toannexb";
                 }
                 return args;

+ 0 - 1
MediaBrowser.Api/Playback/Progressive/VideoService.cs

@@ -141,7 +141,6 @@ namespace MediaBrowser.Api.Playback.Progressive
             {
                 if (state.VideoStream != null && IsH264(state.VideoStream) && string.Equals(state.OutputContainer, "ts", StringComparison.OrdinalIgnoreCase) && !string.Equals(state.VideoStream.NalLengthSize, "0", StringComparison.OrdinalIgnoreCase))
                 {
-                    Logger.Debug("Enabling h264_mp4toannexb due to nal_length_size of {0}", state.VideoStream.NalLengthSize);
                     args += " -bsf:v h264_mp4toannexb";
                 }
 

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

@@ -190,8 +190,6 @@ namespace MediaBrowser.Api.Playback
         [ApiMember(Name = "CopyTimestamps", Description = "Whether or not to copy timestamps when transcoding with an offset. Defaults to false.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
         public bool CopyTimestamps { get; set; }
 
-        public bool ForceLiveStream { get; set; }
-
         public VideoStreamRequest()
         {
             EnableAutoStreamCopy = true;

+ 13 - 1
MediaBrowser.Api/Playback/StreamState.cs

@@ -69,7 +69,19 @@ namespace MediaBrowser.Api.Playback
 
         public List<string> PlayableStreamFileNames { get; set; }
 
-        public int SegmentLength = 3;
+        public int SegmentLength
+        {
+            get
+            {
+                if (string.Equals(OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase))
+                {
+                    return 10;
+                }
+
+                return 3;
+            }
+        }
+
         public int HlsListSize
         {
             get

+ 0 - 1
MediaBrowser.MediaEncoding/Encoder/VideoEncoder.cs

@@ -75,7 +75,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
             {
                 if (state.VideoStream != null && IsH264(state.VideoStream) && string.Equals(state.Options.OutputContainer, "ts", StringComparison.OrdinalIgnoreCase) && !string.Equals(state.VideoStream.NalLengthSize, "0", StringComparison.OrdinalIgnoreCase))
                 {
-                    Logger.Debug("Enabling h264_mp4toannexb due to nal_length_size of {0}", state.VideoStream.NalLengthSize);
                     args += " -bsf:v h264_mp4toannexb";
                 }
 

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

@@ -443,7 +443,6 @@ namespace MediaBrowser.Model.Dlna
 
                 playlistItem.VideoCodec = transcodingProfile.VideoCodec;
                 playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps;
-                playlistItem.ForceLiveStream = transcodingProfile.ForceLiveStream;
                 playlistItem.SubProtocol = transcodingProfile.Protocol;
                 playlistItem.AudioStreamIndex = audioStreamIndex;
 

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

@@ -31,7 +31,6 @@ namespace MediaBrowser.Model.Dlna
         public string VideoProfile { get; set; }
 
         public bool CopyTimestamps { get; set; }
-        public bool ForceLiveStream { get; set; }
         public string AudioCodec { get; set; }
 
         public int? AudioStreamIndex { get; set; }
@@ -205,7 +204,7 @@ namespace MediaBrowser.Model.Dlna
             list.Add(new NameValuePair("MaxWidth", item.MaxWidth.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxWidth.Value) : string.Empty));
             list.Add(new NameValuePair("MaxHeight", item.MaxHeight.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxHeight.Value) : string.Empty));
 
-            if (StringHelper.EqualsIgnoreCase(item.SubProtocol, "hls") && !item.ForceLiveStream)
+            if (StringHelper.EqualsIgnoreCase(item.SubProtocol, "hls"))
             {
                 list.Add(new NameValuePair("StartTimeTicks", string.Empty));
             }
@@ -235,7 +234,6 @@ namespace MediaBrowser.Model.Dlna
             }
 
             list.Add(new NameValuePair("CopyTimestamps", item.CopyTimestamps.ToString().ToLower()));
-            list.Add(new NameValuePair("ForceLiveStream", item.ForceLiveStream.ToString().ToLower()));
             list.Add(new NameValuePair("SubtitleMethod", item.SubtitleStreamIndex.HasValue && item.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External ? item.SubtitleDeliveryMethod.ToString() : string.Empty));
        
             return list;

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

@@ -35,9 +35,6 @@ namespace MediaBrowser.Model.Dlna
         [XmlAttribute("context")]
         public EncodingContext Context { get; set; }
 
-        [XmlAttribute("forceLiveStream")]
-        public bool ForceLiveStream { get; set; }
-
         public List<string> GetAudioCodecs()
         {
             List<string> list = new List<string>();