From 097a2585ab480525372453b25b4c97bb73232a46 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Thu, 7 May 2026 12:09:33 +0200 Subject: [PATCH 1/2] Fix out of range end get --- transcoder/src/transcode_status.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/transcoder/src/transcode_status.go b/transcoder/src/transcode_status.go index 4d3b9f60..40c38a7a 100644 --- a/transcoder/src/transcode_status.go +++ b/transcoder/src/transcode_status.go @@ -178,8 +178,8 @@ func listHeadRanges(file *FileStream, stream *Stream, isVideo bool, index uint32 end := stream.file.Info.Duration length, _ := stream.keyframes.Length() - if head.end <= length { - end = stream.keyframes.Get(head.end) + if head.end-1 < length { + end = stream.keyframes.Get(head.end - 1) } ret = append(ret, HeadRange{ @@ -204,7 +204,7 @@ func listHeadRanges(file *FileStream, stream *Stream, isVideo bool, index uint32 ret = append(ret, HeadRange{ Start: stream.keyframes.Get(start), - End: stream.keyframes.Get(end), + End: stream.keyframes.Get(end - 1), StartHead: start, EndHead: end, IsRunning: false, From 0fd70cfcad0a018e5675f30ce45449861be76bd8 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Thu, 7 May 2026 13:58:31 +0200 Subject: [PATCH 2/2] Fix copy audio dropped segment --- transcoder/src/stream.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/transcoder/src/stream.go b/transcoder/src/stream.go index 9ed8b672..696ae38e 100644 --- a/transcoder/src/stream.go +++ b/transcoder/src/stream.go @@ -196,6 +196,9 @@ func (ts *Stream) run(ctx context.Context, start int32) error { end_padding := int32(1) if end == length { end_padding = 0 + } else if copy_audio { + // Copy-audio runs keep one extra overlap segment because we drop it + end_padding += 1 } segments := ts.keyframes.Slice(start_segment+1, end+end_padding) if len(segments) == 0 { @@ -344,7 +347,7 @@ func (ts *Stream) run(ctx context.Context, start int32) error { cmd.Process.Signal(os.Interrupt) slog.InfoContext(ctx, "killing ffmpeg because segment already ready", "segment", segment, "encoderId", encoder_id) should_stop = true - } else if copy_audio && end < length && segment == end-1 { + } else if copy_audio && end < length-1 && segment == end { // Extra overlap segment for copied audio. // Delete the file immediately and stop without closing // the channel, so a real producer can close it later.