Listeners now hear all speakers via a Pion-based audio-only SFU on proxy.uncloseai.com. Speakers publish to it; listeners subscribe and get one PC carrying every speaker's track. Mesh remains the low-latency speaker<->speaker path; SFU is the broadcast fan-out. Wiring: - sfuPublish/Unpublish for speaker role transitions - sfuSubscribe/Unsubscribe for listener role transitions - onRoleEntered + onRoleChanged + leave hooks - ontrack on the subscribe PC maps streams[0].id (= publisher pubkey hex, set as the SFU TrackLocal StreamID) -> room member uuid; audio element + meter attach to the matched member row - SSE renegotiation: SFU pushes offer when speakers come/go; browser answers via POST /answer - applyMicMode now hot-swaps the SFU publish sender's track too, so voice/music mode toggles apply over the SFU just like the mesh Notice banner — fox flagged that booted/demoted users had no visible signal. Added a #sec-notice section with .notice-banner (warn for boot/demote-to-listener, info for promote). Boot also sets wantConnected=false to prevent the WS auto-reconnect loop from rejoining into a boot loop. |
||
|---|---|---|
| .. | ||
| blog | ||
| fonts | ||
| chat.html | ||
| host-your-own.html | ||
| how-it-works.html | ||
| index.html | ||
| kernel.html | ||
| stamp.js | ||
| zebra-audio.html | ||
| zebra-spaces.html | ||