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; } /**