Known issues in the SDKs and APIs

This article provides information about limitations and known issues related to the Azure Communication Services Calling SDKs and Communication Services Call Automation APIs.

Important

There are multiple factors that can affect the quality of your calling experience. To learn more about Communication Services network configuration and testing best practices, see Network recommendations.

JavaScript SDK

The following sections provide information about known issues associated with the Communication Services JavaScript voice and video calling SDKs.

Firefox Known Issues

Firefox desktop browser support is now available in public preview. Known issues currently known when using Firefox are:

  • Enumerating speakers is not available: If you're using Firefox, your app won't be able to enumerate or select speakers through the Communication Services device manager. In this scenario, you must select devices via the operating system.
  • Virtual cameras are not currently supported when making Firefox desktop audio\video calls.

iOS 16 introduced bugs when putting browser in the background during a call

The iOS 16 release has introduced a bug that can stop the ACS audio\video call when using Safari mobile browser. Apple is aware of this issue and are looking for a fix on their side. The impact could be that an ACS call might stop working during a call and the only resolution to get it working again is to have the end customer restart their phone.

To reproduce this bug:

  • Have a user using an iPhone running iOS 16
  • Join ACS call (with audio only or with audio and video) using Safari iOS mobile browser
  • If during a call someone puts the Safari browser in the background and views YouTube OR receives a FaceTime\phone call while connected via a Bluetooth device

Results:

  • After a few minutes of this situation, the incoming and outgoing video may stop working.
  • The only way to get ACS calling to work again is to have the end user restart their phone.

Chrome M98 - regression

Chrome version 98 introduced a regression with anormal generation of video keyframes that impacts resolution of a sent video stream negatively for majority (70%+) of users.

  • This is a known regression introduced on Chromium

Some Android devices failing call scenarios except for group calls.

A number of specific Android devices fail to start, accept calls, and meetings. The devices that run into this issue, won't recover and will fail on every attempt. These are mostly Samsung model A devices, particularly models A326U, A125U and A215U.

  • This is a known regression introduced on Chromium.

iOS 15.1 users joining group calls or Microsoft Teams meetings.

  • Sometimes when incoming PSTN is received the tab with the call or meeting will hang. Related webkit bugs here and here.

Local microphone/camera mutes when certain interruptions occur on iOS Safari and Android Chrome.

This problem can occur if another application or the operating system takes over the control of the microphone or camera. Here are a few examples that might happen while a user is in the call:

  • An incoming call arrives via PSTN (Public Switched Telephone Network), and it captures the microphone device access.
  • A user plays a YouTube video, for example, or starts a FaceTime call. Switching to another native application can capture access to the microphone or camera.
  • A user enables Siri, which will capture access to the microphone.

On iOS for example, while on an ACS call, if a PSTN call comes in, then a microphoneMutedUnexepectedly bad UFD will be raised and audio will stop flowing in the ACS call and the call will be marked as muted. Once the PSTN call is over, the user will have to go and unmute the ACS call for audio to start flowing again in the ACS call. In the case of Android Chrome when a PSTN call comes in, audio will stop flowing in the ACS call and the ACS call will not be marked as muted. Once the PSTN call is finished, android chrome will regain audio automatically and audio will start flowing normally again in the ACS call.

In case camera is on and an interruption occurs, ACS call may or may not loose the camera. If lost then camera will be marked as off and user will have to go turn it back on after the interruption has released the camera.

Occasionally, microphone or camera devices won't be released on time, and that can cause issues with the original call. For example, if the user tries to unmute while watching a YouTube video, or if a PSTN call is active simultaneously.

Incoming video streams won't stop rendering if the user is on iOS 15.2+ and is using SDK version 1.4.1-beta.1+, the unmute/start video steps will still be required to re-start outgoing audio and video.

For iOS 15.4+, audio and video should be able to auto recover on most of the cases. On some edge cases, to unmute, an api to 'unmute' must be called by the application (can be as a result of user action) to recover the outgoing audio.

iOS with Safari crashes and refreshes the page if a user tries to switch from front camera to back camera.

Azure Communication Services Calling SDK version 1.2.3-beta.1 introduced a bug that affects all of the calls made from iOS Safari. The problem occurs when a user tries to switch the camera video stream from front to back. Switching camera results in Safari browser to crash and reload the page.

This issue is fixed in Azure Communication Services Calling SDK version 1.3.1-beta.1 +

  • iOS Safari version: 15.1

Refreshing a page doesn't immediately remove the user from their call

If a user is in a call and decides to refresh the page, the Communication Services media service won't remove this user immediately from the call. It will wait for the user to rejoin. The user will be removed from the call after the media service times out.

It's best to build user experiences that don't require end users to refresh the page of your application while in a call. If a user refreshes the page, reuse the same Communication Services user ID after that user returns back to the application. By rejoining with the same user ID, the user is represented as the same, existing object in the remoteParticipants collection. From the perspective of other participants in the call, the user remains in the call during the time it takes to refresh the page, up to a minute or two.

If the user was sending video before refreshing, the videoStreams collection will keep the previous stream information until the service times out and removes it. In this scenario, the application might decide to observe any new streams added to the collection, and render one with the highest id.

It's not possible to render multiple previews from multiple devices on web

This is a known limitation. For more information, see Calling SDK overview.

Enumerating devices isn't possible in Safari when the application runs on iOS or iPadOS

Applications can't enumerate or select speaker devices (like Bluetooth) on Safari iOS or iPadOS. This is a known limitation of these operating systems.

If you're using Safari on macOS, your app won't be able to enumerate or select speakers through the Communication Services device manager. In this scenario, you must select devices via the operating system. If you use Chrome on macOS, the app can enumerate or select devices through the Communication Services device manager.

  • iOS Safari version: 15.1

Repeatedly switching video devices might cause video streaming to stop temporarily

Switching between video devices might cause your video stream to pause while the stream is acquired from the selected device. Switching between devices frequently can cause performance degradation. It's best for developers to stop one device stream before starting another.

Bluetooth headset microphone isn't detected or audible during the call on Safari on iOS

Bluetooth headsets aren't supported by Safari on iOS. Your Bluetooth device won't be listed in available microphone options, and other participants won't be able to hear you if you try using Bluetooth over Safari.

This is a known operating system limitation. With Safari on macOS and iOS/iPadOS, it's not possible to enumerate or select speaker devices through Communication Services device manager. This is because Safari doesn't support the enumeration or selection of speakers. In this scenario, use the operating system to update your device selection.

Rotation of a device can create poor video quality

When users rotate a device, this movement can degrade the quality of video that is streaming.

The environment in which this problem occurs is the following:

  • Devices affected: Google Pixel 5, Google Pixel 3a, Apple iPad 8, and Apple iPad X
  • Client library: Calling (JavaScript)
  • Browsers: Safari, Chrome
  • Operating systems: iOS, Android

Camera switching makes the screen freeze

When a Communication Services user joins a call by using the JavaScript calling SDK, and then selects the camera switch button, the UI might become unresponsive. The user must then refresh the application, or push the browser to the background.

The environment in which this problem occurs is the following:

  • Devices affected: Google Pixel 4a
  • Client library: Calling (JavaScript)
  • Browser: Chrome
  • Operating systems: iOS, Android

Video signal problem when the call is in connecting state

If a user turns video on and off quickly while the call is in the Connecting state, this might lead to a problem with the stream acquired for the call. It's best for developers to build their apps in a way that doesn't require video to be turned on and off while the call is in the Connecting state. Degraded video performance might occur in the following scenarios:

  • If the user starts with audio, and then starts and stops video, while the call is in the Connecting state.
  • If the user starts with audio, and then starts and stops video, while the call is in the Lobby state.

Enumerating or accessing devices for Safari on macOS and iOS

In certain environments, you might notice that device permissions are reset after some period of time. On macOS and iOS, Safari doesn't keep permissions for a long time unless there is a stream acquired. The simplest way to work around this is to call the DeviceManager.askDevicePermission() API, before calling the device manager's device enumeration APIs. These enumeration APIs include DeviceManager.getCameras(), DeviceManager.getSpeakers(), and DeviceManager.getMicrophones(). If the permissions are there, the user won't see anything. If the permissions aren't there, the user will be prompted for the permissions again.

The environment in which this problem occurs is the following:

  • Device affected: iPhone
  • Client library: Calling (JavaScript)
  • Browser: Safari
  • Operating system: iOS

Delay in rendering remote participant videos

During an ongoing group call, suppose that User A sends video, and then User B joins the call. Sometimes, User B doesn't see video from User A, or User A's video begins rendering after a long delay. A network environment configuration problem might cause this delay. For more information, see Network recommendations.

Using third-party libraries during the call might result in audio loss

If you use getUserMedia separately inside the application, the audio stream is lost. This is because a third-party library takes over device access from the Azure Communication Services library.

  • Don't use third-party libraries that are using the getUserMedia API internally during the call.
  • If you still need to use a third-party library, the only way to recover the audio stream is to change the selected device (if the user has more than one), or to restart the call.

The environment in which this problem occurs is the following:

  • Browser: Safari
  • Operating system: iOS

The cause of this problem might be that acquiring your own stream from the same device will have a side effect of running into race conditions. Acquiring streams from other devices might lead the user into insufficient USB/IO bandwidth, and the sourceUnavailableError rate will skyrocket.

Support for simulcast

Simulcast is a technique by which a client encodes the same video stream twice, in different resolutions and bitrates. The client then lets Communication Services decide which stream a client should receive. The Communication Services calling library SDK for Windows, Android, or iOS supports sending simulcast streams. The Communication Services Web SDK doesn't currently support sending simulcast streams out.

Communication Services Call Automation APIs

The following are known issues in the Communication Services Call Automation APIs:

  • The only authentication currently supported for server applications is to use a connection string.

  • Make calls only between entities of the same Communication Services resource. Cross-resource communication is blocked.

  • Calls between tenant users of Microsoft Teams and Communication Services users or server application entities aren't allowed.

  • If an application dials out to two or more PSTN identities and then quits the call, the call between the other PSTN entities drops.

Group call limitations for JS web Calling SDK users

Up to 100 users can join a group call using the JS web calling SDK.

Android API emulators

When utilizing Android API emulators on Android 5.0 (API level 21) and Android 5.1 (API level 22) some crashes are expected.