From 1a784a1cdfd8497c5f03864ffc93d34af171e789 Mon Sep 17 00:00:00 2001 From: Quick <31828688+Quick104@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:23:45 -0400 Subject: [PATCH] fix(player): restart backward HLS seeks (#499) Preserve negative player-time offsets for targets before a copy-mode HLS window so the existing transcode restart path handles them. Co-authored-by: GPT-5.6 Sol --- web/src/player/utils/mediaTimeline.test.ts | 4 ++-- web/src/player/utils/mediaTimeline.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/web/src/player/utils/mediaTimeline.test.ts b/web/src/player/utils/mediaTimeline.test.ts index f71c75e8..0929135c 100644 --- a/web/src/player/utils/mediaTimeline.test.ts +++ b/web/src/player/utils/mediaTimeline.test.ts @@ -8,9 +8,9 @@ describe("toMediaTime / toPlayerTime", () => { expect(toPlayerTime(3060, 3000)).toBe(60); }); - it("never returns a negative time", () => { + it("preserves an out-of-window target before the stream origin", () => { expect(toMediaTime(-10, 0)).toBe(0); - expect(toPlayerTime(10, 3000)).toBe(0); + expect(toPlayerTime(10, 3000)).toBe(-2990); }); }); diff --git a/web/src/player/utils/mediaTimeline.ts b/web/src/player/utils/mediaTimeline.ts index 33f4c975..928a66c1 100644 --- a/web/src/player/utils/mediaTimeline.ts +++ b/web/src/player/utils/mediaTimeline.ts @@ -3,7 +3,9 @@ export function toMediaTime(playerTimeSeconds: number, streamOriginSeconds = 0): } export function toPlayerTime(mediaTimeSeconds: number, streamOriginSeconds = 0): number { - return Math.max(0, mediaTimeSeconds - streamOriginSeconds); + // Preserve negative offsets so callers can distinguish a target before the + // current HLS window from the locally seekable position at zero. + return mediaTimeSeconds - streamOriginSeconds; } /**