startAudio({ speakerOnly: true }) no working on IOS


Format Your New Topic as Follows:

Video SDK Type and Version
SDK Type: Zoom Video SDK Web
SDK Version: 2.3.0

Description

When using startAudio({ speakerOnly: true }) on iOS Safari after the user denies microphone permission, the audio receive functionality only works if another participant already has an active audio stream. If no other participant has audio active when speakerOnly is initiated, the audio receive path becomes corrupted and the user cannot hear any audio even when other participants later enable their microphones.

Expected behavior: The iOS Safari user should be able to join in speaker-only mode (listen without microphone) and hear audio from other participants regardless of when those participants enable their microphones.

Error?

[Error] Unhandled Promise Rejection: NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.

  1. The SDK internally throws an unhandled NotAllowedError during startAudio({ speakerOnly: true })

2.The SDK reports success (promise resolves)

3.If another participant already has active audio → audio works

4.If no other participant has active audio → audio receive path is corrupted and user cannot hear audio even when other participants later turn on their microphones

Use case: We need to support users who deny microphone permission but still want to listen to the call (speaker-only mode). This works correctly on desktop browsers but fails on iOS Safari under specific conditions.
Troubleshooting Routes

  1. Tested with backgroundNoiseSuppression: false - Same issue occurs

  2. Tested with various delays (100ms, 300ms, 500ms) before calling startAudio() - Same issue

  3. Verified the issue does NOT occur on desktop browsers - speakerOnly: true works correctly on Chrome, Firefox, Safari desktop

  4. Verified the issue does NOT occur when microphone permission is granted on iOS Safari

  5. Confirmed getUserMedia() permission denial is handled correctly in our code before calling the SDK

  6. Tested with autoStartAudioInSafari: true - Same issue

How To Reproduce

  1. Create a Zoom Video SDK session

  2. Participant A (Specialist) joins from a desktop browser with microphone OFF

  3. Participant B (Client) joins from iOS Safari

  4. iOS Safari shows the “Tap to start audio” prompt (required for Safari autoplay policy)

  5. User taps the prompt, triggering microphone permission request

  6. User taps “Don’t Allow” to deny microphone permission

  7. Observe: startAudio() resolves successfully, but internal NotAllowedError is thrown

  8. Specialist (Participant A) now turns ON their microphone

  9. Result: iOS Safari user (Participant B) cannot hear the Specialist

Hey @Alexandru

Thanks for your feedback.

This is a current limitation and also a limitation of iOS browsers. When using WebRTC audio, microphone permission is still required even if the microphone is not being captured; otherwise, the received audio stream will be muted and the user will not be able to hear others.

We are closely monitoring changes in iOS browser implementations and will optimize this limitation in future versions.

Thanks
Vic