1.4 KiB
1.4 KiB
ECP-0078: Live <video>-First Rendering With Gesture Audio Unlock
Status: Implemented
Context
Live browser playback currently prioritizes canvas rendering. Audio can fail on first load due to autoplay policy (AudioContext was not allowed to start) and we still need a robust <video> rendering path for native controls.
Decision
In the web watcher mount path:
- Render live playback with a
<video>child in<moq-watch>first. - Start muted at the watcher signal layer for autoplay compatibility, then unlock audio on first user gesture by:
- forcing backend
muted=false,volume=1, - toggling paused state to trigger resume,
- unmuting the
<video>element.
- forcing backend
Rationale
- Preserves the
<video>UX target while handling browser autoplay constraints explicitly. - Keeps changes local to app wiring without forking upstream MoQ player internals.
Alternatives considered
- Keep canvas-first rendering only. Rejected because native
<video>controls/audio handling are still required. - Attempt autoplay with unmuted audio by default. Rejected because browser policy blocks reliable first-play behavior.
Rollout / teardown
- Deploy muted-start plus gesture unlock wiring and validate first-load playback and unmute behavior.
- Teardown by removing unlock wiring or reverting to prior renderer mode.
Reversibility
- Remove the unlock wiring (or return to canvas renderer) to restore prior behavior.