zebra-report/test
Russell Ballestrini dad697d141
zebra-spaces: chromium decoder anchor — muted <audio> alongside MediaStreamSource
Chromium will not run its WebRTC audio decoder for a remote track
that is only consumed by a MediaStreamAudioSourceNode. The track
must also be attached to an HTMLMediaElement to "kick" the decoder
into running. Without the anchor the worklet's queue fills with
zeros — the 'started' event fires, ctxState=running, RTP packets
arrive at 50 pps, yet PulseAudio Playback shows the chrome stream
present with the level meter dead at 0. Fox 2026-06-07 fedora
chrome silent for days; firefox unaffected (its decoder runs
unconditionally for MediaStreamSource consumers).

Each attach now creates a hidden muted <audio> bound to the same
MediaStream. The element makes no audible output (muted=true); its
sole purpose is to keep chromium's decoder running so the worklet's
MediaStreamSource sees real samples. setWorkletStream swaps the
anchor's srcObject alongside the source node so an in-place stream
swap doesn't strand the anchor on a dead track. detachListenerStream
tears the anchor down with the rest of the chain.

Tests pin the contract: anchor created on attach, anchor follows the
stream on setWorkletStream, anchor torn down on detach.
2026-06-07 20:06:05 -04:00
..
functional.c phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
integration.c phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
jitter-buffer-worklet.test.js zebra-spaces: clean shrink-retarget (drop to target, skip-couple video) 2026-06-06 14:55:03 -04:00
listener-audio-attach.test.js zebra-spaces: chromium decoder anchor — muted <audio> alongside MediaStreamSource 2026-06-07 20:06:05 -04:00
mod-action-serializer.test.js test: pin the mod-action serializer race fix 2026-06-04 10:46:55 -04:00
multi-peer-mesh.test.js zebra-spaces: rebuild <video> on MSID supplant — autoplay grant resets 2026-06-03 16:08:01 -04:00
self-listener-fsm.test.js zebra-spaces: formalize self-listener as FSM — pure spec + observer-driven side effects + 12 unit tests 2026-06-04 13:10:29 -04:00
sendbye-fsm.test.js zebra-spaces: send 'bye' on pagehide for listeners even on bfcache (kill closed-firefox roster zombies) 2026-06-06 14:45:39 -04:00
test.h phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
unit.c phase 1: unfirehose reconstruction from session JSONL ingest 2026-05-27 13:51:14 -04:00
video-track-removal.test.js zebra-spaces: 120s mute window for screen + game (static content), 15s stays for camera 2026-06-03 10:33:28 -04:00
web-protocol.test.js test: node web protocol suite (no devices) + exponential retransmit backoff 2026-05-28 12:44:20 -04:00
zebra-fsm.test.js test/zebra-fsm: MuteFSM transition tests — 14 new cases (102 total) 2026-06-04 14:14:52 -04:00
zebra-spaces.test.js zebra-spaces: JS↔Go protocol parity + crypto tests 2026-05-31 11:06:59 -04:00