|
@@ -2771,7 +2771,13 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
|
|
|
if (time > 0)
|
|
|
{
|
|
|
- seekParam += string.Format(CultureInfo.InvariantCulture, "-ss {0}", _mediaEncoder.GetTimeParameter(time));
|
|
|
+ // For direct streaming/remuxing, we seek at the exact position of the keyframe
|
|
|
+ // However, ffmpeg will seek to previous keyframe when the exact time is the input
|
|
|
+ // Workaround this by adding 0.5s offset to the seeking time to get the exact keyframe on most videos.
|
|
|
+ // This will help subtitle syncing.
|
|
|
+ var isHlsRemuxing = state.IsVideoRequest && state.TranscodingType is TranscodingJobType.Hls && IsCopyCodec(state.OutputVideoCodec);
|
|
|
+ var seekTick = isHlsRemuxing ? time + 5000000L : time;
|
|
|
+ seekParam += string.Format(CultureInfo.InvariantCulture, "-ss {0}", _mediaEncoder.GetTimeParameter(seekTick));
|
|
|
|
|
|
if (state.IsVideoRequest)
|
|
|
{
|