Release notes
Updated
Information about changes in each release of Video Calling.
This page provides the release notes for the RTC SDK release streams used by Video Calling.
RTC SDK
Known issues
The list of known issues is continuously updated as systems evolve. Agora recommends regularly upgrading to the latest SDK version, 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 library might not contain any methods, causing the app to crash. See App fails to run on macOS 15 Beta for the workaround.
Unreal SDK v4.2.1
Audio module incompatibility on iOS
The audio module of the Agora Unreal SDK is incompatible with the AudioMixer module in Unreal Engine 5.3 and 5.4. Add the following configuration to /Config/IOS/IOSEngine.ini in your project to disable the Unreal Engine 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 and 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 to create an
IRtcEngineinstance and return a pointer toAgoraUERtcEngine. You can directly call methods under IRtcEngine using this pointer.// Example of joining a channel using joinChannel AgoraUERtcEngine::Get()->joinChannel(TCHAR_TO_UTF8(*Token), TCHAR_TO_UTF8(*ChannelName), 0, ChannelMediaOptions); -
Destroying an engine instance: After calling Get to create an
IRtcEngineinstance, call Release to destroy the engine instance and release related resources.AgoraUERtcEngine::Release();
-
New features
-
Voice AI tuner
This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the
enableVoiceAITunermethod. Pass in the sound effect types supported in theVOICE_AI_TUNER_TYPEenum to achieve effects like deep voice, cute voice, husky singing voice, and so on. -
Privacy manifest file (iOS)
To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file,
PrivacyInfo.xcprivacy, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected.Note
If you need to publish an app with SDK versions prior to v4.4.0 to the Apple App Store, add the PrivacyInfo.xcprivacy file to your Xcode project.
:::
-
Multi-camera capture (Android)
This release introduces additional functionalities for Android camera capture:
-
Support for capturing and publishing video streams from the third and fourth cameras:
VIDEO_SOURCE_CAMERA_THIRD(11) andVIDEO_SOURCE_CAMERA_FOURTH(12) inVIDEO_SOURCE_TYPEadd support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by callingstartCameraCapture.publishThirdCameraTrackandpublishFourthCameraTrackinChannelMediaOptionsadd support for Android. Set these parameters totruewhen joining a channel withjoinChannel[2/2] to publish video streams captured from the third and fourth cameras.
-
Support for specifying cameras by camera ID:
A new parameter
cameraIdis added toCameraCapturerConfiguration. For devices with multiple cameras, wherecameraDirectioncannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by callingstartCameraCapturewith the specificcameraId.
-
-
Select different audio tracks for local playback and streaming
This release introduces the
selectMultiAudioTrackmethod that allows you to select different audio tracks for local playback and streaming to remote users. For example, in use-cases like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, open the media file through theopenWithMediaSourcemethod and enable this function by setting theenableMultiAudioTrackparameter inMediaSource. -
Update video screenshot and upload
To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes:
- The
CONTENT_INSPECT_IMAGE_MODERATIONenumeration is added inCONTENT_INSPECT_TYPE, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter
serverConfigis added inContentInspectConfig, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact technical support.
Additionally, this version introduces the
enableContentInspectExmethod, which supports simultaneous screenshot and upload of multiple video streams. - The
-
ID3D11Texture2D rendering (Windows)
As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game use-cases. You can set
formattoVIDEO_TEXTURE_ID3D11TEXTURE2Dwhen pushing external raw video frames to the SDK by callingpushVideoFrame. By setting thetextureSliceIndexproperty, you can determine the ID3D11Texture2D texture object to use. -
Wildcard token
This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user ID. In use-cases involving multiple channels, such as switching between different channels, using a wildcard token can prevent repeated application of tokens every time users join a new channel, which reduces the pressure on your token server. See Generate wildcard tokens.
Note
All 4.x SDKs support using wildcard tokens. :::
-
Preloading channels
This release adds
preloadChannelandpreloadChannelWithUserAccountmethods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shorten the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host.When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to prevent repeated application of tokens every time you join a new channel, thus saving the time for switching between channels. See Generate wildcard tokens.
-
Publishing video streams from different sources (Windows, macOS)
This release adds the following members in
ChannelMediaOptionsto allow you to publish video streams captured from the third and fourth camera or screen:publishThirdCameraTrack: Publishing the video stream captured from the third camera.publishFourthCameraTrack: Publishing the video stream captured from the fourth camera.publishThirdScreenTrack: Publishing the video stream captured from the third screen.publishFourthScreenTrack: Publishing the video stream captured from the fourth screen.
Note
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
:::
Improvements
-
Header file management simplification
To reference other header files, you can add them uniformly to
AgoraHeaderBase.h, simplifying the management of header files in the project and facilitating future maintenance. -
Channel media relay
The number of target channels for media relay has been increased to 6. When calling
startOrUpdateChannelMediaRelayandstartOrUpdateChannelMediaRelayEx, you can specify up to 6 target channels.
Issues fixed
In Unreal Engine 5.3 and 5.4, adding the following code to the /Source/xxx.Target.cs file in your project to solve iOS memory allocation issues may lead to missing iOS compilation symbols. To address this issue, this version adds three function definitions (StdMalloc, StdRealloc, and StdFree) related to the standard library in the UnrealMemory.cpp file, ensuring proper handling of memory management needs when using the standard memory allocator (iOS).
if (Target.Platform == UnrealTargetPlatform.IOS)
{
bOverrideBuildEnvironment = true;
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");
}v4.2.1
v4.2.1 was released on November 16, 2023.
This the first GA release of the SDK. It provides a simple and user-friendly real-time interactive solution for Unreal Engine users.
Unreal Engine
The SDK for Unreal Engine provides a powerful set of C++ APIs, allowing developers to easily build games or apps with real-time interactive features. It can also leverage the powerful graphics engine functionality of Unreal Engine to add various visual effects and interactive performance to the app, providing users with a more immersive experience.
Unreal Blueprint
The SDK for Unreal Blueprint offers a visual interface and a set of intuitive and easy-to-use nodes. This enables developers to effortlessly implement real-time interactive features in games or apps within the Unreal project. No need to know C++ - just drag, connect, and configure nodes.
Read more:
Agora provides an open source example project on GitHub for your reference.
If you have already integrated the 3.x version of the SDK and wish to upgrade to this version, please refer to Migration Guide for upgrade instructions.
Extensions
Notifications
2022.10
- After you enable Agora Notifications, your server receives the events that you subscribe to in the form of HTTPS requests.
- To improve communication security between the Agora Notifications and your server, Agora backend uses signatures for identity verification.
- As of this release, you can use Agora Notifications in conjunction with this product.
