Feature: DVR-aware seek bar for live player #1

Closed
opened 2026-04-25 09:05:46 +02:00 by wandabastyle · 1 comment
wandabastyle commented 2026-04-25 09:05:46 +02:00 (Migrated from github.com)

Problem

The watch player already renders a progress/buffer bar and has click-to-seek wired, but seeking is unreliable on live streams.

Current logic computes seek/progress from video.duration, which is often not useful for live HLS (e.g. Infinity), so users can’t reliably scrub within the available live window.

Why this matters

Users expect to click/drag on the timeline to move within the stream’s available DVR window (when available). Right now the control exists visually but often behaves like it’s missing.

Proposal

Implement a DVR-aware seek model for live playback:

  1. Use video.seekable (latest range start/end) for live timeline math.
  2. Map click position to [seekable.start, seekable.end] instead of [0, duration].
  3. Render played and buffered widths relative to the seekable window in live mode.
  4. Keep current duration-based behavior for VOD/non-live playback.
  5. If video.seekable.length === 0, disable timeline seeking (or show a clear “not seekable” state).

Acceptance criteria

  • On live streams with DVR window, clicking timeline seeks within available window.
  • Progress + buffered UI reflect the seekable window correctly.
  • On non-seekable live streams, timeline is disabled or clearly indicated.
  • VOD/non-live behavior remains unchanged.

Optional follow-ups

  • Add hover tooltip with live offset (e.g. -00:45 from live edge).
  • Add a “Go Live” control to jump to the seekable end.
## Problem The watch player already renders a progress/buffer bar and has click-to-seek wired, but seeking is unreliable on live streams. Current logic computes seek/progress from `video.duration`, which is often not useful for live HLS (e.g. `Infinity`), so users can’t reliably scrub within the available live window. ## Why this matters Users expect to click/drag on the timeline to move within the stream’s available DVR window (when available). Right now the control exists visually but often behaves like it’s missing. ## Proposal Implement a DVR-aware seek model for live playback: 1. Use `video.seekable` (latest range start/end) for live timeline math. 2. Map click position to `[seekable.start, seekable.end]` instead of `[0, duration]`. 3. Render played and buffered widths relative to the seekable window in live mode. 4. Keep current duration-based behavior for VOD/non-live playback. 5. If `video.seekable.length === 0`, disable timeline seeking (or show a clear “not seekable” state). ## Acceptance criteria - [ ] On live streams with DVR window, clicking timeline seeks within available window. - [ ] Progress + buffered UI reflect the seekable window correctly. - [ ] On non-seekable live streams, timeline is disabled or clearly indicated. - [ ] VOD/non-live behavior remains unchanged. ## Optional follow-ups - Add hover tooltip with live offset (e.g. `-00:45` from live edge). - Add a “Go Live” control to jump to the seekable end.
wandabastyle commented 2026-04-25 16:17:31 +02:00 (Migrated from github.com)

Fixed by #5. This issue is resolved by the changes in that PR.

Fixed by #5. This issue is resolved by the changes in that PR.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
wandabastyle/twitch_relay#1
No description provided.