mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-31 02:27:18 -04:00 
			
		
		
		
	fix timestamps in hls subtitles
This commit is contained in:
		
							parent
							
								
									dcc0438b2a
								
							
						
					
					
						commit
						e5655d32f1
					
				| @ -98,6 +98,9 @@ namespace MediaBrowser.Api.Subtitles | |||||||
| 
 | 
 | ||||||
|         [ApiMember(Name = "EndPositionTicks", Description = "EndPositionTicks", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] |         [ApiMember(Name = "EndPositionTicks", Description = "EndPositionTicks", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] | ||||||
|         public long? EndPositionTicks { get; set; } |         public long? EndPositionTicks { get; set; } | ||||||
|  | 
 | ||||||
|  |         [ApiMember(Name = "CopyTimestamps", Description = "CopyTimestamps", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] | ||||||
|  |         public bool CopyTimestamps { get; set; } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     [Route("/Videos/{Id}/{MediaSourceId}/Subtitles/{Index}/subtitles.m3u8", "GET", Summary = "Gets an HLS subtitle playlist.")] |     [Route("/Videos/{Id}/{MediaSourceId}/Subtitles/{Index}/subtitles.m3u8", "GET", Summary = "Gets an HLS subtitle playlist.")] | ||||||
| @ -175,7 +178,7 @@ namespace MediaBrowser.Api.Subtitles | |||||||
| 
 | 
 | ||||||
|                 var endPositionTicks = Math.Min(runtime, positionTicks + segmentLengthTicks); |                 var endPositionTicks = Math.Min(runtime, positionTicks + segmentLengthTicks); | ||||||
| 
 | 
 | ||||||
|                 var url = string.Format("stream.vtt?StartPositionTicks={0}&EndPositionTicks={1}&api_key={2}", |                 var url = string.Format("stream.vtt?CopyTimestamps=true,StartPositionTicks={0}&EndPositionTicks={1}&api_key={2}", | ||||||
|                     positionTicks.ToString(CultureInfo.InvariantCulture), |                     positionTicks.ToString(CultureInfo.InvariantCulture), | ||||||
|                     endPositionTicks.ToString(CultureInfo.InvariantCulture), |                     endPositionTicks.ToString(CultureInfo.InvariantCulture), | ||||||
|                     accessToken); |                     accessToken); | ||||||
| @ -222,6 +225,7 @@ namespace MediaBrowser.Api.Subtitles | |||||||
|                 request.Format, |                 request.Format, | ||||||
|                 request.StartPositionTicks, |                 request.StartPositionTicks, | ||||||
|                 request.EndPositionTicks, |                 request.EndPositionTicks, | ||||||
|  |                 request.CopyTimestamps, | ||||||
|                 CancellationToken.None).ConfigureAwait(false); |                 CancellationToken.None).ConfigureAwait(false); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,13 +10,6 @@ namespace MediaBrowser.Controller.MediaEncoding | |||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// Gets the subtitles. |         /// Gets the subtitles. | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         /// <param name="itemId">The item identifier.</param> |  | ||||||
|         /// <param name="mediaSourceId">The media source identifier.</param> |  | ||||||
|         /// <param name="subtitleStreamIndex">Index of the subtitle stream.</param> |  | ||||||
|         /// <param name="outputFormat">The output format.</param> |  | ||||||
|         /// <param name="startTimeTicks">The start time ticks.</param> |  | ||||||
|         /// <param name="endTimeTicks">The end time ticks.</param> |  | ||||||
|         /// <param name="cancellationToken">The cancellation token.</param> |  | ||||||
|         /// <returns>Task{Stream}.</returns> |         /// <returns>Task{Stream}.</returns> | ||||||
|         Task<Stream> GetSubtitles(string itemId, |         Task<Stream> GetSubtitles(string itemId, | ||||||
|             string mediaSourceId, |             string mediaSourceId, | ||||||
| @ -24,6 +17,7 @@ namespace MediaBrowser.Controller.MediaEncoding | |||||||
|             string outputFormat, |             string outputFormat, | ||||||
|             long startTimeTicks, |             long startTimeTicks, | ||||||
|             long? endTimeTicks, |             long? endTimeTicks, | ||||||
|  |             bool preserveOriginalTimestamps, | ||||||
|             CancellationToken cancellationToken); |             CancellationToken cancellationToken); | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  | |||||||
| @ -58,6 +58,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles | |||||||
|             string outputFormat, |             string outputFormat, | ||||||
|             long startTimeTicks, |             long startTimeTicks, | ||||||
|             long? endTimeTicks, |             long? endTimeTicks, | ||||||
|  |             bool preserveOriginalTimestamps, | ||||||
|             CancellationToken cancellationToken) |             CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             var ms = new MemoryStream(); |             var ms = new MemoryStream(); | ||||||
| @ -68,7 +69,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles | |||||||
| 
 | 
 | ||||||
|                 var trackInfo = reader.Parse(stream, cancellationToken); |                 var trackInfo = reader.Parse(stream, cancellationToken); | ||||||
| 
 | 
 | ||||||
|                 FilterEvents(trackInfo, startTimeTicks, endTimeTicks, false); |                 FilterEvents(trackInfo, startTimeTicks, endTimeTicks, preserveOriginalTimestamps); | ||||||
| 
 | 
 | ||||||
|                 var writer = GetWriter(outputFormat); |                 var writer = GetWriter(outputFormat); | ||||||
| 
 | 
 | ||||||
| @ -116,6 +117,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles | |||||||
|             string outputFormat, |             string outputFormat, | ||||||
|             long startTimeTicks, |             long startTimeTicks, | ||||||
|             long? endTimeTicks, |             long? endTimeTicks, | ||||||
|  |             bool preserveOriginalTimestamps, | ||||||
|             CancellationToken cancellationToken) |             CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             var subtitle = await GetSubtitleStream(itemId, mediaSourceId, subtitleStreamIndex, cancellationToken) |             var subtitle = await GetSubtitleStream(itemId, mediaSourceId, subtitleStreamIndex, cancellationToken) | ||||||
| @ -130,7 +132,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles | |||||||
| 
 | 
 | ||||||
|             using (var stream = subtitle.Item1) |             using (var stream = subtitle.Item1) | ||||||
|             { |             { | ||||||
|                 return await ConvertSubtitles(stream, inputFormat, outputFormat, startTimeTicks, endTimeTicks, cancellationToken).ConfigureAwait(false); |                 return await ConvertSubtitles(stream, inputFormat, outputFormat, startTimeTicks, endTimeTicks, preserveOriginalTimestamps, cancellationToken).ConfigureAwait(false); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -748,7 +748,7 @@ namespace MediaBrowser.Server.Implementations.Sync | |||||||
| 
 | 
 | ||||||
|             _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); |             _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); | ||||||
| 
 | 
 | ||||||
|             using (var stream = await _subtitleEncoder.GetSubtitles(streamInfo.ItemId, streamInfo.MediaSourceId, subtitleStreamIndex, subtitleStreamInfo.Format, 0, null, cancellationToken).ConfigureAwait(false)) |             using (var stream = await _subtitleEncoder.GetSubtitles(streamInfo.ItemId, streamInfo.MediaSourceId, subtitleStreamIndex, subtitleStreamInfo.Format, 0, null, false, cancellationToken).ConfigureAwait(false)) | ||||||
|             { |             { | ||||||
|                 using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) |                 using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) | ||||||
|                 { |                 { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user