Skip to main content

You are looking at Interactive Live Streaming v3.x Docs. The newest version is  Interactive Live Streaming v4.x

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.

PlatformSDK download linkVersion baseline
Androidv3.7.0.2v3.7.0.1
iOSv3.7.0.2v3.7.0
macOSv3.7.0.2v3.7.0
Windowsv3.7.0.2v3.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.
  • The super-resolution feature can scale the resolution up to 1280 × 720. This feature is not supported on some low-end devices.
  • If you want to scale both video width and height to triple the pixels, contact technical support.
  • 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 and enableContentInspect 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) and enableLocalAudio(true) to disable and enable local audio capture after successfully calling startAudioMixing 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) or enableLocalVideo(false) to stop sending the video stream, the local user did not receive the onRemoteVideoStateChanged(0,5) callback.
    • When the local user joined the channel after a remote user in the channel called muteLocalAudioStream(true) or enableLocalAudio(false) to stop sending the audio stream, the local user did not receive the onRemoteAudioStateChanged(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.
  • Before you use these video enhancement features, ensure that the following dynamical library is integrated:
    • Android: libagora_video_process_extension.so
    • iOS/macOS: AgoraVideoProcessExtension.xcframework
    • Windows: libagora_video_process_extension.dll
  • These video enhancement features have certain performance requirements on devices. If your device begins to overheat after you enable video enhancement, modify the video enhancement options to a less performance-consuming level or disable video enhancement.
  • 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, call enableInEarMonitoring(true).
    • setInEarMonitoringVolume: Sets the volume of the in-ear monitor, in the range of [0,100]. The default value is 100.
    Users must use 3.5 mm wired earphones or Bluetooth earphones to hear their own voices.

    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 to AudioRecordingConfiguration, 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 using startAudioRecording.
    • By adding AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3) to AudioRecordingConfiguration.recordingQuality, it enables you to set the recorded audio quality to ultra-high. Ultra-high quality is the highest quality available in recordingQuality. 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 with ipod-library://. (iOS)
    • (macOS) The following issues occasionally occurred when a user started screen sharing after getting sourceId by calling getScreenCaptureSourcesWithThumbSize (Objective-C) or getScreenCaptureSources (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 calling getScreenCaptureSourcesWithThumbSize (Objective-C) or the ThumbImageBuffer object returned by calling getScreenCaptureSources (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 the source field to set the background image with a height in an odd value. (Windows)
    • After calling enableVirtualBackground and using the source 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 called startAudioMixing 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 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 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 scenarioUser in the communication profile/Host in the interactive streaming profileAudience in the interactive streaming profile
      DEFAULTIn-call volumeMedia volume
      CHATROOM_GAMINGIn-call volumeIn-call volume
      GAME_STREAMINGIn-call volume (Android)
      Media volume (iOS)
      Media volume
      CHATROOM_ENTERTAINMENTIn-call volumeIn-call volume
      EDUCATIONIn-call volumeMedia volume
      SHOWROOMIn-call volumeMedia volume
      MEETINGIn-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 calling setAudioProfile(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 the AgoraFacePositionInfo class reported by the facePositionDidChangedWith 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 using setVideoSource with the custom video source in the SCREEN 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 the AudioVolumeInfo array reported by the onAudioVolumeIndication 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 from AgoraClientRoleAudience to AgoraClientRoleBroadcaster, 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 and 0 was assigned to each property in the screenRect 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.

    In the v3.4.5 and v3.4.6 SDKs, a memory leak occurs when 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 by AgoraRtcEngineKit, the AgoraRtcEngineDelegate object was released only when AgoraRtcEngineKit 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 then startAudioMixing 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 Video SDK and Agora Signaling SDK. (iOS, macOS)

    Interactive Live Streaming