Release notes
Updated
Information about changes in each release of Voice Calling.
Voice Calling 4.x is a JavaScript and TypeScript library loaded by an HTML web page. The SDK library uses APIs in the web browser to establish connections and control the communication, Broadcast Streaming and Interactive Live Streaming services.
Compatibility
See Supported platforms.
Known issues
The list of known issues page is continuously updated as the systems evolve. Agora suggests you regularly upgrade to the latest version of the SDK, which includes new features, bug fixes and improvements.
-
Desktop
Chrome
-
Starting from Chrome 117, the
getStats()method is no longer supported in the SDK v4.9.3 and earlier versions. Calling this method will return all values as0. This caused by the fact that the old version of thegetStats()WebRTC API will be removed from Chrome 117, as stated in the Chrome official documentation. Solution: Upgrade to a higher version of the SDK. -
On all AMD-based and some Intel-based devices with the Windows operating system, if Chrome uses the H.264 codec, the video transmission bitrate may be lower than the set value. Solution: To resolve this issue, you can set the browser to use the VP9 codec or try to disable hardware acceleration.
-
Chrome 84 on macOS has a known issue: When using the H.264 codec, WebRTC can experience a sudden drop in the frame rate. For details, see the official Google bug reports: Issue 1088650 and Issue 12704. Solution: Agora recommends using VP9 instead of H.264 for Chrome 84 and later versions on macOS.
-
Acoustic Echo Cancellation(AEC) fails to work on Chrome in certain use-cases. Cause: If you apply extra processing (for example, spatial audio) to the received remote audio stream, AEC fails to get the AEC Reference signal. For details, see the Chrome Issue 687574. Solution: Agora recommends that all users wear headphones instead of using speakers. To use speakers in this use-case, contact support@agora.io.
-
Chrome plans to deprecate and remove the Plan B dialect in WebRTC. For details, see the Chrome feature description. If you use any of the following versions of Voice Calling, best practice is to upgrade to the latest version:
Version Impact v4.0.0-4.0.1 The publishandsubscribemethods do not have any effect.
Safari
-
On Safari 17.2, the SDK cannot switch to the small stream properly.
-
On Safari browsers of some Mac devices with Intel chips, calling
enableDualStreamto enable H.264-encoded dual-stream mode may result in system lag when the ratio of the small stream to the large stream resolution is below 1/4. -
On Safari 15.4, if you set the sample rate of the local audio track as 32,000 Hz, the local audio track ends (triggering the
AgoraRTCClient.on('track-ended'event). -
If you use H.264 on Safari 15.1, setting MediaStreamTrack.enabled as
falsecrashes the web tab. -
On Safari 14.0.1, the audio can experience stuttering.
-
Safari 13 users may not be able to hear other users.
-
Safari 12.1 or earlier only supports the H.264 codec.
-
Safari 11 only supports video resolutions of 480P and higher.
-
Safari does not support getting the output device information, so it does not support the
getPlayoutDevicesandsetAudioOutputmethods. -
On Safari, when calling APIs to get quality statistics, the values of some properties are 0. For example, when calling
getLocalAudioStatsto get the quality statistics of the local audio track, the value ofsendPacketsLostis 0. -
If Auto-Play is not enabled on Safari (as the following figure shows), the stream playback has no audio. You have to call the
navigator.mediaDevices.getUserMediamethod to get the device permissions before playing a stream.
Firefox
Firefox
-
Black screen issue on the receiver's side with Firefox version 138
Issue description: When users interact using real-time audio and video on Firefox version 138, the receiver may see a black screen instead of video.
Root cause: This issue is caused by a rollback in the Firefox browser. Version 138 introduced a temporary change that causes video stream decoding to fail. This is a compatibility issue introduced by the browser vendor. For details, see Bugzilla 1965831.
Workaround: Agora has implemented a temporary fix through configuration delivery. In incognito or private browsing mode, this configuration may not take effect, and integration changes may be required. Contact technical support for assistance.
-
The default setting for the minimum video bitrate in Web SDK does not take effect on Firefox.
-
Sending SEI data in H.264 video streams is not supported on Firefox.
-
On Firefox 98, when sending H.264 video from Windows devices, the keyframes cannot be received immediately after the video is subscribed, thus slowing down the rendering of the first video frame.
-
When the Web SDK on Firefox communicates with the SDK on some devices, the video on Firefox is rotated.
-
Firefox does not support changing the frame rate (30 fps by default).
-
Firefox does not support setting the audio encoding rate.
-
Setting the video profile on Firefox does not take effect on the following devices:
- MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)
- Windows 10 (MI)
-
On Macs with the Apple M1 chip, Firefox does not support H.264. For details, see the Firefox documentation.
-
Firefox does not support getting
CodecType,sendFrameRateandcaptureFrameRate.
Other restrictions on desktop
- On Chrome 81 or later, Safari, and Firefox, device IDs are only available after the user has granted permission to use the media device. This restriction affects the
getMicrophones,getCameras, andgetPlaybackDevicesmethods. - The
setPlaybackDevicemethod is only supported on Chrome. Calling this method on other browsers throws theNOT_SUPPORTEDerror. - The
setOptimizationModemethod and theoptimizationModeparameter inCameraVideoTrackInitConfig,ScreenVideoTrackInitConfig, andCustomVideoTrackInitConfigare only supported on Chrome.
-
-
Mobile
iOS
iOS known issues
iOS 16.0: The video is stretched after the screen changes to a certain orientation
Impact: All browsers and apps that use WKWebView on iOS 16.0, such as Safari and Chrome.
Reason: Due to the regression of the WebRTC module of WebKit on iOS 16.0, RTP streaming with coordination of video orientation (CVO) does not work properly, which causes the video to be stretched after rotation.
Workaround: Agora recommends that you add a prompt to remind users of this issue.
iOS 15.1.x: The browser crashes when sending the H.264 video stream
Impact: All browsers and apps that use WKWebView on iOS 15.1.x, such as Safari and Chrome.
Details: If you set codec as 'h264' when calling createClient, the browsers on iOS 15.1.x crash after you send the video stream.
Reason: This issue happens due to the regression of the WebKit video encoder on iOS 15.1.x. For details, see WebKit Bug 231505.
Workaround: Use the VP9 codec for video encoding.
createClient({codec:'vp9', mode})iOS 15.x: The actual bitrate of sending the H.264 video stream is lower than expected
Impact: Safari on iOS 15.x
Reason: The issue occurs because WebRTC H264 LowLatency encoder is enabled by default for Safari on iOS 15.x. For details, see Webkit bug 238366.
Workaround: The following workarounds are available:
-
Use the VP9 codec for video encoding. The sample code is as follows:
createClient({codec:'vp9', mode}) -
On the iOS device, go to Settings > Safari > Advanced > Experimental Features, and disable WebRTC H264 LowLatency encoder.
iOS 15.0 to 15.3: Low audio volume
Impact: All browsers and apps that use WKWebView on iOS 15.0 to 15.3, such as Safari and Chrome.
Details: On iOS 15.0 to 15.3, after the local user subscribes to the RemoteAudioTrack and plays it, sometimes the audio is routed to the earpiece instead of the speaker, and the volume that the local user hear may be very low.
Reason: This issue happens due to the regression of the WebKit audio module on iOS 15.0 to 15.3. For details, see WebKit Bug 230902.
Workaround: On iOS 15.0 to 15.3, use WebAudio to play the audio, and use GainNode to increase the audio volume level. Use the following workaround:
- Upgrade to the Web SDK 4.9.0 or later versions.
- Set the SDK private parameter
REMOTE_AUDIO_TRACK_USES_WEB_AUDIOastrue. The SDK usesWebAudioto play the remote audio stream. Sample code:function isIOS15(ua){ // Use UA to judge whether the iOS version is 15 } if(isIOS15(navigator.userAgent)){ // If you are using Typescript, add the "@ts-ignore" tag before calling setParameter // @ts-ignore AgoraRTC.setParameter("REMOTE_AUDIO_TRACK_USES_WEB_AUDIO", true); }
iOS 15.x: The video playback goes black
Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
Details: On iOS 15.x, if you play the video in DOM node and add some CSS properties (such as transform and animation) to the video element or its parent element, or if you change the CSS properties to redraw the video rendering area, sometimes the video goes black.
Reason: This issue happens due to the regression of the WebKit video renderer on iOS 15.x. For details, see WebKit Bug 230902.
Workaround: Upgrade to the Web SDK v4.7.3 or later and minimize changes to the CSS properties of the video element and its parent elements.
iOS 15.x: If a user wears a Bluetooth headset, the audio may be significantly distorted
Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
Reason: This issue happens due to the regression of the WebKit audio playback module on iOS 15.x. For details, see WebKit Bug 231422.
Workaround: Agora recommends that you add a prompt to remind users of possible audio distortion issues when they use a Bluetooth headset.
Backgrounding the browser or app causes the audio streaming to be cut off.
Impact:
- Safari on iOS 15.x.
- Browsers and apps that use WKWebView (such as Chrome) on iOS 14.4 to iOS 15.x.
Reason:
- For Safari: This happens primarily due to this WebKit bug. After the browser switches to the background, the
AudioContextofWebAudiostops processing audio. - For browsers and apps using WKWebView: This happens because iOS
WKWebViewprohibits microphone usage while in the background. For details, see Microphone gets muted in background.
Workaround: Currently there is no workaround for browsers and apps using WKWebView. For Safari on iOS 15.x, you can follow these steps to avoid this issue:
-
Upgrade to the Web SDK v4.7.3 or later versions.
-
When calling
createMicrophoneAudioTrack, setbypassWebAudioastrue. The Web SDK directly publishes the local audio stream without processing it throughWebAudio.const localAudioTrack = await AgoraRTC.createMicrophoneAudioTrack({bypassWebAudio: true});
Note that this workaround has a side effect. After applying this workaround, the audio mixing function (
MixingAudioTrack) in the SDK fails.
iOS 15.x: Audio and video playback might not resume automatically after being interrupted by a system phone call, another real-time interaction app, Siri, or an alarm.
Impact: All browsers and apps that use WKWebView on iOS 15.x, such as Safari and Chrome.
Reason: Such interruptions can cause the state of the video and audio elements to be paused. After the interruption finishes, the state cannot be automatically switched back to playing, and even calling HTMLMediaElement.play cannot resume the media playback. See the WebKit bug 232599 and 226698 for more details.
Workaround: Upgrade to the Web SDK v4.7.3 or later versions. The SDK attempts to resume media playback after the interruption. Agora recommends that you add a prompt that instructs users to refresh the page.
iOS 15.x and 16.x: Certain iPad and iPhone models may experience noise issues after entering a channel.
Impact: Chrome and Safari browsers on specific iPad and iPhone models with iOS 15.x and 16.x. Specific models include:
- iPad (5th Gen)
- iPad (6th Gen)
- iPad (7th Gen)
- iPad Pro (1st Gen)
- iPhone SE (1st Gen)
Workaround: Update to the latest iOS version.
Other known issues
-
The volume of a remote user can change randomly on iOS 13 and 14.
- Switching between the front and rear cameras can momentarily rotate the video.
- The audio routing can change randomly. Sometimes, the audio is routed to the speakerphone when a headset is connected or to the earpiece when no headset is connected.
- If you call
getUserMediatwice to get two tracks of the same media type, the first track goes muted or black. - After a user switches to another app that uses the microphone or camera (such as Siri or Skype) and then switches back, the audio sampling or video capture fails.
iOS known limitations
The
createScreenVideoTrackmethod is not supported
Reason: iOS Safari and WKWebView do not support the mediaDevices.getDisplayMedia method.
The setBeautyEffect method is not supported
Reason: WebGL is not well supported on iOS Safari and WKWebView, and the image enhancement algorithm can reduce the system performance below acceptable levels.
The IBufferSourceAudioTrack.seekAudioBuffer method is not supported
Reason: WebAudio on iOS does not support this method.
Cannot send H.264 video streams with a resolution of 1080p or higher
Reason: The Web SDK uses the H.264 Baseline Profile for negotiation, so encoding and sending a video stream with a resolution of 1080p or higher is not supported on iOS.
When sending a low-quality stream on iOS Safari, you cannot set LowStreamParameter.bitrate, and the resolution of the low-quality stream must be proportional to the resolution of the high-quality stream.
Reason: iOS Safari and WkWebView do not support setting the frame rate with the RTCRTPSender.setParameters method. After compressing the resolution with the scaleResolutionDownBy property, the resolution of the low-quality stream stays proportional to the resolution of the high-quality stream.
The encodeDelay property is not supported
Reason: The encodeDelay property cannot be calculated through the getStats method of WebRTC on iOS.
Backgrounding the browser or app causes the user's video to display as a black screen
Reason: iOS AVCaptureSession prohibits camera usage while in the background. For details, see AVCaptureSessionInterruptionReason or Chromium issue 4294.
Calling RemoteAudioTrack.setVolume has no effect on the playback volume of the remote audio
Reason: iOS and iOS WebView do not support setting the volume of a media object through the HTMLMediaElement.volume property.
Android
Android known issues
Android 12: Video distortion on Chrome when hardware acceleration is enabled
Impact: The Chrome browser or Chromium kernel browser 97 or earlier on certain devices with Android 12, such as Pixel 3 and Pixel 4.
Details: If the Chrome browser on Android 12 enables the WebRTC H264 or VP9 hardware acceleration by default, video distortion can occur.
Reason: This issue happens due to the regression of the Chromium WebRTC video encoder. For details, see Chromium issue 1237677.
Workaround: Chrome 97 fixed this issue. You can instruct users to upgrade to Chrome 97 or later versions.
The bitrate when sending video on Android Chrome fails to reach the preset value.
Scope: Certain Android devices, such as Xiaomi and OnePlus.
Reason: This is a hardware encoder issue. The bitrate fails to reach the preset value at a specific video encoding frame rate.
Workaround: In most cases, the bitrate is relatively lower when the frame rate is set as 15 fps. If you set the frame rate as 30 fps, the bitrate increases. So Agora recommends trying to set the frame rate as 30 fps when encountering a bitrate issue. However, setting the frame rate as fps may cause performance issues.
The autoplay of inaudible media is blocked on WeChat
Impact: The WeChat browser using Chromium 89 kernel
Details: The autoplay of inaudible media is blocked. Even after the user interacts with the webpage to resume the video playback, the autoplay block is still not removed.
Reason: This issue happens because the WeChat browser implements a custom autoplay policy.
Workaround: Follow these steps to avoid this issue:
-
Upgrade to the Web SDK v4.6.0 or later versions.
-
Listen to the
AgoraRTC.onAutoplayFailedevent. Instruct the user to click on the page to resume playback:AgoraRTC.onAutoplayFailed = ()=>{ document.alert('Please click the page to resume playback'); }
If a local user wears a Bluetooth headset, after they start to send the audio, the remote audio is lost
Scope: Certain Xiaomi and OnePlus devices
Details: If a local user wears a Bluetooth headset, when the Bluetooth headset starts capturing the audio, there is a possibility that the remote audio is lost.
Reason: It may be due to the audio issue on Chromium regarding the profile switch of the Bluetooth.
Workaround: Agora recommends that you add a prompt to remind users of possible audio-loss issues when they use a Bluetooth headset.
When a local user is sending audio, switching the audio output device does not take effect
Scope: Chromium-based browsers on Android devices
Details: When a local users is sending audio, if the user switches from using the speaker to using a Bluetooth headset, the remote audio still comes from the speaker.
Reason: The audio routing on Android devices is controlled by the Android operating system and cannot be fixed at Chromium's level. For details, see Chromium issue 1317548.
Issues specific to certain Android devices
-
On devices equipped with MediaTek chips, the Web SDK cannot encode and send video streams in H.264.
- On devices equipped with Huawei HiSilicon Kirin chips, if you use Chrome versions earlier than 88, the Web SDK cannot encode and send video streams in H.264.
- When receiving video streams on Chrome on OnePlus 6, if the screen turns off, the video can freeze.
- Harmony OS does not support sending the video stream of 180p.
Other known issues
-
On some Android devices, the device labels might not be available.
- On some Android devices, tracks can end if the audio and video streams are interrupted by system phone calls or other audio or video calling apps. To resume the call, the Web SDK needs to re-capture the audio and video.
- On Android Chrome, the Web SDK cannot send high-quality and low-quality streams in H.264.
- On Android Chrome earlier than 90, the volume obtained by
getVolumeLevelis 0, but the user can hear the audio. - On Android system Webview versions from 55 to 75, the
decodeFrameRateproperty stays 0. - When running Android 11 on certain OPPO models, such as Reno4 and A11, users will experience black screens and no sound due to the lack of WebRTC support.
Android known limitations
The
createScreenVideoTrackmethod is not supported
Reason: The mediaDevices.getDisplayMedia method is not implemented on mobile browsers and WkWebView.
The setBeautyEffect method is not supported
Reason: The image enhancement algorithm can reduce the system performance of mobile devices below acceptable levels.
v4.24.5
Released on June 24, 2026.
Upgrade considerations
-
Domain allowlist change
Starting with v4.24.5, the SDK domain allowlist is updated to:
.agora.io .edge.agora.io .sd-rtn.com .edge.sd-rtn.com .rtnsvc.com .edge.rtnsvc.com .rtesvc.com .edge.rtesvc.comIf you upgrade to v4.24.5, update your firewall allowlist so the SDK continues to work in restricted-network environments. See Firewall requirements.
New features
-
Background voice removal in AI Noise Suppression
The AI Noise Suppression extension is enhanced to remove background human voices. In noisy environments or scenarios with multiple speakers, this capability further isolates the target speaker and improves audio capture. See Extension release notes.
Improvements
This release includes the following improvements:
- Optimized the signaling flow to improve session-setup efficiency and connection success rates in complex network environments.
- Optimized media-tracing links and jitter-buffer handling to reduce first-frame time and audio and video stuttering in certain scenarios.
- The audio subscription flow now uses a presubscribe model by default, improving subscription efficiency and playback stability. When full-link feedback and frame-rate-priority mode are enabled, you can now set a lower bound for resolution downgrade.
Fixed issues
This release fixed the following issues:
- Connection setup could time out in some scenarios.
- The remote user received duplicate
user-joinedcallbacks when a user with a string UID rejoined a channel immediately after leaving. - Messages could not be received in some scenarios.
- On Safari 16.6, the local view could turn black or exit unexpectedly in some scenarios.
- Remote video could freeze briefly after the first
client.publish(video)call. - TypeScript type definition files were missing and some exported symbols were incorrect in the npm package.
v4.24.4
Released on May 27, 2026.
Improvements
This release includes internal optimizations for weak-network scenarios, improving the login success rate.
v4.24.3
Released on April 1, 2026.
New features
- AI Noise Suppression extension upgrade
The AI Noise Suppression extension (agora-extension-ai-denoiser) is upgraded to v2.0.1. This version adds a low-latency mode and the ability to configure the log level of the WASM module. For details, see Extension release notes.
Improvements
This release includes the following improvements:
- Optimizes the interactive video experience in H.264 encoding scenarios.
- The Super Clarity extension is upgraded to v2.0.1, with sharpening algorithm improvements that provide better video experience in some scenarios.
v4.24.2
Released on December 12, 2025.
This release addresses a compatibility issue introduced in Chrome 143.
Issue description
During a communication session between users A and B, if user A unsubscribes and stops publishing an audio stream and then tries to publish audio again, the SDK triggers the following error:
Session error code: ERROR_CONTENT
A breaking change in Chrome causes this issue and affects all versions of the RTC Web SDK. See the Chromium bug report for details.
Solution
This version implements a compatibility fix that prevents the issue from interrupting republishing and subscription workflows. The fix remains in place until Chrome provides an official update.
The Agora R&D team has reported the issue to the Chrome team and continues to monitor its progress.
v4.24.1
Released on November 26, 2025.
New Features
- Pre-call network test
Conducting a pre-call network test helps local users assess and predict the quality of their uplink network before starting a call. This version adds the startLastmileProbeTest API, which returns information about packet loss, jitter, and round-trip time for both uplink and downlink before the call begins.
- Dual-stream mode
This version introduces the setDualStreamMode method, which improves how you subscribe to dual video streams. By setting the mode parameter to AUTO_SIMULCAST_MODE, you enable adaptive low-stream mode on the sender side (low-stream is not sent by default). To send low streams, follow these steps:
- The host on the receiving side calls
setRemoteVideoStreamTypeto initiate a low-stream request. - The sender automatically switches to low-stream mode upon receiving the request.
Additionally, you can set the mode parameter to DISABLE_SIMULCAST_STREAM (never send low stream) or ENABLE_SIMULCAST_STREAM (always send low stream).
For the relationship between this method and the existing enableDualStream and disableDualStream, see the API Reference. To ensure clear integration logic, Agora recommends that you choose one set of APIs for integration. Agora plans to deprecate enableDualStream and disableDualStream in future versions.
- Watermark extension (BETA)
This version adds the Watermark extension
agora-extension-video-watermarkv1.0.0, which enables you to add image watermarks to real-time interactive video streams through an extension.
The Watermark extension supports customizing the watermark's position, size, opacity, and other properties. It can be applied to both local and remote video tracks. For integration and usage steps, refer to Using the Watermark extension guide.
- Other New Features
Adds support for H.265 decoding. Refer to the API Reference for supported browser versions and usage restrictions.
Improvements
-
Expanded screen sharing capabilities This version further expands screen sharing capabilities. In the
createScreenVideoTrackAPI, the following parameters are added to support audio sharing during screen sharing: -
windowAudioandmonitorTypeSurfacesare added toScreenVideoTrackInitConfigto control whether to allow sharing window audio and sharing the entire screen, respectively. -
suppressLocalAudioPlaybackandrestrictOwnAudioare added toScreenAudioTrackInitConfigto control whether local audio playback and capture are allowed.
In screen sharing scenarios with co-hosting, Agora does not recommend sharing system or window audio, as it may cause echo. You can disable audio sharing by setting both windowAudio and systemAudio in ScreenVideoTrackInitConfig to "exclude".
- New release of the Super Clarity extension
This version upgrades the algorithm of agora-extension-super-clarity, with improvements in reducing plugin size, enhancing video experience, and expanding browser compatibility. The new version of the plugin requires a browser that supports SIMD to run properly. For detailed changes and improvements, refer to the Extension release notes.
Bug Fixes
Fixes an issue on iOS where the system volume could not be set to 0 after destroying an audio stream.
v4.24.0
Released on August 6, 2025
New features
- Fast first-frame rendering
Adds a new options parameter to the join method to configure channel media options. When you set autoSubscribe to true in IJoinOptions, the user automatically subscribes to the host’s media stream when joining the channel.
In real-time interactive scenarios such as one-on-one or one-to-many calls, this feature reduces the time to render the first frame and improves the overall interactive experience.
When automatic subscription to the host’s media stream is enabled, Agora delivers the media stream and starts billing for usage as soon as the user joins the channel.
Improvements
- Transmission optimization in poor network conditions
Optimizes the bandwidth estimation algorithm and implements audio-priority transmission. This reduces the risk of video stuttering under extremely poor network conditions and improves the smoothness of resolution switching, making transitions more seamless. The SDK also responds faster after network recovery.
- New media connection strategy
Introduces a new media connection strategy that improves the SDK’s reconnection and media login success rates under enterprise and restricted network environments.
- Improved accuracy for network quality evaluation
Enhances the algorithm for evaluating NetworkQuality by incorporating available bandwidth as a reference. This enables the SDK to more accurately reflect the impact of bandwidth-limited network conditions.
This improvement requires enabling a private parameter. Contact support@agora.io for details.
Other improvements
- Optimizes the default video bitrate under different encoding standards to allocate uplink bandwidth more efficiently and reduce stuttering in poor network conditions.
- Improves the fallback mechanism for devices that do not support AV1 decoding.
- Enhances the user experience in one-on-one calls in
rtcmode when communicating between Web clients or between Web and Native clients.
Issues fixed
This version fixes the following issues:
- Black screen on Firefox 138+ caused by a browser version rollback.
- Video stuttering caused by Safari 18.4 and 18.5.
- Encoding failure when the resolution was too low.
- Occasional black screen in scenarios using Plan-B.
v4.23.4
Released on June 5, 2025.
This release includes internal improvements. It fixes an issue where calling setMute or setEnable under certain conditions could result in no sound. If you are using SDK version 4.23.0 or later, upgrade to this release for a better user experience.
v4.23.3
Released on April 29, 2025.
This release updates the virtual background extension to v2.1.0, with the following changes:
- Optimizes memory and CPU usage.
- Fixes black screen issues at specific resolutions.
v4.23.2
Released on March 4, 2025.
This release includes the following improvements:
-
Internal optimizations to support Agora Conversational AI Engine.
- Enable audio metadata transmission
- Get presentation timestamp from the audio stream
For details on using these features, submit a technical support ticket.
-
Further reduced package size.
v4.23.1
Released on January 17, 2025.
This release includes several internal improvements.
v4.23.0
Released on December 19, 2024.
Compatibility changes
This release modified the calculation of freezeRate in RemoteVideoTrackStats. The calculation is changed from the cumulative average freeze rate to the freeze rate in the last second. You can use this parameter to determine whether the video is experiencing a momentary freeze. To calculate the cumulative average freeze rate for the current session, use totalFreezeTime or totalDuration.
New features
-
PeerConnectionstate callback for the local mediaTo obtain the media connection state under poor network conditions, this release adds the
peerconnection-state-changeevent, which is used to obtain the connection state of WebRTC RTCPeerConnection. -
Sharing the current tab by default
To improve the ease of use of screen sharing, this release adds the
preferCurrentTabparameter inScreenVideoTrackInitConfig, which supports setting sharing the current tab as default when creating a screen sharing track.
Improvements
-
Improved media reconnection strategy
This release improves the media reconnection strategy, which in turn increases the reconnection and media login success rate under poor network conditions. For enterprise networks with firewalls, the improvement is particularly noticeable. Contact support@agora.io to try this new strategy.
-
Improved virtual background algorithm
This release upgrades the Virtual Background extension to version 2.0.0. The updated algorithm provides a more distinct face edge and clearer and more stable video images.
-
Reduced package size
To further reduce the package size, this release separates the Plan-B feature, which is compatible with WebRTC, from the ESM-bundle package into an independent service module. Users can integrate them manually based on actual needs. For details, see Use tree shaking.
-
Other improvements
- Optimized login duration under complex network conditions.
- Optimized layer switching algorithm of VP9, which can reduce latency and improve video smoothness.
Safari does not support VP9 SVC.
Bug fixes
This release fixes the following issues:
- Black screen might occur when calling
setMuteandsetEnableunder certain conditions. - Occasional audio and video stream sending failures after network disconnection and reconnection.
- Users with the role of
audiencecan send streams in a 128-person scene.
API changes
Added
AgoraRTC.on("peer-connection-state-change")preferCurrentTabinScreenVideoTrackInitConfig
v4.22.2
v4.22.2 was released on 29 October 2024.
New features
Screen sharing audio 3A processing
Starting from v4.22.2, when calling the createScreenVideoTrack method to create a screen sharing video track, the withAudio parameter supports passing ScreenAudioTrackInitConfig to customize the initialization config of audio sharing. Depending on your use case, you can enable 3A processing (AGC, AEC, and ANS) as needed to optimize the quality of shared audio.
For details, see the API documentation.
If your browser does not support audio sharing, passing ScreenAudioTrackInitConfig will only return the video track.
API changes
This version introduces the following new APIs:
- The
withAudioparameter in thecreateScreenVideoTrackmethod supports passingScreenAudioTrackInitConfig.
v4.22.1
v4.22.1 was released on 23 September, 2024.
Improvements
This release includes several internal improvements.
v4.22.0
v4.22.0 was released on 16 August, 2024.
Compatibility changes
To further reduce the package size, this version splits the Channel Media Relay Service and the Live Streaming Service from the ESM-bundle format package into independent service modules. You can manually import these modules for integration based on your actual needs. See Use tree shaking for details on how to integrate.
New features
Optimize channel preload
When using the channel preload feature, Agora recommends sending the host's media stream immediately when calling the method to join the channel. This reduces the first frame rendering time. For details, see Preload channels. With this setting, users will start pulling streams as soon as they join the channel, which will generate charges. For details on how Agora charges for the services, see Pricing.
Support for AV1 encoding (Beta)
The SDK supports the AV1 video encoding format. You can enable this encoding format by setting ClientConfig.codec to av1. Compared to H.264 at the same bitrate, AV1 offers over a 30% improvement in encoding efficiency and provides better video quality.
Improvements
This version includes the following improvements:
- Optimizes the SVC (Scalable Video Coding) capability for VP9 encoding and decoding, which further enhances the video quality and transmission efficiency.
- Improves VAD (Voice Activity Detection) with a new music detection feature, increasing the accuracy of voice detection.
Issues fixed
This version fixes the following issues:
- The issue where Safari failed to retrieve
statsin certain use-cases. - The issue with inaccurate bitrate settings under poor network conditions in certain use-cases.
API changes
This version introduces the following new APIs:
AgoraRTCClient.getRemoteAudioStatsadds thereceivePacketsDiscardedreturn field.ClientConfig.codecadds theav1enumeration.- The
AgoraRTCmodule in the ESM-bundle adds theusemethod.
v4.21.0
v4.21.0 was released on June 3, 2024.
Compatibility changes
This release introduces the Video Quality Control (VQC) module. ICameraVideoTrack enables the “motion” mode by default to ensure the smoothness of the video under low bandwidth and high CPU usage to further improve the user experience. You can call the setOptimizationMode method to dynamically adjust the transmission mode of the video according to your needs.
New features
Preload channels
This release adds the AgoraRTC.preload method, which allows the user whose role is set to audience to preload channels before joining one. Calling the method can help shorten the time of joining a channel, thus reducing the time it takes for audience members to hear the host.
Improvements
This release includes the following improvements:
- Enhances the bandwidth estimation and congestion control algorithms for the sender in weak network conditions, effectively reducing the buffering rate of the sender under such conditions.
- Optimizes the SDK's browser compatibility detection scope to address the issue of inaccurate browser compatibility detection on certain devices.
- To enhance the user experience of browsers under Safari 17.4, the video quality adaptive algorithm has been added to improve the adaptability of video quality in the case of limited network bandwidth, to further ensure the smoothness of video streaming.
Issues fixed
This release fixes the following issues:
- On some Android devices, the video playback status returned by
isPlayingwas inaccurate. - On Safari mobile browsers, the resolution information of the local video track returned by the
getLocalVideoStatsmethod was inaccurate; the resolution set bysetLowStreamParameterfor the low stream resolution did not take effect.
API changes
Added
AgoraRTC.preload
v4.20.2
v4.20.2 was released on March 21, 2024.
Issues fixed
This release fixes the issue where the browser would modify the captured video resolution when calling createCustomVideoTrack in certain use-cases.
v4.20.1
v4.20.1 was released on February 28, 2024.
New features
This release adds the following new features:
Send the SEI in the H.264 video streams
This release introduces the LocalVideoTrack.sendSeiData method and the RemoteVideoTrack.on("sei-received") event to add and send the Supplemental Enhancement Information (SEI) within the H.264 video streams. The SEI data package has a maximum size of 1KB and encompasses dynamic facial capture data, virtual video information, and digital watermarking. To enable this feature, please contact technical support.
Note:
- This functionality is only supported on Chrome 87 or later, as well as Safari 15.4 or later.
- Due to the conflicts in certain browser core components, this feature is not available when end-to-end media encryption (Beta) is enabled.
Monitor the video states of receivers
v4.20.1 introduces the "video-state-changed" event, which enables real-time monitoring of the video states of receivers, such as freezing and recovery, thereby facilitating prompt responses. For more information, see API documentation.
Data Stream Encryption
To enhance the security of data stream transmission, this version introduces a new encryptDataStream parameter in the setEncryptionConfig method for enabling data stream encryption. For more details, see API documentation.
Improvements
This release adds the following improvements:
- Optimizes the audio reception experience on mobile devices, reducing issues such as electric noise or silence caused by browser defects in single audio stream use-cases.
- Enhances video bitrate settings by adding a default setting for the minimum video bitrate. If you don't specify a value for
bitrateMinwhen callingsetEncoderConfiguration, the SDK will automatically set an appropriate bitrate based on the resolution and frame rate settings. This default setting only applies to Chrome and Edge browsers.
Issues fixed
This release fixes the following issue:
- In a single channel with 128 concurrent online hosts, if a user left the channel during network reconnection, it could result in the failure to subscribe to other users' audio streams for the local user.
API changes
Added
LocalVideoTrack.sendSeiDataRemoteVideoTrack.on("sei-received")RemoteVideoTrack.on("video-state-changed")encryptDataStreamparameter toAgoraRTCClient.setEncryptionConfig
v4.20.0
v4.20.0 was released on December 8, 2023.
Compatibility changes
Prior to v4.20.0, the IRemoteAudioTrack.setPlaybackDevice method could be invoked on Firefox, but an echo issue would occur due to a Firefox bug. To improve the user experience, starting from v4.20.0, the SDK throws a NOT_SUPPORTED error when this method is called.
If you are using the IRemoteAudioTrack.setPlaybackDevice method, you need to make code modifications after upgrading to v4.20.0.
New features
On certain versions of iOS devices, the app call might not automatically resume after being interrupted by a WeChat call or system phone call. To address this issue, this release introduces the "audio-context-state-changed" event to monitor whether the app call has been interrupted, and the resumeAudioContext method to restore the app call.
For usage details, refer to the API documentation.
Improvements
This release includes the following improvements:
- Reduces the time it takes to join a channel when the user ID is a string.
- Supports audio sharing on the ChromeOS platform when sharing the entire screen or a Chrome tab.
API changes
Added
resumeAudioContextAgoraRTC.on("audio-context-state-changed")
v4.19.3
v4.19.3 was released on November 2, 2023.
Issues fixed
This release fixes a black screen issue when receiving H.264 encoded video streams on Safari prior to 16. Specifically, when a client using v4.19.2 SDK for Web made a video call on Safari prior to 16 to a client using the SDK for Android, iOS, Windows, or macOS, the web client displayed a black screen if the native client sent H.264 encoded video streams.
If you have integrated v4.19.2 of the SDK, Agora recommends upgrading to v4.19.3 as soon as possible.
v4.19.2
v4.19.2 was released on October 20, 2023.
Improvements
VP9 codec (GA)
This release advances VP9 from Beta to General Availability (GA) and introduces the following enhancements:
- Updated browser compatibility: VP9 now supports Safari 16.0 and later versions on both desktop and mobile platforms.
- Automatic fallback to VP8 for older browsers: If any user in a channel uses a browser version below the specified compatibility threshold, all VP9-encoded video streams in that channel will automatically transition to VP8.
Test results show that VP9 provides twice the quality of VP8 at equivalent bitrates.
Dynamic resolution adjustment on Safari
Safari has a known issue where it does not automatically reduce video encoding resolution under poor network conditions or reduced video frame rates, potentially leading to blurry video. To ensure user experience, this release adds the "720p_auto" preset to the video encoder configurations. This preset guarantees automatic adjustment of the video encoding resolution on Safari.
After upgrading to this version, if you are using a 720p video profile, Agora recommends switching to the "720p_auto" preset and setting the encoding format to "vp9" for optimal results.
API changes
Added
"720p_auto"toVideoEncoderConfigurationPreset
v4.19.1
v4.19.1 was released on October 11, 2023.
Issues fixed
This release fixes the issue that an error occurred when using Webpack 4.x to bundle your app after integrating the SDK.
v4.19.0
v4.19.0 was released on September 25, 2023.
After integrating this version of the SDK into your app, you might encounter an error if you use Webpack 4.x to bundle your app. To resolve this issue:
- If you intend to use Webpack 4.x, upgrade the SDK to v4.19.1.
- If you prefer to continue using v4.19.0, Agora recommends bundling your app with Webpack 5.x or other tools such as Vite.
Compatibility changes
Dynamic low-quality video profile adjustment
Before 4.19.0, you had to call setLowStreamParameter before publish to set the video profile for the low-quality video stream. This meant that changing the profile after publishing required republishing, impacting the viewing experience.
As of this release, you can call setLowStreamParameter after publish to dynamically adjust the resolution, bitrate, and frame rate of the low-quality video stream. Agora recommends modifying your setLowStreamParameter calls as needed after upgrading to this release. For example, in use-cases such as live streaming and video conferences, as the number of hosts in the channel increases, you can dynamically adjust the video profile of the low-quality video stream to relieve bandwidth pressure.
New features
Tree shaking support
As of this release, the SDK supports tree shaking, which removes unused code during the build process, reducing your app's size after integrating the SDK. To use this feature, see App size optimization.
Dual display of video stream
This release adds the clone method, allowing you to duplicate the current camera or screen sharing video track and customize display parameters. This can be useful in use-cases such as video conferencing and online education, where you want to display the same video stream with two sets of display parameters, including resolution, frame rate, and bitrate. For example, you can have one display set to high definition and the other to low definition.
Switch between front and rear cameras
To improve camera switching on mobile devices, this release adds the facingMode parameter to the ICameraVideoTrack.setDevice method. You can specify whether to use the front or rear camera on the mobile device.
See setDevice for details.
Third-party video moderation
As of this release, the SDK supports integration with third-party video moderation services.
See setImageModeration in the API Reference for details.
Beta features
End-to-end media encryption and Super Clarity extension are released in beta. See beta documentation for details.
Improvements
Optimized automatic mode
In the automatic mode, the SDK initially attempts a direct connection to Agora SDRTN®. If the attempt fails, the SDK automatically switches to TCP/TLS 443. To enhance the connection experience in restricted networks, this release optimizes the SDK's automatic mode, improving connection speed and stability. The optimized automatic mode no longer uses proxies, resulting in the deprecation of the AgoraRTCClient.on("join-fallback-to-proxy") callback.
Other improvements
This release also includes the following improvements:
- Reduces the time to first frame rendering. To enable this improvement, please contact technical support.
- Adds token expiration as a reason for a user leaving a channel in the
AgoraRTCClient.on("connection-state-change")callback for easier troubleshooting. - Adds
sendJitterMsandsendRttMsto local audio track information, reporting jitter (ms) and round-trip time (ms) for sent audio packets.
Issues fixed
This release fixes the following issues:
- Under normal network conditions, the SDK occasionally misreported uplink network quality as
5in the first few seconds after joining a channel. - The local and remote audio and video packet loss rates reported by the SDK under the
currentPacketLossRateattribute were inaccurate. - On Windows devices using Chrome 115 browser, if the local user's screen sharing remained static without mouse movement, screen sharing stopped.
- During the procedure of subscribing to remote media streams, instances arose where the absence of audio was sporadically encountered by the local user when the remote user republished the audio stream. Likewise, when the remote user republished the video stream, occasional occurrences of a black screen were observed by the local user.
- Memory was not promptly released after calling
IBufferSourceAudioTrack.close.
API changes
Added
-
ICameraVideoTrack.cloneandILocalVideoTrack.clone -
facingModeto thesetDevicemethod -
TOKEN_EXPIREto theConnectionDisconnectedReasonenum -
setImageModeration -
AgoraRTCClient.on("image-moderation-connection-state-change") -
ImageModerationConfiguration -
ImageModerationConnectionState -
sendJitterMsandsendRttMsto theLocalAudioTrackStatsinterface -
sendJitterMsandsendRttMsto theLocalVideoTrackStatsinterface -
getRTCRtpTransceiver -
AgoraRTCClient.on("transceiver-updated")
Deprecated
AgoraRTCClient.on("join-fallback-to-proxy")
v4.18.3
v4.18.3 was released on September 20, 2023.
Issues fixed
v4.18.3 fixes the following issue:
- The SDK failed to obtain audio and video statistics on Safari 17.
v4.18.2
v4.18.2 was released on July 11, 2023.
Issues fixed
v4.18.2 fixes the following issues:
- In certain circumstances, Video SDK for Web triggered microphone and camera device permission prompts after it finished loading.
v4.18.1
v4.18.1 was released on July 03, 2023.
Improvements
Error handling support for event listeners
As of this release, when an error occurs during the execution of the callback function assigned to the event listener (listener), the SDK does not interrupt normal operation. Instead, the SDK captures the exception and provide error information in the logs.
Enhanced concurrency control for asynchronous methods
This release optimizes concurrency control for asynchronous methods. When the following asynchronous methods are invoked concurrently, the SDK executes them in the order they were called, ensuring consistency:
joinandleavepublishandunpublishsubscribeandunsubscribe
Taking publish and unpublish as an example, if you call unpublish immediately after calling publish:
- In versions earlier than 4.18.1,
unpublishmight not take effect, which means the media track could remain published. - As of version 4.18.1, the actual result is consistent with the order of these method calls, which means the media track is correctly unpublished.
Issues fixed
This release fixed the issue that the following callbacks were not triggered when an external camera or microphone was initially connected to a device without any available cameras or microphones:
onCameraChangedorAgoraRTC.on("camera-changed")onMicrophoneChangedorAgoraRTC.on("microphone-changed")
v4.18.0
v4.18.0 was released on June 12, 2023.
New features
Variable playback speed for audio files
To facilitate changing the playback speed of audio effect or music files, v4.18.0 modifies the IBufferSourceAudioTrack class as follows:
- Adds the
setAudioBufferPlaybackSpeedmethod, which can be called before or after a user joins a channel. - Adds the
playbackSpeedproperty to retrieve the current playback speed.
Custom signaling proxy
v4.18.0 adds the setProxyServer method to allow customization of the signaling proxy server used by the SDK.
Flexible event listening for AgoraRTC objects
As of v4.18.0, the IAgoraRTC class inherits all methods from the EventEmitter class, providing a flexible way of listening to all events emitted by the AgoraRTC object.
Using onCameraChanged as an example:
// Previous event listening (earlier than v4.18.0)
AgoraRTC.onCameraChanged = (info) => {
console.log("camera changed!", info.state, info.device);
};
// New event listening (v4.18.0 and later)
AgoraRTC.on("camera-changed", (info) => {
console.log("Camera changed!", info.state, info.device);
});You can continue using the previous approach. However, for higher flexibility and extensibility, Agora recommends modifying the listening approach for the following events after upgrading the SDK:
onAutoplayFailedonCameraChangedonMicrophoneChangedonPlaybackDeviceChangedonSecurityPolicyViolationonAudioAutoplayFailed: Deprecated, seeonAutoplayFailedinstead
Scalable Video Coding, access to encoded data, and enhanced connection experience in restricted networks are released in beta. See beta documentation for details.
Improvements
Shorter time to join channel
As of v4.18.0, the SDK enables WebSocket message compression by default, reducing the time to join a channel in poor network conditions.
Other improvements
v4.18.0 also includes the following improvements:
- Improves the retry mechanism by adding a 3s retry rule to switch a downgraded video resolution to a higher one. This prevents the video resolution from remaining low when the network conditions improve, resulting in a better user experience.
- Upgrades the Cloud Proxy service to enhance its stability in different network environments.
API changes
Added
setProxyServersetAudioBufferPlaybackSpeedmethod andplaybackSpeedproperty toIBufferSourceAudioTrack- The following methods inherited from the
EventEmitterclass to theIAgoraRTCclass: onoffoncegetListenersremoveAllListeners
These methods support the following event names as parameters:
"camera-changed""microphone-changed""playback-device-changed""autoplay-failed""security-policy-violation"
Issues fixed
v4.18.0 fixes the following issues:
- Mobile devices experienced delays in receiving notifications for the broadcaster leave channel event.
- Users experienced a black screen while watching video streams encoded with H.264 in older browser versions.
- Memory usage increased when using the SDK with the Virtual Background or Image Enhancer extension.
- The SDK continued to use the expired token during reconnection attempts after generating a new token using the
renewTokenmethod.
v4.17.2
v4.17.2 was released on April 20, 2023.
Issues fixed
This release fixes the issue where the getCurrentFrameData method returned abnormal data.
v4.17.1
v4.17.1 was released on April 19, 2023.
Compatibility changes
Chrome 107 prevents users from sharing the current tab by default. If you need to allow users to share the current tab on Chrome 107 and later versions, please upgrade your SDK to v4.17.1 or later as soon as possible.
To accommodate changes related to screen sharing in Chrome 107 (refer to Chrome documentation), this release introduces the following changes to the config parameter in the createScreenVideoTrack method:
- Deprecates the
screenSourceTypeproperty. If you are using this property, replace it with the newly addeddisplaySurfaceproperty after upgrading to this version. - Adds new properties:
selfBrowserSurface,surfaceSwitching, andsystemAudio.
For detailed explanations of these properties, see ScreenVideoTrackInitConfig in the API reference.
Improvements
Improved flexibility in setting video profiles
This release improves the flexibility in setting video profiles for different types of video tracks:
- You can now specify the resolution and the frame rate when calling
createCustomVideoTrackto create a custom video track, by passing in values for thewidth,height, andframeRateparameters. - After creating a screen track or a custom video track, you can dynamically adjust the video profile using
LocalVideoTrack.setEncoderConfiguration. Please note that there is a known issue with calling this method on a screen track in certain versions of macOS Safari. See issue details.
For details, see more about Configure video encoding.
Other improvements
This release also includes the following improvements:
-
The time required to create tracks using
createMicrophoneAudioTrackorcreateMicrophoneAndCameraTrackson Safari browsers is reduced. -
When you have two
AgoraRTCClientobjects created locally, you have the option to block certain callbacks from oneAgoraRTCClientto another. These callbacks include those triggered when joining or leaving a channel, and publishing or unpublishing streams. For example, if you are using Client A for publishing a screen track and Client B for publishing a camera track, and you enable this feature to block callbacks, Client A and B will not receive the following callbacks from each other: -
AgoraRTCClient.on("user-published") -
AgoraRTCClient.on("user-joined") -
AgoraRTCClient.on("user-unpublished") -
AgoraRTCClient.on("user-left") -
AgoraRTCClient.on("published-user-list") -
AgoraRTCClient.on("user-info-update")
To enable this feature, contact technical support.
API changes
Added
displaySurface(replacement forscreenSourceType),selfBrowserSurface,surfaceSwitching, andsystemAudioin theScreenVideoTrackInitConfiginterfacewidth,height, andframeRatein thecreateCustomVideoTrackmethodLocalVideoTrack.setEncoderConfiguration
Deleted
ILocalVideoTrack.setBeautyEffect
v4.17.0
v4.17.0 was released on March 22, 2023.
New features
Dynamic switching of local video streams
This release adds the ILocalVideoTrack.replaceTrack method to increase the flexibility to switch local video tracks.
For example, to switch from one camera to another before v4.17.0, you needed to call IAgoraRTCClient.unpublish to
unpublish the current track and then call IAgoraRTCClient.publish to publish a new track.
As of v4.17.0, you can call ILocalVideoTrack.replaceTrack directly.
Improvements
Optimized reconnection mechanism
As of v4.17.0, the SDK defaults to showing the last video frame before disconnection during reconnection, which prevents a black screen during the reconnection process. This optimization is not available on Safari due to Safari's limitations.
Other improvements
This release also includes the following improvements:
- The accuracy of SDK-related quality metrics on Analytics is improved.
- The time required to join a channel is reduced. This optimization is not available on Firefox due to Firefox's limitations.
API changes
Added
ILocalVideoTrack.replaceTrack
Deleted
ILocalVideoTrack.setBeautyEffect
Issues fixed
On Safari on iOS 14.7 and later, performing subscribing and unsubscribing operations repeatedly to multiple audio streams could result in not hearing remote users.
v4.16.1
Voice Calling v4.16.1 was released on February 7, 2023.
Issues fixed
This release fixes the following issue:
- When using Video SDK for Web v4.16.0, the video freeze rate showed in Agora Analytics is much higher than the correct value.
v4.16.0
Voice Calling v4.16.0 was released on January 5, 2023.
Improvements
This release adds the following enhancements:
Compatibility for deprecated RTCMediaStreamTrackStats on Chrome
Chrome plans to deprecate the stats dictionary RTCMediaStreamTrackStats.
See the service announcement on discuss-webrtc@googlegrooups.com.
This change affects the following media track statistics returned by the SDK:
| Statistics | Affected fields |
|---|---|
LocalVideoTrackStats |
|
RemoteVideoTrackStats |
|
RemoteAudioTrackStats |
|
To ensure the accuracy of these media track statistics on Chrome, please upgrade the SDK to v4.16.0 or later as soon as possible.
Other improvements
This version of the SDK also includes the following improvements:
- The cause of the
HTMLMediaElementerror event is now recorded in the log. - The size of the SDK package is reduced.
Issues fixed
This release fixes the following issues:
- Media operations failed when the SDK was attempting to reconnect to the network.
- When relaying media streams across channels,
ChannelMediaRelayConfiguration.addDestChannelInfocould not setuidto0to identify the relay stream in the destination channel. - Some known issues on iOS 14.x.
v4.15.1
v4.15.1 was released on December 2, 2022.
Issues fixed
This release fixes the following issue:
- No audio was received on iOS 13.7.
v4.15.0
v4.15.0 was released on October 31, 2022.
New features
The latest features in this release are:
Audio stream filter (Beta)
v4.15.0 introduces filtering audio streams based on volume. Once this function is enabled, Agora SDRTN® ranks all subscribed audio streams by volume. By default, the three audio streams with the highest volume are transported to others in the channel. To change the number of audio streams to be transported, contact support@agora.io.
Agora enables channel hosts to control whether the audio streams being published are filtered based on volume. Streams that are not filtered bypass this filter mechanism and are transported directly to the receivers. In use-cases with a large number of publishers, enabling this function helps reduce the bandwidth and device system pressure for the receivers.
To enable this function, contact support@agora.io.
VP9 codec
Video SDK for Web v4.15.0 adds support for the VP9 codec in the following browsers:
| Supported browsers① | |
|---|---|
| Desktop |
|
| Android |
|
| iOS | Safari 16 or later |
① To ensure the best user experience, best practice is to use the latest version of the browsers listed above.
To start a call using the VP9 codec, apps you connect to built using for Android, iOS, Windows, or macOS must use Video SDK v4.0.1 or greater.
CSP violation callback
v4.15.0 adds the AgoraRTC.onSecurityPolicyViolation callback. When Agora fails to load a resource or send a request due to Content Security Policy(CSP) violations, the Video SDK triggers this callback. When you receive this callback, modify your CSP configuration to ensure that you can access Agora-related services.
Improvements
The SDK has the following improvements:
- The accuracy of network quality reported by
AgoraRTCClient.on("network-quality")in certain use-cases has increased. - Resumption of audio or video streams when the user switches between Wi-Fi networks is faster.
API changes
Added
IAgoraRTC.onSecurityPolicyViolation
Compatibility changes
Cloud Proxy default mode has changed. In Video SDK for Web v4.15.0, the mode parameter in startProxyServer defaults to 3. This represents the Force UDP cloud proxy mode. In this mode, Video SDK always transmits data over UDP. For details, see Restricted network connection with Cloud Proxy.
v4.14.2
v4.14.2 was released on October 27, 2022.
Issues fixed
This release fixes the following issue:
- When using WeChat browsers on iOS 14.x, no audio is received from the first channel the user subscribes to.
v4.14.1
v4.14.1 was released on October 24, 2022.
Issues fixed
This release fixes the following issues:
- On Electron v17.x, screen sharing did not work properly. To solve this issue, add the following code in the main process:
const { ipcMain, desktopCapturer } = require("electron");
ipcMain.handle("DESKTOP_CAPTURER_GET_SOURCES", (event, opts) => desktopCapturer.getSources(opts));- On desktop Safari, if autoplay was blocked for all videos, they kept trying to replay resulting in video freeze.
- On mobile browsers, the video freeze rate calculated by the SDK was higher than the actual value when the browser was running in the background.
- In Android WebView, the default poster (a gray play button) of the video element showed before video playback.
- Media stream relay failed after the SDK resumed connection to the network.
- During a media stream relay, the SDK continued to send heartbeats after the user left the source channel.
v4.14.0
v4.14.0 was released on August 31, 2022.
Compatibility changes
getVolumeLevel accuracy improvement
As of v4.14.0, the SDK calibrates the calculation of the volume returned in getVolumeLevel. The volume range is still [0,1], where 1 represents the highest audio level. If your business use-case depends on the volume returned in getVolumeLevel (for example, a speaker icon shows according to the volume), ensure that you check the returned volume after upgrading to v4.14.0.
Issues fixed
This release fixes the following issue:
- The received Opus stereo audio had no stereo effect.
- On versions earlier than Chrome 76, the
decodeFrameRatereturned by thegetRemoteVideoStatsmethod was 0. - On WeChat browsers running on iOS 14.1 and 14.2, the first subscribed audio stream was silent.
- After calling
LocalVideoTrack.setBeautyEffectto enable image enhancement, callingLocalVideoTrack.unpipecaused an error. - On Windows Chrome 103 and later versions, enabling the dual-stream mode did not take effect in certain use-cases.
v4.13.0
v4.13.0 was released on July 25, 2022.
New features
Improvements
AI Noise Suppression and virtual background
The AI Noise Suppression extension and virtual background extension are converted from beta release to official release. To experience the AI Noise Suppression or virtual background extension, contact support@agora.io.
Callback for token expiration
v4.13.0 improved the logic of triggering the callback for token expiration. If a token expires when the user's device is in sleep mode or disconnected from network, the SDK triggers the token-privilege-did-expire event when the device resumes operation and attempts to reconnect to the SDK.
API changes
Added
RemoteAudioTrack.pipeRemoteAudioTrack.unpipe
v4.12.2
v4.12.2 was released on July 7, 2022. This release improved the automatic mode for SDK connectivity (In this mode, the SDK first attempts a direct connection to Agora SDRTN®; if the attempt fails, the SDK automatically switches to TCP/TLS 443).
v4.12.1
v4.12.1 was released on June 27, 2022. This release fixed the following issues:
- Subscribing to remote streams occasionally failed after disconnection.
v4.12.0
v4.12.0 was released on June 15, 2022.
Improvements
Media processing extensions
Media processing extensions have the following changes:
- The Image Enhancement Extension (Beta) is released. This extension incorporates and upgrades the built-in image enhancement feature (enabled by setBeautyEffect)) of the Agora Web SDK 4.x. You can adjust parameters including the contrast, brightness, and smoothness levels, in order to touch up the image for effects such as skin lightening and skin smoothing. For details, see Use the Image Enhancement Extension.
Issues fixed
v4.12.0 fixed the issue that when dual-stream mode was enabled on Safari, calling methods such as Track.setEnabled(false) and Track.close() could not turn off the camera indicator light.
v4.11.1
v4.11.1 was released on May 9, 2022. This release fixed the following issues:
- Subscribing to audio streams might cause no sound on Firefox.
- Compatibility issues occurred in Safari on iOS 12 and in the WeChat built-in browser on iOS 13.
v4.11.0
v4.11.0 was released on April 1, 2022.
Compatibility changes
As of v4.11.0, the SDK adopts an automatic mode by default to ensure connectivity. In this mode, the SDK first attempts a direct connection to Agora SDRTN®; if the attempt fails, the SDK automatically switches to TCP/TLS 443. You can listen for such auto-switch events through client.on("join-fallback-to-proxy").
Improvements
Channel capacity improvement
As of v4.11.0, a single channel can support up to 128 concurrent online hosts, who can publish media streams at the same time. The number of audience members in a channel is unlimited. Each host or audience member can subscribe to a maximum of 50 hosts at the same time.
To experience this improvement, contact support@agora.io.
Fixed issues
v4.11.0 fixed the following issues:
-
Angular’s dependency zone.js caused an error when
Promise.finallywas called in the SDK. -
On Chrome, AEC could not be enabled when sending stereo sound.
-
On Chrome 100, the SDK reported inaccurate statistics for the decoding frame rate and sending frame rate.
-
When dual-stream mode was enabled, calling
unpublishwithout parameters caused the method call to fail.
v4.10.2
v4.10.2 was released on March 24, 2022. This release fixed the issue that calling join in certain use-cases might cause proxy exceptions.
v4.10.1
v4.10.1 was released on March 17, 2022 and added the dependency of TypeScript type definitions for Agora Extension agora-rte-extension in package.json. If you use TypeScript for type checking, Agora suggests that you update TypeScript to v4.3.2 or later.
v4.10.0
v4.10.0 was released on March 11, 2022.
New features
API changes
Added
-
AgoraRTC.registerExtensions -
LocalTrack.pipe -
LocalTrack.unpipe -
LocalTrack.processorDestination
v4.9.4
v4.9.4 was released on March 16, 2022 and fixed the failure to access localStorage when loading the SDK in an iFrame in Chrome Incognito mode.
v4.9.3
v4.9.3 was released on March 3, 2022. This release fixed several internal issues.
v4.9.1
v4.9.1 was released on February 24, 2022. This release fixed several internal issues.
v4.9.0
v4.9.0 was released on February 17, 2022.
New features
Cloud Proxy Force TCP mode
v4.9.0 adds Force TCP mode for the Agora Cloud Proxy service. In this mode, the SDK always transmits data over TLS 443. To use this mode, set mode as 5 when calling startProxyServer.
Improvements
- Improves the accuracy of the
client.on("is-using-cloud-proxy")event.
Issues fixed
v4.9.0 fixed the following issues:
-
When using v4.8.0 together with Angular and zone.js, users might fail to join a channel because zone.js modified the promise object.
-
Several known issues on iOS.
API changes
Added
client.on("join-fallback-to-proxy")
v4.8.2
v4.8.1
v4.8.1 was released on January 6, 2022. This release fixed an internal issue.
v4.8.0
v4.8.0 was released on December 29, 2021.
New features
Improvements
v4.8.0 made some internal improvements.
Issues fixed
v4.8.0 fixed the following issues:
-
When receiving streams on iOS Safari as an audience member, the host’s voice could be heard, but the volume returned by the
client.on("volume-indicator")event was 0. -
When sending streams on iOS Safari, if you first call
setDeviceand thensetEncoderConfiguration, the SDK returns an error.
API changes
v4.7.3
v4.7.3 was released on November 17, 2021. This release avoided the issue that on the Safari browser in iOS 15.1, after a call was interrupted, the Voice Calling failed to resume playing the remote media.
v4.7.2
v4.7.2 was released on October 14, 2021, with the following changes:
- Fixed the issue that calling
AgoraRTC.checkSystemRequirements()on the Edge browser only returnedfalse.
v4.7.1
v4.7.1 was released on September 13, 2021. This release fixed some issues on Safari 11 and iPad Chrome.
v4.7.0
v4.7.0 was released on September 1, 2021.
Compatibility changes
As of v4.7.0, if you enable media stream encryption, the SDK automatically disables encryption and resets the encryption configurations after a user leaves the channel. To re-enable the encryption, call setEncryptionConfig before the user joins the channel again.
Improvements
This release makes the following improvements:
-
Optimizes the end-user experience of the Voice Calling on the mobile browser.
-
Improves the accuracy of the volume obtained by
getVolumeLevel. -
Adds the support of enabling dual-stream mode on Safari.
Issues fixed
This release fixed the following issues:
-
After calling
LocalAudioTrack.setVolumeto adjust the local volume, the local user could not perceive the volume change. -
When the log level was set to none, the SDK nevertheless output the initialization logs.
-
The promise returned by
LocalAudioTrack.setDevicecould get stuck in a pending state.
v4.6.3
v4.6.3 was released on August 10, 2021. This release fixed an occasional issue: After the user closes a tab or browser on the local client, the remote client does not receive the user-left event immediately.
v4.6.2
v4.6.2 was released on July 30, 2021. This release fixed the issue that the SDK did not destroy all the media players created during a call or live streaming. Chrome 92 introduced a limit on the number of media players that can be created in a particular tab: 75 for the desktop. After you play tracks several times, the undestroyed media players in the SDK might cause the playback failure in the tab.
v4.6.1
v4.6.1 was released on July 21, 2021. This release fixed an internal error.
v4.6.0
v4.6.0 was released on July 16, 2021.
New features
Interactive Live Streaming Standard
As of v4.6.0, the Voice Calling supports Interactive Live Streaming Standard. The major difference between Agora Interactive Live Streaming Standard and Agora Live Interactive Streaming Premium is the latency level on the audience’s client:
-
Interactive Live Streaming Premium: Ultra-low latency (400 ms to 800 ms) from the host’s client to an audience member’s client.
-
Interactive Live Streaming Standard: Low latency (1500 ms to 2000 ms) from the host’s client to an audience member’s client.
The charges for Standard and Premium are different. For details, see the product overview and pricing of Interactive Live Streaming Standard.
You can set the latency level of the audience role in the following two ways:
-
When calling
createClientto create a client object, set theroleparameter as"audience"and thelevelparameter inclientRoleOptionsas1. -
When calling the
setClientRolemethod, set theroleparameter as"audience"and the level parameter inclientRoleOptionsas1.
The mute states of local tracks
v4.6.0 adds the localTrack.setMuted method to stop sending the media data of local tracks. The differences between this method and localTrack.setEnabled are as follows:
- Calling
setEnabled(true)takes longer to resume sending the media data than by than callingsetMuted(false).
Improvements
Dealing with autoplay blocking
On most web browsers, inaudible media are not affected by autoplay blocking. However, on iOS Safari with low power mode enabled, or on other iOS in-app browsers that implement a custom autoplay policy, such as the WeChat browser, the autoplay of inaudible media is blocked.
Issues fixed
v4.6.0 fixes the following issues:
-
The method call of
localAudioTrack.setVolumedid not take effect immediately. -
Using multiple clients on one web page caused unexpected issues.
-
The SDK did not check whether the App ID was a string of 1 to 256 bytes in size.
API changes
Added
-
localTrack.setMuted -
onAutoplayFailed -
clientRoleOptionsinClientConfig -
optionsin thesetClientRolemethod
Deprecated
onAudioAutoplayFailed
v4.5.0
v4.5.0 was released on May 25, 2021.
New features
AEC (Acoustic Echo Canceller) for the audio played on the local client
In a use-case where multiple users play a media file at the same time, such as watching a movie together, if the user A plays the media file through HTMLMediaElement on Chrome with a speaker, the SDK captures the audio played by a speaker together with the voice of the user A. The other users can hear the audio sent by the user A and the audio played locally, which sounds like an echo. To deal with this echo issue, v4.5.0 adds the processExternalMediaAEC method. You can call processExternalMediaAEC and pass in the HTMLMediaElement to enable the AEC for the audio played on the local client.
Improvements
Channel encryption
To strengthen the security of the key, v4.5.0 adds two encryption modes, "aes-128-gcm2" and "aes-256-gcm2", which use the PBKDF2 (Password-Based Key Derivation Function 2). When calling setEncryptionConfig and setting the encryption mode as "aes-128-gcm2" or "aes-256-gcm2", you need to set secret and salt. For how to generate and set secret and salt, see Secure channel encryption.
Restrict media zones
As of v4.5.0, when calling setArea to specify the media zone for connection, you can use the areaCode parameter to specify a large zone and use the excludedArea parameter to specify a small zone. The region for connection is the large zone excluding the small zone. You can only specify the large zone as "GLOBAL". For details, see Restrict media zones.
Issues fixed
v4.5.0 fixes the following issues:
-
The
OptimizationModesetting did not take effect. -
On iOS, when the Voice Calling captures media, noises might occur on the local client.
-
On Chrome, after you called
remoteAudioTrack.setVolumeto adjust the volume, if the playback was paused and then resumed, the volume changed back to the original one. -
On Chrome, the
LocalAudioTrack.setVolumemethod did not take effect.
API changes
Added
-
processExternalMediaAEC -
clientRoleOptionsinClientConfig -
optionsin thesetClientRolemethod -
saltin thesetEncryptionConfigmethod -
"aes-128-gcm"and"aes-256-gcm"inEncryptionMode -
excludedAreain thesetAreamethod
v4.4.0
v4.4.0 was released on April 2, 2021.
Compatibility changes
Firewall domain whitelist
As of v4.4.0, the destination domains required for your firewall whitelist changes to:
.agora.io .edge.agora.io .sd-rtn.com .edge.sd-rtn.com
If you upgrade the SDK to v4.4.0, update your firewall domain whitelist to ensure you can use Agora products in environments with restricted network access.
Improvements
AES-GCM encryption mode
In use-cases requiring high security, to ensure the confidentiality, integrity and authenticity of data, and to improve the computational efficiency of data encryption, v4.4.0 adds the following encryption modes in EncryptionMode:
-
"aes-128-xts": 128-bit AES encryption, GCM mode. -
"aes-256-gcm": 256-bit AES encryption, GCM mode.
Once you enable the built-in encryption, all users in the same channel must use the same encryption mode and key, including the server-side users, such as the Agora recording service.
Cloud proxy
Error code
If you start media capturing after disabling the media capture device on Windows, the error thrown by the SDK changes from UNEXPECTED_ERROR to NOT_READABLE.
Issues fixed
v4.4.0 fixes the following issues:
-
The SDK did not trigger the
"first-frame-decoded"event for a remote audio track. -
The return value of
AgoraRTC.checkSystemRequirementwas inaccurate. -
When the network had multiple IP addresses, the cloud proxy service did not take effect.
API changes
Added
-
client.on("is-using-cloud-proxy") -
"aes-128-gcm"and"aes-256-gcm"inEncryptionMode
v4.3.0
v4.3.0 was released on January 26, 2021.
New features
Cloud proxy
This release optimizes the Agora cloud proxy architecture and enhances the connectivity of the Voice Calling in environments with restricted network access. The optimized Agora cloud proxy service also supports regional connection.
You can contact (mailto
@agora.io) to apply for using the optimized Agora cloud proxy service and set themode parameter as 3 when calling startProxyServer. For details, see Cloud proxy service.v4.2.1
v4.2.1 was released on December 23, 2020. This release fixed the incorrect error that the SDK throws when you pass an illegal parameter in the client.publish method.
v4.2.0
v4.2.0 was released on December 1, 2020.
New features
Regional connection
This release adds the AgoraRTC.setArea method for specifying the region for connection. After specifying the region, the SDK connects to the Agora servers within that region. The following regions are supported:
-
China
-
North America
-
Europe
-
Asia, excluding Mainland China
-
Japan
-
India
-
Global
This advanced feature applies to use-cases that have regional restrictions.
Network quality of remote users
This release adds the AgoraRTCClient.getRemoteNetworkQuality method for getting the uplink and downlink network quality of all the remote users to whom the local user subscribes.
Cloud proxy
This release changes the mode parameter of the AgoraRTCClient.startProxyServer method from boolean to number.
Improvements
- After you call
AgoraRTCClient.setEncryptionConfigto enable the built-in encryption, when the user uses a weak secret, the SDK outputs a warning message to the Web Console and prompts the user to use a strong secret. A strong secret must contain at least eight characters and be a combination of uppercase and lowercase letters, numbers, and special characters.
Issues fixed
-
After an audience member tried to publish a local track in live mode but failed, the audience member could not publish this track even after switching the role to host.
-
After dual-stream mode was enabled, a bug during the disconnection would occasionally cause publishing to fail after reconnection.
-
Due to Safari’s limited support for WebAudio, the audio of
BufferSourceAudioTrackcould be distorted. -
When the SDK gained device permission for the first time, it did not trigger the media device change events (
onMicrophoneChanged,onCameraChanged, oronPlaybackDeviceChanged). The SDK only triggered these events for a subsequent device change.
API changes
Added
-
AgoraRTC.setArea -
AgoraRTCClient.getRemoteNetworkQuality
Changed
- Changed the type of the
modeparameter inAgoraRTCClient.startProxyServerfrombooleantonumber
v4.1.1
v4.1.1 was released on October 27, 2020. This release fixed the following issues:
-
Improved the accuracy of the
event_network_qualityevent. -
After calling
unsubscribeto unsubscribing from an unpublished track of a remote user, the subsequent subscribing and unsubscribing operations failed to take effect.
v4.1.0
v4.1.0 was released on September 4, 2020.
New features
Audio playback device management
v4.1.0 adds the following APIs to manage audio playback devices:
-
setPlaybackDevice: Sets the audio playback device, for example, the speaker. This method supports Chrome only. -
getPlaybackDevices: Retrieves the audio playback devices available. -
onPlaybackDeviceChanged: Occurs when an audio playback device is added or removed.
Improvements
-
Fully supports Chromium-based versions of Microsoft Edge (versions 80 and later).
-
Improves the accuracy of the
network-qualityevent. -
Supports sharing audio when sharing Chrome tabs on macOS.
Issues fixed
-
Occasional failure of reconnection after enabling dual-stream mode.
-
Occasional failure to call
setEnabledafter leaving the channel. -
Failure to push streams to CDN with transcoding and without transcoding at the same time.
-
Occasional failure to automatically re-subscribe to the remote streams after disconnection, indicated by the
UNEXPECTED_RESPONSE: ERR_SUBSCRIBE_REQUEST_INVALIDerror. -
Failure to join different channels with the same UID in one browser tab.
-
Occasional misreport on connection states due to frequent channel join and leave.
API changes
Added
-
AgoraRTC.getPlaybackDevices -
LocalAudioTrack.setPlaybackDevice -
RemoteAudioTrack.setPlaybackDevice -
AgoraRTC.onPlaybackDeviceChanged -
Client.getLocalAudioStats -
Client.getRemoteAudioStats
Deprecated
v4.0.1
v4.0.1 was released on July 18, 2020. This release fixed the following issues:
- Failure to publish local tracks on Chrome 70.
- Publish operation may not be aborted when leaving the channel.
v4.0.0
v4.0.0 was released on July 15, 2020.
Compatibility changes
v4.0.0 deletes the LocalTrack.setMute method and adds the LocalTrack.setEnabled method for enabling or disabling a local track. The advantages of this change are as follows:
-
Eliminates the concept of "mute" to avoid confusion between mute states and publishing states.
-
In versions earlier than v4.0.0, the SDK triggers the
Client.on("user-mute-updated")callback when the remote user callssetMuteto change the mute state. -
As of v4.0.0, the SDK triggers the existing
Client.on("user-unpublished")orClient.on("user-published")callbacks when the remote user callssetEnabledto enable or disable a track.
The
setEnabledmethod changes media input behaviors, so it is an asynchronous operation and returns the result through thePromiseobject.
New features
Improvements
-
The
Client.subscribemethod. -
The
Client.on("user-published")andClient.on("user-unpublished")callbacks.
Issues fixed
v4.0.0 fixed the following issues:
-
After the local user called
unpublish, the SDK triggerred theClient.on("user-left")callback on the remote side. -
Occasional publishing failure when calling
publishandunpublishfrequently. -
The
Client.on("network-quality")callback was inaccurate.
API changes
Added
-
The
Client.localTracksinterface -
The
LocalTrack.setEnabledmethod
Updated
-
Removes the value of
"all"from the mediaType parameter inClient.subscribe. -
The
mediaTypeparameter in theClient.on("user-published")andClient.on("user-unpublished")callbacks does report"all"
Deprecated
-
The
LocalAudioTrackStats.muteStateproperty -
The
RemoteAudioTrackStats.muteStateproperty
Deleted
-
The
Client.on("user-mute-updated")callback -
The
LocalTrack.setMutemethod -
The
AgoraRTCRemoteUser.audioMutedproperty -
The
LocalTrack.getUserIdmethod
AI Noise Suppression
Agora charges additionally for this extension. See Pricing.
v2.0.2
Released on June 24, 2026.
New features
- Added background voice removal.
- Suitable for noisy environments or scenarios with multiple speakers to further highlight the target voice and improve audio capture.
v2.0.1
Released on April 1, 2026.
Compatibility changes
This version no longer supports calling the disable method before pipe to disable the processor. Ensure that you call pipe before invoking disable.
New features
- Added the
setLogLevelmethod to theIAIDenoiserExtensioninterface class to set the log level for the plugin and WASM module. - Added the
setLatencymethod to theIAIDenoiserProcessorinterface class to configure latency for noise reduction processing.
Improvements
- Updated the noise reduction algorithm for improved noise suppression, voice fidelity, and overall robustness.
- Significantly improved voice fidelity after AI noise suppression in scenarios with sampling rates of 16 kHz and above.
- Optimized CPU resource allocation strategy to enhance runtime efficiency.
API changes
The implementation of callbacks has been revised in this version. The original callbacks onloaderror, onoverload, ondump, and ondumpend are deprecated. Use the on method with event names "pipeerror", "overload", "dump", or "dumpend" to listen for the corresponding events instead.
v1.1.0
Improvement
This release improves the calculation performance of the AI-powered noise suppression algorithm.
New features
This release adds the following APIs and parameters:
- APIs:
checkCompatibility: Checks whether the AI Noise Suppression extension is supported on the current browser.setMode: Sets the noise suppression mode as AI noise suppression or stationary noise suppression.setLevel: Sets the AI noise suppression level.
- Parameters:
elapsedTimeinonoverload: Reports the time in ms that the extension needs to process one audio frame.
For API details, see AI Noise Suppression.
Compatibility changes
This release brings the following changes:
- AI Noise Suppression supports Agora Video SDK for Web v4.15.0 or later.
- The extension has Wasm dependencies only. Because JS dependencies are removed, you need to publish the Wasm files located in the
node_modules/agora-extension-ai-denoiser/externaldirectory again. If you have enabled the Content Security Policy (CSP), you need to modify the CSP configuration. See AI Noise Suppression for details. - The audio data is dumped in PCM format instead of WAV format.
- To adjust the intensity of noise suppression, best practice is to call
setLevel.
v1.0.0
First release.
Noise suppression for use cases involving AI
v1.0.0-beta2
agora-conversational-ai-denoiser v1.0.0-beta2 was released on March 5, 2025, to enhance the user experience in applications powered by Agora Conversational AI Engine.
The agora-conversational-ai-denoiser plugin has high CPU usage. Agora recommend using it only for AI-related use cases.
Key features:
- Significantly improved voice protection, especially for singing.
- Reduced risk of audio capture and playback stuttering during operation.
- When AI noise suppression is enabled, the default maximum AGC gain is reduced from 24dB to 12dB.
Virtual background
Key Features
-
Seamless Integration.
-
Integrate directly through an HTML
<script>tag or through npm using:import `VirtualBackgroundExtension` from "agora-extension-virtual-background" -
Works within Agora WebRTC video processing pipelines.
-
-
Support for multiple background types.
- Blurred Background: Users can blur their actual background with low, medium, or high blur intensity.
- Image Background: Allows replacing the background with an image (
HTMLImageElement). - Video Background: Supports setting a video as the virtual background.
- Solid Color Background: Allows setting a solid color as the background.
Browser Support & Limitations
-
Safari & Firefox – Limited Support
While the virtual background feature may work on Safari and Firefox, it is not officially supported due to performance limitations. Safari users may experience reduced performance due to browser-specific constraints, while Firefox users may encounter video freezing when minimizing the browser or switching tabs. For optimal performance and reliability, we recommend using the latest version of Chrome on desktop.
-
Mobile Browsers - Not optimal
The virtual background feature requires significant CPU and GPU processing power, which exceeds the capabilities of most mobile devices. Due to these hardware-intensive requirements, performance on mobile browsers is inconsistent and varies across devices.
v2.1.0
v2.1.0 was released on April 29, 2025, with the following changes:
- Optimizes memory and CPU usage.
- Fixes black screen issues at specific resolutions.
v2.0.0
v2.0.0 was released on December 18, 2024.
This release upgrades the extension algorithm to version 2.0.0. Virtual Background 2.0.0 provides a more distinct face edge and clearer and more stable video images.
New Features
- Support for VP9 codec, which provides better video compression and quality.
Improvements
- Dynamic background switching. Users can change backgrounds without restarting the video stream.
- Ability to disable/re-enable virtual backgrounds dynamically.
- Processor optimization for better real-time segmentation.
Upgrading considerations
Version 2.0.0 is suitable for users who prioritize quality over frame rate especially in use-cases requiring:
- Superior portrait edge detection
- Complex background handling
- Premium video quality
It is recommended for high-end devices such as:
- Apple M1/M2
- Latest iPhones (A13 Bionic and newer)
- Premium Android devices (Snapdragon 865 or equivalent)
Version 1.3.0 is suitable for mid-range devices and is recommended for users who prioritize smooth performance over edge precision such as in standard video conferencing. It is recommended for use cases requiring:
- Higher FPS
- Lower resource consumption
- Consistent performance
Implementation Guidelines:
-
For premium applications, implement device detection. Use 2.0.0 for capable devices and default to 1.3.0 for others.
-
For General applications, default to 1.3.0. Optionally, allow users to upgrade to 2.0.0 with a performance warning.
v1.2.0
v1.2.0 was released on December 10, 2023.
Compatibility changes
As of this version, the Virtual Background extension incorporates the necessary Wasm module. You no longer need to publish the Wasm file separately, and pass the wasmDir parameter when calling the init method to initialize the extension.
After upgrading to this version, please modify your code accordingly.
Improvements
This release upgrades the background segmentation algorithm of the extension, optimizing the segmentation effects on the subject, edges, and fingers in complex static and dynamic backgrounds.
Fixed issues
This release fixed the issue that checkCompatibility could return inaccurate results on specific devices.
API changes
The wasmDir parameter of the init method is now optional.
v1.1.3
Fixed issues
This release fixes the occasional issue of jagged background images on Chrome for Android.
v1.1.2
New features
You can now specify the fit property when calling setOptions. This sets how the background is resized to fit the container. For API details, see Virtual background.
Compatibility changes
Virtual Background supports Agora Video SDK for Web v4.15.0 or later.
v1.1.1
New features
You can now call checkCompatibility and test if AI Noise Suppression extension is supported on the current browser. For API details, see Virtual background.
Fixed issues
A black bar is no longer displayed to the left of the virtual background.
v1.1.0
New features
You can create multiple VirtualBackgroundProcessor instances to process multiple video streams.
v1.0.0
First release.
Super clarity extension
This extension leverages Agora's AI quality enhancement algorithm to intelligently improves video quality without altering the resolution, thereby optimizing the viewing experience at the receiving end. For detailed integration steps, refer to the Super Clarity integration guide.
v2.0.1
Released on April 1, 2026.
This version optimizes the sharpening algorithm, improving video experience in some scenarios.
v2.0.0
Released on November 18, 2025
Improvements
This version includes the following improvements:
- Reduces extension size by approximately 30%.
- Handles WebGL context loss to improve video robustness.
- Improves smoothness when the sender app goes to the background by aligning frame rates.
- Expands compatibility with Safari browser.
v1.0.1
Released on November 10, 2024, this the first version of agora-extension-super-clarity. For detailed integration steps, refer to Super Clarity.
Watermark extension
v1.0.0
Released on November 18, 2025.
This the first version of agora-extension-video-watermark. For detailed integration steps, refer to Video Watermark.
Video Compositor extension
This extension enables local users to seamlessly merge multiple video streams and images into a single video track. This feature allows for the simultaneous display of multiple video feeds in the same video container.
v1.0.0-beta
Released on October 25, 2022.
This the first version of agora-extension-videp-compositor. For detailed integration steps, refer to Video Compositor.
Beauty Effect extension
This extension enables your users to apply beauty effects to their videos. They can adjust settings for whitening, skin smoothing, acne removal, and redness to achieve a natural beauty effect.
v1.0.2-beta
Released on November 26, 2022.
This the first version of agora-extension-beauty-effect. For detailed integration steps, refer to Beauty Effect.
Notifications
2022.10
- After you enable Notifications, your server receives the events that you subscribe to in the form of HTTPS requests.
- To improve communication security between the Notifications and your server, Agora SDRTN® uses signatures for identity verification.
- As of this release, you can use Notifications in conjunction with this product.
AI Noise Suppression
Agora charges additionally for this extension. See Pricing.
v2.0.1
Released on April 1, 2026.
Compatibility changes
This version no longer supports calling the disable method before pipe to disable the processor. Ensure that you call pipe before invoking disable.
New features
- Added the
setLogLevelmethod to theIAIDenoiserExtensioninterface class to set the log level for the plugin and WASM module. - Added the
setLatencymethod to theIAIDenoiserProcessorinterface class to configure latency for noise reduction processing.
Improvements
- Updated the noise reduction algorithm for improved noise suppression, voice fidelity, and overall robustness.
- Significantly improved voice fidelity after AI noise suppression in scenarios with sampling rates of 16 kHz and above.
- Optimized CPU resource allocation strategy to enhance runtime efficiency.
API changes
The implementation of callbacks has been revised in this version. The original callbacks onloaderror, onoverload, ondump, and ondumpend are deprecated. Use the on method with event names "pipeerror", "overload", "dump", or "dumpend" to listen for the corresponding events instead.
v1.1.0
Improvement
This release improves the calculation performance of the AI-powered noise suppression algorithm.
New features
This release adds the following APIs and parameters:
- APIs:
checkCompatibility: Checks whether the AI Noise Suppression extension is supported on the current browser.setMode: Sets the noise suppression mode as AI noise suppression or stationary noise suppression.setLevel: Sets the AI noise suppression level.
- Parameters:
elapsedTimeinonoverload: Reports the time in ms that the extension needs to process one audio frame.
For API details, see AI Noise Suppression.
Compatibility changes
This release brings the following changes:
- AI Noise Suppression supports Agora Video SDK for Web v4.15.0 or later.
- The extension has Wasm dependencies only. Because JS dependencies are removed, you need to publish the Wasm files located in the
node_modules/agora-extension-ai-denoiser/externaldirectory again. If you have enabled the Content Security Policy (CSP), you need to modify the CSP configuration. See AI Noise Suppression for details. - The audio data is dumped in PCM format instead of WAV format.
- To adjust the intensity of noise suppression, best practice is to call
setLevel.
v1.0.0
First release.
Noise suppression for use cases involving AI
v1.0.0-beta2
agora-conversational-ai-denoiser v1.0.0-beta2 was released on March 5, 2025, to enhance the user experience in applications powered by Agora Conversational AI Engine.
The agora-conversational-ai-denoiser plugin has high CPU usage. Agora recommend using it only for AI-related use cases.
Key features:
- Significantly improved voice protection, especially for singing.
- Reduced risk of audio capture and playback stuttering during operation.
- When AI noise suppression is enabled, the default maximum AGC gain is reduced from 24dB to 12dB.
