every.channel/evolution/proposals/ECP-0117-live-fragment-duration-and-audio-unlock.md
every.channel 6739b424ab
Some checks are pending
ci-gates / checks (push) Waiting to run
deploy-cloudflare / checks (push) Waiting to run
deploy-cloudflare / deploy (push) Blocked by required conditions
Fix hosted live playback
2026-05-03 22:10:41 -07:00

1.9 KiB

ECP-0117: Live Fragment Duration and Audio Unlock

Status: Draft

Problem / context

Hosted live playback can subscribe to a local HDHomeRun stream while the visible frame stays frozen and audio stays muted. Browser inspection showed currentTime advancing through keyframe-spaced buffered ranges, but each range was only one microsecond long. The web wrapper also left the <moq-watch muted> attribute in place, so a user gesture could be overwritten back to muted.

Decision

Publish WebTransport fMP4 with keyframe-duration fragments (frag_keyframe) instead of one fragment per frame, and default wt-publish / nbc-wt-publish to the non-passthrough CMAF sample path. On the hosted web player, remove the muted attribute and reapply unmuted state to both the wrapper and underlying video element after a user gesture.

Consequences

  • Browser MSE receives continuous segment-duration ranges instead of isolated zero-length frame ranges.
  • Live playback accepts GOP-sized fragment latency, matching the current 48-frame live GOP.
  • Relay subscribers receive video0.m4s and audio0.m4s media groups by default instead of catalog-only passthrough announcements.
  • Audio remains gesture-gated for autoplay policy, but the gesture now actually unmutes the player.

Alternatives considered

  • Raise web jitter again. Rejected because the buffered media ranges were effectively zero-length; more latency does not turn still ranges into playable media.
  • Keep passthrough mode as the default. Rejected because relay probes received only catalog.json while the non-passthrough sample path delivered video and audio media groups.

Rollout / teardown

Rebuild/restart local and hosted publishers, deploy the updated web asset, and verify hosted playback by checking frame hashes over time. Teardown is restoring WT_PUBLISH_MOVFLAGS to frag_every_frame, restoring passthrough defaults to true, and restoring the prior muted wrapper behavior.