浏览代码

fix subtitle position after seek in chrome

Luke Pulverenti 9 年之前
父节点
当前提交
dacdfd272a

+ 14 - 2
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -1462,6 +1462,13 @@ namespace MediaBrowser.Api.Playback
                 {
                     // Duplicating ItemId because of MediaMonkey
                 }
+                else if (i == 24)
+                {
+                    if (videoRequest != null)
+                    {
+                        videoRequest.CopyTimestamps = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
+                    }
+                }
             }
         }
 
@@ -2021,6 +2028,11 @@ namespace MediaBrowser.Api.Playback
                     state.EstimateContentLength = transcodingProfile.EstimateContentLength;
                     state.EnableMpegtsM2TsMode = transcodingProfile.EnableMpegtsM2TsMode;
                     state.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo;
+
+                    if (state.VideoRequest != null)
+                    {
+                        state.VideoRequest.CopyTimestamps = transcodingProfile.CopyTimestamps;
+                    }
                 }
             }
         }
@@ -2184,9 +2196,9 @@ namespace MediaBrowser.Api.Playback
 
             if (state.VideoRequest != null)
             {
-                if (string.Equals(state.OutputContainer, "mkv", StringComparison.OrdinalIgnoreCase))
+                if (string.Equals(state.OutputContainer, "mkv", StringComparison.OrdinalIgnoreCase) && state.VideoRequest.CopyTimestamps)
                 {
-                    //inputModifier += " -noaccurate_seek";
+                    inputModifier += " -noaccurate_seek";
                 }
             }
             

+ 2 - 2
MediaBrowser.Api/Playback/Progressive/VideoService.cs

@@ -137,9 +137,9 @@ namespace MediaBrowser.Api.Playback.Progressive
 
             var isOutputMkv = string.Equals(state.OutputContainer, "mkv", StringComparison.OrdinalIgnoreCase);
 
-            if (state.RunTimeTicks.HasValue)
+            if (state.RunTimeTicks.HasValue && state.VideoRequest.CopyTimestamps)
             {
-                //args += " -copyts -avoid_negative_ts disabled -start_at_zero";
+                args += " -copyts -avoid_negative_ts disabled -start_at_zero";
             }
             
             if (string.Equals(videoCodec, "copy", StringComparison.OrdinalIgnoreCase))

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

@@ -187,6 +187,9 @@ namespace MediaBrowser.Api.Playback
         [ApiMember(Name = "EnableAutoStreamCopy", Description = "Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
         public bool EnableAutoStreamCopy { get; set; }
 
+        [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; }
+        
         [ApiMember(Name = "Cabac", Description = "Enable if cabac encoding is required", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
         public bool? Cabac { get; set; }
         

+ 1 - 0
MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs

@@ -44,6 +44,7 @@ namespace MediaBrowser.Controller.MediaEncoding
         public int? CpuCoreLimit { get; set; }
         public bool ReadInputAtNativeFramerate { get; set; }
         public SubtitleDeliveryMethod SubtitleMethod { get; set; }
+        public bool CopyTimestamps { get; set; }
 
         /// <summary>
         /// Gets a value indicating whether this instance has fixed resolution.

+ 2 - 0
MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs

@@ -794,6 +794,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
                 state.EstimateContentLength = transcodingProfile.EstimateContentLength;
                 state.EnableMpegtsM2TsMode = transcodingProfile.EnableMpegtsM2TsMode;
                 state.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo;
+
+                state.Options.CopyTimestamps = transcodingProfile.CopyTimestamps;
             }
         }
     }

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

@@ -425,6 +425,7 @@ namespace MediaBrowser.Model.Dlna
                 playlistItem.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo;
                 playlistItem.AudioCodec = transcodingProfile.AudioCodec.Split(',')[0];
                 playlistItem.VideoCodec = transcodingProfile.VideoCodec;
+                playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps;
                 playlistItem.SubProtocol = transcodingProfile.Protocol;
                 playlistItem.AudioStreamIndex = audioStreamIndex;
 

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

@@ -32,6 +32,7 @@ namespace MediaBrowser.Model.Dlna
         public string VideoProfile { get; set; }
 
         public bool? Cabac { get; set; }
+        public bool CopyTimestamps { get; set; }
         public string AudioCodec { get; set; }
 
         public int? AudioStreamIndex { get; set; }
@@ -231,6 +232,8 @@ namespace MediaBrowser.Model.Dlna
             {
                 list.Add(new NameValuePair("ItemId", item.ItemId));
             }
+
+            list.Add(new NameValuePair("CopyTimestamps", (item.CopyTimestamps).ToString().ToLower()));
             
             return list;
         }
@@ -269,7 +272,7 @@ namespace MediaBrowser.Model.Dlna
             // HLS will preserve timestamps so we can just grab the full subtitle stream
             long startPositionTicks = StringHelper.EqualsIgnoreCase(SubProtocol, "hls")
                 ? 0
-				: (this.PlayMethod == PlayMethod.Transcode ? StartPositionTicks : 0);
+				: (PlayMethod == PlayMethod.Transcode && !CopyTimestamps ? StartPositionTicks : 0);
 
             // First add the selected track
             if (SubtitleStreamIndex.HasValue)

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

@@ -29,6 +29,9 @@ namespace MediaBrowser.Model.Dlna
         [XmlAttribute("transcodeSeekInfo")]
         public TranscodeSeekInfo TranscodeSeekInfo { get; set; }
 
+        [XmlAttribute("copyTimestamps")]
+        public bool CopyTimestamps { get; set; }
+
         [XmlAttribute("context")]
         public EncodingContext Context { get; set; }