For AI agents: see the complete documentation index at /llms.txt.
Release notes
Updated
Information about changes in each release of Video Calling.
This page provides the release notes for the Video SDK release streams used by Video Calling.
- Video SDK
- AI Noise Suppression
- Virtual background
- Super Clarity extension
- Watermark extension
- Video Compositor extension
- Beauty Effect extension
- Notifications
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
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
startLastmileProbeTestAPI, 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
setDualStreamModemethod, which improves how you subscribe to dual video streams. By setting themodeparameter toAUTO_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) orENABLE_SIMULCAST_STREAM(always send low stream).For the relationship between this method and the existing
enableDualStreamanddisableDualStream, see the API Reference. To ensure clear integration logic, Agora recommends that you choose one set of APIs for integration. Agora plans to deprecateenableDualStreamanddisableDualStreamin future versions. - The host on the receiving side calls
-
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
windowAudioandsystemAudioinScreenVideoTrackInitConfigto"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
optionsparameter to thejoinmethod to configure channel media options. When you setautoSubscribetotrueinIJoinOptions, 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.
Note
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
NetworkQualityby 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.
Note
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.
Note
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.
Tip
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 backend. 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
Video 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
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 | sendFrameRatesendResolutionHeightsendResolutionWidth |
RemoteVideoTrackStats | receiveFrameRatereceiveResolutionHeightreceiveResolutionWidthrenderFrameRatereceiveDelay |
RemoteAudioTrackStats | receiveDelayreceiveLevel |
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 backend 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 | Chrome 65 or later Firefox 69 or later Edge 79 or later Safari 16 or later |
| Android | Chrome 68 or later Wechat v8.0.6 or later Other apps that use WKWebView: WebView v65.0.3325.109 or later |
| 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
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 backend; 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.
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 backend; 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
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.getVideoElementVisibleStatusremoteVideoTrack.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
playto 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
setDeviceand 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.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 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
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:
-
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.setMuteddoes 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.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.
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
OptimizationModesetting 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
getRemoteVideoStatsmethod was still the resolution of the high-quality stream. -
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
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.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 Video 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.
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 use-cases 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 callsetDeviceto switch devices. -
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
-
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
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 -
localVideoTrack.setOptimizationMode -
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. -
The method call of
createCameraVideoTrackdid not stop on Safari when the SDK cannot find a video capture device. -
After calling
unsubscribeto 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
setEnabledto enable and disable a video track in dual-stream mode. -
Occasional errors when
client.getLocalVideoStatswas 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-qualityevent. -
Supports sharing audio when sharing Chrome tabs on macOS.
Issues fixed
-
Information retrieved by
checkVideoTrackIsActiveon Safari is inaccurate. -
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
-
LocalVideoTrack.getCurrentFrameData -
RemoteVideoTrack.getCurrentFrameData -
AgoraRTC.getPlaybackDevices -
LocalAudioTrack.setPlaybackDevice -
RemoteAudioTrack.setPlaybackDevice -
AgoraRTC.onPlaybackDeviceChanged -
Client.getLocalAudioStats -
Client.getRemoteAudioStats -
Client.getLocalVideoStats -
Client.getRemoteVideoStats
Deprecated
- The
LocalTrack.getStatsandRemoteTrack.getStatsmethods. Use theClient.getLocalAudioStats,Client.getRemoteAudioStats,Client.getLocalVideoStatsandClient.getRemoteVideoStatsmethods 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 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. -
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
setEnabledmethod changes media input behaviors, so it is an asynchronous operation and returns the result through thePromiseobject.
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
optimizationModeproperty of the video track created by calling createScreenVideoTrack is set as"detail"by default.
Improvements
-
Redesigns the
withAudioparameter inAgoraRTC.createScreenVideoTrack. In addition toenableanddisable, you can also setwithAudioasauto. In this setting, the SDK shares the audio, dependent on whether the browser supports this function. -
Does not allow setting the
withAudioparameter as"all"any more to avoid code repetition. As of v4.0.0, you can only setwithAudioas"audio"or"video". This change involves the following APIs: -
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. -
Periodic video blur when sharing the screen in
"rtc"mode. -
Occasional publishing failure when calling
publishandunpublishfrequently. -
The
Client.on("network-quality")callback was inaccurate.
API changes
Added
-
The
Client.localTracksinterface -
The
LocalTrack.setEnabledmethod -
The
optimizationModeproperty inCameraVideoTrackInitConfig,ScreenVideoTrackInitConfig, andCustomVideoTrackInitConfiginterfaces
Updated
-
Adds the value of
autoto the withAudio parameter inAgoraRTC.createScreenVideoTrack. -
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
LocalVideoTrackStats.muteStateproperty -
The
RemoteVideoTrackStats.muteStateproperty -
The
RemoteAudioTrackStats.muteStateproperty
Deleted
-
The
Client.on("user-mute-updated")callback -
The
LocalTrack.setMutemethod -
The
AgoraRTCRemoteUser.audioMutedproperty -
The
AgoraRTCRemoteUser.videoMutedproperty -
The
LocalTrack.getUserIdmethod
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
If your target platform is Android 12 or higher, add the android.permission.BLUETOOTH_CONNECT permission to the AndroidManifest.xml file of the Android project to enable the Bluetooth function of the Android system.
Known issues
v4.6.3
Released on February 12, 2026.
Issues fixed
This release fixed the following issues:
- In audio/video interaction scenarios with the beauty effects enabled, the sender's screen turned black occasionally or the app crashed on certain device models.
- The app occasionally crashed in audio/video interaction scenarios.
v4.6.2
Released on January 19, 2026.
New features
Included in this release:
-
App-level screen sharing support on Android
Starting from Android 14, the system allows users to choose between sharing the full screen or a single app during screen sharing, enhancing privacy and multitasking. This version adapts to this system capability by adding support for sharing a single app in addition to full-screen sharing. The new
onLocalVideoEventcallback reports local video events, especially those related to screen sharing. -
New permission granted callback on Android
The
onPermissionGrantedcallback helps confirm permission status in screen sharing scenarios. You can use this callback to determine whether the user granted Camera or Screen permission. -
Support for getting audio buffer delay
To address the issue where the main vocal and background accompaniment may be out of sync in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module to get the millisecond-level audio buffer delay when playing media files.
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
onNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Adds error codes
ERR_PCMSEND_FORMAT (200)andERR_PCMSEND_BUFFEROVERFLOW (201)to report PCM data transmission errors. - Improves video capture performance in low-light or dark environments on some devices, resulting in brighter images.
- The Media Recorder module now supports recording audio from Media Player and Audio Mixing.
- Adds error codes
Compatibility changes
This release introduces the following compatibility changes:
-
Removes
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieve theremoteUiddirectly from theonEncodedVideoFrameReceivedcallback. Update your integration logic accordingly. -
Audio Spectrum removed from Lite and Voice packages
To further reduce SDK package size, this version removes the Audio Spectrum feature from the Lite and Voice SDK packages. If you need the Audio Spectrum feature, please integrate the Full package.
-
Decoder plugins built into the SDK
The relevant decoder plugins are now built into the SDK to ensure overall decoding compatibility.
Issues fixed
This release fixed the following issues:
- On certain devices (such as Redmi 14C), video from the sender occasionally displayed black borders on the receiver side during audio and video engagements.
- The
bitratesetting in thestartLocalTranscoderAPI did not take effect. - On some emulators (such as LDPlayer 9), electrical noise was occasionally heard on the receiver side during audio and video engagements.
- In live PK scenarios, when the audience enabled independent rendering of composite video streams, the rendered user video displayed abnormally.
- During audio and video engagements, after calling
playEffectlocally, if a remote user switched to broadcaster and started speaking, electrical noise was occasionally heard locally. - On some vivo devices running Android 15, the app crashed when the camera was turned off.
- When a user joined a channel as a broadcaster with the audio scenario set to
AUDIO_SCENARIO_CHATROOMand did not publish local audio, then played a music file usingstartAudioMixing, and switched the audio scenario toAUDIO_SCENARIO_GAMESTREAMING, noise was occasionally heard. - The app occasionally became unresponsive (ANR) during audio and video engagements.
- Occasional crashes occurred during audio and video engagements.
- Beauty effects did not work in some scenarios.
v4.6.1
Released on November 26, 2025.
This version of the SDK uses v1.3.0 of the libaosl.so library.
Issues fixed
This version fixes the following issues:
- Users on the receiving end occasionally saw a black screen during audio and video communication.
- The app occasionally crashed during audio and video communication when connected to a network via VPN.
- Distorted images appeared when playing 4K resolution video sources using the media player.
- The app occasionally crashed during audio and video communication.
- In multi-channel scenarios, the app occasionally crashed during audio and video communication with other devices.
- When using the Voice SDK, the
onRtcStatscallback reported amemoryAppUsageRatiovalue that was always0.
v4.6.0
Released on August 26, 2025.
The version of the libaosl.so library in the v4.6.0 SDK is 1.3.0.
Compatibility changes
This version includes SDK behavior changes, API deprecations, and deletions. To ensure your app functions correctly, update your code after upgrading to this version.
For details on deprecated and deleted APIs in each version, see the API Sunset Notice.
-
Deprecation of direct CDN streaming APIs
Deprecates the APIs related to direct CDN streaming, which will be removed in a future release. Agora recommends using Media Push instead.
setDirectCdnStreamingAudioConfigurationsetDirectCdnStreamingVideoConfigurationstartDirectCdnStreamingstopDirectCdnStreamingupdateDirectCdnStreamingMediaOptionsDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDirectCdnStreamingStateDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
Deprecates the APIs for the virtual metronome feature, which will be removed in a future release.
startRhythmPlayerconfigRhythmPlayeronRhythmPlayerStateChanged
-
Deprecation of watermark APIs
Deprecates the old watermark APIs. Agora recommends using the new watermark APIs introduced in this version.
addVideoWatermark [2/2]addVideoWatermarkEx
-
Deletion of redundant APIs
Removed the following redundant APIs and parameters:
setLocalPublishFallbackOptiononLocalPublishFallbackToAudioOnlyonDownlinkNetworkInfoUpdatedonWlAccStatsWlAccStatsonWlAccMessageenableWirelessAccelerate
-
Changes to int UID and string UID mapping
- Before v4.6.0: If you used
registerLocalUserAccountto register a string UID (for example,"aa") and obtain an int UID (for example,123), joining a channel with this int UID automatically mapped it to the original string UID ("aa"). - From v4.6.0: The SDK no longer automatically maps an int UID to the original string UID. If you need to join the channel with the original string UID, call the join method directly with the string UID. After upgrading, review and update your app logic to ensure users join the channel with the expected identity.
- Before v4.6.0: If you used
-
Added domain whitelist
If you have upgraded from a previous SDK version to v4.6.0 and are using the domain whitelist feature (set
mdomainLimittotrueinRtcEngineConfig), add the following domains to the whitelist to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
New features
-
Simulcasting multi-bitrate video streams (Beta)
Added support for sending multiple video streams of different resolutions from a single video source, including in multi-channel scenarios. You can now configure up to four layers: one high-resolution stream and up to three lower-resolution streams. Use configuration options to define resolution, bitrate, and whether to automatically reduce the number of streams when network or device performance drops. Subscribers can choose which stream to receive based on their network conditions. This feature helps developers deliver smooth experiences in scenarios such as conferences, large classes, and interactive live streaming, even when network conditions are poor.
-
Multipath network transmission
Introduced multipath transmission for devices with multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature improves stability in challenging network environments, including in-vehicle systems, IoT, trains, and highways. Enable it by setting
enableMultipathinChannelMediaOptionstotrue.- Dynamic mode: Dynamically selects the optimal path based on network conditions. Suitable for scenarios sensitive to data consumption but requiring high experience quality, such as meetings and educational settings. You can optionally set
preferMultipathTypeto prioritize a path type; if not set, all paths have the same default weight. - Duplicate mode: Sends data simultaneously over all available paths (such as LAN, Wi-Fi, and cellular) to eliminate the impact of poor network conditions. Suitable for scenarios not sensitive to data consumption but with extreme stability requirements, such as outdoor broadcasting and parallel control. This mode incurs additional costs.
Configure uplink and downlink modes separately with
uplinkMultipathModeanddownlinkMultipathMode. Monitor performance with theonMultipathStatscallback, which reports per-path statistics including data consumption. - Dynamic mode: Dynamically selects the optimal path based on network conditions. Suitable for scenarios sensitive to data consumption but requiring high experience quality, such as meetings and educational settings. You can optionally set
-
Video quality scoring
Added the
mosValuemember toRemoteVideoStatsto report a score from 1 (extremely poor video quality with severe blurring) to 5 (excellent video quality with a clear image and no artifacts) for received video quality. This enables real-time monitoring of the subjective quality of remote video streams and helps dynamically adjust video parameters for quality monitoring and alerting. Contact support@agora.io to enable this feature. -
Support for adding multiple watermarks
Deprecates the old
addVideoWatermark [2/2]andaddVideoWatermarkExmethods and introduced new versions of these methods that support multiple watermarks with IDs and layering order. UseremoveVideoWatermarkto remove a specific watermark. -
Asynchronous engine destruction
Added the
destroy [2/2]method with an option for asynchronous destruction, triggering theonEngineReleasedcallback. -
Token renewal result callback
Added the
onRenewTokenResultcallback andRENEW_TOKEN_ERROR_CODEfor handling the result ofrenewToken. -
Advanced beauty (Beta)
Introduced a brand-new advanced beauty feature, delivering a powerful yet easy-to-use beautification solution.
-
Precision beauty effects
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, slimming face, enlarging eyes, narrowing nose) or one-click natural effects via presets.
- Style makeup: Offers rich effects including eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancement: Includes professional skin optimizations such as teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
-
Unified and simple API Manage all beauty, makeup, and filter functions through three core nodes —
BEAUTY,STYLE_MAKEUP, andFILTER— usingIVideoEffectObjectfor unified parameter setup and lifecycle control. -
Ready-to-use presets Integrates multiple out-of-the-box style templates (for example, "Natural Beauty," "Senior Makeup," "Cool White Filter") for instant polished results.
-
Dynamic parameter control Enables real-time reading and modification of granular parameters (for example, smoothing strength, lipstick type) via key-value pairs, with support for saving custom configurations and resetting defaults.
-
Local resource guarantee All beauty resources (effects, filters, makeup) are packaged as local bundle files, ensuring stability and reliability.
-
-
Other new features
- Added
setPlaybackAudioFrameBeforeMixingParametersto configure the format of raw audio frames returned inonPlaybackAudioFrameBeforeMixing, including sample rate, number of channels, and the number of samples per callback. - Added
preloadEffectEx [1/2]for preloading audio effects in a specific channel. Supports both local and online files, enabling faster playback later and suitable for multi-channel scenarios. - Added
playEffectEx [1/2]for playing audio effects in a specific channel with advanced controls such as loop count, pitch, spatial position, volume, whether to publish to the channel, and starting playback position. - Added the
positionmember inContentInspectModuleto choose the capture point for screenshot uploads, allowing capture from raw video data or before/after effects processing. - Added the
screenColorTypemember toSegmentationPropertyfor specifying or detecting background screen color (green, blue, or auto-detected) to improve virtual background segmentation accuracy.
- Added
Improvements
- Added support for G.711 and G.722 audio codecs when interoperating with the Web SDK to improve cross-platform audio compatibility and clarity.
- Optimized the plugin loading mechanism to automatically load the SDK's dynamic library plugins for Android apps developed with C++.
- Improved video clarity in screen sharing scenarios involving documents.
Issues fixed
This version fixes the following issues:
- Online audio effect playback restarted from the beginning when
seekwas called to change playback position. - Occasional echoes in media volume mode when a broadcaster published a microphone audio stream while playing an audio effect with
playEffect [2/2]and music withstartAudioMixing [2/2]. - Missing media metadata observer callback when
registerMediaMetadataObserverwas called aftersetExternalVideoSource(Android, iOS). - Occasional crashes (Android, iOS).
- Incorrect relay state (
RELAY_STATE_FAILURE) and error (RELAY_ERROR_SERVER_ERROR_RESPONSE) reported after a specific join/relay sequence usingjoinChannelEx. - Occasional audio noise when using Bluetooth or wired headphones after setting
AUDIO_SCENARIO_CHATROOM(Android).
v4.5.2
Released on April 22, 2025.
Note
The libaosl.so library version in Video SDK v4.5.2 is 1.2.13.
Issues fixed
This release fixes the following issues:
- While playing a multi-track media file, noise was heard when adjusting the audio pitch using
setAudioPitch. - When the host called
createCustomAudioTrackwithtrackTypeset toAUDIO_TRACK_DIRECT, pushed custom audio frames usingpushExternalAudioFrame, and then calledplayEffect[2/2] to play audio effects, audience members heard noise. - Apps using the SDK occasionally experienced UI lag caused by main thread blocking during audio and video interactions.
- When playing an MP4 file with EAC3 audio encoding using
startAudioMixing, sometimes no sound was heard. - Memory leaks occurred after leaving the channel and stopping video rendering.
- After calling
setCameraFocusPositionInPreviewto manually set the focus position, the focus position was inaccurate when the camera captured a zoomed-in image. - When calling
setExternalMediaProjectionto configure an externalMediaProjectioninstance, the transmitted video stream resolution (width/height) did not adjust dynamically when the screen orientation changed between landscape and portrait modes. - Calling
openWithMediaSourceand settingisLiveSourcetotrueto play a video stream caused playback failure. - When attempting to open a non-existent local media file, the
onPlayerSourceStateChangedcallback did not reportPLAYER_STATE_FAILEDas expected. - When the sender transmitted multi-channel encoded audio, the receiver occasionally experienced noise.
- When opening two different media resources consecutively using the media player, the second call unexpectedly triggered the
onPlayerInfoUpdatedcallback with information from the first media resource. - After enabling user volume indication with
enableAudioVolumeIndication, theonAudioVolumeIndicationcallback returned a local user volume of 0 for both local and remote users. - The app occasionally froze during audio and video communication.
- Calling
setExtensionPropertywith the key"makeup_options"to apply makeup effects failed. - In low-light environments, the preview image appeared darker on certain device models during audio and video communication.
- On 21 ultra-wide displays, setting a high resolution (such as 3840×2160) during screen sharing caused the shared image to appear cropped in both the local preview and on the receiver’s screen.
- When the app called
enableVideoImageSourceto enable the video image source feature, streaming succeeded, but occasionallyonVideoPublishStateChangeddid not return the expected results. - In multi-channel scenarios, if the app called
setupRemoteVideoExbefore successfully callingjoinChannelEx, the first frame of the remote video occasionally experienced significant delay. - After a failed attempt to join a channel, trying again without first calling
leaveChannel [1/2]occasionally caused a crash.
v4.5.1
Released on March 4, 2025.
Note
The libaosl.so library version in Video SDK v4.5.1 is 1.2.13.
New features
AI conversation scenario
This version introduces the AUDIO_SCENARIO_AI_CLIENT audio scenario option, specifically designed for interacting with conversational AI agents powered by the Conversational AI Engine.
This scenario optimizes audio transmission algorithms based on the characteristics of AI-generated voices, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. The optimization enhances conversation continuity and reliability across various network environments.
Issues fixed
This release fixes the following issues:
- Apps integrating the Agora SDK with
targetSdkVersionset to 34 crashed when attempting to enable screen sharing for the first time on Android 14. - When joining multiple channels simultaneously and calling the
takeSnapshotEx [1/2]method to capture local video stream snapshots in each channel, the screenshot for the first channel failed. - After using the
pausemethod to pause playback, callingseekto move to a specific position, and then callingplay, the Media Player resumed from the paused position instead of the newly specified position. - When using the Media Player, the file path returned by
getPlaySrc [1/2]did not update after callingswitchSrcto switch to a new media resource. - When using Bluetooth headphones on certain device models for audio and video interactions, adjusting the phone volume occasionally changed the media volume instead of the Bluetooth volume.
- During audio and video interactions, the local user sometimes experienced a black screen when viewing remote video streams.
- On specific device models, calling
setCameraExposureFactorto set the camera's exposure coefficient at a particular angle sometimes caused the video screen to darken when the device was moved to another angle. - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption.
- In interactive live streaming, after joining a channel as an audience member using a
stringuser ID, the audio and video occasionally became unsynchronized. - Plugins sometimes malfunctioned when using AI noise suppression and AI echo cancellation plugins simultaneously.
v4.5.0
Released on November 27, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
As of v4.5.0, both Video SDK and Signaling SDK (v2.2.0 and above) include the libaosl.so library. If you manually integrate Video SDK via CDN and also use Signaling SDK, delete the earlier version of the libaosl.so library to avoid conflicts. The libaosl.so library version in Video SDK v4.5.0 is 1.2.13.
-
Changes in strong video noise suppression
The
VIDEO_DENOISER_LEVEL_STRENGTHenumeration is removed.Instead, after enabling video noise suppression by calling
setVideoDenoiserOptions [1/2], you can call thesetBeautyEffectOptions [1/2]method to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions [1/2].Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions [1/2]. -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
COMPRESSION_PREFERENCEenumeration class, a newPREFER_COMPRESSION_AUTO(-1) enumeration is added, replacing the originalPREFER_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenPREFER_LOW_LATENCYorPREFER_QUALITYbased on your video scene settings to achieve the best user experience. - In the
DEGRADATION_PREFERENCEenumeration class, a newMAINTAIN_AUTO(-1) enumeration is added, replacing the originalMAINTAIN_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenMAINTAIN_FRAMERATE,MAINTAIN_BALANCED, orMAINTAIN_RESOLUTIONbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
-
16 KB memory page size
Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in Support 16 KB page sizes. To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.
New features
-
Live show scenario
This version adds the
APPLICATION_SCENARIO_LIVESHOW(3)(Live Show) enumeration toVideoScenario. You can callsetVideoScenarioto set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to callenableInstantMediaRendering) for better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (for example, screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptions [1/2]method. You can pass a cube map file (.cube) in theconfigparameter to apply custom filter effects such as whitening, vivid, cool, black and white, and others. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile to quickly apply a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- When using the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
External MediaProjection
This version introduces the
setExternalMediaProjectionmethod, which allows you to set an externalMediaProjectionand replace theMediaProjectionapplied by the SDK.If you have the capability to apply for
MediaProjectionon your own, you can use this feature to achieve more flexible screen capture. -
EGL context
This version introduces the
setExternalRemoteEglContextmethod, which is used to set the EGL context for rendering remote video streams. When using the Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, resulting in unified EGL context management. -
Color space settings
This version adds
getColorSpaceandsetColorSpacetoVideoFrame. You can usegetColorSpaceto obtain the color space properties of the video frame and usesetColorSpaceto customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing.
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshot [2/2]andtakeSnapshotEx [2/2]methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency.
- This version optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report thePLAYER_EVENT_SWITCH_ERRORevent, indicating that an error has occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
Bug fixes
This version fixes the following issues:
- When the video source of the sender is in the JPEG format, the frame rate on the receiving end occasionally falls below expectations.
- Occasional noise and stuttering when playing music resources from the music content center.
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
onAudioVolumeIndicationcallback was incorrect. - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
muteRemoteVideoStream(uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality stream. - Calling
startAudioMixing [1/2]and then immediately callingpauseAudioMixingto pause the music file playback does not take effect. - Occasional crashes during audio and video interaction.
v4.4.1
Released on August 8, 2024.
Issues fixed
This release fixes the issue where io.agora.rtc:full-rtc-basic:4.4.0 and io.agora.rtc:voice-rtc-basic:4.4.0 were not working properly on Maven Central due to an upload error.
v4.4.0
v4.4.0 was released on August 5, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to the SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
Starting from v4.4.0, the SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See API Sunset Notice.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds new corresponding callbacks that contain context information (see table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onEventonEventWithContextonStartedonStartedWithContextonStoppedonStoppedWithContextonErroronErrorWithContext -
This version removes the
buffer,uid, andtimeStampMsparameters of theonMetadataReceivedcallback. You can get metadata-related information, includingtimeStampMs(timestamp of the sent data),uid(user ID), andchannelId(channel name) through the newly-addedmetadataparameter.
New features
-
Lite SDK
Starting from this version, Agora introduces Lite SDK, which includes only the basic audio and video capabilities and partially cuts advanced features, effectively reducing the app size after integrating the SDK.
- Lite SDK supports manual integration or third-party repository integration.
- For information on dynamic libraries included in the Lite SDK, see App size optimization.
- For the list of APIs supported by Lite SDK, see Lite SDK API.
- For the limitations and precautions when using the Lite SDK to play media files, refer to Which audio file formats does the Agora Video SDK support?
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
VideoFrameandAgoraVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.AgoraVideoFrameadds thefillAlphaBuffermember. For BGRA or RGBA formatted video data, it sets whether to automatically extract the Alpha channel data and fill it intoalphaBuffer.VideoFrameandAgoraVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AdvanceOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callsetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatotrue. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on.
Improvements
-
Adaptive hardware decoding support
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the parameter types of the following APIs. These improvements enhance code readability, reduce potential errors, and facilitate future maintenance.
- Deprecates the
optionparameter of typeintinsetRemoteSubscribeFallbackOption[1/2], and adds an overloaded functionsetRemoteSubscribeFallbackOption[2/2] with theoptionparameter of typeStreamFallbackOptions. - Deprecates the
streamTypeparameter of typeintinsetRemoteVideoStreamType[1/2],setRemoteDefaultVideoStreamType[1/2], andsetRemoteVideoStreamTypeEx[1/2], and adds overloaded functionssetRemoteVideoStreamType[2/2],setRemoteDefaultVideoStreamType[2/2], andsetRemoteVideoStreamTypeEx[2/2] with thestreamTypeparameter of typeVideoStreamType.
- Deprecates the
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - Deprecates redundant enumerations
CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUTandCLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED.
- Optimizes the parameter types of the following APIs. These improvements enhance code readability, reduce potential errors, and facilitate future maintenance.
Issues fixed
This release fixes the following issue:
- Audio playback failed when pushing external audio data using
pushExternalAudioFrameand the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz.
v4.3.2
v4.3.2 was released on June 4, 2024.
Improvements
-
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
-
The Agora media player now supports playing MP4 files with an Alpha channel.
-
The Agora media player now fully supports playing music files located in the
/assets/directory or from URI starting withcontent://.
Issues fixed
This version fixed the following issues:
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app crashed when opening the app and starting screen sharing after the first installation or system reboot.
- Local audio capture failed after joining a channel while answering a system phone call and hanging up, preventing remote users from hearing any sound.
- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end (Android).
- The app occasionally crashed when remote users left the channel.
- The values of
cameraDirectionandfocalLengthTypereturned by queryCameraFocalLengthCapability could not be read directly.
v4.3.1
v4.3.1 was released on April 29, 2024.
Compatibility changes
To ensure parameter naming consistency, this version renames channelName to channelId and optionalUid to uid in joinChannel [1/2]. Update your app's code after upgrading to this version to ensure normal project operations.
New features
-
Wide and ultra-wide cameras
To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call queryCameraFocalLengthCapability to check the device's focal length capabilities, and then call setCameraCapturerConfiguration and set
cameraFocalLengthTypeto the supported focal length types, including wide and ultra-wide. -
Multi-camera capture
This release introduces additional functionalities for Android camera capture:
- Support for capturing and publishing video streams from the third and fourth cameras:
- New enumerators
VIDEO_SOURCE_CAMERA_THIRD(11) andVIDEO_SOURCE_CAMERA_FOURTH(12) are added to VideoSourceType, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling startCameraCapture. - New parameters
publishThirdCameraTrackandpublishFourthCameraTrackare added to ChannelMediaOptions. Set these parameters totruewhen joining a channel with joinChannel [2/2] to publish video streams captured from the third and fourth cameras.
- New enumerators
- Support for specifying cameras by camera ID:
- A new parameter
cameraIdis added to CameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling startCameraCapture with the specificcameraId. - A new method switchCamera [2/2] supports switching cameras by
cameraId, allowing apps to dynamically adjust camera usage during runtime based on available cameras.
- A new parameter
- Support for capturing and publishing video streams from the third and fourth cameras:
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREandENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILUREenumerations. -
Local video rendering
This version adds the following members to VideoCanvas to support more local rendering capabilities:
surfaceTexture: Set a native AndroidSurfaceTextureobject as the container providing video imagery, then use SDK external methods to perform OpenGL texture rendering.enableAlphaMask: This member enables the receiving end to initiate Alpha mask rendering. Alpha mask rendering can create images with transparent effects or extract human figures from video content.
-
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode, the SDK defaults to the following behaviors:
- The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization of local video status callbacks
This version introduces the following enumerations, allowing you to understand more about the reasons behind changes in local video status through the onLocalVideoStateChanged callback:
LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT(14): Video capture is interrupted due to the camera being occupied by another app or the app moving to the background.LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR(15): Video capture device errors, possibly due to camera equipment failure.
-
Camera capture improvements
Improvements have been made to the video processing mechanism of camera capture, reducing noise, enhancing brightness, and improving color, making the captured images clearer, brighter, and more realistic.
-
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure, especially around the fingers, are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Enhanced performance and stability of the local compositing feature, reducing its CPU usage.
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- New chorus effect
ROOM_ACOUSTICS_CHORUSis added to enhance the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- After joining a channel and calling disableAudio, audio playback did not immediately stop.
- Broadcasters using certain models of devices under speaker mode experienced occasional local audio capture failures when switching the app process to the background and then back to the foreground, causing remote users to not hear the broadcaster's audio.
- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash.
- In use-cases using camera capture for local video, when the app was moved to the background and disableVideo or stopPreview was called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground.
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- The
surfaceTextureandenableAlphaMaskmembers in VideoCanvas LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPTLOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR- registerFaceInfoObserver
- IFaceInfoObserver
- onFaceInfo
- MediaSourceType adds
SPEECH_DRIVEN_VIDEO_SOURCE - VideoSourceType adds
VIDEO_SOURCE_SPEECH_DRIVEN - EncryptionConfig adds
datastreamEncryptionEnabled ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE- RemoteAudioStats adds
e2eDelay ERR_DATASTREAM_DECRYPTION_FAILEDROOM_ACOUSTICS_CHORUSis added, enhancing the spatial presence of vocals in chorus use-cases.- getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- queryCameraFocalLengthCapability
- AgoraFocalLengthInfo
- CAMERA_FOCAL_LENGTH_TYPE
- CameraCapturerConfiguration adds a new member
cameraFocalLengthType - VideoSourceType adds the following enumerations:
VIDEO_SOURCE_CAMERA_THIRD(11)VIDEO_SOURCE_CAMERA_FOURTH(12)
- ChannelMediaOptions adds the following members:
publishThirdCameraTrackpublishFourthCameraTrackpublishLipSyncTrack
- CameraCapturerConfiguration adds a new member
cameraId - CAMERA_DIRECTION adds
CAMERA_EXTRA(2) - switchCamera [2/2]
EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS
v4.3.0
v4.3.0 was released on February 22, 2024.
Compatibility changes
This release has optimized the implementation of some functions, which involved renaming or deletion of some APIs. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Raw video data callback behavior change
As of this release, the callback processing related to raw video data changes from the previous fixed single thread to a random thread, meaning that callback processing can occur on different threads. Due to limitations in the Android system, OpenGL must be tightly bound to a specific thread. Therefore, Agora suggests that you make one of the following modifications to your code:
- (Recommended) Use the
TextureBufferHelperclass to create a dedicated OpenGL thread for video pre-processing or post-processing (for example, image enhancement, stickers, and so on). - Use the
eglMakeCurrentmethod to associate the necessary OpenGL context for each video frame with the current thread.
- (Recommended) Use the
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name onLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasononPlayerStateChangederrorreasononRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class DirectCdnStreamingErrorDirectCdnStreamingReasonMediaPlayerErrorMediaPlayerReasonMusicContentCenterStatusCodeMusicContentCenterStateReasonNote: For specific renaming of enumerations, refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelay
startOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Custom video source
Since this release,
pushExternalVideoFrameEx[1/2] andpushExternalVideoFrameEx[2/2] are renamed topushExternalVideoFrameById[1/2] andpushExternalVideoFrame[1/2], and are migrated fromRtcEngineExtoRtcEngine. -
Audio route
Since this release,
RouteBluetoothis renamed toAUDIO_ROUTE_BLUETOOTH_DEVICE_HFP, representing a Bluetooth device using the HFP protocol. TheAUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP(10) is added to represent a Bluetooth device using the A2DP protocol. -
The state of the remote video
To make the name of the enumeration easier to understand, this release changes the name of the enumeration from
REMOTE_VIDEO_STATE_PLAYINGtoREMOTE_VIDEO_STATE_DECODING, while the meaning of the enumeration remains unchanged. -
Reasons for local video state changes
The
LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILUREenumeration has been changed toLOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT. -
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
-
Removing
IAgoraEventHandlerinterfaceThis release deletes the
IAgoraEventHandlerinterface class. All callback events that were previously managed under this class are now processed through theIRtcEngineEventHandlerinterface class.
New features
-
Custom mixed video layout on the receiving end
To facilitate customized layout of mixed video stream at the receiver end, this release introduces the onTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate
viewfor rendering the sub-video stream (distinguished bysubviewUid) in the mixed video stream when calling the setupRemoteVideo method, achieving a custom video layout effect.When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time.
Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video use-case, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end.
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo to set the first view: Set the
positionparameter toVIDEO_MODULE_POSITION_POST_CAPTURER_ORIGIN(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo to set the second view: Set the
positionparameter toVIDEO_MODULE_POSITION_POST_CAPTURERinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo to set the first view: Set the
-
Query device score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaPlayerSource. -
Audio playback device test
This release introduces the startPlaybackDeviceTest method to allow you to test whether your local audio device for playback works properly. You can specify the audio file to be played through the
testAudioFilePathparameter and see if your audio device works properly. After the test is completed, you need to call the newly added stopPlaybackDeviceTest method to stop the test. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- setPlayerOption and setPlayerOptionString: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 FPS) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Optimization of video pre-processing methods
This release adds overloaded methods with the
sourceTypeparameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing insourceType(for example, applying on a custom video capture media source): -
Other improvements
This release also includes the following improvements:
- Adds
codecTypein VideoEncoderConfiguration to set the video encoding type. - Adds
allowCaptureCurrentAppmember in AudioCaptureParameters, which is used to set whether to capture audio from the current app during screen sharing. The default value of this member istrue, which means it collects the audio from the current app by default. In certain use-cases, the shared screen audio captured by the app may cause echo on the remote side due to signal delay and other reasons. Agora suggests setting this member asfalseto eliminate the remote echo introduced during the screen sharing process. - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling
setLocalAccessPointto resolve domain names in complex network environments. - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
- Adds
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the onLocalVideoStats callback is 0, which is not as expected. - In an online meeting use-case, occasional audio freezes occurred when the local user was listening to remote users.
API changes
Added
- onTranscodedStreamLayoutInfo
- VideoLayout
- The
subviewUidanduidmembers inVideoCanvas - The
codecTypemember in VideoEncoderConfiguration - The
allowCaptureCurrentAppmember in AudioCaptureParameters - enableCustomAudioLocalPlayback
- selectMultiAudioTrack
- onPlayerCacheStats
- onPlayerPlaybackStats
- PlayerPlaybackStats
- startPlaybackDeviceTest
- stopPlaybackDeviceTest
- The
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats - queryDeviceScore
- The
CUSTOM_VIDEO_SOURCEenumeration in MediaSourceType - setBeautyEffectOptions [2/2]
- setLowlightEnhanceOptions [2/2]
- setVideoDenoiserOptions [2/2]
- setColorEnhanceOptions [2/2]
- enableVirtualBackground [2/2]
- The
AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DPenumeration
Modified
pushExternalVideoFrameEx[1/2] andpushExternalVideoFrameEx[2/2] are renamed topushExternalVideoFrameById[1/2] andpushExternalVideoFrameById[2/2], and are migrated fromRtcEngineExtoRtcEngineREMOTE_VIDEO_STATE_PLAYINGenumeration name changed toREMOTE_VIDEO_STATE_DECODINGROUTE_BLUETOOTHis renamed asAUDIO_ROUTE_BLUETOOTH_DEVICE_HFP- All
ERRORfields in the following enumerations are changed toREASON:LOCAL_AUDIO_STREAM_ERROR_OKLOCAL_AUDIO_STREAM_ERROR_FAILURELOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSYLOCAL_AUDIO_STREAM_ERROR_CAPTURE_FAILURELOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURELOCAL_VIDEO_STREAM_ERROR_OKLOCAL_VIDEO_STREAM_ERROR_FAILURELOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSYLOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURELOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORTLOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUNDPLAYER_ERROR_NONEPLAYER_ERROR_INVALID_ARGUMENTSPLAYER_ERROR_INTERNALPLAYER_ERROR_NO_RESOURCEPLAYER_ERROR_INVALID_MEDIA_SOURCEPLAYER_ERROR_UNKNOWN_STREAM_TYPEPLAYER_ERROR_OBJ_NOT_INITIALIZEDPLAYER_ERROR_CODEC_NOT_SUPPORTEDPLAYER_ERROR_VIDEO_RENDER_FAILEDPLAYER_ERROR_INVALID_STATEPLAYER_ERROR_URL_NOT_FOUNDPLAYER_ERROR_INVALID_CONNECTION_STATEPLAYER_ERROR_SRC_BUFFER_UNDERFLOWPLAYER_ERROR_INTERRUPTEDPLAYER_ERROR_NOT_SUPPORTEDPLAYER_ERROR_TOKEN_EXPIREDPLAYER_ERROR_UNKNOWNRTMP_STREAM_PUBLISH_ERROR_OKRTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENTRTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWEDRTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUTRTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_TOO_OFTENRTMP_STREAM_PUBLISH_ERROR_REACH_LIMITRTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZEDRTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUNDRTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTEDRTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTERRTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAMRTMP_STREAM_PUBLISH_ERROR_NET_DOWNRTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGERTMP_STREAM_UNPUBLISH_ERROR_OK
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExonChannelMediaRelayEvent
v4.2.6
v4.2.6 was released on November 17, 2023.
Issues fixed
This release fixed the following issues:
-
Issues occurring when using Android 14:
- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users needed to confirm recording the screen in the pop-up window.
- When integrating the SDK, setting the Android
targetSdkVersionto34could cause screen sharing to be unavailable or even the app to crash. - Calling
startScreenCapturewithout sharing video, that is, settingcaptureVideotofalse, and then callingupdateScreenCaptureParametersto share video, that is, settingcaptureVideototrue, resulted in a frozen shared screen on the receiving end. - When screen sharing in a landscape mode, the shared screen seen by the audience was divided into two parts: One side of the screen was compressed, and the other side was black.
-
In live streaming use-cases, the video on the audience end was occasionally distorted.
-
In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.3
v4.2.3 was released on October 11, 2023.
Compatibility changes
This version optimizes the management of Texture Buffer in the SDK capture and custom video capture use-cases, effectively eliminating the potential for frame loss and crashes. Starting from this version, the texture format of the TextureBuffer type no longer includes the OES format, only the RGB format. Add adaptation to the I420 and RGB texture formats when processing video data.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_TYPE_IMAGE_MODERATIONenumeration is added in thetypeparameter ofContentInspectModule, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
enableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code-4:ERR_NOT_SUPPORTEDis returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform).
-
Screen sharing use-case optimization
This release also optimizes the video encoding configuration in screen sharing use-cases. When users customize the
widthandheightproperties of the video, the SDK rounds down the actual encoding resolution while maintaining the aspect ratio of the video and the screen, ensuring that the final encoding resolution does not exceed the user-defined encoding resolution, thereby improving the accuracy of billing for screen sharing streams.
Other improvements
This release includes the following additional improvements:
- Optimizes the management method of Texture Buffer for SDK capture and custom video capture use-cases, effectively eliminating frame dropping and crash risks.
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- When using the H.265 encoding mode, when a Web client joined the interactivity, it caused a redundant
onUserEnableLocalVideocallback on the native side: when the host calledenableLocalVideo (true), the receiving end first received aonUserEnableLocalVideocallback (withenabledasfalse) before receiving aonUserEnableLocalVideocallback (withenabledastrue). - Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffect [2/2]method to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - When the host called the
startAudioMixing [2/2]method to play music, sometimes the host couldn't hear the music while the remote users could hear it. - Occasional crashes occurred on certain Android devices.
- Calling
takeSnapshotExonce receives theonSnapshotTakencallback for multiple times. - In channels joined by calling
joinChannelExexclusively, callingsetEnableSpeakerphoneis unable to switch audio route from the speaker to the headphone.
API changes
Added
enableContentInspectExCONTENT_INSPECT_TYPE_IMAGE_MODERATIONintypeofContentInspectModule.serverConfiginContentInspectConfigisFeatureAvailableOnDeviceFeatureType
v4.2.2
v4.2.2 was released on july 27, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannel[1/2]andpreloadChannel[2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display.
Improvements
-
Improved camera capture effect
Since this release, camera exposure adjustment is supported. This release adds
isCameraExposureSupportedto query whether the device supports exposure adjustment andsetCameraExposureFactorto set the exposure ratio of the camera. -
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- To improve the switching experience between multiple audio routes, this release adds the
setRouteInCommunicationModemethod. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode (MODE_IN_COMMUNICATION). - The SDK automatically adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORTenumeration has been added to theonRemoteVideoStateChangedcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically.
API changes
Added
setCameraExposureFactorisCameraExposureSupportedpreloadChannel[1/2]preloadChannel[2/2]updatePreloadChannelTokensetRouteInCommunicationModeCodecCapLevelsVideoCodecCapLevelbackgroundColorinVideoCanvascodecLevelsinCodecCapInfoREMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- In screen sharing use-cases, some Android devices experienced choppy video on the receiving end.
v4.2.0
v4.2.0 was released on May 24, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video data acquisition
The onCaptureVideoFrame and onPreEncodeVideoFrame callbacks are added with a new parameter called sourceType, which is used to indicate the specific video source type.
2. Channel media options
publishCustomAudioTrackEnableAecinChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinChannelMediaOptionsis renamed topublishCustomAudioTrackId.
3. Miscellaneous
onApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.enableDualStreamMode[1/2] andenableDualStreamMode[2/2] are deprecated. UsesetDualStreamMode[1/2] andsetDualStreamMode[2/2] instead.startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode to balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background function. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrate is required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the onLocalVideoTranscoderError callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the onLocalVideoTranscoderError callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
Improvements
1. Improved voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share
This release adds the queryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the setScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Improved compatibility with audio file types
As of v4.2.0, you can use the following methods to open files with a URI starting with content://:
startAudioMixing[2/2]playEffect[3/3]open[2/2]openWithMediaSource
4. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
5. Multi-camera capture
This release introduces startCameraCapture. By calling this method multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras need to be connected.
6. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
7. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
Issues fixed
This release fixed the following issues:
- Occasional crashes occurred on Android devices when users joined or left a channel.
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- Occasional failure when enabling in-ear monitoring.
- Occasional echo.
- Abnormal client status caused by an exception in the
onRemoteAudioStateChangedcallback.
API changes
Added
startCameraCapturestopCameraCapturestartOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsstartLocalVideoTranscoderupdateLocalTranscoderConfigurationonLocalVideoTranscoderErrorqueryScreenCaptureCapabilitysetScreenCaptureScenariosetAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAudioTrackTypeVideoScenario- The
mDomainLimitandmAutoRegisterAgoraExtensionsmembers inRtcEngineConfig - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks BACKGROUND_NONE(0)BACKGROUND_VIDEO(4)
Deprecated
enableDualStreamMode[1/2]enableDualStreamMode[2/2]startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExonChannelMediaRelayEvent
Deleted
onApiCallExecutedpublishCustomAudioTrackEnableAecinChannelMediaOptions
v4.1.1
v4.1.1 was released on February 8, 2023.
Compatibility changes
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
New features
1. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
2. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the onVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel and then get the indicators in the video frame rendering process through the onVideoRenderingTracingResult callback.
This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
PROCESS_MODE_READ_ONLY, the return value is reserved for future use. - When the video processing mode is
PROCESS_MODE_READ_WRITE, the SDK receives the video frame when the return value istrue. The video frame is discarded when the return value isfalse.
2. Super resolution
This release improves the performance of super resolution. To optimize the usability of super resolution, this
release removes enableRemoteSuperResolution. Super resolution is now included in the online strategies of video quality enhancement which does not require extra configuration.
Issues fixed
This release fixes the following issues:
- Playing audio files with a sample rate of 48 kHz failed.
- Crashes occurred after users set the video resolution as 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices.
- In real-time chorus use-cases, remote users heard noises and echoes when an OPPO R11 device joined the channel in loudspeaker mode.
- When the playback of the local music finished, the
onAudioMixingFinishedcallback was not properly triggered. - When using a video frame observer, the first video frame was occasionally missed on the receiver's end.
- When sharing screens in use-cases involving multiple channels, remote users occasionally saw black screens.
- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted.
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
- At the moment when a user left a channel, a request for leaving was not sent to the server and the leaving behavior was incorrectly determined by the server as timed out.
API changes
Added
enableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExonVideoRenderingTracingResultMEDIA_RENDER_TRACE_EVENTVideoRenderingTracingInfo
Deleted
enableRemoteSuperResolutionsuperResolutionTypeinRemoteVideoStats
v4.1.0
v4.1.0 was released on December 15, 2022.
New features
1. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
2. Encoded video frame observer
This release adds the setRemoteVideoSubscriptionOptions and setRemoteVideoSubscriptionOptionsEx methods. When you call the registerVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
3. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
4. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
5. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
leaveChannelEx[2/2] method. Compared with theleaveChannelEx[1/2] method, a newoptionsparameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
6. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
7. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the onClientRoleChanged callback. The value of this parameter is as follows:
AUDIENCE_LATENCY_LEVEL_LOW_LATENCY(1): Low latency.AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY(2): Ultra-low latency.
8. Brand-new AI Noise Suppression
The SDK supports a new version of Noise Suppression (in comparison to the basic Noise Suppression in v3.7.x). The new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To enable this feature, contact support@agora.io.
9. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense of presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user, respectively, by callingsetPlayerAttenuationandsetRemoteAudioAttenuation, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams, and the receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the hearing of the headphones.
Improvements
1. Bluetooth permissions
To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the BLUETOOTH_CONNECT permission.
2. CDN streaming
To improve user experience during CDN streaming, when your camera does not support the video resolution you set when streaming, the SDK automatically adjusts the resolution to the closest value that is supported by your camera and has the same aspect ratio as the original video resolution you set. The actual video resolution used by the SDK for streaming can be obtained through the onDirectCdnStreamingStats callback.
3. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
4. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
5. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AUDIO_SCENARIO_MEETINGscenario. - Improves the smoothness of SDK video rendering.
- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios.
Issues fixed
This release fixed the following issues:
- Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- The call
getExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
API changes
Added
-
setHeadphoneEQParameters -
setRemoteVideoSubscriptionOptions -
setRemoteVideoSubscriptionOptionsEx -
VideoSubscriptionOptions -
leaveChannelEx[2/2] -
muteLocalAudioStreamEx -
muteLocalVideoStreamEx -
muteAllRemoteAudioStreamsEx -
muteAllRemoteVideoStreamsEx -
startRtmpStreamWithoutTranscodingEx -
startRtmpStreamWithTranscodingEx -
updateRtmpTranscodingEx -
stopRtmpStreamEx -
startChannelMediaRelayEx -
updateChannelMediaRelayEx -
pauseAllChannelMediaRelayEx -
resumeAllChannelMediaRelayEx -
stopChannelMediaRelayEx -
followEncodeDimensionRatioinCameraCapturerConfiguration -
hwEncoderAcceleratinginLocalVideoStats -
advanceOptionsinVideoEncoderConfiguration -
newRoleOptionsinonClientRoleChanged -
adjustUserPlaybackSignalVolumeEx -
IAgoraMusicContentCenterinterface class and methods in it -
IAgoraMusicPlayerinterface class and methods in it -
IMusicContentCenterEventHandlerinterface class and callbacks in it -
Musicclass -
MusicChartInfoclass -
MusicContentCenterConfigurationclass -
MvPropertyclass -
ClimaxSegmentclass
Deprecated
onApiCallExecuted. Use the callbacks triggered by specific methods instead.
Deleted
- Removes deprecated member parameters
backgroundImageandwatermarkinLiveTranscodingclass. - Removes
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8) inonChannelMediaRelayEventcallback.
v4.0.1
v4.0.1 was released on September 29, 2022.
Compatibility changes
This release deletes the sourceType parameter in enableDualStreamMode [3/3] and enableDualStreamModeEx, and the enableDualStreamMode [2/3] method, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK, you don't need to specify the video source type any more.
New features
1. In-ear monitoring
This release adds getEarMonitoringAudioParams callback to set the audio data format of the in-ear monitoring. You can use your own audio effect processing module to pre-process the audio frame data of the in-ear monitoring to implement custom audio effects. After calling registerAudioFrameObserver to register the audio observer, set the audio data format in the return value of the getEarMonitoringAudioParams callback. The SDK calculates the sampling interval based on the return value of the callback, and triggers the onEarMonitoringAudioFrame callback based on the sampling interval.
2. Audio capture device test
This release adds support for testing local audio capture devices before joining channel. You can call startRecordingDeviceTest to start the audio capture device test. After the test is complete, call the stopPlaybackDeviceTest method to stop the audio capture device test.
3. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use, including UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, 5G. When the local network connection type changes, the SDK triggers the onNetworkTypeChanged callback to report the current network connection type.
4. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports 3 audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; you can contact support@agora.io to adjust this number according to your use-case.
Meanwhile, Agora supports publishers to choose whether or not the audio streams being published are to be filtered based on volume. Streams that are not filtered will bypass this filter mechanism and transported directly to the receivers. In use-cases where there are a number of publishers, enabling this function helps reducing the bandwidth and device system pressure for the receivers.
To enable this function, contact support@agora.io.
5. Dual-stream mode
This release optimizes the dual-stream mode, you can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams), you can follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamTypeorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify the default behavior above, you can call setDualStreamMode [1/2] or setDualStreamMode [2/2] and set the mode parameter to DISABLE_SIMULCAST_STREAM (always do not send low-quality video streams) or ENABLE_SIMULCAST_STREAM (always send low-quality video streams).
Improvements
1. Video information change callback
This release optimizes the trigger logic of onVideoSizeChanged, which can also be triggered and report the local video size change when startPreview is called separately.
Issues fixed
This release fixed the following issues.
- When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - In online meeting use-cases, the local user and the remote user might not hear each other after the local user is interrupted by a call.
- After calling
setCloudProxyto set the cloud proxy, callingjoinChannelExto join multiple channels failed. - When using the Agora media player to play videos, after you play and pause the video, and then call the seek method to specify a new position for playback, the video image might remain unchanged; if you call the resume method to resume playback, the video might be played in a speed faster than the original one.
API changes
Added
getEarMonitoringAudioParamsstartRecordingDeviceTeststopRecordingDeviceTestgetNetworkTypeisAudioFilterablein theChannelMediaOptionssetDualStreamMode[1/2]setDualStreamMode[2/2]setDualStreamModeExSIMULCAST_STREAM_MODEsetZonessetPlayerAttenuationsetRemoteAudioAttenuationmuteRemoteAudioStreamSpatialAudioParamssetHeadphoneEQPresetHEADPHONE_EQUALIZER_PRESET
Modified
-
enableDualStreamMode[1/3] -
enableDualStreamMode[3/3] -
enableDualStreamModeEx
Deprecated
startEchoTest[2/3]
Deleted
enableDualStreamMode[2/3]
v4.0.0
v4.0.0 was released on September 15, 2022.
Compatibility changes
1. Integration change
This release has optimized the implementation of some features, resulting in incompatibility with v3.7.x. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Custom video capture and rendering (Media IO)
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migrate from v3.7.x to v4.0.0.
2. Callback exception handling
To facilitate troubleshooting, as of this release, the SDK no longer catches exceptions that are thrown by your own code implementation when triggering callbacks in the IRtcEngineEventHandler class. You need to catch and handle the exceptions yourself; otherwise, it can cause a crash.
New features
1. Multiple media tracks
This release supports one RtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting RtcEngineEx and ChannelMediaOptions.
After calling joinChannel to join the first channel, call joinChannelEx multiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) and ChannelMediaOptions settings.
Besides, this release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured videos in the channel:
- Create a custom video track: Call this method to create a video track, and get the video track ID.
- Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Full HD and Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding, and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the dimensions parameter to 1920 × 1080 or higher when calling the setVideoEncoderConfiguration method. If your device does not support high resolutions, the SDK automatically falls back to an appropriate resolution.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to enable this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayer method to create a media player object, you can then call the methods in the IMediaPlayer class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the ULTRA_HIGH_QUALITY_VOICE enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Spatial audio
This feature is in experimental status. To enable this feature, contact support@agora.io. Contact technical support if needed.
You can set the spatial audio for the remote user as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users, respectively, so that the local user can hear the spatial audio effect of the remote user.
You can also set the spatial audio for the media player as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
6. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AUDIO_SCENARIO_CHORUS enumeration. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
7. Extensions from the Agora extensions marketplace
In order to enhance the real-time audio and video interactive activities based on the Agora SDK, this release supports the one-stop solution for the extensions from the Agora extensions marketplace:
- Easy to integrate: The integration of modular functions can be achieved simply by calling an API, and the integration efficiency is improved by nearly 95%.
- Extensibility design: The modular and extensible SDK design style endows the Agora SDK with good extensibility, which enables developers to quickly build real-time interactive apps based on the Agora extensions marketplace ecosystem.
- Build an ecosystem: A community of real-time audio and video apps has developed that can accommodate a wide range of developers, offering a variety of extension combinations. After integrating the extensions, developers can build richer real-time interactive functions. For details, see Use an Extension.
- Become a vendor: Vendors can integrate their products with Agora SDK in the form of extensions, display and publish them in the Agora extensions marketplace, and build a real-time interactive ecosystem for developers together with Agora. For details on how to develop and publish extensions, see Become a Vendor.
8. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling joinChannel or joinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
9. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
startScreenCapturemethod before joining a channel, and then calljoinChannel[2/2] to join a channel and setpublishScreenCaptureVideoastrue. - Call the
startScreenCapturemethod after joining a channel, and then callupdateChannelMediaOptionsto setpublishScreenCaptureVideoastrue.
10. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add a user ID that you want to subscribe to in your allowlist, or add a user ID for the streams you do not wish to see to your blocklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the RtcEngineEx interface:
setSubscribeAudioBlacklist:Set the audio subscription blocklist.setSubscribeAudioWhitelist:Set the audio subscription allowlist.setSubscribeVideoBlacklist:Set the video subscription blocklist.setSubscribeVideoWhitelist:Set the video subscription allowlist.
If a user is added in a blocklist and a allowlist at the same time, only the blocklist takes effect.
11. Set audio scenarios
To make it easier to change audio scenarios, this release adds the setAudioScenario method. For example, if you want to change the audio scenario from AUDIO_SCENARIO_DEFAULT to AUDIO_SCENARIO_GAME_STREAMING when you are in a channel, you can call this method.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as switchChannel in v3.7.x through the leaveChannel and joinChannel methods so that you don't need to take the time to call the switchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushExternalVideoFrame [1/2] method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of onAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Device permission management
This release adds the onPermissionError method, which is automatically reported when the audio capture device or camera does not obtain the appropriate permission. You can enable the corresponding device permission according to the prompt of the callback.
5. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
6. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing to streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on January 19, 2026.
New features
Included in this release:
-
Support for multitasking camera capture on iOS
Starting with iOS 16, the system supports multitasking, allowing users to use multiple apps in parallel. Common multitasking modes include Split views, Slide over, Picture in picture, and Stage manager. Starting from this version, the SDK supports iOS camera multitasking capture capabilities, allowing continuous audio and video capture in multitasking scenarios. In real-time audio and video interaction scenarios, enabling this feature allows use cases such as referencing materials during video calls, displaying courseware side-by-side in interactive teaching, or managing product backends during live streaming. For details, refer to How can I enable multitasking camera capture on iOS?.
Based on Agora Lab testing, the following device models and OS versions support this feature:
Device Model Chip OS Split View Slide Over Picture in Picture Stage Manager iPad Air 2 A8X iPadOS 14.7.1 — ✔ — — iPad Pro (10.5-inch) A10X iPadOS 15.0 ✔ ✔ ✔ ✔ iPad mini (5th generation) A12 iPadOS 17.5.1 ✔ ✔ ✔ ✔ iPad Pro (11-inch, 2nd generation) A12Z iPadOS 18.4.1 ✔ ✔ ✔ ✔ iPad Pro (11-inch, 3rd generation) M1 iPadOS 17.6.1 ✔ ✔ ✔ ✔ iPhone 11 A13 16.1.1 — — ✔ — -
Support for getting audio buffer delay
To address the issue where the main vocal and background accompaniment may be out of sync in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module to get the millisecond-level audio buffer delay when playing media files.
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
networkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Adds error codes
AgoraErrorCodePcmSendFormat (200)andAgoraErrorCodePcmSendBufferOverflow (201)to report PCM data transmission errors.
- Adds error codes
Compatibility changes
This release introduces the following compatibility changes:
-
Support for custom encoding frame rate
Changes the data type of the
frameRateparameter inAgoraVideoEncoderConfigurationfrom an enumeration to anInt. During integration, refer to the originalAgoraVideoFrameRateenum values for configuration. -
Audio Spectrum removed from Lite and Voice packages
To further reduce SDK package size, this version removes the Audio Spectrum feature from the Lite and Voice SDK packages. If you need the Audio Spectrum feature, please integrate the Full package.
-
Disabled automatic macro mode switching
Automatic macro mode switching on the camera may cause video flickering. To prevent this issue, this version disables automatic macro mode switching. You can still manually switch macro mode using private parameters based on your business or scenario needs. If needed, please contact support.
-
Decoder plugins built into the SDK
The relevant decoder plugins are now built into the SDK to ensure overall decoding compatibility.
-
armv7 architecture no longer supported by default
Starting from this version, the SDK no longer supports the armv7 architecture by default. If you need to support it, please contact support.
Issues fixed
This release fixed the following issues:
- Beauty effects did not work in some scenarios.
- When calling
leaveChannelanddestroyon a sub-thread while the UI orientation changed simultaneously, the app crashed. - On some iOS 16 devices, when a user joined a channel as a broadcaster with the audio scenario set to
AgoraAudioScenarioChatRoomand calledenableLocalAudioto disable local audio capture, the call volume could not be adjusted. - When switching video resolution under hardware exceptions, no encoded frames were output, causing the video to freeze.
v4.6.0
Released on August 26, 2025.
The version of the aosl.xcframework library in the v4.6.0 SDK is 1.3.0. You can find the library version information in Info.plist.
Compatibility changes
This version includes SDK behavior changes, API deprecations, and deletions. To ensure your app functions correctly, update your code after upgrading to this version.
For details on deprecated and deleted APIs in each version, see the API Sunset Notice.
-
Deprecation of direct CDN streaming APIs
Deprecates the APIs related to direct CDN streaming, which will be removed in a future release. Agora recommends using Media Push instead.
setDirectCdnStreamingAudioConfiguration:setDirectCdnStreamingVideoConfiguration:startDirectCdnStreaming:publishUrl:mediaOptions:stopDirectCdnStreamingrtcEngine:didDirectCdnStreamingStateChanged:reason:message:AgoraDirectCdnStreamingMediaOptionsAgoraDirectCdnStreamingStatsAgoraDirectCdnStreamingStateAgoraDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
Deprecates the APIs for the virtual metronome feature, which will be removed in a future release.
startRhythmPlayer:sound2:config:configRhythmPlayer:rtcEngine:didRhythmPlayerStateChanged:reason:
-
Deprecation of watermark APIs
Deprecates the old watermark APIs. Agora recommends using the new watermark APIs introduced in this version.
addVideoWatermark:options:addVideoWatermarkEx:options:connection:
-
Deletion of redundant APIs
Removed the following redundant APIs and parameters:
setLocalPublishFallbackOption:rtcEngine:didLocalPublishFallbackToAudioOnly:downlinkNetworkInfoUpdatewlAccStatsAgoraWlAccReasonAgoraWlAccActionrtcEngine:wlAccStats:averageStats:rtcEngine:wlAccMessage:action:wlAccMsg:enableWirelessAcceleratereceivedFrameRate(removed fromAgoraRtcRemoteVideoStats)
-
Changes to int UID and string UID mapping
- Before v4.6.0: If you used
registerLocalUserAccountWithAppID:userAccount:to register a string UID (for example,"aa") and obtain an int UID (for example,123), joining a channel with this int UID automatically mapped it to the original string UID ("aa"). - From v4.6.0: The SDK no longer automatically maps an int UID to the original string UID. If you need to join the channel with the original string UID, call
joinChannelByUserAccount:token:channelId:joinSuccess:directly with the string UID. After upgrading, review and update your app logic to ensure users join the channel with the expected identity.
- Before v4.6.0: If you used
-
Added domain whitelist
If you have upgraded from a previous SDK version to v4.6.0 and are using the domain whitelist feature (set
domainLimitinAgoraRtcEngineConfigtoYES), add the following domains to the whitelist to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
-
Default log path change
This release changes the default log path from
AppSandbox/Library/documents/agorasdk.logtoAppSandbox/Library/caches/agorasdk.log. If you upgrade the SDK from v4.3.1 or later to v4.6.0, ensure that you use the new path to access the log file.
New features
-
Simulcasting multi-bitrate video streams (Beta)
Added support for sending multiple video streams of different resolutions from a single video source, including in multi-channel scenarios. You can now configure up to four layers: one high-resolution stream and up to three lower-resolution streams. Use configuration options to define resolution, bitrate, and whether to automatically reduce the number of streams when network or device performance drops. Subscribers can choose which stream to receive based on their network conditions. This feature helps developers deliver smooth experiences in scenarios such as conferences, large classes, and interactive live streaming, even when network conditions are poor.
-
Multipath network transmission
Introduced multipath transmission for devices with multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature improves stability in challenging network environments and is suitable for scenarios such as in-vehicle systems, IoT, trains, and highways. Enable it by setting
enableMultipathinAgoraRtcChannelMediaOptionstoYES.- Dynamic mode: Dynamically selects the optimal path based on network conditions. Suitable for scenarios sensitive to data consumption but requiring high quality, such as meetings and educational settings. Optionally set
preferMultipathTypeto prioritize a path type. - Duplicate mode: Sends data simultaneously over all available paths for maximum stability. This mode eliminates the impact of poor network conditions and is suitable for scenarios with extreme quality requirements, such as outdoor broadcasting and parallel control.
Configure uplink and downlink modes separately with
uplinkMultipathModeanddownlinkMultipathMode. Monitor performance with thertcEngine:didMultipathStatsChanged:callback, which reports data usage and other statistics for each path. - Dynamic mode: Dynamically selects the optimal path based on network conditions. Suitable for scenarios sensitive to data consumption but requiring high quality, such as meetings and educational settings. Optionally set
-
Video quality scoring
Added the
mosValuemember toAgoraRtcRemoteVideoStatsto report a score from 1 (poor) to 5 (excellent) for received video quality. This enables real-time monitoring and parameter adjustment. Contact support@agora.io to enable this feature. -
Support for adding multiple watermarks
Added
addVideoWatermarkWithImageUrl:options:andaddVideoWatermarkWithImageUrlEx:options:connection:methods that support multiple watermarks with IDs and layering order. UseremoveVideoWatermark:to remove a specific watermark. -
Asynchronous engine destruction
Added the
destroy:method with an option for asynchronous destruction, triggering theengineReleasedBlockcallback. -
Token renewal result callback
Added the
rtcEngine:didRenewTokenResult:callback andRENEW_TOKEN_ERROR_CODEfor handling the result ofrenewToken:. -
Advanced beauty (Beta)
Introduced a brand-new advanced beauty feature, delivering a powerful yet easy-to-use beautification solution.
-
Precision beauty effects
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, slimming face, enlarging eyes, narrowing nose) or one-click natural effects via presets.
- Style makeup: Offers rich effects including eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancement: Includes professional skin optimizations such as teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
-
Unified and simple API Manage all beauty, makeup, and filter functions through three core nodes —
BEAUTY,STYLE_MAKEUP, andFILTER— usingIVideoEffectObjectfor unified parameter setup and lifecycle control. -
Ready-to-use presets Integrates multiple out-of-the-box style templates (for example, "Natural Beauty," "Senior Makeup," "Cool White Filter") for instant polished results.
-
Dynamic parameter control Enables real-time reading and modification of granular parameters (for example, smoothing strength, lipstick type) via key-value pairs, with support for saving custom configurations and resetting defaults.
-
Local resource guarantee All beauty resources (effects, filters, makeup) are packaged as local bundle files, ensuring stability and reliability.
-
-
Other new features
- Added
setPlaybackAudioFrameBeforeMixingParameters:to configure the format of raw audio frames returned inonPlaybackAudioFrameBeforeMixing:channelId:uid:. - Added
preloadEffectEx:soundId:for preloading audio effects in a specific channel, supporting both local and online files. - Added
playEffectEx:soundId:filePath:loopCount:pitch:pan:gain:publish:startPos:for playing audio effects in a specific channel with advanced controls. - Added the
positionmember inAgoraContentInspectModuleto choose the capture point for screenshot uploads. - Added the
screenColorTypemember toAgoraSegmentationPropertyfor specifying or detecting background screen color.
- Added
Improvements
- Added support for G.711 and G.722 audio codecs when inter-operating with the Web SDK for better cross-platform audio compatibility.
- Improved video clarity in screen sharing scenarios involving documents.
Issues fixed
This version fixes the following issues:
- Online audio effect playback restarted from the beginning when
seekToPosition:was called. - Occasional echoes in media volume mode when a broadcaster published a microphone audio stream while playing an audio effect with
playEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:and music withstartAudioMixing:loopback:cycle:startPos:. - Missing media metadata observer callback when
setMediaMetadataDelegate:withType:was called aftersetExternalVideoSource:useTexture:sourceType:(Android, iOS). - Occasional crashes (Android, iOS).
- Media relay occasionally reported
AgoraChannelMediaRelayStateFailureandAgoraChannelMediaRelayErrorServerErrorResponseafter the following sequence: join, relay, unpublish, leave, rejoin, and start relay again.
v4.5.2
v4.5.2 was released on April 22, 2025.
Note
The aosl.xcframework library version in Video SDK v4.5.2 is 1.2.13. You can check the version in the Info.plist file.
Issues fixed
This release fixes the following issues:
- While playing a multi-track media file, noise was heard when adjusting the audio pitch using
setAudioPitch. - When the host called
createCustomAudioTrack:config:to create a custom audio track withtrackTypeset toAUDIO_TRACK_DIRECT, then calledpushExternalAudioFrameRawData:samples:sampleRate:channels:trackId:timestamp:to push custom audio frames to a channel, and finally calledplayEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:to play an audio effect, audience members in the channel heard noise. - Apps using the SDK occasionally experienced UI lag caused by main thread blocking during audio and video interactions.
- Calling
openWithMediaSource:and settingisLiveSourcetoYESin the source parameter to play a video stream caused playback failure. - When calling
enableVirtualBackgroundto enable the virtual background, the background image appeared enlarged and blurry when the device was rotated. - When the sender transmitted multi-channel encoded audio, noise was occasionally heard by the receiver.
- When the app integrated a media player and called
opentwice to load different media resources consecutively, the second call incorrectly triggered theAgoraRtcMediaPlayer:infoUpdated:callback with information from the first media resource. - After enabling user volume indication with
enableAudioVolumeIndication:smooth:reportVad:, thertcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:callback reported a local user volume of 0 for both local and remote users. - The app occasionally froze during audio and video communication.
- When you called
enableVideoImageSource:options:to enable the video image source feature, the sending side appeared to stream successfully, but thertcEngine:didVideoPublishStateChange:sourceType:oldState:newState:elapseSinceLastState:callback reported a publish failure. - In multi-channel scenarios, if the app called
setupRemoteVideoEx:connection:to initialize the remote user's view before successfully callingjoinChannelExByToken:connection:delegate:mediaOptions:joinSuccess:, the first frame of the remote video occasionally experienced significant delay.
v4.5.1
v4.5.1 was released on March 4, 2025.
Note
The aosl.xcframework library version in Video SDK v4.5.1 is 1.2.13. You can check the version in the Info.plist file.
New Features
-
AI Conversation Scenario
This version introduces the
AgoraAudioScenarioAiClientaudio scenario, specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on the characteristics of AI-generated voices, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. The optimization enhances conversation continuity and reliability, adapting to various challenging network environments.
Improvements
- Reduced SDK initialization time on specific device models.
Issues Fixed
This release resolves the following issues:
- When joining two or more channels simultaneously and calling
takeSnapshotEx:uid:filePath:to capture local video stream screenshots consecutively, the first channel's screenshot failed. - When using the
pausemethod to pause playback, then callingseekToPosition:to move to a specific position, and finally callingplay, the Media Player resumed from the paused position instead of the specified position. - When using the Media Player, the file path of the media resource returned by
getPlaySrcdid not update after callingswitchSrc:syncPts:to switch to a new media resource. - Pushing video frames in
i420format to the channel while usingCVPixelBufferto process these frames caused crashes. - Calling
setupLocalVideo:to set up two views and then enabling face detection withenableFaceDetection:prevented face information from being detected in the newly assigned views. - In screen-sharing scenarios, the receiving user saw a green line on the shared image.
- In interactive live streaming scenarios, after joining a channel as an audience member using a
stringuser ID, audio occasionally became unsynchronized with video. - AI noise suppression and AI echo cancellation plugins sometimes failed when used together.
v4.5.0
v4.5.0 was released on November 27, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
As of v4.5.0, both Video SDK and Signaling SDK (v2.2.0 and above) include the aosl.xcframework library. If you manually integrate Video SDK via CDN and also use Signaling SDK, delete the earlier version of the aosl.xcframework library to avoid conflicts. The aosl.xcframework library version in Video SDK v4.5.0 is 1.2.13. You can check the version in the Info.plist file.
-
Changes in strong video noise suppression
This version adjusts the implementation of strong video noise suppression. The
AgoraVideoDenoiserLevelremovesAgoraVideoDenoiserLevelStrength. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions:options:, you can call thesetBeautyEffectOptions:options:method to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions:options:.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions:options:. -
Changes in video encoding preferences
To enhance the user's video interaction experience, this version optimizes the default preferences for video encoding:
- In the
AgoraCompressionPreferenceenumeration class, a newAgoraCompressionAuto(-1) enumeration is added, replacing the originalAgoraCompressionQuality(1) as the default value. In this mode, the SDK will automatically choose betweenAgoraCompressionLowLatencyorAgoraCompressionQualitybased on your video scene settings to achieve the best user experience. - In the
AgoraDegradationPreferenceenumeration class, a newAgoraDegradationMaintainAuto(-1) enumeration is added, replacing the originalAgoraDegradationMaintainQuality(1) as the default value. In this mode, the SDK will automatically choose betweenAgoraDegradationMaintainFramerate,AgoraDegradationBalanced, orAgoraDegradationMaintainResolutionbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
AgoraApplicationLiveShowScenario(3) (Live Show) enumeration toAgoraApplicationScenarioType. You can callsetVideoScenario:to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency for better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (for example, screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptions:options:sourceType:method. You can pass a cube map file (.cube) in theconfigparameter to apply custom filter effects such as whitening, vivid, cool, black and white, and others. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile to quickly apply a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- When using the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
Color space settings
This version adds the
colorSpaceparameter toAgoraOutputVideoFrameandAgoraVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshotWithConfig:config:andtakeSnapshotExWithConfig:uid:config:methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAgoraAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isNO, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency.
- This version optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - After calling
enableLocalAudio:to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. - When calling
switchSrc:syncPts:to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theAgoraRtcMediaPlayer:didOccurEvent:elapsedTime:message:callback will report theAgoraMediaPlayerEventSwitchErrorevent, indicating that an error has occurred during media resource switching. - When calling
setPlaybackSpeed:to set the playback speed of an audio file, the minimum supported speed is 0.3x.
Bug fixes
This version fixes the following issues:
- When the video source of the sender is in the JPEG format, the frame rate on the receiving end occasionally falls below expectations.
- Occasional instances where the receiving end cannot hear the sender during audio and video interaction.
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender.
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected.
- No sound when playing online media resources using the media player after the app starts.
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps.
- Calling
startAudioMixing:loopback:cycle:and then immediately callingpauseAudioMixingto pause the music file playback does not take effect.
v4.4.0
v4.4.0 was released on August 5, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
Starting from v4.4.0, the SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See API sunset notice.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds new corresponding callbacks that contain context information (see table below). You can identify the extension name, the user ID, and the service provider name through
AgoraExtensionContextin each callback.Original callback New callback onEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext -
Prior to v4.4.0, when a user was set to the audience role and
setAudioScenariowas called withAgoraAudioScenarioChatRoom, the system displayed the microphone-in-use indicator. Starting with v4.4.0, the SDK uses native iOS APIs to manage the microphone. As a result, audience users in a chatroom scenario no longer see the indicator. -
This version renames the
receiveMetadatacallback todidMetadataReceivedand removes thedataandtimeStampparameters. You can get metadata-related information, includingtimeStamp(timestamp of the sent data),uid(user ID), andchannelId(channel name) through the newly-addedmetadataparameter.
New features
-
Lite SDK
Starting from this version, Agora introduces Lite SDK, which includes only the basic audio and video capabilities and partially cuts advanced features, effectively reducing the app size after integrating the SDK.
- Lite SDK supports manual integration or third-party repository integration.
- For information on dynamic libraries included in the Lite SDK, see App size optimization.
- For the list of APIs supported by Lite SDK, see API reference.
- For the limitations and precautions when using the Lite SDK to play media files, refer to Which audio file formats does the Agora Video SDK support?
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
AgoraOutputVideoFrameandAgoraVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.AgoraVideoFrameadds thefillAlphaBuffermember. For BGRA or RGBA formatted video data, it sets whether to automatically extract the Alpha channel data and fill it intoalphaBuffer.AgoraOutputVideoFrameandAgoraVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AgoraAdvancedVideoOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callsetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatoYES. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theAgoraVoiceAITunerTypeenum to achieve effects like deep voice, cute voice, husky singing voice, and so on.
Improvements
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - Deprecates redundant enumeration values
AgoraClientRoleChangeFailedRequestTimeoutandAgoraClientRoleChangeFailedConnectionFailedinAgoraClientRoleChangeFailedReason.
- Optimizes the transmission strategy: Calling
Issues fixed
This release fixes the following issues:
- Occasional app crashes occurred when multiple remote users joined a channel simultaneously during real-time interaction.
- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while.
- After the sender called
startDirectCdnStreamingto start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. - Audio playback failed when pushing external audio data using
pushExternalAudioFrameRawDataand the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz.
v4.3.2
v4.3.2 was released on June 4, 2024.
Improvements
-
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
-
The Agora media player supports playing mp4 files with an Alpha channel.
Issues fixed
This version fixed the following issues:
- The remote video froze or became pixelated when the app returned to the foreground after being in the background for a long time.
- The local preview image rotated by 90° on some iPad devices, which did not meet expectations.
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app occasionally crashed when remote users left the channel.
- When playing an audio file using [startAudioMixing 1/2] and the playing finished, the SDK sometimes failed to trigger the audioMixingStateChanged (
AgoraAudioMixingStateTypeStopped,AgoraAudioMixingReasonAllLoopsCompleted) callback which reports that the playing is completed. - When calling the [playEffect 3/3] method to play sound effect files shorter than 1 second with
loopCountset to0, there was no sound. - When using the Agora media player to play a video and stopping it during playing, sometimes there was no sound for a short time after the playback was resumed.
v4.3.1
v4.3.1 was released on April 29, 2024.
New features
-
Privacy manifest file
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.3.1 to the Apple App Store, manually add the PrivacyInfo.xcprivacy file to your Xcode project. For more details, see How can I add a privacy manifest to my iOS app?
:::
-
Portrait center stage
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the enableCameraCenterStage method to activate the Portrait center stage. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling portrait center stage, it is recommended to verify whether your current device supports this feature by calling isCameraCenterStageSupported. A list of supported devices can be found in the API documentation at enableCameraCenterStage.
-
Camera stabilization
To improve video stability in mobile filming, low-light environments, and hand-held shooting use-cases, this version introduces a camera stabilization feature. You can activate this feature and select an appropriate stabilization mode by calling setCameraStabilizationMode, achieving more stable and clearer video footage.
-
Wide and ultra-wide cameras
To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call queryCameraFocalLengthCapability to check the device's focal length capabilities, and then call setCameraCapturerConfiguration and set
cameraFocalLengthTypeto the supported focal length types, including wide and ultra-wide. -
Data stream encryption
This version adds
datastreamEncryptionEnabledto AgoraEncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREandENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILUREenumerations. -
Local video rendering
This version adds the following member to AgoraRtcVideoCanvas to support more local rendering capabilities:
enableAlphaMask: This member enables the receiving end to initiate Alpha mask rendering. Alpha mask rendering can create images with transparent effects or extract human figures from video content.
-
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode [2/2], the SDK defaults to the following behaviors:
- The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure, especially around the fingers, are more stable, significantly reducing flickering at the edges.
-
Custom audio capture optimization
To enhance the flexibility of custom audio capture, this release deprecates pushExternalAudioFrameSampleBuffer [1/2] and introduces pushExternalAudioFrameSampleBuffer [2/2]. Compared to the deprecated method, the new method adds parameters such as
sampleRate,channels, andtrackId. These support pushing external CMSampleBuffer audio data to the channel via custom audio tracks, and allow for the setting of sample rates and channel counts for external audio sources. -
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
AgoraEarMonitoringFilterReusePostProcessingFilterinAgoraEarMonitoringFilterType. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen-sharing use-cases to save system performance overhead.
- Improved stability in processing video by the raw video frame observer.
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AgoraAudioEffectPreset, a new enumeration
AgoraAudioEffectPresetRoomAcousticsChorus(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In AgoraRtcRemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end.
Issues fixed
This version fixed the following issue:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- enableCameraCenterStage
- isCameraCenterStageSupported
- setCameraStabilizationMode
- AgoraCameraStabilizationMode
- The
enableAlphaMaskmember in AgoraRtcVideoCanvas - setFaceInfoDelegate
- AgoraFaceInfoDelegate
- onFaceInfo
- The
publishLipSyncTrackmember in AgoraRtcChannelMediaOptions - AgoraMediaSourceType adds
AgoraMediaSourceTypeSpeechDriven - AgoraVideoSourceType adds
AgoraVideoSourceTypeSpeechDriven - AgoraEncryptionConfig adds
datastreamEncryptionEnabled - AgoraEncryptionErrorType adds the following enumerations:
ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE
- AgoraRtcRemoteAudioStats adds
e2eDelay - AgoraErrorCode adds
AgoraErrorCodeDatastreamDecryptionFailed - AgoraAudioEffectPreset adds
AgoraAudioEffectPresetRoomAcousticsChorus, enhancing the spatial presence of vocals in chorus use-cases - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- queryCameraFocalLengthCapability
- AgoraFocalLengthInfo
- AgoraFocalLength
- AgoraCameraCapturerConfiguration adds a new member
cameraFocalLengthType - AgoraEarMonitoringFilterType adds a new enumeration
AgoraEarMonitoringFilterBuiltInAudioFilters - pushExternalAudioFrameSampleBuffer [2/2]
Deprecated
v4.3.0
v4.3.0 was released on February 22, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name localAudioStateChangederrorreasonlocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasondidChangedToStateerrorreasonrtmpStreamingChangedToStateerrCodereasonOriginal enumeration class New enumeration class AgoraAudioLocalErrorAgoraAudioLocalReasonAgoraLocalVideoStreamErrorAgoraLocalVideoStreamReasonAgoraDirectCdnStreamingErrorAgoraDirectCdnStreamingReasonAgoraMediaPlayerErrorAgoraMediaPlayerReasonAgoraRtmpStreamingErrorAgoraRtmpStreamingReasonNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelay
startOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExdidReceiveChannelMediaRelayEventchannelMediaRelayStateDidChange -
Custom video source
Since this release,
pushExternalVideoFrame[1/2] is migrated fromAgoraRtcEngineKit(Ex)toAgoraRtcEngineKit. -
Audio route
Starting with this release,
AgoraAudioOutputRoutingBluetoothin AgoraAudioOutputRouting is renamed toAgoraAudioOutputRoutingBluetoothDeviceHfp, representing a Bluetooth device using the HFP protocol.AgoraAudioOutputRoutingBluetoothDeviceA2dp(10) is added to represent the audio route to a Bluetooth device using the A2DP protocol. -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the AgoraLocalVideoStreamReason class:
- The
AgoraLocalVideoStreamErrorEncodeFailureenumeration has been changed toAgoraLocalVideoStreamReasonCodecNotSupport.
- The
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
New features
-
Custom mixed video layout on the receiving end
To facilitate customized layout of mixed video stream at the receiver end, this release introduces the
didTranscodedStreamLayoutInfoUpdatedWithUserIdcallback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separateviewfor rendering the sub-video stream (distinguished bysubviewUid) in the mixed video stream when calling the setupRemoteVideo method, achieving a custom video layout effect.When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time.
Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video use-case, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end.
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo to set the first view: Set the
positionparameter toAgoraVideoModulePositionPostCaptureOrigin(introduced in this release) inAgoraRtcVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo to set the second view: Set the
positionparameter toAgoraVideoModulePositionPostCaptureinAgoraRtcVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo to set the first view: Set the
-
Query Device Score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the
openWithMediaSourcemethod and enable this function by setting theenableMultiAudioTrackparameter in AgoraMediaSource. -
Device test for audio capturing and playback
This release introduces the following methods to test whether the audio capturing or playback devices work properly before joining a channel:
- startRecordingDeviceTest: Tests whether the local audio capturing device, such as the speaker, is working properly. After calling this method, the SDK triggers a callback at the time interval set in this method, which reports uid = 0 and the volume information of the capturing device. After the test is completed, you need to call the newly added stopRecordingDeviceTest method to stop the test.
- startPlaybackDeviceTest: Tests whether the local audio playback device is working properly. You can specify the audio file to be played through the
testAudioFilePathparameter and see if your audio device works properly. After the test is completed, you need to call the newly added stopPlaybackDeviceTest method to stop the test.
-
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of the SDK v4.x.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- didRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- [setPlayerOption 1/2] and [setPlayerOption 2/2]: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling methods in AgoraLocalSpatialAudioKit.
- This release introduces the updateSelfTransform method, designed to pass position vectors for direct rendering in iOS native frameworks such as SceneKit or RealityKit.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Local audio state changed callback optimization
This release introduces the following enumeration in AgoraAudioLocalReason, enabling users to obtain more details about local audio errors through the
localAudioStateChangedcallback:AgoraAudioLocalReasonInterrupted: The local audio capture is interrupted by system calls, Siri, or alarm clocks. Remind your users to end the phone call, Siri, or alarm clock if the local audio capture is required.
-
Optimization of video pre-processing methods
This release adds overloaded methods with the
sourceTypeparameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing insourceType(for example, applying on a custom video capture media source): -
Other Improvements
This release also includes the following improvements:
- This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in AgoraRtcLocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The cacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The playbackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through
AgoraMediaPlayerPlaybackStats.
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the localVideoStats callback is 0, which is not as expected.
API changes
Added
didTranscodedStreamLayoutInfoUpdatedWithUserId- AgoraVideoLayoutInfo
- The
subviewUidmember in AgoraRtcVideoCanvas - updateSelfTransform
- The
AgoraAudioLocalReasonInterruptedenumeration in AgoraAudioLocalReason - enableCustomAudioLocalPlayback
- queryDeviceScore
- The
AgoraMediaSourceTypeCustomVideoenumeration in AgoraMediaSourceType - [setBeautyEffectOptions 2/2]
- [setLowlightEnhanceOptions 2/2]
- [setVideoDenoiserOptions 2/2]
- [setColorEnhanceOptions 2/2]
- [enableVirtualBackground 2/2]
- The
AgoraAudioOutputRoutingBluetoothDeviceA2dpenumeration in AgoraAudioOutputRouting - Adds the
earMonitorDelayandaecEstimatedDelayin AgoraRtcLocalAudioStats - selectMultiAudioTrack
- cacheStats
- playbackStats
- AgoraMediaPlayerPlaybackStats
- startPlaybackDeviceTest
- stopPlaybackDeviceTest
Modified
pushExternalVideoFrame[1/2] is migrated fromAgoraRtcEngineKit(Ex)toAgoraRtcEngineKitAgoraAudioOutputRoutingBluetoothis renamed asAgoraAudioOutputRoutingBluetoothDeviceHfp- All
Errorfields in the following enumerations are changed toReason:AgoraAudioLocalErrorOKAgoraAudioLocalErrorFailureAgoraAudioLocalErrorDeviceNoPermissionAgoraAudioLocalErrorDeviceBusyAgoraAudioLocalErrorRecordFailureAgoraAudioLocalErrorEncodeFailureAgoraLocalVideoStreamErrorOKAgoraLocalVideoStreamErrorFailureAgoraLocalVideoStreamErrorDeviceNoPermissionAgoraLocalVideoStreamErrorDeviceBusyAgoraLocalVideoStreamErrorCaptureFailureAgoraLocalVideoStreamErrorCodecNotSupportAgoraLocalVideoStreamErrorCaptureInBackGroundAgoraLocalVideoStreamErrorCaptureMultipleForegroundAppsAgoraLocalVideoStreamErrorCaptureNoDeviceFoundAgoraLocalVideoStreamErrorCaptureDeviceDisconnectedAgoraLocalVideoStreamErrorCaptureDeviceInvalidIdAgoraDirectCdnStreamingErrorOKAgoraDirectCdnStreamingErrorFailedAgoraDirectCdnStreamingErrorAudioPublicationAgoraDirectCdnStreamingErrorVideoPublicationAgoraDirectCdnStreamingErrorNetConnectAgoraDirectCdnStreamingErrorBadNameAgoraMediaPlayerErrorNoneAgoraMediaPlayerErrorInvalidArgumentsAgoraMediaPlayerErrorInternalAgoraMediaPlayerErrorNoSourceAgoraMediaPlayerErrorInvalidMediaSourceAgoraMediaPlayerErrorUnknowStreamTypeAgoraMediaPlayerErrorObjNotInitializedAgoraMediaPlayerErrorCodecNotSupportedAgoraMediaPlayerErrorVideoRenderFailedAgoraMediaPlayerErrorInvalidStateAgoraMediaPlayerErrorUrlNotFoundAgoraMediaPlayerErrorInvalidConnectStateAgoraMediaPlayerErrorSrcBufferUnderflowAgoraMediaPlayerErrorInterruptedAgoraMediaPlayerErrorNotSupportedAgoraMediaPlayerErrorTokenExpiredAgoraMediaPlayerErrorUnknownAgoraRtmpStreamingErrorOKAgoraRtmpStreamingErrorInvalidParametersAgoraRtmpStreamingErrorEncryptedStreamNotAllowedAgoraRtmpStreamingErrorConnectionTimeoutAgoraRtmpStreamingErrorInternalServerErrorAgoraRtmpStreamingErrorRtmpServerErrorAgoraRtmpStreamingErrorTooOftenAgoraRtmpStreamingErrorReachLimitAgoraRtmpStreamingErrorNotAuthorizedAgoraRtmpStreamingErrorStreamNotFoundAgoraRtmpStreamingErrorFormatNotSupportedAgoraRtmpStreamingErrorNotBroadcasterAgoraRtmpStreamingErrorTranscodingNoMixStreamAgoraRtmpStreamingErrorNetDownAgoraRtmpStreamingErrorInvalidPrivilegeAgoraRtmpStreamingErrorUnpublishOK
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExdidReceiveChannelMediaRelayEventAgoraChannelMediaRelayEvent
v4.2.6
v4.2.6 was released on November 17, 2023.
Issues fixed
This release fixed the following issues:
-
When using an iOS 16 or later device with Bluetooth headphones connected before joining the channel, the audio routing after joining the channel was not as expected: Audio was played from the speaker, not the Bluetooth headphones.
-
In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.3
v4.2.3 was released on October 11, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
AgoraContentInspectTypeImageModerationenumeration is added inAgoraContentInspectTypewhich means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inAgoraContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
enableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code -4 is returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform).
Other improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffect [3/3]method to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - Calling
takeSnapshotExonce receives thesnapshotTakencallback for multiple times.
API changes
Added
enableContentInspectExAgoraContentInspectTypeImageModerationinAgoraContentInspectType.serverConfiginAgoraContentInspectConfigisFeatureAvailableOnDeviceAgoraFeatureType
v4.2.2
v4.2.2 was released on July 27, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens.
-
Preloading channels
This release adds
preloadChannelByToken [1/2]andpreloadChannelByToken [2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toAgoraRtcVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Video source types for local preview
To allow users in selecting different types of video sources for local video preview, this release introduces
startPreview [2/2]andstopPreview [2/2]. You can callstartPreview [2/2]and specify the type of video source to be previewed by setting thesourceTypeparameter, and callstopPreview [2/2]to stop the video preview.The video source type specified in this method must match the video source type set in the
AgoraRtcVideoCanvasof thesetupLocalVideomethod.
Improvements
-
Improved camera capture effect
This release has improved camera capture effect in the following aspects:
-
Support for camera exposure adjustment
This release adds
isCameraExposureSupportedto query whether the device supports exposure adjustment andsetCameraExposureFactorto set the exposure ratio of the camera. -
Optimization of default camera selection
Since this release, the default camera selection behavior of the SDK is aligned with that of the iOS system camera. If the device has multiple rear cameras, better shooting perspectives, zooming capabilities, low-light performance, and depth sensing can be achieved during video capture, thereby improving the quality of video capture.
-
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapAgoraVideoCodecCapInfoInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- The SDK automatically adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
AgoraVideoRemoteReasonCodecNotSupportenumeration has been added to theremoteVideoStateChangedOfUidcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically.
API changes
Added
startPreview [2/2]stopPreview [2/2]setCameraExposureFactorisCameraExposureSupportedpreloadChannelByToken [1/2]preloadChannelByToken [2/2]updatePreloadChannelToken- The following members in
AgoraRtcChannelMediaOptions:publishThirdCameraTrackpublishFourthCameraTrackpublishThirdScreenTrackpublishFourthScreenTrack
AgoraVideoCodecCapLevelsAgoraVideoCodecCapabilityLevelbackgroundColorinAgoraRtcVideoCanvascodecLevelsinCodecCapAgoraVideoCodecCapInfoInfoAgoraVideoRemoteReasonCodecNotSupportinAgoraVideoRemoteReason
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- Occasional crash after calling the
destroyMediaPlayermethod.
v4.2.0
v4.2.0 was released on May 23, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter.
| Deleted Methods | Alternative Methods |
|---|---|
startSecondaryCameraCapture | startCameraCapture |
stopSecondaryCameraCapture | stopCameraCapture |
2. Video data acquisition
- The
onCaptureVideoFrameandonPreEncodeVideoFramecallbacks are added with a new parameter calledsourceType, which is used to indicate the specific video source type. - The following callbacks are deleted. Get the video source type through the
sourceTypeparameter in theonPreEncodeVideoFrameandonCaptureVideoFramecallbacks.onScreenCaptureVideoFrameonPreEncodeScreenVideoFrame
3. Channel media options
publishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinAgoraRtcChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinAgoraRtcChannelMediaOptionsis renamed topublishCustomAudioTrackId.
4. Miscellaneous
didApiCallExecuteis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.enableDualStreamMode[1/2] andenableDualStreamMode[2/2] are depredated. UsesetDualStreamMode[1/2] andsetDualStreamMode[2/2] instead.startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayExandupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI noise suppression
This release introduces the AI noise suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode as balance, aggressive or low latency according to your use-case.
2. Enhanced virtual background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the virtual background feature. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the didLocalVideoTranscoderErrorWithStream callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the didLocalVideoTranscoderErrorWithStream callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share
This release adds the queryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the setScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
4. Multi-camera capture
This release introduces startCameraCapture. By calling this method multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras need to be connected.
5. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
6. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
Issues fixed
This release fixed the following issues:
- When the host frequently switching the user role between broadcaster and audience in a short period of time, the audience members cannot hear the audio of the host.
- Occasional loss of the
firstRemoteVideoFrameOfUidcallback during channel media relay. - The receiver actively subscribed to the high-quality stream but unexpectedly received a low-quality stream.
- Abnormal client status cased by an exception in the
onRemoteAudioStateChangedcallback.
API changes
Added
startCameraCapturestopCameraCapturestartOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsdidLocalVideoTranscoderErrorWithStreamstartLocalVideoTranscoderupdateLocalTranscoderConfigurationqueryScreenCaptureCapabilitysetScreenCaptureScenariosetAINSModecreateCustomAudioTrackdestroyCustomAudioTrackAudioTrackConfigAgoraAudioTrackTypeAgoraApplicationScenarioTypeAgoraScreenCaptureFrameRateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inAgoraRtcEngineConfig - The
channelIdanduidparameters instateDidChangedandinformationDidUpdatedcallbacks - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
AgoraVirtualBackgroundNoneandAgoraVirtualBackgroundVideoenumerators inAgoraVirtualBackgroundSourceType
Deprecated
enableDualStreamMode[1/2]enableDualStreamMode[2/2]startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExdidReceiveChannelMediaRelayEventAgoraChannelMediaRelayEvent
Deleted
startSecondaryCameraCapturestopSecondaryCameraCapturedidApiCallExecutepublishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptionsonScreenCaptureVideoFrameonPreEncodeScreenVideoFrame
v4.1.1
v4.1.1 was released on January xx, 2023.
Compatibility changes
1. Default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
You can call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
2. Options for subscribing to remote video streams
This release changes the name of setRemoteVideo to setRemoteVideoSubscriptionOptions, and the name of setRemoteVideoEx to setRemoteVideoSubscriptionOptionsEx. If you upgrade the SDK to this version or later, to avoid affecting your service, ensure that you modify the names of these two methods.
New features
1. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
2. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the videoRenderingTracingResultOfUid callback.
Agora recommends that you use this method in conjunction with the UI settings (such as buttons and sliders) in your app. For example, call this method at the moment when the user clicks the "Join Channel" button, and then get the indicators in the video frame rendering process through the videoRenderingTracingResultOfUid callback. This enables developers to facilitate developers to optimize the indicators to improve the user experience.
Improvements
1. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
AgoraVideoFrameProcessModeReadOnly, the return value is reserved for future use. - When the video processing mode is
AgoraVideoFrameProcessModeReadWrite, the SDK receives the video frame when the return value isYES; the video frame is discarded when the return value isNO.
2. Super resolution
This release improves the performance of super resolution. To optimize the usability of super resolution, this release removes enableRemoteSuperResolution. Super resolution is now included in the online strategies of video quality enhancement which does not require extra configuration.
Issues fixed
This release fixed the following issues:
- Playing audio files with a sample rate of 48 kHz failed.
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
- At the moment when a user left a channel, a request for leaving was not sent to the server and the leaving behavior was incorrectly determined by the server as timed out.
API changes
Added
enableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExvideoRenderingTracingResultOfUidAgoraMediaRenderTraceEventVideoRenderingTracingInfo
Modified
setRemoteVideotosetRemoteVideoSubscriptionOptionssetRemoteVideoExtosetRemoteVideoSubscriptionOptionsEx
Deleted
enableRemoteSuperResolution- Deleted
superResolutionTypeinAgoraRtcRemoteVideoStats
v4.1.0
v4.1.0 was released on November xx, 2022.
New features
1. Multiple cameras for video capture
This release supports multi-camera video capture. You can call enableMultiCamera to enable multi-camera capture mode, call startSecondaryCameraCapture to start capturing video from the second camera, and then publish the captured video to the second channel.
To stop using multi-camera capture, you need to call stopSecondaryCameraCapture to stop the second camera capture, then call enableMultiCamera and set enabled to NO.
2. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
3. Encoded video frame observer
This release adds the setRemoteVideo method in the AgoraRtcEngineKit and AgoraRtcEngineKitEx classes. When you call the setEncodedVideoFrameDelegate method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
4. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
5. Camera capture options
This release adds the followEncodeDimensionRatio member in AgoraCameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
6. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
leaveChannelEx[2/2] method. Compared with theleaveChannelEx[1/2] method, a newoptionsparameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
7. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advancedVideoOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
8. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the didClientRoleChanged callback. The value of this parameter is as follows:
AgoraAudienceLatencyLevelLowLatency(1): Low latency.AgoraAudienceLatencyLevelUltraLowLatency(2): Ultra-low latency.
Improvements
1. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
2. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
3. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AgoraAudioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios.
Issues fixed
This release fixed the following issues:
- Calling
startAudioMixingto play music files in theipod-library://itempath failed. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- Different timestamps for audio and video data were obtained simultaneously and separately via
onRecordAudioFrameandonCaptureVideoFramecallbacks. - The call
getExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
API changes
Added
enableMultiCamerastartSecondaryCameraCapturestopSecondaryCameraCapturesetHeadphoneEQParameterssetRemoteVideoAgoraVideoSubscriptionOptionsmuteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayExfollowEncodeDimensionRatioinAgoraCameraCapturerConfigurationhwEncoderAcceleratinginAgoraRtcLocalVideoStatsleaveChannelEx[2/2]advancedVideoOptionsinAgoraVideoEncoderConfigurationnewRoleOptionsindidClientRoleChangedadjustUserPlaybackSignalVolumeExenableAudioVolumeIndicationEx
Deprecated
didApiCallExecute. Use the callbacks triggered by specific methods instead.
Deleted
- Removes deprecated member parameters
backgroundImageandwatermarkinAgoraLiveTranscodingclass. - Removes
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8) indidReceiveChannelMediaRelayEvent.
v4.0.0
v4.0.0 was released on September 15, 2022.
New features
2. Full HD and Ultra HD resolution
In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the dimensions parameter to 1920 × 1080 or higher resolution when calling the setVideoEncoderConfiguration method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to experience this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
v4.2.2
v4.2.2 was released on july 27, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens.
-
Preloading channels
This release adds
preloadChannelByToken[1/2]andpreloadChannelByToken[2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toAgoraRtcVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Video source types for local preview
To allow users in selecting different types of video sources for local video preview, this release introduces
startPreview[2/2]andstopPreview[2/2]. You can callstartPreview[2/2]and specify the type of video source to be previewed by setting thesourceTypeparameter, and callstopPreview[2/2]to stop the video preview.The video source type specified in this method must match the video source type set in the
AgoraRtcVideoCanvasof thesetupLocalVideomethod.
Improvements
-
Improved camera capture effect
This release has improved camera capture effect in the following aspects:
-
Support for camera exposure adjustment
This release adds
isCameraExposureSupportedto query whether the device supports exposure adjustment andsetCameraExposureFactorto set the exposure ratio of the camera. -
Optimization of default camera selection
Since this release, the default camera selection behavior of the SDK is aligned with that of the iOS system camera. If the device has multiple rear cameras, better shooting perspectives, zooming capabilities, low-light performance, and depth sensing can be achieved during video capture, thereby improving the quality of video capture.
-
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapAgoraVideoCodecCapInfoInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- The SDK automacially adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
AgoraVideoRemoteReasonCodecNotSupportenumeration has been added to theremoteVideoStateChangedOfUidcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically.
API changes
Added
startPreview [2/2]stopPreview [2/2]setCameraExposureFactorisCameraExposureSupportedpreloadChannelByToken [1/2]preloadChannelByToken [2/2]updatePreloadChannelToken- The following members in
AgoraRtcChannelMediaOptions:publishThirdCameraTrackpublishFourthCameraTrackpublishThirdScreenTrackpublishFourthScreenTrack
AgoraVideoCodecCapLevelsAgoraVideoCodecCapabilityLevelbackgroundColorinAgoraRtcVideoCanvascodecLevelsinCodecCapAgoraVideoCodecCapInfoInfoAgoraVideoRemoteReasonCodecNotSupportinAgoraVideoRemoteReason
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- Occasional crash after calling the
destroyMediaPlayermethod.
v4.2.0
v4.2.0 was released on May 24, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter.
| Deleted Methods | Alternative Methods |
|---|---|
startSecondaryCameraCapture | startCameraCapture |
stopSecondaryCameraCapture | stopCameraCapture |
2. Video data acquisition
The onCaptureVideoFrame and onPreEncodeVideoFrame callbacks are added with a new parameter called sourceType, which is used to indicate the specific video source type.
3. Channel media options
publishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinAgoraRtcChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinAgoraRtcChannelMediaOptionsis renamed topublishCustomAudioTrackId.
4. Miscellaneous
didApiCallExecuteis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.enableDualStreamMode[1/2] andenableDualStreamMode[2/2] are deprecated. UsesetDualStreamMode[1/2] andsetDualStreamMode[2/2] instead.startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode as balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background function. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the didLocalVideoTranscoderErrorWithStream callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the didLocalVideoTranscoderErrorWithStream callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share
This release adds the queryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the setScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
4. Multi-camera capture
This release introduces startCameraCapture. By calling this method multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras need to be connected.
5. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
6. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
Issues fixed
This release fixed the following issues:
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- Occasional loss of the
firstRemoteVideoFrameOfUidcallback during channel media relay. - The receiver actively subscribed to the high-quality stream but unexpectedly received a low-quality stream.
- Abnormal client status caused by an exception in the
onRemoteAudioStateChangedcallback.
API changes
Added
startCameraCapturestopCameraCapturestartOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsdidLocalVideoTranscoderErrorWithStreamstartLocalVideoTranscoderupdateLocalTranscoderConfigurationqueryScreenCaptureCapabilitysetScreenCaptureScenariosetAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAgoraAudioTrackTypeAgoraApplicationScenarioTypeAgoraScreenCaptureFrameRateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inAgoraRtcEngineConfig - The
channelIdanduidparameters instateDidChangedandinformationDidUpdatedcallbacks - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
AgoraVirtualBackgroundNoneandAgoraVirtualBackgroundVideoenumerators inAgoraVirtualBackgroundSourceType
Deprecated
enableDualStreamMode[1/2]enableDualStreamMode[2/2]startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExdidReceiveChannelMediaRelayEventAgoraChannelMediaRelayEvent
Deleted
startSecondaryCameraCapturestopSecondaryCameraCapturedidApiCallExecutepublishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptions
v4.1.1
v4.1.1 was released on February 8, 2023.
Compatibility changes
1. Default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
2. Options for subscribing to remote video streams
This release changes the name of setRemoteVideo to setRemoteVideoSubscriptionOptions, and the name of setRemoteVideoEx to setRemoteVideoSubscriptionOptionsEx. If you upgrade the SDK to this version or later, to avoid affecting your service, ensure that you modify the names of these two methods.
New features
1. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
2. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the videoRenderingTracingResultOfUid callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel and then get the indicators in the video frame rendering process through the videoRenderingTracingResultOfUid callback.
This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
AgoraVideoFrameProcessModeReadOnly, the return value is reserved for future use. - When the video processing mode is
AgoraVideoFrameProcessModeReadWrite, the SDK receives the video frame when the return value isYES. The video frame is discarded when the return value isNO.
2. Super resolution
This release improves the performance of super resolution. To optimize the usability of super resolution, this release removes enableRemoteSuperResolution. Super resolution is now included in the online strategies of video quality enhancement which does not require extra configuration.
Issues fixed
This release fixed the following issues:
- Playing audio files with a sample rate of 48 kHz failed.
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
enableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExvideoRenderingTracingResultOfUidAgoraMediaRenderTraceEventVideoRenderingTracingInfo
Modified
setRemoteVideotosetRemoteVideoSubscriptionOptionssetRemoteVideoExtosetRemoteVideoSubscriptionOptionsEx
Deleted
enableRemoteSuperResolutionsuperResolutionTypeinAgoraRtcRemoteVideoStats
v4.1.0
v4.1.0 was released on December 15, 2022.
New features
1. Multiple cameras for video capture
This release supports multi-camera video capture. You can call enableMultiCamera to enable multi-camera capture mode, call startSecondaryCameraCapture to start capturing video from the second camera, and then publish the captured video to the second channel.
To stop using multi-camera capture, you need to call stopSecondaryCameraCapture to stop the second camera capture, then call enableMultiCamera and set enabled to NO.
2. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
3. Encoded video frame observer
This release adds the setRemoteVideo method in the AgoraRtcEngineKit and AgoraRtcEngineKitEx classes. When you call the setEncodedVideoFrameDelegate method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
4. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. To enable this feature, contact support@agora.io.
5. Camera capture options
This release adds the followEncodeDimensionRatio member in AgoraCameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
6. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
leaveChannelEx[2/2] method. Compared with theleaveChannelEx[1/2] method, a newoptionsparameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
7. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advancedVideoOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
8. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the didClientRoleChanged callback. The value of this parameter is as follows:
AgoraAudienceLatencyLevelLowLatency(1): Low latency.AgoraAudienceLatencyLevelUltraLowLatency(2): Ultra-low latency.
9. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io.
10. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense of presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user, respectively, by callingsetPlayerAttenuationandsetRemoteAudioAttenuation, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams, and the receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the hearing of the headphones.
Improvements
1. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
2. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
3. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AgoraAudioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios.
Issues fixed
This release fixed the following issues:
- Calling
startAudioMixingto play music files in theipod-library://itempath failed. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- Different timestamps for audio and video data were obtained simultaneously and separately via
onRecordAudioFrameandonCaptureVideoFramecallbacks. - The call
getExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
API changes
Added
enableMultiCamerastartSecondaryCameraCapturestopSecondaryCameraCapturesetHeadphoneEQParameterssetRemoteVideoAgoraVideoSubscriptionOptionsmuteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayExfollowEncodeDimensionRatioinAgoraCameraCapturerConfigurationhwEncoderAcceleratinginAgoraRtcLocalVideoStatsleaveChannelEx[2/2]advancedVideoOptionsinAgoraVideoEncoderConfigurationnewRoleOptionsindidClientRoleChangedadjustUserPlaybackSignalVolumeExenableAudioVolumeIndicationEx
Deprecated
didApiCallExecute. Use the callbacks triggered by specific methods instead.
Deleted
- Removes deprecated member parameters
backgroundImageandwatermarkinAgoraLiveTranscodingclass. - Removes
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8) indidReceiveChannelMediaRelayEvent.
v4.0.1
v4.0.1 was released on September 29, 2022.
Compatibility changes
- To improve code usability, this release changes the parameters in optional type in the following classes to basic data types such as
boolandint:
isAgoraSourceandisLiveSourceinAgoraMediaSourceis changed from optional to bool.- All parameter types in
AgoraRtcChannelMediaOptionsare changed fromoptionaltoboolorint.
New features
1. In-ear monitoring
This release adds getEarMonitoringAudioParams callback to set the audio data format of the in-ear monitoring. You can use your own audio effect processing module to pre-process the audio frame data of the in-ear monitoring to implement custom audio effects. After calling setAudioFrameDelegate to register the audio observer, set the audio data format in the return value of the getEarMonitoringAudioParams callback. The SDK calculates the sampling interval based on the return value of the callback, and triggers the onEarMonitoringAudioFrame callback based on the sampling interval.
2. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use, including UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, 5G. When the local network connection type changes, the SDK triggers the networkTypeChangedToType callback to report the current network connection type.
3. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports 3 audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; you can contact support@agora.io to adjust this number according to your use-case.
Meanwhile, Agora supports publishers to choose whether or not the audio streams being published are to be filtered based on volume. Streams that are not filtered will bypass this filter mechanism and transported directly to the receivers. In use-cases where there are a number of publishers, enabling this function helps reducing the bandwidth and device system pressure for the receivers.
To enable this function, contact support@agora.io.
API changes
Added
-
getEarMonitoringAudioParams -
getNetworkType -
isAudioFilterablein theChannelMediaOptions -
setZones -
setPlayerAttenuation -
setRemoteAudioAttenuation -
muteRemoteAudioStream -
SpatialAudioParams -
setHeadphoneEQPreset -
AgoraHeadphoneEQPreset
Deprecated
startEchoTest[2/3]
v4.0.0
v4.0.0 was released on September 15, 2022.
Compatibility changes
1. Integration change
This release has optimized the implementation of some features, resulting in incompatibility with v3.7.x. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Custom video capture and rendering (Media IO)
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migrate from v3.7.x to v4.0.0.
New features
1. Multiple media tracks
This release supports one AgoraRtcEngineKit instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting AgoraRtcEngineKit(Ex) and AgoraRtcChannelMediaOptions.
- After calling
joinChannelByTokento join the first channel, calljoinChannelExByTokenmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andAgoraRtcChannelMediaOptionssettings.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid).
2. Full HD and Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the dimensions parameter to 1920 × 1080 or higher resolution when calling the setVideoEncoderConfiguration method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to enable this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayerWithDelegate method to create a media player object, you can then call the methods in the AgoraRtcMediaPlayerProtocol class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the AgoraVoiceBeautifierUltraHighQuality enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Spatial audio
This feature is in experimental status. To enable this feature, contact support@agora.io. Contact Technical Support if needed.
You can set the spatial audio for the remote user as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
AgoraLocalSpatialAudioKitclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users, respectively, so that the local user can hear the spatial audio effect of the remote user.
You can also set the spatial audio for the media player as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
AgoraLocalSpatialAudioKitclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
6. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AgoraAudioScenarioChorus enumeration in AgoraAudioScenario. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
7. Extensions from the Agora extensions marketplace
In order to enhance the real-time audio and video interactive activities based on the Agora SDK, this release supports the one-stop solution for the extensions from the Agora extensions marketplace:
- Easy to integrate: The integration of modular functions can be achieved simply by calling an API, and the integration efficiency is improved by nearly 95%.
- Extensibility design: The modular and extensible SDK design style endows the Agora SDK with good extensibility, which enables developers to quickly build real-time interactive apps based on the Agora extensions marketplace ecosystem.
- Build an ecosystem: A community of real-time audio and video apps has developed that can accommodate a wide range of developers, offering a variety of extension combinations. After integrating the extensions, developers can build richer real-time interactive functions. For details, see Use an Extension.
- Become a vendor: Vendors can integrate their products with Agora SDK in the form of extensions, display and publish them in the Agora extensions marketplace, and build a real-time interactive ecosystem for developers together with Agora. For details on how to develop and publish extensions, see Become a Vendor.
8. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the AgoraRtcChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio sources.
- Sets or switches channel profile and user role.
- Controls audio publishing delay.
Set AgoraRtcChannelMediaOptions when calling joinChannelByToken or joinChannelExByToken to specify the publishing and subscription behavior of a media stream, for example, whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelWithMediaOptions to update the settings in AgoraRtcChannelMediaOptions at any time, for example, to switch the published audio sources.
9. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
StartScreenCapturemethod before joining a channel, and then callJoinChannelByToken[2/4] to join a channel and setpublishScreenCaptureVideoasYES. - Call the
StartScreenCapturemethod after joining a channel, and then callupdateChannelWithMediaOptionsto setpublishScreenCaptureVideoasYES.
10. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio streams. You can add a user ID that you want to subscribe to in your allowlist, or add a user ID for the streams you do not wish to see to your blocklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the AgoraRtcEngineKit(Ex) interface:
setSubscribeAudioBlacklist:Set the audio subscription blocklist.setSubscribeAudioWhitelist:Set the audio subscription allowlist.
If a user is added in a blocklist and a allowlist at the same time, only the blocklist takes effect.
11. Set audio scenarios
To make it easier to change audio scenarios, this release adds the setAudioScenario method. For example, if you want to change the audio scenario from AgoraAudioScenarioDefault to AgoraAudioScenarioGameStreaming when you are in a channel, you can call this method.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as switchChannelByToken in v3.7.x through the leaveChannel and joinChannelByToken methods so that you don't need to take the time to call the switchChannelByToken method.
2. Voice pitch of the local user
This release adds voicePitch in AgoraRtcAudioVolumeInfo of reportAudioVolumeIndicationOfSpeakers. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on January 19, 2026.
New features
Included in this release:
-
Support for getting audio buffer delay
To address the issue where the main vocal and background accompaniment may be out of sync in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module to get the millisecond-level audio buffer delay when playing media files.
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
networkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
Support for window foreground sharing
Fixes an issue where window foreground sharing did not work on macOS 14 and above. Add the
NSAccessibilityUsageDescriptionpermission in your project'splist. After adding, the system prompts the user to grant accessibility access, enabling window foreground sharing. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Adds error codes
AgoraErrorCodePcmSendFormat (200)andAgoraErrorCodePcmSendBufferOverflow (201)to report PCM data transmission errors.
- Adds error codes
Compatibility changes
This release introduces the following compatibility changes:
-
Support for custom encoding frame rate
The data type of the
frameRateparameter inAgoraVideoEncoderConfigurationchanged from an enumeration to anInt. During integration, refer to the originalAgoraVideoFrameRateenum values for configuration. -
Decoder plugins built into the SDK
The relevant decoder plugins are now built into the SDK to ensure overall decoding compatibility.
v4.6.0
Released on August 26, 2025.
The version of the aosl.xcframework library in the v4.6.0 SDK is 1.3.0. You can find the library version information in Info.plist.
Compatibility changes
This version includes SDK behavior changes, API deprecations, and deletions. To ensure your app functions correctly, update your code after upgrading to this version.
For details on deprecated and deleted APIs in each version, see the API Sunset Notice.
-
Deprecation of direct CDN streaming APIs
Deprecates the APIs related to direct CDN streaming, which will be removed in a future release. Agora recommends using Media Push instead.
setDirectCdnStreamingAudioConfiguration:setDirectCdnStreamingVideoConfiguration:startDirectCdnStreaming:publishUrl:mediaOptions:stopDirectCdnStreamingrtcEngine:didDirectCdnStreamingStateChanged:reason:message:AgoraDirectCdnStreamingMediaOptionsAgoraDirectCdnStreamingStatsAgoraDirectCdnStreamingStateAgoraDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
Deprecates the APIs for the virtual metronome feature, which will be removed in a future release.
startRhythmPlayer:sound2:config:configRhythmPlayer:rtcEngine:didRhythmPlayerStateChanged:reason:
-
Deprecation of watermark APIs
Deprecates the old watermark APIs. Agora recommends using the new watermark APIs introduced in this version.
addVideoWatermark:options:addVideoWatermarkEx:options:connection:
-
Deletion of redundant APIs
Removed the following redundant APIs and parameters:
setLocalPublishFallbackOption:rtcEngine:didLocalPublishFallbackToAudioOnly:downlinkNetworkInfoUpdatewlAccStatsAgoraWlAccReasonAgoraWlAccActionrtcEngine:wlAccStats:averageStats:rtcEngine:wlAccMessage:action:wlAccMsg:enableWirelessAcceleratereceivedFrameRate(removed fromAgoraRtcRemoteVideoStats)
-
Changes to int UID and string UID mapping
- Before v4.6.0: If
registerLocalUserAccountWithAppID:userAccount:was used to register a string UID (for example, "aa") and obtain an int UID (for example, 123), joining a channel later with the int UID automatically mapped it to the original string UID ("aa"). - From v4.6.0: The SDK no longer automatically maps an int UID to the original string UID. If
registerLocalUserAccountWithAppID:userAccount:was called to get an int UID but the channel needs to be joined with the original string UID, calljoinChannelByUserAccount:token:channelId:joinSuccess:directly with the string UID. After upgrading, review and update app logic to ensure users join the channel with the expected identity.
- Before v4.6.0: If
-
Added domain whitelist
If you have upgraded from a previous SDK version to v4.6.0 and are using the domain whitelist feature (set
domainLimitinAgoraRtcEngineConfigtoYES), add the following domains to the whitelist to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
New features
-
Simulcasting multi-bitrate video streams (Beta)
Added support for sending multiple video streams of different resolutions from a single video source, including in multi-channel scenarios. You can now configure up to four layers: one high-resolution stream and up to three lower-resolution streams. Use configuration options to define resolution, bitrate, and whether to automatically reduce the number of streams when network or device performance drops. Subscribers can choose which stream to receive based on their network conditions. This feature helps developers deliver smooth experiences in scenarios such as conferences, large classes, and interactive live streaming, even when network conditions are poor.
-
Multipath network transmission
Introduced multipath transmission for devices with multiple network interfaces (for example, 5G, Wi-Fi, and LAN). This feature effectively reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication scenarios that demand high transmission stability, such as in-vehicle systems, IoT, trains, and highways. Enable it by setting enableMultipath in AgoraRtcChannelMediaOptions to YES.
- Dynamic mode: Dynamically selects the optimal path based on network conditions. Optionally set
preferMultipathTypeto prioritize a path type. If not set, all path types have the same default weight. - Duplicate mode: Sends data simultaneously over all available paths for maximum stability. This mode incurs additional costs and eliminates the impact of poor network conditions.
Configure uplink and downlink modes separately with uplinkMultipathMode and downlinkMultipathMode. Monitor performance with the rtcEngine:didMultipathStatsChanged: callback, which reports real-time transmission statistics for each path, including data consumption. Contact support@agora.io to enable duplicate mode.
- Video quality scoring
Added the mosValue member to AgoraRtcRemoteVideoStats to report a score from 1 (extremely poor with severe blurring) to 5 (excellent with clear image and no artifacts) for received video quality. This enables real-time monitoring of the subjective quality of remote video streams, which helps in dynamically adjusting video parameters for quality monitoring and alerting. Contact support@agora.io to enable this feature.
- Support for adding multiple watermarks
Introduced addVideoWatermarkWithImageUrl:options: and addVideoWatermarkWithImageUrlEx:options:connection:, which support multiple watermarks with IDs and layering order. Remove a specific watermark using removeVideoWatermark:.
- Asynchronous engine destruction
Added the destroy: method, supporting synchronous or asynchronous engine destruction. In asynchronous mode, the SDK triggers the engineReleasedBlock callback.
- Token renewal result callback
Added the rtcEngine:didRenewTokenResult: callback and RENEW_TOKEN_ERROR_CODE to report the result of renewToken:. This allows developers to handle Token renewal failures promptly within the callback.
- Advanced beauty (Beta)
Introduced a brand-new advanced beauty feature, delivering a powerful yet easy-to-use beautification solution.
-
Precision beauty effects
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, slimming face, enlarging eyes, narrowing nose) or one-click natural effects via presets.
- Style makeup: Offers rich effects including eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancement: Includes professional skin optimizations such as teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
-
Unified and simple API Manage all beauty, makeup, and filter functions through three core nodes —
BEAUTY,STYLE_MAKEUP, andFILTER— usingIVideoEffectObjectfor unified parameter setup and lifecycle control. -
Ready-to-use presets Integrates multiple out-of-the-box style templates (for example, "Natural Beauty," "Senior Makeup," "Cool White Filter") for instant polished results.
-
Dynamic parameter control Enables real-time reading and modification of granular parameters (for example, smoothing strength, lipstick type) via key-value pairs, with support for saving custom configurations and resetting defaults.
-
Local resource guarantee All beauty resources (effects, filters, makeup) are packaged as local bundle files, ensuring stability and reliability.
-
Other new features
-
Added
setPlaybackAudioFrameBeforeMixingParameters:to configure the format of raw audio frames returned inonPlaybackAudioFrameBeforeMixing:channelId:uid:, including sample rate, number of channels, and the number of samples per callback. -
Added
preloadEffectEx:soundId:to preload audio effects into a specific channel. Supports both local and online audio files, enabling faster playback later and is suitable for multi-channel scenarios. -
Added
playEffectEx:soundId:filePath:loopCount:pitch:pan:gain:publish:startPos:for advanced audio effect playback in a specific channel with parameters such as loop count, pitch, spatial position, volume, whether to publish to the channel, and the starting playback position. -
Added the
positionmember inAgoraContentInspectModuleto choose the capture point for screenshot uploads from either the raw video data or the video stream before or after effects processing. -
Added the
screenColorTypemember toAgoraSegmentationPropertyfor specifying or auto-detecting background screen color (green, blue, or auto-detect) to improve the accuracy and stability of portrait segmentation when using virtual backgrounds.
Improvements
- Added support for G.711 and G.722 audio codecs when interoperating with the Web SDK for improved cross-platform audio compatibility and clarity.
- Improved video clarity in screen sharing scenarios involving documents.
Issues fixed
This version fixes the following issues:
- Online audio effect playback restarted from the beginning when
seekToPosition:was called. - Occasional echoes in media volume mode when publishing a microphone stream while simultaneously playing effects with
playEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:and music withstartAudioMixing:loopback:cycle:startPos:. - Missing media metadata observer callback in cases where
setMediaMetadataDelegate:withType:was called aftersetExternalVideoSource:useTexture:sourceType:. - Occasional crashes.
- Media relay occasionally reported
AgoraChannelMediaRelayStateFailureandAgoraChannelMediaRelayErrorServerErrorResponseafter the following sequence: join, relay, unpublish, leave, rejoin, and start relay again.
v4.5.2
v4.5.2 was released on April 22, 2025.
Note
The aosl.xcframework library version in Video SDK v4.5.2 is 1.2.13. You can check the version in the Info.plist file.
Issues fixed
This release fixes the following issues:
- While playing a multi-track media file, noise was heard after adjusting the audio pitch using
setAudioPitch. - When the host called
createCustomAudioTrack:config:to create a custom audio track withtrackTypeset toAUDIO_TRACK_DIRECT, then calledpushExternalAudioFrameRawData:samples:sampleRate:channels:trackId:timestamp:to push custom audio frames to a channel, and finally calledplayEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:to play an audio effect, audience members in the channel heard noise. - Apps using the SDK occasionally experienced UI lag caused by main thread blocking during audio and video interactions.
- Calling
openWithMediaSource:and settingisLiveSourcetoYESin the source parameter to play a video stream caused playback failure. - When the sender transmitted multi-channel encoded audio, noise was occasionally heard by the receiver.
- When the app integrated a media player and called
opentwice to load different media resources consecutively, the second call incorrectly triggered theAgoraRtcMediaPlayer:infoUpdated:callback with information from the first media resource. - After enabling user volume indication with
enableAudioVolumeIndication:smooth:reportVad:, thertcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:callback reported a local user volume of 0 for both local and remote users. - When you called
enableVideoImageSource:options:to enable the video image source feature, the sender streamed successfully but thertcEngine:didVideoPublishStateChange:sourceType:oldState:newState:elapseSinceLastState:callback occasionally did not return the expected result. - In multi-channel scenarios, if the app called
setupRemoteVideoEx:connection:to initialize the remote user's view before successfully callingjoinChannelExByToken:connection:delegate:mediaOptions:, the view failed to display correctly.
v4.5.1
v4.5.1 was released on March 4, 2025.
Note
The aosl.xcframework library version in Video SDK v4.5.1 is 1.2.13. You can check the version in the Info.plist file.
New Features
-
AI Conversation Scenario
This version introduces the
AgoraAudioScenarioAiClientaudio scenario, specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on the characteristics of AI-generated voices, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. The optimization enhances conversation continuity and reliability, adapting to various challenging network environments.
Issues Fixed
This release resolves the following issues:
- When joining two or more channels simultaneously and calling
takeSnapshotEx:uid:filePath:to capture local video stream screenshots consecutively, the first channel's screenshot failed. - When using the
pausemethod to pause playback, then callingseekToPosition:to move to a specific position, and finally callingplay, the Media Player resumed from the paused position instead of the specified position. - When using the Media Player, the file path of the media resource returned by
getPlaySrcdid not update after callingswitchSrc:syncPts:to switch to a new media resource. - In interactive live streaming scenarios, after joining a channel as an audience member using a
stringuser ID, audio occasionally became unsynchronized with video. - AI noise suppression and AI echo cancellation plugins sometimes failed when used together.
v4.5.0
v4.5.0 was released on November 27, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
As of v4.5.0, both Video SDK and Signaling SDK (v2.2.0 and above) include the aosl.xcframework library. If you manually integrate Video SDK via CDN and also use Signaling SDK, delete the earlier version of the aosl.xcframework library to avoid conflicts. The aosl.xcframework library version in Video SDK v4.5.0 is 1.2.13. You can check the version in the Info.plist file.
-
Automatic installation of virtual sound card
Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call
enableLoopbackRecording:deviceName:for the first time, the SDK will automatically install the AgoraALD, a virtual sound card developed by Agora. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture. -
Changes in strong video noise suppression
This version adjusts the implementation of strong video noise suppression.
AgoraVideoDenoiserLevelremovesAgoraVideoDenoiserLevelStrength. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions:options:, you can call thesetBeautyEffectOptions:options:method to enable the beauty skin smoothing feature. Using both together will help achieve better noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions:options:.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions:options:. -
Changes in camera plug and unplug status
In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged.
-
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
AgoraCompressionPreferenceenumeration class, a newAgoraCompressionAuto(-1) enumeration is added, replacing the originalAgoraCompressionQuality(1) as the default value. In this mode, the SDK will automatically choose betweenAgoraCompressionLowLatencyorAgoraCompressionQualitybased on your video scene settings to achieve the best user experience. - In the
AgoraDegradationPreferenceenumeration class, a newAgoraDegradationMaintainAuto(-1) enumeration is added, replacing the originalAgoraDegradationMaintainQuality(1) as the default value. In this mode, the SDK will automatically choose betweenAgoraDegradationMaintainFramerate,AgoraDegradationBalanced, orAgoraDegradationMaintainResolutionbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
AgoraApplicationLiveShowScenario(3) (Live Show) enumeration toAgoraApplicationScenarioType. You can callsetVideoScenario:to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency for better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (for example, screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptions:options:sourceType:method. You can pass a cube map file (.cube) in theconfigparameter to apply custom filter effects such as whitening, vivid, cool, black and white, and others. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile to quickly apply a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- When using the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
Color space settings
This version adds the
colorSpaceparameter toAgoraOutputVideoFrameandAgoraVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Others
- The
rtcEngine:device:type:stateChanged:callback supports reporting that the device has been plugged in.
- The
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshotWithConfig:config:andtakeSnapshotExWithConfig:uid:config:methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAgoraAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isNO, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- This version optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - When calling
switchSrc:syncPts:to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theAgoraRtcMediaPlayer:didOccurEvent:elapsedTime:message:callback will report theAgoraMediaPlayerEventSwitchErrorevent, indicating that an error occurred during media resource switching. - When calling
setPlaybackSpeed:to set the playback speed of an audio file, the minimum supported speed is 0.3x.
- This version optimizes the logic for calling
Bug fixes
This version fixes the following issue:
- Calling
startAudioMixing:loopback:cycle:and then immediately callingpauseAudioMixingto pause the music file playback does not take effect.
v4.4.0
v4.4.0 was released on August 5, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
Starting from v4.4.0, the SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See API sunset notice.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see table below). You can identify the extension name, the user ID, and the service provider name through
AgoraExtensionContextin each callback.Original callback New callback onEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext -
This version renames the
receiveMetadatacallback todidMetadataReceivedand removes thedataandtimeStampparameters. You can get metadata-related information, includingtimeStamp(timestamp of the sent data),uid(user ID), andchannelId(channel name) through the newly-addedmetadataparameter.
New features
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
AgoraOutputVideoFrameandAgoraVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.AgoraVideoFrameadds thefillAlphaBuffermember. For BGRA or RGBA formatted video data, it sets whether to automatically extract the Alpha channel data and fill it intoalphaBuffer.AgoraOutputVideoFrameandAgoraVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AgoraAdvancedVideoOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callsetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatoYES. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theAgoraVoiceAITunerTypeenum to achieve effects like deep voice, cute voice, husky singing voice, and so on.
Improvements
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - The
AgoraLocalVideoStreamReasonScreenCaptureDisplayDisconnectedenumerator is added inlocalVideoStateChangedOfStatecallback, indicating that the display used for screen capture has been disconnected. - Optimizes the video link for window sharing, reducing CPU usage.
- Deprecates redundant enumeration values
AgoraClientRoleChangeFailedRequestTimeoutandAgoraClientRoleChangeFailedConnectionFailedinAgoraClientRoleChangeFailedReason.
- Optimizes transmission strategy: Calling
v4.3.2
v4.3.2 was released on June 4, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app occasionally crashed when remote users left the channel.
v4.3.1
v4.3.1 was released on April 29, 2024.
New features
-
Portrait center stage
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the enableCameraCenterStage method to activate the portrait center stage. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling the portrait center stage, it is recommended to verify whether your current device supports this feature by calling isCameraCenterStageSupported. A list of supported devices can be found in the API documentation at enableCameraCenterStage.
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto AgoraEncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREandENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILUREenumerations. -
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode [2/2], the SDK defaults to the following behaviors:
- The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization of local video status callbacks
To facilitate understanding of the specific reasons for changes in local video status, this version adds the following enumerations to the localVideoStateChangedOf callback's AgoraLocalVideoStreamReason enumeration class:
AgoraLocalVideoStreamReasonScreenCaptureRecoverFromMinimized(27): The window being captured for screen sharing has recovered from a minimized state.
-
Audio device type detection
This version adds the
deviceTypeNamemember toAgoraRtcDeviceInfo, used to identify the type of audio devices, such as built-in, USB, HDMI, etc. -
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges.
-
Custom audio capture optimization
To enhance the flexibility of custom audio capture, this release deprecates pushExternalAudioFrameSampleBuffer [1/2] and introduces pushExternalAudioFrameSampleBuffer [2/2]. Compared to the deprecated method, the new method adds parameters such as
sampleRate,channels, andtrackId. These support pushing external CMSampleBuffer audio data to the channel via custom audio tracks, and allow for the setting of sample rates and channel counts for external audio sources. -
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
AgoraEarMonitoringFilterReusePostProcessingFilterinAgoraEarMonitoringFilterType. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen-sharing use-cases to save system performance overhead.
- For macOS 14 and above, optimization of getScreenCaptureSourcesWithThumbSize behavior. From this version onward, the method automatically filters out widget windows from the list of available window resources.
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AgoraAudioEffectPreset, a new enumeration
AgoraAudioEffectPresetRoomAcousticsChorus(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In AgoraRtcRemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- When a user plugged and unplugged a Bluetooth or wired headset once, the audio state change callback
stateChangedwas triggered multiple times. - When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- enableCameraCenterStage
- isCameraCenterStageSupported
- The following enumeration in AgoraLocalVideoStreamReason:
AgoraLocalVideoStreamReasonScreenCaptureRecoverFromMinimized
- setFaceInfoDelegate
- AgoraFaceInfoDelegate
- onFaceInfo
- The
publishLipSyncTrackmember in AgoraRtcChannelMediaOptions - AgoraMediaSourceType adds
AgoraMediaSourceTypeSpeechDriven - AgoraVideoSourceType adds
AgoraVideoSourceTypeSpeechDriven - AgoraEncryptionConfig adds
datastreamEncryptionEnabled - AgoraEncryptionErrorType adds the following enumerations:
ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE
- AgoraRtcDeviceInfo adds
deviceTypeName - AgoraRtcRemoteAudioStats adds
e2eDelay - AgoraErrorCode adds
AgoraErrorCodeDatastreamDecryptionFailed - AgoraAudioEffectPreset adds
AgoraAudioEffectPresetRoomAcousticsChorus, enhancing the spatial presence of vocals in chorus use-cases. - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- AgoraEarMonitoringFilterType adds a new enumeration
AgoraEarMonitoringFilterBuiltInAudioFilters - pushExternalAudioFrameSampleBuffer [2/2]
Deprecated
v4.3.0
v4.3.0 was released on February 22, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name localAudioStateChangederrorreasonlocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasondidChangedToStateerrorreasonrtmpStreamingChangedToStateerrCodereasonOriginal enumeration class New enumeration class AgoraAudioLocalErrorAgoraAudioLocalReasonAgoraLocalVideoStreamErrorAgoraLocalVideoStreamReasonAgoraDirectCdnStreamingErrorAgoraDirectCdnStreamingReasonAgoraMediaPlayerErrorAgoraMediaPlayerReasonAgoraRtmpStreamingErrorAgoraRtmpStreamingReasonNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelaystartOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExdidReceiveChannelMediaRelayEventchannelMediaRelayStateDidChange -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the AgoraLocalVideoStreamReason class:
- The
AgoraLocalVideoStreamErrorEncodeFailureenumeration has been changed toAgoraLocalVideoStreamReasonCodecNotSupport.
- The
-
Audio loopback capturing
- Before v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled.
- As of v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording.
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
New features
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo to set the first view: Set the
positionparameter toAgoraVideoModulePositionPostCaptureOrigin(introduced in this release) inAgoraRtcVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo to set the second view: Set the
positionparameter toAgoraVideoModulePositionPostCaptureinAgoraRtcVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo to set the first view: Set the
-
Query device score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the
openWithMediaSourcemethod and enable this function by setting theenableMultiAudioTrackparameter in AgoraMediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- didRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- [setPlayerOption 1/2] and [setPlayerOption 2/2]: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling methods in AgoraLocalSpatialAudioKit.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Local audio state changed callback optimization
This release introduces the following enumerations in AgoraAudioLocalReason, enabling users to obtain more details about local audio errors through the localAudioStateChanged callback:
AgoraAudioLocalReasonNoRecordingDevice: No recording device is available. Remind your users to check whether the microphone is connected to the device properly in the control plane of the device or if the microphone is working properly.AgoraAudioLocalReasonNoPlayoutDevice: No playback device is available. Remind your users to check whether the speaker is connected to the device properly in the control plane of the device or if the speaker is working properly.
-
Other improvements
This release also includes the following improvements:
- This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in AgoraRtcLocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - When using the sound card for recording, it supports capturing audio data in stereo.
- The cacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The playbackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file.
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the localVideoStats callback is 0, which is not as expected.
API changes
Added
- The
subviewUidmember in AgoraRtcVideoCanvas - The following enumerations in AgoraAudioLocalReason:
AgoraAudioLocalReasonNoRecordingDeviceAgoraAudioLocalReasonNoPlayoutDevice
- enableCustomAudioLocalPlayback
- queryDeviceScore
- The
AgoraMediaSourceTypeCustomVideoenumeration in AgoraMediaSourceType - The
AgoraAudioOutputRoutingBluetoothDeviceA2dpenumeration in AgoraAudioOutputRouting - Adds the
earMonitorDelayandaecEstimatedDelayin AgoraRtcLocalAudioStats - selectMultiAudioTrack
- cacheStats
- playbackStats
Modified
- All
Errorfields in the following enumerations are changed toReason:AgoraAudioLocalErrorOKAgoraAudioLocalErrorFailureAgoraAudioLocalErrorDeviceNoPermissionAgoraAudioLocalErrorDeviceBusyAgoraAudioLocalErrorRecordFailureAgoraAudioLocalErrorEncodeFailureAgoraLocalVideoStreamErrorOKAgoraLocalVideoStreamErrorFailureAgoraLocalVideoStreamErrorDeviceNoPermissionAgoraLocalVideoStreamErrorDeviceBusyAgoraLocalVideoStreamErrorCaptureFailureAgoraLocalVideoStreamErrorCodecNotSupportAgoraLocalVideoStreamErrorCaptureInBackGroundAgoraLocalVideoStreamErrorCaptureMultipleForegroundAppsAgoraLocalVideoStreamErrorCaptureNoDeviceFoundAgoraLocalVideoStreamErrorCaptureDeviceDisconnectedAgoraLocalVideoStreamErrorCaptureDeviceInvalidIdAgoraDirectCdnStreamingErrorOKAgoraDirectCdnStreamingErrorFailedAgoraDirectCdnStreamingErrorAudioPublicationAgoraDirectCdnStreamingErrorVideoPublicationAgoraDirectCdnStreamingErrorNetConnectAgoraDirectCdnStreamingErrorBadNameAgoraMediaPlayerErrorNoneAgoraMediaPlayerErrorInvalidArgumentsAgoraMediaPlayerErrorInternalAgoraMediaPlayerErrorNoSourceAgoraMediaPlayerErrorInvalidMediaSourceAgoraMediaPlayerErrorUnknowStreamTypeAgoraMediaPlayerErrorObjNotInitializedAgoraMediaPlayerErrorCodecNotSupportedAgoraMediaPlayerErrorVideoRenderFailedAgoraMediaPlayerErrorInvalidStateAgoraMediaPlayerErrorUrlNotFoundAgoraMediaPlayerErrorInvalidConnectStateAgoraMediaPlayerErrorSrcBufferUnderflowAgoraMediaPlayerErrorInterruptedAgoraMediaPlayerErrorNotSupportedAgoraMediaPlayerErrorTokenExpiredAgoraMediaPlayerErrorUnknownAgoraRtmpStreamingErrorOKAgoraRtmpStreamingErrorInvalidParametersAgoraRtmpStreamingErrorEncryptedStreamNotAllowedAgoraRtmpStreamingErrorConnectionTimeoutAgoraRtmpStreamingErrorInternalServerErrorAgoraRtmpStreamingErrorRtmpServerErrorAgoraRtmpStreamingErrorTooOftenAgoraRtmpStreamingErrorReachLimitAgoraRtmpStreamingErrorNotAuthorizedAgoraRtmpStreamingErrorStreamNotFoundAgoraRtmpStreamingErrorFormatNotSupportedAgoraRtmpStreamingErrorNotBroadcasterAgoraRtmpStreamingErrorTranscodingNoMixStreamAgoraRtmpStreamingErrorNetDownAgoraRtmpStreamingErrorInvalidPrivilegeAgoraRtmpStreamingErrorUnpublishOK
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExdidReceiveChannelMediaRelayEventAgoraChannelMediaRelayEvent
v4.2.6
v4.2.6 was released on November 17, 2023.
Issues fixed
This release fixed the following issue:
- In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.3
v4.2.3 was released on October 11, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
AgoraContentInspectTypeImageModerationenumeration is added inAgoraContentInspectTypewhich means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inAgoraContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
enableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code -4 is returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform).
Other Improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional crashes when joining a channel.
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffect [3/3]method to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - Calling
takeSnapshotExonce receives thesnapshotTakencallback for multiple times.
API changes
Added
enableContentInspectExAgoraContentInspectTypeImageModerationinAgoraContentInspectType.serverConfiginAgoraContentInspectConfigisFeatureAvailableOnDeviceAgoraFeatureType
v4.2.2
v4.2.2 was released on july 27, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelByToken[1/2]andpreloadChannelByToken[2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toAgoraRtcVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Video source types for local preview
To allow users in selecting different types of video sources for local video preview, this release introduces
startPreview [2/2]andstopPreview [2/2]. You can callstartPreview [2/2]and specify the type of video source to be previewed by setting thesourceTypeparameter, and callstopPreview [2/2]to stop the video preview.
The video source type specified in this method must match the video source type set in the AgoraRtcVideoCanvas of the setupLocalVideo method.
:::
-
Publishing video streams from different sources
This release adds the following members in
AgoraRtcChannelMediaOptionsto allow you publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
For one AgoraRtcConnection, Agora supports publishing multiple audio streams and
one video stream at the same time.
Improvements
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapAgoraVideoCodecCapInfoInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- The SDK automatically adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
AgoraVideoRemoteReasonCodecNotSupportenumeration has been added to theremoteVideoStateChangedOfUidcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Occasionally, noise occurred when the local user listened to their own and remote audio after joining the channel.
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically.
API changes
Added
startPreview [2/2]stopPreview [2/2]preloadChannelByToken [1/2]preloadChannelByToken [2/2]updatePreloadChannelToken- The following members in
AgoraRtcChannelMediaOptions:publishThirdCameraTrackpublishFourthCameraTrackpublishThirdScreenTrackpublishFourthScreenTrack
AgoraVideoCodecCapLevelsAgoraVideoCodecCapabilityLevelbackgroundColorinAgoraRtcVideoCanvascodecLevelsinCodecCapAgoraVideoCodecCapInfoInfoAgoraVideoRemoteReasonCodecNotSupportinAgoraVideoRemoteReason
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- After enabling the screen sharing function on the sending end, there was high delay until the receiving end could see the shared screen.
v4.2.0
v4.2.0 was released on May 24, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video data acquisition
The onCaptureVideoFrame and onPreEncodeVideoFrame callbacks are added with a new parameter called sourceType, which is used to indicate the specific video source type.
2. Channel media options
publishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinAgoraRtcChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinAgoraRtcChannelMediaOptionsis renamed topublishCustomAudioTrackId.
3. Virtual sound card
As of v4.2.0, Agora supports third-party virtual sound cards. You can use a third-party virtual sound card as the audio input or output device for the SDK. You can use the stateChanged callback to see whether the current input or output device selected by the SDK is a virtual sound card.
If you set AgoraALD or Soundflower as the default input or output device when joining a channel, you will not hear audio.
4. Miscellaneous
didApiCallExecuteis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.enableDualStreamMode[1/2] andenableDualStreamMode[2/2] are deprecated. UsesetDualStreamMode[1/2] andsetDualStreamMode[2/2] instead.startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode as balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background function. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
- Segment the portrait in the remote video, transmit it locally, and customize the display. This feature is available via private APIs. Contact support@agora.io to enable this feature.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting use-cases where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the didLocalVideoTranscoderErrorWithStream callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the didLocalVideoTranscoderErrorWithStream callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
3. Multi-camera capture and multi-screen capture
This release introduces startCameraCapture and startScreenCapture[2/2]. By calling these methods multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras and screens for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras and displays need to be connected.
4. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
5. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
Issues fixed
This release fixed the following issues:
- When the host frequently switching the user role between broadcaster and audience in a short period of time, the audience members cannot hear the audio of the host.
- The receiver was receiving the low-quality stream originally, and automatically switched to high-quality stream after a few seconds.
- Incorrect information in the
typefield of the return value after callinggetDefaultAudioDevice. - Occasional screen jittering during screen sharing.
API changes
Added
startCameraCapturestopCameraCapturestartScreenCapture[2/2]stopScreenCapture[2/2]startOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsdidLocalVideoTranscoderErrorWithStreamstartLocalVideoTranscoderupdateLocalTranscoderConfigurationsetAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAgoraAudioTrackTypeAgoraApplicationScenarioTypeAgoraScreenCaptureFrameRateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inAgoraRtcEngineConfig - The
channelIdanduidparameters instateDidChangedandinformationDidUpdatedcallbacks - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
AgoraVirtualBackgroundNoneandAgoraVirtualBackgroundVideoenumerators inAgoraVirtualBackgroundSourceType
Deprecated
enableDualStreamMode[1/2]enableDualStreamMode[2/2]startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExdidReceiveChannelMediaRelayEventAgoraChannelMediaRelayEvent
Deleted
didApiCallExecutepublishCustomAudioTrackEnableAecinAgoraRtcChannelMediaOptions
v4.1.1
v4.1.1 was released on February 8, 2023.
Compatibility changes
1. Default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
2. Options for subscribing to remote video streams
This release changes the name of setRemoteVideo to setRemoteVideoSubscriptionOptions, and the name of setRemoteVideoEx to setRemoteVideoSubscriptionOptionsEx. If you upgrade the SDK to this version or later, to avoid affecting your service, ensure that you modify the names of these two methods.
New features
1. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
2. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the videoRenderingTracingResultOfUid callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel and then get the indicators in the video frame rendering process through the videoRenderingTracingResultOfUid callback.
This enables developers to optimize the indicators to improve the user experience.
Improvements
Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
AgoraVideoFrameProcessModeReadOnly, the return value is reserved for future use. - When the video processing mode is
AgoraVideoFrameProcessModeReadWrite, the SDK receives the video frame when the return value isYES. The video frame is discarded when the return value isNO.
Issues fixed
This release fixed the following issues:
- Playing audio files with a sample rate of 48 kHz failed.
- If the rendering view of the player was set as a
UIViewController's view, the video was zoomed from the bottom-left corner to the middle of the screen when entering full-screen mode. - When joining a channel and accessing an external camera, calling
setDeviceto specify the video capture device as the external camera did not take effect. - When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
enableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExvideoRenderingTracingResultOfUidAgoraMediaRenderTraceEventVideoRenderingTracingInfo
Modified
setRemoteVideotosetRemoteVideoSubscriptionOptionssetRemoteVideoExtosetRemoteVideoSubscriptionOptionsEx
Deleted
enableRemoteSuperResolutionsuperResolutionTypeinAgoraRtcRemoteVideoStats
v4.1.0
v4.1.0 was released on December 15, 2022.
New features
1. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
2. Encoded video frame observer
This release adds the setRemoteVideo method in the AgoraRtcEngineKit and AgoraRtcEngineKitEx classes. When you call the setEncodedVideoFrameDelegate method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
3. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
4. Camera capture options
This release adds the followEncodeDimensionRatio member in AgoraCameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
5. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
leaveChannelEx[2/2] method. Compared with theleaveChannelEx[1/2] method, a newoptionsparameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
6. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advancedVideoOptions member in AgoraVideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
7. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the didClientRoleChanged callback. The value of this parameter is as follows:
AgoraAudienceLatencyLevelLowLatency(1): Low latency.AgoraAudienceLatencyLevelUltraLowLatency(2): Ultra-low latency.
8. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io.
9. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense of presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user, respectively, by callingsetPlayerAttenuationandsetRemoteAudioAttenuation, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams, and the receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the hearing of the headphones.
Improvements
1. Screen sharing
In addition to the usability enhancements detailed in the fixed issued section, this release includes a number of functional improvements to screen sharing, as follows:
- Compatibility with additional devices and use-cases, including: dual graphics devices and screen sharing using external screens.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a 2021 16" M1 Macbook Pro or better.
2. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
3. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
4. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AgoraAudioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Reduces the CPU usage and power consumption of the local device when the host calls the
muteLocalVideoStreammethod. - Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios.
Issues fixed
This release fixed the following issues:
- In screen sharing use-cases on Mac devices, when the user minimized or closed a shared application window, another window of the same application was automatically shared.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, the shared window of a split screen was not highlighted correctly.
- In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
networkQualitycallback was inaccurate for the user who was sharing a screen. - After starting and stopping the audio capture device test, there was no sound when the audio playback device was subsequently started.
- Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- The
didVideoPublishStateChangecallback reported an inaccurate video source type. - The call
getExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
API changes
Added
setHeadphoneEQParameterssetRemoteVideoSubscriptionOptionssetRemoteVideoSubscriptionOptionsExAgoraVideoSubscriptionOptionsmuteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayExfollowEncodeDimensionRatioinAgoraCameraCapturerConfigurationhwEncoderAcceleratinginAgoraRtcLocalVideoStatsleaveChannelEx[2/2]advancedVideoOptionsinAgoraVideoEncoderConfigurationnewRoleOptionsindidClientRoleChangedadjustUserPlaybackSignalVolumeExenableAudioVolumeIndicationEx
Deprecated
didApiCallExecute. Use the callbacks triggered by specific methods instead.
Deleted
- Removes deprecated member parameters
backgroundImageandwatermarkinAgoraLiveTranscodingclass. - Removes
AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8) indidReceiveChannelMediaRelayEventcallback.
v4.0.1
v4.0.1 was released on September 29, 2022.
Compatibility changes
- To improve code usability, this release changes the parameters in optional type in the following classes to basic data types such as
boolandint:
- The parameter types of
publishCameraTrack,publishMicrophoneTrack,publishCustomAudioTrack,publishCustomVideoTrack, andpublishMediaPlayerAudioTrackinAgoraDirectCdnStreamingMediaOptionsare changed fromoptionaltobool. isAgoraSourceandisLiveSourceinAgoraMediaSourceis changed from optional to bool.- All parameter types in
AgoraRtcChannelMediaOptionsare changed fromoptionaltoboolorint.
-
The
positionparameter in thedestroyCustomVideoTrackmethod is changed totrackid. -
This release deletes the
sourceTypeparameter inenableDualStreamMode[3/3] andenableDualStreamModeEx, and theenableDualStreamMode[2/3] method, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK, you don't need to specify the video source type any more.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call enableInEarMonitoring to enable the in-ear monitoring function.
After successfully enabling the in-ear monitoring function, you can call setAudioFrameDelegate to register the audio observer, and the SDK triggers the onEarMonitoringAudioFrame callback to report the audio frame data. You can use your own audio effect processing module to pre-process the audio frame data of the in-ear monitoring to implement custom audio effects. Agora recommends that you choose one of the following two methods to set the audio data format of the in-ear monitoring:
- Call the
setEarMonitoringAudioFrameParametersWithSampleRatemethod to set the audio data format of in-ear monitoring. The SDK calculates the sampling interval based on the parameters in this method, and triggers theonEarMonitoringAudioFramecallback based on the sampling interval. - Set the audio data format in the return value of the
getEarMonitoringAudioParamscallback. The SDK calculates the sampling interval based on the return value of the callback, and triggers the onEarMonitoringAudioFrame callback based on the sampling interval.
To adjust the in-ear monitoring volume, you can call setInEarMonitoringVolume.
2. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use, including UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, 5G. When the local network connection type changes, the SDK triggers the networkTypeChangedToType callback to report the current network connection type.
3. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports 3 audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; you can contact support@agora.io to adjust this number according to your use-case.
Meanwhile, Agora supports publishers to choose whether or not the audio streams being published are to be filtered based on volume. Streams that are not filtered will bypass this filter mechanism and transported directly to the receivers. In use-cases where there are a number of publishers, enabling this function helps reducing the bandwidth and device system pressure for the receivers.
To enable this function, contact support@agora.io.
4. Dual-stream mode
This release optimizes the dual-stream mode, you can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams), you can follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify the default behavior above, you can call setDualStreamMode[1/2] or setDualStreamMode[2/2] and set the mode parameter to AgoraDisableSimulcastStream (always do not send low-quality video streams) or AgoraEnableSimulcastStream (always send low-quality video streams).
Improvements
1. Video information change callback
This release optimizes the trigger logic of videoSizeChangedOfUid, which can also be triggered and report the local video size change when startPreview is called separately.
Issues fixed
This release fixed the following issues.
-
When capturing video through the camera, if the video aspect ratio set in
AgoraCameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. -
When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. -
When using the Agora media player to play videos, after you play and pause the video, and then call the seek method to specify a new position for playback, the video image might remain unchanged; if you call the resume method to resume playback, the video might be played in a speed faster than the original one.
API changes
Added
-
getEarMonitoringAudioParams -
getNetworkType -
isAudioFilterablein theChannelMediaOptions -
setDualStreamMode[1/2] -
setDualStreamMode[2/2] -
setDualStreamModeEx -
AgoraSimulcastStreamMode -
setZones -
setPlayerAttenuation -
setRemoteAudioAttenuation -
muteRemoteAudioStream -
SpatialAudioParams -
setHeadphoneEQPreset -
AgoraHeadphoneEQPreset
Modified
enableDualStreamMode[1/3]enableDualStreamMode[3/3]enableDualStreamModeEx
Deprecated
startEchoTest[2/3]
Deleted
enableDualStreamMode[2/3]
v4.0.0
v4.0.0 was released on September 15, 2022.
Compatibility changes
1. Integration change
This release has optimized the implementation of some features, resulting in incompatibility with v3.7.x. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Custom video capture and rendering (Media IO)
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migrate from v3.7.x to v4.0.0.
New features
1. Multiple media tracks
This release supports one AgoraRtcEngineKit instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting AgoraRtcEngineKit(Ex) and AgoraRtcChannelMediaOptions.
- After calling
joinChannelByTokento join the first channel, calljoinChannelExByTokenmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andAgoraRtcChannelMediaOptionssettings.
This release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call this method to create a video track, and get the video track ID.
- Set the custom video track to be published in the channel: In each channel's
AgoraRtcChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifycustomVideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling setVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
This feature has certain requirements with regards to device performance and network bandwidth, and the supported upstream and downstream frame rates vary on different platforms. To enable this feature, contact support@agora.io.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayerWithDelegate method to create a media player object, you can then call the methods in the AgoraRtcMediaPlayerProtocol class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the AgoraVoiceBeautifierUltraHighQuality enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Spatial audio
This feature is in experimental status. To enable this feature, contact support@agora.io. Contact Technical Support if needed.
You can set the spatial audio for the remote user as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
AgoraLocalSpatialAudioKitclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users, respectively, so that the local user can hear the spatial audio effect of the remote user.
You can also set the spatial audio for the media player as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
AgoraLocalSpatialAudioKitclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
6. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AgoraAudioScenarioChorus enumeration in AgoraAudioScenario. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
7. Extensions from the Agora extensions marketplace
In order to enhance the real-time audio and video interactive activities based on the Agora SDK, this release supports the one-stop solution for the extensions from the Agora extensions marketplace:
- Easy to integrate: The integration of modular functions can be achieved simply by calling an API, and the integration efficiency is improved by nearly 95%.
- Extensibility design: The modular and extensible SDK design style endows the Agora SDK with good extensibility, which enables developers to quickly build real-time interactive apps based on the Agora extensions marketplace ecosystem.
- Build an ecosystem: A community of real-time audio and video apps has developed that can accommodate a wide range of developers, offering a variety of extension combinations. After integrating the extensions, developers can build richer real-time interactive functions. For details, see Use an Extension.
- Become a vendor: Vendors can integrate their products with Agora SDK in the form of extensions, display and publish them in the Agora extensions marketplace, and build a real-time interactive ecosystem for developers together with Agora. For details on how to develop and publish extensions, see Become a Vendor.
8. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the AgoraRtcChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set AgoraRtcChannelMediaOptions when calling joinChannelByToken or joinChannelExByToken to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelWithMediaOptions to update the settings in AgoraRtcChannelMediaOptions at any time, for example, to switch the published audio and video sources.
9. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
startScreenCaptureByDisplayIdmethod before joining a channel, and then calljoinChannelByToken[2/4] to join a channel and setpublishScreenTrackastrue. - Call the
startScreenCaptureByDisplayIdmethod after joining a channel, and then callupdateChannelMediaOptionsto setpublishScreenTrackastrue.
10. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add a user ID that you want to subscribe to in your allowlist, or add a user ID for the streams you do not wish to see to your blocklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the AgoraRtcEngineKit(Ex) interface:
setSubscribeAudioBlacklist:Set the audio subscription blocklist.setSubscribeAudioWhitelist:Set the audio subscription allowlist.setSubscribeVideoBlacklist:Set the video subscription blocklist.setSubscribeVideoWhitelist:Set the video subscription allowlist.
If a user is added in a blocklist and a allowlist at the same time, only the blocklist takes effect.
11. Set audio scenarios
To make it easier to change audio scenarios, this release adds the setAudioScenario method. For example, if you want to change the audio scenario from AgoraAudioScenarioDefault to AgoraAudioScenarioGameStreaming when you are in a channel, you can call this method.
12. Replace video feeds with images
This release supports replacing video feeds with images when publishing video streams. You can call the enableVideoImageSource method to enable this function and choose your own images through the options parameter. If you disable this function, the remote users see the video feeds that you publish.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as switchChannelByToken in v3.7.x through the leaveChannel and joinChannelByToken methods so that you don't need to take the time to call the switchChannelByToken method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushExternalVideoFrame method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AgoraRtcAudioVolumeInfo of reportAudioVolumeIndicationOfSpeakers. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
5. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing to streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on January 19, 2026.
New features
Included in this release:
-
Support for getting audio buffer delay
To address the issue where the main vocal and background accompaniment may be out of sync in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module to get the millisecond-level audio buffer delay when playing media files.
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Window exclusion support for second screen sharing
In versions prior to 4.6.2, when using
startScreenCaptureByDisplayIdto share a screen by screen ID, it was not possible to configure excluded windows (excludeWindowListinScreenCaptureParameters) in multi-screen scenarios. This version adds support for this configuration to improve the screen sharing experience. Additionally, a new enum valueLOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_EXCLUDE_WINDOW_FAILED (34)is added toLOCAL_VIDEO_STREAM_REASONto report failures in excluding windows during screen capture. -
Optimized timing for
onVideoDeviceStateChangedcallbackThis version optimizes the trigger timing of the
onVideoDeviceStateChangedcallback. In previous versions, this callback was only triggered after joining a channel. Starting from this version, it is triggered once afterRtcEngineis initialized, and continues to be available after joining a channel. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
onNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Adds error codes
ERR_PCMSEND_FORMAT (200)andERR_PCMSEND_BUFFEROVERFLOW (201)to report PCM data transmission errors.
- Adds error codes
Compatibility changes
This release introduces the following compatibility changes:
-
Removed
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieve theuiddirectly from theonEncodedVideoFrameReceivedcallback. Update your integration logic accordingly. -
Decoder plugins built into the SDK
The relevant decoder plugins are now built into the SDK to ensure overall decoding compatibility.
Issues fixed
This release fixed the following issues:
- The second call to
enumerateVideoDevicesdid not return the device list. - On Windows 7 devices, when sharing a PPT window in full-screen auto-play mode with many animations, the remote side saw flickering.
v4.6.0
Released on August 26, 2025.
The version of the libaosl.dll library in the v4.6.0 SDK is 1.3.0. You can find the library version information by checking the properties of the libaosl.dll file.
Compatibility changes
This version includes SDK behavior changes, API deprecations, and deletions. To ensure your app functions correctly, update your code after upgrading to this version.
For details on deprecated and deleted APIs in each version, see the API Sunset Notice.
-
Deprecation of direct CDN streaming APIs
Deprecates the APIs related to direct CDN streaming, which will be removed in a future release. Agora recommends using Media Push instead.
setDirectCdnStreamingAudioConfigurationsetDirectCdnStreamingVideoConfigurationstartDirectCdnStreamingstopDirectCdnStreamingupdateDirectCdnStreamingMediaOptionsDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDIRECT_CDN_STREAMING_STATEDIRECT_CDN_STREAMING_REASON
-
Deprecation of virtual metronome APIs
Deprecates the APIs for the virtual metronome feature, which will be removed in a future release.
startRhythmPlayerconfigRhythmPlayeronRhythmPlayerStateChanged
-
Deprecation of watermark APIs
Deprecates the old watermark APIs. Agora recommends using the new watermark APIs introduced in this version.
addVideoWatermark2addVideoWatermarkEx
-
Deletion of redundant APIs
Removed the following redundant APIs and parameters:
setLocalPublishFallbackOptiononLocalPublishFallbackToAudioOnlyonDownlinkNetworkInfoUpdatedonWlAccStatsWlAccStatsonWlAccMessageWLACC_MESSAGE_REASONWLACC_SUGGEST_ACTIONenableWirelessAccelerate
-
Behavior changes in dual-stream mode
- Before v4.6.0: When the sender enabled adaptive stream mode (
AUTO_SIMULCAST_STREAM), the low stream was not sent proactively. The sender only started sending the low stream after receiving a request from a host-role receiver callingsetRemoteVideoStreamType. - Starting from v4.6.0: When the sender enables adaptive low-stream mode (
AUTO_SIMULCAST_STREAM), the SDK automatically decides whether to send or stop sending streams based on the downlink network quality of subscribing users. If you setmodeto another sending mode or explicitly configure the width, height, bitrate, or frame rate, this adaptive behavior is disabled.
- Before v4.6.0: When the sender enabled adaptive stream mode (
-
Changes to int UID and string UID mapping
- Before v4.6.0: If
registerLocalUserAccountwas used to register a string UID (for example, "aa") and obtain an int UID (for example, 123), joining a channel later with the int UID automatically mapped it to the original string UID ("aa"). - From v4.6.0: The SDK no longer automatically maps an int UID to the original string UID. If
registerLocalUserAccountwas called to get an int UID but the channel needs to be joined with the original string UID, calljoinChannelWithUserAccountdirectly with the string UID. After upgrading, review and update app logic to ensure users join the channel with the expected identity.
- Before v4.6.0: If
-
Added domain whitelist
If you have upgraded from a previous SDK version to v4.6.0 and are using the domain whitelist feature (set
domainLimittotrueinRtcEngineConfig), add the following domains to the whitelist to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
New features
-
Simulcasting multi-bitrate video streams (Beta)
Added support for sending multiple video streams of different resolutions from a single video source, including in multi-channel scenarios. You can now configure up to four layers: one high-resolution stream and up to three lower-resolution streams. Use configuration options to define resolution, bitrate, and whether to automatically reduce the number of streams when network or device performance drops. Subscribers can choose which stream to receive based on their network conditions. This feature helps developers deliver smooth experiences in scenarios such as conferences, large classes, and interactive live streaming, even when network conditions are poor.
-
Multipath network transmission
Introduced multipath transmission for devices with multiple network interfaces (for example, 5G, Wi-Fi, and LAN). This feature effectively reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication scenarios that demand high transmission stability, such as in-vehicle systems, IoT, trains, and highways. Enable it by setting
enableMultipathinChannelMediaOptionstotrue. -
Dynamic mode: Dynamically selects the optimal path based on network conditions. Optionally set
preferMultipathTypeto prioritize a path type. If not set, all path types have the same default weight. -
Duplicate mode: Sends data simultaneously over all available paths for maximum stability. This mode incurs additional costs and eliminates the impact of poor network conditions.
Configure uplink and downlink modes separately with uplinkMultipathMode and downlinkMultipathMode. Monitor performance with the onMultipathStats callback, which reports real-time transmission statistics for each path, including data consumption. Contact support@agora.io to enable duplicate mode.
- Video quality scoring
Added the mosValue member to RemoteVideoStats to report a score from 1 (extremely poor with severe blurring) to 5 (excellent with clear image and no artifacts) for received video quality. This enables real-time monitoring of the subjective quality of remote video streams, which helps in dynamically adjusting video parameters for quality monitoring and alerting. Contact support@agora.io to enable this feature.
- Support for adding multiple watermarks
Introduced addVideoWatermark3 and addVideoWatermarkEx1, which support multiple watermarks with IDs and layering order. Remove a specific watermark using removeVideoWatermark.
- Asynchronous engine destruction
Added the release method with a callback parameter, supporting synchronous or asynchronous engine destruction. In asynchronous mode, the SDK triggers the RtcEngineReleaseCallback callback.
- Token renewal result callback
Added the onRenewTokenResult callback and RENEW_TOKEN_ERROR_CODE to report the result of renewToken. This allows developers to handle Token renewal failures promptly within the callback.
- Advanced beauty (Beta)
Introduced a brand-new advanced beauty feature, delivering a powerful yet easy-to-use beautification solution.
-
Precision beauty effects
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, slimming face, enlarging eyes, narrowing nose) or one-click natural effects via presets.
- Style makeup: Offers rich effects including eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancement: Includes professional skin optimizations such as teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
-
Unified and simple API Manage all beauty, makeup, and filter functions through three core nodes —
BEAUTY,STYLE_MAKEUP, andFILTER— usingIVideoEffectObjectfor unified parameter setup and lifecycle control. -
Ready-to-use presets Integrates multiple out-of-the-box style templates (for example, "Natural Beauty," "Senior Makeup," "Cool White Filter") for instant polished results.
-
Dynamic parameter control Enables real-time reading and modification of granular parameters (for example, smoothing strength, lipstick type) via key-value pairs, with support for saving custom configurations and resetting defaults.
-
Local resource guarantee All beauty resources (effects, filters, makeup) are packaged as local bundle files, ensuring stability and reliability.
-
Other new features
-
Added
setPlaybackAudioFrameBeforeMixingParameters2to configure the format of raw audio frames returned inonPlaybackAudioFrameBeforeMixing, including sample rate, number of channels, and the number of samples per callback. -
Added
preloadEffectExto preload audio effects into a specific channel. Supports both local and online audio files, enabling faster playback later and is suitable for multi-channel scenarios. -
Added
playEffectExfor advanced audio effect playback in a specific channel with parameters such as loop count, pitch, spatial position, volume, whether to publish to the channel, and the starting playback position. -
Added the
positionmember inContentInspectModuleto choose the capture point for screenshot uploads from either the raw video data or the video stream before or after effects processing. -
Added the
screenColorTypemember toSegmentationPropertyfor specifying or auto-detecting background screen color (green, blue, or auto-detect) to improve the accuracy and stability of portrait segmentation when using virtual backgrounds.
Improvements
- Optimized permission requests on Windows 11 24H2 and later versions to avoid unnecessarily acquiring location information.
- Added support for G.711 and G.722 audio codecs when interoperating with the Web SDK for improved cross-platform audio compatibility and clarity.
- Improved video clarity in screen sharing scenarios involving documents.
Issues fixed
This version fixes the following issues:
- Online audio effect playback restarted from the beginning when
seekwas called. - Occasional echoes in media volume mode when publishing a microphone stream while simultaneously playing effects with
playEffect3and music withstartAudioMixing2. - SDK crashed on Windows when handling file paths containing Chinese characters due to an encoding conversion error.
- Media relay occasionally reported
RELAY_STATE_FAILUREandRELAY_ERROR_SERVER_ERROR_RESPONSEafter join, relay, unpublish, leave, rejoin, and relay again sequences. - Receivers occasionally heard echoes when the sender shared their screen and audio from certain laptop models with power-saving mode enabled.
- In online education scenarios, the teacher's local view of multiple students' video and audio was occasionally out of sync.
v4.5.2
v4.5.2 was released on April 22, 2025.
Note
The aosl.dll library version in Video SDK v4.5.2 is 1.2.13.
Issues fixed
This release fixes the following issues:
- When playing a multi-track media file, you could hear noise after calling the
setAudioPitchmethod to adjust the pitch. - After the host called
createCustomAudioTrackwithtrackTypeset toAUDIO_TRACK_DIRECT, pushed custom audio frames usingpushAudioFrame, and played audio effects withplayEffect, audience members heard noise. - Apps integrated with the SDK occasionally experienced UI lag due to main thread blocking during audio and video interactions.
- The local preview of a shared screen flickered after calling
startScreenCapture [2/2], enablingenableHighLightinScreenCaptureParameters, placing the shared window on the top layer, and maximizing it. - When using
startScreenCaptureByDisplayIdwithexcludeWindowListinScreenCaptureParameters, some windows failed to be excluded as expected. - The app crashed after sharing video from an external screen and then disconnecting the screen.
- Calling
openWithMediaSourceand settingisLiveSourcetotruefailed to play the video stream. - When sending multi-channel encoded audio, the receiver occasionally heard noise.
- When the app integrated a media player and called
opentwice to load different media resources in succession, theonPlayerInfoUpdated [1/2]callback incorrectly returned info for the first resource. - After calling
enableAudioVolumeIndication, thertcEngine:reportAudioVolumeIndicationOfSpeakers:totalVolume:callback returned a local user volume of 0 for both local and remote users. - In scenarios involving audio/video communication and screen sharing on a 21 ultra-wide display, setting a high resolution such as 3840×2160 resulted in the shared screen image being cropped in both the local preview and on the receiver's display.
- When the app called
enableVideoImageSourceto enable the video image source feature, the sender appeared to stream successfully, but theonVideoPublishStateChangedcallback did not return as expected. - In multi-channel scenarios, if the app called
setupRemoteVideoExto initialize the remote user’s view before successfully callingjoinChannelEx, the first frame of the remote video was significantly delayed.
v4.5.1
v4.5.1 was released on March 4, 2025.
Note
The aosl.dll library version in Video SDK v4.5.1 is 1.2.13.
New Features
AI Conversation Scenario
This version introduces the AUDIO_SCENARIO_AI_CLIENT audio scenario, specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on the characteristics of AI-generated voices, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. The optimization enhances conversation continuity and reliability, adapting to various challenging network environments.
Issues Fixed
This release resolves the following issues:
- When joining two or more channels simultaneously and calling
takeSnapshotExto capture local video stream screenshots consecutively, the first channel's screenshot failed. - When using the
pausemethod to pause playback, then callingseekto move to a specific position, and finally callingplay, the Media Player resumed from the paused position instead of the specified position. - When using the Media Player, the file path of the media resource returned by
getPlaySrcdid not update after callingswitchSrcto switch to a new media resource. - In interactive live streaming scenarios, after joining a channel as an audience member using a
stringuser ID, audio occasionally became unsynchronized with video. - AI noise suppression and AI echo cancellation plugins sometimes failed when used together.
v4.5.0
This version was released on November 27, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
As of v4.5.0, both Video SDK and Signaling SDK (v2.2.0 and above) include the aosl.dll library. If you manually integrate Video SDK via CDN and also use Signaling SDK, delete the earlier version of the aosl.dll library to avoid conflicts. The aosl.dll library version in Video SDK v4.5.0 is 1.2.13. You can check the version by viewing the aosl.dll file properties.
-
Member parameter type changes
To enhance the adaptability of various frameworks to the SDK, this version has made the following modifications to some API members or parameters:
API Members/Parameters Change startScreenCaptureByDisplayIddisplayId Changed from uint32_ttoint64_tstartScreenCaptureByWindowIdwindowId Changed from view_ttoint64_tScreenCaptureConfiguration- displayId
- windowId
- displayId: Changed from
uint32_ttoint64_t - windowId: Changed from
view_ttoint64_t
ScreenCaptureSourceInfo- sourceDisplayId
- sourceId
- sourceDisplayId: Changed from
view_ttoint64_t - sourceId:Default value changed from
nullptrto0
-
Changes in strong video noise suppression
This version adjusts the implementation of strong video noise suppression.
VIDEO_DENOISER_LEVEL_STRENGTHinVIDEO_DENOISER_LEVELis removed. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions, you can call thesetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions. -
Changes in camera plug and unplug status
In previous versions, when the camera was unplugged and replugged, the
onVideoDeviceStateChangedcallback would report the device status asMEDIA_DEVICE_STATE_ACTIVE(1) (device in use). Starting from this version, after the camera is replugged, the device status will change toMEDIA_DEVICE_STATE_IDLE(0) (device ready). -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
COMPRESSION_PREFERENCEenumeration class, a newPREFER_COMPRESSION_AUTO(-1) enumeration is added, replacing the originalPREFER_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenPREFER_LOW_LATENCYorPREFER_QUALITYbased on your video scene settings to achieve the best user experience. - In the
DEGRADATION_PREFERENCEenumeration class, a newMAINTAIN_AUTO(-1) enumeration is added, replacing the originalMAINTAIN_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenMAINTAIN_FRAMERATE,MAINTAIN_BALANCED, orMAINTAIN_RESOLUTIONbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
APPLICATION_SCENARIO_LIVESHOW(3) (Live Show) enumeration to theVIDEO_APPLICATION_SCENARIO_TYPE. You can callsetVideoScenarioto set the video business scenario to showroom. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency for better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (for example, screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to apply custom filter effects such as whitening, vivid, cool, black and white, and others. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile to quickly apply a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
Color space settings
This version adds the colorSpace parameter to
VideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Others
onLocalVideoStateChangedcallback adds theLOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTEDenumeration, indicating that the currently used video capture device has been disconnected (for example, unplugged).MEDIA_DEVICE_STATE_TYPEadds theMEDIA_DEVICE_STATE_PLUGGED_INenumeration, indicating that the device has been plugged in.
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshot [2/2]andtakeSnapshotEx [2/2]methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- This version optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices.
- When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report thePLAYER_EVENT_SWITCH_ERRORevent, indicating that an error has occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
- This version optimizes the logic for calling
Bug fixes
This version fixes the following issues:
- When calling
startScreenCaptureByWindowIdto share the screen, the window capture area specified byregionRectis inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems.
- When calling
followSystemRecordingDeviceorfollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callbackonLocalAudioStateChangedis not triggered when the audio device is removed. - Calling
startAudioMixing [1/2]and then immediately callingpauseAudioMixingto pause the music file playback does not take effect.
v4.4.0
v4.4.0 was released on August 5, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
Note
Starting from v4.4.0, the SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See API Sunset Notice.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onExtensionEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext -
This version renames the following members in
ExternalVideoFrame:d3d11_texture_2dis renamed tod3d11Texture2d.texture_slice_indexis renamed totextureSliceIndex.metadata_bufferis renamed tometadataBuffer.metadata_sizeis renamed tometadataSize.
New features
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
VideoFrameandExternalVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.ExternalVideoFrameadds thefillAlphaBuffermember. For BGRA or RGBA formatted video data, it sets whether to automatically extract the Alpha channel data and fill it intoalphaBuffer.VideoFrameandExternalVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AdvanceOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callsetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatotrue. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on.
Improvements
-
Adaptive hardware decoding support
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Rendering performance enhancement
DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - The
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTEDenumerator is added inonLocalVideoStateChangedcallback, indicating that the display used for screen capture has been disconnected. - Improves echo cancellation for screen sharing use-cases.
- Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUTandCLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILEDinCLIENT_ROLE_CHANGE_FAILED_REASON.
- Optimizes the transmission strategy: Calling
v4.3.2
v4.3.2 was released on June 4, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app occasionally crashed when remote users left the channel.
- The screen occasionally flickered on the receiver's side when sharing a PPT window using startScreenCaptureByWindowId and playing PPT animations.
- The window border did not retain its original size after exiting the presentation and then maximizing the PPT window when sharing a WPS PPT window on Windows 7 using startScreenCaptureByWindowId and setting
enableHighLightin ScreenCaptureParameters totrue. - The specified window could not be brought to the foreground if it was covered by other windows when sharing a window using startScreenCaptureByWindowId and setting
windowFocusandenableHighLightin ScreenCaptureParameters totrue. - Clicking on the desktop widget caused the outlined part to flicker when sharing and highlighting a window on a Windows 7 device.
v4.3.1
v4.3.1 was released on April 29, 2024.
New features
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREandENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILUREenumerations. -
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode [2/2], the SDK defaults to the following behaviors:
- The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization for game use-case screen sharing
This version specifically optimizes screen sharing for game use-cases, enhancing performance, stability, and clarity in ultra-high definition (4K, 60 fps) game scenarios, resulting in a clearer, smoother, and more stable gaming experience for players.
-
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTERinEAR_MONITORING_FILTER_TYPE. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen sharing use-cases to save system performance overhead.
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AUDIO_EFFECT_PRESET, a new enumeration
ROOM_ACOUSTICS_CHORUS(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- In screen sharing use-cases, when the app enabled sound card capture with enableLoopbackRecording to capture audio from the shared screen, the transmission of sound card captured audio failed after a local user manually disabled the local audio capture device, causing remote users to not hear the shared screen's audio.
- When a user plugged and unplugged a Bluetooth or wired headset once, the audio state change callback onAudioDeviceStateChanged was triggered multiple times.
- During interactions, when a local user set the system default playback device to speakers using setDevice, there was no sound from the remote end.
- When sharing an Excel document window, remote users occasionally saw a green screen.
- On devices using Intel graphics cards, occasionally there was a performance regression when publishing a small video stream.
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- registerFaceInfoObserver
- IFaceInfoObserver
- onFaceInfo
- The
publishLipSyncTrackmember in ChannelMediaOptions - MEDIA_SOURCE_TYPE adds
SPEECH_DRIVEN_VIDEO_SOURCE - VIDEO_SOURCE_TYPE adds
VIDEO_SOURCE_SPEECH_DRIVEN - EncryptionConfig adds
datastreamEncryptionEnabled - ENCRYPTION_ERROR_TYPE adds the following enumerations:
ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE
- RemoteAudioStats adds
e2eDelay - ERROR_CODE_TYPE adds
ERR_DATASTREAM_DECRYPTION_FAILED - AUDIO_EFFECT_PRESET adds
ROOM_ACOUSTICS_CHORUS, enhancing the spatial presence of vocals in chorus use-cases. - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- EAR_MONITORING_FILTER_TYPE adds a new enumeration
EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS
v4.3.0
v4.3.0 was released on February 22, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name onLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasononPlayerSourceStateChangedecreasononRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class LOCAL_AUDIO_STREAM_ERRORLOCAL_AUDIO_STREAM_REASONLOCAL_VIDEO_STREAM_ERRORLOCAL_VIDEO_STREAM_REASONDIRECT_CDN_STREAMING_ERRORDIRECT_CDN_STREAMING_REASONMEDIA_PLAYER_ERRORMEDIA_PLAYER_REASONRTMP_STREAM_PUBLISH_ERRORRTMP_STREAM_PUBLISH_REASONNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelay
startOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the LOCAL_VIDEO_STREAM_ERROR class:
- The value of
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_PAUSED(formerlyLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED) has been changed from 23 to 28. - The value of
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_RESUMED(formerlyLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED) has been changed from 24 to 29. - The
LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORTenumeration has been changed toLOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT.
- The value of
-
Audio loopback capturing
-
Before v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled.
-
As of v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording.
-
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
New features
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo to set the first view: Set the
positionparameter toPOSITION_POST_CAPTURER_ORIGIN(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo to set the second view: Set the
positionparameter toPOSITION_POST_CAPTURERinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo to set the first view: Set the
-
Query Device Score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- setPlaybackDeviceVolume: Sets the volume of the audio playback device.
- getRecordingDeviceVolume: Sets the volume of the audio capturing device.
- setPlayerOption: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the methods in ILocalSpatialAudioEngine class.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Other Improvements
This release also includes the following improvements:
- The onLocalVideoStateChanged callback is improved with the inclusion of the
LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_AUTO_FALLBACKenumeration, signaling unexpected errors during the screen sharing process (potentially due to window blocking failure), resulting in performance degradation without impacting the screen sharing process itself. - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
- The onLocalVideoStateChanged callback is improved with the inclusion of the
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the onLocalVideoStats callback is 0, which is not as expected. - When sharing in a specified screen area, the mouse coordinates within the shared area are inaccurate. When the mouse is near the border of the shared area, the mouse may not be visible in the shared screen.
- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5mm earphones.
API changes
Added
- The
subviewUidmember in VideoCanvas - enableCustomAudioLocalPlayback
- queryDeviceScore
- The
CUSTOM_VIDEO_SOURCEenumeration in MEDIA_SOURCE_TYPE - The
ROUTE_BLUETOOTH_DEVICE_A2DPenumeration in AudioRoute - selectMultiAudioTrack
- onPlayerCacheStats
- onPlayerPlaybackStats
- PlayerPlaybackStats
Modified
- All
ERRORfields in the following enumerations are changed toREASON:LOCAL_AUDIO_STREAM_ERROR_OKLOCAL_AUDIO_STREAM_ERROR_FAILURELOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSYLOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURELOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURELOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_IDLOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_IDLOCAL_VIDEO_STREAM_ERROR_OKLOCAL_VIDEO_STREAM_ERROR_FAILURELOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSYLOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURELOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORTLOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUNDLOCAL_VIDEO_STREAM_ERROR_DEVICE_DISCONNECTEDLOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_IDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_NO_PERMISSIONLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_FAILURELOCAL_VIDEO_STREAM_ERROR_DEVICE_SYSTEM_PRESSUREDIRECT_CDN_STREAMING_ERROR_OKDIRECT_CDN_STREAMING_ERROR_FAILEDDIRECT_CDN_STREAMING_ERROR_AUDIO_PUBLICATIONDIRECT_CDN_STREAMING_ERROR_VIDEO_PUBLICATIONDIRECT_CDN_STREAMING_ERROR_NET_CONNECTDIRECT_CDN_STREAMING_ERROR_BAD_NAMEPLAYER_ERROR_NONEPLAYER_ERROR_INVALID_ARGUMENTSPLAYER_ERROR_INTERNALPLAYER_ERROR_NO_RESOURCEPLAYER_ERROR_INVALID_MEDIA_SOURCEPLAYER_ERROR_UNKNOWN_STREAM_TYPEPLAYER_ERROR_OBJ_NOT_INITIALIZEDPLAYER_ERROR_CODEC_NOT_SUPPORTEDPLAYER_ERROR_VIDEO_RENDER_FAILEDPLAYER_ERROR_INVALID_STATEPLAYER_ERROR_URL_NOT_FOUNDPLAYER_ERROR_INVALID_CONNECTION_STATEPLAYER_ERROR_SRC_BUFFER_UNDERFLOWPLAYER_ERROR_INTERRUPTEDPLAYER_ERROR_NOT_SUPPORTEDPLAYER_ERROR_TOKEN_EXPIREDPLAYER_ERROR_UNKNOWNRTMP_STREAM_PUBLISH_ERROR_OKRTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENTRTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWEDRTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUTRTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_TOO_OFTENRTMP_STREAM_PUBLISH_ERROR_REACH_LIMITRTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZEDRTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUNDRTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTEDRTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTERRTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAMRTMP_STREAM_PUBLISH_ERROR_NET_DOWNRTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGERTMP_STREAM_UNPUBLISH_ERROR_OK
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExonChannelMediaRelayEventCHANNEL_MEDIA_RELAY_EVENT
v4.2.6
v4.2.6 was released on November 17, 2023.
Issues fixed
This release fixed the following issue:
- In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.3
v4.2.3 was released on October 11, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_IMAGE_MODERATIONenumeration is added inCONTENT_INSPECT_TYPEwhich means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
enableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
ID3D11Texture2D Rendering
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set
formattoVIDEO_TEXTURE_ID3D11TEXTURE2Dwhen pushing external raw video frames to the SDK by callingpushVideoFrame. By setting thed3d11_texture_2dandtexture_slice_indexproperties, you can determine the ID3D11Texture2D texture object to use. -
Local video status error code update
In order to help users understand the exact reasons for local video errors in screen sharing use-cases, the following sets of enumerations have been added to the
onLocalVideoStateChangedcallback:LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED(23): Screen capture has been paused. Common use-cases for reporting this error code: The current screen may have been switched to a secure desktop, such as a UAC dialog box or Winlogon desktop.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED(24): Screen capture has resumed from the paused state.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDEN(25): The window being captured on the current screen is in a hidden state and is not visible on the current screen.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN(26): The window for screen capture has been restored from the hidden state.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED(27): The window for screen capture has been restored from the minimized state.
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code-4:ERR_NOT_SUPPORTEDis returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform).
-
Screen sharing use-case optimization
This release optimizes the performance and encoding efficiency in ultra-high-definition (4K, 60 fps) game sharing use-cases, effectively reducing the system resource usage during screen sharing.
Other Improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional crashes and dropped frames occurred in screen sharing use-cases.
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffectmethod to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - Calling
takeSnapshotExonce receives theonSnapshotTakencallback for multiple times.
API changes
Added
- The following enumerations in
onLocalVideoStateChanged:LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED
d3d11_texture_2dandtexture_slice_indexmembers inExternalVideoFrame.VIDEO_TEXTURE_ID3D11TEXTURE2DinVIDEO_PIXEL_FORMAT.enableContentInspectExCONTENT_INSPECT_IMAGE_MODERATIONinCONTENT_INSPECT_TYPE.serverConfiginContentInspectConfigisFeatureAvailableOnDeviceFeatureType
v4.2.2
v4.2.2 was released on july 27, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannel[1/2]andpreloadChannel[2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Publishing video streams from different sources
This release adds the following members in
ChannelMediaOptionsto allow you publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
:::
Improvements
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- The SDK automatically adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORTenumeration has been added to theonRemoteVideoStateChangedcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically. - In multi-device audio recording use-cases, after repeatedly plugging and unplugging or enabling/disabling the audio recording device, no sound could be heard occasionally when calling the
startRecordingDeviceTestto start an audio capturing device test.
API changes
Added
preloadChannel[1/2]preloadChannel[2/2]updatePreloadChannelToken- The following members in
ChannelMediaOptions:publishThirdCameraTrackpublishFourthCameraTrackpublishThirdScreenTrackpublishFourthScreenTrack
CodecCapLevelsVIDEO_CODEC_CAPABILITY_LEVELbackgroundColorinVideoCanvascodecLevelsinCodecCapInfoREMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORTinREMOTE_VIDEO_STATE_REASON
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- When the sending end mixed and published two streams of video captured by two cameras locally, the video from the second camera was occasionally missing on the receiving end.
v4.2.0
v4.2.0 was released on May 24, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter.
| Deleted Methods | Alternative Methods |
|---|---|
startPrimaryCameraCapturestartSecondaryCameraCapture | startCameraCapture |
stopPrimaryCameraCapturestopSecondaryCameraCapture | stopCameraCapture |
startPrimaryScreenCapturestartSecondaryScreenCapture | startScreenCapture[2/2] |
stopPrimaryScreenCapturestopSecondaryScreenCapture | stopScreenCapture[2/2] |
2. Video data acquisition
- The
onCaptureVideoFrameandonPreEncodeVideoFramecallbacks are added with a new parameter calledsourceType, which is used to indicate the specific video source type. - The following callbacks are deleted. Get the video source type through the
sourceTypeparameter in theonPreEncodeVideoFrameandonCaptureVideoFramecallbacks.onSecondaryPreEncodeCameraVideoFrameonScreenCaptureVideoFrameonPreEncodeScreenVideoFrameonSecondaryPreEncodeScreenVideoFrame
3. Channel media options
publishCustomAudioTrackEnableAecinChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinChannelMediaOptionsis renamed topublishCustomAudioTrackId.
4. Local video mixing
- The
VideoInputStreamsinLocalTranscoderConfigurationis changed tovideoInputStreams. - The
MEDIA_SOURCE_TYPEinTranscodingVideoStreamis changed toVIDEO_SOURCE_TYPE.
5. Miscellaneous
onApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.- The
IAudioFrameObserverclass is renamed toIAudioPcmFrameSink, thus the prototypes of the following methods are updated accordingly:onFrameregisterAudioFrameObserver[1/2] andregisterAudioFrameObserver[2/2] inIMediaPlayer
enableDualStreamMode[1/2] andenableDualStreamMode[2/2] are deprecated. UsesetDualStreamMode[1/2] andsetDualStreamMode[2/2] instead.startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise reduction mode as balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background feature. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the onLocalVideoTranscoderError callback. When there is an error in starting or updating the local video mixing, the SDK triggers this callback to report the reason for the failure.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced rendering compatibility
This release enhances the rendering compatibility of the SDK. Issues like black screens caused by rendering failures on certain devices are fixed.
3. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
4. Multi-camera capture and multi-screen capture
This release introduces startCameraCapture and startScreenCapture[2/2]. By calling these methods multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras and screens for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras and displays need to be connected.
5. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
6. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
Issues fixed
This release fixed the issue that when the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
API changes
Added
startCameraCapturestopCameraCapturestartScreenCapture[2/2]stopScreenCapture[2/2]startOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsonLocalVideoTranscoderErrorsetAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAUDIO_TRACK_TYPEVIDEO_APPLICATION_SCENARIO_TYPESCREEN_CAPTURE_FRAMERATE_CAPABILITY- The
domainLimitandautoRegisterAgoraExtensionsmembers inRtcEngineContext - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
BACKGROUND_NONEandBACKGROUND_VIDEOenumerators inBACKGROUND_SOURCE_TYPE
Deprecated
enableDualStreamMode[1/2]enableDualStreamMode[2/2]startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExonChannelMediaRelayEventCHANNEL_MEDIA_RELAY_EVENT
Deleted
startPrimaryScreenCapturestartSecondaryScreenCapturestopPrimaryScreenCapturestopSecondaryScreenCapturestartPrimaryCameraCapturestartSecondaryCameraCapturestopPrimaryCameraCapturestopSecondaryCameraCaptureonSecondaryPreEncodeCameraVideoFrameonScreenCaptureVideoFrameonPreEncodeScreenVideoFrameonSecondaryPreEncodeScreenVideoFrameonApiCallExecutedpublishCustomAudioTrackEnableAecinChannelMediaOptions
v4.1.1
v4.1.1 was released on February 8, 2023.
Compatibility changes
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
New features
1. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
2. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the onVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks
Join Channel button and then get the indicators in the video frame rendering process through the onVideoRenderingTracingResult callback.
This enables developers to optimize the indicators and improve the user experience.
Improvements
Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
PROCESS_MODE_READ_ONLY, the return value is reserved for future use. - When the video processing mode is
PROCESS_MODE_READ_WRITE, the SDK receives the video frame when the return value istrue. The video frame is discarded when the return value isfalse.
Issues fixed
This release fixed the following issues:
- When using Agora Media Player to play RTSP video streams, the video images sometimes appeared pixelated.
- Playing audio files with a sample rate of 48 kHz failed.
- Adding an Alpha channel to an image in PNG or GIF format failed when the local client mixed video streams.
- After joining the channel, remotes users saw a watermark even though the watermark was deleted.
- If a watermark was added after starting screen sharing, the watermark did not display the screen.
- When joining a channel and accessing an external camera, calling
setDeviceto specify the video capture device as the external camera did not take effect. - When trying to outline the shared window and put it on top, the shared window did not stay on top of other windows.
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
enableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExonVideoRenderingTracingResultMEDIA_RENDER_TRACE_EVENTVideoRenderingTracingInfo
Deleted
enableRemoteSuperResolutionsuperResolutionTypeinRemoteVideoStats
v4.1.0
v4.1.0 was released on December 15, 2022.
New features
1. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
2. Encoded video frame observer
This release adds the setRemoteVideoSubscriptionOptions and setRemoteVideoSubscriptionOptionsEx methods. When you call the registerVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
3. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
4. Register extensions
This release adds the registerExtension method for registering extensions. When using a third-party extension, you need to call the extension-related APIs in the following order:
loadExtensionProvider -> registerExtension -> setExtensionProviderProperty -> enableExtension
5. Device management
This release adds a series of callbacks to help you better understand the status of your audio and video devices:
onVideoDeviceStateChanged: Occurs when the status of the video device changes.onAudioDeviceStateChanged: Occurs when the status of the audio device changes.onAudioDeviceVolumeChanged: Occurs when the volume of an audio device or app changes.
6. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
7. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
leaveChannelEx[2/2] method. Compared with theleaveChannelEx[1/2] method, a new options parameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
8. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
9. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the onClientRoleChanged callback. The value of this parameter is as follows:
AUDIENCE_LATENCY_LEVEL_LOW_LATENCY(1): Low latency.AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY(2): Ultra-low latency.
10. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option.
To experience this feature, contact support@agora.io.
11. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense of presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user, respectively, by callingsetPlayerAttenuationandsetRemoteAudioAttenuation, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams, and the receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the hearing of the headphones.
Improvements
1. Screen sharing
In addition to the usability enhancements detailed in the fixed issued section, this release includes a number of functional improvements to screen sharing, as follows:
- New
minimizeWindowmember inScreenCaptureSourceInfoto indicate whether the target window is minimized. - New
enableHighLight,highLightColor, andhighLightWidthmembers inScreenCaptureParametersso that you can place a border around the target window or screen when screen sharing. - Compatibility with a greater number of mainstream apps, including WPS Office, Microsoft Office PowerPoint, Visual Studio Code, Adobe Photoshop, Windows Media Player, and Scratch.
- Compatibility with additional devices and operating systems, including: Window 8 systems, devices without discrete graphics cards, and dual graphics devices.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a device with an Intel Core i7-9750H CPU @ 2.60 GHz or better.
2. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
3. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
4. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AUDIO_SCENARIO_MEETINGscenario. - Improves the smoothness of SDK video rendering.
- Reduces the CPU usage and power consumption of the local device when the host calls the
muteLocalVideoStreammethod. - Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network use-cases.
Issues fixed
This release fixed the following issues:
- In screen sharing use-cases, when the user minimized and then restored the shared window, the remote video occasionally switched to the low-quality stream.
- When the host started screen sharing during live streaming, the audience members sometimes heard echoes.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, a black screen appeared when sharing a screen between a landscape monitor and a portrait monitor.
- In screen sharing use-cases with a window excluded, the application crashed when the specified shared area exceeded the screen resolution.
- The application failed to exclude a window using the
startScreenCaptureByDisplayIdmethod for screen sharing. - In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
onNetworkQualitycallback was inaccurate for the user who was sharing a screen. - In screen sharing use-cases, when the user shared the screen by window, the mouse in the shared screen was not in its actual position.
- When switching from a non-screen sharing use-case to a screen sharing one, the application occasionally crashed if the user did not switch the resolution accordingly.
- Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- The call
getExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
API changes
Added
-
setHeadphoneEQParameters -
setRemoteVideoSubscriptionOptions -
setRemoteVideoSubscriptionOptionsEx -
VideoSubscriptionOptions -
leaveChannelEx [2/2] -
muteLocalAudioStreamEx -
muteLocalVideoStreamEx -
muteAllRemoteAudioStreamsEx -
muteAllRemoteVideoStreamsEx -
startRtmpStreamWithoutTranscodingEx -
startRtmpStreamWithTranscodingEx -
updateRtmpTranscodingEx -
stopRtmpStreamEx -
startChannelMediaRelayEx -
updateChannelMediaRelayEx -
pauseAllChannelMediaRelayEx -
resumeAllChannelMediaRelayEx -
stopChannelMediaRelayEx -
followEncodeDimensionRatioinCameraCapturerConfiguration -
hwEncoderAcceleratinginLocalVideoStats -
advanceOptions in VideoEncoderConfiguration -
newRoleOptions in onClientRoleChanged -
adjustUserPlaybackSignalVolumeEx -
onVideoDeviceStateChanged -
onAudioDeviceStateChanged -
onAudioDeviceVolumeChanged
Deprecated
onApiCallExecuted. Use the callbacks triggered by specific methods instead.
Deleted
- Removes
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8) inonChannelMediaRelayEventcallback.
v4.0.1
v4.0.1 was released on September 29, 2022.
Compatibility changes
This release deletes the sourceType parameter in enableDualStreamMode [3/3] and enableDualStreamModeEx, and the enableDualStreamMode [2/3] method, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK, you don't need to specify the video source type any more.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call enableInEarMonitoring to enable the in-ear monitoring function.
After successfully enabling the in-ear monitoring function, you can call registerAudioFrameObserver to register the audio observer, and the SDK triggers the onEarMonitoringAudioFrame callback to report the audio frame data. You can use your own audio effect processing module to pre-process the audio frame data of the in-ear monitoring to implement custom audio effects. Agora recommends that you choose one of the following two methods to set the audio data format of the in-ear monitoring:
- Call the
setEarMonitoringAudioFrameParametersmethod to set the audio data format of in-ear monitoring. The SDK calculates the sampling interval based on the parameters in this method, and triggers theonEarMonitoringAudioFramecallback based on the sampling interval. - Set the audio data format in the return value of the
getEarMonitoringAudioParamscallback. The SDK calculates the sampling interval based on the return value of the callback, and triggers the onEarMonitoringAudioFrame callback based on the sampling interval.
To adjust the in-ear monitoring volume, you can call setInEarMonitoringVolume.
2. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use, including UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, 5G. When the local network connection type changes, the SDK triggers the onNetworkTypeChanged callback to report the current network connection type.
3. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports 3 audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; you can contact support@agora.io to adjust this number according to your use-case.
Meanwhile, Agora supports publishers to choose whether or not the audio streams being published are to be filtered based on volume. Streams that are not filtered will bypass this filter mechanism and transported directly to the receivers. In use-cases where there are a number of publishers, enabling this function helps reducing the bandwidth and device system pressure for the receivers.
To enable this function, contact technical support.
4. Dual-stream mode
This release optimizes the dual-stream mode, you can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams), you can follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamTypeorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify the default behavior above, you can call setDualStreamMode[1/2] or setDualStreamMode[2/2] and set the mode parameter to DISABLE_SIMULCAST_STREAM (always do not send low-quality video streams) or ENABLE_SIMULCAST_STREAM (always send low-quality video streams).
5. Loopback device
The SDK uses the playback device as the loopback device by default. Since 4.2.0, you can specify a loopback device separately and publish the captured audio to the remote end.
setLoopbackDevice:Specifies the loopback device. If you do not want the current playback device to be the loopback device, you can call this method to specify another device as the loopback device.getLoopbackDevice:Gets the current loopback device.followSystemLoopbackDevice:Whether the loopback device follows the default playback device of the system.
Improvements
1. Video information change callback
This release optimizes the trigger logic of onVideoSizeChanged, which can also be triggered and report the local video size change when startPreview is called separately.
2. First video frame rendering
This release speeds up the first video frame rendering time to improve the video experience.
Issues fixed
This release fixed the following issues.
- When
stopPreviewwas called to disable the local video preview, the virtual background that has been set up was occasionally invalidated. - Occasional crash when exiting a channel and joining it multiple times with virtual background enabled and set to blur effect.
- If the local client used a 1920 x 1080 camera as the video capture source, the resolution of the remote video was occasionally inconsistent with the local client.
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. - When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - When using the Agora media player to play videos, after you play and pause the video, and then call the seek method to specify a new position for playback, the video image might remain unchanged; if you call the resume method to resume playback, the video might be played in a speed faster than the original one.
API changes
Added
enableInEarMonitoringsetEarMonitoringAudioFrameParametersonEarMonitoringAudioFramesetInEarMonitoringVolumegetEarMonitoringAudioParamsgetNetworkTypesetRecordingDeviceVolumeisAudioFilterablein theChannelMediaOptionssetDualStreamMode[1/2]setDualStreamMode[2/2]setDualStreamModeExSIMULCAST_STREAM_MODEsetLoopbackDevicegetLoopbackDevicefollowSystemLoopbackDevicesetZonessetPlayerAttenuationsetRemoteAudioAttenuationmuteRemoteAudioStreamSpatialAudioParamssetHeadphoneEQPresetHEADPHONE_EQUALIZER_PRESET
Modified
enableDualStreamMode[1/3]enableDualStreamMode[3/3]enableDualStreamModeEx
Deprecated
startEchoTest[2/3]
Deleted
enableDualStreamMode[2/3]
v4.0.0
v4.0.0 was released on September 15, 2022.
Compatibility changes
Integration change
This release has optimized the implementation of some features, resulting in incompatibility with v3.7.x. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Custom video capture and rendering (Media IO)
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migrate from v3.7.x to v4.0.0.
New features
1. Multiple media tracks
This release supports one IRtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting RtcEngineEx and ChannelMediaOptions.
- After calling
joinChannelto join the first channel, calljoinChannelExmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andChannelMediaOptionssettings. - You can simultaneously publish multiple sets of video streams captured by multiple cameras or screen sharing by setting
publishSecondaryCameraTrackandpublishSecondaryScreenTrackinChannelMediaOptions.
This release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call this method to create a video track, and get the video track ID.
- Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling SetVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
This feature has certain requirements with regards to device performance and network bandwidth, and the supported upstream and downstream frame rates vary on different platforms. To enable this feature, contact support@agora.io.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Build-in media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayer method to create a media player object, you can then call the methods in the IMediaPlayer class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the ULTRA_HIGH_QUALITY_VOICE enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Spatial audio
This feature is in experimental status. To enable this feature, contact support@agora.io. Contact technical support if needed.
You can set the spatial audio for the remote user as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users, respectively, so that the local user can hear the spatial audio effect of the remote user.
You can also set the spatial audio for the media player as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
6. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AUDIO_SCENARIO_CHORUS enumeration in AUDIO_SCENARIO_TYPE. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
7. Extensions from the Agora extensions marketplace
In order to enhance the real-time audio and video interactive activities based on the Agora SDK, this release supports the one-stop solution for the extensions from the Agora extensions marketplace:
- Easy to integrate: The integration of modular functions can be achieved simply by calling an API, and the integration efficiency is improved by nearly 95%.
- Extensibility design: The modular and extensible SDK design style endows the Agora SDK with good extensibility, which enables developers to quickly build real-time interactive apps based on the Agora extensions marketplace ecosystem.
- Build an ecosystem: A community of real-time audio and video apps has developed that can accommodate a wide range of developers, offering a variety of extension combinations. After integrating the extensions, developers can build richer real-time interactive functions. For details, see Use an Extension.
- Become a vendor: Vendors can integrate their products with Agora SDK in the form of extensions, display and publish them in the Agora extensions marketplace, and build a real-time interactive ecosystem for developers together with Agora. For details on how to develop and publish extensions, see Become a Vendor.
8. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling joinChannel or joinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
9. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
StartScreenCaptureByDisplayIdmethod before joining a channel, and then callJoinChannel[2/2] to join a channel and setpublishScreenTrackorpublishSecondaryScreenTrackas true. - Call the
StartScreenCaptureByDisplayIdmethod after joining a channel, and then callUpdateChannelMediaOptionsto setpublishScreenTrackorpublishSecondaryScreenTrackas true.
10. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add a user ID that you want to subscribe to in your whitelist, or add a user ID for the streams you do not wish to see to your blacklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the IRtcEngineEx interface:
SetSubscribeAudioBlacklist:Set the audio subscription blocklist.SetSubscribeAudioWhitelist:Set the audio subscription allowlist.SetSubscribeVideoBlacklist:Set the video subscription blocklist.SetSubscribeVideoWhitelist:Set the video subscription allowlist.
If a user is added in a blacklist and a whitelist at the same time, only the blacklist takes effect.
11. Set audio scenarios
To make it easier to change audio scenarios, this release adds the SetAudioScenario method. For example, if you want to change the audio scenario from AUDIO_SCENARIO_DEFAULT to AUDIO_SCENARIO_GAME_STREAMING when you are in a channel, you can call this method.
12. Local video mixing
This release adds a series of APIs supporting local video mixing functions. You can mix multiple video streams into one video stream locally. Common use-cases are as follows:
- In interactive live streaming use-cases with cohosts or when using the Media Push function, you can merge the screens of multiple hosts into one view locally.
- In use-cases where you capture multiple local video streams (for example, video captured by cameras, screen sharing streams, video files or pictures), you can and merge them into one video stream and then publish the mixed video stream in the channel.
You can call the startLocalVideoTranscoder method to start local video mixing and call the stopLocalVideoTranscoder method to stop local video mixing. After the local video mixing starts, you can call updateLocalTranscoderConfiguration to update the local video mixing configuration.
13. Video device management
Video capture devices can support multiple video formats, each supporting a different combination of video frame width, video frame height, and frame rate.
This release adds the numberOfCapabilities and getCapability methods for getting the number of video formats supported by the video capture device and the details of the video frames in the specified video format. When calling the startPrimaryCameraCapture or startSecondaryCameraCapture method to capture video using the camera, you can use the specified video format.
The SDK automatically selects the best video format for the video capture device based on your settings in VideoEncoderConfiguration, so normally you should not need to use these new methods.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as SwitchChannel in v3.7.x through the LeaveChannel and JoinChannel methods so that you don't need to take the time to call the SwitchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushVideoFrame[1/2] method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of onAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
5. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing to streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on March 14, 2026.
Compatibility changes
This release introduces the following compatibility changes:
-
Deprecation of Direct CDN streaming APIs
The following APIs related to Direct CDN streaming are deprecated in this release and will be removed in a future version. Use Media Push instead.
setDirectCdnStreamingAudioConfigurationsetDirectCdnStreamingVideoConfigurationstartDirectCdnStreamingstopDirectCdnStreamingDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDirectCdnStreamingStateDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
The following APIs related to the virtual metronome feature are deprecated in this release and will be removed in a future version.
startRhythmPlayerconfigRhythmPlayeronRhythmPlayerStateChanged
-
Deprecation of watermark APIs
The following watermark APIs are deprecated in this release. Use the new watermark APIs introduced in this release instead.
addVideoWatermarkaddVideoWatermarkEx
-
Removal of redundant APIs
The following APIs and parameters are removed in this release:
setLocalPublishFallbackOptiononLocalPublishFallbackToAudioOnlyonDownlinkNetworkInfoUpdatedonWlAccStatsenableWirelessAccelerate
-
Changes to makeup feature implementation
Due to the beauty effect refactoring in this release, calling
setExtensionPropertyto enable the makeup feature is no longer supported starting from v4.6.2. Use theSTYLE_MAKEUPnode instead. -
Behavior changes in dual-stream mode
Before v4.6.2, when the sender enabled adaptive low-stream mode (
AutoSimulcastStream), the low stream was not sent proactively. The sender only started sending the low stream after receiving a request from a host-role receiver callingsetRemoteVideoStreamType. Starting from v4.6.2, when the sender enables adaptive low-stream mode, the SDK automatically decides whether to send or stop sending the low stream based on the downlink network quality of subscribing users. If you setmodeto another sending mode or explicitly configure the width, height, bitrate, or frame rate of the low stream, this adaptive behavior is disabled. -
New domains required for domain whitelist
If you upgrade from a previous version and use the domain whitelist feature (
domainLimitinRtcEngineConfigset totrue), add the following domains to the whitelist to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
-
Removal of
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieveuidinformation directly from theonEncodedVideoFrameReceivedcallback. Update your integration logic accordingly.
New features
Included in this release:
-
Multi-resolution video streams
This release introduces the Adaptive Bitrate Video Streaming (ABR) feature, which supports sending multiple video streams at different resolutions from the same video source simultaneously, including in multi-channel scenarios. Receivers can automatically or manually subscribe to streams at their preferred resolution.
After enabling ABR, you can configure up to four video stream layers (one main stream at the highest resolution and up to three lower-resolution streams), and set options such as resolution, bitrate, and layered streaming fallback. When layered streaming fallback is enabled, the SDK automatically switches to lower-resolution streams under poor network conditions to maintain a smooth viewing experience. This feature is suited for meetings, large classes, interactive live streaming, and other multi-device or multi-network environments.
-
Multi-path network transmission
This release introduces multi-path transmission for devices that support multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication in challenging environments such as vehicles, IoT devices, trains, and highways.
Enable multi-path transmission by setting
enableMultipathtotrueinChannelMediaOptions. Two transmission modes are supported throughMultipathMode:- Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
preferMultipathType. - Full redundancy mode: Transmits data simultaneously on all available network paths. Suited for scenarios that are not traffic-sensitive but require extreme reliability, such as outdoor broadcasting and parallel control. This mode incurs additional costs. Contact technical support to enable it.
Uplink and downlink paths can also be configured separately using
uplinkMultipathModeanddownlinkMultipathModeinChannelMediaOptions. Once enabled, the SDK reports real-time transmission statistics for each path through theonMultipathStatscallback, including per-path traffic consumption. - Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
-
Video quality scoring
This release adds the
mosValuefield toRemoteVideoStats, reporting the quality score of the received remote video stream as evaluated by the Agora real-time video MOS (Mean Opinion Score) system. Scores range from 1 to 5, where 5 indicates excellent video quality and 1 indicates extremely poor quality. Use this field to monitor subjective video quality in real time, adjust video parameters dynamically, or integrate into quality monitoring and alerting workflows. Contact technical support to enable this feature. -
Support for adding multiple watermarks
This release deprecates
addVideoWatermarkandaddVideoWatermarkEx, and introducesaddVideoWatermarkWithConfigandaddVideoWatermarkWithConfigEx, which support adding multiple watermarks to a video using watermark IDs and controlling their display order. To remove a specific watermark, callremoveVideoWatermark. -
Token renewal result callback
This release introduces the
onRenewTokenResultcallback and theRenewTokenErrorCodeerror code enum. After callingrenewTokento update the token, the SDK reports the result throughonRenewTokenResultand returns detailed error codes defined inRenewTokenErrorCode, allowing you to handle token renewal failure scenarios accordingly. -
Media Player support for getting audio buffer delay
To address synchronization issues between the main vocal and background accompaniment in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module. This method returns the millisecond-level audio buffer delay when playing media files. -
Advanced Beauty (Beta)
This release introduces a new advanced beauty feature with the following capabilities:
- Precision beauty effects:
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, face slimming, eye enlarging, and nose narrowing) or one-click natural results using presets.
- Style makeup options: Eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancements: Teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
- Unified API: Manages all beauty, makeup, and filter functions through three core nodes (
BEAUTY,STYLE_MAKEUP, andFILTER) usingIVideoEffectObjectfor unified parameter configuration and lifecycle control. - Ready-to-use presets: Provides multiple style templates (for example, "Natural Beauty," "Senior Makeup," and "Cool White Filter") for immediate use.
- Dynamic parameter control: Supports real-time reading and modifying of granular parameters (for example, smoothing strength and lipstick type) through key-value pairs, with support for saving custom configurations and resetting defaults.
- Local resource support: All beauty resources, including effects, filters, and makeup assets, are packaged as local bundle files to ensure stability and reliability.
- Precision beauty effects:
-
Other new features
- Adds the
setPlaybackAudioFrameBeforeMixingParametersmethod to set the audio frame format returned in theonPlaybackAudioFrameBeforeMixingcallback, including sample rate, number of channels, and number of data samples per callback. After calling this method, the SDK returns the original pre-mix audio data according to the specified parameters. - Adds the
preloadEffectExmethod to preload audio effect files into specified channels, supporting both local and online files for use in multi-channel scenarios. - Adds the
playEffectExmethod to play audio effect files in specified channels with configurable parameters, including loop count, pitch, spatial position, volume, whether to publish to the channel, and playback start position. - The local screenshot upload feature now supports setting the video observation position for screenshots through the new
positionfield inContentInspectModule, enabling screenshots of original video data or video streams before or after effect processing. - Adds the
screenColorTypeproperty toSegmentationPropertyto improve portrait segmentation accuracy when using a green or blue screen for virtual backgrounds. You can specify the background color as green, blue, or set it to automatic recognition.
- Adds the
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Window exclusion support for secondary displays
Before v4.6.2, configuring window exclusion (
excludeWindowListinScreenCaptureParameters) was not supported in multi-screen scenarios when sharing by screen ID (startScreenCaptureByDisplayId). This release adds support for this configuration.This release also adds
LocalVideoStreamReasonScreenCaptureExcludeWindowFailedtoLocalVideoStreamReasonto report cases where window exclusion fails during screen sharing. -
Improved trigger timing of
onVideoDeviceStateChangedBefore v4.6.2, the
onVideoDeviceStateChangedcallback could only be triggered after joining a channel. Starting from this release, you can receive this callback once afterIRtcEngineinitialization completes, and continue to receive it after joining a channel. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
onNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Optimizes permission requests on Windows 11 24H2 and later to avoid unnecessary location data acquisition.
- Adds support for G.711 and G.722 audio codecs when interoperating with Web clients, improving cross-platform audio compatibility and clarity.
- Improves video clarity in screen sharing scenarios involving documents.
- Adds error codes
ERR_PCMSEND_FORMAT (200)andERR_PCMSEND_BUFFEROVERFLOW (201)to report PCM data transmission errors.
Issues fixed
This release fixes the following issues:
- When playing multi-track songs with guide vocal enabled, noise occurred after calling
setAudioPitchto adjust the pitch. - When a broadcaster created a custom audio capture track using
createCustomAudioTrackwithtrackTypeset toAudioTrackDirect, pushed self-captured audio usingpushAudioFrame, and then played sound effects usingplayEffect, the audience in the channel heard noise in the broadcaster's audio. - Apps integrated with the SDK occasionally experienced UI freezing due to main thread blocking during audio and video engagements.
- When screen sharing was enabled with
enableHighLightset totrueinScreenCaptureParameters, placing the shared window on top and maximizing it caused the local preview to flicker. - Apps sharing external screen video streams occasionally crashed after the external screen was disconnected.
- When calling
openWithMediaSourcewithisLiveSourceset totrueto play a pure video stream, playback failed. - Receivers occasionally heard noise when the sender transmitted multi-channel encoded audio.
- When calling
opentwice to open different media resources, theonPlayerInfoUpdatedcallback returned information about the first resource when opening the second, which was incorrect. - When calling
enableAudioVolumeIndicationto enable volume indication for local streaming users and remote users, the local user volume returned byonAudioVolumeIndicationwas 0. - When using a 21 ultrawide display and setting a high resolution such as 3840×2160 for screen sharing, the shared image was cropped in both local preview and on the receiver side.
- When calling
enableVideoImageSourceto enable placeholder streaming, the sender occasionally succeeded in publishing butonVideoPublishStateChangedreported the publish state as something other thanPublishStatePublished, which was incorrect. - In multi-channel scenarios, when calling
setupRemoteVideoExto initialize remote user views before successfully joining withjoinChannelEx, the first frame of remote user views occasionally had a large display delay. - After calling
opento open an online sound effect file andplayEffectto start playback, callingseekto set the playback position caused the file to play from the beginning instead of the specified position. - In media volume mode, when a broadcaster published microphone audio while simultaneously playing sound effects with
playEffectand a music file withstartAudioMixing, echo occasionally occurred. - After calling
joinChannelExto join a channel andstartOrUpdateChannelMediaRelayto start cross-channel media relay, rejoining the channel after going offline and leaving occasionally causedonChannelMediaRelayStateChangedto reportstateasRelayStateFailurewithcodeasRelayErrorServerErrorResponse. - On some laptop models with power-saving mode enabled, receivers occasionally heard echo when the sender shared screen and audio.
- In online education scenarios, teachers occasionally observed audio and video out of sync for multiple students in the local view.
- The second call to
enumerateVideoDevicesto retrieve the device list did not take effect. - On Windows 7 devices, when sharing a PowerPoint window running in full-screen auto-play mode with a large number of animations, the remote view occasionally flickered.
v4.5.2
v4.5.2 was released on March 13, 2025.
v4.5.2 for Electron is comparable to native version v.4.5.1.
New features
-
AI conversation scenario
This version adds the
AudioScenarioAiClientaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions.
Issues fixed
This release fixes the following issues:
- When joining two or more channels simultaneously, and calling the
takeSnapshotExmethod to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
pausemethod to pause playback, then callingseekto move to a specified position, and finally callingplayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
getPlaySrcdid not change after calling theswitchSrcmethod to switch to a new media resource. - In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v4.5.0
v4.5.0 was released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression.
VideoDenoiserLevelStrengthis removed fromVideoDenoiserLevel.Instead, after enabling video noise suppression by calling
setVideoDenoiserOptions, you can call thesetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions. -
Changes in camera plug and unplug status
In previous versions, when the camera was unplugged and replugged, the
onVideoDeviceStateChangedcallback would report the device status asMediaDeviceStateActive(1) (device in use). Starting from this version, after the camera is replugged, the device status will change toMediaDeviceStateIdle(0) (device ready). -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
CompressionPreferenceenumeration class, a newPreferCompressionAuto(-1) enumeration is added, replacing the originalPreferQuality(1) as the default value. In this mode, the SDK will automatically choose betweenPreferLowLatencyandPreferQualitybased on your video scene settings to achieve the best user experience. - In the
DegradationPreferenceenumeration class, a newMaintainAuto(-1) enumeration is added, replacing the originalMaintainQuality(1) as the default value. In this mode, the SDK will automatically choose betweenMaintainFramerate,MaintainBalanced, andMaintainResolutionbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
ApplicationScenarioLiveshow(3) (Live Show) enumeration toVideoApplicationScenarioType. You can callsetVideoScenarioto set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to callenableInstantMediaRendering) to achieve better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (for example, screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
Color space settings
This version adds the
colorSpaceparameter toVideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Others
onLocalVideoStateChangedcallback adds theLocalVideoStreamReasonDeviceDisconnectedenumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows)MediaDeviceStateTypeadds theMediaDeviceStatePluggedInenumeration, indicating that the device has been plugged in. (Windows)
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshotWithConfigandtakeSnapshotWithConfigExmethods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- Optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices. (Windows)
- When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report thePlayerEventSwitchErrorevent, indicating an error occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
- Optimizes the logic for calling
Issues fixed
This version fixes the following issues:
- When calling
startScreenCaptureByWindowIdto share the screen, the window capture area specified byregionRectwas inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
- When calling
followSystemRecordingDeviceorfollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the default system audio playback device, the local audio state callbackonLocalAudioStateChangedis not triggered when the audio device is removed, which is not as expected. (Windows)
v4.4.0
v4.4.0 was released on August 29, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onExtensionEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext -
This version renames the following members in
ExternalVideoFrame:d3d11_texture_2dis renamed tod3d11Texture2d.texture_slice_indexis renamed totextureSliceIndex.metadata_bufferis renamed tometadataBuffer.metadata_sizeis renamed tometadataSize.
New features
-
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod. Pass in the sound effect types supported in theVoiceAiTunerTypeenum to achieve the effects such as a deep voice, cute voice, husky singing voice, and others. -
1v1 video call scenario
This version adds
ApplicationScenario1v1(1v1 video call) inVideoApplicationScenarioType. You can callsetVideoScenarioto set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions.
Improvements
-
Adaptive hardware decoding support (Windows)
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing the system load.
-
Rendering performance enhancement (Windows)
DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - An enumerator is added in the
onLocalVideoStateChangedcallback, indicating that the display used for screen capture has been disconnected. - Optimizes the video link for window sharing, reducing CPU usage (macOS).
- Improves echo cancellation for screen sharing scenarios.
- Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
ClientRoleChangeFailedRequestTimeOutandClientRoleChangeFailedConnectionFailedinClientRoleChangeFailedReason.
- Optimizes the transmission strategy: Calling
Issues fixed
This release fixes the issue where the app crashed during audio and video interactions after the user actively denied the permission to use audio and video devices (macOS).
v4.3.2
v4.3.2 was released on June 6, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app occasionally crashed when remote users left the channel.
- Calling
leaveChannelExwithout passing in theoptionsparameter occasionally led to app crashes. - The screen occasionally flickered on the receiver's side when sharing a PPT window using startScreenCaptureByWindowId and playing PPT animations (Windows).
- The window border did not retain its original size after exiting the presentation and then maximizing the PPT window when sharing a WPS PPT window on Windows 7 using startScreenCaptureByWindowId and setting
enableHighLightin ScreenCaptureParameters totrue(Windows). - The specified window could not be brought to the foreground if it was covered by other windows when sharing a window using startScreenCaptureByWindowId and setting
windowFocusandenableHighLightin ScreenCaptureParameters totrue(Windows). - Clicking on the desktop widget caused the outlined part to flicker when sharing and highlighting a window on a Windows 7 device (Windows).
v4.3.1
v4.3.1 was released on May 9, 2024.
New features
-
Portrait center stage (macOS)
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the enableCameraCenterStage method to activate portrait center stage. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling portrait center stage, it is recommended to verify whether your current device supports this feature by calling isCameraCenterStageSupported. See API documentation for the list of supported devices.
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failure in data stream encryption or decryption, these can be identified by the newly addedEncryptionErrorDatastreamDecryptionFailureandEncryptionErrorDatastreamEncryptionFailureenumerations. -
Adaptive configuration for low-quality video streams
This version introduces an adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode, the SDK defaults to the following behaviors:
- The default encoding resolution for the low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the low-quality video streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization for game use-case screen sharing (Windows)
This version specifically optimizes screen sharing for game use-cases, enhancing performance, stability, and clarity in ultra-high definition (4K, 60 fps) game use-cases, resulting in a clearer, smoother, and more stable gaming experience for players.
-
Audio device type detection (macOS)
This version adds the
deviceTypeNamein AudioDeviceInfo, used to identify the type of audio devices, such as built-in, USB, HDMI, and so on. -
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure, especially around the fingers, are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
EarMonitoringFilterReusePostProcessingFilterinEarMonitoringFilterType. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen-sharing use-cases to save system performance overhead (macOS, Windows).
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AudioEffectPreset, a new enumeration
RoomAcousticsChorus(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending side to when the audio is played on the receiving side.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- In screen sharing use-cases, when the app enabled sound card capture with enableLoopbackRecording to capture audio from the shared screen, the transmission of the sound card captured audio failed after a local user manually disabled the local audio capture device, preventing remote users from hearing the shared screen's audio (Windows).
- In audio-video interactions, if a user inserted headphones into the device and manually switched the system audio output to speakers, and later the app called setPlaybackDevice to specify the headphone as the audio playback device, audio output did not switch back to speakers as expected after the headphones were removed (macOS).
- During interactions, when a local user set the system default playback device to speakers, there was no sound from the remote end (Windows).
- When sharing an Excel document window, remote users occasionally saw a green screen (Windows).
- On devices using Intel graphics cards, there was an occasional performance regression when publishing a low-quality video stream (Windows).
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- enableCameraCenterStage (macOS)
- isCameraCenterStageSupported (macOS)
- registerFaceInfoObserver
- unregisterFaceInfoObserver
- IFaceInfoObserver
- onFaceInfo
- The
publishLipSyncTrackmember in ChannelMediaOptions - MediaSourceType adds
SpeechDrivenVideoSource - VideoSourceType adds
VideoSourceSpeechDriven - EncryptionConfig adds
datastreamEncryptionEnabled - EncryptionErrorType adds the following enumerations:
EncryptionErrorDatastreamDecryptionFailureEncryptionErrorDatastreamEncryptionFailure
- AudioDeviceInfo adds
deviceTypeName(macOS) - RemoteAudioStats adds
e2eDelay - ErrorCodeType adds
ErrDatastreamDecryptionFailed - AudioEffectPreset adds
RoomAcousticsChorus, enhancing the spatial presence of vocals in chorus use-cases. - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- EarMonitoringFilterType adds a new enumeration
EarMonitoringFilterBuiltInAudioFilters
v4.3.0
v4.3.0 was released on February 28, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name onLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasononRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class LocalAudioStreamErrorLocalAudioStreamReasonLocalVideoStreamErrorLocalVideoStreamReasonDirectCdnStreamingErrorDirectCdnStreamingReasonMediaPlayerErrorMediaPlayerReasonRtmpStreamPublishErrorTypeRtmpStreamPublishReasonNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelay,updateChannelMediaRelaystartOrUpdateChannelMediaRelaystartChannelMediaRelayEx,updateChannelMediaRelayExstartOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the LocalVideoStreamReason class:
- The value of
LocalVideoStreamReasonScreenCapturePaused(formerlyLocalVideoStreamReasonScreenCapturePaused) has been changed from23to28. - The value of
LocalVideoStreamReasonScreenCaptureResumed(formerlyLocalVideoStreamReasonScreenCaptureResumed) has been changed from24to29. - The
LocalVideoStreamReasonCodecNotSupportenumeration has been changed toLocalVideoStreamReasonCodecNotSupport.
- The value of
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
-
Audio loopback capturing
- Before v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled.
- As of v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording.
New features
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo
to set the first view: Set the
positionparameter toPositionPostCapturerOrigin(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo
to set the second view: Set the
positionparameter toPositionPostCapturerinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo
to set the first view: Set the
-
Query Device Score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- setPlaybackDeviceVolume: Sets the volume of the audio playback device.
- getRecordingDeviceVolume: Sets the volume of the audio capturing device.
- setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Other Improvements
This release also includes the following improvements:
- The onLocalVideoStateChanged callback is improved with the inclusion of the
LocalVideoStreamReasonScreenCaptureAutoFallbackenumeration, signaling unexpected errors during the screen sharing process (potentially due to window blocking failure), resulting in performance degradation without impacting the screen sharing process itself. - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
- The onLocalVideoStateChanged callback is improved with the inclusion of the
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the onLocalVideoStats callback is 0, which is not as expected. - When sharing in a specified screen area, the mouse coordinates within the shared area are inaccurate. When the mouse is near the border of the shared area, the mouse may not be visible in the shared screen.
- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5 mm earphones.
API changes
Added
- The
subviewUidmember in VideoCanvas - enableCustomAudioLocalPlayback
- queryDeviceScore
- The
CustomVideoSourceenumeration in MediaSourceType - The
RouteBluetoothDeviceA2DPenumeration in AudioRoute - selectMultiAudioTrack
- onPlayerCacheStats
- onPlayerPlaybackStats
- PlayerPlaybackStats
Modified
- All
ERRORfields in the following enumerations are changed toREASON:LocalAudioStreamErrorOkLocalAudioStreamErrorFailureLocalAudioStreamErrorDeviceNoPermissionLocalAudioStreamErrorDeviceBusyLocalAudioStreamErrorRecordFailureLocalAudioStreamErrorEncodeFailureLocalAudioStreamErrorRecordInvalidId(Windows)LocalAudioStreamErrorPlayoutInvalidId(Windows)LocalVideoStreamErrorOkLocalVideoStreamErrorFailureLocalVideoStreamErrorDeviceNoPermissionLocalVideoStreamErrorDeviceBusyLocalVideoStreamErrorCaptureFailureLocalVideoStreamErrorCodecNotSupportLocalVideoStreamErrorDeviceNotFoundLocalVideoStreamErrorDeviceDisconnectedLocalVideoStreamErrorDeviceInvalidIdLocalVideoStreamErrorScreenCaptureWindowMinimizedLocalVideoStreamErrorScreenCaptureWindowClosedLocalVideoStreamErrorScreenCaptureWindowOccludedDirectCdnStreamingErrorOkDirectCdnStreamingErrorFailedDirectCdnStreamingErrorAudioPublicationDirectCdnStreamingErrorVideoPublicationDirectCdnStreamingErrorNetConnectDirectCdnStreamingErrorBadNamePlayerErrorNonePlayerErrorInvalidArgumentsPlayerErrorInternalPlayerErrorNoResourcePlayerErrorInvalidMediaSourcePlayerErrorUnknownStreamTypePlayerErrorObjNotInitializedPlayerErrorCodecNotSupportedPlayerErrorVideoRenderFailedPlayerErrorInvalidStatePlayerErrorUrlNotFoundPlayerErrorInvalidConnectionStatePlayerErrorSrcBufferUnderflowPlayerErrorInterruptedPlayerErrorNotSupportedPlayerErrorTokenExpiredPlayerErrorUnknownRtmpStreamPublishErrorOkRtmpStreamPublishErrorInvalidArgumentRtmpStreamPublishErrorEncryptedStreamNotAllowedRtmpStreamPublishErrorConnectionTimeoutRtmpStreamPublishErrorInternalServerErrorRtmpStreamPublishErrorRtmpServerErrorRtmpStreamPublishErrorTooOftenRtmpStreamPublishErrorReachLimitRtmpStreamPublishErrorNotAuthorizedRtmpStreamPublishErrorStreamNotFoundRtmpStreamPublishErrorFormatNotSupportedRtmpStreamPublishErrorNotBroadcasterRtmpStreamPublishErrorTranscodingNoMixStreamRtmpStreamPublishErrorNetDownRtmpStreamPublishErrorInvalidPrivilegeRtmpStreamUnpublishErrorOk
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEvent
v4.2.6
v4.2.6 was released on November 24, 2023.
Issues fixed
This version fixed the issue of stuttering or frozen video on the receiving end in specific use-cases, such as when the network packet loss rate was high, or when the broadcaster left the channel without destroying the engine and then re-joined the channel.
v4.2.4
v4.2.4 was released on October 25, 2023.
Issues fixed
This release fixes the following issue:
The AgoraRtcWrapper version number in CFBundleShortVersionString on macOS is wrong, which interferes with submitting the App to the App Store.
v4.2.3
v4.2.3 was released on October 20, 2023.
New features
- Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, an optional parameter serverConfig is added in ContentInspectConfig. This parameter is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
This version also introduces the enableContentInspectEx method, which supports taking screenshots for multiple video streams and uploading them.
- ID3D11Texture2D Rendering
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set format to VideoTextureId3d11texture2d when pushing external raw video frames to the SDK by calling pushVideoFrame. By setting the d3d11_texture_2d and texture_slice_index properties, you can determine the ID3D11Texture2D texture object to use.
- Local video status error code update
In order to help users understand the exact reasons for local video errors in screen sharing use-cases, the following sets of enumerations have been added to the onLocalVideoStateChanged callback:
LocalVideoStreamErrorScreenCapturePaused(23): Screen capture has been paused. A common use-case for reporting this error code is that the current screen may have been switched to a secure desktop, such as a UAC dialog box or Winlogon desktop.LocalVideoStreamErrorScreenCaptureResumed(24): Screen capture has resumed from the paused state.LocalVideoStreamErrorScreenCaptureWindowHidden(25): The window being captured on the current screen is in a hidden state and is not visible on the current screen.LocalVideoStreamErrorScreenCaptureWindowRecoverFromHidden(26): The window for screen capture has been restored from the hidden state.LocalVideoStreamErrorScreenCaptureWindowRecoverFromMinimized(27): The window for screen capture has been restored from the minimized state.
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperforming, the error code-4: ErrNotSupportedis returned, indicating that the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10%. Specific values may vary depending on the device model and platform.
-
Screen sharing use-case optimization
This release optimizes the performance and encoding efficiency in ultra-high-definition (4K, 60 fps) game sharing use-cases, effectively reducing the system resource usage during screen sharing.
Other Improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code-2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crashing when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional crashes and dropped frames in screen sharing use-cases on macOS.
- Occasional crashes when joining a channel on macOS.
- When calling the
playEffectmethod to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - Calling
takeSnapshotExonce received theonSnapshotTakencallback for multiple times.
API changes
Added
-
enableContentInspectEx -
contentInspectImageModerationinContentInspectType -
serverConfiginContentInspectConfig -
The following enumerations in
onLocalVideoStateChanged:LocalVideoStreamErrorScreenCapturePausedLocalVideoStreamErrorScreenCaptureResumedLocalVideoStreamErrorScreenCaptureWindowHiddenLocalVideoStreamErrorScreenCaptureWindowRecoverFromHiddenLocalVideoStreamErrorScreenCaptureWindowRecoverFromMinimized
-
d3d11_texture_2dandtexture_slice_indexinExternalVideoFrame -
VideoTextureId3d11texture2dinVideoPixelFormat -
isFeatureAvailableOnDevice -
FeatureType
v4.2.2
v4.2.2 was released on August 1, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users join a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelandpreloadChannelWithUserAccountmethods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you join a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
Improvements
Channel media relay
The number of target channels for media relay has been increased to 6. When calling startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels.
Issues fixed
This release fixed the following issues:
- Occasionally, noise occurred when the local user listened to their own and remote audio after joining the channel. (macOS)
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In multi-device audio recording use-cases, after repeatedly plugging and unplugging or enabling/disabling the audio recording device, no sound could be heard occasionally when calling the
startRecordingDeviceTestto start an audio capturing device test. (Windows)
API changes
Added
preloadChannelpreloadChannelWithUserAccountupdatePreloadChannelToken
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- After enabling the screen sharing feature on the sending end, there was high delay until the receiving end could see the shared screen. (macOS)
- When the sending end mixed and published two streams of video captured by two cameras locally, the video from the second camera was occasionally missing on the receiving end. (Windows)
v4.2.0
v4.2.0 was released on May 29, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter:
| Deleted Methods | Alternative Methods |
|---|---|
startPrimaryCameraCapturestartSecondaryCameraCapture | startCameraCapture |
stopPrimaryCameraCapturestopSecondaryCameraCapture | stopCameraCapture |
startPrimaryScreenCapturestartSecondaryScreenCapture | startScreenCaptureBySourceType |
stopPrimaryScreenCapturestopSecondaryScreenCapture | startScreenCaptureBySourceType |
2. Video data acquisition
- The
onCaptureVideoFrameandonPreEncodeVideoFramecallbacks are added with a new parameter calledsourceType, which is used to indicate the specific video source type. - The following callbacks are deleted. Get the video source type through the
sourceTypeparameter in theonPreEncodeVideoFrameandonCaptureVideoFramecallbacks.onSecondaryPreEncodeCameraVideoFrameonScreenCaptureVideoFrameonPreEncodeScreenVideoFrameonSecondaryPreEncodeScreenVideoFrame
3. Channel media options
publishCustomAudioTrackEnableAecinChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinChannelMediaOptionsis renamed topublishCustomAudioTrackId.
4. Local video mixing
- The
VideoInputStreamsinLocalTranscoderConfigurationis changed tovideoInputStreams. - The
MediaSourceTypeinTranscodingVideoStreamis changed toVideoSourceType.
5. Virtual sound card (macOS)
As of v4.2.0, Agora supports third-party virtual sound cards. You can use a third-party virtual sound card as the audio input or output device for the SDK. You can use the stateChanged callback to see whether the current input or output device selected by the SDK is a virtual sound card.
If you set AgoraALD or Soundflower as the default input or output device when joining a channel, you will not hear audio.
6. Upgrade the default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
7. Miscellaneous
onApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.- The
IAudioFrameObserverclass is renamed toIAudioPcmFrameSink, thus the prototypes of the following methods are updated accordingly:onFrameregisterAudioFrameObserverandunregisterAudioFrameObserverinIMediaPlayer
startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode to balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background feature. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrates are required, ensuring smoothness when multiple streams are subscribed to by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
Starting from this release, the local video mixing feature works on macOS. In addition, this release adds the onLocalVideoTranscoderError callback. When there is an error in starting or updating the local video mixing, the SDK triggers this callback to report the reason for the failure.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
6. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
7. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the onVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel button and then get the indicators in the video frame rendering process through the onVideoRenderingTracingResult callback. This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced rendering compatibility (Windows)
This release enhances the rendering compatibility of the SDK. Issues like black screens caused by rendering failures on certain devices are fixed.
3. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
4. Multi-camera capture and multi-screen capture
This release introduces startCameraCapture and startScreenCaptureBySourceType. By calling these methods multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras and screens for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras and displays need to be connected.
5. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
6. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
7. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode.
When the video processing mode is ProcessModeReadOnly, the return value is reserved for future use.
When the video processing mode is ProcessModeReadWrite, the SDK receives the video frame when the return value is true. The video frame is discarded when the return value is false.
Issues fixed
This release fixed the following issues:
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- The receiver received the low-quality stream originally and automatically switched to the high-quality stream after a few seconds (macOS).
- Incorrect information in the type field of the return value after calling
getDefaultAudioDevice(macOS). - Occasional screen jitter during screen sharing (macOS).
- When using Agora Media Player to play RTSP video streams, the video images sometimes appeared pixelated (Windows).
- Playing audio files with a sample rate of 48 kHz failed.
- If the rendering view of the player was set as a
UIViewController's view, the video was zoomed from the bottom-left corner to the middle of the screen when entering full-screen mode (macOS). - Adding an Alpha channel to an image in the PNG or GIF format failed when the local client mixed video streams (Windows).
- After joining the channel, remote users saw a watermark even though the watermark was deleted (Windows).
- If a watermark was added after starting screen sharing, the watermark was not displayed on the screen (Windows).
- When joining a channel and accessing an external camera, calling
setDeviceto specify the video capture device as the external camera did not take effect. - When trying to outline the shared window and put it on top, the shared window did not stay on top of other windows (Windows).
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
startCameraCapturestopCameraCapturestartScreenCaptureBySourceTypestopScreenCaptureBySourceTypestartOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsonLocalVideoTranscoderErrorstartLocalVideoTranscoder(macOS)updateLocalTranscoderConfiguration(macOS)setAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAudioAinsModeAudioTrackTypeVideoApplicationScenarioTypeScreenCaptureFramerateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inRtcEngineContext - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
BackgourndNoneandBackgroundVideoenumerators inBackgroundSourceType
Deprecated
startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEvent
Deleted
startPrimaryScreenCapturestartSecondaryScreenCapturestopPrimaryScreenCapturestopSecondaryScreenCapturestartPrimaryCameraCapturestartSecondaryCameraCapturestopPrimaryCameraCapturestopSecondaryCameraCaptureonSecondaryPreEncodeCameraVideoFrame(Windows)onScreenCaptureVideoFrame(Windows)onPreEncodeScreenVideoFrame(Windows)onSecondaryPreEncodeScreenVideoFrame(Windows)onApiCallExecutedpublishCustomAudioTrackEnableAecinChannelMediaOptions
v4.1.0
v4.1.0 was released on December 20, 2022.
Compatibility changes
This release deletes the sourceType parameter in enableDualStreamMode, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK; you no longer need to specify the video source type.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call enableInEarMonitoring to enable the in-ear monitoring function.
To adjust the in-ear monitoring volume, you can call setInEarMonitoringVolume.
2. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use. The available values are UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, and 5G. When the local network connection type changes, the SDK triggers the onNetworkTypeChanged callback to report the current network connection type.
3. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports the three audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; contact support@agora.io to adjust this number according to your use-case.
Agora also supports publishers in choosing whether the audio streams being published are to be 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 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.
4. Dual-stream mode
This release optimizes the dual-stream mode. You can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing to a low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams). Follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamTypeorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify this default behavior, you can call setDualStreamMode and set the mode parameter to disableSimulcastStream (never send low-quality video streams) or enableSimulcastStream (always send low-quality video streams).
5. Loopback device (Windows)
The SDK uses the playback device as the loopback device by default. As of 4.1.0, you can specify a loopback device separately and publish the captured audio to the remote end.
setLoopbackDevice: Specifies the loopback device. If you do not want the current playback device to be the loopback device, you can call this method to specify another device as the loopback device.getLoopbackDevice: Gets the current loopback device.followSystemLoopbackDevice: Whether the loopback device follows the default playback device of the system.
6. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense-of-presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user by callingsetPlayerAttenuationandsetRemoteAudioAttenuationrespectively, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams. The receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the audio experience for users with headphones. If you cannot achieve the expected headphone EQ effect after callingsetHeadphoneEQPreset, you can callsetHeadphoneEQParametersto adjust the EQ.
7. Encoded video frame observer
This release adds the setRemoteVideoSubscriptionOptions and setRemoteVideoSubscriptionOptionsEx methods. When you call the registerVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default.
If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
8. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
9. Register extensions (Windows)
This release adds the registerExtension method for registering extensions. When using a third-party extension, you need to call the extension-related APIs in the following order:
loadExtensionProvider -> registerExtension -> setExtensionProviderProperty -> enableExtension
10. Device management
This release adds a series of callbacks to help you better understand the status of your audio and video devices:
onVideoDeviceStateChanged: Occurs when the status of the video device changes.onAudioDeviceStateChanged: Occurs when the status of the audio device changes.onAudioDeviceVolumeChanged: Occurs when the volume of an audio device or app changes.
11. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
12. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - The
optionsparameter in theleaveChannelExmethod, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
13. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
CompressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.EncodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
14. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the onClientRoleChanged callback. The value of this parameter is as follows:
AudienceLatencyLevelLowLatency (1): Low latency.AudienceLatencyLevelUltraLowLatency (2): Ultra-low latency.
15. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v4.0.0). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option.
To experience this feature, contact support@agora.io.
Improvements
1. Video information change callback
This release optimizes the trigger logic of onVideoSizeChanged, which can also be triggered and report the local video size change when startPreview is called separately.
2. First video frame rendering (Windows)
This release speeds up the first video frame rendering time to improve the video experience.
3. Screen sharing
In addition to the usability enhancements detailed in the fixed issued section, this release includes a number of functional improvements to screen sharing, as follows:
All
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a device with an Intel Core i7-9750H CPU @ 2.60 GHz or better.
Windows
- New
minimizeWindowmember inScreenCaptureSourceInfoto indicate whether the target window is minimized. - New
enableHighLight,highLightColor, andhighLightWidthmembers inScreenCaptureParametersso that you can place a border around the target window or screen when screen sharing. - Compatibility with a greater number of mainstream apps, including WPS Office, Microsoft Office PowerPoint, Visual Studio Code, Adobe Photoshop, Windows Media Player, and Scratch.
- Compatibility with additional devices and operating systems, including: Window 8 systems, devices without discrete graphics cards, and dual graphics devices.
macOS
- Compatibility with additional devices and use-cases, including: dual graphics devices and screen sharing using external screens.
3. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
RelayEventPacketUpdateDestChannelRefused(8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
4. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
5. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
audioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Reduces the CPU usage and power consumption of the local device when the host calls the
muteLocalVideoStreammethod. - Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network use-cases.
Issues fixed
This release fixes the following issues:
All
- When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - When using the Agora media player to play videos, after you played and paused the video, and then called the
seekmethod to specify a new position for playback, the video image occasionally remained unchanged; if you called theresumemethod to resume playback, the video was sometimes played at a speed faster than the original one. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
- The call
getExtensionPropertyfailed and returned an empty string. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. - In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
onNetworkQualitycallback was inaccurate for the user who was sharing a screen.
Windows
- When
stopPreviewwas called to disable the local video preview, the virtual background that had been set up was occasionally invalidated. - Crashes occasionally occurred when exiting a channel and joining it multiple times with virtual background enabled and set to blur effect.
- If the local client used a camera with a resolution set to 1920 × 1080 as the video capture source, the resolution of the remote video was occasionally inconsistent with the local client.
- In screen sharing use-cases, when the user minimized and then restored the shared window, the remote video occasionally switched to the low-quality stream.
- When the host started screen sharing during live streaming, the audience members sometimes heard echoes.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, a black screen appeared when sharing a screen between a landscape monitor and a portrait monitor.
- In screen sharing use-cases with a window excluded, the application crashed when the specified shared area exceeded the screen resolution.
- The application failed to exclude a window using the
startScreenCaptureByDisplayIdmethod for screen sharing. - In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
onNetworkQualitycallback was inaccurate for the user who was sharing a screen. - In screen sharing use-cases, when the user shared the screen by window, the mouse in the shared screen was not in its actual position.
- When switching from a non-screen sharing use-case to a screen sharing one, the application occasionally crashed if the user did not switch the resolution accordingly.
macOS
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. - In screen sharing use-cases on Mac devices, when the user minimized or closed a shared application window, another window of the same application was automatically shared.
- In screen sharing use-cases, the shared window of a split screen was not highlighted correctly.
- After starting and stopping the audio capture device test, there was no sound when the audio playback device was subsequently started.
- The
onVideoPublishStateChangedcallback reported an inaccurate video source type.
API changes
Added
getNativeHandlegetMusicContentCentergetPlaybackDefaultDevicegetRecordingDefaultDeviceenableDualStreamModeExsetDualStreamModesetDualStreamModeExSimulcastStreamModegetNetworkTypesetLoopbackDevice(Windows)getLoopbackDevice(Windows)followSystemLoopbackDevice(Windows)setZonessetPlayerAttenuationsetRemoteAudioAttenuationsetHeadphoneEQPresetsetHeadphoneEQParametersHeadphoneEqualizerPresetsetRemoteVideoSubscriptionOptionssetRemoteVideoSubscriptionOptionsExVideoSubscriptionOptionsAdvancedOptionsEncodingPreferenceCompressionPreferenceadjustUserPlaybackSignalVolumeExRhythmPlayerStateTypeRhythmPlayerErrorTypeenableAudioVolumeIndicationExonVideoDeviceStateChangedonAudioDeviceStateChangedonAudioDeviceVolumeChangedregisterExtension(Windows)muteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayEx
Modified
- Adds
isAudioFilterableinChannelMediaOptions - Adds
enable_dopplerinSpatialAudioParams - Adds
minimizeWindowinScreenCaptureSourceInfo - Adds
followEncodeDimensionRatioinCameraCapturerConfiguration - Adds
optionsinleaveChannelEx - Adds
advanceOptionsinVideoEncoderConfiguration - Adds
newRoleOptionsinonClientRoleChanged - Adds
setupMode,mediaPlayerId, andcropAreainVideoCanvas - Adds
hwEncoderAcceleratinginLocalVideoStats - Removes
sourceTypeinenableDualStreamMode enableInEarMonitoring: Supports Windows and macOSsetEarMonitoringAudioFrameParameters: Supports Windows and macOSsetInEarMonitoringVolume: Supports Windows and macOSonEarMonitoringAudioFrame: Supports Windows and macOSScreenCaptureParameters: Supports Windows
Deprecated
onApiCallExecuted: Use the callbacks triggered by specific methods instead.RelayEventPacketUpdateDestChannelRefused (8)inChannelMediaRelayEvent
v4.0.0
v4.0.0 was released on September 29, 2022.
Compatibility changes
Integration change
This release has changed the SDK package name from electron-agora-rtc-ng to agora-electron-sdk, and optimized the implementation of some features, resulting in incompatibility with v4.0.0. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migration guide.
New features
1. Multiple media tracks
This release supports one IRtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting RtcEngineEx and ChannelMediaOptions.
- After calling
joinChannelto join the first channel, calljoinChannelExmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andChannelMediaOptionssettings. - You can simultaneously publish multiple sets of video streams captured by multiple cameras or screen sharing by setting
publishSecondaryCameraTrackandpublishSecondaryScreenTrackinChannelMediaOptions.
This release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call this method to create a video track, and get the video track ID.
- Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling SetVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
This feature has certain requirements with regards to device performance and network bandwidth, and the supported upstream and downstream frame rates vary on different platforms. To enable this feature, contact technical support.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayer method to create a media player object, you can then call the methods in the IMediaPlayer class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
- Plays local and online media files.
- Preloads media files.
- Changes the CDN route for playing media files according your network conditions.
- Shares the audio and video streams being played with remote users.
- Caches data when playing media files.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the UltraHighQualityVoice enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AudioScenarioChorus enumeration in AudioScenarioType. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
6. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling joinChannel or joinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
7. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
StartScreenCaptureByDisplayIdmethod before joining a channel, and then callJoinChannel[2/2] to join a channel and setpublishScreenTrackorpublishSecondaryScreenTrackas true. - Call the
StartScreenCaptureByDisplayIdmethod after joining a channel, and then callUpdateChannelMediaOptionsto setpublishScreenTrackorpublishSecondaryScreenTrackas true.
8. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add a user ID that you want to subscribe to in your allowlist, or add a user ID for the streams you do not wish to see to your blocklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the IRtcEngineEx interface:
SetSubscribeAudioBlocklist:Set the audio subscription blocklist.SetSubscribeAudioAllowlist:Set the audio subscription allowlist.SetSubscribeVideoBlocklist:Set the video subscription blocklist.SetSubscribeVideoAllowlist:Set the video subscription allowlist.
If a user is added in a blocklist and a allowlist at the same time, only the blocklist takes effect.
9. Set audio scenarios
To make it easier to change audio scenarios, this release adds the SetAudioScenario method. For example, if you want to change the audio scenario from AudioScenarioDefault to AudioScenarioGameStreaming when you are in a channel, you can call this method.
10. Replace video feeds with images
This release supports replacing video feeds with images when publishing video streams. You can call the enableVideoImageSource method to enable this function and choose your own images through the options parameter. If you disable this function, the remote users see the video feeds that you publish.
11. Local video mixing
This release adds a series of APIs supporting local video mixing functions. You can mix multiple video streams into one video stream locally. Common use-cases are as follows:
- In interactive live streaming use-cases with cohosts or when using the Media Push function, you can merge the screens of multiple hosts into one view locally.
- In use-cases where you capture multiple local video streams (for example, video captured by cameras, screen sharing streams, video files or pictures), you can and merge them into one video stream and then publish the mixed video stream in the channel.
You can call the startLocalVideoTranscoder method to start local video mixing and call the stopLocalVideoTranscoder method to stop local video mixing. After the local video mixing starts, you can call updateLocalTranscoderConfiguration to update the local video mixing configuration.
12. Video device management
Video capture devices can support multiple video formats, each supporting a different combination of video frame width, video frame height, and frame rate.
This release adds the numberOfCapabilities and getCapability methods for getting the number of video formats supported by the video capture device and the details of the video frames in the specified video format. When calling the startPrimaryCameraCapture or startSecondaryCameraCapture method to capture video using the camera, you can use the specified video format.
NOTE: The SDK automatically selects the best video format for the video capture device based on your settings in
VideoEncoderConfiguration, so normally you should not need to use these new methods.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as SwitchChannel in v4.0.0 through the LeaveChannel and JoinChannel methods so that you don't need to take the time to call the SwitchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushVideoFrame[1/2] method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of onAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
5. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing to streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v6.6.2
Released on March 18, 2026. Corresponds to Native SDK v4.6.2
Compatibility changes
This release introduces the following compatibility changes:
-
Deprecation of Direct CDN streaming APIs
The following APIs related to Direct CDN streaming are deprecated in this release and will be removed in a future version. Use server-side transcoding and media push instead.
setDirectCdnStreamingAudioConfigurationsetDirectCdnStreamingVideoConfigurationstartDirectCdnStreamingstopDirectCdnStreamingDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDirectCdnStreamingStateDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
The following APIs related to the virtual metronome feature are deprecated in this release and will be removed in a future version.
startRhythmPlayerconfigRhythmPlayeronRhythmPlayerStateChanged
-
Deprecation of watermark APIs
The following watermark APIs are deprecated in this release. Use the new watermark APIs introduced in this release instead.
addVideoWatermarkaddVideoWatermarkEx
-
Removal of redundant APIs
The following APIs and parameters are removed in this release:
setLocalPublishFallbackOptiononLocalPublishFallbackToAudioOnlyonDownlinkNetworkInfoUpdatedonWlAccStatsenableWirelessAccelerate
-
Changes to makeup feature implementation
Due to the beauty effect refactoring in this release, calling
setExtensionPropertyto enable the makeup feature is no longer supported starting from v4.6.2. Use theSTYLE_MAKEUPnode instead. -
Behavior changes in dual-stream mode
Before v4.6.2, when the sender enabled adaptive low-stream mode (
autoSimulcastStream), the low stream was not sent proactively. The sender only started sending the low stream after receiving a request from a host-role receiver callingsetRemoteVideoStreamType. Starting from v4.6.2, when the sender enables adaptive low-stream mode, the SDK automatically decides whether to send or stop sending the low stream based on the downlink network quality of subscribing users. If you setmodeto another sending mode or explicitly configure the width, height, bitrate, or frame rate of the low stream, this adaptive behavior is disabled. -
New domains required for domain whitelist
If you upgrade from a previous version and use the domain whitelist feature (
domainLimitinRtcEngineConfigset totrue), add the following domains to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
-
Removal of
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieveuidinformation directly from theonEncodedVideoFrameReceivedcallback. Update your integration logic accordingly.
New features
Included in this release:
-
Multi-resolution video streams
This release introduces the Adaptive Bitrate Video Streaming (ABR) feature, which supports sending multiple video streams at different resolutions from the same video source simultaneously, including in multi-channel scenarios. Receivers can automatically or manually subscribe to streams at their preferred resolution.
After enabling ABR, you can configure up to four video stream layers (one main stream at the highest resolution and up to three lower-resolution streams), and set options such as resolution, bitrate, and layered streaming fallback. When layered streaming fallback is enabled, the SDK automatically switches to lower-resolution streams under poor network conditions to maintain a smooth viewing experience. This feature is suited for meetings, large classes, interactive live streaming, and other multi-device or multi-network environments.
-
Multi-path network transmission
This release introduces multi-path transmission for devices that support multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication in challenging environments such as vehicles, IoT devices, trains, and highways.
Enable multi-path transmission by setting
enableMultipathtotrueinChannelMediaOptions. Two transmission modes are supported throughMultipathMode:- Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
preferMultipathType. - Full redundancy mode: Transmits data simultaneously on all available network paths. Suited for scenarios that are not traffic-sensitive but require extreme reliability, such as outdoor broadcasting and parallel control. This mode incurs additional costs. Contact technical support to enable it.
Uplink and downlink paths can also be configured separately using
uplinkMultipathModeanddownlinkMultipathModeinChannelMediaOptions. Once enabled, the SDK reports real-time transmission statistics for each path through theonMultipathStatscallback, including per-path traffic consumption. - Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
-
Video quality scoring
This release adds the
mosValuefield toRemoteVideoStats, reporting the quality score of the received remote video stream as evaluated by the Agora real-time video MOS (Mean Opinion Score) system. Scores range from 1 to 5, where 5 indicates excellent video quality and 1 indicates extremely poor quality. Use this field to monitor subjective video quality in real time, adjust video parameters dynamically, or integrate into quality monitoring and alerting workflows. Contact technical support to enable this feature. -
Support for adding multiple watermarks
This release deprecates
addVideoWatermarkandaddVideoWatermarkEx, and introducesaddVideoWatermarkWithConfigandaddVideoWatermarkWithConfigEx, which support adding multiple watermarks to a video using watermark IDs and controlling their display order. To remove a specific watermark, callremoveVideoWatermark. -
Token renewal result callback
This release introduces the
onRenewTokenResultcallback and theRenewTokenErrorCodeerror code enum. After callingrenewTokento update the token, the SDK reports the result throughonRenewTokenResultand returns detailed error codes defined inRenewTokenErrorCode, allowing you to handle token renewal failure scenarios accordingly. -
App-level screen sharing support on Android
Starting from Android 14, the system allows users to choose between sharing the full screen or a single app during screen sharing, enhancing privacy and multitasking. This release adds support for sharing a single app in addition to full-screen sharing. The new
onLocalVideoEventcallback reports local video events, especially those related to screen sharing. -
New permission granted callback on Android
The
onPermissionGrantedcallback helps confirm permission status in screen sharing scenarios. You can use this callback to determine whether the user granted Camera or Screen permission. -
Picture-in-Picture
This release introduces the Picture-in-Picture (PiP) feature, which supports displaying video call windows in PiP mode so users can continue watching video calls when switching apps or returning to the home screen.
This feature supports automatically entering PiP mode and provides rich configuration options. On Android, you can configure parameters such as the aspect ratio, initial position, and seamless resizing of the PiP window. On iOS, you can configure the video stream layout (flow layout, with video streams arranged left to right and top to bottom), PiP window size, and system control button styles. The feature also supports listening to PiP state changes through
AgoraPipStateChangedObserverto handle scenarios such as entering, exiting, or failure. This feature is suited for video calls, online education, live streaming, and other scenarios that require multitasking. -
Media Player support for getting audio buffer delay
To address synchronization issues between the main vocal and background accompaniment in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module. This method returns the millisecond-level audio buffer delay when playing media files. -
Advanced Beauty (Beta)
This release introduces a new advanced beauty feature with the following capabilities:
- Precision beauty effects:
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, face slimming, eye enlarging, and nose narrowing) or one-click natural results using presets.
- Style makeup options: Eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancements: Teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
- Unified API: Manages all beauty, makeup, and filter functions through three core nodes (
BEAUTY,STYLE_MAKEUP, andFILTER) usingVideoEffectObjectfor unified parameter configuration and lifecycle control. - Ready-to-use presets: Provides multiple style templates (for example, "Natural Beauty," "Senior Makeup," and "Cool White Filter") for immediate use.
- Dynamic parameter control: Supports real-time reading and modifying of granular parameters (for example, smoothing strength and lipstick type) through key-value pairs, with support for saving custom configurations and resetting defaults.
- Local resource support: All beauty resources, including effects, filters, and makeup assets, are packaged as local bundle files to ensure stability and reliability.
- Precision beauty effects:
-
Other new features
- Adds the
setPlaybackAudioFrameBeforeMixingParametersmethod to set the audio frame format returned in theonPlaybackAudioFrameBeforeMixingcallback, including sample rate, number of channels, and number of data samples per callback. After calling this method, the SDK returns the original pre-mix audio data according to the specified parameters. - Adds the
preloadEffectExmethod to preload sound effect files into specified channels, supporting both local and online files for use in multi-channel scenarios. - Adds the
playEffectExmethod to play sound effect files in specified channels with configurable parameters, including loop count, pitch, spatial position, volume, whether to publish to the channel, and playback start position. - The local screenshot upload feature now supports setting the video observation position for screenshots through the new
positionfield inContentInspectModule, enabling screenshots of original video data or video streams before or after effect processing. - Adds the
screenColorTypeproperty toSegmentationPropertyto improve portrait segmentation accuracy when using a green or blue screen for virtual backgrounds. You can specify the background color as green, blue, or set it to automatic recognition.
- Adds the
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Window exclusion support for secondary displays
Before v4.6.2, configuring window exclusion (
excludeWindowListinScreenCaptureParameters) was not supported in multi-screen scenarios when sharing by screen ID (startScreenCaptureByDisplayId). This release adds support for this configuration.This release also adds
localVideoStreamReasonScreenCaptureExcludeWindowFailedtoLocalVideoStreamReasonto report cases where window exclusion fails during screen sharing. -
Improved trigger timing of
onVideoDeviceStateChangedBefore v4.6.2, the
onVideoDeviceStateChangedcallback could only be triggered after joining a channel. Starting from this release, you can receive this callback once afterIRtcEngineinitialization completes, and continue to receive it after joining a channel. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
onNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Optimizes permission requests on Windows 11 24H2 and later to avoid unnecessary location data acquisition.
- Adds support for G.711 and G.722 audio codecs when interoperating with Web clients, improving cross-platform audio compatibility and clarity.
- Improves video clarity in screen sharing scenarios involving documents.
- Adds error codes
errPcmSendFormat (200)anderrPcmSendBufferOverflow (201)to report PCM data transmission errors.
Issues fixed
This release fixes the following issues:
- After calling
opento open an online sound effect file andplayEffectto start playback, callingseekto set the playback position caused the file to play from the beginning instead of the specified position. - In media volume mode, when a broadcaster published microphone audio while simultaneously playing sound effects with
playEffectand a music file withstartAudioMixing, echo occasionally occurred. - After calling
joinChannelExto join a channel andstartOrUpdateChannelMediaRelayto start cross-channel media relay, rejoining the channel after going offline and leaving occasionally causedonChannelMediaRelayStateChangedto reportstateasrelayStateFailurewithcodeasrelayErrorServerErrorResponse. - On some laptop models with power-saving mode enabled, receivers occasionally heard echo when the sender shared screen and audio.
- In online education scenarios, teachers occasionally observed audio and video out of sync for multiple students in the local view.
- The second call to
enumerateVideoDevicesto retrieve the device list did not take effect. - On Windows 7 devices, when sharing a PowerPoint window running in full-screen auto-play mode with a large number of animations, the remote view occasionally flickered.
v6.5.2
Released on May 6, 2025.
New features
-
16 KB memory page size
Starting from Android 15, the system supports 16 KB memory page sizes. To maintain app stability and performance, the SDK now includes compatibility for both 4 KB and 16 KB memory page sizes. This enhancement ensures reliable operation across a wider range of devices and helps prevent crashes on devices using the newer memory configuration.
Issues fixed
This release includes the following fixes:
- When playing a multi-track media file, noise could be heard after calling the
setAudioPitchmethod to adjust the audio pitch. - If the host called
createCustomAudioTrackwithtrackTypeset toAUDIO_TRACK_DIRECT, pushed custom audio frames usingpushAudioFrame, and then calledplayEffect, audience members heard noise. - Apps occasionally experienced UI lag due to main thread blocking during audio and video interactions.
- On Windows, local screen share preview flickered after calling
startScreenCapturewithenableHighLightset totrueinScreenCaptureParameters, then placing the shared window on the top layer and maximizing it. - On Windows, some windows failed to be excluded from screen capture when calling
startScreenCaptureByDisplayIdwithexcludeWindowListset inScreenCaptureParameters. - On Windows, the app occasionally crashed after disconnecting an external screen used for screen sharing.
- Calling
openWithMediaSourcewithisLiveSourceset totruefailed to play the video stream. - When the sender transmitted multi-channel encoded audio, the receiver occasionally experienced noise.
- When opening two different media resources consecutively using a media player, the second call incorrectly triggered the
onPlayerInfoUpdatedcallback for the first resource. - After enabling volume indication using
enableAudioVolumeIndication, theonAudioVolumeIndicationcallback returned a local user volume of0for both local and remote users. - On 21 ultrawide screens with high resolution (such as 3840×2160), screen sharing was cropped in both local preview and on the receiver’s display. (Windows)
- When using
enableVideoImageSource, the sender occasionally streamed successfully, butonVideoPublishStateChangeddidn’t return the expected state. - In multi-channel scenarios, calling
setupRemoteVideoExbefore successfully callingjoinChannelExoccasionally caused a delay in displaying the first remote video frame. - Playing an MP4 file with EAC3 audio encoding using
startAudioMixingsometimes resulted in no sound. (Android) - Memory leaks occurred after leaving the channel and stopping video rendering. (Android)
- After manually setting the focus position with
setCameraFocusPositionInPreview, the focus was inaccurate when the camera captured a zoomed-in image. (Android) - When using
setExternalMediaProjectionto provide an externalMediaProjectioninstance for screen capture, the resolution didn't adjust dynamically when switching between landscape and portrait mode. (Android) - During audio and video calls, the app occasionally froze. (Android, iOS)
- Calling
setExtensionPropertywith the key set to"makeup_options"failed to apply makeup effects. (Android) - After failing to join a channel, attempting to rejoin without first calling
leaveChanneloccasionally caused a crash. (Android) - When opening a nonexistent local media file, the
onPlayerSourceStateChangedcallback did not reportPLAYER_STATE_FAILEDas expected. (Android) - Enabling virtual background with
enableVirtualBackgroundcaused the image to become larger and blurry when the phone was rotated. (iOS)
v6.5.1
Released on March 13, 2025.
New features
-
AI conversation scenario
This version adds the
audioScenarioAiClientaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions.
Improvements
- Reduces the SDK initialization time on specific device models. (iOS)
Issues fixed
This release fixes the following issues:
- Apps that integrated the Agora SDK and set the
targetSdkVersionto 34 encountered crashes when attempting to enable screen sharing for the first time on an Android 14 system. (Android) - When joining two or more channels simultaneously, and calling the
takeSnapshotExmethod to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
pausemethod to pause playback, then callingseekto move to a specified position, and finally callingplayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
getPlaySrcdid not change after calling theswitchSrcmethod to switch to a new media resource. - When using Bluetooth headphones on specific device models for audio and video interactions, adjusting the phone volume would occasionally change the media volume instead of the Bluetooth volume. (Android)
- During audio and video interactions, the local user occasionally experienced a black screen when watching the video streams of remote users. (Android)
- On specific device models, after calling
setCameraExposureFactorto set the exposure coefficient of the current camera at a specific angle of the device, the video screen occasionally became dark when the device was moved to another angle. (Android) - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption. (Android)
- When pushing video frames in i420 format to the channel, using CVPixelBuffer to handle these frames caused a crash. (iOS)
- Calling
setupLocalVideoto set up two views, then callingenableFaceDetectionto start face detection, no face information can be detected in the subsequently passed views. (iOS) - In a screen sharing scenario, the receiving-end user saw a green line on the shared image. (iOS)
- In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v6.5.0
Released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression.
videoDenoiserLevelStrengthis removed fromVideoDenoiserLevel. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions, you can call thesetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions. -
Changes in camera plug and unplug status (macOS, Windows)
In previous versions, when the camera was unplugged and replugged, the
onVideoDeviceStateChangedcallback would report the device status asmediaDeviceStateActive(1) (device in use). Starting from this version, after the camera is replugged, the device status will change tomediaDeviceStateIdle(0) (device ready). -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
CompressionPreferenceenumeration class, a newpreferCompressionAuto(-1) enumeration is added, replacing the originalpreferQuality(1) as the default value. In this mode, the SDK will automatically choose betweenpreferLowLatencyandpreferQualitybased on your video scene settings to achieve the best user experience. - In the
DegradationPreferenceenumeration class, a newmaintainAuto(-1) enumeration is added, replacing the originalmaintainQuality(1) as the default value. In this mode, the SDK will automatically choose betweenmaintainFramerate,maintainBalanced, andmaintainResolutionbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback Current callback onExtensionEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext
New features
-
Live show scenario
This version adds the
applicationScenarioLiveshow(3) (Live Show) enumeration toVideoApplicationScenarioType. You can callsetVideoScenarioto set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
External MediaProjection (Android)
This version introduces the
setExternalMediaProjectionmethod, which allows you to set an externalMediaProjectionand replace theMediaProjectionapplied by the SDK.If you have the capability to apply for
MediaProjectionon your own, you can use this feature to achieve more flexible screen capture. -
EGL context (Android)
This version introduces the
setExternalRemoteEglContextmethod, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. -
Color space settings
This version adds the colorSpace parameter to
VideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theVoiceAiTunerTypeenum to achieve effects like deep voice, cute voice, husky singing voice, etc. -
1v1 video call scenario
This version adds
applicationScenario1v1(1v1 video call) inVideoApplicationScenarioType. You can callsetVideoScenarioto set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. -
Other features
onLocalVideoStateChangedcallback adds thelocalVideoStreamReasonDeviceDisconnectedenumeration, indicating that the currently used video capture device has been disconnected (for example, unplugged). (Windows)MediaDeviceStateTypeadds themediaDeviceStatePluggedInenumeration, indicating that the device has been plugged in. (Windows)
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshotWithConfigandtakeSnapshotWithConfigExmethods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Adaptive hardware decoding support (Android, Windows)
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Rendering performance enhancement (Windows)
DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
- Optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices. (Windows)
- When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report theplayerEventSwitchErrorevent, indicating an error occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x. - Optimizes transmission strategy: calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - The
localVideoStreamReasonScreenCaptureDisplayDisconnectedenumerator is added inonLocalVideoStateChangedcallback, indicating that the display used for screen capture has been disconnected. (Windows, macOS) - Optimizes the video link for window sharing, reducing CPU usage. (macOS)
- Improves echo cancellation for screen sharing use-cases. (Windows)
- Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
clientRoleChangeFailedRequestTimeOutandclientRoleChangeFailedConnectionFailedinClientRoleChangeFailedReason.
Issues fixed
This version fixes the following issues:
- When calling
startScreenCaptureByWindowIdto share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) - When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
onAudioVolumeIndicationcallback was incorrect. (Android) - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
muteRemoteVideoStream(uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality video stream, which is not as expected. (Android) - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
- When calling
followSystemRecordingDeviceorfollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callbackonLocalAudioStateChangedis not triggered when the audio device is removed, which is not as expected. (Windows) - Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
- No sound when playing online media resources using the media player after the app starts. (iOS)
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
- Calling
startAudioMixingand then immediately callingpauseAudioMixingto pause the music file playback does not take effect. - Occasional crashes during audio and video interaction. (Android)
- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS)
- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS)
- After the sender called
startDirectCdnStreamingto start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS) - Audio playback failed when pushing external audio data using
pushAudioFrameand the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. (Android, iOS)
v6.4.0
v6.4.0 was released on August 29, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onExtensionEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext
New features
-
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod and passing in the sound effect types supported in theVoiceAiTunerTypeenum to achieve effects like deep voice, cute voice, husky singing voice, and so on. -
1v1 video call scenario
This version adds
applicationScenario1v1(1v1 video call) inVideoApplicationScenarioType. You can callsetVideoScenarioto set the video application scenario to 1v1 video call. The SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions.
Improvements
-
Adaptive hardware decoding support (Android, Windows)
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Rendering performance enhancement (Windows)
DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.
-
Facial region beautification
To prevent losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - The
localVideoStreamReasonScreenCaptureDisplayDisconnectedenumerator is added in theonLocalVideoStateChangedcallback, indicating that the display used for screen capture has been disconnected (Windows, macOS). - Optimizes the video link for window sharing, reducing CPU usage (macOS).
- Improves echo cancellation for screen sharing use-cases (Windows).
- Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
clientRoleChangeFailedRequestTimeOutandclientRoleChangeFailedConnectionFailedinClientRoleChangeFailedReason.
- Optimizes the transmission strategy: Calling
Issues fixed
This release fixed the following issues:
- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction (iOS).
- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while (iOS).
- After the sender called
startDirectCdnStreamingto start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end (iOS). - Audio playback failed when pushing external audio data using
pushAudioFrameand the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz (Android, iOS).
v6.3.2
v6.3.2 was released on June 6, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- The remote video froze or became pixelated when the app returned to the foreground after being in the background for a long time (iOS).
- The local preview image rotated by 90° on some iPad devices, which did not meet expectations (iOS).
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app crashed when opening the app and starting screen sharing after the first installation or system reboot (Android).
- Local audio capture failed after joining a channel while answering a system phone call and hanging up, preventing remote users from hearing any sound (Android).
- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end (Android).
- The app occasionally crashed when remote users left the channel.
- The screen occasionally flickered on the receiver's side when sharing a PPT window using startScreenCaptureByWindowId and playing PPT animations (Windows).
- The window border did not retain its original size after exiting the presentation and then maximizing the PPT window when sharing a WPS PPT window on Windows 7 using startScreenCaptureByWindowId and setting
enableHighLightin ScreenCaptureParameters totrue(Windows). - The specified window could not be brought to the foreground if it was covered by other windows when sharing a window using startScreenCaptureByWindowId and setting
windowFocusandenableHighLightin ScreenCaptureParameters totrue(Windows). - Clicking on the desktop widget caused the outlined part to flicker when sharing and highlighting a window on a Windows 7 device (Windows).
- When playing an audio file finished, the SDK sometimes failed to trigger the onAudioMixingStateChanged (
audioMixingStateStopped,audioMixingReasonAllLoopsCompleted) callback that reports that the playing is completed (iOS). - When calling the playEffect method to play sound effect files shorter than 1 second with
loopCountset to0, there was no sound (iOS). - When using the Agora media player to play a video and stopping it during playing, sometimes there was no sound for a short time after the playback was resumed (iOS).
v6.3.1
v6.3.1 was released on May 9, 2024.
New features
-
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.3.1 to the Apple App Store, manually add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Portrait center stage (iOS, macOS)
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the enableCameraCenterStage method to activate portrait center stage. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling portrait center stage, it is recommended to verify whether your current device supports this feature by calling isCameraCenterStageSupported. A list of supported devices can be found in the API documentation.
-
Camera stabilization (iOS)
To improve video stability in mobile filming, low-light environments, and hand-held shooting use-cases, this version introduces a camera stabilization feature. You can activate this feature and select an appropriate stabilization mode by calling setCameraStabilizationMode, achieving more stable and clearer video footage.
-
Wide and ultra-wide cameras (Android, iOS)
To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call queryCameraFocalLengthCapability to check the device's focal length capabilities, and then call setCameraCapturerConfiguration and set
cameraFocalLengthTypeto the supported focal length types, including wide and ultra-wide. -
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
videoSourceCameraThird(11) andvideoSourceCameraFourth(12) in VideoSourceType add support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling startCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackin ChannelMediaOptions add support for Android. Set these parameters totruewhen joining a channel with joinChannel to publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added to CameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling startCameraCapture with the specificcameraId.
-
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedencryptionErrorDatastreamDecryptionFailureandencryptionErrorDatastreamEncryptionFailureenumerations. -
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode, the SDK defaults to the following behaviors:
- The default encoding resolution for the low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the low-quality streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization for game scenario screen sharing (Windows)
This version specifically optimizes screen sharing for game use-cases, enhancing performance, stability, and clarity in ultra-high definition (4K, 60 fps) game use-cases, resulting in a clearer, smoother, and more stable gaming experience for players.
-
Audio device type detection (macOS)
This version adds the
deviceTypeNamein AudioDeviceInfo, used to identify the type of audio devices, such as built-in, USB, HDMI, and so on. -
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure, especially around the fingers, are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
earMonitoringFilterReusePostProcessingFilterinEarMonitoringFilterType. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen-sharing use-cases to save system performance overhead (iOS, macOS, Windows).
- Enhanced performance and stability of the local compositing feature, reducing its CPU usage (Android).
- Improved stability in processing video by the raw video frame observer (iOS).
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AudioEffectPreset, a new enumeration
roomAcousticsChorus(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending side to when the audio is played on the receiving side.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- In screen sharing use-cases, when the app enabled sound card capture with enableLoopbackRecording to capture audio from the shared screen, the transmission of the sound card captured audio failed after a local user manually disabled the local audio capture device, preventing remote users from hearing the shared screen's audio (Windows).
- Hosts using certain models of devices in the speaker mode experienced occasional local audio capture failure when switching the app process to the background and then back to the foreground, preventing remote users from hearing the host's audio (Android).
- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash (Android).
- When sharing an Excel document window, remote users occasionally saw a green screen (Windows).
- In use-cases using camera capture for local video, when the app was moved to the background and disableVideo or
stopPreviewwas called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground (Android). - When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- enableCameraCenterStage (iOS, macOS)
- isCameraCenterStageSupported (iOS, macOS)
- setCameraStabilizationMode (iOS)
- CameraStabilizationMode (iOS)
- registerFaceInfoObserver
- unregisterFaceInfoObserver
- FaceInfoObserver
- onFaceInfo
- MediaSourceType adds
speechDrivenVideoSource - VideoSourceType adds
videoSourceSpeechDriven - EncryptionConfig adds
datastreamEncryptionEnabled - EncryptionErrorType adds the following enumerations:
encryptionErrorDatastreamDecryptionFailureencryptionErrorDatastreamEncryptionFailure
- AudioDeviceInfo adds
deviceTypeName(macOS) - RemoteAudioStats adds
e2eDelay - ErrorCodeType adds
errDatastreamDecryptionFailed - AudioEffectPreset adds
roomAcousticsChorus, enhancing the spatial presence of vocals in chorus use-cases. - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- queryCameraFocalLengthCapability (Android, iOS)
- FocalLengthInfo (Android, iOS)
- CameraFocalLengthType (Android, iOS)
- CameraCapturerConfiguration adds a new member
cameraFocalLengthType(Android, iOS) - CameraCapturerConfiguration adds a new member
cameraId(Android) - EarMonitoringFilterType adds a new enumeration
earMonitoringFilterBuiltInAudioFilters
v6.3.0
v6.3.0 was released on February 28, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name onLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasononRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class LocalAudioStreamErrorlocalAudioStreamReasonLocalVideoStreamErrorLocalVideoStreamReasonDirectCdnStreamingErrorDirectCdnStreamingReasonMediaPlayerErrorMediaPlayerReasonRtmpStreamPublishErrorTypeRtmpStreamPublishReasonNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelay
startOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Audio route
Starting with this release,
routeBluetoothin AudioRoute is renamed torouteHeadsetbluetooth, representing a Bluetooth device using the HFP protocol.routeBluetoothSpeaker(10) is added to represent a Bluetooth device using the A2DP protocol. -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the LocalVideoStreamReason class:
- The value of
localVideoStreamReasonScreenCapturePaused(formerlylocalVideoStreamReasonScreenCapturePaused) has been changed from 23 to 28. - The value of
localVideoStreamReasonScreenCaptureResumed(formerlylocalVideoStreamReasonScreenCaptureResumed) has been changed from 24 to 29. - The
localVideoStreamErrorEncodeFailureenumeration has been changed tolocalVideoStreamReasonCodecNotSupport.
- The value of
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
-
Audio loopback capturing (Windows, macOS)
- Before v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled.
- As of v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording.
New features
-
Custom mixed video layout on receiving end (Android, iOS)
To facilitate customized layout of mixed video stream at the receiver end, this release introduces the onTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate
viewfor rendering the sub-video stream (distinguished bysubviewUid) in the mixed video stream when calling the setupRemoteVideo method, achieving a custom video layout effect.When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time.
Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video use-case, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end.
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call setupLocalVideo to set the first view: Set the
positionparameter topositionPostCapturerOrigin(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call setupLocalVideo to set the second view: Set the
positionparameter topositionPostCapturerinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call setupLocalVideo to set the first view: Set the
-
Query device score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- setPlaybackDeviceVolume (Windows): Sets the volume of the audio playback device.
- setPlaybackDeviceVolume: Sets the volume of the audio capturing device.
- setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the LocalSpatialAudioEngine method.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Other Improvements
This release also includes the following improvements:
- The onLocalVideoStateChanged callback is improved with the inclusion of the
localVideoStreamReasonScreenCaptureAutoFallbackenumeration, signaling unexpected errors during the screen sharing process (potentially due to window blocking failure), resulting in performance degradation without impacting the screen sharing process itself (Windows). - The onPlayerCacheStats callback is added to reports the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The onPlayerPlaybackStats callback is added to reports the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
- This release optimizes the SDK's domain name resolution strategy, improving the stability of calling
setLocalAccessPointto resolve domain names in complex network environments. - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively.
- The onLocalVideoStateChanged callback is improved with the inclusion of the
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the onLocalVideoStats callback is 0, which is not as expected. - When sharing in a specified screen area, the mouse coordinates within the shared area are inaccurate. When the mouse is near the border of the shared area, the mouse may not be visible in the shared screen (Windows).
- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5mm earphones (Windows).
API changes
Added
- onTranscodedStreamLayoutInfo (Android, iOS)
- VideoLayout (Android, iOS)
- The
subviewUidmember in VideoCanvas - enableCustomAudioLocalPlayback
- selectMultiAudioTrack
- onPlayerCacheStats
- onPlayerPlaybackStats
- PlayerPlaybackStats
- The
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats - queryDeviceScore
- MediaSourceType
- The
routeBluetoothSpeakerenumeration in AudioRoute
Modified
routeBluetoothis renamed asrouteHeadsetbluetooth- All
Errorfields in the following enumerations are changed toReason:localAudioStreamErrorOklocalAudioStreamErrorFailurelocalAudioStreamErrorDeviceNoPermissionlocalAudioStreamErrorDeviceBusylocalAudioStreamErrorRecordFailurelocalAudioStreamErrorEncodeFailurelocalAudioStreamErrorRecordInvalidId(Windows)localAudioStreamErrorPlayoutInvalidId(Windows)localVideoStreamErrorOklocalVideoStreamErrorFailurelocalVideoStreamErrorDeviceNoPermissionlocalVideoStreamErrorDeviceBusylocalVideoStreamErrorCaptureFailurelocalVideoStreamErrorCodecNotSupportlocalVideoStreamErrorCaptureInbackground(iOS)localVideoStreamErrorCaptureMultipleForegroundApps(iOS)localVideoStreamErrorDeviceNotFoundlocalVideoStreamErrorDeviceDisconnectedlocalVideoStreamErrorDeviceInvalidIdlocalVideoStreamErrorScreenCaptureWindowMinimizedlocalVideoStreamErrorScreenCaptureWindowClosedlocalVideoStreamErrorScreenCaptureWindowOccludedlocalVideoStreamErrorScreenCaptureNoPermission(Windows)localVideoStreamErrorScreenCapturePaused(Windows)localVideoStreamErrorScreenCaptureResumed(Windows)localVideoStreamErrorScreenCaptureWindowHidden(Windows)localVideoStreamErrorScreenCaptureWindowRecoverFromHidden(Windows)localVideoStreamErrorScreenCaptureWindowRecoverFromMinimized(Windows)localVideoStreamErrorScreenCaptureFailure(Windows)localVideoStreamErrorDeviceSystemPressure(Windows)directCdnStreamingErrorOkdirectCdnStreamingErrorFaileddirectCdnStreamingErrorAudioPublicationdirectCdnStreamingErrorVideoPublicationdirectCdnStreamingErrorNetConnectdirectCdnStreamingErrorBadNameplayerErrorNoneplayerErrorInvalidArgumentsplayerErrorInternalplayerErrorNoResourceplayerErrorInvalidMediaSourceplayerErrorUnknownStreamTypeplayerErrorObjNotInitializedplayerErrorCodecNotSupportedplayerErrorVideoRenderFailedplayerErrorInvalidStateplayerErrorUrlNotFoundplayerErrorInvalidConnectionStateplayerErrorSrcBufferUnderflowplayerErrorInterruptedplayerErrorNotSupportedplayerErrorTokenExpiredplayerErrorUnknownrtmpStreamPublishErrorOkrtmpStreamPublishErrorInvalidArgumentrtmpStreamPublishErrorEncryptedStreamNotAllowedrtmpStreamPublishErrorConnectionTimeoutrtmpStreamPublishErrorInternalServerErrorrtmpStreamPublishErrorRtmpServerErrorrtmpStreamPublishErrorTooOftenrtmpStreamPublishErrorReachLimitrtmpStreamPublishErrorNotAuthorizedrtmpStreamPublishErrorStreamNotFoundrtmpStreamPublishErrorFormatNotSupportedrtmpStreamPublishErrorNotBroadcasterrtmpStreamPublishErrorTranscodingNoMixStreamrtmpStreamPublishErrorNetDownrtmpStreamPublishErrorInvalidPrivilegertmpStreamUnpublishErrorOk
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEvent
v6.2.6
v6.2.6 was released on November 24, 2023.
Issues fixed
This release fixed the following issues:
-
Issues occurring when using Android 14:
- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users needed to confirm recording the screen in the pop-up window.
- When integrating the SDK, setting the Android
targetSdkVersionto 34 could cause screen sharing to be unavailable or even cause the app to crash. - Calling
startScreenCapturewithout sharing video (settingcaptureVideotofalse) and then callingupdateScreenCaptureParametersto share video (settingcaptureVideototrue) resulted in a frozen shared screen on the receiving end. - When screen sharing in landscape mode, the shared screen seen by the audience was divided into two parts: One side of the screen was compressed and the other side was black.
-
When using an iOS 16 or later device with Bluetooth headphones connected before joining the channel, the audio routing after joining the channel was not as expected: Audio was played from the speaker, not the Bluetooth headphones (iOS).
-
In live streaming use-cases, the video on the audience end was occasionally distorted (Android).
-
In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v6.2.4
v6.2.4 was released on October 25, 2023.
Issues fixed
This release fixes the following issue:
The AgoraRtcWrapper version number in CFBundleShortVersionString on iOS and macOS is wrong, which interferes with submitting the App to the App Store.
v6.2.3
v6.2.3 was released on October 20, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
contentInspectImageModerationenumeration is added inContentInspectType, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig. Thus parameter is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
enableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
ID3D11Texture2D Rendering (Windows)
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set
formattoVIDEO_TEXTURE_ID3D11TEXTURE2Dwhen pushing external raw video frames to the SDK by callingpushVideoFrame. By setting thetextureSliceIndexproperty, you can determine the ID3D11Texture2D texture object to use. -
Local video status error code update (Windows, macOS)
In order to help users understand the exact reasons for local video errors in screen sharing use-cases, the following sets of enumerations have been added to the
onLocalVideoStateChangedcallback:localVideoStreamErrorScreenCapturePaused(23): Screen capture has been paused. A common use-case for reporting this error code is that the current screen may have been switched to a secure desktop, such as a UAC dialog box or Winlogon desktop.localVideoStreamErrorScreenCaptureResumed(24): Screen capture has resumed from the paused state.localVideoStreamErrorScreenCaptureWindowHidden(25): The window being captured on the current screen is in a hidden state and is not visible on the current screen.localVideoStreamErrorScreenCaptureWindowRecoverFromHidden(26): The window for screen capture has been restored from the hidden state.localVideoStreamErrorScreenCaptureWindowRecoverFromMinimized(27): The window for screen capture has been restored from the minimized state.
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperforming, the error code-4:errNotSupportedis returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10%. Specific values may vary depending on the device model and platform.
-
Screen sharing scenario optimization
This release optimizes the performance and encoding efficiency in ultra-high-definition (4K, 60 fps) game sharing use-cases, effectively reducing the system resource usage during screen sharing on Windows.
Other Improvements
This release optimizes the logic of Token parsing, in order to prevent an app from crashing when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional crashes and dropped frames in screen sharing use-cases on Windows.
- Occasional crashes when joining a channel on macOS.
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffectmethod to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - When the host called the
startAudioMixingmethod to play music, sometimes the host couldn't hear the music while the remote users could hear it on Android. - Occasional crashes occurred on certain Android devices.
- Calling
takeSnapshotExonce received theonSnapshotTakencallback for multiple times. - In channels joined by calling
joinChannelExexclusively, callingsetEnableSpeakerphonedid not result in switching audio route from the speaker to the headphone on Android.
API changes
Added
- The following enumerations in
onLocalVideoStateChangedon Windows and macOS:localVideoStreamErrorScreenCapturePausedlocalVideoStreamErrorScreenCaptureResumedlocalVideoStreamErrorScreenCaptureWindowHiddenlocalVideoStreamErrorScreenCaptureWindowRecoverFromHiddenlocalVideoStreamErrorScreenCaptureWindowRecoverFromMinimized
textureSliceIndexmembers inExternalVideoFrameon WindowsvideoTextureId3d11texture2dinVideoPixelFormaton WindowsenableContentInspectExcontentInspectImageModerationinContentInspectType.serverConfiginContentInspectConfigisFeatureAvailableOnDeviceFeatureType
v6.2.2
v6.2.2 was released on August 1, 2023.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelandpreloadChannelWithUserAccountmethods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Publishing video streams from different sources (Windows, macOS)
This release adds the following members in
ChannelMediaOptionsto allow you publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
:::
Improvements
-
Improved camera capture effect (Android, iOS)
This release has improved camera capture effect in the following aspects:
-
Support for camera exposure adjustment
This release adds
isCameraExposureSupportedto query whether the device supports exposure adjustment andsetCameraExposureFactorto set the exposure ratio of the camera. -
Optimization of default camera selection (iOS)
Since this release, the default camera selection behavior of the SDK is aligned with that of the iOS system camera. If the device has multiple rear cameras, better shooting perspectives, zooming capabilities, low-light performance, and depth sensing can be achieved during video capture, thereby improving the quality of video capture.
-
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- To improve the switching experience between multiple audio routes, this release adds the
setRouteInCommunicationModemethod. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode (MODE_IN_COMMUNICATION). (Android) - The SDK automacially adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
remoteVideoStateReasonCodecNotSupportenumeration has been added to theonRemoteVideoStateChangedcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Occasionally, noise occurred when the local user listened to their own and remote audio after joining the channel. (macOS)
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically. - In multi-device audio recording use-cases, after repeatedly plugging and unplugging or enabling/disabling the audio recording device, no sound could be heard occasionally when calling the
startRecordingDeviceTestto start an audio capturing device test. (Windows)
API changes
Added
setCameraExposureFactor(Android, iOS)isCameraExposureSupported(Android, iOS)preloadChannelpreloadChannelWithUserAccountupdatePreloadChannelTokensetRouteInCommunicationMode(Android)- The following members in
ChannelMediaOptions:publishThirdCameraTrack(Windows, macOS)publishFourthCameraTrack(Windows, macOS)publishThirdScreenTrack(Windows, macOS)publishFourthScreenTrack(Windows, macOS)
CodecCapLevelsVideoCodecCapabilityLevelbackgroundColorinVideoCanvascodecLevelsinCodecCapInforemoteVideoStateReasonCodecNotSupportinRemoteVideoStateReason
v6.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- After enabling the screen sharing feature on the sending end, there was high delay until the receiving end could see the shared screen. (macOS)
- Occasional crash after calling the
destroyMediaPlayermethod. (iOS) - When the sending end mixed and published two streams of video captured by two cameras locally, the video from the second camera was occasionally missing on the receiving end. (Windows)
- In screen sharing use-cases, some Android devices experienced choppy video on the receiving end. (Android)
v6.2.0
v6.2.0 was released on May 29, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture (Windows, iOS)
This release optimizes the APIs for camera and screen capture function. As of v6.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter:
| Deleted methods | Alternative methods |
|---|---|
startPrimaryCameraCapture (Windows)startSecondaryCameraCapture (Windows, iOS) | startCameraCapture |
stopPrimaryCameraCapture (Windows)stopSecondaryCameraCapture (Windows, iOS) | stopCameraCapture |
startPrimaryScreenCapture (Windows)startSecondaryScreenCapture (Windows) | startScreenCaptureBySourceType (Windows) |
stopPrimaryScreenCapture (Windows)stopSecondaryScreenCapture (Windows) | stopScreenCaptureBySourceType (Windows) |
2. Video data acquisition
-
The
onCaptureVideoFrameandonPreEncodeVideoFramecallbacks are added with a new parameter calledsourceType, which is used to indicate the specific video source type. -
The following callbacks are deleted. Get the video source type through the
sourceTypeparameter in theonPreEncodeVideoFrameandonCaptureVideoFramecallbacks (Windows):onSecondaryPreEncodeCameraVideoFrameonScreenCaptureVideoFrameonPreEncodeScreenVideoFrameonSecondaryPreEncodeScreenVideoFrame
3. Channel media options
publishCustomAudioTrackEnableAecinChannelMediaOptionsis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackinChannelMediaOptionsis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdinChannelMediaOptionsis renamed topublishCustomAudioTrackId.
4. Local video mixing (Windows)
- The
VideoInputStreamsinLocalTranscoderConfigurationis changed tovideoInputStreams. - The
MediaSourceTypeinTranscodingVideoStreamis changed toVideoSourceType.
5. Video encoder algorithm
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
6. Miscellaneous
onApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.- The
IAudioFrameObserverclass is renamed toIAudioPcmFrameSink, thus the prototypes of the following methods are updated accordingly:onFrameregisterAudioFrameObserverandunregisterAudioFrameObserverinMediaPlayer
startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode to balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background feature. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrate is required, ensuring smoothness when multiple streams are subscribed to by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing (macOS, iOS, Android)
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the onLocalVideoTranscoderError callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the onLocalVideoTranscoderError callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Local video mixing (Windows)
This release adds the onLocalVideoTranscoderError callback. When there is an error in starting or updating the local video mixing, the SDK triggers this callback to report the reason for the failure.
6. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
7. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
8. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the onVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel button and then get the indicators in the video frame rendering process through the onVideoRenderingTracingResult callback. This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share (Android, iOS)
This release adds the queryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the setScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Improved compatibility with audio file types (Android)
As of this release, you can use the following methods to open files with a URI starting with content://:
startAudioMixingplayEffectopenWithMediaSource
4. Enhanced rendering compatibility (Windows)
This release enhances the rendering compatibility of the SDK. Issues like black screens caused by rendering failures on certain devices are fixed.
5. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
6. Multi-camera capture and multi-screen capture
This release introduces startScreenCaptureBySourceType (PC only) and startCameraCapture. By calling these methods multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras and screens for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras and displays need to be connected.
7. Channel media relay
This release introduces startOrUpdateChannelMediaRelay and startOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
8. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
9. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode:
- When the video processing mode is
processModeReadOnly, the return value is reserved for future use. - When the video processing mode is
processModeReadWrite, the SDK receives the video frame when the return value istrue. The video frame is discarded when the return value isfalse.
Issues fixed
This release fixed the following issues:
- Occasional crashes occurred on Android devices when users joined or left a channel (Android).
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- Occasional failure when enabling in-ear monitoring (Android).
- Occasional loss of the
onFirstRemoteVideoFramecallback during channel media relay (iOS). - The receiver actively subscribed to the high-quality stream but unexpectedly received a low-quality stream (iOS).
- The receiver was receiving the low-quality stream originally and automatically switched to the high-quality stream after a few seconds (macOS).
- Occasional echo (Android).
- Occasional screen jitter during screen sharing (macOS).
- Abnormal client status caused by an exception in the
onRemoteAudioStateChangedcallback (Android, iOS). - When using Agora Media Player to play RTSP video streams, the video images sometimes appeared pixelated (Windows).
- Playing audio files with a sample rate of 48 kHz failed.
- Crashes occurred after users set the video resolution as 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices (Android).
- If the rendering view of the player was set as a
UIViewController's view, the video was zoomed from the bottom-left corner to the middle of the screen when entering full-screen mode (macOS). - Adding an Alpha channel to an image in the PNG or GIF format failed when the local client mixed video streams (Windows).
- In real-time chorus use-cases, remote users heard noises and echoes when an OPPO R11 device joined the channel in the loudspeaker mode (Android).
- When the playback of the local music finished, the
onAudioMixingFinishedcallback was not properly triggered (Android). - After joining the channel, remotes users saw a watermark even though the watermark was deleted (Windows).
- If a watermark was added after starting screen sharing, the watermark was not displayed on the screen (Windows).
- When joining a channel and accessing an external camera, calling
setDeviceto specify the video capture device as the external camera did not take effect (macOS, Windows). - When using a video frame observer, the first video frame was occasionally missed on the receiver's end (Android).
- When sharing screens in use-cases involving multiple channels, remote users occasionally saw black screens (Android).
- When trying to outline the shared window and put it on top, the shared window did not stay on top of other windows (Windows).
- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted (Android).
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
- At the moment when a user left a channel, a request for leaving was not sent to the server and the leaving behavior was incorrectly determined by the server as timed out.
API changes
Added
startCameraCapturestopCameraCapturestartScreenCaptureBySourceType(Windows, macOS)stopScreenCaptureBySourceType(Windows, macOS)startOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsonLocalVideoTranscoderErrorstartLocalVideoTranscoder(macOS, iOS, Android)updateLocalTranscoderConfiguration(macOS, iOS, Android)queryScreenCaptureCapability(iOS, Android)setScreenCaptureScenario(iOS, Android)setAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAudioAinsModeAudioTrackTypeVideoApplicationScenarioTypeScreenCaptureFramerateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inRtcEngineContext - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
backgroundNoneandbackgroundVideoenumerators inbackgroundSourceType
Deprecated
startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEventenableInstantMediaRenderingstartMediaRenderingTracingstartMediaRenderingTracingExonVideoRenderingTracingResultMediaTraceEventVideoRenderingTracingInfo
Deleted
startPrimaryScreenCapture(Windows)startSecondaryScreenCapture(Windows)stopPrimaryScreenCapture(Windows)stopSecondaryScreenCapture(Window)startPrimaryCameraCapture(Windows)startSecondaryCameraCapture(Windows, iOS)stopPrimaryCameraCapture(Windows)stopSecondaryCameraCapture(Windows, iOS)onSecondaryPreEncodeCameraVideoFrame(Windows)onScreenCaptureVideoFrame(Windows)onPreEncodeScreenVideoFrame(Windows)onSecondaryPreEncodeScreenVideoFrame(Windows)onApiCallExecutedpublishCustomAudioTrackEnableAecinChannelMediaOptionsenableRemoteSuperResolutionsuperResolutionTypeinRemoteVideoStats
v6.1.0
v6.1.0 was released on December 20, 2022.
Compatibility changes
This release deletes the sourceType parameter in enableDualStreamMode, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK; you no longer need to specify the video source type.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call enableInEarMonitoring to enable the in-ear monitoring function.
After successfully enabling the in-ear monitoring function, you can call registerAudioFrameObserver to register the audio observer, and the SDK triggers the onEarMonitoringAudioFrame callback to report the audio frame data. You can use your own audio effect processing module to preprocess the audio frame data of the in-ear monitoring to implement custom audio effects. Agora recommends that you call the setEarMonitoringAudioFrameParameters method to set the audio data format of in-ear monitoring. The SDK calculates the sampling interval based on the parameters in this method and triggers the onEarMonitoringAudioFrame callback based on the sampling interval.
To adjust the in-ear monitoring volume, you can call setInEarMonitoringVolume.
2. Audio capture device test (Android)
This release adds support for testing local audio capture devices before joining a channel. You can call startRecordingDeviceTest to start the audio capture device test. After the test is complete, call the stopPlaybackDeviceTest method to stop the audio capture device test.
3. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use. The available values are UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, and 5G. When the local network connection type changes, the SDK triggers the onNetworkTypeChanged callback to report the current network connection type.
4. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports the three audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; contact support@agora.io to adjust this number according to your use-case.
Agora also supports publishers in choosing whether the audio streams being published are to be filtered based on volume. Streams that are not filtered bypass this filter mechanism and are transported directly to the receivers. In scenarios with a 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.
5. Dual-stream mode
This release optimizes the dual-stream mode. You can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing to a low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams). Follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamTypeorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify this default behavior, you can call setDualStreamMode and set the mode parameter to disableSimulcastStream (never send low-quality video streams) or enableSimulcastStream (always send low-quality video streams).
6. Loopback device (Windows)
The SDK uses the playback device as the loopback device by default. As of 6.1.0, you can specify a loopback device separately and publish the captured audio to the remote end.
setLoopbackDevice: Specifies the loopback device. If you do not want the current playback device to be the loopback device, you can call this method to specify another device as the loopback device.getLoopbackDevice: Gets the current loopback device.followSystemLoopbackDevice: Whether the loopback device follows the default playback device of the system.
7. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense-of-presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user by callingsetPlayerAttenuationandsetRemoteAudioAttenuationrespectively, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enableDopplerparameter inSpatialAudioParams. The receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the audio experience for users with headphones.
8. Multiple cameras for video capture (iOS)
This release supports multi-camera video capture. You can call enableMultiCamera to enable multi-camera capture mode, call startSecondaryCameraCapture to start capturing video from the second camera, and then publish the captured video to the second channel.
To stop using multi-camera capture, you need to call stopSecondaryCameraCapture to stop the second camera capture, then call enableMultiCamera and set enabled to false.
9. Headphone equalization effect
This release adds the setHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling setHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
10. Encoded video frame observer
This release adds the setRemoteVideoSubscriptionOptions and setRemoteVideoSubscriptionOptionsEx methods. When you call the registerVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
11. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
12. Register extensions (Windows)
This release adds the registerExtension method for registering extensions. When using a third-party extension, you need to call the extension-related APIs in the following order:
loadExtensionProvider -> registerExtension -> setExtensionProviderProperty -> enableExtension
13. Device management (Windows, macOS)
This release adds a series of callbacks to help you better understand the status of your audio and video devices:
onVideoDeviceStateChanged: Occurs when the status of the video device changes.onAudioDeviceStateChanged: Occurs when the status of the audio device changes.onAudioDeviceVolumeChanged: Occurs when the volume of an audio device or app changes.
14. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
15. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - The
optionsparameter in theleaveChannelExmethod, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
16. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
CompressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.EncodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
17. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the onClientRoleChanged callback. The value of this parameter is as follows:
audienceLatencyLevelLowLatency (1): Low latency.audienceLatencyLevelUltraLowLatency (2): Ultra-low latency.
18. Brand-new AI Noise Suppression
The SDK supports a new version of Noise Suppression (versus the basic AI Noise Suppression in agora_rtc_engine: ^5.x). Compared to the previous Noise Suppression, the new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and add the Dereverberation capability. To enable this feature, contact support@agora.io.
Improvements
1. Video information change callback
This release optimizes the trigger logic of onVideoSizeChanged, which can also be triggered and report the local video size change when startPreview is called separately.
2. First video frame rendering (Windows)
This release speeds up the first video frame rendering time to improve the video experience.
3. Screen sharing
In addition to the usability enhancements detailed in the fixed issued section, this release includes a number of functional improvements to screen sharing, as follows:
Windows
- New
minimizeWindowmember inScreenCaptureSourceInfoto indicate whether the target window is minimized. - New
enableHighLight,highLightColor, andhighLightWidthmembers inScreenCaptureParametersso that you can place a border around the target window or screen when screen sharing. - Compatibility with a greater number of mainstream apps, including WPS Office, Microsoft Office PowerPoint, Visual Studio Code, Adobe Photoshop, Windows Media Player, and Scratch.
- Compatibility with additional devices and operating systems, including: Window 8 systems, devices without discrete graphics cards, and dual graphics devices.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a device with an Intel Core i7-9750H CPU @ 2.60 GHz or better.
macOS
- Compatibility with additional devices and use-cases, including: dual graphics devices and screen sharing using external screens.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a 2021 16" M1 Macbook Pro or better.
4. Bluetooth permissions (Android)
To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the BLUETOOTH_CONNECT permission.
5. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v6.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
relayEventPacketUpdateDestChannelRefused (8), and you need to call theupdateChannelMediaRelaymethod again. - v6.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
6. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
7. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
audioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Reduces the CPU usage and power consumption of the local device when the host calls the
muteLocalVideoStreammethod. (Windows, macOS) - Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios.
Issues fixed
This release fixes the following issues:
All
- When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - When using the Agora media player to play videos, after you played and paused the video, and then called the
seekmethod to specify a new position for playback, the video image occasionally remained unchanged; if you called theresumemethod to resume playback, the video was sometimes played at a speed faster than the original one. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
- The call
getExtensionPropertyfailed and returned an empty string. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
Android
- In online meeting use-cases, the local user and the remote user occasionally could not hear each other after the local user was interrupted by a call.
- After calling
setCloudProxyto set the cloud proxy, callingjoinChannelExto join multiple channels failed.
iOS
- Calling
startAudioMixingto play music files in the ipod-library://item path failed. - Different timestamps for audio and video data were obtained simultaneously and separately via
onRecordAudioFrameandonCaptureVideoFramecallbacks.
Windows
- When
stopPreviewwas called to disable the local video preview, the virtual background that had been set up was occasionally invalidated. - Crashes occasionally occurred when exiting a channel and joining it multiple times with virtual background enabled and set to blur effect.
- If the local client used a camera with a resolution set to 1920 × 1080 as the video capture source, the resolution of the remote video was occasionally inconsistent with the local client.
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. - In screen sharing use-cases, when the user minimized and then restored the shared window, the remote video occasionally switched to the low-quality stream.
- When the host started screen sharing during live streaming, the audience members sometimes heard echoes.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, a black screen appeared when sharing a screen between a landscape monitor and a portrait monitor.
- In screen sharing use-cases with a window excluded, the application crashed when the specified shared area exceeded the screen resolution.
- The application failed to exclude a window using the
startScreenCaptureByDisplayIdmethod for screen sharing. - In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
onNetworkQualitycallback was inaccurate for the user who was sharing a screen. - In screen sharing use-cases, when the user shared the screen by window, the mouse in the shared screen was not in its actual position.
- When switching from a non-screen sharing use-case to a screen sharing one, the application occasionally crashed if the user did not switch the resolution accordingly.
macOS
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set insetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting. - In screen sharing use-cases on Mac devices, when the user minimized or closed a shared application window, another window of the same application was automatically shared.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, the shared window of a split screen was not highlighted correctly.
- In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
onNetworkQualitycallback was inaccurate for the user who was sharing a screen. - After starting and stopping the audio capture device test, there was no sound when the audio playback device was subsequently started.
- The
onVideoPublishStateChangedcallback reported an inaccurate video source type.
API changes
Added
getNativeHandlegetPlaybackDefaultDevicegetRecordingDefaultDeviceenableDualStreamModeExsetDualStreamModesetDualStreamModeExSimulcastStreamModegetNetworkTypesetLoopbackDevice(Windows)getLoopbackDevice(Windows)followSystemLoopbackDevice(Windows)setZonessetPlayerAttenuationsetRemoteAudioAttenuationsetHeadphoneEQPresetsetHeadphoneEQParametersHeadphoneEqualizerPresetenableMultiCamera(iOS)setRemoteVideoSubscriptionOptionssetRemoteVideoSubscriptionOptionsExVideoSubscriptionOptionsAdvanceOptionsEncodingPreferenceCompressionPreferenceadjustUserPlaybackSignalVolumeExonRhythmPlayerStateChanged(Android, iOS)RhythmPlayerStateTypeRhythmPlayerErrorTypeenableAudioVolumeIndicationExonVideoDeviceStateChanged(Windows, macOS)onAudioDeviceStateChanged(Windows, macOS)onAudioDeviceVolumeChanged(Windows, macOS)registerExtension(Windows)muteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayEx
Modified
- Adds
isAudioFilterableinChannelMediaOptions - Adds
enableDopplerinSpatialAudioParams - Adds
minimizeWindowinScreenCaptureSourceInfo - Adds
followEncodeDimensionRatioinCameraCapturerConfiguration - Adds
optionsinleaveChannelEx - Adds
advanceOptionsinVideoEncoderConfiguration - Adds
newRoleOptionsinonClientRoleChanged - Adds
setupMode,mediaPlayerId, andcropAreainVideoCanvas - Adds
hwEncoderAcceleratinginLocalVideoStats - Removes
sourceTypeinenableDualStreamMode enableInEarMonitoring: Supports Windows and macOSsetEarMonitoringAudioFrameParameters: Supports Windows and macOSsetInEarMonitoringVolume: Supports Windows and macOSonEarMonitoringAudioFrame: Supports Windows and macOSScreenCaptureParameters: Supports Windows
Deprecated
onApiCallExecuted: Use the callbacks triggered by specific methods instead.relayEventPacketUpdateDestChannelRefused(8) inChannelMediaRelayEvent
v6.0.0
v6.0.0 was released on September 29, 2022. This release is compatible with Video Calling 4.x.
Compatibility changes
This release changed SDK package name from agora_rtc_ng to agora_rtc_engine, and optimized the implementation of some features, resulting in incompatibility with v5.x. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Custom video capture and renderer (Media IO)
- Error codes and warning codes
After upgrading the SDK, you need to update the code in your app according to the business use-cases. See Migration guide for details.
New features
1. Multiple media tracks
This release supports one RtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting RtcEngineEx and ChannelMediaOptions.
- After calling
joinChannelto join the first channel, calljoinChannelExmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andChannelMediaOptionssettings. - You can simultaneously publish multiple sets of video streams captured by multiple cameras or screen sharing by setting
publishSecondaryCameraTrackandpublishSecondaryScreenTrackinChannelMediaOptions. (Windows)
This release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call the
createCustomVideoTrackmethod to create a video track, and get the video track ID. - Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Ultra HD resolution (Beta) (Windows, macOS)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling setVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
This feature has certain requirements with regards to device performance and network bandwidth, and the supported upstream and downstream frame rates vary on different platforms. To enable this feature, contact support@agora.io.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Full HD and Ultra HD resolution (Beta) (Android, iOS)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the dimensions parameter to 1920 × 1080 or higher when calling the setVideoEncoderConfiguration method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to enable this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
4. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayer method to create a media player object, you can then call the methods in the MediaPlayer class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
- Plays local and online media files.
- Preloads media files.
- Changes the CDN route for playing media files according your network conditions.
- Shares the audio and video streams being played with remote users.
- Caches data when playing media files.
To make audios sound clearer and stay true to the original sound of audio files, this release adds the ultraHighQualityVoice enumeration. In use-cases that involve human voices, such as chatting or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Spatial audio
NOTE: This feature is in experimental status. To enable this feature, contact support@agora.io. Contact Technical Support if needed.
You can set the spatial audio for the remote user as following:
-
Local Cartesian Coordinate System Calculation Solution: This solution uses the
LocalSpatialAudioEngineclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users respectively, so that the local user can hear the spatial audio of the remote user. -
Local Cartesian Coordinate System Calculation Solution: This solution uses the
LocalSpatialAudioEngineclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
6. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the audioScenarioChorus enumeration in AudioScenarioType. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
7. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling joinChannel or joinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
8. Screen sharing
This release optimizes the screen sharing function. You can enable this function through the following ways.
On Windows and macOS:
- Call the
startScreenCaptureByDisplayIdmethod before joining a channel, and then calljoinChannel[2/2] to join a channel and setpublishScreenTrackorpublishSecondaryScreenTrackastrue. - Call the
startScreenCaptureByDisplayIdmethod after joining a channel, and then callupdateChannelMediaOptionsto setpublishScreenTrackorpublishSecondaryScreenTrackastrue.
On Android and iOS:
- Call the
startScreenCapturemethod before joining a channel, and then calljoinChannel[2/2] to join a channel and setpublishScreenCaptureVideoastrue. - Call the
startScreenCapturemethod after joining a channel, and then callupdateChannelMediaOptionsto setpublishScreenCaptureVideoas true.
9. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add the user ID that you want to subscribe to in your allowlist, or in your blocklist if you do not want to subscribe to. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the RtcEngineEx interface.
setSubscribeAudioBlacklist: Set the audio subscription blocklist.setSubscribeAudioWhitelist: Set the audio subscription allowlist.setSubscribeVideoBlacklist: Set the video subscription blocklist.setSubscribeVideoWhitelist: Set the video subscription allowlist.
If a user is added in a blocklist and allowlist at the same time, only the blocklist takes effect.
10. Set audio scenarios
To make it easier to change audio scenarios, this release adds the setAudioScenario method. For example, if you want to change the audio scenario from AudioScenarioDefault to AudioScenarioGameStreaming when you are in a channel, you can call this method.
11. Replace video feeds with images
This release supports replacing video feeds with images when publishing video streams. You can call the enableVideoImageSource method to enable this function and choose your own images through the options parameter. If you disable this function, the remote users see the video feeds that you publish.
12. Local video transcoder
This release introduces local video transcoder with which you can locally merge multiple video streams into one. Common use-cases are as follows:
When streaming or using media push, you can merge the frames of multiple anchors into one locally.
To do this, you should merge multi-channel video streams collected locally (such as video captured by camera, screen sharing stream, video files and pictures) into one video stream. Then, release the merged stream in the channel.
You can call the startLocalVideoTranscoder method to enable the local video transcoder and call the stopLocalVideoTranscoder method to stop the local video transcoder; After the local video transcoder is enabled, you can call updateLocalTranscoderConfiguration to update the configuration of the local video transcoder.
13. Video device management
A video capture device may support a variety of video formats, each of which supports a different combination of video frame width, video frame height, and frame rate.
This release introduces the numberOfCapabilities and getCapability method to obtain the number of video formats supported by video capture devices and the details of video frames under specified video formats. When you call the startPrimaryCameraCapture or startSecondaryCameraCapture method to capture video using camera, you can obtain the video with the specified video format.
The SDK will automatically select the video format for video capture equipment according to your settings in VideoEncoderConfiguration. In general, you don't need to use this set of new methods.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as switchChannel in agora_rtc_engine: ^5.x through the leaveChannel and joinChannel methods so that you don't need to take the time to call the switchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushVideoFrame method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of onAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
5. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on March 14, 2026.
Compatibility changes
This release introduces the following compatibility changes:
-
Deprecation of Direct CDN streaming APIs
The following APIs related to Direct CDN streaming are deprecated in this release and will be removed in a future version. Use Media Push instead.
setDirectCdnStreamingAudioConfigurationsetDirectCdnStreamingVideoConfigurationstartDirectCdnStreamingstopDirectCdnStreamingDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDirectCdnStreamingStateDirectCdnStreamingReason
-
Deprecation of virtual metronome APIs
The following APIs related to the virtual metronome feature are deprecated in this release and will be removed in a future version.
startRhythmPlayerconfigRhythmPlayeronRhythmPlayerStateChanged
-
Deprecation of watermark APIs
The following watermark APIs are deprecated in this release. Use the new watermark APIs introduced in this release instead.
addVideoWatermarkaddVideoWatermarkEx
-
Removal of redundant APIs
The following APIs and parameters are removed in this release:
setLocalPublishFallbackOptiononLocalPublishFallbackToAudioOnlyonDownlinkNetworkInfoUpdatedonWlAccStatsenableWirelessAccelerate
-
Changes to makeup feature implementation
Due to the beauty effect refactoring in this release, calling
setExtensionPropertyto enable the makeup feature is no longer supported starting from v4.6.2. Use theSTYLE_MAKEUPnode instead. -
Behavior changes in dual-stream mode
Before v4.6.2, when the sender enabled adaptive low-stream mode (
AutoSimulcastStream), the low stream was not sent proactively. The sender only started sending the low stream after receiving a request from a host-role receiver callingsetRemoteVideoStreamType. Starting from v4.6.2, when the sender enables adaptive low-stream mode, the SDK automatically decides whether to send or stop sending the low stream based on the downlink network quality of subscribing users. If you setmodeto another sending mode or explicitly configure the width, height, bitrate, or frame rate of the low stream, this adaptive behavior is disabled. -
New domains required for domain whitelist
If you upgrade from a previous version and use the domain whitelist feature (
domainLimitinRtcEngineConfigset totrue), add the following domains to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
-
Removal of
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieveuidinformation directly from theonEncodedVideoFrameReceivedcallback. Update your integration logic accordingly.
New features
Included in this release:
-
Multi-resolution video streams
This release introduces the Adaptive Bitrate Video Streaming (ABR) feature, which supports sending multiple video streams at different resolutions from the same video source simultaneously, including in multi-channel scenarios. Receivers can automatically or manually subscribe to streams at their preferred resolution.
After enabling ABR, you can configure up to four video stream layers (one main stream at the highest resolution and up to three lower-resolution streams), and set options such as resolution, bitrate, and layered streaming fallback. When layered streaming fallback is enabled, the SDK automatically switches to lower-resolution streams under poor network conditions to maintain a smooth viewing experience. This feature is suited for meetings, large classes, interactive live streaming, and other multi-device or multi-network environments.
-
Multi-path network transmission
This release introduces multi-path transmission for devices that support multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication in challenging environments such as vehicles, IoT devices, trains, and highways.
Enable multi-path transmission by setting
enableMultipathtotrueinChannelMediaOptions. Two transmission modes are supported throughMultipathMode:- Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
preferMultipathType. - Full redundancy mode: Transmits data simultaneously on all available network paths. Suited for scenarios that are not traffic-sensitive but require extreme reliability, such as outdoor broadcasting and parallel control. This mode incurs additional costs. Contact technical support to enable it.
Uplink and downlink paths can also be configured separately using
uplinkMultipathModeanddownlinkMultipathModeinChannelMediaOptions. Once enabled, the SDK reports real-time transmission statistics for each path through theonMultipathStatscallback, including per-path traffic consumption. - Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
-
Video quality scoring
This release adds the
mosValuefield toRemoteVideoStats, reporting the quality score of the received remote video stream as evaluated by the Agora real-time video MOS (Mean Opinion Score) system. Scores range from 1 to 5, where 5 indicates excellent video quality and 1 indicates extremely poor quality. Use this field to monitor subjective video quality in real time, adjust video parameters dynamically, or integrate into quality monitoring and alerting workflows. Contact technical support to enable this feature. -
Support for adding multiple watermarks
This release deprecates
addVideoWatermarkandaddVideoWatermarkEx, and introducesaddVideoWatermarkWithConfigandaddVideoWatermarkWithConfigEx, which support adding multiple watermarks to a video using watermark IDs and controlling their display order. To remove a specific watermark, callremoveVideoWatermark. -
Token renewal result callback
This release introduces the
onRenewTokenResultcallback and theRenewTokenErrorCodeerror code enum. After callingrenewTokento update the token, the SDK reports the result throughonRenewTokenResultand returns detailed error codes defined inRenewTokenErrorCode, allowing you to handle token renewal failure scenarios accordingly. -
App-level screen sharing support on Android
Starting from Android 14, the system allows users to choose between sharing the full screen or a single app during screen sharing, enhancing privacy and multitasking. This release adds support for sharing a single app in addition to full-screen sharing. The new
onLocalVideoEventcallback reports local video events, especially those related to screen sharing. -
New permission granted callback on Android
The
onPermissionGrantedcallback helps confirm permission status in screen sharing scenarios. You can use this callback to determine whether the user granted Camera or Screen permission. -
Picture-in-Picture
This release introduces the Picture-in-Picture (PiP) feature, which supports displaying video call windows in PiP mode so users can continue watching video calls when switching apps or returning to the home screen.
This feature supports automatically entering PiP mode and provides rich configuration options. On Android, you can configure parameters such as the aspect ratio, initial position, and seamless resizing of the PiP window. On iOS, you can configure the video stream layout (flow layout, with video streams arranged left to right and top to bottom), PiP window size, and system control button styles. The feature also supports listening to PiP state changes through
AgoraPipStateChangedObserverto handle scenarios such as entering, exiting, or failure. This feature is suited for video calls, online education, live streaming, and other scenarios that require multitasking. -
Media Player support for getting audio buffer delay
To address synchronization issues between the main vocal and background accompaniment in karaoke scenarios, this release adds the
getAudioBufferDelaymethod to the Media Player module. This method returns the millisecond-level audio buffer delay when playing media files. -
Advanced Beauty (Beta)
This release introduces a new advanced beauty feature with the following capabilities:
- Precision beauty effects:
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, face slimming, eye enlarging, and nose narrowing) or one-click natural results using presets.
- Style makeup options: Eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancements: Teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
- Unified API: Manages all beauty, makeup, and filter functions through three core nodes (
BEAUTY,STYLE_MAKEUP, andFILTER) usingIVideoEffectObjectfor unified parameter configuration and lifecycle control. - Ready-to-use presets: Provides multiple style templates (for example, "Natural Beauty," "Senior Makeup," and "Cool White Filter") for immediate use.
- Dynamic parameter control: Supports real-time reading and modifying of granular parameters (for example, smoothing strength and lipstick type) through key-value pairs, with support for saving custom configurations and resetting defaults.
- Local resource support: All beauty resources, including effects, filters, and makeup assets, are packaged as local bundle files to ensure stability and reliability.
- Precision beauty effects:
-
Other new features
- Adds the
setPlaybackAudioFrameBeforeMixingParametersmethod to set the audio frame format returned in theonPlaybackAudioFrameBeforeMixingcallback, including sample rate, number of channels, and number of data samples per callback. After calling this method, the SDK returns the original pre-mix audio data according to the specified parameters. - Adds the
preloadEffectExmethod to preload sound effect files into specified channels, supporting both local and online files for use in multi-channel scenarios. - Adds the
playEffectExmethod to play sound effect files in specified channels with configurable parameters, including loop count, pitch, spatial position, volume, whether to publish to the channel, and playback start position. - The local screenshot upload feature now supports setting the video observation position for screenshots through the new
positionfield inContentInspectModule, enabling screenshots of original video data or video streams before or after effect processing. - Adds the
screenColorTypeproperty toSegmentationPropertyto improve portrait segmentation accuracy when using a green or blue screen for virtual backgrounds. You can specify the background color as green, blue, or set it to automatic recognition.
- Adds the
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
preloadEffectfollowed byplayEffect, the SDK does not close the file after playback completes or whenstopEffectis called. When you callplayEffectagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Window exclusion support for secondary displays
Before v4.6.2, configuring window exclusion (
excludeWindowListinScreenCaptureParameters) was not supported in multi-screen scenarios when sharing by screen ID (startScreenCaptureByDisplayId). This release adds support for this configuration.This release also adds
LocalVideoStreamReasonScreenCaptureExcludeWindowFailedtoLocalVideoStreamReasonto report cases where window exclusion fails during screen sharing. -
Improved trigger timing of
onVideoDeviceStateChangedBefore v4.6.2, the
onVideoDeviceStateChangedcallback could only be triggered after joining a channel. Starting from this release, you can receive this callback once afterIRtcEngineinitialization completes, and continue to receive it after joining a channel. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
onNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
onPlaybackAudioFrame. When callingsetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
onEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theonEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Optimizes permission requests on Windows 11 24H2 and later to avoid unnecessary location data acquisition.
- Adds support for G.711 and G.722 audio codecs when interoperating with Web clients, improving cross-platform audio compatibility and clarity.
- Improves video clarity in screen sharing scenarios involving documents.
- Adds error codes
ERR_PCMSEND_FORMAT (200)andERR_PCMSEND_BUFFEROVERFLOW (201)to report PCM data transmission errors.
Issues fixed
This release fixes the following issues:
- When playing multi-track songs with guide vocal enabled, noise occurred after calling
setAudioPitchto adjust the pitch. - When a broadcaster created a custom audio capture track using
createCustomAudioTrackwithtrackTypeset toAudioTrackDirect, pushed self-captured audio usingpushAudioFrame, and then played sound effects usingplayEffect, the audience in the channel heard noise in the broadcaster's audio. - Apps integrated with the SDK occasionally experienced UI freezing due to main thread blocking during audio and video engagements.
- When screen sharing was enabled with
enableHighLightset totrueinScreenCaptureParameters, placing the shared window on top and maximizing it caused the local preview to flicker. - Apps sharing external screen video streams occasionally crashed after the external screen was disconnected.
- When calling
openWithMediaSourcewithisLiveSourceset totrueto play a pure video stream, playback failed. - Receivers occasionally heard noise when the sender transmitted multi-channel encoded audio.
- When calling
opentwice to open different media resources, theonPlayerInfoUpdatedcallback returned information about the first resource when opening the second, which was incorrect. - When calling
enableAudioVolumeIndicationto enable volume indication for local streaming users and remote users, the local user volume returned byonAudioVolumeIndicationwas 0. - When using a 21 ultrawide display and setting a high resolution such as 3840×2160 for screen sharing, the shared image was cropped in both local preview and on the receiver side.
- When calling
enableVideoImageSourceto enable placeholder streaming, the sender occasionally succeeded in publishing butonVideoPublishStateChangedreported the publish state as something other thanPublishStatePublished, which was incorrect. - In multi-channel scenarios, when calling
setupRemoteVideoExto initialize remote user views before successfully joining withjoinChannelEx, the first frame of remote user views occasionally had a large display delay. - After calling
opento open an online sound effect file andplayEffectto start playback, callingseekto set the playback position caused the file to play from the beginning instead of the specified position. - In media volume mode, when a broadcaster published microphone audio while simultaneously playing sound effects with
playEffectand a music file withstartAudioMixing, echo occasionally occurred. - After calling
joinChannelExto join a channel andstartOrUpdateChannelMediaRelayto start cross-channel media relay, rejoining the channel after going offline and leaving occasionally causedonChannelMediaRelayStateChangedto reportstateasRelayStateFailurewithcodeasRelayErrorServerErrorResponse. - On some laptop models with power-saving mode enabled, receivers occasionally heard echo when the sender shared screen and audio.
- In online education scenarios, teachers occasionally observed audio and video out of sync for multiple students in the local view.
- The second call to
enumerateVideoDevicesto retrieve the device list did not take effect. - On Windows 7 devices, when sharing a PowerPoint window running in full-screen auto-play mode with a large number of animations, the remote view occasionally flickered.
v4.5.2
v4.5.2 was released on March 13, 2025.
v4.5.2 for React Native is comparable to native version v.4.5.1.
New features
-
AI conversation scenario
This version adds the
AudioScenarioAiClientaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions.
Improvements
- Reduces the SDK initialization time on specific device models. (iOS)
Issues fixed
This release fixes the following issues:
- Apps that integrated the Agora SDK and set the
targetSdkVersionto 34 encountered crashes when attempting to enable screen sharing for the first time on an Android 14 system. (Android) - When joining two or more channels simultaneously, and calling the
takeSnapshotExmethod to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
pausemethod to pause playback, then callingseekto move to a specified position, and finally callingplayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
getPlaySrcdid not change after calling theswitchSrcmethod to switch to a new media resource. - When using Bluetooth headphones on specific device models for audio and video interactions, adjusting the phone volume would occasionally change the media volume instead of the Bluetooth volume. (Android)
- During audio and video interactions, the local user occasionally experienced a black screen when watching the video streams of remote users. (Android)
- On specific device models, after calling
setCameraExposureFactorto set the exposure coefficient of the current camera at a specific angle of the device, the video screen occasionally became dark when the device was moved to another angle. (Android) - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption. (Android)
- When pushing video frames in i420 format to the channel, using CVPixelBuffer to handle these frames caused a crash. (iOS)
- When two views are created before calling
enableFaceDetectionto start face detection, no face information can be detected in the subsequently passed views. (iOS) - In a screen sharing scenario, the receiving-end user saw a green line on the shared image. (iOS)
- In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v4.5.0
v4.5.0 was released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression.
VideoDenoiserLevelStrengthis removed fromVideoDenoiserLevel. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions, you can call thesetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions. -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
CompressionPreferenceenumeration class, a newPreferCompressionAuto(-1) enumeration is added, replacing the originalPreferQuality(1) as the default value. In this mode, the SDK will automatically choose betweenPreferLowLatencyandPreferQualitybased on your video scene settings to achieve the best user experience. - In the
DegradationPreferenceenumeration class, a newMaintainAuto(-1) enumeration is added, replacing the originalMaintainQuality(1) as the default value. In this mode, the SDK will automatically choose betweenMaintainFramerate,MaintainBalanced, andMaintainResolutionbased on your video scene settings to achieve the optimal overall quality experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
ApplicationScenarioLiveshow(3) (Live Show) enumeration toVideoApplicationScenarioType. You can callsetVideoScenarioto set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to callenableInstantMediaRendering) to achieve better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
External MediaProjection (Android)
This version introduces the
setExternalMediaProjectionmethod, which allows you to set an externalMediaProjectionand replace theMediaProjectionapplied by the SDK.If you have the capability to apply for
MediaProjectionon your own, you can use this feature to achieve more flexible screen capture. -
EGL context (Android)
This version introduces the
setExternalRemoteEglContextmethod, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. -
Color space settings
This version adds the colorSpace parameter to
VideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshotWithConfigandtakeSnapshotWithConfigExmethods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency.
- Optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - After calling
enableLocalAudioto disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS) - When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report thePlayerEventSwitchErrorevent, indicating an error occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
Issues fixed
This version fixes the following issues:
- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations.
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
onAudioVolumeIndicationcallback was incorrect. (Android) - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
muteRemoteVideoStream(uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality video stream. (Android) - Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
- No sound when playing online media resources using the media player after the app starts. (iOS)
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
- Calling
startAudioMixingand then immediately callingpauseAudioMixingto pause the music file playback does not take effect. - Occasional crashes during audio and video interaction. (Android)
v4.4.0
v4.4.0 was released on August 29, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onExtensionEventonExtensionEventWithContextonExtensionStartedonExtensionStartedWithContextonExtensionStoppedonExtensionStoppedWithContextonExtensionErroronExtensionErrorWithContext -
This version renames the following members in
ExternalVideoFrame:d3d11_texture_2dis renamed tod3d11Texture2d.texture_slice_indexis renamed totextureSliceIndex.metadata_bufferis renamed tometadataBuffer.metadata_sizeis renamed tometadataSize.
New features
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature. It supports the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
VideoFrameandExternalVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.ExternalVideoFrameadds thefillAlphaBuffermember, which sets whether to automatically extract the Alpha channel data and fill it intoalphaBufferfor BGRA or RGBA formatted video data.VideoFrameandExternalVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AdvanceOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callsetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatotrue. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod. Pass in the sound effect types supported in theVoiceAiTunerTypeenum to achieve the effects such as a deep voice, cute voice, husky singing voice, and so on. -
1v1 video call scenario
This version adds
ApplicationScenario1v1(1v1 video call) inVideoApplicationScenarioType. You can callsetVideoScenarioto set the video application scenario to 1v1 video call. The SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions.
Improvements
-
Adaptive hardware decoding support (Android)
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
enableInstantMediaRenderingno longer impacts the security of the transmission link. - Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
ClientRoleChangeFailedRequestTimeOutandClientRoleChangeFailedConnectionFailedinClientRoleChangeFailedReason.
- Optimizes the transmission strategy: Calling
Issues fixed
This release fixed the following issues:
- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction (iOS).
- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while (iOS).
- After the sender called
startDirectCdnStreamingto start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end (iOS). - Audio playback failed when pushing external audio data using
pushAudioFrameand the sample rate was not set to a recommended value, such as 22050 Hz and 11025 Hz.
v4.3.2
v4.3.2 was released on June 6, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- The remote video froze or became pixelated when the app returned to the foreground after being in the background for a long time (iOS).
- The local preview image rotated by 90° on some iPad devices, which did not meet expectations (iOS).
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app crashed when opening the app and starting screen sharing after the first installation or system reboot (Android).
- Local audio capture failed after joining a channel while answering a system phone call and hanging up, preventing remote users from hearing any sound (Android).
- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end (Android).
- The app occasionally crashed when remote users left the channel.
- When playing an audio file finished, the SDK sometimes failed to trigger the onAudioMixingStateChanged (
AudioMixingStateStopped,AudioMixingReasonAllLoopsCompleted) callback that reports that the playing is completed (iOS). - When calling the playEffect method to play sound effect files shorter than 1 second with
loopCountset to0, there was no sound (iOS). - When using the Agora media player to play a video and stopping it during playing, sometimes there was no sound for a short time after the playing was resumed (iOS).
v4.3.1
v4.3.1 was released on May 9, 2024.
New features
-
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.3.1 to the Apple App Store, manually add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Portrait center stage (iOS)
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the enableCameraCenterStage method to activate portrait center stage. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling portrait center stage, it is recommended to verify whether your current device supports this feature by calling isCameraCenterStageSupported. A list of supported devices can be found in the API documentation.
-
Camera stabilization (iOS)
To improve video stability in mobile filming, low-light environments, and hand-held shooting use-cases, this version introduces a camera stabilization feature. You can activate this feature and select an appropriate stabilization mode by calling setCameraStabilizationMode, achieving more stable and clearer video footage.
-
Wide and ultra-wide cameras (Android, iOS)
To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call queryCameraFocalLengthCapability to check the device's focal length capabilities, and then call setCameraCapturerConfiguration and set
cameraFocalLengthTypeto the supported focal length types, including wide and ultra-wide. -
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
VideoSourceCameraThird(11) andVideoSourceCameraFourth(12) in VideoSourceType add support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling startCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackin ChannelMediaOptions add support for Android. Set these parameters totruewhen joining a channel with joinChannel to publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added to CameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling startCameraCapture with the specificcameraId.
-
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with enableEncryption. If there are issues causing failure in data stream encryption or decryption, these can be identified by the newly addedEncryptionErrorDatastreamDecryptionFailureandEncryptionErrorDatastreamEncryptionFailureenumerations. -
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using setDualStreamMode, the SDK defaults to the following behaviors:
- The default encoding resolution for the low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the low-quality streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method enableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method setAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method getCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
EarMonitoringFilterReusePostProcessingFilterinEarMonitoringFilterType. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen-sharing use-cases to save system performance overhead (iOS).
- Enhanced performance and stability of the local compositing feature, reducing its CPU usage (Android).
- Enhanced media player capabilities to handle WebM format videos, including support for rendering Alpha channels.
- In AudioEffectPreset, a new enumeration
RoomAcousticsChorus(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending side to when the audio is played on the receiving side.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- Hosts using certain models of devices in the speaker mode experienced occasional local audio capture failures when switching the app process to the background and then back to the foreground, preventing remote users from hearing the host's audio (Android).
- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash (Android).
- In use-cases using camera capture for local video, when the app was moved to the background and disableVideo or was called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground (Android).
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- enableCameraCenterStage (iOS)
- isCameraCenterStageSupported (iOS)
- setCameraStabilizationMode (iOS)
- CameraStabilizationMode (iOS)
- registerFaceInfoObserver
- unregisterFaceInfoObserver
- IFaceInfoObserver
- onFaceInfo
- The
publishLipSyncTrackmember in ChannelMediaOptions - MediaSourceType adds
SpeechDrivenVideoSource - VideoSourceType adds
VideoSourceSpeechDriven - EncryptionConfig adds
datastreamEncryptionEnabled - EncryptionErrorType adds the following enumerations:
EncryptionErrorDatastreamDecryptionFailureEncryptionErrorDatastreamEncryptionFailure
- RemoteAudioStats adds
e2eDelay - ErrorCodeType adds
ErrDatastreamDecryptionFailed - AudioEffectPreset adds
RoomAcousticsChorus, enhancing the spatial presence of vocals in chorus use-cases. - getCallIdEx
- enableEncryptionEx
- setAudioMixingPlaybackSpeed
- queryCameraFocalLengthCapability (Android, iOS)
- FocalLengthInfo (Android, iOS)
- CameraFocalLengthType (Android, iOS)
- CameraCapturerConfiguration adds a new member
cameraFocalLengthType(Android, iOS) - CameraCapturerConfiguration adds a new member
cameraId(Android) - EarMonitoringFilterType adds a new enumeration
EarMonitoringFilterBuiltInAudioFilters
v4.3.0-build.1
v4.3.0-build.1 was released on March 19, 2024.
Issues fixed
This release fixed the following issue:
Directly calling engine.release to destroy the engine without prior call of engine.unregisterEventHandler to remove all callback events could lead to App crashes (Android).
v4.3.0
v4.3.0 was released on February 28, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name onLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasononDirectCdnStreamingStateChangederrorreasononRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class LocalAudioStreamErrorLocalAudioStreamReasonLocalVideoStreamErrorLocalVideoStreamReasonDirectCdnStreamingErrorDirectCdnStreamingReasonMediaPlayerErrorMediaPlayerReasonRtmpStreamPublishErrorTypeRtmpStreamPublishReasonNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelay,updateChannelMediaRelaystartOrUpdateChannelMediaRelaystartChannelMediaRelayEx,updateChannelMediaRelayExstartOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Audio route
Starting with this release,
RouteBluetoothin AudioRoute is renamed toRouteBluetoothDeviceHFP, representing a Bluetooth device using the HFP protocol.RouteBluetoothDeviceA2DP(10) is added to represent a Bluetooth device using the A2DP protocol. -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the LocalVideoStreamReason class:
- The value of
LocalVideoStreamReasonScreenCapturePaused(formerlyLocalVideoStreamReasonScreenCapturePaused) has been changed from 23 to 28. - The value of
LocalVideoStreamReasonScreenCaptureResumed(formerlyLocalVideoStreamReasonScreenCaptureResumed) has been changed from 24 to 29. - The
LocalVideoStreamReasonCodecNotSupportenumeration has been changed toLocalVideoStreamReasonCodecNotSupport.
- The value of
New features
-
Custom mixed video layout on receiving end
To facilitate customized layout of mixed video stream at the receiver end, this release introduces the onTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate
viewfor rendering the sub-video stream (distinguished bysubviewUid) in the mixed video stream when calling the method, achieving a custom video layout effect.When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time.
Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video use-case, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end.
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Create the first view: Set the
positionparameter toPositionPostCapturerOrigin(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Create the second view: Set the
positionparameter toPositionPostCapturerinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Create the first view: Set the
-
Query device score
This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features.
- enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the setZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method.
- This release optimizes the design of the setZones method, supporting the ability to set the
-
Other Improvements
This release also includes the following improvements:
- This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
Issues fixed
This release fixed the following issue:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the onLocalVideoStats callback is 0, which is not as expected.
API changes
Added
- onTranscodedStreamLayoutInfo
- VideoLayout
- The
subviewUidmember in VideoCanvas - enableCustomAudioLocalPlayback
- queryDeviceScore
- The
CustomVideoSourceenumeration in MediaSourceType - The
RouteBluetoothDeviceA2DPenumeration in AudioRoute - LocalAudioStats: Adds the
earMonitorDelayandaecEstimatedDelay - selectMultiAudioTrack
- onPlayerCacheStats
- onPlayerPlaybackStats
- PlayerPlaybackStats
Modified
routeBluetoothis renamed asRouteBluetoothDeviceHFP- All
ERRORfields in the following enumerations are changed toREASON:LocalAudioStreamErrorOkLocalAudioStreamErrorFailureLocalAudioStreamErrorDeviceNoPermissionLocalAudioStreamErrorDeviceBusyLocalAudioStreamErrorRecordFailureLocalAudioStreamErrorEncodeFailureLocalVideoStreamErrorOkLocalVideoStreamErrorFailureLocalVideoStreamErrorDeviceNoPermissionLocalVideoStreamErrorDeviceBusyLocalVideoStreamErrorCaptureFailureLocalVideoStreamErrorCodecNotSupportLocalVideoStreamErrorCaptureInbackground(iOS)LocalVideoStreamErrorCaptureMultipleForegroundApps(iOS)LocalVideoStreamErrorDeviceNotFoundLocalVideoStreamErrorDeviceDisconnectedLocalVideoStreamErrorDeviceInvalidIdDirectCdnStreamingErrorOkDirectCdnStreamingErrorFailedDirectCdnStreamingErrorAudioPublicationDirectCdnStreamingErrorVideoPublicationDirectCdnStreamingErrorNetConnectDirectCdnStreamingErrorBadNamePlayerErrorNonePlayerErrorInvalidArgumentsPlayerErrorInternalPlayerErrorNoResourcePlayerErrorInvalidMediaSourcePlayerErrorUnknownStreamTypePlayerErrorObjNotInitializedPlayerErrorCodecNotSupportedPlayerErrorVideoRenderFailedPlayerErrorInvalidStatePlayerErrorUrlNotFoundPlayerErrorInvalidConnectionStatePlayerErrorSrcBufferUnderflowPlayerErrorInterruptedPlayerErrorNotSupportedPlayerErrorTokenExpiredPlayerErrorUnknownRtmpStreamPublishErrorOkRtmpStreamPublishErrorInvalidArgumentRtmpStreamPublishErrorEncryptedStreamNotAllowedRtmpStreamPublishErrorConnectionTimeoutRtmpStreamPublishErrorInternalServerErrorRtmpStreamPublishErrorRtmpServerErrorRtmpStreamPublishErrorTooOftenRtmpStreamPublishErrorReachLimitRtmpStreamPublishErrorNotAuthorizedRtmpStreamPublishErrorStreamNotFoundRtmpStreamPublishErrorFormatNotSupportedRtmpStreamPublishErrorNotBroadcasterRtmpStreamPublishErrorTranscodingNoMixStreamRtmpStreamPublishErrorNetDownRtmpStreamPublishErrorInvalidPrivilegeRtmpStreamUnpublishErrorOk
Deleted
startChannelMediaRelayupdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEvent
v4.2.6
v4.2.6 was released on November 24, 2023.
Issues fixed
This release fixed the following issues:
-
Issues occurring when using Android 14:
- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users needed to confirm recording the screen in the pop-up window.
- When integrating the SDK, setting the Android
targetSdkVersionto 34 could cause screen sharing to be unavailable or even cause the app to crash. - Calling
startScreenCapturewithout sharing video (settingcaptureVideotofalse) and then callingupdateScreenCaptureParametersto share video (settingcaptureVideototrue) resulted in a frozen shared screen on the receiving end. - When screen sharing in the landscape mode, the shared screen seen by the audience was divided into two parts: One side of the screen was compressed, the other side was black.
-
When using an iOS 16 or later device with Bluetooth headphones connected before joining the channel, the audio routing after joining the channel was not as expected: Audio was played from the speaker, not the Bluetooth headphones (iOS).
-
In live streaming use-cases, the video on the audience end was occasionally distorted (Android).
-
In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.5
v4.2.5 was released on October 31, 2023.
Issues fixed
This release fixed an incorrect path in the types field in package.json, which caused the error Could not find a declaration file for module 'react-native-agora' when integrating the SDK into a TypeScript project.
v4.2.4
v4.2.4 was released on October 25, 2023.
Issues fixed
This release fixes the following issue:
The AgoraRtcWrapper version number in CFBundleShortVersionString on iOS is wrong, which interferes with submitting the App to the App Store.
v4.2.3
v4.2.3 was released on October 20, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version adds an optional parameter
serverConfiginContentInspectConfig. This parameter is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
This version also introduces the enableContentInspectEx method, which supports taking screenshots for multiple video streams and uploading them.
-
Check device support for advanced features
This version adds the
isFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
enableVirtualBackgroundandsetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperforming, the error code-4: ErrNotSupportedis returned, indicating the device does not support the feature. -
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user ID. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can prevent repeated application of tokens every time users join a new channel, which reduces the pressure on your token server.
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelandpreloadChannelWithUserAccountmethods, which allow a user whose role is set as 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 and see the host.When preloading more than one channel, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you join a new channel, thus saving the time for switching between channels.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display.
Improvements
-
Improved camera capture effect
This release has improved camera capture effect in the following aspects:
-
Support for camera exposure adjustment
This release adds
isCameraExposureSupportedto query whether the device supports exposure adjustment andsetCameraExposureFactorto set the exposure ratio of the camera. -
Optimization of default camera selection on iOS
Since this release, the default camera selection behavior of the SDK is aligned with that of the iOS system camera. If the device has multiple rear cameras, better shooting perspectives, zooming capabilities, low-light performance, and depth sensing can be achieved during video capture, thereby improving the quality of video capture.
-
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
This version reduces the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10%. Specific values may vary depending on the device model and platform.
-
Screen sharing use-case optimization
This release also optimizes the video encoding configuration in screen sharing use-cases. When users customize the
widthandheightproperties of the video, the SDK rounds down the actual encoding resolution while maintaining the aspect ratio of the video and the screen, ensuring that the final encoding resolution does not exceed the user-defined encoding resolution, thereby improving the accuracy of billing for screen sharing streams. -
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapInfo. After successfully callingqueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
Other Improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
setPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code-2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crashing when an invalid token is passed in.
- To improve the switching experience between multiple audio routes on Android, this release adds the
setRouteInCommunicationModemethod. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode (MODE_IN_COMMUNICATION). - The SDK automatically adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature prevents exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
remoteVideoStateReasonCodecNotSupportenumeration has been added to theonRemoteVideoStateChangedcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
playEffectmethod to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - Calling
takeSnapshotExonce received theonSnapshotTakencallback for multiple times. - When the host called the
startAudioMixingmethod to play music on Android, sometimes the host couldn't hear the music while the remote users could. - Occasional crashes on certain Android devices.
- In channels joined by calling
joinChannelExexclusively on Android, callingsetEnableSpeakerphonedid not result in switching the audio route from the speaker to the headphone. - Occasionally, noise occurred when the local user listened to their own and remote audio after joining the channel on macOS.
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
setBeautyEffectOptions,setLowlightEnhanceOptions,setVideoDenoiserOptions, andsetColorEnhanceOptionscould not load extensions automatically.
API changes
Added
enableContentInspectExcontentInspectImageModerationinContentInspectTypeserverConfiginContentInspectConfigisFeatureAvailableOnDeviceFeatureTypesetCameraExposureFactorisCameraExposureSupportedpreloadChannelpreloadChannelWithUserAccountupdatePreloadChannelTokensetRouteInCommunicationMode(Android)CodecCapLevelsVideoCodecCapabilityLevelbackgroundColorinVideoCanvascodecLevelsinCodecCapInforemoteVideoStateReasonCodecNotSupportinRemoteVideoStateReason
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
setAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- Occasional crash after calling the
destroyMediaPlayermethod. (iOS) - In screen sharing use-cases, some Android devices experienced choppy video on the receiving end. (Android)
v4.2.0
v4.2.0 was released on May 29, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter:
| Deleted Methods | Alternative Methods |
|---|---|
startSecondaryCameraCapture | startCameraCapture |
stopSecondaryCameraCapture | stopCameraCapture |
2. Video data acquisition
The onCaptureVideoFrame and onPreEncodeVideoFrame callbacks are added with a new parameter called sourceType, which is used to indicate the specific video source type.
3. Channel media options
publishCustomAudioTrackEnableAecis deleted. UsepublishCustomAudioTrackinstead.publishTrancodedVideoTrackis renamed topublishTranscodedVideoTrack.publishCustomAudioSourceIdis renamed topublishCustomAudioTrackId.
4. Upgrade the default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
Call the setVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
5. Miscellaneous
onApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks.- The
IAudioFrameObserverclass is renamed toIAudioPcmFrameSink, thus the prototype of theonFramemethod is updated accordingly. startChannelMediaRelay,updateChannelMediaRelay,startChannelMediaRelayEx, andupdateChannelMediaRelayExare deprecated. UsestartOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode to balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background feature. You can now set custom backgrounds of various types by calling the enableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces setVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including:
- Automatically activate multiple anti-weak network technologies to enhance the capability and performance of low-quality video streams in meeting use-cases where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
This release adds the local video mixing feature. You can use the startLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the updateLocalTranscoderConfiguration method and the onLocalVideoTranscoderError callback. After enabling local video mixing, you can use the updateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the onLocalVideoTranscoderError callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces getNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
6. Instant frame rendering
This release adds the enableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
7. Video rendering tracing
This release adds the startMediaRenderingTracing and startMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the onVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks Join Channel button and then get the indicators in the video frame rendering process through the onVideoRenderingTracingResult callback. This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Voice changer
This release introduces the setLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the setLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share
This release adds the queryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the setScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Improved compatibility with audio file types (Android)
As of v4.2.0, you can use the following methods to open files with a URI starting with content:// :
startAudioMixingplayEffect,openWithMediaSource.
4. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces getCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
5. Multi-camera capture
This release introduces startCameraCapture. By calling this method multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras need to be connected.
6. Channel media relay
This release introduces startOrUpdateChannleMediaRelay and startOrUpdateChannleMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
7. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds createCustomAudioTrack and destroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
8. Video frame observer
As of this release, the SDK optimizes the onRenderVideoFrame callback, and the meaning of the return value is different depending on the video processing mode.
When the video processing mode is ProcessModeReadOnly, the return value is reserved for future use.
When the video processing mode is ProcessModeReadWrite, the SDK receives the video frame when the return value is true. The video frame is discarded when the return value is false.
9. Super resolution
To optimize the usability of super resolution, this release removes enableRemoteSuperResolution. Super resolution no longer needs to be enabled manually. The SDK now automatically optimizes the resolution of the remote video based on the performance of the user's device.
Issues fixed
This release fixed the following issues:
- Occasional crashes occurred on Android devices when users joined or left a channel (Android).
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- Occasional failure when enabling in-ear monitoring (Android).
- Occasional loss of the
firstRemoteVideoFrameOfUidcallback during channel media relay (iOS). - The receiver actively subscribed to the high-quality stream but unexpectedly received a low-quality stream (iOS).
- Occasional echo (Android).
- Abnormal client status caused by an exception in the
onRemoteAudioStateChangedcallback. - Playing audio files with a sample rate of 48 kHz failed.
- Crashes occurred after users set the video resolution to 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices (Android).
- In real-time chorus use-cases, remote users heard noises and echoes when an OPPO R11 device joined the channel in the loudspeaker mode (Android).
- When the playback of the local music finished, the
onAudioMixingFinishedcallback was not properly triggered (Android). - When using a video frame observer, the first video frame was occasionally missed on the receiver's end (Android).
- When sharing screens in use-cases involving multiple channels, remote users occasionally saw black screens (Android).
- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted (Android).
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
startCameraCapturestopCameraCapturestartOrUpdateChannelMediaRelaystartOrUpdateChannelMediaRelayExgetNtpWallTimeInMssetVideoScenariogetCurrentMonotonicTimeInMsonLocalVideoTranscoderErrorstartLocalVideoTranscoderupdateLocalTranscoderConfigurationqueryScreenCaptureCapabilitysetScreenCaptureScenariosetAINSModecreateAudioCustomTrackdestroyAudioCustomTrackAudioTrackConfigAudioAinsModeAudioTrackTypeVideoApplicationScenarioTypeScreenCaptureFramerateCapability- The
domainLimitandautoRegisterAgoraExtensionsmembers inRtcEngineContext - The
sourceTypeparameter inonCaptureVideoFrameandonPreEncodeVideoFramecallbacks - The
BackgourndNoneandBackgroundVideoenumerators inBackgroundSourceType
Deprecated
startChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayupdateChannelMediaRelayExonChannelMediaRelayEventChannelMediaRelayEvent
Deleted
onApiCallExecutedpublishCustomAudioTrackEnableAecinChannelMediaOptions
v4.1.0
v4.1.0 was released on December 20, 2022.
Compatibility changes
This release deletes the sourceType parameter in enableDualStreamMode, because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK; you no longer need to specify the video source type.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call enableInEarMonitoring to enable the in-ear monitoring function.
To adjust the in-ear monitoring volume, you can call setInEarMonitoringVolume.
2. Audio capture device test (Android)
This release adds support for testing local audio capture devices before joining a channel. You can call startRecordingDeviceTest to start the audio capture device test. After the test is complete, call the stopPlaybackDeviceTest method to stop the audio capture device test.
3. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the getNetworkType method. You can use this method to get the type of network connection in use. The available values are UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, and 5G. When the local network connection type changes, the SDK triggers the onNetworkTypeChanged callback to report the current network connection type.
4. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports the three audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; contact support@agora.io to adjust this number according to your use-case.
Agora also supports publishers in choosing whether the audio streams being published are to be 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 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.
5. Dual-stream mode
This release optimizes the dual-stream mode. You can call enableDualStreamMode and enableDualStreamModeEx before and after joining a channel.
The implementation of subscribing to a low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams). Follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
setRemoteVideoStreamTypeorsetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify this default behavior, you can call setDualStreamMode and set the mode parameter to disableSimulcastStream (never send low-quality video streams) or enableSimulcastStream (always send low-quality video streams).
6. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense-of-presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
setZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user by callingsetPlayerAttenuationandsetRemoteAudioAttenuationrespectively, and specify whether to use that setting to force an override of the sound attenuation parameter insetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams. The receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
setHeadphoneEQPresetmethod to improve the audio experience for users with headphones. If you cannot achieve the expected headphone EQ effect after callingsetHeadphoneEQPreset, you can callsetHeadphoneEQParametersto adjust the EQ.
7. Multiple cameras for video capture (iOS)
This release supports multi-camera video capture. You can call enableMultiCamera to enable multi-camera capture mode, call startSecondaryCameraCapture to start capturing video from the second camera, and then publish the captured video to the second channel.
To stop using multi-camera capture, you need to call stopSecondaryCameraCapture to stop the second camera capture, then call enableMultiCamera and set enabled to false.
8. Encoded video frame observer
This release adds the setRemoteVideoSubscriptionOptions and setRemoteVideoSubscriptionOptionsEx methods. When you call the registerVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see the API reference.
9. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
10. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in setVideoEncoderConfiguration when capturing video with the camera.
11. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
muteLocalAudioStreamExandmuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
muteAllRemoteAudioStreamsExandmuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
startRtmpStreamWithoutTranscodingEx,startRtmpStreamWithTranscodingEx,updateRtmpTranscodingEx, andstopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
startChannelMediaRelayEx,updateChannelMediaRelayEx,pauseAllChannelMediaRelayEx,resumeAllChannelMediaRelayEx, andstopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - The
optionsparameter in theleaveChannelExmethod, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
12. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
CompressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.EncodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
13. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the onClientRoleChanged callback. The value of this parameter is as follows:
AudienceLatencyLevelLowLatency (1): Low latency.AudienceLatencyLevelUltraLowLatency (2): Ultra-low latency.
14. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v4.0.0). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option.
To experience this feature, contact support@agora.io.
Improvements
1. Video information change callback
This release optimizes the trigger logic of onVideoSizeChanged, which can also be triggered and report the local video size change when startPreview is called separately.
2. Bluetooth permissions (Android)
To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the BLUETOOTH_CONNECT permission.
3. Relaying media streams across channels
This release optimizes the updateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
RelayEventPacketUpdateDestChannelRefused (8), and you need to call theupdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
4. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
5. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
audioScenarioMeetingscenario. - Improves the smoothness of SDK video rendering.
- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network use-cases.
Issues fixed
This release fixed the following issues:
All
- When calling
setVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - When using the Agora media player to play videos, after you played and paused the video, and then called the
seekmethod to specify a new position for playback, the video image occasionally remained unchanged; if you called theresumemethod to resume playback, the video was sometimes played at a speed faster than the original one. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
- The call
getExtensionPropertyfailed and returned an empty string. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
Android
- In online meeting use-cases, the local user and the remote user occasionally could not hear each other after the local user was interrupted by a call.
- After calling
setCloudProxyto set the cloud proxy, callingjoinChannelExto join multiple channels failed.
iOS
- Calling
startAudioMixingto play music files in the ipod-library://item path failed. - Different timestamps for audio and video data were obtained simultaneously and separately via
onRecordAudioFrameandonCaptureVideoFramecallbacks.
API changes
Added
getNativeHandlegetMusicContentCentergetPlaybackDefaultDevicegetRecordingDefaultDeviceenableDualStreamModeExsetDualStreamModesetDualStreamModeExSimulcastStreamModegetNetworkTypesetZonessetPlayerAttenuationsetRemoteAudioAttenuationsetHeadphoneEQPresetsetHeadphoneEQParametersHeadphoneEqualizerPresetenableMultiCamera(iOS)setRemoteVideoSubscriptionOptionssetRemoteVideoSubscriptionOptionsExVideoSubscriptionOptionsAdvancedOptionsEncodingPreferenceCompressionPreferenceadjustUserPlaybackSignalVolumeExonRhythmPlayerStateChangedRhythmPlayerStateTypeRhythmPlayerErrorTypeenableAudioVolumeIndicationExmuteLocalAudioStreamExmuteLocalVideoStreamExmuteAllRemoteAudioStreamsExmuteAllRemoteVideoStreamsExstartRtmpStreamWithoutTranscodingExstartRtmpStreamWithTranscodingExupdateRtmpTranscodingExstopRtmpStreamExstartChannelMediaRelayExupdateChannelMediaRelayExpauseAllChannelMediaRelayExresumeAllChannelMediaRelayExstopChannelMediaRelayEx
Modified
- Adds
isAudioFilterableinChannelMediaOptions - Adds
enable_dopplerinSpatialAudioParams - Adds
minimizeWindowinScreenCaptureSourceInfo - Adds
followEncodeDimensionRatioinCameraCapturerConfiguration - Adds
optionsinleaveChannelEx - Adds
advanceOptionsinVideoEncoderConfiguration - Adds
newRoleOptionsinonClientRoleChanged - Adds
setupMode,mediaPlayerId, andcropAreainVideoCanvas - Adds
hwEncoderAcceleratinginLocalVideoStats - Removes
sourceTypeinenableDualStreamMode
Deprecated
onApiCallExecuted: Use the callbacks triggered by specific methods instead.RelayEventPacketUpdateDestChannelRefused (8)inChannelMediaRelayEvent
v4.0.0
v4.0.0 was released on September 29, 2022.
Compatibility changes
Integration change
This release has changed the SDK package name from react-native-agora-rtc-ng to react-native-agora, and optimized the implementation of some features, resulting in incompatibility with v4.0.0. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migration guide.
New features
1. Multiple media tracks
This release supports one IRtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting RtcEngineEx and ChannelMediaOptions.
- After calling
joinChannelto join the first channel, calljoinChannelExmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andChannelMediaOptionssettings. - You can simultaneously publish multiple sets of video streams captured by multiple cameras or screen sharing by setting
publishSecondaryCameraTrackandpublishSecondaryScreenTrackinChannelMediaOptions.
This release adds createCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call this method to create a video track, and get the video track ID.
- Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
pushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Full HD and Ultra HD resolution (Beta)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling SetVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to enable this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. After calling the createMediaPlayer method to create a media player object, you can then call the methods in the IMediaPlayer class to experience a series of functions, such as playing local and online media files, preloading a media file, changing the CDN route for playing according to your network conditions, or sharing the audio and video streams being played with remote users.
- Plays local and online media files.
- Preloads media files.
- Changes the CDN route for playing media files according your network conditions.
- Shares the audio and video streams being played with remote users.
- Caches data when playing media files.
4. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the UltraHighQualityVoice enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call setVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
5. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AudioScenarioChorus enumeration in AudioScenarioType. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
6. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling joinChannel or joinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call updateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
7. Screen sharing
This release optimizes the screen sharing function. You can enable this function in the following ways.
- Call the
StartScreenCaptureByDisplayIdmethod before joining a channel, and then callJoinChannel[2/2] to join a channel and setpublishScreenTrackorpublishSecondaryScreenTrackas true. - Call the
StartScreenCaptureByDisplayIdmethod after joining a channel, and then callUpdateChannelMediaOptionsto setpublishScreenTrackorpublishSecondaryScreenTrackas true.
8. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add a user ID that you want to subscribe to in your allowlist, or add a user ID for the streams you do not wish to see to your blocklists. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the IRtcEngineEx interface:
SetSubscribeAudioBlocklist:Set the audio subscription blocklist.SetSubscribeAudioAllowlist:Set the audio subscription allowlist.SetSubscribeVideoBlocklist:Set the video subscription blocklist.SetSubscribeVideoAllowlist:Set the video subscription allowlist.
If a user is added in a blocklist and a allowlist at the same time, only the blocklist takes effect.
9. Set audio scenarios
To make it easier to change audio scenarios, this release adds the SetAudioScenario method. For example, if you want to change the audio scenario from AudioScenarioDefault to AudioScenarioGameStreaming when you are in a channel, you can call this method.
10. Replace video feeds with images
This release supports replacing video feeds with images when publishing video streams. You can call the enableVideoImageSource method to enable this function and choose your own images through the options parameter. If you disable this function, the remote users see the video feeds that you publish.
11. Spatial audio
NOTE: This feature is in experimental status. To enable this feature, contact support@agora.io.
You can set the spatial audio for the remote user as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callupdateSelfPositionandupdateRemotePositionto update the spatial coordinates of the local and remote users, respectively, so that the local user can hear the spatial audio effect of the remote user.
You can also set the spatial audio for the media player as following:
- Local Cartesian Coordinate System Calculation: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio. You need to callupdateSelfPositionandupdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as SwitchChannel in v4.0.0 through the LeaveChannel and JoinChannel methods so that you don't need to take the time to call the SwitchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the pushVideoFrame[1/2] method to push such video frames to the SDK.
3. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of onAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
4. Video preview
This release improves the implementation logic of startPreview. You can call the startPreview method to enable video preview at any time.
5. Video types of subscription
You can call the setRemoteDefaultVideoStreamType method to choose the video stream type when subscribing to streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
v2.5.1
Released on December 18, 2025.
This release includes the following changes:
- Updates the built-in Web SDK to v4.24.1. For details on the changes between Web SDK v4.24.0 to v4.24.1, see the Web SDK release notes.
v2.5.0
Released on September 1, 2025.
This release includes the following changes:
- Updates the built-in Web SDK to v4.24.0. For details on the changes between Web SDK v4.23.2 to v4.24.0, see the Web SDK release notes.
v2.4.0
Released on March 19, 2025.
This release includes the following changes:
- Internal optimizations to support Agora Conversational AI Engine.
- Updates the built-in Web SDK to v4.23.2. For details on the changes between Web SDK v4.22.0 to v4.23.2, see the Web SDK release notes.
- Fixes an issue where network state changes could unexpectedly create new tracks.
v2.3.0
Released on August 21, 2024.
This version updates the built-in Web SDK to v4.22.0. For more details on the changes between Web SDK v4.21.0 and 4.22 .0, see the Web SDK release notes.
v2.2.0
Released on June 13, 2024.
This version updates the built-in Web SDK to v4.21.0. For more details on the changes between Web SDK v4.20.0 and 4.21.0, see the Web SDK release notes.
v2.1.0
Released on January 5, 2024.
This version updates the built-in SDK for Web in the SDK for React JS to version 4.20.0. Check the related changes in the Web SDK release notes.
v2.0.0
Released on December 22, 2023.
Compatibility changes
SDK structural optimization
The SDK for ReactJS is developed based on the SDK for Web v4.x. To further enhance usability, this version incorporates all Web SDK APIs into the ReactJS SDK, eliminating the need to integrate the Web SDK separately.
Upon upgrading to this version, make the following modifications:
-
Reintegrate the React SDK. Taking npm as an example:
# Remove existing dependencies npm uninstall agora-rtc-react agora-rtc-sdk-ng # Reinstall dependencies npm install agora-rtc-react -
Adjust the import of the
AgoraRTCinterface from the Web SDK. Taking the combined import ofAgoraRTCandAgoraRTCProvideras an example:// Before this version import AgoraRTC from "agora-rtc-sdk-ng"; import { AgoraRTCProvider } from "agora-rtc-react"; // As of this version import AgoraRTC, { AgoraRTCProvider } from "agora-rtc-react"
NetworkQuality renaming
To avoid redundancy with the Web SDK's API, this version makes the following changes to the ReactJS SDK's NetworkQuality interface:
- Rename
NetworkQualitytoNetworkQualityExand haveNetworkQualityExinherit theNetworkQualityinterface from the Web SDK. - Rename the
uplinkanddownlinkproperties touplinkNetworkQualityanddownlinkNetworkQuality, respectively.
If you use the NetworkQuality interface from the ReactJS SDK, make the necessary code modifications after upgrading to this version.
Improvements
This version adds the cameraVideoTrackConfig parameter to useLocalCameraTrack, enabling you to set video capture configurations such as capture devices and encoder when creating a camera video track.
Issues fixed
This version fixed the issue that the SDK threw the error CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS in Firefox's developer mode.
API Changes
Added
cameraVideoTrackConfigtouseLocalCameraTrack
Modified
NetworkQualitytoNetworkQualityExuplinktouplinkNetworkQualitydownlinktodownlinkNetworkQuality
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.6.2
Released on March 14, 2026.
Compatibility changes
This release introduces the following compatibility changes:
-
Deprecation of Direct CDN streaming APIs
The following APIs related to Direct CDN streaming are deprecated in this release and will be removed in a future version. Use Media Push instead.
SetDirectCdnStreamingAudioConfigurationSetDirectCdnStreamingVideoConfigurationStartDirectCdnStreamingStopDirectCdnStreamingDirectCdnStreamingMediaOptionsDirectCdnStreamingStatsDIRECT_CDN_STREAMING_STATEDIRECT_CDN_STREAMING_REASON
-
Deprecation of virtual metronome APIs
The following APIs related to the virtual metronome feature are deprecated in this release and will be removed in a future version.
StartRhythmPlayerConfigRhythmPlayerOnRhythmPlayerStateChanged
-
Deprecation of watermark APIs
The following watermark APIs are deprecated in this release. Use the new watermark APIs introduced in this release instead.
AddVideoWatermark[2/3]AddVideoWatermarkEx[1/2]
-
Removal of redundant APIs
The following APIs and parameters are removed in this release:
SetLocalPublishFallbackOptionOnLocalPublishFallbackToAudioOnlyOnDownlinkNetworkInfoUpdatedOnWlAccStatsEnableWirelessAccelerate
-
Changes to makeup feature implementation
Due to the beauty effect refactoring in this release, calling
SetExtensionPropertyto enable the makeup feature is no longer supported starting from v4.6.2. Use theSTYLE_MAKEUPnode instead. -
Behavior changes in dual-stream mode
Before v4.6.2, when the sender enabled adaptive low-stream mode (
AUTO_SIMULCAST_STREAM), the low stream was not sent proactively. The sender only started sending the low stream after receiving a request from a host-role receiver callingSetRemoteVideoStreamType. Starting from v4.6.2, when the sender enables adaptive low-stream mode, the SDK automatically decides whether to send or stop sending the low stream based on the downlink network quality of subscribing users. If you setmodeto another sending mode or explicitly configure the width, height, bitrate, or frame rate of the low stream, this adaptive behavior is disabled. -
New domains required for domain whitelist
If you upgrade from a previous version and use the domain whitelist feature (
domainLimitinRtcEngineConfigset totrue), add the following domains to ensure uninterrupted communication:*.rtnsvc.com*.realtimemesh.com
-
Removal of
uidfromEncodedVideoFrameInfostructThe
uidparameter is removed from theEncodedVideoFrameInfostruct. You can retrieveuidinformation directly from theOnEncodedVideoFrameReceivedcallback. Update your integration logic accordingly.
New features
Included in this release:
-
Multi-resolution video streams
This release introduces the Adaptive Bitrate Video Streaming (ABR) feature, which supports sending multiple video streams at different resolutions from the same video source simultaneously, including in multi-channel scenarios. Receivers can automatically or manually subscribe to streams at their preferred resolution.
After enabling ABR, you can configure up to four video stream layers (one main stream at the highest resolution and up to three lower-resolution streams), and set options such as resolution, bitrate, and layered streaming fallback. When layered streaming fallback is enabled, the SDK automatically switches to lower-resolution streams under poor network conditions to maintain a smooth viewing experience. This feature is suited for meetings, large classes, interactive live streaming, and other multi-device or multi-network environments.
-
Multi-path network transmission
This release introduces multi-path transmission for devices that support multiple network interfaces (such as 5G, Wi-Fi, and LAN). This feature reduces or eliminates experience degradation caused by poor network conditions, making it suitable for real-time audio and video communication in challenging environments such as vehicles, IoT devices, trains, and highways.
Enable multi-path transmission by setting
enableMultipathtotrueinChannelMediaOptions. Two transmission modes are supported throughMultipathMode:- Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
preferMultipathType. - Full redundancy mode: Transmits data simultaneously on all available network paths. Suited for scenarios that are not traffic-sensitive but require extreme reliability, such as outdoor broadcasting and parallel control. This mode incurs additional costs. Contact technical support to enable it.
Uplink and downlink paths can also be configured separately using
uplinkMultipathModeanddownlinkMultipathModeinChannelMediaOptions. Once enabled, the SDK reports real-time transmission statistics for each path through theonMultipathStatscallback, including per-path traffic consumption. - Dynamic mode (default): Dynamically selects the best available path based on network conditions. Suited for traffic-sensitive scenarios with high experience requirements, such as meetings and online education. In this mode, you can specify the preferred network path (for example, Wi-Fi or mobile network) using
-
Video quality scoring
This release adds the
mosValuefield toRemoteVideoStats, reporting the quality score of the received remote video stream as evaluated by the Agora real-time video MOS (Mean Opinion Score) system. Scores range from 1 to 5, where 5 indicates excellent video quality and 1 indicates extremely poor quality. Use this field to monitor subjective video quality in real time, adjust video parameters dynamically, or integrate into quality monitoring and alerting workflows. Contact technical support to enable this feature. -
Support for adding multiple watermarks
This release deprecates
AddVideoWatermark[2/3] andAddVideoWatermarkEx[1/2], and introducesAddVideoWatermarkWithConfig[3/3] andAddVideoWatermarkWithConfigEx[2/2], which support adding multiple watermarks to a video using watermark IDs and controlling their display order. To remove a specific watermark, callRemoveVideoWatermark. -
Token renewal result callback
This release introduces the
onRenewTokenResultcallback and theRENEW_TOKEN_ERROR_CODEerror code enum. After callingrenewTokento update the token, the SDK reports the result throughonRenewTokenResultand returns detailed error codes defined inRENEW_TOKEN_ERROR_CODE, allowing you to handle token renewal failure scenarios accordingly. -
App-level screen sharing support on Android
Starting from Android 14, the system allows users to choose between sharing the full screen or a single app during screen sharing, enhancing privacy and multitasking. This release adds support for sharing a single app in addition to full-screen sharing. The new
OnLocalVideoEventcallback reports local video events, especially those related to screen sharing. -
New permission granted callback on Android
The
OnPermissionGrantedcallback helps confirm permission status in screen sharing scenarios. You can use this callback to determine whether the user granted Camera or Screen permission. -
Media Player support for getting audio buffer delay
To address synchronization issues between the main vocal and background accompaniment in karaoke scenarios, this release adds the
GetAudioBufferDelaymethod to the Media Player module. This method returns the millisecond-level audio buffer delay when playing media files. -
Advanced Beauty (Beta)
This release introduces a new advanced beauty feature with the following capabilities:
- Precision beauty effects:
- Face shaping: Supports independent fine-tuning of 29 facial areas (for example, face slimming, eye enlarging, and nose narrowing) or one-click natural results using presets.
- Style makeup options: Eyeshadow, colored contacts, eyeliner, eyebrow shaping, lipstick, blush, under-eye highlights, and facial contouring.
- Skin enhancements: Teeth whitening, nasolabial fold removal, dark circle reduction, and eye brightening.
- Unified API: Manages all beauty, makeup, and filter functions through three core nodes (
BEAUTY,STYLE_MAKEUP, andFILTER) usingIVideoEffectObjectfor unified parameter configuration and lifecycle control. - Ready-to-use presets: Provides multiple style templates (for example, "Natural Beauty," "Senior Makeup," and "Cool White Filter") for immediate use.
- Dynamic parameter control: Supports real-time reading and modifying of granular parameters (for example, smoothing strength and lipstick type) through key-value pairs, with support for saving custom configurations and resetting defaults.
- Local resource support: All beauty resources, including effects, filters, and makeup assets, are packaged as local bundle files to ensure stability and reliability.
- Precision beauty effects:
-
Other new features
- Adds the
SetPlaybackAudioFrameBeforeMixingParametersmethod to set the audio frame format returned in theOnPlaybackAudioFrameBeforeMixingcallback, including sample rate, number of channels, and number of data samples per callback. After calling this method, the SDK returns the original pre-mix audio data according to the specified parameters. - Adds the
PreloadEffectExmethod to preload sound effect files into specified channels, supporting both local and online files for use in multi-channel scenarios. - Adds the
PlayEffectExmethod to play sound effect files in specified channels with configurable parameters, including loop count, pitch, spatial position, volume, whether to publish to the channel, and playback start position. - The local screenshot upload feature now supports setting the video observation position for screenshots through the new
positionfield inContentInspectModule, enabling screenshots of original video data or video streams before or after effect processing. - Adds the
screenColorTypeproperty toSegmentationPropertyto improve portrait segmentation accuracy when using a green or blue screen for virtual backgrounds. You can specify the background color as green, blue, or set it to automatic recognition.
- Adds the
Improvements
This release includes the following enhancements:
-
Seamless switching for sound effect files
Adds support for seamless switching of sound effect files. For the same sound effect file, if you call
PreloadEffectExfollowed byPlayEffectEx, the SDK does not close the file after playback completes or whenStopEffectis called. When you callPlayEffectExagain, the SDK reuses the loaded file to enable loop playback and seamless switching. This feature also works in multi-channel scenarios. -
Window exclusion support for secondary displays
Before v4.6.2, configuring window exclusion (
excludeWindowListinScreenCaptureParameters) was not supported in multi-screen scenarios when sharing by screen ID (StartScreenCaptureByDisplayId). This release adds support for this configuration.This release also adds a new member to
LOCAL_VIDEO_STREAM_REASONto report cases where window exclusion fails during screen sharing. -
Improved trigger timing of
OnVideoDeviceStateChangedBefore v4.6.2, the
OnVideoDeviceStateChangedcallback could only be triggered after joining a channel. Starting from this release, you can receive this callback once afterIRtcEngineinitialization completes, and continue to receive it after joining a channel. -
Improved accuracy of network quality evaluation
Improves the accuracy of network quality evaluation in the
OnNetworkQualitycallback, making the reported data better reflect the user's perceived experience. -
Support for 24kHz sampling rate for audio playback
Adds support for audio data with a sample rate of 24000 Hz in
OnPlaybackAudioFrame. When callingSetPlaybackAudioFrameParametersto set the playback audio format, you can setsampleRateto24000. -
OnEncodedVideoFrameReceivedsupportschannelIdAdds the
channelIdparameter to theOnEncodedVideoFrameReceivedcallback, helping you identify which channel the encoded video data belongs to. -
Additional improvements
- Optimizes permission requests on Windows 11 24H2 and later to avoid unnecessary location data acquisition.
- Adds support for G.711 and G.722 audio codecs when interoperating with Web clients, improving cross-platform audio compatibility and clarity.
- Improves video clarity in screen sharing scenarios involving documents.
- Adds error codes
ERR_PCMSEND_FORMAT (200)andERR_PCMSEND_BUFFEROVERFLOW (201)to report PCM data transmission errors.
Issues fixed
This release fixes the following issues:
- When playing multi-track songs with guide vocal enabled, noise occurred after calling
SetAudioPitchto adjust the pitch. - When a broadcaster created a custom audio capture track using
CreateCustomAudioTrackwithtrackTypeset toAUDIO_TRACK_DIRECT, pushed self-captured audio usingPushAudioFrame, and then played sound effects usingPlayEffectEx, the audience in the channel heard noise in the broadcaster's audio. - Apps integrated with the SDK occasionally experienced UI freezing due to main thread blocking during audio and video engagements.
- When screen sharing was enabled with
enableHighLightset totrueinScreenCaptureParameters, placing the shared window on top and maximizing it caused the local preview to flicker. - When calling
StartScreenCaptureByDisplayIdto share a specified screen and usingexcludeWindowListinScreenCaptureParametersto specify excluded windows, some windows occasionally failed to be excluded. - Apps sharing external screen video streams occasionally crashed after the external screen was disconnected.
- When calling
OpenWithMediaSourcewithisLiveSourceset totrueto play a pure video stream, playback failed. - Receivers occasionally heard noise when the sender transmitted multi-channel encoded audio.
- When calling
Opentwice to open different media resources, theOnPlayerInfoUpdatedcallback returned information about the first resource when opening the second, which was incorrect. - When calling
EnableAudioVolumeIndicationto enable volume indication for local streaming users and remote users, the local user volume returned byOnAudioVolumeIndicationwas 0. - When using a 21 ultrawide display and setting a high resolution such as 3840×2160 for screen sharing, the shared image was cropped in both local preview and on the receiver side.
- When calling
EnableVideoImageSourceto enable placeholder streaming, the sender occasionally succeeded in publishing butOnVideoPublishStateChangedreported the publish state as something other thanPUB_STATE_PUBLISHED, which was incorrect. - In multi-channel scenarios, when calling
joinChannelExsuccessfully before callingsetupRemoteVideoExto initialize remote user views, the first frame of remote user views occasionally had a large display delay. - After calling
Opento open an online sound effect file andPlayEffectExto start playback, callingSeekto set the playback position caused the file to play from the beginning instead of the specified position. - In media volume mode, when a broadcaster published microphone audio while simultaneously playing sound effects with
PlayEffectExand a music file withStartAudioMixing[2/2], echo occasionally occurred. - After calling
JoinChannelExto join a channel andStartOrUpdateChannelMediaRelayto start cross-channel media relay, rejoining the channel after going offline and leaving occasionally causedOnChannelMediaRelayStateChangedto reportstateasRELAY_STATE_FAILUREwithcodeasRELAY_ERROR_SERVER_ERROR_RESPONSE. - On some laptop models with power-saving mode enabled, receivers occasionally heard echo when the sender shared screen and audio.
- In online education scenarios, teachers occasionally observed audio and video out of sync for multiple students in the local view.
- The second call to
EnumerateVideoDevicesto retrieve the device list did not take effect. - On Windows 7 devices, when sharing a PowerPoint window running in full-screen auto-play mode with a large number of animations, the remote view occasionally flickered.
v4.5.1
v4.5.1 was released on March 13, 2025.
New features
-
AI conversation scenario
This version adds the
AUDIO_SCENARIO_AI_CLIENTaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions. -
16 KB memory page size
Starting from Android 15, the system supports 16 KB memory page sizes. To maintain app stability and performance, the SDK now includes compatibility for both 4 KB and 16 KB memory page sizes. This enhancement ensures reliable operation across a wider range of devices and helps prevent crashes on devices using the newer memory configuration.
Improvements
- Reduces the SDK initialization time on specific device models. (iOS)
Issues fixed
This release fixes the following issues:
- Apps that integrated the Agora SDK and set the
targetSdkVersionto 34 encountered crashes when attempting to enable screen sharing for the first time on an Android 14 system. (Android) - When joining two or more channels simultaneously, and calling the
TakeSnapshotEx [1/2]method to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
Pausemethod to pause playback, then callingSeekto move to a specified position, and finally callingPlayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
GetPlaySrcdid not change after calling theSwitchSrcmethod to switch to a new media resource. - When using Bluetooth headphones on specific device models for audio and video interactions, adjusting the phone volume would occasionally change the media volume instead of the Bluetooth volume. (Android)
- During audio and video interactions, the local user occasionally experienced a black screen when watching the video streams of remote users. (Android)
- On specific device models, after calling
SetCameraExposureFactorto set the exposure coefficient of the current camera at a specific angle of the device, the video screen occasionally became dark when the device was moved to another angle. (Android) - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption. (Android)
- When pushing video frames in i420 format to the channel, using CVPixelBuffer to handle these frames caused a crash. (iOS)
- Calling
SetupLocalVideoto set up two views, then callingEnableFaceDetectionto start face detection, no face information can be detected in the subsequently passed views. (iOS) - In a screen sharing scenario, the receiving-end user saw a green line on the shared image. (iOS)
- In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v4.5.0
v4.5.0 was released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Member Parameter Type Changes
This version has made the following modifications to some API members or parameters:
API Members/Parameters Change StartScreenCaptureByWindowIdwindowIdChanged from view_ttolongScreenCaptureConfigurationdisplayIdwindowId
Changed from unittolongScreenCaptureSourceInfosourceDisplayIdsourceId
Changed from view_ttolong -
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression.
VIDEO_DENOISER_LEVEL_STRENGTHis removed fromVIDEO_DENOISER_LEVEL.Instead, after enabling video noise suppression by calling
SetVideoDenoiserOptions, you can call theSetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed inSetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video noise suppression first and use specific settings as detailed in
SetLowlightEnhanceOptions. -
Changes in camera plug and unplug status (macOS, Windows)
In previous versions, when the camera was unplugged and replugged, the
OnVideoDeviceStateChangedcallback would report the device status asMEDIA_DEVICE_STATE_ACTIVE(1) (device in use). Starting from this version, after the camera is replugged, the device status will change toMEDIA_DEVICE_STATE_IDLE(0) (device ready). -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
COMPRESSION_PREFERENCEenumeration class, a newPREFER_COMPRESSION_AUTO(-1) enumeration is added, replacing the originalPREFER_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenPREFER_LOW_LATENCYorPREFER_QUALITYbased on your video scene settings to achieve the best user experience. - In the
DEGRADATION_PREFERENCEenumeration class, a newMAINTAIN_AUTO(-1) enumeration is added, replacing the originalMAINTAIN_QUALITY(1) as the default value. In this mode, the SDK will automatically choose betweenMAINTAIN_FRAMERATE,MAINTAIN_BALANCED, orMAINTAIN_RESOLUTIONbased on your video scene settings to achieve the optimal overall quality experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
APPLICATION_SCENARIO_LIVESHOW(3) (Live Show) enumeration toVIDEO_APPLICATION_SCENARIO_TYPE. You can callSetVideoScenarioto set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. -
Maximum frame rate for video rendering
This version adds the
SetLocalRenderTargetFpsandSetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
SetFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
StartLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call theStopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theUpdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
External
MediaProjection(Android)This version introduces the
SetExternalMediaProjectionmethod, which allows you to set an externalMediaProjectionand replace theMediaProjectionapplied by the SDK.If you have the capability to apply for
MediaProjectionon your own, you can use this feature to achieve more flexible screen capture. -
EGL context (Android)
This version introduces the
SetExternalRemoteEglContextmethod, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. -
Color space settings
This version adds the colorSpace parameter to
VideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Other features
OnLocalVideoStateChangedcallback adds theLOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTEDenumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows)MEDIA_DEVICE_STATE_TYPEadds theMEDIA_DEVICE_STATE_PLUGGED_INenumeration, indicating that the device has been plugged in. (Windows)
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
TakeSnapshot [2/2]andTakeSnapshotEx [2/2]methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
- Optimizes the logic for calling
QueryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices. (Windows)
- When calling
SwitchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theOnPlayerEventcallback will report thePLAYER_EVENT_SWITCH_ERRORevent, indicating an error occurred during media resource switching. - When calling
SetPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
Issues fixed
This version fixes the following issues:
- When calling
StartScreenCaptureByWindowIdto share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) - When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
OnAudioVolumeIndicationcallback was incorrect. (Android) - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
MuteRemoteVideoStream (uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality video stream. (Android) - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
- When calling
FollowSystemRecordingDeviceorFollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callbackOnLocalAudioStateChangedis not triggered when the audio device is removed. (Windows) - Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
- No sound when playing online media resources using the media player after the app starts. (iOS)
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
- Calling
StartAudioMixing [1/2]and then immediately callingPauseAudioMixingto pause the music file playback does not take effect. - Occasional crashes during audio and video interaction. (Android)
v4.4.0
v4.4.0 was released on August 29, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through
ExtensionContextin each callback.Original callback New callback onExtensionEventOnExtensionEventWithContextonExtensionStartedOnExtensionStartedWithContextonExtensionStoppedOnExtensionStoppedWithContextonExtensionErrorOnExtensionErrorWithContext -
This version renames the following members in
ExternalVideoFrame:
d3d11_texture_2dis renamed tod3d11Texture2d.texture_slice_indexis renamed totextureSliceIndex.metadata_bufferis renamed tometadataBuffer.metadata_sizeis renamed tometadataSize.
New features
-
Alpha transparency effects
This version introduces the Alpha transparency effects feature. It supports the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture use-cases, enabling transparent gift effects, custom backgrounds on the receiver end, and so on:
VideoFrameandExternalVideoFrameadd thealphaBuffermember, which sets the Alpha channel data.ExternalVideoFrameadds thefillAlphaBuffermember, which sets whether to automatically extract the Alpha channel data and fill it intoalphaBufferfor BGRA or RGBA formatted video data.VideoFrameandExternalVideoFrameadd thealphaStitchModemember, which sets the relative position ofalphaBufferand video frame stitching.
Additionally,
AdvanceOptionsadds a new memberencodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly callSetVideoEncoderConfigurationto set the video encoding properties and setencodeAlphatotrue. -
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
EnableVoiceAITunermethod. Pass in the sound effect types supported in theVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on. -
1v1 video call scenario
This version adds
APPLICATION_SCENARIO_1V1(1v1 video call) inVIDEO_APPLICATION_SCENARIO_TYPE. You can callSetVideoScenarioto set the video application scenario to 1v1 video call. The SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions.
Improvements
-
Adaptive hardware decoding support (Android, Windows)
This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.
-
Rendering performance enhancement (Windows)
DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.
-
Facial region beautification
To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.
-
Other improvements
This version also includes the following improvements:
- Optimizes the transmission strategy: Calling
EnableInstantMediaRenderingno longer impacts the security of the transmission link. - The
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTEDenumerator is added inOnLocalVideoStateChangedcallback, indicating that the display used for screen capture has been disconnected (Windows, macOS). - Optimizes the video link for window sharing, reducing CPU usage (macOS).
- Improves echo cancellation for screen sharing use-cases.
- Adds the
channelIdparameter toMetadata, which is used to get the channel name from which the metadata is sent. - Deprecates redundant enumeration values
CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUTandCLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILEDinCLIENT_ROLE_CHANGE_FAILED_REASON.
- Optimizes the transmission strategy: Calling
Issues fixed
This release fixed the following issues:
- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction (iOS).
- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while (iOS).
- After the sender called
StartDirectCdnStreamingto start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end (iOS). - Audio playback failed when pushing external audio data using
PushAudioFrameand the sample rate was not set to a recommended value, such as 22050 Hz and 11025 Hz.
v4.3.2
v4.3.2 was released on June 6, 2024.
Improvements
This release enhances the usability of the setRemoteSubscribeFallbackOption method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions.
Issues fixed
This version fixed the following issues:
- The remote video froze or became pixelated when the app returned to the foreground after being in the background for a long time (iOS).
- The local preview image rotated by 90° on some iPad devices, which did not meet expectations (iOS).
- Occasional video smoothness issues during audio and video interactions.
- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number.
- The app crashed when opening the app and starting screen sharing after the first installation or system reboot (Android).
- Local audio capture failed after joining a channel while answering a system phone call and hanging up, causing remote users to not hear any sound (Android).
- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end (Android).
- The app occasionally crashed when remote users left the channel.
- The screen occasionally flickered on the receiver's side when sharing a PPT window using startScreenCaptureByWindowId and playing PPT animations (Windows).
- The window border did not retain its original size after exiting the presentation and then maximizing the PPT window when sharing a WPS PPT window on Windows 7 using startScreenCaptureByWindowId and setting
enableHighLightin ScreenCaptureParameters totrue(Windows). - The specified window could not be brought to the foreground if it was covered by other windows when sharing a window using startScreenCaptureByWindowId and setting
windowFocusandenableHighLightin ScreenCaptureParameters totrue(Windows). - Clicking on the desktop widget caused the outlined part to flicker when sharing and highlighting a window on a Windows 7 device (Windows).
- When playing an audio file using StartAudioMixing [1/2] and the playing finished, the SDK sometimes failed to trigger the OnAudioMixingStateChanged (
AUDIO_MIXING_STATE_STOPPED,AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED) callback that reports that the playing is completed (iOS). - When calling the PlayEffect method to play sound effect files shorter than 1 second with
loopCountset to0, there was no sound (iOS). - When using the Agora media player to play a video and stopping it during playing, sometimes there was no sound for a short time after the playback was resumed (iOS).
v4.3.1
v4.3.1 was released on May 9, 2024.
New features
-
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.3.1 to the Apple App Store, manually add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Portrait center stage (iOS, macOS)
To enhance the presentation effect in online meetings, shows, and online education use-cases, this version introduces the EnableCameraCenterStage method to activate the portrait center stage feature. This ensures that presenters, regardless of movement, always remain centered in the video frame, achieving better presentation effects.
Before enabling portrait center stage it is recommended to verify whether your current device supports this feature by calling IsCameraCenterStageSupported. A list of supported devices can be found in the API documentation at EnableCameraCenterStage.
-
Camera stabilization (iOS)
To improve video stability in mobile filming, low-light environments, and hand-held shooting use-cases, this version introduces a camera stabilization feature. You can activate this feature and select an appropriate stabilization mode by calling SetCameraStabilizationMode, achieving more stable and clearer video footage.
-
Wide and ultra-wide cameras (Android, iOS)
To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call QueryCameraFocalLengthCapability to check the device's focal length capabilities, and then call SetCameraCapturerConfiguration and set
cameraFocalLengthTypeto the supported focal length types, including wide and ultra-wide. -
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
VIDEO_SOURCE_CAMERA_THIRD(11) andVIDEO_SOURCE_CAMERA_FOURTH(12) in VIDEO_SOURCE_TYPE add support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling StartCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackin ChannelMediaOptions add support for Android. Set these parameters totruewhen joining a channel with JoinChannel [2/2] to publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added to CameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling StartCameraCapture with the specificcameraId.
-
-
Data stream encryption
This version adds
datastreamEncryptionEnabledto EncryptionConfig for enabling data stream encryption. You can set this when you activate encryption with EnableEncryption. If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly addedENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREandENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILUREenumerations. -
Adaptive configuration for low-quality video streams
This version introduces adaptive configuration for low-quality video streams. When you activate the dual-stream mode and set up low-quality video streams on the sending side using SetDualStreamMode [2/2], the SDK defaults to the following behaviors:
- The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution.
- The bitrate for the low-quality streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification.
-
Other features
- A new method EnableEncryptionEx is added for enabling media stream or data stream encryption in multi-channel use-cases.
- A new method SetAudioMixingPlaybackSpeed is introduced for setting the playback speed of audio files.
- A new method GetCallIdEx is introduced for retrieving call IDs in multi-channel use-cases.
-
Beta features
- Speech driven avatar is released in beta. See beta documentation for details.
Improvements
-
Optimization for game use-case screen sharing (Windows)
This version specifically optimizes screen sharing for game use-cases, enhancing performance, stability, and clarity in ultra-high definition (4K, 60 fps) game use-cases, resulting in a clearer, smoother, and more stable gaming experience for players.
-
Audio device type detection (macOS)
This version adds the following methods to obtain the information and type of audio playback and recording devices:
-
Virtual background algorithm optimization
To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm:
- Supports recognition of any solid color background, no longer limited to green screens.
- Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation.
- After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges.
-
CPU consumption reduction of in-ear monitoring
This release adds an enumerator
EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTERinEAR_MONITORING_FILTER_TYPE. For complex audio processing use-cases, you can specify this option to reuse the audio filter after sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant use-cases requiring low CPU consumption. -
Other improvements
This version also includes the following improvements:
- Optimization of video encoding and decoding strategies in non-screen sharing use-cases to save system performance overhead (Windows).
- Enhanced media player capabilities to handle the WebM format videos, including support for rendering Alpha channels.
- In AUDIO_EFFECT_PRESET, a new enumeration
ROOM_ACOUSTICS_CHORUS(chorus effect) is added, enhancing the spatial presence of vocals in chorus use-cases. - In RemoteAudioStats, a new
e2eDelayfield is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end.
Issues fixed
This version fixed the following issues:
- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player.
- In screen sharing use-cases, when the app enabled sound card capture with EnableLoopbackRecording to capture audio from the shared screen, the transmission of sound card captured audio failed after a local user manually disabled the local audio capture device, causing remote users to not hear the shared screen's audio (Windows).
- Hosts using certain models of devices in the speaker mode experienced occasional local audio capture failures when switching the app process to the background and then back to the foreground, preventing remote users from hearing the host's audio (Android).
- An occasional echo was observed when playing the audio stream of a specified user before mixing (macOS, Windows).
- During interactions, when a local user set the system default playback device to speakers, there was no sound from the remote end (Windows).
- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash (Android).
- When sharing an Excel document window, remote users occasionally saw a green screen (Windows).
- In use-cases using camera capture for local video, when the app was moved to the background and DisableVideo or StopPreview was called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground (Android).
- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag.
API changes
Added
- EnableCameraCenterStage (iOS, macOS)
- IsCameraCenterStageSupported (iOS, macOS)
- SetCameraStabilizationMode (iOS)
- CAMERA_STABILIZATION_MODE (iOS)
- RegisterFaceInfoObserver
- UnregisterFaceInfoObserver
- IFaceInfoObserver
- OnFaceInfo
- The
publishLipSyncTrackmember in ChannelMediaOptions - MEDIA_SOURCE_TYPE adds
SPEECH_DRIVEN_VIDEO_SOURCE - VIDEO_SOURCE_TYPE adds
VIDEO_SOURCE_SPEECH_DRIVEN - EncryptionConfig adds
datastreamEncryptionEnabled - ENCRYPTION_ERROR_TYPE adds the following enumerations:
ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILUREENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE
- GetPlaybackDefaultDevice [2/2] (macOS),
GetRecordingDefaultDevice[2/2] (macOS),- GetPlaybackDeviceInfo [2/2] (macOS)
- GetRecordingDeviceInfo [2/2] (macOS)
- RemoteAudioStats adds
e2eDelay - ERROR_CODE_TYPE adds
ERR_DATASTREAM_DECRYPTION_FAILED - AUDIO_EFFECT_PRESET adds
ROOM_ACOUSTICS_CHORUS, enhancing the spatial presence of vocals in chorus use-cases. - GetCallIdEx
- EnableEncryptionEx
- SetAudioMixingPlaybackSpeed
- QueryCameraFocalLengthCapability(Android, iOS)
- FocalLengthInfo (Android, iOS)
- CAMERA_FOCAL_LENGTH_TYPE (Android, iOS)
- CameraCapturerConfiguration adds a new member
cameraFocalLengthType(Android, iOS) - CameraCapturerConfiguration adds a new member
cameraId(Android) - EAR_MONITORING_FILTER_TYPE adds a new enumeration
EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS
v4.3.0
v4.3.0 was released on February 28, 2024.
Compatibility changes
This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release.
-
Renaming parameters in callbacks
In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release.
Callback Original parameter name New parameter name OnLocalAudioStateChangederrorreasononLocalVideoStateChangederrorreasonOnDirectCdnStreamingStateChangederrorreasonOnRtmpStreamingStateChangederrCodereasonOriginal enumeration class New enumeration class LOCAL_AUDIO_STREAM_ERRORLOCAL_AUDIO_STREAM_REASONLOCAL_VIDEO_STREAM_ERRORLOCAL_VIDEO_STREAM_REASONDIRECT_CDN_STREAMING_ERRORDIRECT_CDN_STREAMING_REASONMEDIA_PLAYER_ERRORMEDIA_PLAYER_REASONRTMP_STREAM_PUBLISH_ERRORRTMP_STREAM_PUBLISH_REASONNote: For specific renaming of enumerations, please refer to API changes.
-
Channel media relay
To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below:
Deleted methods and callbacks Alternative methods and callbacks startChannelMediaRelayupdateChannelMediaRelay
startOrUpdateChannelMediaRelaystartChannelMediaRelayExupdateChannelMediaRelayEx
startOrUpdateChannelMediaRelayExonChannelMediaRelayEventonChannelMediaRelayStateChanged -
Reasons for local video state changes
This release makes the following modifications to the enumerations in the LOCAL_VIDEO_STREAM_REASON class:
- The value of
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_PAUSED(formerlyLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED) has been changed from 23 to 28. - The value of
LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_RESUMED(formerlyLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED) has been changed from 24 to 29. - The
LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORTenumeration has been changed toLOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT.
- The value of
-
Audio route
Starting with this release,
routeBluetoothin AudioRoute is renamed toROUTE_BLUETOOTH_DEVICE_HFP, representing a Bluetooth device using the HFP protocol.ROUTE_BLUETOOTH_DEVICE_A2DP(10) is added to represent a Bluetooth device using the A2DP protocol. -
Audio loopback capturing (Windows, macOS)
- Before v4.3.0, if you called the DisableAudio method to disable the audio module, audio loopback capturing would not be disabled.
- As of v4.3.0, if you call the DisableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the EnableAudio method and then call EnableLoopbackRecording.
-
Log encryption behavior changes
For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console.
Refer to the following solutions for different needs:
- If you need to know the API call status, please check the API logs and print the SDK callback logs yourself.
- For any other special requirements, please contact technical support and provide the corresponding encrypted logs.
New features
-
Local preview with multiple views
This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows:
- Call SetupLocalVideo to set the first view: Set the
positionparameter toPOSITION_POST_CAPTURER_ORIGIN(introduced in this release) inVideoCanvas. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - Call SetupLocalVideo to set the second view: Set the
positionparameter toPOSITION_POST_CAPTURERinVideoCanvas, the video observed here has the effect of video preprocessing. - Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects.
- Call SetupLocalVideo to set the first view: Set the
-
Custom mixed video layout on the receiving end (Android, iOS)
To facilitate customized layout of mixed video stream at the receiver end, this release introduces the OnTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate
viewfor rendering the sub-video stream (distinguished bysubviewUid) in the mixed video stream when calling the SetupRemoteVideo method, achieving a custom video layout effect.When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time.
Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video use-case, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end.
-
Query Device Score
This release adds the QueryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video use-cases, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business use-cases is varied. For specific score recommendations, please contact technical support.
-
Select different audio tracks for local playback and streaming
This release introduces the SelectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the OpenWithMediaSource method and enable this function by setting the
enableMultiAudioTrackparameter in MediaSource. -
Others
This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK.
- SetRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions.
- OnRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve.
- GetRecordingDeviceVolume(Windows): Sets the volume of the audio capturing device.
- SetPlayerOption and SetPlayerOption: Sets media player options for providing technical previews or special customization features.
- EnableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source.
Improvements
-
SDK task processing scheduling optimization
This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects:
- The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%.
- The API call duration and response time are reduced by 5% to 50%.
- The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in use-cases involving high resolutions and frame rates.
- The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific use-cases.
-
In-ear monitoring volume boost
This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling SetInEarMonitoringVolume.
-
Spatial audio effects usability improvement
- This release optimizes the design of the SetZones method, supporting the ability to set the
zonesparameter toNULL, indicating the clearing of all echo cancellation zones. - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the methods in ILocalSpatialAudioEngine.
- This release optimizes the design of the SetZones method, supporting the ability to set the
-
Other Improvements
This release also includes the following improvements:
- This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments.
- When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color.
- This release adds the
earMonitorDelayandaecEstimatedDelaymembers in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - The OnPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started.
- The OnPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats.
Issues fixed
This release fixed the following issues:
- When sharing two screen sharing video streams simultaneously, the reported
captureFrameRatein the OnLocalVideoStats callback is 0, which is not as expected.
API changes
Added
- OnTranscodedStreamLayoutInfo
- VideoLayout
- The
subviewUidmember in VideoCanvas - EnableCustomAudioLocalPlayback
- QueryDeviceScore
- The
CUSTOM_VIDEO_SOURCEenumeration in MEDIA_SOURCE_TYPE - The
ROUTE_BLUETOOTH_DEVICE_A2DPenumeration in AudioRoute - SelectMultiAudioTrack
- OnPlayerCacheStats
- OnPlayerPlaybackStats
- PlayerPlaybackStats
Modified
-
All
ERRORfields in the following enumerations are changed toREASON:LOCAL_AUDIO_STREAM_ERROR_OKLOCAL_AUDIO_STREAM_ERROR_FAILURELOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSYLOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURELOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURELOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_IDLOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_IDLOCAL_VIDEO_STREAM_ERROR_OKLOCAL_VIDEO_STREAM_ERROR_FAILURELOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSIONLOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSYLOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURELOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORTLOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUNDLOCAL_VIDEO_STREAM_ERROR_DEVICE_DISCONNECTEDLOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_IDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_NO_PERMISSIONLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_FAILURELOCAL_VIDEO_STREAM_ERROR_DEVICE_SYSTEM_PRESSUREDIRECT_CDN_STREAMING_ERROR_OKDIRECT_CDN_STREAMING_ERROR_FAILEDDIRECT_CDN_STREAMING_ERROR_AUDIO_PUBLICATIONDIRECT_CDN_STREAMING_ERROR_VIDEO_PUBLICATIONDIRECT_CDN_STREAMING_ERROR_NET_CONNECTDIRECT_CDN_STREAMING_ERROR_BAD_NAMEPLAYER_ERROR_NONEPLAYER_ERROR_INVALID_ARGUMENTSPLAYER_ERROR_INTERNALPLAYER_ERROR_NO_RESOURCEPLAYER_ERROR_INVALID_MEDIA_SOURCEPLAYER_ERROR_UNKNOWN_STREAM_TYPEPLAYER_ERROR_OBJ_NOT_INITIALIZEDPLAYER_ERROR_CODEC_NOT_SUPPORTEDPLAYER_ERROR_VIDEO_RENDER_FAILEDPLAYER_ERROR_INVALID_STATEPLAYER_ERROR_URL_NOT_FOUNDPLAYER_ERROR_INVALID_CONNECTION_STATEPLAYER_ERROR_SRC_BUFFER_UNDERFLOWPLAYER_ERROR_INTERRUPTEDPLAYER_ERROR_NOT_SUPPORTEDPLAYER_ERROR_TOKEN_EXPIREDPLAYER_ERROR_UNKNOWNRTMP_STREAM_PUBLISH_ERROR_OKRTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENTRTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWEDRTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUTRTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERRORRTMP_STREAM_PUBLISH_ERROR_TOO_OFTENRTMP_STREAM_PUBLISH_ERROR_REACH_LIMITRTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZEDRTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUNDRTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTEDRTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTERRTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAMRTMP_STREAM_PUBLISH_ERROR_NET_DOWNRTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGERTMP_STREAM_UNPUBLISH_ERROR_OK
Deleted
StartChannelMediaRelayUpdateChannelMediaRelayStartChannelMediaRelayExUpdateChannelMediaRelayExOnChannelMediaRelayEventCHANNEL_MEDIA_RELAY_EVENT
v4.2.6
v4.2.6 was released on November 24, 2023.
Issues fixed
This release fixed the following issues:
-
Issues occurring when using Android 14:
- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users needed to confirm recording the screen in the pop-up window.
- When integrating the SDK, setting the Android
targetSdkVersionto 34 could cause screen sharing to be unavailable or even cause the app to crash. - Calling
StartScreenCapture[1/2] without sharing video (settingcaptureVideotofalse) and then callingUpdateScreenCaptureParametersto share video (settingcaptureVideototrue) resulted in a frozen shared screen on the receiving end. - When screen sharing in the landscape mode, the shared screen seen by the audience was divided into two parts: One side of the screen was compressed, the other side was black.
-
When using an iOS 16 or later device with Bluetooth headphones connected before joining the channel, the audio routing after joining the channel was not as expected: Audio was played from the speaker, not the Bluetooth headphones (iOS).
-
In live streaming use-cases, the video on the audience end was occasionally distorted (Android).
-
In specific use-cases, such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel, the video on the receiving end stuttered or froze.
v4.2.4
v4.2.4 was released on October 25, 2023.
Issues fixed
This release fixes the following issue:
The AgoraRtcWrapper version number in CFBundleShortVersionString on iOS and macOS is wrong, which interferes with submitting the App to the App Store.
v4.2.3
v4.2.3 was released on October 20, 2023.
New features
-
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_IMAGE_MODERATIONenumeration is added inCONTENT_INSPECT_TYPEwhich means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
In addition, this version also introduces the
EnableContentInspectExmethod, which supports taking screenshots for multiple video streams and uploading them. - The
-
ID3D11Texture2D Rendering on Windows
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set
formattoVIDEO_TEXTURE_ID3D11TEXTURE2Dwhen pushing external raw video frames to the SDK by callingPushVideoFrame. By setting thed3d11_texture_2dandtexture_slice_indexproperties, you can determine the ID3D11Texture2D texture object to use. -
Local video status error code update on Windows and macOS
In order to help users understand the exact reasons for local video errors in screen sharing use-cases, the following sets of enumerations have been added to the
OnLocalVideoStateChangedcallback:LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED(23): Screen capture has been paused. Common use-cases for reporting this error code: The current screen may have been switched to a secure desktop, such as a UAC dialog box or Winlogon desktop.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED(24): Screen capture has resumed from the paused state.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDEN(25): The window being captured on the current screen is in a hidden state and is not visible on the current screen.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN(26): The window for screen capture has been restored from the hidden state.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED(27): The window for screen capture has been restored from the minimized state.
-
Check device support for advanced features
This version adds the
IsFeatureAvailableOnDevicemethod to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement.Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient.
In addition, since this version, calling
EnableVirtualBackgroundandSetBeautyEffectOptionsautomatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code-4:ERR_NOT_SUPPORTEDis returned, indicating the device does not support the feature.
Improvements
-
Optimize virtual background memory usage
This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10%. Specific values may vary depending on the device model and platform.
-
Screen sharing use-case optimization
This release optimizes the performance and encoding efficiency in ultra-high-definition (4K, 60 fps) game sharing use-cases, effectively reducing the system resource usage during screen sharing.
Other Improvements
This release includes the following additional improvements:
- Optimizes the logic of handling invalid parameters. When you call the
SetPlaybackSpeedmethod to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. - Optimizes the logic of Token parsing, in order to prevent an app from crashing when an invalid token is passed in.
Issues fixed
This release fixed the following issues:
- Occasional crashes and dropped frames in screen sharing use-cases on Windows.
- Occasional crashes when joining a channel on macOS.
- Occasional failure of joining a channel when the local system time was not set correctly.
- When calling the
PlayEffectmethod to play two audio files using the samesoundId, the first audio file was sometimes played repeatedly. - When the host called the
StartAudioMixing[2/2] method to play music, sometimes the host couldn't hear the music while the remote users could hear it on Android. - Occasional crashes occurred on certain Android devices.
- Calling
TakeSnapshotExonce received theOnSnapshotTakencallback for multiple times. - In channels joined by calling
JoinChannelExexclusively, callingSetEnableSpeakerphonedid not result in switching audio route from the speaker to the headphone on Android.
API changes
Added
- The following enumerations in
OnLocalVideoStateChangedon (Windows and macOS:LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMEDLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDENLOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED
d3d11_texture_2dandtexture_slice_indexmembers inExternalVideoFrameon WindowsVIDEO_TEXTURE_ID3D11TEXTURE2DinVIDEO_PIXEL_FORMATon WindowsEnableContentInspectExCONTENT_INSPECT_IMAGE_MODERATIONinCONTENT_INSPECT_TYPEserverConfiginContentInspectConfigIsFeatureAvailableOnDeviceFeatureType
v4.2.2
This version was released on August 1, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
- Audio frame observer
The following methods in the IAudioFrameObserver class are deleted:
GetObservedAudioFramePosition: Use the newly-addedpositionparameter inRegisterAudioFrameObserverinstead.GetPlaybackAudioParams: UseSetPlaybackAudioFrameParametersinstead.GetRecordAudioParams: UseSetRecordingAudioFrameParametersinstead.GetMixedAudioParams: UseSetMixedAudioFrameParametersinstead.GetEarMonitoringAudioParams: UseSetEarMonitoringAudioFrameParametersinstead.
- Video frame observer
The following methods in the IVideoFrameObserver class are deleted:
GetVideoFormatPreference: Use the newly-addedformatPreferenceparameter inRegisterVideoFrameObserver.GetObservedFramePosition: Use the newly-addedpositionparameter inRegisterVideoFrameObserver.
- Metadata
This release deletes GetMaxMetadataSize and OnReadyToSendMetadata in the IMetadataObserver class. You can use the newly-added SetMaxMetadataSize and SendMetadata methods instead.
New features
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See Secure authentication with tokens.
All 4.x SDKs support using wildcard tokens.
-
Preloading channels
This release adds
PreloadChannel[1/2]andPreloadChannel[2/2]methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See Secure authentication with tokens.
-
Customized background color of video canvas
In this release, the
backgroundColormember has been added toVideoCanvas, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. -
Publishing video streams from different sources (Windows, macOS)
This release adds the following members in
ChannelMediaOptionsto allow you publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
For one
RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
Improvements
-
Improved camera capture effect (Android, iOS)
This release has improved camera capture effect in the following aspects:
-
Support for camera exposure adjustment
This release adds
IsCameraExposureSupportedto query whether the device supports exposure adjustment andSetCameraExposureFactorto set the exposure ratio of the camera. -
Optimization of default camera selection (iOS)
Since this release, the default camera selection behavior of the SDK is aligned with that of the iOS system camera. If the device has multiple rear cameras, better shooting perspectives, zooming capabilities, low-light performance, and depth sensing can be achieved during video capture, thereby improving the quality of video capture.
-
-
Virtual Background Algorithm Upgrade
This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in use-cases such as meetings, offices, homes, and under backlight or weak light conditions.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
StartOrUpdateChannelMediaRelayandStartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels. -
Enhancement in video codec query capability
To improve the video codec query capability, this release adds the
codecLevelsmember inCodecCapInfo. After successfully callingQueryCodecCapability, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats throughcodecLevels.
This release includes the following additional improvements:
- To improve the switching experience between multiple audio routes, this release adds the
SetRouteInCommunicationModemethod. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode (MODE_IN_COMMUNICATION). (Android) - The SDK automacially adjusts the frame rate of the sending end based on the screen sharing use-case. Especially in document sharing use-cases, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden.
- To help users understand the reasons for more types of remote video state changes, the
REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORTenumeration has been added to theOnRemoteVideoStateChangedcallback, indicating that the local video decoder does not support decoding the received remote video stream.
Issues fixed
This release fixed the following issues:
- Occasionally, noise occurred when the local user listened to their own and remote audio after joining the channel. (macOS)
- Slow channel reconnection after the connection was interrupted due to network reasons.
- In screen sharing use-cases, the delay of seeing the shared screen was occasionally higher than expected on some devices.
- In custom video capturing use-cases,
SetBeautyEffectOptions,SetLowlightEnhanceOptions,SetVideoDenoiserOptions, andSetColorEnhanceOptionscould not load extensions automatically. - In multi-device audio recording use-cases, after repeatedly plugging and unplugging or enabling/disabling the audio recording device, no sound could be heard occasionally when calling the
StartRecordingDeviceTestto start an audio capturing device test. (Windows)
API changes
Added
SetCameraExposureFactor(Android, iOS)IsCameraExposureSupported(Android, iOS)PreloadChannel[1/2]PreloadChannel[2/2]UpdatePreloadChannelTokenSetRouteInCommunicationMode(Android)- The following members in
ChannelMediaOptions(Windows, macOS):publishThirdCameraTrackpublishFourthCameraTrackpublishThirdScreenTrackpublishFourthScreenTrack
CodecCapLevelsVIDEO_CODEC_CAPABILITY_LEVELbackgroundColorinVideoCanvascodecLevelsinCodecCapInfoREMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORTinREMOTE_VIDEO_STATE_REASONSetMaxMetadataSizeSendMetadatapositionparameter inRegisterAudioFrameObserverformatPreferenceandpositionparameters inRegisterVideoFrameObserver
Deleted
GetObservedAudioFramePositionGetPlaybackAudioParamsGetRecordAudioParamsGetMixedAudioParamsGetEarMonitoringAudioParamsGetVideoFormatPreferenceGetObservedFramePositionGetMaxMetadataSizeOnReadyToSendMetadata
v4.2.1
This version was released on June 21, 2023.
Improvements
This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions.
Issues fixed
This version fixed the following issues:
- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken.
- After the sending end called
SetAINSModeto activate AI noise reduction, occasional echo was observed by the receiving end. - Brief noise occurred while playing media files using the media player.
- After enabling the screen sharing function on the sending end, there was high delay until the receiving end could see the shared screen. (macOS)
- Occasional crash after calling the
DestroyMediaPlayermethod. (iOS) - When the sending end mixed and published two streams of video captured by two cameras locally, the video from the second camera was occasionally missing on the receiving end. (Windows)
- In screen sharing use-cases, some Android devices experienced choppy video on the receiving end. (Android)
v4.2.0
v4.2.0 was released on May 29, 2023.
Compatibility changes
If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK.
1. Video capture (Windows, iOS)
This release optimizes the APIs for camera and screen capture function. As of v4.2.0, ensure you use the alternative methods listed in the table below and specify the video source by setting the sourceType parameter:
| Deleted Methods | Alternative Methods |
|---|---|
StartPrimaryCameraCapture(Windows)StartSecondaryCameraCapture(Windows,iOS) | StartCameraCapture |
StopPrimaryCameraCapture(Windows)StopSecondaryCameraCapture(Windows,iOS) | StopCameraCapture |
StartPrimaryScreenCapture (Windows)StartSecondaryScreenCapture(Windows,iOS) | StartScreenCapture[2/2] |
StopPrimaryScreenCapture(Windows)StopSecondaryScreenCapture(Windows,iOS) | StopScreenCapture[2/2] |
2. Video rendering
As of v4.2.0, Agora Unity SDK does not support using VideoSurface and VideoSurfaceYUV at the same time for video rendering. After one IRtcEngine is created, if the first view is rendered through VideoSurfaceYUV, all views need to be rendered using VideoSurfaceYUV throughout the lifecycle of the IRtcEngine.
3. Video data acquisition
The OnCaptureVideoFrame and OnPreEncodeVideoFrame callbacks are added with a new parameter called sourceType, which is used to indicate the specific video source type.
4. Channel media options
PublishCustomAudioTrackEnableAecinChannelMediaOptionsis deleted. UsePublishCustomAudioTrackinstead.PublishTrancodedVideoTrackinChannelMediaOptionsis renamed toPublishTranscodedVideoTrack.PublishCustomAudioSourceIdinChannelMediaOptionsis renamed toPublishCustomAudioTrackId.
5. Local video mixing (Windows)
- The
VideoInputStreamsinLocalTranscoderConfigurationis changed toVideoInputStreams. - The
MEDIA_SOURCE_TYPEinTranscodingVideoStreamis changed toVIDEO_SOURCE_TYPE.
6. Virtual sound card (macOS)
As of v4.2.0, Agora supports third-party virtual sound cards. You can use a third-party virtual sound card as the audio input or output device for the SDK. You can use the stateChanged callback to see whether the current input or output device selected by the SDK is a virtual sound card.
If you set AgoraALD or Soundflower as the default input or output device when joining a channel, you will not hear audio.
7. Default video encoding resolution
As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction use-cases.
You can call the SetVideoEncoderConfiguration method to set the expected video encoding resolution in the video encoding parameters configuration.
In use-cases such as 1-on-1 video calls and video group chats, the increase in the default resolution affects the aggregate resolution and thus the billing rate. For example, before this release, in a 1-on-1 video call use-case, the default aggregate resolution of subscribed video was 460,800 (640 × 360 × 2) and was billed as HD type; as of this release, the default aggregate resolution in the same use-case is 1,036,800 (960 × 540 × 2) and is billed as Full HD type.
8. Miscellaneous
-
OnApiCallExecutedis deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks. -
The
IAudioFrameObserverclass is renamed toIAudioPcmFrameSink, thus the prototypes of the following methods are updated accordingly:OnFrameRegisterAudioFrameObserver[1/2] andRegisterAudioFrameObserver[2/2] inIMediaPlayer
-
EnableDualStreamMode[1/2] andEnableDualStreamMode[2/2] are deprecated. UseSetDualStreamMode[1/2] andSetDualStreamMode[2/2] instead. -
StartChannelMediaRelay,UpdateChannelMediaRelay,StartChannelMediaRelayEx, andUpdateChannelMediaRelayExare deprecated. UseStartOrUpdateChannelMediaRelayAndStartOrUpdateChannelMediaRelayExinstead.
New features
1. AI Noise Suppression
This release introduces public APIs for the AI Noise Suppression function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced setAINSMode method and set the noise suppression mode to balance, aggressive, or low latency according to your use-case.
Agora charges separately for this function. See AI Noise Suppression unit pricing.
2. Enhanced Virtual Background
To increase the fun of real-time video calls and protect user privacy, this version has enhanced the Virtual Background feature. You can now set custom backgrounds of various types by calling the EnableVirtualBackground method, including:
- Process the background as Alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect.
- Replace the background with various formats of local videos.
See Virtual Background documentation.
3. Video scenario settings
This release introduces SetVideoScenario for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements.
Currently, this feature provides targeted optimizations for real-time video conferencing use-cases, including:
- Automatically activate multiple anti-weak-network technologies to enhance the capability and performance of low-quality video streams in meeting use-cases where high bitrates are required, ensuring smoothness when multiple streams are subscribed by the receiving end.
- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption.
4. Local video mixing
On Windows, this release adds the OnLocalVideoTranscoderError callback. When there is an error in starting or updating the local video mixing, the SDK triggers this callback to report the reason for the failure.
On Android, iOS, and macOS, this release adds the local video mixing feature. You can use the StartLocalVideoTranscoder method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various use-case requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect.
Additionally, the SDK provides the UpdateLocalTranscoderConfiguration method and the OnLocalVideoTranscoderError callback. After enabling local video mixing, you can use the UpdateLocalTranscoderConfiguration method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the OnLocalVideoTranscoderError callback.
Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
5. Cross-device synchronization
In real-time collaborative singing use-cases, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces GetNtpWallTimeInMs for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience.
6. Instant frame rendering
This release adds the EnableInstantMediaRendering method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel.
7. Video rendering tracing
This release adds the StartMediaRenderingTracing and StartMediaRenderingTracingEx methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the OnVideoRenderingTracingResult callback.
Agora recommends that you use this method in conjunction with the UI settings, such as buttons and sliders, in your app. For example, call this method when the user clicks the Join Channel button, and then get the indicators in the video frame rendering process through the OnVideoRenderingTracingResult callback. This enables developers to optimize the indicators and improve the user experience.
Improvements
1. Voice changer
This release introduces the SetLocalVoiceFormant method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the SetLocalVoicePitch method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects.
2. Enhanced screen share (Android, iOS)
This release adds the QueryScreenCaptureCapability method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand.
This release also adds the SetScreenCaptureScenario method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set.
3. Improved compatibility with audio file types (Android)
As of v4.2.0, you can use the following methods to open files with a URI starting with Content:// : StartAudioMixing [2/2], PlayEffect [3/3], Open, and OpenWithMediaSource.
4. Enhanced rendering compatibility (Windows)
This release enhances the rendering compatibility of the SDK. Issues like black screens caused by rendering failures on certain devices are fixed.
5. Audio and video synchronization
For custom video and audio capture use-cases, this release introduces GetCurrentMonotonicTimeInMs for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization.
6. Multi-camera capture and multi-screen capture
This release introduces StartScreenCapture [2/2] (PC only) and StartCameraCapture. By calling these methods multiple times and specifying the sourceType parameter, developers can start capturing video streams from multiple cameras and screens for local video mixing or multi-channel publishing. This particularly useful for use-cases such as remote medical care and online education, where multiple cameras and displays need to be connected.
7. Channel media relay
This release introduces StartOrUpdateChannelMediaRelay and StartOrUpdateChannelMediaRelayEx, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls.
8. Custom audio tracks
To better meet the needs of custom audio capture use-cases, this release adds CreateCustomAudioTrack and DestroyCustomAudioTrack for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source:
- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture use-cases.
- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture use-cases.
9. Super resolution (Android, iOS)
To optimize the usability of super resolution, this release removes EnableRemoteSuperResolution. Super resolution no longer needs to be enabled manually. The SDK now automatically optimizes the resolution of the remote video based on the performance of the user's device.
Issues fixed
This release fixed the following issues:
Windows
- When using Agora Media Player to play RTSP video streams, the video images sometimes appeared pixelated.
- Adding an Alpha channel to an image in PNG or GIF format failed when the local client mixed video streams.
- After joining the channel, remote users saw a watermark even though the watermark was deleted.
- If a watermark was added after starting screen sharing, the watermark was not displayed on the screen.
- When joining a channel and accessing an external camera, calling
SetDeviceto specify the video capture device as the external camera did not take effect. - When trying to outline the shared window and put it on top, the shared window did not stay on top of other windows.
Android
- Occasional crashes occurred on Android devices when users joined or left a channel.
- Occasional failure when enabling in-ear monitoring.
- Occasional echo.
- Crashes occurred after users set the video resolution to 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices.
- In real-time chorus use-cases, remote users heard noises and echoes when an OPPO R11 device joined the channel in the loudspeaker mode.
- When the playback of the local music finished, the
OnAudioMixingFinishedcallback was not properly triggered. - When using a video frame observer, the first video frame was occasionally missed on the receiver's end.
- When sharing screens in use-cases involving multiple channels, remote users occasionally saw black screens.
- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted.
- Abnormal client status caused by an exception in the
OnRemoteAudioStateChangedcallback.
iOS
- Occasional loss of the
OnFirstRemoteVideoFramecallback during channel media relay. - The receiver actively subscribed to the high-quality stream but unexpectedly received a low-quality stream.
- Abnormal client status cased by an exception in the
OnRemoteAudioStateChangedcallback.
macOS
- The receiver was receiving the low-quality stream originally and automatically switched to the high-quality stream after a few seconds.
- Occasional screen jitter during screen sharing.
- If the rendering view of the player was set as a
UIViewController's view, the video was zoomed from the bottom-left corner to the middle of the screen when entering the full-screen mode. - When joining a channel and accessing an external camera, calling
SetDeviceto specify the video capture device as the external camera did not take effect.
All platforms
- When the host frequently switched the user role between broadcaster and audience in a short period of time, the audience members could not hear the audio of the host.
- Playing audio files with a sample rate of 48 kHz failed.
- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed.
API changes
Added
StartCameraCaptureStopCameraCaptureStartScreenCapture[2/2] (Windows, macOS)StopScreenCapture[2/2] (Windows, macOS)StartOrUpdateChannelMediaRelayStartOrUpdateChannelMediaRelayExGetNtpWallTimeInMsSetVideoScenarioGetCurrentMonotonicTimeInMsOnLocalVideoTranscoderErrorstartLocalVideoTranscoder(macOS, iOS, Android)updateLocalTranscoderConfiguration(macOS, iOS, Android)QueryScreenCaptureCapability(iOS, Android)SetScreenCaptureScenario(iOS, Android)CreateAudioCustomTrackDestroyAudioCustomTrackAudioTrackConfigAUDIO_TRACK_TYPEVIDEO_APPLICATION_SCENARIO_TYPESCREEN_CAPTURE_FRAMERATE_CAPABILITY- The
domainLimitandautoRegisterAgoraExtensionsmembers inRtcEngineContext - The
sourceTypeparameter inOnCaptureVideoFrameandOnPreEncodeVideoFramecallbacks - The
BACKGROUND_NONEandBACKGROUND_VIDEOenumerators inBACKGROUND_SOURCE_TYPE EnableInstantMediaRenderingStartMediaRenderingTracingStartMediaRenderingTracingExOnVideoRenderingTracingResultMEDIA_TRACE_EVENTVideoRenderingTracingInfo
Deprecated
EnableDualStreamMode[1/2]EnableDualStreamMode[2/2]StartChannelMediaRelayStartChannelMediaRelayExUpdateChannelMediaRelayUpdateChannelMediaRelayExOnChannelMediaRelayEventCHANNEL_MEDIA_RELAY_EVENT
Deleted
StartPrimaryScreenCapture(Windows)StartSecondaryScreenCapture(Windows)StopPrimaryScreenCapture(Windows)StopSecondaryScreenCapture(Windows)StartPrimaryCameraCapture(Windows)StartSecondaryCameraCapture(Windows, iOS)StopPrimaryCameraCapture(Windows)StopSecondaryCameraCapture(Windows, iOS)OnApiCallExecutedPublishCustomAudioTrackEnableAecinChannelMediaOptionsEnableRemoteSuperResolutionsuperResolutionTypeinRemoteVideoStats
v4.1.0
v4.1.0 was released on December 20, 2022.
Compatibility changes
This release deletes the EnableDualStreamMode [2/3] method and the sourceType parameter in EnableDualStreamMode [3/3], because the SDK supports enabling dual-stream mode for various video sources captured by custom capture or SDK; you no longer need to specify the video source type.
New features
1. In-ear monitoring
This release adds support for in-ear monitoring. You can call EnableInEarMonitoring to enable the in-ear monitoring function.
After successfully enabling the in-ear monitoring function, you can call RegisterAudioFrameObserver to register the audio observer, and the SDK triggers the OnEarMonitoringAudioFrame callback to report the audio frame data. You can use your own audio effect processing module to preprocess the audio frame data of the in-ear monitoring to implement custom audio effects. Agora recommends that you choose one of the following two methods to set the audio data format of the in-ear monitoring:
- Call the
SetEarMonitoringAudioFrameParametersmethod to set the audio data format of in-ear monitoring. The SDK calculates the sampling interval based on the parameters in this method and triggers theOnEarMonitoringAudioFramecallback based on the sampling interval. - Set the audio data format in the return value of the
GetEarMonitoringAudioParamscallback. The SDK calculates the sampling interval based on the return value of the callback and triggers theOnEarMonitoringAudioFramecallback based on the sampling interval.
To adjust the in-ear monitoring volume, you can call SetInEarMonitoringVolume.
2. Audio capture device test (Android)
This release adds support for testing local audio capture devices before joining a channel. You can call StartRecordingDeviceTest to start the audio capture device test. After the test is complete, call the StopPlaybackDeviceTest method to stop the audio capture device test.
3. Local network connection types
To make it easier for users to know the connection type of the local network at any stage, this release adds the GetNetworkType method. You can use this method to get the type of network connection in use. The available values are UNKNOWN, DISCONNECTED, LAN, WIFI, 2G, 3G, 4G, and 5G. When the local network connection type changes, the SDK triggers the OnNetworkTypeChanged callback to report the current network connection type.
4. Audio stream filter
This release introduces filtering audio streams based on volume. Once this function is enabled, the Agora server ranks all audio streams by volume and transports the three audio streams with the highest volumes to the receivers by default. The number of audio streams to be transported can be adjusted; contact support@agora.io to adjust this number according to your use-case.
Agora also supports publishers in choosing whether the audio streams being published are to be 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 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.
5. Dual-stream mode
This release optimizes the dual-stream mode. You can call EnableDualStreamMode and EnableDualStreamModeEx before and after joining a channel.
The implementation of subscribing to a low-quality video stream is expanded. The SDK enables the low-quality video stream auto mode on the sender by default (the SDK does not send low-quality video streams). Follow these steps to enable sending low-quality video streams:
- The host at the receiving end calls
SetRemoteVideoStreamTypeorSetRemoteDefaultVideoStreamTypeto initiate a low-quality video stream request. - After receiving the application, the sender automatically switches to sending low-quality video stream mode.
If you want to modify this default behavior, you can call SetDualStreamMode[1/2] or SetDualStreamMode[2/2] and set the mode parameter to DISABLE_SIMULCAST_STREAM (never send low-quality video streams) or ENABLE_SIMULCAST_STREAM (always send low-quality video streams).
6. Loopback device (Windows)
The SDK uses the playback device as the loopback device by default. As of 4.1.0, you can specify a loopback device separately and publish the captured audio to the remote end.
SetLoopbackDevice: Specifies the loopback device. If you do not want the current playback device to be the loopback device, you can call this method to specify another device as the loopback device.GetLoopbackDevice: Gets the current loopback device.FollowSystemLoopbackDevice: Whether the loopback device follows the default playback device of the system.
7. Spatial audio effect
This release adds the following features applicable to spatial audio effect use-cases, which can effectively enhance the user's sense-of-presence experience in virtual interactive use-cases.
- Sound insulation area: You can set a sound insulation area and sound attenuation parameter by calling
SetZones. When the sound source (which can be a user or the media player) and the listener belong to the inside and outside of the sound insulation area, the listener experiences an attenuation effect similar to that of the sound in the real environment when it encounters a building partition. You can also set the sound attenuation parameter for the media player and the user by callingSetPlayerAttenuationandSetRemoteAudioAttenuationrespectively, and specify whether to use that setting to force an override of the sound attenuation parameter inSetZones. - Doppler sound: You can enable Doppler sound by setting the
enable_dopplerparameter inSpatialAudioParams. The receiver experiences noticeable tonal changes in the event of a high-speed relative displacement between the source and receiver (such as in a racing game use-case). - Headphone equalizer: You can use a preset headphone equalization effect by calling the
SetHeadphoneEQPresetmethod to improve the audio experience for users with headphones.
8. Multiple cameras for video capture (iOS)
This release supports multi-camera video capture. You can call EnableMultiCamera to enable multi-camera capture mode, call StartSecondaryCameraCapture to start capturing video from the second camera, and then publish the captured video to the second channel.
To stop using multi-camera capture, you need to call StopSecondaryCameraCapture to stop the second camera capture, then call EnableMultiCamera and set enabled to false.
9. Headphone equalization effect
This release adds the SetHeadphoneEQParameters method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This mainly useful in spatial audio use-cases. If you cannot achieve the expected headphone EQ effect after calling SetHeadphoneEQPreset, you can call setHeadphoneEQParameters to adjust the EQ.
10. Encoded video frame observer
This release adds the SetRemoteVideoSubscriptionOptions and SetRemoteVideoSubscriptionOptionsEx methods. When you call the RegisterVideoEncodedFrameObserver method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them.
For more information about registering video observers and subscription options, see API reference.
11. MPUDP (MultiPath UDP) (Beta)
As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality.
To enable this feature, contact support@agora.io.
12. Register extensions (Windows)
This release adds the RegisterExtension method for registering extensions. When using a third-party extension, you need to call the extension-related APIs in the following order:
loadExtensionProvider -> registerExtension -> setExtensionProviderProperty -> enableExtension
13. Device management (Windows,macOS)
This release adds a series of callbacks to help you better understand the status of your audio and video devices:
OnVideoDeviceStateChanged: Occurs when the status of the video device changes.OnAudioDeviceStateChanged: Occurs when the status of the audio device changes.OnAudioDeviceVolumeChanged: Occurs when the volume of an audio device or app changes.
14. Camera capture options
This release adds the followEncodeDimensionRatio member in CameraCapturerConfiguration, which enables you to set whether to follow the video aspect ratio already set in SetVideoEncoderConfiguration when capturing video with the camera.
15. Multi-channel management
This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel use-cases.
- The
MuteLocalAudioStreamExandMuteLocalVideoStreamExmethods are used to cancel or resume publishing a local audio or video stream, respectively. - The
MuteAllRemoteAudioStreamsExandMuteAllRemoteVideoStreamsExare used to cancel or resume the subscription of all remote users to audio or video streams, respectively. - The
StartRtmpStreamWithoutTranscodingEx,StartRtmpStreamWithTranscodingEx,UpdateRtmpTranscodingEx, andStopRtmpStreamExmethods are used to implement Media Push in multi-channel use-cases. - The
StartChannelMediaRelayEx,UpdateChannelMediaRelayEx,PauseAllChannelMediaRelayEx,ResumeAllChannelMediaRelayEx, andStopChannelMediaRelayExmethods are used to relay media streams across channels in multi-channel use-cases. - Adds the
LeaveChannelEx[2/2] method. Compared with theLeaveChannelEx[1/2] method, a newoptionsparameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel use-case.
16. Video encoding preferences
In general use-cases, the default video encoding configuration meets most requirements. For certain specific use-cases, this release adds the advanceOptions member in VideoEncoderConfiguration for advanced settings of video encoding properties:
compressionPreference: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences.encodingPreference: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences.
17. Client role switching
In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the newRoleOptions parameter to the OnClientRoleChanged callback. The value of this parameter is as follows:
AUDIENCE_LATENCY_LEVEL_LOW_LATENCY(1): Low latency.AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY(2): Ultra-low latency.
18. Brand-new AI Noise Suppression
The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v4.0.0). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io.
Improvements
1. Video information change callback
This release optimizes the trigger logic of OnVideoSizeChanged, which can also be triggered and report the local video size change when StartPreview is called separately.
2. First video frame rendering(Windows)
This release speeds up the first video frame rendering time to improve the video experience.
3. Screen sharing
In addition to the usability enhancements detailed in the fixed issued section, this release includes a number of functional improvements to screen sharing, as follows:
Windows:
- New
minimizeWindowmember inScreenCaptureSourceInfoto indicate whether the target window is minimized. - New
enableHighLight,highLightColor, andhighLightWidthmembers inScreenCaptureParametersso that you can place a border around the target window or screen when screen sharing. - Compatibility with a greater number of mainstream apps, including WPS Office, Microsoft Office PowerPoint, Visual Studio Code, Adobe Photoshop, Windows Media Player, and Scratch.
- Compatibility with additional devices and operating systems, including: Window 8 systems, devices without discrete graphics cards, and dual graphics devices.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a device with an Intel Core i7-9750H CPU @ 2.60 GHz or better.
macOS:
- Compatibility with additional devices and use-cases, including dual graphics devices and screen sharing using external screens.
- Support for Ultra HD video (4K, 60 fps) on devices that meet the requirements. Agora recommends a 2021 16" M1 Macbook Pro or better.
4. Bluetooth permissions (Android)
To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the BLUETOOTH_CONNECT permission.
5. Relaying media streams across channels
This release optimizes the UpdateChannelMediaRelay method as follows:
- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8), and you need to call theUpdateChannelMediaRelaymethod again. - v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful.
6. Reconstructed AIAEC algorithm
This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other use-cases.
7. Virtual background
This release optimizes the virtual background algorithm. Improvements include the following:
- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is now extremely thin.
- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture.
- More application use-cases are now supported, and a user obtains a good virtual background effect day or night, indoors or out.
- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures.
Other improvements
This release includes the following additional improvements:
- Reduces the latency when pushing external audio sources.
- Improves the performance of echo cancellation when using the
AUDIO_SCENARIO_MEETINGscenario. - Improves the smoothness of SDK video rendering.
- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network use-cases.
- Reduces the CPU usage and power consumption of the local device when the host calls the
MuteLocalVideoStreammethod. (Windows, macOS)
Issues fixed
This release fixes the following issues:
Screen sharing issues
-
macOS
- In screen sharing use-cases on Mac devices, when the user minimized or closed a shared application window, another window of the same application was automatically shared.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, the shared window of a split screen was not highlighted correctly.
- In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- The uplink network quality reported by the
OnNetworkQualitycallback was inaccurate for the user who was sharing a screen.
-
Windows
- In screen sharing use-cases, when the user minimized and then restored the shared window, the remote video occasionally switched to the low-quality stream.
- When the host started screen sharing during live streaming, the audience members sometimes heard echoes.
- In screen sharing use-cases, the system volume of the local user occasionally decreased.
- In screen sharing use-cases, a black screen appeared when sharing a screen between a landscape monitor and a portrait monitor.
- In screen sharing use-cases with a window excluded, the application crashed when the specified shared area exceeded the screen resolution.
- The application failed to exclude a window using the
StartScreenCaptureByDisplayIdmethod for screen sharing. - In screen sharing use-cases, the screen seen by the remote user occasionally crashed, lagged, or displayed a black screen.
- In screen sharing use-cases, when the user shared the screen by window, the mouse in the shared screen was not in its actual position.
- When switching from a non-screen sharing use-case to a screen sharing one, the application occasionally crashed if the user did not switch the resolution accordingly.
Other issues
-
All
- The call
GetExtensionPropertyfailed and returned an empty string. - When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened.
- When calling
SetVideoEncoderConfigurationExin the channel to increase the resolution of the video, it occasionally failed. - When using the Agora media player to play videos, after you played and paused the video, and then called the seek method to specify a new position for playback, the video image occasionally remained unchanged; if you called the
Resumemethod to resume playback, the video was sometimes played at a speed faster than the original one. - Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming.
- Crashes occurred if you call the
RegisterAudioEncodedFrameObservermethod after failing to initializeRtcEngine.
- The call
-
Windows
- When
StopPreviewwas called to disable the local video preview, the virtual background that had been set up was occasionally invalidated. - Crashes occasionally occurred when exiting a channel and joining it multiple times with virtual background enabled and set to blur effect.
- If the local client used a camera with a resolution set to 1920 × 1080 as the video capture source, the resolution of the remote video was occasionally inconsistent with the local client.
- When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set inSetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting.
- When
-
Android
- After calling
SetCloudProxyto set the cloud proxy, callingJoinChannelExto join multiple channels failed. - In online meeting use-cases, the local user and the remote user occasionally could not hear each other after the local user was interrupted by a call.
- After calling
-
iOS
- Calling
StartAudioMixingto play music files in theipod-library://itempath failed. - Different timestamps for audio and video data were obtained simultaneously and separately via
OnRecordAudioFrameandOnCaptureVideoFramecallbacks.
- Calling
-
macOS
- After starting and stopping the audio capture device test, there was no sound when the audio playback device was subsequently started.
- The
OnVideoPublishStateChangedcallback reported an inaccurate video source type. - When capturing video through the camera, if the video aspect ratio set in
CameraCapturerConfigurationwas inconsistent with that set inSetVideoEncoderConfiguration, the aspect ratio of the local video preview was not rendered according to the latter setting.
API changes
Added
EnableInEarMonitoringSetEarMonitoringAudioFrameParametersOnEarMonitoringAudioFrameSetInEarMonitoringVolumeGetEarMonitoringAudioParamsStartRecordingDeviceTest(Android)StopRecordingDeviceTest(Android)GetNetworkTypeSetRecordingDeviceVolume(Windows)isAudioFilterableinChannelMediaOptionsSetDualStreamMode[1/2]SetDualStreamMode[2/2]SetDualStreamModeExSIMULCAST_STREAM_MODESetLoopbackDeviceGetLoopbackDeviceFollowSystemLoopbackDeviceSetZonesSetPlayerAttenuationSetRemoteAudioAttenuationMuteRemoteAudioStreamSpatialAudioParamsSetHeadphoneEQPresetHEADPHONE_EQUALIZER_PRESETEnableMultiCamera(iOS)StartSecondaryCameraCapture(iOS)StopSecondaryCameraCapture(iOS)SetHeadphoneEQParametersSetRemoteVideoSubscriptionOptionsSetRemoteVideoSubscriptionOptionsExLeaveChannelEx[2/2]VideoSubscriptionOptionsMuteLocalAudioStreamExMuteLocalVideoStreamExMuteAllRemoteAudioStreamsExMuteAllRemoteVideoStreamsExStartRtmpStreamWithoutTranscodingExStartRtmpStreamWithTranscodingExUpdateRtmpTranscodingExStopRtmpStreamExStartChannelMediaRelayExUpdateChannelMediaRelayExPauseAllChannelMediaRelayExResumeAllChannelMediaRelayExStopChannelMediaRelayExfollowEncodeDimensionRatioinCameraCapturerConfigurationhwEncoderAcceleratinginLocalVideoStatsadvanceOptionsinVideoEncoderConfigurationnewRoleOptionsinOnClientRoleChangedAdjustUserPlaybackSignalVolumeExEnableAudioVolumeIndicationExOnVideoDeviceStateChanged(Windows,macOS)OnAudioDeviceStateChanged(Windows,macOS)OnAudioDeviceVolumeChanged(Windows,macOS)SetParametersinIRtcEngine(Windows)
Modified
EnableDualStreamMode[3/3]
Deprecated
StartEchoTest[2/3]OnApiCallExecuted. Use the callbacks triggered by specific methods instead.
Deleted
EnableDualStreamMode[2/3]- Removes deprecated member parameters
backgroundImageandwatermarkinLiveTranscodingclass (Android/iOS/macOS) - Removes
RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8) inOnChannelMediaRelayEvent callback
v4.0.0
v4.0.0 was released on September 28, 2022.
Compatibility changes
This release has optimized the implementation of some features, resulting in incompatibility with v4.0.0. The following are the main features with compatibility changes:
- Multiple channel
- Media stream publishing control
- Warning codes
After upgrading the SDK, you need to update the code in your app according to your business use-cases. For details, see Migration guide.
New features
1. Multiple media tracks
This release supports one IRtcEngine instance to collect multiple audio and video sources at the same time and publish them to the remote users by setting IRtcEngineEx and ChannelMediaOptions.
- After calling
JoinChannelto join the first channel, callJoinChannelExmultiple times to join multiple channels, and publish the specified stream to different channels through different user ID (localUid) andChannelMediaOptionssettings. - You can simultaneously publish multiple sets of video streams captured by multiple cameras or screen sharing by setting
publishSecondaryCameraTrackandpublishSecondaryScreenTrackinChannelMediaOptions. (Windows)
This release adds CreateCustomVideoTrack method to implement video custom capture. You can refer to the following steps to publish multiple custom captured video in the channel:
- Create a custom video track: Call the
CreateCustomVideoTrackmethod to create a video track, and get the video track ID. - Set the custom video track to be published in the channel: In each channel's
ChannelMediaOptions, set thecustomVideoTrackIdparameter to the ID of the video track you want to publish, and setpublishCustomVideoTracktotrue. - Pushing an external video source: Call
PushVideoFrame, and specifyvideoTrackIdas the ID of the custom video track in step 2 in order to publish the corresponding custom video source in multiple channels.
You can also experience the following features with the multi-channel capability:
- Publish multiple sets of audio and video streams to the remote users through different user IDs (
uid). - Mix multiple audio streams and publish to the remote users through a user ID (
uid). - Combine multiple video streams and publish them to the remote users through a user ID (
uid).
2. Ultra HD resolution (Beta) (Windows, macOS)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capture, encoding, decoding and rendering, and now supports 4K resolution. The improved FEC (Forward Error Correction) algorithm enables adaptive switches according to the frame rate and number of video frame packets, which further reduces the video stuttering rate in 4K scenes.
Additionally, you can set the encoding resolution to 4K (3840 × 2160) and the frame rate to 60 fps when calling SetVideoEncoderConfiguration. The SDK supports automatic fallback to the appropriate resolution and frame rate if your device does not support 4K.
This feature has certain requirements with regards to device performance and network bandwidth, and the supported upstream and downstream frame rates vary on different platforms. To experience this feature, contact support@agora.io.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
3. Full HD and Ultra HD resolution (Beta) (Android, iOS)
In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the dimensions parameter to 1920 × 1080 or higher resolution when calling the SetVideoEncoderConfiguration method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution.
The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to enable this feature, contact technical support.
High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance.
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
4. Agora media player
To make it easier for users to integrate the Agora SDK and reduce the SDK's package size, this release introduces the Agora media player. You can then call the methods in the IMediaPlayer class to experience a series of functions:
- Plays local and online media files.
- Preloads media files.
- Changes the CDN route for playing media files according your network conditions.
- Shares the audio and video streams being played with remote users.
- Caches data when playing media files.
5. Ultra-high audio quality
To make the audio clearer and restore more details, this release adds the ULTRA_HIGH_QUALITY_VOICE enumeration. In use-cases that mainly feature the human voice, such as chat or singing, you can call SetVoiceBeautifierPreset and use this enumeration to experience ultra-high audio quality.
6. Spatial audio
NOTE: This feature is in experimental status. To enable this feature, contact Technical Support.
You can set the spatial audio for the remote user as following:
-
Local Cartesian Coordinate System Calculation Solution: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio by calculating the spatial coordinates of the remote user. You need to callUpdateSelfPositionandUpdateRemotePositionto update the spatial coordinates of the local and remote users respectively, so that the local user can hear the spatial audio of the remote user. -
Local Cartesian Coordinate System Calculation Solution: This solution uses the
ILocalSpatialAudioEngineclass to implement spatial audio. You need to callUpdateSelfPositionandUpdatePlayerPositionInfoto update the spatial coordinates of the local user and media player, respectively, so that the local user can hear the spatial audio effect of media player.
7. Real-time chorus
This release gives real-time chorus the following abilities:
- Two or more choruses are supported.
- Each singer is independent of each other. If one singer fails or quits the chorus, the other singers can continue to sing.
- Very low latency experience. Each singer can hear each other in real time, and the audience can also hear each singer in real time.
This release adds the AUDIO_SCENARIO_CHORUS enumeration in AUDIO_SCENARIO_TYPE. With this enumeration, users can experience ultra-low latency in real-time chorus when the network conditions are good.
8. Enhanced channel management
To meet the channel management requirements of various business use-cases, this release adds the following functions to the ChannelMediaOptions structure:
- Sets or switches the publishing of multiple audio and video sources.
- Sets or switches channel profile and user role.
- Sets or switches the stream type of the subscribed video.
- Controls audio publishing delay.
Set ChannelMediaOptions when calling JoinChannel or JoinChannelEx to specify the publishing and subscription behavior of a media stream, for example, whether to publish video streams captured by cameras or screen sharing, and whether to subscribe to the audio and video streams of remote users. After joining the channel, call UpdateChannelMediaOptions to update the settings in ChannelMediaOptions at any time, for example, to switch the published audio and video sources.
9. Screen sharing
This release optimizes the screen sharing function. You can enable this function through the following ways.
On Windows and macOS:
- Call the
StartScreenCaptureByDisplayIdmethod before joining a channel, and then callJoinChannel[2/2]to join a channel and setpublishScreenTrackorpublishSecondaryScreenTrackastrue. - Call the
StartScreenCaptureByDisplayIdmethod after joining a channel, and then callUpdateChannelMediaOptionsto setpublishScreenTrackorpublishSecondaryScreenTrackastrue.
On Android and iOS:
- Call the
StartScreenCapturemethod before joining a channel, and then callJoinChannel[2/2]to join a channel and setpublishScreenCaptureVideoastrue. - Call the
StartScreenCapturemethod after joining a channel, and then callUpdateChannelMediaOptionsto setpublishScreenCaptureVideoastrue.
10. Subscription allowlists and blocklists
This release introduces subscription allowlists and blocklists for remote audio and video streams. You can add the user ID that you want to subscribe to in your allowlist, or in your blocklist if you do not want to subscribe to. You can experience this feature through the following APIs, and in use-cases that involve multiple channels, you can call the following methods in the IRtcEngineEx interface.
SetSubscribeAudioBlacklist:Set the audio subscription blocklist.SetSubscribeAudioWhitelist:Set the audio subscription allowlist.SetSubscribeVideoBlacklist:Set the video subscription blocklist.SetSubscribeVideoWhitelist:Set the video subscription allowlist.
If a user is added in a blocklist and allowlist at the same time, only the blocklist takes effect.
11. Set audio scenarios
To make it easier to change audio scenarios, this release adds the SetAudioScenario method. For example, if you want to change the audio scenario from AUDIO_SCENARIO_DEFAULT to AUDIO_SCENARIO_GAME_STREAMING when you are in a channel, you can call this method.
12. Replace video feeds with images
This release supports replacing video feeds with images when publishing video streams. You can call the EnableVideoImageSource method to enable this function and choose your own images through the options parameter. If you disable this function, the remote users see the video feeds that you publish.
13. Local video transcoder
This release introduces local video transcoder with which you can locally merge multiple video streams into one. Common use-cases are as follows:
When streaming or using media push, you can merge the frames of multiple anchors into one locally.
To do this, you should merge multi-channel video streams collected locally (such as video captured by camera, screen sharing stream, video files and pictures) into one video stream. Then, release the merged stream in the channel.
You can call the StartLocalVideoTranscoder method to enable the local video transcoder and call the StopLocalVideoTranscoder method to stop the local video transcoder; After the local video transcoder is enabled, you can call UpdateLocalTranscoderConfiguration to update the configuration of the local video transcoder.
14. Video device management
A video capture device may support a variety of video formats, each of which supports a different combination of video frame width, video frame height, and frame rate.
This release introduces the NumberOfCapabilities and GetCapability method to obtain the number of video formats supported by video capture devices and the details of video frames under specified video formats. When you call the StartPrimaryCameraCapture or StartSecondaryCameraCapture method to capture video using camera, you can obtain the video with the specified video format.
The SDK will automatically select the video format for video capture equipment according to your settings in VideoEncoderConfiguration. In general, you don't need to use this set of new methods.
Improvements
1. Fast channel switching
This release can achieve the same switching speed as SwitchChannel in v4.0.0 through theLeaveChannel and JoinChannel methods so that you don't need to take the time to call the SwitchChannel method.
2. Push external video frames
This releases supports pushing video frames in I422 format. You can call the PushVideoFrame method to push such video frames to the SDK.
3. Monitor the width and height of videos
This adds the OnTextureSizeModify callback that can be used to monitor any change in the width and height of videos.
4. Voice pitch of the local user
This release adds voicePitch in AudioVolumeInfo of OnAudioVolumeIndication. You can use voicePitch to get the local user's voice pitch and perform business functions such as rating for singing.
5. Video preview
This release improves the implementation logic of StartPreview. You can call the StartPreview method to enable video preview at any time.
6. Video types of subscription
You can call the SetRemoteDefaultVideoStreamType method to choose the video stream type when subscribing streams.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.5.1
v4.5.1 was released on March 13, 2025.
New features
-
AI conversation scenario
This version adds the
AUDIO_SCENARIO_AI_CLIENTaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions.
Improvements
- Reduces the SDK initialization time on specific device models. (iOS)
Issues fixed
This release fixes the following issues:
- Apps that integrated the Agora SDK and set the
targetSdkVersionto 34 encountered crashes when attempting to enable screen sharing for the first time on an Android 14 system. (Android) - When joining two or more channels simultaneously, and calling the
takeSnapshotExmethod to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
pausemethod to pause playback, then callingseekto move to a specified position, and finally callingplayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
getPlaySrcdid not change after calling theswitchSrcmethod to switch to a new media resource. - When using Bluetooth headphones on specific device models for audio and video interactions, adjusting the phone volume would occasionally change the media volume instead of the Bluetooth volume. (Android)
- During audio and video interactions, the local user occasionally experienced a black screen when watching the video streams of remote users. (Android)
- On specific device models, after calling
setCameraExposureFactorto set the exposure coefficient of the current camera at a specific angle of the device, the video screen occasionally became dark when the device was moved to another angle. (Android) - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption. (Android)
- When pushing video frames in i420 format to the channel, using CVPixelBuffer to handle these frames caused a crash. (iOS)
- Calling
setupLocalVideoto set up two views, then callingenableFaceDetectionto start face detection, no face information can be detected in the subsequently passed views. (iOS) - In a screen sharing scenario, the receiving-end user saw a green line on the shared image. (iOS)
- In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v4.5.0
v4.5.0 was released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression. The
VIDEO_DENOISER_LEVELremovesVIDEO_DENOISER_LEVEL_STRENGTH. Instead, after enabling video noise suppression by callingsetVideoDenoiserOptions, you can call thesetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed insetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video noise suppression first and use specific settings as detailed in
setLowlightEnhanceOptions. -
Changes in camera plug and unplug status (macOS, Windows)
In previous versions, when the camera was unplugged and replugged, the
onVideoDeviceStateChangedcallback would report the device status asMEDIA_DEVICE_STATE_ACTIVE(1)(device in use). Starting from this version, after the camera is replugged, the device status will change toMEDIA_DEVICE_STATE_IDLE(0)(device ready). -
16 KB memory page size (Android)
Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in Support 16 KB page sizes. To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.
-
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
COMPRESSION_PREFERENCEenumeration class, a newPREFER_COMPRESSION_AUTO (-1)enumeration is added, replacing the originalPREFER_QUALITY (1)as the default value. In this mode, the SDK will automatically choose betweenPREFER_LOW_LATENCYandPREFER_QUALITYbased on your video scene settings to achieve the best user experience. - In the
DEGRADATION_PREFERENCEenumeration class, a newMAINTAIN_AUTO (-1)enumeration is added, replacing the originalMAINTAIN_QUALITY (1)as the default value. In this mode, the SDK will automatically choose betweenMAINTAIN_FRAMERATE,MAINTAIN_BALANCED, andMAINTAIN_RESOLUTIONbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
New features
-
Live show scenario
This version adds the
APPLICATION_SCENARIO_LIVESHOW(3)(Live Show) enumeration toVIDEO_APPLICATION_SCENARIO_TYPE. You can callsetVideoScenarioto set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to callenableInstantMediaRendering) to achieve better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
setLocalRenderTargetFpsandsetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
setFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Local audio mixing
This version introduces the local audio mixing feature. You can call the
startLocalAudioMixermethod to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call thestopLocalAudioMixermethod to stop local audio mixing. During the mixing process, you can call theupdateLocalAudioMixerConfigurationmethod to update the configuration of the audio streams being mixed.Example use cases for this feature include:
- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
- In live streaming use-cases, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
- In educational use-cases, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
-
External
MediaProjection(Android)This version introduces the
setExternalMediaProjectionmethod, which allows you to set an externalMediaProjectionand replace theMediaProjectionapplied by the SDK.If you have the capability to apply for
MediaProjectionon your own, you can use this feature to achieve more flexible screen capture. -
EGL context (Android)
This version introduces the
setExternalRemoteEglContextmethod, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. -
Color space settings
This version adds the
colorSpaceparameter toVideoFrameandExternalVideoFrame. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -
Other features
- The
onLocalVideoStateChangedcallback adds theLOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTEDenumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) - The
MEDIA_DEVICE_STATE_TYPEadds theMEDIA_DEVICE_STATE_PLUGGED_INenumeration, indicating that the device has been plugged in. (Windows)
- The
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
takeSnapshot [2/2]andtakeSnapshotEx [2/2]methods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Custom audio capture improvements
This version adds the
enableAudioProcessingmember parameter toAudioTrackConfig, which is used to control whether to enable 3A audio processing for custom audio capture tracks of theAUDIO_TRACK_DIRECTtype. The default value of this parameter isfalse, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -
Other improvements
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
- Optimizes the logic for calling
queryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices. (Windows)
- When calling
switchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theonPlayerEventcallback will report thePLAYER_EVENT_SWITCH_ERRORevent, indicating an error occurred during media resource switching. - When calling
setPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
Issues fixed
This version fixes the following issues:
- When calling
startScreenCaptureByWindowIdto share the screen, the window capture area specified byregionRectwas inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) - When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
onAudioVolumeIndicationcallback was incorrect. (Android) - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
muteRemoteVideoStream(uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality video stream, which is not as expected. (Android) - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
- When calling
followSystemRecordingDeviceorfollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callbackonLocalAudioStateChangedis not triggered when the audio device is removed. (Windows) - Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
- No sound when playing online media resources using the media player after the app starts. (iOS)
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
- Calling
startAudioMixing [1/2]and then immediately callingpauseAudioMixingto pause the music file playback does not take effect.
v4.4.0
v4.4.0 was released on August 29, 2024.
Compatibility changes
-
Changes to API usage
Starting from this release, the [Get](https://api-ref.agora.io/en/video-sdk/unreal/4.x/API/class_irtcengine .html#api_createagorartcengine) and [Release](https://api-ref.agora.io/en/video-sdk/unreal/4.x/API/class_irtcengine .html#api_irtcengine_release) methods are used for creation and destruction of engine instances, replacing the previous
createAgoraRtcEngineandreleasemethods. This change simplifies instance management. Details are as follows:-
Creating an engine instance: Call [Get](https://api-ref.agora.io/en/video-sdk/unreal/4.x/API/class_irtcengine .html#api_createagorartcengine) to create an
IRtcEngineinstance and return a pointer toAgoraUERtcEngine. You can directly call methods under [IRtcEngine](https://api-ref.agora.io/en/video-sdk/unreal/4.x/API/class_irtcengine .html#class_irtcengine) using this pointer.// Example of joining a channel using joinChannel AgoraUERtcEngine::Get()->joinChannel(TCHAR_TO_UTF8(*Token), TCHAR_TO_UTF8(*ChannelName), 0, ChannelMediaOptions); -
Destroying an engine instance: After calling Get to create an
IRtcEngineinstance, call Release to destroy the engine instance and release related resources.AgoraUERtcEngine::Release();
-
New features
-
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod. Pass in the sound effect types supported in theVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on. -
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.4.0 to the Apple App Store, add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
VIDEO_SOURCE_CAMERA_THIRD(11) andVIDEO_SOURCE_CAMERA_FOURTH(12) inVIDEO_SOURCE_TYPEadd support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by callingstartCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackinChannelMediaOptionsadd support for Android. Set these parameters totruewhen joining a channel withjoinChannel[2/2] to publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added toCameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by callingstartCameraCapturewith the specificcameraId.
-
-
Select different audio tracks for local playback and streaming
This release introduces the
selectMultiAudioTrackmethod that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, open the media file through theopenWithMediaSourcemethod and enable this function by setting theenableMultiAudioTrackparameter inMediaSource. -
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_IMAGE_MODERATIONenumeration is added inCONTENT_INSPECT_TYPE, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
Additionally, this version introduces the
enableContentInspectExmethod, which supports simultaneous screenshot and upload of multiple video streams. - The
-
ID3D11Texture2D rendering (Windows)
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set
formattoVIDEO_TEXTURE_ID3D11TEXTURE2Dwhen pushing external raw video frames to the SDK by callingpushVideoFrame. By setting thetextureSliceIndexproperty, you can determine the ID3D11Texture2D texture object to use. -
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user ID. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can prevent repeated application of tokens every time users join a new channel, which reduces the pressure on your token server. See Generate wildcard tokens.
Note
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelandpreloadChannelWithUserAccountmethods, which allows a user whose role is set as 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 and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to prevent repeated application of tokens every time you join a new channel, thus saving the time for switching between channels. See Generate wildcard tokens.
-
Publishing video streams from different sources (Windows, macOS)
This release adds the following members in
ChannelMediaOptionsto allow you to publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
Note
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
:::
Improvements
-
Header file management simplification
To reference other header files, you can add them uniformly to
AgoraHeaderBase.h, simplifying the management of header files in the project and facilitating future maintenance. -
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels.
Issues fixed
In Unreal Engine 5.3 and 5.4, adding the following code to the /Source/xxx.Target.cs file in your project to solve iOS memory allocation issues may lead to missing iOS compilation symbols. To address this issue, this version adds three function definitions (StdMalloc, StdRealloc, and StdFree) related to the standard library in the UnrealMemory.cpp file, ensuring proper handling of memory management needs when using the standard memory allocator (iOS).
if (Target.Platform == UnrealTargetPlatform.IOS)
{
bOverrideBuildEnvironment = true;
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");
}v4.2.1
v4.2.1 was released on November 16, 2023.
This the first GA release of the SDK. It provides a simple and user-friendly real-time interactive solution for Unreal Engine users.
Unreal Engine
The SDK for Unreal Engine provides a powerful set of C++ APIs, allowing developers to easily build games or apps with real-time interactive features. It can also leverage the powerful graphics engine functionality of Unreal Engine to add various visual effects and interactive performance to the app, providing users with a more immersive experience.
Unreal Blueprint
The SDK for Unreal Blueprint offers a visual interface and a set of intuitive and easy-to-use nodes. This enables developers to effortlessly implement real-time interactive features in games or apps within the Unreal project. No need to know C++ - just drag, connect, and configure nodes.
Read more:
Agora provides an open source example project on GitHub for your reference.
If you have already integrated the 3.x version of the SDK and wish to upgrade to this version, please refer to Migration Guide for upgrade instructions.
This page provides the release notes for the Video SDK release streams used by Video Calling.
Video SDK
Known issues
v4.5.1
v4.5.1 was released on March 13, 2025.
New features
-
AI conversation scenario
This version adds the
AUDIO_SCENARIO_AI_CLIENTaudio scenario specifically designed for interacting with the conversational AI agent created by Conversational AI Engine. This scenario optimizes the audio transmission algorithm based on AI-generated voice characteristics, ensuring stable voice data transmission even in weak network conditions with up to 80% packet loss. It enhances conversation continuity and reliability while adapting to complex network conditions.
Improvements
- Reduces the SDK initialization time on specific device models. (iOS)
Issues fixed
This release fixes the following issues:
- Apps that integrated the Agora SDK and set the
targetSdkVersionto 34 encountered crashes when attempting to enable screen sharing for the first time on an Android 14 system. (Android) - When joining two or more channels simultaneously, and calling the
TakeSnapshotExmethod to take screenshots of the local video streams in each channel consecutively, the screenshot of the first channel failed. - When using the
Pausemethod to pause playback, then callingSeekto move to a specified position, and finally callingPlayto continue playback, the Media Player resumed from the position where it was paused, not the new specified position. - When using the Media Player, the file path of the media resource returned by the
GetPlaySrcdid not change after calling theSwitchSrcmethod to switch to a new media resource. - When using Bluetooth headphones on specific device models for audio and video interactions, adjusting the phone volume would occasionally change the media volume instead of the Bluetooth volume. (Android)
- During audio and video interactions, the local user occasionally experienced a black screen when watching the video streams of remote users. (Android)
- On specific device models, after calling
SetCameraExposureFactorto set the exposure coefficient of the current camera at a specific angle of the device, the video screen occasionally became dark when the device was moved to another angle. (Android) - When playing a CDN live stream, the video occasionally froze for an extended period after recovering from an interruption. (Android)
- When pushing video frames in i420 format to the channel, using CVPixelBuffer to handle these frames caused a crash. (iOS)
- Calling
SetupLocalVideoto set up two views, then callingEnableFaceDetectionto start face detection, no face information can be detected in the subsequently passed views. (iOS) - In a screen sharing scenario, the receiving-end user saw a green line on the shared image. (iOS)
- In the interactive live streaming scenario, after joining a channel to watch live streams using
stringuser id, the audience members occasionally saw that the audio was not synchronized with the video. - Plugins sometimes did not work when using AI noise suppression and AI echo cancellation plugins at the same time.
v4.5.0
v4.5.0 was released on December 10, 2024.
Compatibility changes
This version includes optimizations to some features, including changes to SDK behavior and API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.
-
Changes in strong video noise suppression implementation
This version adjusts the implementation of strong video noise suppression. The
VIDEO_DENOISER_LEVEL_STRENGTHenumeration is removed fromEUABT_VIDEO_DENOISER_LEVEL. Instead, after enabling video noise suppression by callingSetVideoDenoiserOptions, you can call theSetBeautyEffectOptionsmethod to enable the beauty skin smoothing feature. Using both together will help achieve better video noise suppression effects. For strong noise suppression, it is recommended to set the skin smoothing parameters as detailed inSetVideoDenoiserOptions.Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, enable video noise suppression first and use specific settings as detailed in
SetLowlightEnhanceOptions. -
Changes in camera plug and unplug status (macOS, Windows)
In previous versions, when the camera was unplugged and replugged, the
OnVideoDeviceStateChangedcallback would report the device status asMEDIA_DEVICE_STATE_ACTIVE(1)(device in use). Starting from this version, after the camera is replugged, the device status will change toMEDIA_DEVICE_STATE_IDLE(0)(device ready). -
Changes in video encoding preferences
To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:
- In the
ECOMPRESSION_PREFERENCEenumeration class, a newPREFER_COMPRESSION_AUTO (-1)enumeration is added, replacing the originalPREFER_QUALITY (1)as the default value. In this mode, the SDK will automatically choose betweenPREFER_LOW_LATENCYorPREFER_QUALITYbased on your video scene settings to achieve the best user experience. - In the
EUABT_DEGRADATION_PREFERENCEenumeration class, a newMAINTAIN_AUTO (-1)enumeration is added, replacing the originalMAINTAIN_QUALITY (1)as the default value. In this mode, the SDK will automatically choose betweenMAINTAIN_FRAMERATE,MAINTAIN_BALANCED, orMAINTAIN_RESOLUTIONbased on your video scene settings to achieve the optimal overall quality of experience (QoE).
- In the
-
16 KB memory page size (Android)
Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in Support 16 KB page sizes. To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.
New features
-
Live show scenario
This version adds the
APPLICATION_SCENARIO_LIVESHOW(3)(Live Show) enumeration toEVIDEO_APPLICATION_SCENARIO_TYPE. You can callSetVideoScenarioto set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to callEnableInstantMediaRendering) to achieve better image quality and bandwidth efficiency. -
Maximum frame rate for video rendering
This version adds the
SetLocalRenderTargetFpsandSetRemoteRenderTargetFpsmethods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.In use-cases where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.
-
Filter effects
This version introduces the
SetFilterEffectOptionsmethod. You can pass a cube map file (.cube) in theconfigparameter to implement custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-inbuilt_in_whiten_filter.cubefile for quickly achieving a whitening filter effect. -
Other features
- The
OnLocalVideoStateChangedcallback adds theLOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTEDenumeration, indicating that the currently used video capture device has been disconnected (for example, unplugged). (Windows) EMEDIA_DEVICE_STATE_TYPEadds theMEDIA_DEVICE_STATE_PLUGGED_INenumeration, indicating that the device has been plugged in. (Windows)
- The
Improvements
-
Virtual background algorithm optimization
This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.
-
Snapshot at specified video observation points
This version introduces the
TakeSnapshotWithConfigandTakeSnapshotWithConfigExmethods. You can use theconfigparameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -
Other features
- In use-cases where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
- Optimizes the logic for calling
QueryDeviceScoreto obtain device score levels, improving the accuracy of the score results. - Supports using virtual cameras in YV12 format as video capture devices. (Windows)
- When calling
SwitchSrcto switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, theOnPlayerEventcallback will report thePLAYER_EVENT_SWITCH_ERRORevent, indicating an error occurred during media resource switching. - When calling
SetPlaybackSpeedto set the playback speed of an audio file, the minimum supported speed is 0.3x.
Issues fixed
This version fixes the following issues:
- When calling
StartScreenCaptureByWindowIdto share the screen, the window capture area specified byregionRectwas inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) - When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
- During audio and video interaction, after being interrupted by a system call, the user volume reported by the
OnAudioVolumeIndicationcallback was incorrect. (Android) - When the receiving end subscribes to the low-quality video stream by default and does not automatically subscribe to any video stream when joining the channel, calling
MuteRemoteVideoStream(uid, false)after joining the channel to resume receiving the video stream results in receiving the high-quality video stream. (Android) - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
- When calling
FollowSystemRecordingDeviceorFollowSystemPlaybackDeviceto set the audio capture or playback device used by the SDK to not follow the default system audio playback device, the local audio state callbackOnLocalAudioStateChangedis not triggered when the audio device is removed. (Windows) - Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
- In live streaming use-cases, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
- No sound when playing online media resources using the media player after the app starts. (iOS)
- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
- Calling
StartAudioMixingand then immediately callingPauseAudioMixingto pause the music file playback does not take effect. - Occasional crashes during audio and video interaction. (Android)
v4.4.0
v4.4.0 was released on August 29, 2024.
Compatibility changes
This version simplifies the way methods are called and callbacks are implemented in Blueprints.
-
Method calls
In this version, there is no need to manually maintain instance variables. You can directly retrieve the desired class at any point in your Blueprint using the
Getnode, and connect the appropriate function nodes to complete the call. This improvement makes calling methods in Blueprints more convenient and streamlines the development process.The image below demonstrates how to obtain the IRtcEngine instance through the GetAgoraRtcEngine node and connect it to the Initialize node to perform initialization:
-
Callback implementation
This version introduces the concept of
CallbackExecutor. You can bind the correspondingCallbackExecutorin Blueprints usingEventHandler, allowing for the execution of callbacks. This improvement offers the following advantages:- Callback implementation is more convenient.
- Enhanced security, with bound callbacks executing without causing crashes when destroyed.
- Easier reuse and code management.
The image below demonstrates how to obtain
EventHandlerthrough theGetEventHandlernode and connect it to theAddBlueprintCallbackExecutornode to bind the specifiedCallbackExecutor, thereby executing the related callbacks under the IRtcEngineEventHandler interface class:
New features
-
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
EnableVoiceAITunermethod. Pass in the sound effect types supported in theEVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on. -
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.4.0 to the Apple App Store, add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
VIDEO_SOURCE_CAMERA_THIRD(11) andVIDEO_SOURCE_CAMERA_FOURTH(12) inEVIDEO_SOURCE_TYPEadd support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by callingStartCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackinFChannelMediaOptionsadd support for Android. Set these parameters totruewhen joining a channel withJoinChannelWithOptionsto publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added toFCameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by callingStartCameraCapturewith the specificcameraId.
-
-
Select different audio tracks for local playback and streaming
This release introduces the
SelectMultiAudioTrackmethod that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, open the media file through theOpenWithMediaSourcemethod and enable this function by setting theEnableMultiAudioTrackparameter inFAgoraMediaSource. -
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_IMAGE_MODERATIONenumeration is added inECONTENT_INSPECT_TYPE, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inFContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
Additionally, this version introduces the
EnableContentInspectExmethod, which supports simultaneous screenshot and upload of multiple video streams. - The
-
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user ID. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can prevent repeated application of tokens every time users join a new channel, which reduces the pressure on your token server. See Generate wildcard tokens.
Note
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
PreloadChannelandPreloadChannelWithUserAccountmethods, which allow a user whose role is set as 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 and see the host.When preloading more than one channel, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you join a new channel, thus saving the time for switching between channels. See Generate wildcard tokens.
-
Publishing video streams from different sources (Windows, macOS)
This release adds the following members in
FChannelMediaOptionsto allow you to publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
Note
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
:::
Improvements
-
Improved rendering usability
When using the UImage widget, you can control the size of the displayed image by setting the properties of the Brush. Starting from this version, the Size To Content option is supported, allowing UImage to automatically adjust to the size of the incoming video frames from the remote end. This improvement enhances the usability of image rendering.
-
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
StartOrUpdateChannelMediaRelayandStartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels.
Issues fixed
In Unreal Engine 5.3 and 5.4, adding the following code to the /Source/xxx.Target.cs file in your project to solve iOS memory allocation issues may lead to missing iOS compilation symbols. To address this issue, this version adds three function definitions (StdMalloc, StdRealloc, and StdFree) related to the standard library in the UnrealMemory.cpp file, ensuring proper handling of memory management needs when using the standard memory allocator (iOS).
if (Target.Platform == UnrealTargetPlatform.IOS)
{
bOverrideBuildEnvironment = true;
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");
}v4.2.1
This version was released on November 16, 2023.
This the first release of Video SDK for Unreal Blueprint.
New features
Video SDK for Unreal Blueprint provides a simple and user-friendly real-time interactive solution for Unreal Engine users.
Video SDK for Unreal Blueprint offers a visual interface and a set of intuitive and easy-to-use nodes. This enables developers to effortlessly implement real-time interactive features in games or apps within the Unreal project. You don't need to know C++, just drag, connect, and configure nodes.
To integrate real-time engagement functionality into your app using Video SDK for Unreal Engine, see:
Agora provides the open source example project on GitHub for your reference.
Extensions
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 recommends 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 and limitations
-
Safari and 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, Agora recommends 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 or 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 or 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 the Virtual Background 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 improve video quality without altering the resolution, thereby optimizing the viewing experience at the receiving end. For integration steps, see Super Clarity.
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 is the first version of agora-extension-super-clarity.
Watermark extension
v1.0.0
Released on November 18, 2025.
This is the first version of agora-extension-video-watermark. For integration steps, see 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 is the first version of agora-extension-videp-compositor. For integration steps, see 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 is the first version of agora-extension-beauty-effect. For integration steps, see Beauty Effect.
MetaKit extension
v2.2.0
v2.2.0 was released on September 13, 2024.
New features
Stickers
This version adds the sticker feature that uses the face capture driver and follows the character's head movements. The SDK provides subpackages for glasses (material_sticker_glass), masks (material_sticker_facemask), veils (material_sticker_veil), and dragon head hats (material_sticker_dragonhat). You can load the corresponding scene resources to quickly experience the effects of different stickers.
Portrait edge light
This release adds a new portrait edge light effect. To experience it, specify the subpackage resource as material_effect_ray when loading scene resources.
Advertising light text-to-image
This version adds a text-to-image feature for the advertising lights. When setting the advertising light effects, you can specify the text content through the text parameter and add animation effects through the animation parameter. This includes jumping, waving, or swaying, to make the text appear dynamically on the screen.
Improvements
This update adds support for loadMaterial and unloadMaterial in setExtensionProperty.
- When using
loadMaterialto load scene resources, you can specify the resource path of the required subpackage. The engine will automatically request the scene texture and render the scene. - If you need to switch to another scene, just use
loadMaterialagain to pass in another subpackage resource path. The engine will automatically switch to the new scene. - When you no longer need to experience the scene, use
unloadMaterialto uninstall scene resources.
This improvement significantly enhances the usability of the extension. You can quickly experience different functional use-cases by simply specifying different subpackage resource paths when loading.
API changes
Added
loadMaterialunloadMaterial
v2.1.0
v2.1.0 was released on March 6, 2024.
Improvements
This update optimizes the performance of the MetaKit extension and adds support for two new keys in setExtensionProperty: requestTexture and switchTextureAvatarMode. These replace the original addSceneView and switchAvatarMode functions, respectively. The new interface supports automatic generation and return of texture data, which is then directly rendered, previewed, encoded, and transmitted through the SDK. This enhancement improves rendering performance, reduces latency, and ensures more efficient operation and a better user experience.
API changes
Added
v2.0.0
v2.0.0 was released on February 23, 2024.
This is the first release of the MetaKit extension. This extension integrates multiple AI technologies to provide users with diverse video enhancement functions in audio and video interaction use-cases.
Camera Movement extension
v1.2.0
v1.2.0 was released on April 29, 2024.
Improvements
- Added support for Video SDK v4.3.x.
- Improved the performance of the Camera Movement extension, reducing potential stuttering issues on low-end devices.
v1.0.0
v1.0.0 was released on February 23, 2024.
This is the initial release of the Agora Camera Movement extension.
The extension uses AI technology and intelligent camera movement algorithms to provide various features for audio and video interaction use-cases.
MetaKit extension
v2.2.0
v2.2.0 was released on September 13, 2024.
New features
Stickers
This version adds the sticker feature that uses the face capture driver and follows the character's head movements. The SDK provides subpackages for glasses (material_sticker_glass), masks (material_sticker_facemask), veils (material_sticker_veil), and dragon head hats (material_sticker_dragonhat). You can load the corresponding scene resources to quickly experience the effects of different stickers.
Portrait edge light
This release adds a new portrait edge light effect. To experience it, specify the subpackage resource as material_effect_ray when loading scene resources.
Advertising light text-to-image
This version adds a text-to-image feature for the advertising lights. When setting the advertising light effects, you can specify the text content through the text parameter and add animation effects through the animation parameter. This includes jumping, waving, or swaying, to make the text appear dynamically on the screen.
Improvements
This update adds support for loadMaterial and unloadMaterial in setExtensionPropertyWithVendor.
- When using
loadMaterialto load scene resources, you can specify the resource path of the required subpackage. The engine will automatically request the scene texture and render the scene. - If you need to switch to another scene, just use
loadMaterialagain to pass in another subpackage resource path. The engine will automatically switch to the new scene. - When you no longer need to experience the scene, use
unloadMaterialto uninstall scene resources.
This improvement significantly enhances the usability of the extension. You can quickly experience different functional use-cases by simply specifying different subpackage resource paths when loading.
API changes
Added
loadMaterialunloadMaterial
v2.1.0
v2.1.0 was released on March 6, 2024.
This update focuses on optimizing the performance of the MetaKit extension, ensuring more efficient operation and a better user experience.
v2.0.0
v2.0.0 was released on February 23, 2024.
This is the first release of the MetaKit extension. This extension integrates multiple AI technologies to provide users with diverse video enhancement functions in audio and video interaction use-cases.
Camera Movement extension
v1.2.0
v1.2.0 was released on April 29, 2024.
Improvements
- Added support for Video SDK v4.3.x.
- Improved the performance of the Camera Movement extension, reducing potential stuttering issues on low-end devices.
v1.0.0
v1.0.0 was released on February 23, 2024.
This is the initial release of the Agora Camera Movement extension.
The extension uses AI technology and intelligent camera movement algorithms to provide various features for audio and video interaction use-cases.
Notifications
2022.10
- After you enable Agora Notifications, your server receives the events that you subscribe to in the form of HTTPS requests.
- To improve communication security between the Agora Notifications and your server, Agora backend uses signatures for identity verification.
- As of this release, you can use Agora Notifications in conjunction with this product.
