every.channel/evolution/proposals/ECP-0086-web-watcher-jitter-budget.md

35 lines
1.9 KiB
Markdown

# ECP-0086: Web Watcher Jitter Budget Override
Status: Implemented
## Problem
Browser live playback on `every.channel` stays connected but still cuts in and out. A Chrome browser repro against `https://every.channel/watch?url=https%3A%2F%2Fcdn.moq.dev%2Fanon&name=la-nbc` showed no remounts or request failures, but the `@moq/watch@0.2.0` player emitted continuous `skipping slow group` warnings plus frequent small seek corrections.
## Constraints
- Keep the existing `@moq/watch` integration and WebTransport-only path.
- Avoid forking upstream player code for a site-level playback tuning change.
- Keep the fix reversible and local to the web app wiring.
## Decision
Set the web watcher's `jitter` attribute to `750` milliseconds in `apps/web/app.js` before connect.
Browser evidence for the same live stream showed:
- default `jitter=100`: `2762` warnings over the sample, including `324` seek corrections, final `readyState=1`
- forced `jitter=750`: `2482` warnings over the sample, including `75` seek corrections, final `readyState=4`
This does not eliminate upstream `skipping slow group` churn entirely, but it substantially reduces the seek-thrash that most directly surfaces as visible cut-in/cut-out playback.
## Alternatives Considered
- Leave the default `100ms` jitter budget. Rejected because the browser repro showed sustained seek churn under live playback.
- Raise jitter further (for example `1500ms`). Rejected for now because it reduced some warnings but regressed playback advancement more than `750ms` in the same sample.
- Fork `@moq/watch`. Rejected because the exposed `jitter` control was sufficient for a first mitigation.
## Rollout / Teardown
- Deploy the `jitter=750` override and validate live watch continuity in Chrome against public relay streams.
- If the extra latency is unacceptable or upstream player behavior changes, remove the override and fall back to the library default.