From 7dc6544d3441187f73393dac54dc358b3ceb98ed Mon Sep 17 00:00:00 2001 From: klizas Date: Mon, 5 Oct 2026 19:18:45 -0400 Subject: Backport pull request #18186 from jellyfin/release-12.z Fix segment cleaner deleting segments ahead of playback when remuxing MKV Original-merge: 3acc9c8443d7ee445c4fe015f2977a47d4ea57ac Merged-by: crobibero Backported-by: Cody Robibero --- .../MediaEncoding/TranscodingSegmentCleaner.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs') diff --git a/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs b/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs index 67bfcb02fd..924fc2e659 100644 --- a/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs +++ b/MediaBrowser.Controller/MediaEncoding/TranscodingSegmentCleaner.cs @@ -22,7 +22,6 @@ public class TranscodingSegmentCleaner : IDisposable private readonly IFileSystem _fileSystem; private readonly IMediaEncoder _mediaEncoder; private Timer? _timer; - private int _segmentLength; /// /// Initializes a new instance of the class. @@ -32,7 +31,7 @@ public class TranscodingSegmentCleaner : IDisposable /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. - /// The segment length of this transcoding job. + /// The segment length of this transcoding job. Unused. public TranscodingSegmentCleaner(TranscodingJob job, ILogger logger, IConfigurationManager config, IFileSystem fileSystem, IMediaEncoder mediaEncoder, int segmentLength) { _job = job; @@ -40,7 +39,6 @@ public class TranscodingSegmentCleaner : IDisposable _config = config; _fileSystem = fileSystem; _mediaEncoder = mediaEncoder; - _segmentLength = segmentLength; } /// @@ -104,11 +102,11 @@ public class TranscodingSegmentCleaner : IDisposable if (downloadPositionSeconds > 0 && segmentKeepSeconds > 0 && downloadPositionSeconds > segmentKeepSeconds) { - var idxMaxToDelete = (downloadPositionSeconds - segmentKeepSeconds) / _segmentLength; + var idxMaxToDelete = _job.GetHighestServedSegmentIndexEndingAtOrBefore(downloadPositionTicks - TimeSpan.FromSeconds(segmentKeepSeconds).Ticks); if (idxMaxToDelete > 0) { - await DeleteSegmentFiles(_job, 0, idxMaxToDelete, 1500).ConfigureAwait(false); + await DeleteSegmentFiles(_job, 0, idxMaxToDelete.Value, 1500).ConfigureAwait(false); } } } -- cgit v1.2.3