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