35 lines
1.9 KiB
Markdown
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.
|