Issue with audio on Safari

Two issue i noticed with audio on Safari.

Safari Desktop Mac:
startAudio is throwing exception on safari not regularly but 4/10 times. startAudio operation is performed when both encode and decode are returned with success in mediasdkchange event.
await this.zoomMediaStream.startAudio({ autoStartAudioInSafari: true });

To me it looks like OEPRATION_TIMEOUT happens due to websocket connection i think not sure. But this only happens on safari.

Safari IPHONE:
muteUserAudioLocally does not work on iphone safari it works on iphone chrome correctly.
await this.zoomMediaStream.muteUserAudioLocally(userId);

It does not throw any exception.
Even when i periodically check local volume status using getUserVolumeLocally(userId) for that user it correctly shows 0 volume. But voice can still be heard. No effect of muteUserAudioLocally this only happens on safari iphone.

Also on safari preloadDependentAssets does not work properly, it always try to fetch from two sites one some cloudfront site for which it throws 403 error everytime, and another provided url from which it gets assets successfully.
both preloadDependentAssets and zoomClient.init has same dependent assets url.

@rohit_zoom ,

Thank you for posting in the Zoom Developer Forum. To begin, can you please share the following details :


Which Video SDK Platform?

Which Video SDK version?

Exact Steps To reproduce

Device Crash logs

Hi @donte.zoom,

Using Zoom video SDK web 1.9.0

There were no crashes for muteUserAudioLocally as mentioned above. Even getUserVolumeLocally was returning volume 0 for that userid. muteUserAudioLocally function returned success. This issue was only occurring on ios safari. It happens all the time.

For desktop safari macbook pro no matter the version, OPERATION_TIMEOUT occures for only audio, video was working ok. This was only on safari. Steps was when startAudio was called on after audio encode and decode were return with success, exception was thrown with OPERATION_TIMEOUT. But if i mute and unmute the user audio starts working. This does not happen all the time. It occurs randomly.
Failed to load resource: the server responded with a status of 403 ()
Failed to load resource: the server responded with a status of 403 ()
Failed to load resource: the server responded with a status of 403 ()
Failed to load resource: the server responded with a status of 403 ()

This i am getting for dependent assets but in network logs i can see they were loaded with predefined custom assets url using preloadDependentAssets. Why is it trying to get those when preloadedAssets is called with a url. Only occurs in safari.

Also on IOS with every IOS version and both chrome and safari browser , when tab is inactive and audio is played on other apps. Returning to tab requires audio restart. Is there any better way of handling this.

Hey @rohit_zoom

Thanks for your feedback.

Safari Desktop Mac:

It’s quite likely that after calling stream.startAudio({ autoStartAudioInSafari: true }), the user didn’t interact with the page.

Due to browser privacy policies, automatic audio joining is not allowed on Safari. Internally, in the Video SDK, we wait for user interaction after calling this method. If there is no interaction within 40 seconds, we return OPERATION_TIMEOUT.

Safari IPHONE:

Due to browser capability limitations, muteUserAudioLocally is currently not available on iOS. We will improve the prompt message for this method call in the future.

Dependent assets 403

These are the sourcemap resources for our Video SDK library, used only when troubleshooting. They have no impact on functionality.

Audio interrupt when back

This is a limitation on iOS browsers. When the session is switched to the background and audio is played in another app, the audio in the session will be interrupted, and you need to manually start the audio again, you can listen to current-audio-change event to catch the change.

Starting from Video SDK 1.10.5, we provide the audio leave reason in the current-audio-change event.


1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.