Download More Versions of the Agora Video SDK
This page provides download links and release notes for more versions of the Agora Video SDK. To ensure a trouble-free development experience, Agora strongly recommends that you use official mainline versions.
SDK downloads
This section provides links to download more versions of the SDK and describes which official mainline version it is based on.
Platform | SDK download link | Version baseline |
---|---|---|
Android | v3.7.0.2 | v3.7.0.1 |
iOS | v3.7.0.2 | v3.7.0 |
macOS | v3.7.0.2 | v3.7.0 |
Windows | v3.7.0.2 | v3.7.0 |
Release notes
This section provides release notes for more versions of the SDK.
v3.7.0.2
v3.7.0.2 was developed from v3.7.0 and released on June 6, 2022, for Android, iOS, macOS, and Windows.
v3.6.3
v3.6.3 was developed from v3.6.2 and released on May 13, 2022, for Android, iOS, macOS, and Windows.
New features
1. Screen sharing (Windows)
You can use excludeWindowList
to block the specified windows during screen sharing. This release modifies the window blocking behavior on devices with multiple graphics cards as follows:
- Before v3.6.3, when you block a specified window on a device with multiple graphics cards, local and remote users see this window as a black screen.
- As of v3.6.3, when you block a specified window on a device with multiple graphics cards, the SDK reports the error code
ERR_NOT_SUPPORTED_MUTI_GPU_EXCLUDE_WINDOW(1736)
to indicate that the window blocking feature is not supported on devices with multiple graphics cards.
2. Setting a border (macOS)
As of this release, you can set a border for the shared window or screen and adjust its width and color by using the enableHighLight
, highLightWidth
, and highLightColor
properties in ScreenCaptureParameters
.
3. Reporting the first remote video frame rendered
This release adds the onFirstRemoteVideoFrame
callback to the IChannelEventHandler
class to report to the local user that the first video frame of the remote user has been rendered in a multichannel scenario. You can also get the remote user ID, the width and height (in pixels) of the video, and the time (in milliseconds) to render the first video frame from this callback.
Improvements
1. Super resolution (beta feature)
This release deprecates the enableRemoteSuperResolution
method and adds a new method with the same name to enable super resolution, which scales the width and height of the video received from a remote user to double the pixels.
The new method has an additional mode
parameter compared to the deprecated method. This parameter can be set as follows:
MANUAL_MODE(0)
: Enables super resolution for the remote user you specify.AUTO_MODE
: Enables super resolution for the remote user corresponding to the largest rendering window in the channel.
2. Audio and video recording
As of this release, after successfully calling startRecording
to start the local audio and video recording, the SDK continues the recording and generates a single MP4 recording file when the audio profile changes during the recording, whereas with earlier versions, the SDK would stop the recording and report onRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_CONFIG_CHANGED)
.
3. Reasons for remote video errors
This release adds AgoraVideoRemoteStateReasonRemoteSDKInBackGround(10)
to AgoraVideoRemoteStateReason
. When a remote user uses an iOS app, and the app goes to the background, the SDK reports this reason to the local user. In this case, the local user sees the remote user's video as frozen.
Fixed issues
This release fixed the following issues:
- The device ID of the virtual camera obtained by using the
enumerateVideoDevices
method was abnormal, and the virtual camera could not be opened when using a non-SDK interface and passing in that device ID. (Windows) - The app occasionally failed to rejoin a channel after a user left a channel and put the app in the background for a while. (iOS)
- After a host successfully started cohosting across channels, changes in their network connection, for example, switching between a 4G or 5G mobile network and Wi-Fi, caused the media relay to destination channels to interrupt. (Android, iOS)
- The
takeSnapshot
andenableContentInspect
methods failed to support the custom video in texture format by the Push or MediaIO method. (Android) - On some JioBook devices, video capture by camera failed, or the captured video quality was poor. (Android)
- Remote users heard a delay in the music played when the local user called
enableLocalAudio(false)
andenableLocalAudio(true)
to disable and enable local audio capture after successfully callingstartAudioMixing
to play a music file. - When calling
startAudioMixing
to play a music file with the sample rate of 22,050 Hz, the local and remote users heard distorted audio with buzzing noises. - When the local user joined the channel after a remote user in the channel called
muteLocalVideoStream(true)
orenableLocalVideo(false)
to stop sending the video stream, the local user did not receive theonRemoteVideoStateChanged(0,5)
callback. - When the local user joined the channel after a remote user in the channel called
muteLocalAudioStream(true)
orenableLocalAudio(false)
to stop sending the audio stream, the local user did not receive theonRemoteAudioStateChanged(0,5)
callback. - Under poor network conditions, after a Web client stopped sending the video stream, a Native client could still see the Web client video, and the video appeared as a black screen.
- After sharing a Chrome browser window, switching the browser to full screen, and switching the focus to another application, the shared screen occasionally got stuck. (Windows)
- After the local user called
enableLoopbackRecording(true)
on some Dell devices to play a multimedia file and connected a headset without a microphone to the device, the remote user could not hear the multimedia file. - When the local user used the raw video data to customize the renderer, the color of the rendered remote video was different from the original color. (macOS)
- Occasional crashes occurred. (iOS)
- Occasionally, the local user could barely hear the local user's voice after the local user started screen sharing. (Windows)
- Occasionally, screen sharing ended unexpectedly. (iOS)
- Occasionally, the app got stuck after a user joined a channel. (Windows)
- The captured volume was too low on specific devices such as Samsung Galaxy S20+ and Note10+. (Android)
- The video received by the user appeared to change from dark to bright. (iOS)
- The local user received the
onRemoteAudioStateChanged(2,6)
callback after disconnecting from and reconnecting to a network even though the remote user had not changed the audio state.
v3.6.2.1
v3.6.2.1 was developed from v3.6.2 and released on March 4, 2022 for macOS.
This release fixed a crash of the SDK on systems earlier than macOS 10.11. This crash was due to strong references by some dynamic libraries to the Metal library.
v3.6.2
v3.6.2 was developed from v3.6.1.1 and released on February 22, 2022 for Android, iOS, macOS, and Windows.
v3.5.3
v3.5.3 was developed from v3.5.2 and released on February 22, 2022 for Android, iOS, macOS, and Windows.
New features
1. Video enhancement
In addition to the image enhancement feature, Agora adds support for more video enhancement features:
- Video noise reduction: This feature reduces video noise and improves video quality. You can use the
setVideoDenoiserOptions
method to enable/disable video noise reduction and set the options of the video noise reduction effect. - Low-light enhancement: This feature adaptively adjusts the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video. You can use the
setLowLightEnhanceOptions
method to enable/disable low-light enhancement and set the options of the low-light enhancement effect. - Color enhancement: This feature intelligently adjusts video characteristics such as saturation and contrast to enhance the video color richness and color reproduction, making the video more vivid. You can use the
setColorEnhanceOptions
method to enable/disable color enhancement and set the options of the color enhancement effect.
- Android:
libagora_video_process_extension.so
- iOS/macOS:
AgoraVideoProcessExtension.xcframework
- Windows:
libagora_video_process_extension.dll
2. In-ear monitoring (Windows)
This release extends the applicable platforms of in-ear monitoring from Android and iOS to Android, iOS, and Windows. On Windows, you can call the following APIs to control in-ear monitoring:
enableInEarMonitoring
: Enables or disables in-ear monitoring. This function is disabled by default. To enable the function, callenableInEarMonitoring(true)
.setInEarMonitoringVolume
: Sets the volume of the in-ear monitor, in the range of [0,100]. The default value is 100.
3. Reporting the first remote video frame rendered
This release adds the onFirstRemoteVideoFrame
callback to the IChannel
class to report to the local user that the first video frame of the remote user has been rendered in a multichannel scenario. You can also get the remote user ID, width and height (px) of the video, and time (in milliseconds) to render the first video frame from this callback.
Improvements
1. Audio recording
This release extends startAudioRecording
with support for setting recording with dual channels and higher audio quality.
- By adding
recordingChannel
toAudioRecordingConfiguration
, it enables you to set the recorded audio channel to be mono or dual. Because the actual recorded audio channel is related to the captured audio channel and the integration scheme affects the final recorded audio channel, contact technical support for assistance with stereo recording usingstartAudioRecording
. - By adding
AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3)
toAudioRecordingConfiguration.recordingQuality
, it enables you to set the recorded audio quality to ultra-high. Ultra-high quality is the highest quality available inrecordingQuality
. When you record a 10-minute AAC audio file at a sample rate of 32,000 Hz and ultra-high quality, the file size is approximately 7.5 MB.
2. Other improvements
This release provides the following improvements:
- Adds the fallback to software encoding when hardware encoding fails for the custom video in texture format, which improves the usability of video functions. (Android)
- Reduces the impact of high-frequency network jitters on the acceleration or deceleration of the music playback, which optimizes the user's music playback experience. (Android, iOS)
- Optimizes key indicators of the AEC (Acoustic Echo Canceller).
- Speeds up rendering of the first remote video frame under poor network conditions.
- Optimizes the user's audio experience during a burst network jitter.
- Optimizes the user's subjective experience when network conditions recover.
Fixed issues
This release fixed the following issues:
- After you enabled Bitcode settings in Xcode and integrated the
AgoraVideoProcessExtension.xcframework
dynamic library, errors occurred when you uploaded the app to the Apple App Store. (iOS) - When joining a channel under a 4G network, the
onNetworkQuality
callback reported the network state as disconnected. (Android) - Occasional crashes occurred. (Android, iOS, Windows)
- The quality of the generated screenshot decreased with the number of calls after successive calls to
takeSnapshot
. (Android, iOS) - When the local user used the SDK to capture video, set the video encoding resolution to 720P or higher, and used the custom video renderer by MediaIO, the local user could not see the local video. (Android)
- When you called
getScreenCaptureSourcesWithThumbSize
on a device with a system version 10.14.6 or earlier to get all currently sharable windows, the window was displayed as a white screen. (macOS) - Remote users could not be seen under certain circumstances. (iOS)
- Users saw video continuously blurred under certain network conditions.
- Under poor network conditions, the Native client saw the video from the Web client blurred occasionally.
- Occasional crashes or jamming occurred in a certain scenario when you used the custom video renderer by MediaIO. (Windows)
- Apps could not be uploaded to the Apple App Store due to the
Non-public API usage
error. (iOS) - The SDK did not work properly on an iOS device with a system version lower than 10. (iOS)
- When you called
updateScreenCaptureParameters
to update the screen-sharing configuration,windowFocus
did not work. (macOS, Windows) - The local user could not receive the
remoteVideoStateChanged
callback after they disconnected and reconnected to the network. (iOS) - The SDK could not properly detect that the audio device was disconnected. (Windows)
- When the local user used the MediaIO method to customize a video source, red blinking appeared in the video received by remotes users. (Windows)
- Under certain circumstances, local users could see a blurry screen for remote users after switching back to the app from the home screen. (iOS)
- The
startAudioMixing
method call failed to play local iTunes music files starting withipod-library://
. (iOS) - (macOS) The following issues occasionally occurred when a user started screen sharing after getting
sourceId
by callinggetScreenCaptureSourcesWithThumbSize
(Objective-C) orgetScreenCaptureSources
(C++):- The screen sharing failed.
- The actually shared screen did not match
sourceId
. - Remote users saw a different mouse position than the actual one during sharing.
- The
AgoraThumbImageBuffer
object returned by callinggetScreenCaptureSourcesWithThumbSize
(Objective-C) or theThumbImageBuffer
object returned by callinggetScreenCaptureSources
(C++) was not in the expected RGBA format. (macOS) - When using the Push method to customize the video source, the resolution of the user's screen occasionally kept changing. (macOS, Windows)
- When a remote user was under poor network conditions,
QUALITY_TYPE
received by the local user did not match the actual network condition. - Occasionally failed to start the camera and video capture due to a system issue that prevented the SDK from getting the device name of the camera. (iOS)
- Updating the transcoding layout in Media Push occasionally failed under certain circumstances.
- Occasional crashes occurred when calling
enableVirtualBackground
to enable the virtual background and use thesource
field to set the background image with a height in an odd value. (Windows) - After calling
enableVirtualBackground
and using thesource
field to set a JPG image as the background, when disabling or updating the virtual background, the JPG image previously set could not be deleted. (Windows) - After a user played music with a third-party music player and set the audio scenario to
AgoraAudioScenarioChatRoomGaming
, joining a channel could interrupt the music played by the third-party music player. (iOS) - Remote users could not see the screen shared by the local user. (iOS)
- When you called
setAudioMixingPosition
multiple times to set the playback position of the music file after you calledstartAudioMixing
to successfully play music, the music file would most likely be played from the beginning. (iOS) - When adding a watermark with the
addVideoWatermark
method, under certain circumstances, the watermark color was different from the original color. (iOS) - Getting
DhcpInfo
occurred too frequently. (Android)
v3.5.2
v3.5.2 was developed from v3.5.1 and released on November 25, 2021 for Android, iOS, macOS, and Windows.
v3.4.11
v3.4.11 was developed from v3.4.5 and released on November 22, 2021 for Android, iOS, macOS, and Windows. v3.4.11 for Electron was released on January 10, 2022.
New features
1. Pausing and resuming the media stream relay across channels
In order to enable the host to quickly pause or resume a cross-channel media stream relay, this release adds the following methods and event code:
pauseAllChannelMediaRelay
: Pauses the media stream relay to all destination channels.resumeAllChannelMediaRelay
: Resumes the media stream relay to all destination channels.RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(12)
: The SDK successfully pauses relaying the media stream to destination channels.RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED(13)
: The SDK fails to pause relaying the media stream to destination channels.RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(14)
: The SDK successfully resumes relaying the media stream to destination channels.RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED(15)
: The SDK fails to resume relaying the media stream to destination channels.
After a successful method call of pauseAllChannelMediaRelay
or resumeAllChannelMediaRelay
, the SDK triggers the onChannelMediaRelayEvent
callback to report whether the media stream relay is successfully paused or resumed.
2. Getting audio file information
To get the information of any audio file, this release deprecates getAudioMixingDuration
and adds getAudioFileInfo
instead. After joining a channel, you can call getAudioFileInfo
and get information such as duration for the specified audio file in onRequestAudioFileInfo
.
Improvements
1. Bluetooth profiles and volume types (Android/iOS)
To improve audio quality when a user uses a Bluetooth headset, this release optimizes the logic for selecting Bluetooth profiles and volume types.
- Bluetooth profile: As of this release, the Bluetooth profile used by the SDK is only affected by the user role.
- If a user in the communication profile or a host in the interactive live streaming profile uses a Bluetooth headset, the Bluetooth headset captures and plays audio through the Hands-Free Profile (HFP).
- If an audience member in the interactive live streaming profile uses a Bluetooth headset, the Bluetooth headset plays audio through the Advanced Audio Distribution Profile (A2DP).
- Volume type: This release regulates the volume type. When a user uses a Bluetooth headset, the SDK uses the following volume type:
Audio scenario User in the communication profile/Host in the interactive live streaming profile Audience in the interactive live streaming profile DEFAULT
In-call volume Media volume CHATROOM_GAMING
In-call volume In-call volume GAME_STREAMING
In-call volume (Android)
Media volume (iOS)Media volume CHATROOM_ENTERTAINMENT
In-call volume In-call volume EDUCATION
In-call volume Media volume SHOWROOM
In-call volume Media volume MEETING
In-call volume (Android)
Media volume (iOS)Media volume
2. Face detection (Android/iOS)
To improve the accuracy of face detection results, as of this release, the SDK triggers the onFacePositionChanged
callback immediately after detecting the disappearance of the human face.
3. Performance improvements
This release slightly reduces CPU usage in video scenarios by optimizing the FEC (Forward Error Correction) codec.
4. Video experience improvements
This release reduces the time to render the first video frame under poor network conditions.
Fixed issues
This release fixed the following issues:
- Occasionally, the SDK incorrectly triggered the error code
-1017
when a user plugged and unplugged the headset. (Android) - Occasionally, crashes could occur when you used custom video capture by Push. (Android)
- Occasionally, remote users saw a short black screen of the shared window during the local user's window sharing. (macOS)
- When a user device was connected to both a TV and a camera, and audio was played through the TV and captured through the microphone of the external camera, echoes could occur. (Windows)
- After a user played music with a third-party music player and set the audio scenario to
AgoraAudioScenarioChatRoomGaming
, joining a channel could interrupt the music played by the third-party music player. (iOS) - Crashes occurred occasionally. (iOS)
- In a CDN streaming scenario, when the host enabled dual-channel audio capture, remote users heard a zipping noise or no sound in one of the audio channels.
excludeWindowList
did not work. (macOS)- Occasionally, memory leaked because of unreasonable object reference managements. (Android)
- Running iOS apps on a Mac device with an M1 chip crashed under certain circumstances. (iOS, macOS)
- Remote users could not see the shared screen video during the local user's screen sharing. (iOS)
- When the local user called
adjustRecordingSignalVolume(0)
after callingsetAudioProfile(5,3)
, remotes users could still hear the local user's audio. (Android) - When
setVideoEncoderConfiguration
was called frequently, the SDK restarted video capture repeatedly, which resulted in flickering of local preview and sent video. (iOS) - The
x
property in theAgoraFacePositionInfo
class reported by thefacePositionDidChangedWith
callback was negative under certain circumstances. (iOS) - On some devices, the main thread got stuck for 1 or 2 seconds after the
setEnableSpeakerphone
method call. - When a Bluetooth headset and a wired headset were connected to the audio playback device at the same time, the SDK did not trigger onAudioRouteChanged after plugging and unplugging the wired headset multiple times. (Android)
- On some Xiaomi devices, the user could not use the device's volume button to adjust the volume after calling
setEnableSpeakerphone
. (Android) - After a local user called
enableDualStreamMode(false)
, a dual stream (high-quality and low-quality video stream) was nevertheless sent when the user switched from custom video capture usingsetVideoSource
with the custom video source in theSCREEN
type to SDK capture. - When you called
startAudioDeviceLoopbackTest
to start the audio device loopback test after joining and then immediately leaving a channel, the content of theAudioVolumeInfo
array reported by theonAudioVolumeIndication
callback was incorrect. (Windows) - Enabling video mirror mode occasionally caused crashes. (iOS)
- A black screen appeared when you shared a screen with certain NVIDIA and Intel dual graphics cards. (Windows)
- The local user could not be heard by remote users when the local user used custom audio capture by the Push method. (Android, Windows)
- When a third-party in-ear monitoring library and custom audio source were used and in-ear monitoring was enabled before joining a channel, in-ear monitoring did not take effect. (Android)
- On some Samsung devices, the
adjustRecordingSignalVolume(0)
method call occasionally failed. (Android) - When the host used a specific low-end device under certain circumstances, the audience watching the host's video occasionally experience lag.
- When a user with the audio profile
MUSIC_HIGH_QUALITY_STEREO(5)
talked to a user with another audio profile, the latter was likely to hear a zipping noise. (Android) - The local user occasionally could not hear remote users after calling
setAudioSessionOperationRestriction
. (iOS) - In the
AgoraAudioScenarioChatRoomGaming
audio scenario, the moment a user in the channel switched the role fromAgoraClientRoleAudience
toAgoraClientRoleBroadcaster
, that user heard a zipping noise. (iOS)
v3.4.8
v3.4.8 was developed from v3.4.7 and was released on September 16, 2021 for Android, iOS, macOS, and Windows.
This release fixed the following issues:
- On some Samsung devices, the
adjustRecordingSignalVolume(0)
method call failed occasionally. (Android) - On some devices, the main thread got stuck for 1 to 2 seconds after the
setEnableSpeakerphone
method call. (Android) - Crashes occurred when
startScreenCaptureByScreenRect
was called and0
was assigned to each property in thescreenRect
parameter for screen sharing in a scenario where the user's device was connected to an external screen. (Windows)
v3.4.7
v3.4.7 was developed from v3.4.6 and was released on August 2, 2021 for Android, iOS, macOS, and Windows.
AgoraRtcEngineKit
strongly references AgoraRtcEngineDelegate
. If you set the strong reference to AgoraRtcEngineDelegate
by AgoraRtcEngineKit
, Agora recommends that you upgrade the SDK to v3.4.7. (iOS, macOS) Improvements
This release improves the user experience under network conditions with high packet loss and high jitter.
Fixed issues
This release fixed the following issues:
- Due to the strong reference to
AgoraRtcEngineDelegate
byAgoraRtcEngineKit
, theAgoraRtcEngineDelegate
object was released only whenAgoraRtcEngineKit
was destroyed, which caused a memory leak. (iOS, macOS) - Window sharing stopped after a user shared a QQ browser window and switched the browser tab. (Windows)
- Occasional crashes occurred in audio scenarios. (Android, iOS)
- When
pauseAudioMixing
was called before playing an audio file, and thenstartAudioMixing
was called to play the audio file, playback failed. (iOS) - Remote users heard slightly unsynchronized voice and music when a user called
startAudioMixing
on some Android devices. - A naming conflict existed in the
AgoraReachability
class between the Agora RTC SDK and Agora RTM SDK. (iOS, macOS)