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

1.9 KiB

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.