diff --git a/web/zebra-spaces.html b/web/zebra-spaces.html index 8c48c75..3eb798b 100644 --- a/web/zebra-spaces.html +++ b/web/zebra-spaces.html @@ -3180,6 +3180,20 @@ function applyLipSyncForPub(pubHex){ * applied only when role==='listener' — speakers don't need lock- * screen transport controls. */ function attachAudioStreamViaWorklet(uuid, stream, targetSeconds){ + /* Reject streams that have no live audio tracks. flushSfuStreams hands + * us whatever sfuStreamsByPubHex cached for the publisher's pubkey — + * after a publisher leaves and rejoins with the SAME pubkey, the old + * cached stream's tracks are ended even though the cache entry still + * exists. Without this guard, attach creates a silent MediaStreamSource + * → fallback to