This page provides the release notes for the Agora Web SDK 3.x and earlier versions.
For the web browser support of the Agora Web SDK, see Which browsers does the Agora Web SDK support?
Chrome deprecates and removes the Plan B dialect
Chrome plans to deprecate and remove the Plan B dialect in WebRTC. For details, see the Chrome feature description. This change affects the following Agora Web SDK versions:
|Web SDK version||Impact|
|After a stream is published, the method call of
If you use any of the above SDK versions, Agora recommends that you upgrade the SDK to the latest version.
Stream.getAudioLevelmethods need to be triggered by the user's gesture on Chrome 70 or later and on Safari. See Autoplay Policy Changes.
For more issues, see Web FAQs.
v3.6.10 was released on March 28, 2022 with the following changes:
v3.6.9 was released on January 6, 2022. This release fixed the issue that after you enabled the cloud proxy service and tried to join a channel, the browser console might present a CORS error.
v3.6.8 was released on December 20, 2021, and fixed some known issues.
v3.6.7 was released on November 24, 2021, and fixed a known issue on Chrome 100 or later versions.
v3.6.6 was released on November 10, 2021, with the following changes:
TypeError: null is not an object (evaluating 'e.track.kind')error.
v3.6.5 was released on September 13, 2021. This release fixed the issue that after you enabled the cloud proxy service and tried to join a channel, the browser console might present a CORS error.
v3.6.4 was released on September 1, 2021, and fixed some known issues.
v3.6.3 was released on August 6, 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.
v3.6.2 was released on July 16, 2021. This release fixed the issue caused by the deprecation and removal of the Plan B dialect in Chrome 93 and later versions: After a stream is published, the method call of switchDevice causes video freezes or no sound issues.
v3.6.1 was released on July 1, 2021. This release fixed the issue that after you enable the cloud proxy service, the SDK did not automatically retry when it fails to connect to the cloud proxy service.
v3.6.0 was released on May 25, 2021.
To strengthen the security of the key, v3.6.0 adds two encryption modes,
"aes-256-gcm2", which use the PBKDF2 (Password-Based Key Derivation Function 2). When calling
setEncryptionMode and setting the encryption mode as
"aes-256-gcm2", you need to set
salt. For how to generate and set
salt, see Media Stream Encryption.
v3.6.0 adds the
excludedArea parameter in
ClientConfig. You can use the
areaCode parameter to specify a large region and use the
excludedArea parameter to specify a small region. The region for connection is the large region excluding the small region. You can only specify the large region as
"GLOBAL". For details, see Network Geofencing.
v3.6.0 fixes the issue that after a user was kicked out of a channel, if the user rejoins the channel with the same uid, the user received the error of uid conflict.
v3.5.2 was released on April 19, 2021. This release fixed the issue that the SDK fails to connect to Agora servers when you specify
CHINA as the region for connection.
v3.5.1 was released on April 14, 2021. This release fixed the issue due to the
None Ice Candidate not allowed error.
v3.5.0 was released on April 12, 2021.
Firewall domain whitelist
As of v3.5.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 v3.5.0, update your firewall domain whitelist to ensure you can use Agora products in environments with restricted network access.
AES-GCM encryption mode
In scenarios 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
"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.
v3.5.0 adds the
proxy property in
client.on("stream-published") for indicating whether the media stream is forwarded by the cloud proxy service.
v3.4.0 was released on January 26, 2021.
This release optimizes the Agora cloud proxy architecture and enhances the connectivity of the Web SDK in environments with restricted network access. The optimized Agora cloud proxy service also supports regional connection.
The SDK failed to trigger the
first-video-frame-decode event on Safari.
v3.3.1 was released on December 11, 2020. This release fixed the connection error when using the cloud proxy service.
v3.3.0 was released on December 1, 2020.
After you call
Client.setEncryptionMode to enable the built-in encryption, when the user sets a weak secret by calling
Client.setEncryptionSecret, the SDK outputs a warning message to the Web Console and prompts the user to set 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.
Client.on("stream-unpublished")event caused an error.
switchDeviceto switch the microphone, the display mode of the local view changed from
Client.on("network-quality")event did not change to 0 until 30 seconds after the network disconnection.
v3.2.3 was released on October 28, 2020. This release fixed the following issues:
setLiveTranscodingwas called, pushing streams to CDN failed if
startLiveStreamingwas called before the SDK triggers the
stopLiveStreamingwas called, the SDK failed to trigger the
v3.2.1 was released on September 11, 2020. This version fixed the error in compiling and packaging after some users upgraded to v3.2.0.
v3.2.0 was released on September 7, 2020.
v3.2.0 adds the
optimizationMode property in the
StreamSpec interface. When creating a stream object by calling
createStream, you can choose between the following two optimization strategies to ensure the quality of video images meets the end users' requirement under poor network conditions:
"detail": Prioritizes clarity. In most cases, the SDK does not reduce the sending resolution, but may reduce the frame rate.
"motion": Prioritizes smoothness. In most cases, the SDK does not reduce the frame rate, but may reduce the sending resolution.
If you leave this property empty, the SDK uses the default transmission optimization strategy:
createStream), the default transmission optimization strategy is to prioritizes clarity.
v3.2.0 fully supports Chromium-based versions of Microsoft Edge (versions 80 and later).
Stream.initfailed when the device does not support the capture frame rate of 15 fps.
v3.2.0 adds the
optimizationMode property in
v3.1.2 was released on August 11, 2020.
This release adds the
areaCode property in
ClientConfig for specifying the region for the connection when creating a
Client object. After specifying the region, the SDK connects to the Agora servers within that region.
You can choose from the following regions:
This advanced feature applies to scenarios that have regional restrictions.
The value of the
success parameter in the
Client.on("stream-reconnect-end") callback was inaccurate.
areaCode property in
v3.1.1 was released on June 1, 2020.
From this release, the RTMP converter supports the Agora cloud proxy service.
getLocalVideoStatswithin three seconds after publishing a stream.
v3.1.0 was released on April 30, 2020.
v3.1.0 optimizes dual-stream mode and makes the following changes in SDK behavior:
Client.on("stream-unpublished") callback. When the local user successfully unpublishes a stream, the SDK triggers this callback.
This release enables you to pass configurations of multiple TURN servers to
Stream.getStatsgot an empty result.
Client.join, the SDK did not return the user ID after joining the channel successfully.
Added the event
v3.0.2 was released on March 16, 2020. This version made some internal improvements.
v3.0.1 was released on February 12, 2020.
This version supports the dual-stream mode (
enableDualStream) for video streams created by defining the
Optimizes the reconnection strategy to improve the user experience under poor network conditions.
Client.leavewhen the network is disconnected.
muteVideomethods do not take effect after unsubscribing from and then subscribing to a remote stream.
v3.0.0 was released on December 2, 2019.
This release optimizes the SDK's performance in terms of transmission quality and interoperability, significantly reducing the time to render the first remote video frame, and improving the video experience under poor downlink network conditions.
Adds the following methods for relaying the media stream of a host from a source channel to a destination channel. This feature applies to scenarios where hosts from different live streaming channels interact with each other.
During a media stream relay, the SDK reports the states and events of the relay with the
For more information on the implementation, API call sequence, sample code, and considerations, see Co-host across Channels.
screenAudio property to
StreamSpec for sharing the local audio playback when sharing a screen. See Share audio for details.
setBeautyEffectOptionsmethod for setting image contrast, brightness, sharpness, and red saturation. See Image enhancement for details.
images property to
LiveTranscoding for inserting online PNG images as watermarks to a live streaming.
Client.on("crypt-error") callback for notifying the app that an encryption/decryption failure occurs when the local users is publishing or subscribing to a stream.
Client.on("disable-local-video")callbacks for notifying the app that a remote user on the Native SDK calls
enableLocalVideo to enable or disable video capture.
reason to the
Client.on("peer-leave") callback for reporting the reason why the remote user goes offline.
Client.join does not report the error of an incorrect App ID in its onFailure callback function.
Occasionally, the SDK does not automatically reconnect after being disconnected from the servers for pushing and pulling streams.
For answers to questions arising from common disconnection issues, click the following FAQ links:
Occasionally, the error message
"Cannot read property 'getLastMsgTime' of null" appears.
The console reports an error when the local user enables or disables the audio or video track of a remote stream.
Adds the following events in
v2.9.0 is released on September 5, 2019.
To improve the usability of the Media Push service, v2.9.0 defines the following parameter limits in
videoFramerate: Frame rate (fps) of the CDN live output video stream. Agora adjusts all values over 30 to 30.
videoBitrate: Bitrate (Kbps) of the CDN live output video stream. Set this parameter according to the Video Bitrate Table. If you set a bitrate beyond the proper range, the SDK automatically adapts it to a value within the range.
videoCodecProfile: The video codec profile. Set it as 66, 77, or 100. If you set this parameter to other values, Agora adjusts it to the default value of 100.
height: Pixel dimensions of the video. The minimum value of width x height is 16 x 16.
Supports using the Agora Web SDK in NAT64 networks.
facingMode parameter in the
createStream method to set using the front or rear camera on mobile devices.
Client.off method to support removing the events attached by the
Stream.closewhen initializing the stream causes abnormal behaviors.
Stream.startAudioMixingdoes not take effect.
v2.8.0 is released on July 8, 2019.
This version optimizes the support for string UIDs.
All users in the same channel should have the same type (number or string) of user ID. If you use string UIDs to interoperate with the Agora Native SDK, ensure that the Native SDK uses the string user account to join the channel. See Use String User Accounts for details.
v2.7.1 is released on July 3, 2019.
Setting the video profile of the shared screen by the
Stream.setScreenProfile method does not take effect.
v2.7.0 is released on June 21, 2019.
Stream.setVideoEncoderConfiguration method to customize the video encoder configuration. Compared with the
Stream.setVideoProfile method, this method is more flexible and supports customizing the video resolution, frame rate, and bitrate. See Set the Video Profile for details.
For easier management of the stream playback status, v2.7.0 adds the following functions:
callbackparameter in the
Stream.playmethod to report the result of playing a stream. If the playback fails, this parameter provides the error details.
Stream.on. When the stream playback status changes, this callback is triggered to report the playback status and the reason why the status changes.
Stream.resumemethod to resume the playback when the
"first-video-frame-decode" callbacks in
Client.on to notify the app when the first remote audio/video is decoded after subscribing to the remote stream.
"videoTrackEnded" callbacks in
Stream.on to notify the app when the audio/video track no longer provides data to the stream, for example when the device is removed or deauthorized.
Supports audio calls, video calls, and interactive live streaming on the Microsoft Edge browser. For details, see Agora Web SDK FAQ.
This version allows updating the video encoder configuration dynamically. You can call
setVideoEncoderConfiguration before or after
Do not set the video encoder configuration when publishing a stream.
Client.leavedoes not take effect when the network connection is lost.
Stream.getAudioMixingPositionis inaccurate when the audio mixing file is playing.
Stream.play: Adds the
v2.6.1 is released on April 11, 2019.
This version supports using empty strings for the
microphoneId properties in the
enableDualStreammethod before publishing a stream.
getStatsmethod are missing in calls using string UIDs.
v2.6.0 is released on April 3, 2019.
Supports playing multiple audio effect files at the same time, and managing the files. You can set the volume, pause/stop the playback, and preload the audio effect file. See Play Audio Effects/Audio Mixing.
Supports screen sharing on Chrome 72 and later without using the Chrome extension. See Share the Screen.
cacheResourceproperty in the
Stream.startAudioMixingmethod to set whether or not to store the audio mixing file in the cache.
AgoraRTC.getSupportedCodecmethod to get the supported codecs of the web browser.
stream-updatedcallback in the
Client.onmethod to notify users when the remote stream adds or removes a track.
stream-fallbackcallback in the
Client.onmethod to notify the user when the remote video stream falls back to audio-only when the network conditions worsen or switches back to video when the network conditions improve.
switchDevicemethod fails to switch between microphones on Chrome 72.
switchDevicemethod and start audio mixing again, the remote user cannot hear the audio mixing.
muteVideomethods immediately after subscribing to the remote stream might not take effect.
replaceTrackmethod to switch the video track on Windows, if you call the
startAudioMixingmethod, the remote user cannot hear the audio mixing.
cacheResourceparameter in the
v2.5.2 is released on February 28, 2019.
Stream.switchDevicemethod fails to switch audio devices on Chrome 72 or later.
v2.5.1 is released on February 19, 2019.
Adds more statistics on the call quality.
Client.getSessionStatsmethod to get the statistics of the call sessions, such as the duration in the channel, the total received and sent bitrate of the stream, and the number of users in the channel.
network-qualitycallback to report the uplink and downlink network conditions of the local user once every two seconds.
options parameter to the
Client.subscribe method to set whether or not to receive the audio and/or video data.
This method can be called multiple times and enables users to switch between receiving and not receiving the audio and/or video data flexibly.
Client.addInjectStreamUrl method to pull a voice or video stream and inject it into a live streaming channel. This is applicable to scenarios where all of the audience members in the channel can watch a live show and interact with each other.
streamInjectedStatus callback to inform the app of changes to the injection status.
Client.setClientRole method to set the user role as a host or an audience in a live streaming channel. A host can both send and receive streams while an audience can only receive streams.
client-role-changed callback to inform the app of changes to the user role.
Client.getConnectionStatemethod to retrieve the connection status between the SDK and Agora's edge server.
connection-state-changecallback to inform the app of changes to the connection status.
Supports the cloud proxy service. See Use Cloud Proxy for details.
Stream.isPlayingmethod to detect whether or not a stream is playing.
peer-online: Informs the app that a remote user or host joins the channel.
stream-reconnect-start: Informs the app that the SDK starts republishing or re-subscribing to streams.
stream-reconnect-end: Informs the app that the SDK finishes republishing or re-subscribing to streams.
exception: Informs the app of exceptions.
audioMixingPlayed: Informs the app that the audio mixing stream starts or resumes playing.
audioMixingFinished: Informs the app that the audio mixing stream finishes playing.
mutedparameter to the
Stream.playmethod to work around the web browser's autoplay policy.
callbackparameter to the
Stream.setAudioMixingPositionmethod to return error messages when the method call fails.
Client.onmethod to be consistent in style.
getStatsmethod is 0 on Safari for macOS.
enableAudiomethod is called after disabling audio and then starting audio mixing.
getAudioLevelmethod is 0 after calling the
switchDevicemethod to switch audio devices.
Client.subscribe: Adds the
Stream.setAudioMixingPosition: Adds the
Stream.play: Adds the
Renames the following callbacks in the
|Old Callback Name||Current Callback Name|
v2.5.0 is released on October 30, 2018.
If you set the domain firewall, ensure that
*.agora.ioare added to your whitelist before using this version.
To enable better interoperability between the Agora Web SDK and other Agora SDKs, this version adds the following features. For detailed descriptions of the APIs, see Agora Web SDK API Reference.
Adds the following API methods on call statistics to give users a better idea of the call quality:
Client.getNetworkStats: Retrieves the network statistics (network type).
Client.getSystemStats: Retrieves the system statistics (system battery level).
Client.getRemoteAudioStats: Retrieves the audio statistics of the remote stream.
Client.getLocalAudioStats: Retrieves the audio statistics of the local stream.
Client.getRemoteVideoStats: Retrieves the video statistics of the remote stream.
Client.getLocalVideoStats: Retrieves the video statistics of the local stream.
Client.getTransportStats: Retrieves the statistics of network transport.
Provides flexible device management and device status notification.
Adds the following API methods:
Client.getRecordingDevices: Enumerates the audio input device, such as the microphone.
Client.getPlayoutDevices: Enumerates the audio output device, such as the speaker.
Client.getCameras: Enumerates the video input device, such as the camera.
Adds the following callbacks to inform the app on relevant device changes:
recordingDeviceChanged: The audio input device is changed.
playoutDeviceChanged: The audio output device is changed.
cameraChanged: The video input device is changed.
Adds the following API methods:
Stream.switchDevice: Switches the media input devices in the channel. For example, the microphone and camera.
Stream.setAudioOutput: Sets the audio output device. You can use this method to switch between the microphone and the speaker.
Supports audio mixing, namely mixing the original sound (the audio captured by the microphone) with the audio playback (an audio file).
Adds the following API methods:
Stream.startAudioMixing: Starts audio mixing.
Stream.stopAudioMixing: Stops audio mixing.
Stream.pauseAudioMixing: Pauses audio mixing.
Stream.resumeAudioMixing: Resumes audio mixing.
Stream.adjustAudioMixingVolume: Adjusts the audio mixing volume.
Stream.getAudioMixingDuration: Retrieves the audio mixing duration.
Stream.getAudioMixingCurrentPosition: Retrieves the current position of the audio mixing.
Stream.setAudioMixingPosition: Sets the playback position of the audio mixing.
Provides flexible management of the audio and video tracks.
Adds the following API methods:
Stream.getAudioTrack: Retrieves the audio track.
Stream.getVideoTrack: Retrieves the video track.
Stream.replaceTrack: Replaces the audio/video track.
Stream.addTrack: Adds an audio/video track.
Stream.removeTrack: Removes an audio/video track.
Client.enableAudioVolumeIndicatormethod to enable the SDK to regularly report on the active speakers and their volumes.
Stream.setAudioVolumemethod, which sets the audio volume of the subscribed stream.
networkTypeChangedcallback to inform the app on network type changes.
streamTypeChangedcallback to inform the app on stream type changes (from a low-stream video to a high-stream video or vice versa).
uidparameter in the
stream-removedcallback 10 seconds after another user calls the
Stream.closemethod to stop streaming from the Safari browser.
v2.4.1 is released on September 19, 2018.
v2.4.0 is released on August 24, 2018.
See Security Keys for details.
Adds the support for AEC (Acoustic Echo Cancellation) and ANS (Automatic Noise Suppression) in the
videoSource properties in the
client.createStream method, which specifies the audio and video tracks. Therefore, you can process the audio/video before creating a stream.
stream.setAudioProfile method, which provides various audio profile options (the sample rate, mono or stereo, and the encoding rate).
client.setStreamFallbackOption method, which allows the receiver to automatically subscribe to the low-stream video or the audio-only stream under poor network conditions.
Adds delay-related statistics in the
stream.getStats callback, including the delays from the publisher to the SD-RTN, from the SD-RTN to the subscriber, from end to end, and from sending to playing audio/video.
AgoraRTC.Logger.enableLogUplaod method, which supports uploading the SDK’s log to Agora’s server.
microphoneIdsettings do not take effect unless the
stream.setVideoProfilemethod is called.
setScreenProfilemethod does not take effect on the Firefox browser.
microphoneIdsetting does not take effect in screen sharing.
audioProcessingsettings do not take effect.
stream.playmethod can be called repeatedly without calling the
v2.3.1 is released on June 7, 2018.
v2.3.0 is released on June 4, 2018.
To increase the application scenarios and improve interoperability with the Agora Native SDK, the
codec properties are added in the
createClient method, in which
To meet customers’ needs for audio control during a communication or interactive live streaming session, the
audioProcessing property is added in the
To enable enterprises with a company firewall to access Agora’s services, the
setTurnServer methods are added. By calling these methods, you can bypass the firewall and send the signaling messages and media data directly to the Agora SD-RTN through the servers. You need to deploy the Nginx and TURN servers before calling these methods before joining the channel.
Encryption is supported to enhance security for communications or live streaming. Users need to set the encryption mode and password before joining a channel to use this function.
In the case of p2plost, the SDK stops reconnecting to the server after one or several reconnections.
v2.2 is released on April 16, 2018.
Supports getting the version of the current Web SDK.
setLowStreamParameter method to set the low-stream parameter.
Adds the support for the Firefox browser to share the screen by adding the
mediaSource property in the
createStream method. See Screen Sharing on Firefox for details.
Adds the support for the QQ browser.
No voice in the voice-only mode when an iOS device joins a session using the Safari browser.
v2.1.1 is released on March 19, 2018.
Fixes the issue of unable to view the remote video when using the Web SDK on the Firefox browser v59.01 on macOS.
v2.1.0 is released on March 7, 2018.
|Quality Detection||Adds callbacks to return the quality of the compatibility, microphone, camera, and network status.|
|Simulcast||Adds the function of controlling which stream type (high or low) to send or receive.|
|User-ban Notification||Adds a callback to notify a user of being banned from a channel.|
|RTMP Stream-Pushing||Adds a method to support RTMP stream-pushing.|
|Log Output Level Settings||Adds a method to set the log output level.|
|Mute/Unmute||Adds a method to mute or unmute users in a call or interactive streaming.|
|P2P Connection Establishment||Shortens the time from 1.8 s to 500 ms.|
|Packet Loss||Optimizes the FEC packet loss and ULP FEC packet loss.|
v2.0 is released on November 21, 2017.
CreateClientmethod, to check the compatibility between the system and the web browser.
v1.14 is released on October 20, 2017.
Adds the screen-sharing function by modifying the
screen property and adding the
extensionId property in the
v1.13 is released on September 4, 2017.
v1.12 is released on July 25, 2017.
Adds and updates the following APIs:
||New||Creates a client object for web-only or web interop depending on which mode you set.|
||New||Updates a Channel Key when the previous Channel Key expires.|
||New||Indicates who is the active speaker in the current channel.|
||New||Specifies the video stream type of the remote user to be received by the local user when the remote user sends dual streams.|
||Update||Sets the video profile. The default value is 480p_1.|
||Update||Initializes the client object.|
||Update||Allows a user to join an Agora channel.|
Updates the error codes.
v1.8.1 is released on March 16, 2017.
Fixes the incompatibility issue on Chrome v57.
v1.8 is released on December 26, 2016.
The Agora Web SDK supports both communication and live streaming scenarios starting from v1.8. This release is a beta version.