+- **iOS Web (Safari + Chrome + every other iOS browser): no audio from other people in voice channels and no audio on incoming screen shares.** WebKit's `MediaStreamAudioSourceNode` produces silence for audio tracks pulled from an `RTCPeerConnection` (long-standing WebKit bug, every iOS browser inherits it because Apple forces them all onto WebKit). Haven was routing every incoming remote audio track through Web Audio (`createMediaStreamSource → gainNode → destination`) and muting the `<audio>` element itself, which works on every other browser but means iOS users heard absolute nothing in voice — calls looked connected, peer cards lit up, but the audio was a black hole. Now iOS specifically skips the Web Audio graph and lets the `<audio>` element play the stream natively, using the element's own `volume` property for per-user / per-screen-share volume. Trade-off on iOS only: no >100% volume boost and no per-remote-peer talking analyser (the server-pushed `voice-speaking` events still drive talk indicators), in exchange for audio that actually plays. Affects `_playAudio` and `_playScreenAudio` in `voice.js`. iOS video was working already (`<video playsinline autoplay>` is set on webcam and screen-share video tiles) — the user-visible "video and audio both broken" symptom was actually audio-only, but with audio silent the call felt completely dead.
0 commit comments