Release notes
This page provides the release notes for Video Calling.
Video SDK
Video 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
See Known issues.
v4.18.3
v4.18.3 was released on September 20, 2023.
Fixed issues
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.
Fixed issues
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:
join
andleave
publish
andunpublish
subscribe
andunsubscribe
Taking publish
and unpublish
as an example, if you call unpublish
immediately after calling publish
:
- In versions earlier than 4.18.1,
unpublish
might 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.
Fixed issues
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:
onCameraChanged
orAgoraRTC.on("camera-changed")
onMicrophoneChanged
orAgoraRTC.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
setAudioBufferPlaybackSpeed
method, which can be called before or after a user joins a channel. - Adds the
playbackSpeed
property 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:
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:
onAutoplayFailed
onCameraChanged
onMicrophoneChanged
onPlaybackDeviceChanged
onSecurityPolicyViolation
onAudioAutoplayFailed
: Deprecated, seeonAutoplayFailed
instead
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
setProxyServer
setAudioBufferPlaybackSpeed
method andplaybackSpeed
property toIBufferSourceAudioTrack
- The following methods inherited from the
EventEmitter
class to theIAgoraRTC
class:on
off
once
getListeners
removeAllListeners
"camera-changed"
"microphone-changed"
"playback-device-changed"
"autoplay-failed"
"security-policy-violation"
Fixed issues
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
renewToken
method.
v4.17.2
v4.17.2 was released on April 20, 2023.
Fixed issues
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
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
screenSourceType
property. If you are using this property, replace it with the newly addeddisplaySurface
property 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
createCustomVideoTrack
to create a custom video track, by passing in values for thewidth
,height
, andframeRate
parameters. - 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 setting video profiles.
Other improvements
This release also includes the following improvements:
-
The time required to create tracks using
createMicrophoneAudioTrack
orcreateMicrophoneAndCameraTracks
on Safari browsers is reduced. -
When you have two
AgoraRTCClient
objects created locally, you have the option to block certain callbacks from oneAgoraRTCClient
to 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
, andsystemAudio
in theScreenVideoTrackInitConfig
interfacewidth
,height
, andframeRate
in thecreateCustomVideoTrack
methodLocalVideoTrack.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
Fixed issues
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
Video Calling v4.16.1 was released on February 7, 2023.
Fixed issues
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
Video 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 | sendFrameRate sendResolutionHeight sendResolutionWidth |
RemoteVideoTrackStats | receiveFrameRate receiveResolutionHeight receiveResolutionWidth renderFrameRate receiveDelay |
RemoteAudioTrackStats | receiveDelay receiveLevel |
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
HTMLMediaElement
error event is now recorded in the log. - The size of the SDK package is reduced.
Fixed issues
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.addDestChannelInfo
could not setuid
to0
to 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.
Fixed issues
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 SD-RTN™ 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 scenarios 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 (Beta)
Video SDK for Web v4.15.0 adds support for the VP9 codec in the following browsers:
Supported browsers① | |
---|---|
Desktop | |
Android | |
iOS | N/A |
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 scenarios 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.
Fixed issues
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.
Fixed issues
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:
- 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 scenario 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.
Fixed issues
This release fixes the following issue:
- The received Opus stereo audio had no stereo effect.
- On versions earlier than Chrome 76, the
decodeFrameRate
returned by thegetRemoteVideoStats
method was 0. - On WeChat browsers running on iOS 14.1 and 14.2, the first subscribed audio stream was silent.
- After calling
LocalVideoTrack.setBeautyEffect
to enable image enhancement, callingLocalVideoTrack.unpipe
caused an error. - On Windows Chrome 103 and later versions, enabling the dual-stream mode did not take effect in certain scenarios.
v4.13.0
v4.13.0 was released on July 25, 2022.
New features
Adding support for media processing extensions
As of v4.13.0, the SDK supports using media processing extensions on remote audio and video tracks (extension support for local audio and video tracks was added in v4.10.0).
Currently, Agora provides the following extension for remote audio tracks:
Extension | Description | Documentation |
---|---|---|
Spatial Audio Extension (Beta) | Enables a real-time audio blurring or air absorption effect for a user's audio based on the user's position relative to other users, which makes conversations more immersive. | Contact support@agora.io for full details. |
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.pipe
RemoteAudioTrack.unpipe
RemoteVideoTrack.pipe
RemoteVideoTrack.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 SD-RTN™; 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.
- On Firefox, performing subscribing and unsubscribing operations repeatedly to multiple video streams occasionally caused video freezing.
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.
- The Virtual Background Extension (Beta) supports animated virtual backgrounds as of v1.0.0-beta-3. You can set a user's background as a short video. For details, see Use the Virtual Background Extension.
Fixed issues
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 SD-RTN™; 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.finally
was 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
unpublish
without 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 scenarios 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
Adding support for media processing extensions
v4.10.0 supports using media processing extensions in the Video Calling. The following extensions are currently free to use during the beta period. For guidance on how to integrate and use the extensions, refer to the documentation listed in the following table:
Extension | Description | Documentation |
---|---|---|
Virtual Background Extension (Beta) | Enables users to replace their actual background with a solid color or custom image, or to blur their background. | Use the Virtual Background Extension (Beta) |
AI Noise Suppression Extension (Beta) | Reduces many types of sudden noise and reduces vocal distortion when multiple people speak at the same time. | AI Noise Suppression |
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
Setting the video stream type of all remote users
v4.9.0 adds the setRemoteDefaultVideoStreamType
method. After you call enableDualStream
to enable dual-stream mode on the senders' clients, setRemoteDefaultVideoStreamType
enables receivers to choose whether to receive the high-quality or low-quality stream of all remote users.
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
.
Checking the visibility of the <video>
HTML tag
After you call play
, the SDK creates an <video>
HTML tag for playing video tracks. v4.8.0 adds the following methods and events for checking the visibility of the <video>
tag:
localVideoTrack.on("video-element-visible-status")
remoteVideoTrack.on("video-element-visible-status")
localVideoTrack.getVideoElementVisibleStatus
remoteVideoTrack.getVideoElementVisibleStatus
When localTrack.isPlaying
or remoteTrack.isPlaying
is true
but you cannot see any video, the above methods or events can help you check whether the <video>
tag is visible or not and learn the reason when the <video>
tag is invisible.
Improvements
- Improves the accuracy of the
client.on("is-using-cloud-proxy")
event.
- If you set the video resolution but do not set the bitrate, the SDK now can automatically calculate and set a reasonable bitrate according to the resolution and frame rate. This improvement helps to avoid bandwidth overload due to a high bitrate.
Issues fixed
v4.9.0 fixed the following issues:
- When you call
play
to play a local video track and pass in a DOM element from another window, the SDK reported an error.
-
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
setRemoteDefaultVideoStreamType
localVideoTrack.on("video-element-visible-status")
remoteVideoTrack.on("video-element-visible-status")
localVideoTrack.getVideoElementVisibleStatus
remoteVideoTrack.getVideoElementVisibleStatus
client.on("join-fallback-to-proxy")
v4.8.2
v4.8.2 was released on January 27, 2022. This release fixed the issue that on iOS WeChat, the video playback might go black after being interrupted by a screen lock.
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
Checking the visibility of the <video> HTML tag
After you call play
, the SDK creates an <video>
HTML tag for playing video tracks. v4.8.0 adds the following methods and events for checking the visibility of the <video>
tag:
-
localVideoTrack.on("video-element-visible-status")
-
remoteVideoTrack.on("video-element-visible-status")
-
localVideoTrack.getVideoElementVisibleStatus
-
remoteVideoTrack.getVideoElementVisibleStatus
When localTrack.isPlaying
or remoteTrack.isPlaying
is true
but you cannot see any video, the above methods or events can help you check whether the <video>
tag is visible or not and learn the reason when the <video>
tag is invisible.
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
setDevice
and thensetEncoderConfiguration
, the SDK returns an error.
API changes
Added
-
localVideoTrack.on("video-element-visible-status")
-
remoteVideoTrack.on("video-element-visible-status")
-
localVideoTrack.getVideoElementVisibleStatus
-
remoteVideoTrack.getVideoElementVisibleStatus
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 Video Calling failed to resume playing the remote media.
v4.7.2
v4.7.2 was released on October 14, 2021, with the following changes:
-
Avoided the issue that on the Safari browser in iOS 15, after a call was interrupted by a phone call, the Video Calling might fail to resume sending the local media and playing the remote media.
-
Avoided the black screen issue that might occur when using
videoTrack.play(element, {mirror: true})
to play the video on the desktop or mobile Safari 15 browser.
- 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 Video 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.setVolume
to 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.setDevice
could 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 Video 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
createClient
to create a client object, set therole
parameter as"audience"
and thelevel
parameter inclientRoleOptions
as1
. -
When calling the
setClientRole
method, set therole
parameter as"audience"
and the level parameter inclientRoleOptions
as1
.
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:
- After the method call of
localVideoTrack.setEnabled(false)
to stop sending video, the SDK also immediately turns off the camera light and stops video capture, whilelocalVideoTrack.setMuted
does not stop video capture.
- Calling
setEnabled(true)
takes longer to resume sending the media data than by than callingsetMuted(false)
.
Improvements
Dealing with autoplay blocking
To deal with the autoplay blocking of video on iOS, v4.6.0 deprecates the onAudioAutoplayFailed
callback, and adds the onAutoplayFailed
callback instead to indicate an audio or video autoplay failure.
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.setVolume
did 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
-
clientRoleOptions
inClientConfig
-
options
in thesetClientRole
method
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 scenario 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 Media Stream Encryption.
Network geofencing
As of v4.5.0, when calling setArea to specify the region for connection, 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.
The preset video encoder configurations for screen sharing
v4.5.0 adds the following preset video encoder configurations for screen sharing in ScreenEncoderConfigurationPreset:
-
"480p_3"
: The resolution is 640 × 480 and the frame rate is 15 fps. -
"720p_3"
: The resolution is 1280 × 720 and the frame rate is 15 fps. -
"1080p_3
": The resolution is 1920 × 1080 and the frame rate is 15 fps.
Issues fixed
v4.5.0 fixes the following issues:
-
The
OptimizationMode
setting did not take effect. -
On iOS, when the Video Calling captures media, noises might occur on the local client.
- On Firefox, after the stream transmitted by the SDK switched from high quality to low quality, the video resolution obtained by the
getRemoteVideoStats
method was still the resolution of the high-quality stream.
-
On Chrome, after you called
remoteAudioTrack.setVolume
to adjust the volume, if the playback was paused and then resumed, the volume changed back to the original one. -
On Chrome, the
LocalAudioTrack.setVolume
method did not take effect.
API changes
Added
-
processExternalMediaAEC
-
clientRoleOptions
inClientConfig
-
options
in thesetClientRole
method -
salt
in thesetEncryptionConfig
method -
"aes-128-gcm"
and"aes-256-gcm"
inEncryptionMode
-
excludedArea
in thesetArea
method
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 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 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
v4.4.0 adds the client.on("is-using-cloud-proxy")
event. The SDK triggers this event after the local client successfully publishes a media stream to indicate whether the media stream is forwarded by the Cloud proxy service.
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.checkSystemRequirement
was 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 Video Calling in environments with restricted network access. The optimized Agora cloud proxy service also supports regional connection.
You can contact (mailto:support@agora.io) to apply for using the optimized Agora cloud proxy service and set the mode
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 scenarios that have regional restrictions.
Video transmission optimization strategy
This release adds the localVideoTrack.setOptimizationMode
method for setting the video transmission optimization mode:
-
"balanced"
: Uses the default transmission optimization strategy. -
"detail"
: Prioritizes clarity. -
"motion"
: Prioritizes smoothness.
See the API reference for the introduction to each transmission optimization mode. This method applies to scenarios where you need to dynamically adjust the optimization mode during a video call, live streaming, or screen sharing. For example, during the screen sharing, before you change the shared content from slides to a video, you can change the optimization mode from "detail"
to "motion"
to ensure smoothness in poor network conditions.
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 disabling an audio or video tracks by calling
setEnabled
, you can still callsetDevice
to switch devices.
- After you call
AgoraRTCClient.setEncryptionConfig
to 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.
Fixed issues
-
When you disabled a local video track, you could not publish another video track.
-
After enabling dual-stream mode, if you called
setEnabled(false)
to disable a video track during the process of publishing, the publishing failed and could not be recovered.
-
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.
- After unpublishing a local camera video track and then publishing a screen-sharing track, the video bitrate was fixed at around 700 Kbps, and the resolution and frame rate dropped.
-
Due to Safari’s limited support for WebAudio, the audio of
BufferSourceAudioTrack
could 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
localVideoTrack.setOptimizationMode
AgoraRTCClient.getRemoteNetworkQuality
Changed
- Changed the type of the
mode
parameter inAgoraRTCClient.startProxyServer
fromboolean
tonumber
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_quality
event.
- The method call of
createCameraVideoTrack
did not stop on Safari when the SDK cannot find a video capture device.
- After calling
unsubscribe
to unsubscribing from an unpublished track of a remote user, the subsequent subscribing and unsubscribing operations failed to take effect.
-
Reduced the performance degradation due to frequent method calls of
setEnabled
to enable and disable a video track in dual-stream mode. -
Occasional errors when
client.getLocalVideoStats
was called on Safari.
v4.1.0
v4.1.0 was released on September 4, 2020.
New features
Screenshot capture
v4.1.0 adds the getCurrentFrameData
method which gets the data of the video frame being rendered.
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-quality
event. -
Supports sharing audio when sharing Chrome tabs on macOS.
Fixed issues
- Information retrieved by
checkVideoTrackIsActive
on Safari is inaccurate.
-
Occasional failure of reconnection after enabling dual-stream mode.
-
Occasional failure to call
setEnabled
after 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_INVALID
error. -
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
-
LocalVideoTrack.getCurrentFrameData
-
RemoteVideoTrack.getCurrentFrameData
-
AgoraRTC.getPlaybackDevices
-
LocalAudioTrack.setPlaybackDevice
-
RemoteAudioTrack.setPlaybackDevice
-
AgoraRTC.onPlaybackDeviceChanged
-
Client.getLocalAudioStats
-
Client.getRemoteAudioStats
-
Client.getLocalVideoStats
-
Client.getRemoteVideoStats
Deprecated
- The
LocalTrack.getStats
andRemoteTrack.getStats
methods. Use theClient.getLocalAudioStats
,Client.getRemoteAudioStats
,Client.getLocalVideoStats
andClient.getRemoteVideoStats
methods instead.
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 callssetMute
to 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 callssetEnabled
to enable or disable a track.
- After you call
setMute(true)
, the SDK sends black video frames or silenced audio frames. If you mute a local video track, the camera light stays on, which might adversely impact the user experience. In contrast, if you disable a local video track by callingsetEnabled(false)
, the SDK immediately turns off the camera and stops capturing video.
The
setEnabled
method changes media input behaviors, so it is an asynchronous operation and returns the result through thePromise
object.
New features
Video encoding strategy
v4.0.0 adds the optimizationMode
property in the CameraVideoTrackInitConfig
, ScreenVideoTrackInitConfig
, and CustomVideoTrackInitConfig
interfaces. When creating a video track by calling createCameraVideoTrack
, createCustomVideoTrack
, or createScreenVideoTrack
, you can choose whether to prioritize video quality or smoothness by setting optimizationMode as the following:
-
"detail"
: Prioritizes video quality. -
The SDK ensures high-quality images by automatically calculating a minimum bitrate based on the capturing resolution and frame rate. No matter how poor the network condition is, the sending bitrate will never be lower than the minimum value.
-
In most cases, the SDK does not reduce the sending resolution, but may reduce the frame rate.
-
"motion"
: Prioritizes video smoothness. -
In poor network conditions, the SDK reduces the sending bitrate to minimize video freezes.
-
In most cases, the SDK does not reduce the frame rate, but may reduce the sending resolution.
The
optimizationMode
property of the video track created by calling createScreenVideoTrack is set as"detail"
by default.
Improvements
-
Redesigns the
withAudio
parameter inAgoraRTC.createScreenVideoTrack
. In addition toenable
anddisable
, you can also setwithAudio
asauto
. In this setting, the SDK shares the audio, dependent on whether the browser supports this function. -
Does not allow setting the
withAudio
parameter as"all"
any more to avoid code repetition. As of v4.0.0, you can only setwithAudio
as"audio"
or"video"
. This change involves the following APIs:
-
The
Client.subscribe
method. -
The
Client.on("user-published")
andClient.on("user-unpublished")
callbacks.
Fixed issues
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.
- Periodic video blur when sharing the screen in
"rtc"
mode.
-
Occasional publishing failure when calling
publish
andunpublish
frequently. -
The
Client.on("network-quality")
callback was inaccurate.
API changes
Added
-
The
Client.localTracks
interface -
The
LocalTrack.setEnabled
method
- The
optimizationMode
property inCameraVideoTrackInitConfig, ``ScreenVideoTrackInitConfig
, andCustomVideoTrackInitConfig
interfaces
Updated
- Adds the value of
auto
to the withAudio parameter inAgoraRTC.createScreenVideoTrack
.
-
Removes the value of
"all"
from the mediaType parameter inClient.subscribe
. -
The
mediaType
parameter in theClient.on("user-published")
andClient.on("user-unpublished")
callbacks does report"all"
Deprecated
- The
LocalAudioTrackStats.muteState
property
-
The
LocalVideoTrackStats.muteState
property -
The
RemoteVideoTrackStats.muteState
property
- The
RemoteAudioTrackStats.muteState
property
Deleted
-
The
Client.on("user-mute-updated")
callback -
The
LocalTrack.setMute
method -
The
AgoraRTCRemoteUser.audioMuted
property
- The
AgoraRTCRemoteUser.videoMuted
property
- The
LocalTrack.getUserId
method
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 SD-RTN™ 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.
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:
elapsedTime
inonoverload
: 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/external
directory 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.
Virtual Background
You may be charged for the usage of this extension. Contact support@agora.io for details.
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.