This page provides the release notes for the Agora Unity SDK.
As of v3.4.5, the SDK supports macOS Monterey 12. For the SDK versions between v3.2.1 and v3.4.2 inclusive, crashes occur on macOS Monterey 12. To fix this issue, upgrade the SDK to v3.4.5 or later.
As of v3.4.6, the SDK supports iOS 15. For the SDK versions between v3.2.1 and v3.4.5 inclusive, crashes occur on iOS 15. To fix this issue, upgrade the SDK to v3.4.6 or later.
If your app is integrated with the SDK earlier than v3.3.1, the app can only run under Rosetta translation on Mac devices with the M1 chip, which causes a memory leak when a user frequently joins and leaves a channel.
To avoid this issue, upgrade the SDK to v3.3.1 or later and adapt the app to x86-64 and arm64 architectures.
v3.7.1 was released on Sep 28.
Super resolution
This release deprecates the previous EnableRemoteSuperResolution
method, and adds a method with the same name to support super resolution. If the original resolution of a remote user's video is a × b, the local user's device can render the remote video at a resolution of 2a × 2b after you enable this feature.
Compared to the deprecated method, the new EnableRemoteSuperResolution
method adds a parameter mode that can be set as either of following values:
SR_MODE_MANUAL(0)
: Enables super resolution for the remote user you specify.SR_MODE_AUTO
: Enables super resolution for the remote user corresponding to the largest rendering window in the channel.libagora_super_resolution_extension.so
AgoraSuperResolutionExtension.xcframework
AgoraSuperResolutionExtension.xcframework
libagora_super_resolution_extension.dll
Co-hosting across channels
This release enhances the connection mechanism between the SDK and the server of co-hosting across channels and therefore reduces the failure rate.
This release fixe the following issues:
OnRemoteAudioStateChangedHandler(2,6)
callback after disconnecting from and reconnecting to a network even though the remote user had not changed the audio state.gatewayRtt
reported by the OnRtcStatsHandler
callback was inaccurate when the network latency was too high or the router did not respond to ICMP packets.OnNetworkQualityHandler
callback was inaccurate for the user who was sharing a screen.PlayEffect
or StartAudioMixing
to play 8-bit PCM-encoded audio in the WAV format. OnLocalAudioStateChangeHandler
callback after a user denied microphone permission was inaccurate. deviceName
returned by the EnumerateDevices
method was empty when calling EnumerateDevices
to enumerate video capture devices in the system. Added
EnableRemoteSuperResolution [2/2]
SR_STATE_REASON_INSUFFICIENT_PERFORMANCE(4)
in SUPER_RESOLUTION_STATE_REASON
VIRTUAL_BACKGROUND_SOURCE_STATE_REASON_INSUFFICIENT_PERFORMANCE(4)
in VIRTUAL_BACKGROUND_SOURCE_STATE_REASON
Deprecated
EnableRemoteSuperResolution [1/2]
v3.7.0.3 was developed from v3.7.0.1 and released on Jun 22.
This release fixed the following issues:
gatewayRtt
reported by the OnRtcStatsHandler
callback was inaccurate when the network latency was too high or the router did not respond to ICMP packets.onNetworkQualityHandler
callback was inaccurate for the user who was sharing a screen.OnRemoteAudioStateChangedHandler(2,6)
callback after disconnecting from and reconnecting to a network even though the remote user had not changed the audio state.OnLocalAudioStateChangeHandler
callback after a user denied microphone permission was inaccurate. PlayEffect
or StartAudioMixing
to play 8-bit PCM-encoded audio in the WAV format. deviceName
returned by the EnumerateDevices
method was empty when calling EnumerateDevices
to enumerate video capture devices in the system.v3.7.0.1 was released on May 23, 2022.
This release deletes the usesClearTextTraffic
parameter for the purpose of security compliance. If you want to play an HTTP online music file, ensure that you set this parameter in the project AndroidManifest.xml file. For details, see StartAudioMixing.
v3.7.0 was released on Apr 22, 2022.
Screen sharing on Windows
This release renames several fields reported by the OnScreenCaptureInfoUpdatedHandler
callback:
cardType
is renamed to graphicsCardType
.FILT_WINDOW_ERROR
is renamed to EXCLUDE_WINDOW_ERROR
.FILT_WINDOW_ERROR_FAIL
is renamed to EXCLUDE_WINDOW_ERROR_FAIL
.FILT_WINDOW_ERROR_NONE
is renamed to EXCLUDE_WINDOW_ERROR_NONE
.Log path on macOS
As of v3.7.0, on macOS, the default SDK log path when disabling the sandbox has changed from ~/Library/Logs/agorasdk.log
to /Users/<username>/Library/Caches/<App Bundle Identifier>/Logs/agorasdk.log
. If you upgrade the SDK, the old logs are stored at the old path, but the new logs are stored at the new path.
Video enhancement
In addition to the image enhancement feature, Agora adds support for more video enhancement features:
SetVideoDenoiserOptions
method to enable/disable video noise reduction and set the options of the video noise reduction effect.SetLowLightEnhanceOptions
method to enable/disable low-light enhancement and set the options of the low-light enhancement effect.SetColorEnhanceOptions
method to enable/disable color enhancement and set the options of the color enhancement effect.Virtual sound card on macOS
When calling EnableLoopbackRecording
for the loopback audio capture, developers typically use common virtual sound cards on macOS, including Soundflower and BlackHole. But these virtual sound cards sometimes experience compatibility issues with the M1 chip or the latest systems, and deferred maintenance.
To improve the loopback audio capture experience, Agora has developed its own virtual sound card: AgoraALD (Agora Audio Loopback Device). You can replace your current virtual sound card with AgoraALD using the following steps:
deviceName
in the EnableLoopbackRecording
method to "AgoraALD"
.Spatial audio effect
This release adds the feature of spatial audio effect, which can add a sense of space to remote users' audio and simulate the audio transmission process in the real world, so as to allow the local user to hear remote users with the spatial audio effect.
To use this feature, contact support@agora.io.
Screen sharing on macOS and Windows
This release adds two new features to screen sharing:
setScreenCaptureScenario
method. The SDK can adjust the video quality and experience of screen sharing according to the scenario you set.enableHighLight
, highLightWidth
, and highLightColor
properties in ScreenCaptureParameters
.Local voice pitch
This release adds the EnableLocalVoicePitchCallback
method and the OnLocalVoicePitchInHzHandler
callback, to allow the SDK to report the voice pitch of the local user at the set time interval to the app.
Reporting the first remote video frame rendered
This release adds the OnFirstRemoteVideoFrameHandler
callback to the AgoraChannel
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.
Reporting the user role switch failure
This release adds the OnClientRoleChangeFailedHandler
callback to report the reason for a user role switch failure and the current user role in the interactive live streaming.
Reasons for connection state changes
To help users better understand the cause of connection state changes, this release adds the following enumerators in CONNECTION_CHANGED_REASON_TYPE
:
CONNECTION_CHANGED_SAME_UID_LOGIN(19)
: Join the same channel from different devices using the same user ID.CONNECTION_CHANGED_TOO_MANY_BROADCASTERS(20)
: The number of hosts in the channel reaches the upper limit. This enumerator is reported only after the support for 128 hosts is enabled.Camera control
This release adds the complete set of methods for controlling the camera.
Channel capacity improvement
As of this release, a single channel can support up to 128 concurrent online hosts, who can publish audio and video 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.
Virtual background
Test results and user feedback show that the effect of the virtual background feature improves when a user is against a complex background and adopts a more casual pose. As a result, virtual background is converted from a beta feature to an official feature as of v3.7.0.
Enhanced noise suppression
Agora has added the option of using a new version of noise suppression to further improve audio quality. To experience this feature, contact support@agora.io.
Cloud proxy
To enrich application scenarios of the Agora Cloud Proxy, this release updates the cloud proxy types (CLOUD_PROXY_TYPE
) as follows:
NONE_PROXY(0)
from "Do not use the cloud proxy" to "Automatic mode". In this mode, the SDK attempts a direct connection to SD-RTN™ and automatically switches to TLS 443 if the attempt fails. As of v3.6.2, the SDK has this mode enabled by default.TCP_PROXY(2)
, which is the TCP (encrypted) mode. In this mode, the SDK always transmits data over TLS 443.In addition, this release adds the OnProxyConnectedHandler
callback to report the proxy connection state. For example, when a user calls SetCloudProxy
and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed from the user calling JoinChannel
until this callback is triggered.
Audio device test
To support testing audio devices after joining a channel, this release improves the following methods and callbacks:
OnAudioDeviceTestVolumeIndicationHandler
, which reports the volume information of the audio device being tested.StartAudioRecordingDeviceTest
, StartAudioPlaybackDeviceTest
, and startAudioDeviceLoopbackTest
. Before v3.7.0, you can call these methods only before joining a channel; as of v3.7.0, you can call these methods either before or after joining a channel. After a successful method call, the SDK triggers the following callbacks:OnAudioVolumeIndicationHandler
and OnAudioDeviceTestVolumeIndicationHandler
when you call the methods before joining a channel. Both callbacks report the same volume information. If you upgrade the SDK to v3.7.0 or later, Agora recommendeds using OnAudioDeviceTestVolumeIndicationHandler
.OnAudioDeviceTestVolumeIndicationHandler
when you call the methods after joining a channel.StartAudioRecordingDeviceTest
, StartAudioPlaybackDeviceTest
, or StartAudioDeviceLoopbackTest
after joining a channel tests the audio devices that the SDK is using.Audio recording
This release extends StartAudioRecording
with support for setting recording with dual channels and higher audio quality.
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
.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.Screen sharing (macOS)
This release optimizes the screen capture strategy and increases the upper limit of the screen capture frame rate.
This optimization is only available under the following conditions:
StartScreenCaptureByDisplayId
and windows are not blocked with excludeWindowList
.For example, under these conditions, when you use a 4K screen for screen sharing, and the capture resolution is 720P, the capture frame rate can now be 30 fps.
Music file playback
This release optimizes the experience of calling startAudioMixing
to play music files as follows:
GetAudioFileInfo
.Audio file formats (iOS/macOS)
This release adds support for playing audio files in the following formats:
For online MP4 and M4A files, the MOOV atom must be before the MDAT atom.
playEffect improvements
This release improves the internal implementation logic of PlayEffect
to avoid blocking and reduce freezing when playing an audio effect file.
Audio experience optimization on iOS, macOS and Windows
This release reduces audio stuttering under network conditions with burst jitter and high packet loss.
Transmission upgrade
This release upgrades transmission protocols and algorithms to enhance the SDK‘s ability to counter poor network conditions. At the same time, this release optimizes the scalable video coding capability for multi-user video scenarios to improve user video experience.
This release fixed the following issues:
StartScreenCaptureByWindowId
to enable sharing of the WPS application window, window sharing failed when you switched the slideshow from normal mode to presentation mode or vice verse.StartAudioMixing
method, there was no sound after a certain period of playback.OnAudioMixingStateChangedHandler
callback only after a three-second delay after a successful call to StartAudioMixing
. AddVideoWatermark
method, under certain circumstances, the watermark color was different from the original color. Added
SetVideoDenoiserOptions
SetLowLightEnhanceOptions
SetColorEnhanceOptions
SetScreenCaptureScenario
EnableLocalVoicePitchCallback
IsCameraZoomSupported
IsCameraTorchSupported
IsCameraFocusSuppprted
IsCameraExposurePositionSupported
IsCameraAutoFocusFaceModeEnabled
SetCameraZoomFactor
GetCameraMaxZoomFactor
SetCameraFocusPositionInPreview
SetCameraExposurePosition
SetCameraTorchOn
SetCameraAutoFocusFaceModeEnabled
OnAudioDeviceTestVolumeIndicationHandler
OnLocalVoicePitchInHzHandler
OnClientRoleChangeFailedHandler
OnCameraFocusAreaChangedHandler
OnCameraExposureAreaChangedHandler
OnFirstRemoteVideoFrameHandler
in the AgoraChannel
classrecordingChannel
in AudioRecordingConfiguration
enableHighLight
, highLightWidth
, and highLightColor
in ScreenCaptureParameters
CONNECTION_CHANGED_SAME_UID_LOGIN(19)
and CONNECTION_CHANGED_TOO_MANY_BROADCASTERS(20)
in CONNECTION_CHANGED_REASON_TYPE
AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3)
in AudioRecordingConfiguration.recordingQuality
OnProxyConnectedHandler
TCP_PROXY(2)
in CLOUD_PROXY_TYPE
Modified
OnScreenCaptureInfoUpdatedHandler
callback. StartAudioRecordingDeviceTest
, StartAudioPlaybackDeviceTest
, and StartAudioDeviceLoopbackTest
method calls. NONE_PROXY(0)
in CLOUD_PROXY_TYPE
.v3.6.1.1 was released on March 8, 2022.
1. Error codes returned when the request to join a channel is rejected
To more accurately report the reason for the failure to join a channel, as of this release, the SDK returns the error code -17(ERR_JOIN_CHANNEL_REJECTED)
instead of -5(ERR_REFUSED)
in the following situations:
IRtcEngine
channel calls the joining channel method of the IRtcEngine
class with a valid channel name.AgoraChannel
channel calls the joining channel method of this AgoraChannel
object. 2. Media Push
To reduce the difficulty of integrating Media Push, this release optimizes the API design of Media Push and improves the handling of network issues within Media Push clients and servers. You can experience the optimized Media Push functionality with the following new methods:
StartRtmpStreamWithoutTranscoding
: Starts pushing media streams to a CDN without transcoding. This method works the same as the old method AddPublishStreamUrl(false)
.StartRtmpStreamWithTranscoding
: Starts pushing media streams to a CDN and sets the transcoding configuration. This method works the same as calling the old methods SetLiveTranscoding
and AddPublishStreamUrl(true)
in sequence.UpdateRtmpTranscoding
: Updates the transcoding configuration. This method works the same as the non-first call to the old method SetLiveTranscoding
.StopRtmpStream
: Stops pushing media streams to a CDN. This method works the same as the old method RemovePublishStreamUrl
.AddPublishStreamUrl
, SetLiveTranscoding
, and RemovePublishStreamUrl
. Agora recommends that you use the new methods for CDN live streaming and update your code logic by referring to Media Push. Also, as of this release, whether you use the new or old methods for Media Push, you can experience the following improvements:
Reporting streaming states, errors, and events:
In the RTMP_STREAM_PUBLISH_STATE
state code, adding RTMP_STREAM_PUBLISH_STATE_DISCONNECTING(5)
: The SDK is disconnecting from the Agora streaming server and CDN. When you call Remove
or Stop
to stop the streaming normally, the SDK reports the streaming state as DISCONNECTING
, IDLE
in sequence.
Renaming RTMP_STREAM_PUBLISH_ERROR
to RTMP_STREAM_PUBLISH_ERROR_TYPE
and adding the following to the RTMP_STREAM_PUBLISH_ERROR_TYPE
error code:
RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER(11)
: The user role is not host, so the user cannot use the CDN live streaming function. Check your application code logic.RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM(13)
: The UpdateRtmpTranscoding
or SetLiveTranscoding
method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic.RTMP_STREAM_PUBLISH_ERROR_NET_DOWN(14)
: Errors occurred in the host's network.RTMP_STREAM_PUBLISH_ERROR_INVALID_APPID(15)
: Your App ID does not have permission to use the CDN live streaming function. Refer to Prerequisites to enable the CDN live streaming permission.Adding the following to the RTMP_STREAMING_EVENT
event code:
RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT(3)
: The feature is not supported.RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN(4)
: Reserved.Adding multiple watermarks and background images during streaming with transcoding: This is achieved by adding watermarkCount
and backgroundImageCount
to the LiveTranscoding
structure.
Setting the layer number and transparency of each watermark and background image during streaming with transcoding: This is achieved by adding zOrder
and alpha
to the RtcImage
structure.
Using the HE-AAC v2 audio codec during streaming with transcoding: This is achieved by adding AUDIO_CODEC_PROFILE_HE_AAC_V2(2)
to AUDIO_CODEC_PROFILE_TYPE
.
3. Following the system default audio device (Windows, macOS)
To help developers more flexibly manage audio device switching, this release adds the following method:
GetAudioPlaybackDefaultDevice
: Gets the default audio playback device of the system.GetDefaultAudioRecordingDevice
:Gets the default audio capturing device of the system.FollowSystemPlaybackDevice
: Sets the audio playback device used by the SDK to follow the system default audio playback device.FollowSystemRecordingDevice
: Sets the audio recording device used by the SDK to follow the system default audio recording device.On Windows, after initialized, the SDK uses the system default audio device to play and capture audio by default. This release optimizes the default processing logic of the SDK when the system default audio device changes, as follows:
FollowSystemPlaybackDevice(false)
and FollowSystemRecordingDevice(false)
.4. Selecting Bluetooth profiles (iOS)
To ensure connectivity with Bluetooth headsets, as of this release, when a user in the communication profile or a host in the interactive live streaming profile uses a Bluetooth headset, the SDK checks whether the device supports the Hands-Free Profile (HFP), and selects the Bluetooth profile based on the result as follows:
1. Background blurring
To enrich the virtual background effects, this release adds support for setting background blur when a user enables the virtual background function by calling EnableVirtualBackground
. You need to set the type of the custom background image as BACKGROUND_BLUR
and set blur_degree
according to the degree of blurring that the user desires.
2. 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 OnChannelMediaRelayEventHandler
callback to report whether the media stream relay is successfully paused or resumed.
3. Pushing the external audio frame to a specified position
To meet the different processing requirements of external audio frames in different scenarios, this release deprecates PushAudioFrame(audioFrame)
and adds PushAudioFrame
with sourcePos
instead. You can push the external audio frame to one of three positions: after audio capture, before audio encoding, or before local playback. For example, in the KTV scenario, you can push the singing voice to after audio capture, and push the accompaniment to before audio encoding, so that the singing voice is processed by the SDK audio module, but the accompaniment is not affected by the SDK audio module. unity
This release also adds SetExternalAudioSourceVolume
, which enables you to set the volume of external audio frames at a specified position.
4. Advanced settings of the music file
To set the playback speed, audio track, and channel mode of a music file, this release adds the following methods:
SetAudioMixingPlaybackSpeed
: Sets the playback speed of the current music file. Agora recommends a value range of [50,400], where 100 represents the original speed.GetAudioTrackCount
: Gets the number of audio tracks of the current music file.SelectAudioTrack
: Specifies the playback audio track of the current music file. The range of index is [0, GetAudioTrackCount()
). SetAudioMixingDualMonoMode
: Sets the channel mode of the current music file to original mode, left channel mode, right channel mode, or mixed channel mode.5. 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 OnRequestAudioFileInfoHandler
.
6. Audio and video recording on the client
To enable users to record local audio and video on their client, this release adds the MediaRecorder
class, which supports recording the following content:
The generated recording files are saved in the local path specified by the user.
After successfully initializing the IRtcEngine
object, you can call the following methods and callbacks in the MediaRecorder
class to implement the local audio and video recording function:
GetMediaRecorder
: Registers MediaRecorderObserver
and gets the MediaRecorder
object.
StartRecording
: Sets the recording content, duration, format of generated files, and callback interval, and enables the local audio and video recording.
StopRecording
: Stops recording the local audio and video.
initMediaRecorderObserver
: Registers the MediaRecorder
observer.
OnRecorderStateChangedHandler
: Occurs when the recording state changes.
OnRecorderInfoUpdatedHandler
: Occurs when the recording information is updated.
COMMUNICATION
channel profile, this function is incompatible with versions of the SDK earlier than v3.0.1.7. Video snapshot
This release adds the TakeSnapshot
method for taking a snapshot of a video stream from the specified user, generating a JPG image, and saving it to the specified path. After a successful method call, the SDK triggers the OnSnapshotTakenHandler
callback to report whether the snapshot is successfully taken as well as the details of the snapshot taken.
8. Testing audio and video call loop
To check whether the local audio device, video device, and network conditions can guarantee the proper sending and receiving of audio and video streams, this release adds the StartEchoTest
[3/3] method. You can call this method before joining a channel to test whether the loop of a user's audio and video devices and network conditions are working properly.
Compared to StartEchoTest
[2/3], StartEchoTest
[3/3] can test video devices and secure the test, but cannot support setting the time interval for reporting test results.
9. Super resolution (beta) (Android, iOS)
To effectively boost the resolution of a remote user's video seen by the local user, this release adds support for the super resolution feature. You can call EnableRemoteSuperResolution
to enable super resolution. The SDK triggers the OnUserSuperResolutionEnabledHandler
callback to report whether this feature has been successfully enabled. If it is not enabled successfully, use the reason
code to troubleshoot issues.
10. Enabling device flash (Android, iOS)
To support calling the C++ APIs to enable the flash of a device on Android platform, this release adds the following APIs to C++:
IsCameraTorchSupported
: Determines whether the device supports enabling the flash.SetCameraTorchOn
: Sets whether to enable the flash.1. Audio device errors
This release adds the following error codes in LOCAL_AUDIO_STREAM_ERROR
:
LOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_ID(9)
, which indicates that the ID of the audio capture device is invalid.LOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_ID(10)
, which indicates that the ID of the audio playback device is invalid.2. Identification and quality testing for 5G mobile networks
This release adds identification and connection quality testing for 5G mobile networks:
NETWORK_TYPE_MOBILE_5G(6)
to NETWORK_TYPE
. When the local network changes to 5G, the SDK triggers the OnNetworkTypeChangedHandler
callback to report this network connection type.EnableLastmileTest
or StartLastmileProbeTest
to test the connection quality of the 5G mobile network.3. Screen sharing
In screen sharing scenarios, some users cannot use the excludeWindowList
attribute to block the specified window in a shared screen because their hardware does not support it. This release adds the OnScreenCaptureInfoUpdatedHandler
callback, which is triggered when the window blocking fails and reports the error code of the failure (errCode
) and the user's graphics card type (cardType
). (Windows)
This release adds the GetScreenCaptureManager
method for you to get a list of all the shareable screens and windows. Users can visually select a particular screen or window to share. (Windows, macOS)
StartScreenCaptureByScreenRect
to share a screen by the Rectangle
coordinates of the display on the virtual screen. As of this v3.6.1.1, you can also call StartScreenCaptureByDisplayId
to start screen sharing by passing in a display ID. (Windows, macOS)StartScreenCaptureByDisplayId
to start sharing instead of using StartScreenCaptureByScreenRect
.4. Local video errors (Windows, macOS)
To facilitate troubleshooting, this release adds the following error codes into LOCAL_VIDEO_STREAM_ERROR
:
LOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_ID(10)
: The SDK cannot find the video device in the video device list. Check whether the ID of the video device is valid.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDED(13)
: The window being shared is overlapped by another window, so the overlapped area is blacked out by the SDK during window sharing.LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED(20)
: The SDK does not support sharing this type of window.5. Performance improvements
This release slightly reduces CPU usage in video scenarios by optimizing the FEC (Forward Error Correction) codec.
6. Experience improvements
This release improves video sharpness and smoothness under poor network conditions by optimizing the congestion control algorithm.
7. Image enhancement
This release updates the Agora image enhancement algorithm to improve the image enhancement effects that you can enable by calling SetBeautyEffectOptions
. To balance these image enhancement effects, this release changes the default value of lighteningLevel
from 0.7 to 0.6 and adds sharpnessLevel
to the BeautyOptions
structure to support setting the sharpness level.
libagora_video_process_extension.dll
dynamic library before calling SetBeautyEffectOptions
; otherwise, you cannot experience the optimized image enhancement effects and sharpness adjustment brought out by the updated Agora image enhancement algorithm, but only the image enhancement effects brought out by the older Agora image enhancement algorithm.8. Adapting OpenSL (Android)
This release adapts OpenSL to reduce the audio delay. It also adds a blacklist to disable OpenSL and enable Java adm on some devices that do not support OpenSL in order to improve the stability of audio functions.
9. Other improvements
This release also provides the following improvements:
After a remote user using a Mac device leaves a channel due to the LeaveChannel
method call, network interruption, or other reasons, the local user sees the remote view stay on the last video frame instead of the remote view directly disappearing as in previous versions.
Adds continuous optimization of the portrait edge effect of the virtual background.
In scenarios with high CPU usage, the audio experience is improved when the sound card is used for audio capture.
After enabling noise suppression, the audio experience is improved when using some Bluetooth headsets.
The window sharing feature is adapted to share more types of application windows. (Windows)
Optimizes the video quality, latency, and performance for screen sharing. (Windows, macOS)
Adds support for audio playback devices with S/PDIF (Sony/Philips Digital Interface). (Windows)
Adds the fallback to software encoding when hardware encoding fails for the custom video in texture format, in order to improve the usability of video functions. (Android)
To improve audio quality when a user uses a Bluetooth headset, this release optimizes the logic for selecting Bluetooth profiles and volume types. (Android, iOS)
Bluetooth profile: As of this release, the Bluetooth profile used by the SDK is only affected by the user role.
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 | 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 | Media volume |
This release fixed the following issues:
The CDN live streaming failed because of the abnormal resolution of the RTMP streaming URL with a port number.
When you used raw video data, the SDK incorrectly triggered the OnRenderVideoFrameHandler
callbacks when capturing a local video frame to be rendered.
Occasional crashes occurred when you used raw video data.
After you successfully registered the raw video data observer, the app implemented time-consuming tasks in the OnCaptureVideoFrameHandler
callback and caused video freezes for remote users.
In the GAME_STREAMING
scenario, occasional echo or noise that was caused by inaccurate music detection occurred.
The local user occasionally saw the remote user with a short black screen after the remote user called EnableLocalVideo(false)
, EnableLocalVideo(true)
to disable and enable local video capture or called MuteLocalVideoStream(true)
, MuteLocalVideoStream(false)
to stop and resume sending local video in sequence within a few seconds.
When the local user called MuteAllRemoteAudioStreams
and received OnRemoteAudioStateChangedHandler(REMOTE_AUDIO_REASON_LOCAL_MUTED)
, OnRemoteAudioStateChangedHandler(REMOTE_AUDIO_REASON_REMOTE_MUTED)
was incorrectly received after 15 seconds.
As of v3.4.5, the return value was inaccurate when you called JoinChannel
multiple times in a row.
When the host used a specific low-end device under certain circumstances, the audience watching the host's video occasionally experience lag.
Under certain circumstances, when the sender used certain Xiaomi or Redmi devices, the receiver occasionally saw a mosaic square on the received video.
When the sender used certain Android emulators, the local video or the video received by the receiver was abnormal.
The method call of SetExternalAudioSource
before joining the channel did not take effect.
Echoes could occur when you used a fiber optic speaker.
The SDK additionally triggered the OnLocalAudioStateChangedHandler
callback to report LOCAL_AUDIO_STREAM_STATE_CAPTURING(1)
when you called EnableLocalAudio(false)
after joining a channel.
The video bitrate failed to climb when a user joined a channel in poor network conditions with high packet loss.
The video sharpness and smoothness degraded significantly due to a cliff-like drop in video bitrate under certain poor network conditions.
Remote users heard slightly unsynchronized voice and music when a user called StartAudioMixing
on some Android devices.
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.
Occasionally, the video received by remote users froze after you enabled media stream encryption.
When using the v3.5.0.3 SDK, the local user could not be heard by remote users when the local user used custom audio capture by the Push method. (Windows, Android)
Window sharing stopped after a user shared a QQ browser window and switched the browser tab. (Windows)
The SDK repeatedly triggered the OnAudioDeviceStateChangedHandler
callback when the user connected or disconnected an audio device. (Windows)
A black screen appeared when you shared a screen with certain NVIDIA and Intel dual graphics cards. (Windows)
The system version of Windows was incorrectly recognized on some devices. (Windows)
When the local user shared a specified window, the local user found that the window was hidden, and remote users could not see the shared window. (Windows)
Sharing the Foxmail window failed. (Windows)
When the local user called EnableLoopbackRecording
to enable loopback audio capturing on some devices, remote users heard the audio being played back twice. (Windows)
After the local user shared a certain application window, and if another application window was fronted and overlaid the current shared window area, remote users saw black blocking in the shared window. (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)
Crashes occurred on some devices running on Windows 7. (Windows)
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 OnAudioVolumeIndicationHandler
callback was incorrect. (Windows)
On some Xiaomi devices, the user could not use the device's volume button to adjust the volume after calling SetEnableSpeakerphone
. (Android)
On some devices, occasional crashes occurred after you enabled the virtual background. (Android)
On some devices, occasional noises occurred when you used OpenSL. (Android)
Occasional crashes occurred. (Android)
On some devices, the main thread got stuck for 1 or 2 seconds after the SetEnableSpeakerphone
method call. (Android)
The SoundTouch open-source library occasionally caused crashes when you used SetLocalVoiceChanger
and SetLocalVoicePitch
. (Android)
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)
Updating the transcoding layout in CDN live streaming occasionally failed under certain circumstances. (Android)
When using an app integrated with the SDK for real-time communication, if a user answered a system call and returned to the app, the audio route of the SDK changed. For example, when the audio was played through the speaker in the app, if a user answered a system call through the earpiece and returned to the app, the audio route of the SDK changed to the earpiece. (Android)
Crashes occasionally occurred in audio scenarios. (Android, iOS)
When a user with the audio profile 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)
When a Bluetooth headset and a wired headset were connected to the audio playback device at the same time, the SDK did not trigger OnAudioRouteChangedHandler
after plugging and unplugging the wired headset multiple times. (Android)
The SDK caused the Bluetooth to restart and triggered the prompt to turn off the bluetooth when the SDK detected incorrect settings of the Bluetooth. (Android)
When you were playing an original song, the calling of SetAudioMixingPitch
to adjust the pitch caused the played song to switch to accompaniment. (Android, iOS)
In the EDUCATION
scenario, occasionally the volume became unstable when the user called EnableLocalAudio
to enable or disable the local audio capture. (Android)
On some devices, when you captured video at 353 × 288 resolution using the front camera, the captured video was stretched and distorted. (iOS)
After you enabled Bitcode settings in Xcode and integrated the AgoraVideoProcessExtension.xcframework
dynamic library, errors occurred when you uploaded the app to the Apple Store. (iOS)
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)
The StartAudioMixing
method call failed to play local iTunes music files starting with "ipod-library://"
. (iOS)
Repeated declaration of the OnUserMutedAudioHandler
, OnUserEnableVideoHandler
, OnUserEnableLocalVideoHandler
, and OnFirstRemoteVideoFrameHandler
functions occurred in the header file. (iOS, macOS)
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)
Enabling video mirror mode occasionally caused crashes. (iOS)
In the AUDIO_SCENARIO_CHATROOM_GAMING
scenario, the moment a user in the channel switched the role from CLIENT_ROLE_AUDIENCE
to CLIENT_ROLE_BROADCASTER
, that user heard a zipping noise. (iOS)
When ORIENTATION_MODE
was set as ORIENTATION_MODE_FIXED_PORTRAIT
, the width and height of the video resolution was reversed, which caused the human face in video to be scaled up. (ios)
When PauseAudioMixing
was called before playing an audio file, and then StartAudioMixing
was called to play the audio file, playback failed. (iOS)
On some low-end iOS devices, after switching to the background during screen sharing, the app was forcibly closed by the system because it took up more memory than the limit. (iOS)
The local user occasionally could not hear remote users after calling SetAudioSessionOperationRestriction
. (iOS)
When the host in the channel switched their role to CLIENT_ROLE_AUDIENCE
and then back to CLIENT_ROLE_BROADCASTER
, the audience heard the host's voice with a voice change effect. (iOS)
After a user played music with a third-party music player and set the audio scenario to AUDIO_SCENARIO_CHATROOM_GAMING
, joining a channel could interrupt the music played by the third-party music player. (iOS)
Remote users could not see the shared screen video during the local user's screen sharing. (iOS)
Remote users saw the screen shared by the local user flicker. (iOS, macOS)
Memory leaked when the value of captureMouseCursor
was not false
for screen sharing. (macOS)
UpdateScreenCaptureRegion
failed after a user shared a full screen window. (macOS)
On some device models, when the audio was played through a speaker, echoes occasionally occurred if the speaker volume was set to the maximum value. (macOS)
Echoes could occur when a user joined a channel for the first time. (macOS)
Occasionally, remote users saw a short black screen of the shared window during the local user's window sharing. (macOS)
Occasionally, Web clients could not hear Native clients. (macOS)
Added
blur_degree
and BACKGROUND_BLUR_DEGREE
in VirtualBackgroundSource
BACKGROUND_BLUR
in BACKGROUND_SOURCE_TYPE
PushAudioFrame
SetExternalAudioSourceVolume
SetAudioMixingPlaybackSpeed
GetAudioTrackCount
SelectAudioTrack
SetAudioMixingDualMonoMode
PauseAllChannelMediaRelay
ResumeAllChannelMediaRelay
CHANNEL_MEDIA_RELAY_EVENT
:RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(12)
RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED(13)
RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(14)
RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED(15)
GetAudioFileInfo
OnRequestAudioFileInfoHandler
LOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_ID(9)
and LOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_ID(10)
in LOCAL_AUDIO_STREAM_ERROR
NETWORK_TYPE_MOBILE_5G(6)
in NETWORK_TYPE
StartEchoTest
[3/3]StartScreenCaptureByDisplayId
GetScreenCaptureManager
GetMediaRecorder
OnRecorderStateChangedHandler
OnRecorderInfoUpdatedHandler
StartRecording
StopRecording
initMediaRecorderObserver
TakeSnapshot
OnSnapshotTakenHandler
LOCAL_VIDEO_STREAM_ERROR
:LOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_ID(10)
LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDED(13)
LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED(20)
StartRtmpStreamWithoutTranscoding
StartRtmpStreamWithTranscoding
UpdateRtmpTranscoding
StopRtmpStream
RTMP_STREAM_PUBLISH_STATE_DISCONNECTING(5)
in RTMP_STREAM_PUBLISH_STATE
RTMP_STREAM_PUBLISH_ERROR_TYPE
:RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER(11)
RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM(13)
RTMP_STREAM_PUBLISH_ERROR_NET_DOWN(14)
RTMP_STREAM_PUBLISH_ERROR_INVALID_APPID(15)
RTMP_STREAMING_EVENT
:RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT(3)
RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN(4)
watermarkCount
and backgroundImageCount
in LiveTranscoding
zOrder
and alpha
in RtcImage
AUDIO_CODEC_PROFILE_HE_AAC_V2(2)
in AUDIO_CODEC_PROFILE_TYPE
GetAudioRecordingDefaultDevice
GetAudioPlaybackDefaultDevice
FollowSystemPlaybackDevice
FollowSystemRecordingDevice
sharpnessLevel
in BeautyOptions
Modified
RTMP_STREAM_PUBLISH_ERROR
to RTMP_STREAM_PUBLISH_ERROR_TYPE
lighteningLevel
from 0.7 to 0.6Deprecated
PushAudioFrame
GetAudioMixingDuration
v3.5.0.3 was released on September 15, 2021.
Changes to audio route behavior
On Android, to improve user experience, this release improves the following SDK behavior:
When the SDK uses the media volume, the audio route is affected as follows:
If multiple external audio devices are connected, when the user removes the current playback device, the audio route is affected as follows:
SetEnableSpeakerphone
> SetDefaultAudioRouteToSpeakerphone
> the default audio route of the SDK.1. Video quality
The following improvements have been made to the quality of captured and received video in this release:
2. Virtual background (beta)
On Windows, this release optimizes the portrait edge effect of the virtual background.
On Android and iOS, this release adds the EnableVirtualBackground
method, with which you can enable and set a virtual background for users as either a solid color or an image in PNG or JPG format. You can use the OnVirtualBackgroundEnabledHandler
callback to learn whether the virtual background is successfully enabled or the reason for an error.
3. Additional improvements
This release also improves the following:
This release fixed the following issues:
rxQuality
) of remote users reported by the SDK was not accurate.MuteLocaAudioStream(true)
to stop publishing a local audio stream, the local user could hear remote users when the local user joined a channel for the first time. After leaving the channel and joining another channel, occasionally the local user could not hear remote users.ORIENTATION_MODE
was set as ORIENTATION_MODE_FIXED_PORTRAIT
, the width and height of the video resolution was reversed, which caused the human face in video to be scaled up.RegisterAudioRawDataObserver
to register the original audio data callback, and calling EnableLoopbackRecording
to start the sound card capturing, noises occurred when a user played a local audio file.memoryTotalUsageRatio
reported by the ChannelOnRtcStatsHandler
callback was not accurate.EnableLoopbackRecording
, occasionally the local user heard an echo of their own audio. Modified
v3.4.6 was released on July 23, 2021.
On Android and iOS, to improve the accuracy of face detection results, as of this release, the SDK triggers the OnFacePositionChangedHandler
callback immediately after detecting the disappearance of the human face.
This release fixed the following issues:
StartAudioMixing
was called and a percent-encoding URL was passed in this method, the SDK failed to play the corresponding online audio file. v3.4.5 was released on July 5, 2021.
1. Support for GCM2 encryption
To further improve the security during real-time audio transmission process, this release adds the following:
AES_128_GCM2
and AES_256_GCM2
encryption modes in EncryptionMode
. The new GCM encryption modes use a more secure KDF (Key Derivation Function) and support setting the key and salt.EncryptionKdfSalt
member in EncryptionConfig
to add the salt for the AES_128_GCM2
and AES_256_GCM2
encryption modes.This release also changes the default encryption mode from AES_128_XTS
to AES_128_GCM2
. If you use the default encryption mode in earlier versions, after upgrading the SDK to v3.4.5, ensure that you call EnableEncryption
and set EncryptionMode
to AES_128_XTS
.
2. Audio stream publishing behavior changes
To flexibly control the publishing state in multiple channels, this release optimizes the AgoraChannel
class as follows:
Deprecates the Publish
and Unpublish
methods, and adds MuteLocalAudioStream
and MuteLocalVideoStream
instead. You can set the publishing state of the audio stream and video stream separately.
Adds the publishLocalAudio
and publishLocalVideo
members in ChannelMediaOptions
. You can set the publishing state when joining a channel.
After calling SetClientRole(BROADCASTER)
, the local user publishes audio and video streams by default.
The above improvements bring the following changes in the IRtcEngine
class:
MuteLocalAudioStream
and MuteLocalVideoStream
of IRtcEngine
do not take effect for channels created by the AgoraChannel
class, so you need to use the MuteLocalAudioStream
and MuteLocalVideoStream
of the AgoraChannel
class instead.JoinChannel
with the options
parameter, you can set the publishing state.JoinChannel
with the options
parameter, MuteLocalAudioStream
or MuteLocalVideoStream
only takes effect when it is called after JoinChannel
.If you upgrade the SDK to v3.4.5 or later, to avoid affecting your service, Agora recommends modifying the implementation of MuteLocalAudioStream
, MuteLocalVideoStream
, Publish
, and Unpublish
.
1. Virtual background (beta)
On Windows and macOS, this release adds the EnableVirtualBackground
method, with which you can enable and set a virtual background for users as either a solid color or an image in PNG or JPG format. You can use the OnVirtualBackgroundSourceEnabledHandler
callback to learn whether the virtual background is successfully enabled or the reason for an error.
1. Compatibility with macOS Monterey 12 and iOS 15
This release supports macOS Monterey 12 and iOS 15.
2. Performance optimization
On Windows, Agora has optimized internal threads of the SDK, which reduces CPU usage by about 20% on low-end devices.
3. Media Push
To be more transparent to users about errors and events in Media Push, this release adds the following codes:
OnRtmpStreamingStateChangedHandler
: Error code RTMP_STREAM_UNPUBLISH_ERROR_OK (100)
, which reports that the streaming has been stopped normally. After you call RemovePublishStreamUrl
to stop streaming, the SDK returns this error code and state code RTMP_STREAM_PUBLISH_STATE_IDLE (0)
.OnRtmpStreamingEventHandler
: Event code RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE (2)
, which reports that the streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL.4. Media device state
To report media device states more accurately, this release optimizes the enumerations of OnAudioDeviceStateChangedHandler
and OnVideoDeviceStateChangedHandler
callbacks as follows:
On Windows:
MEDIA_DEVICE_STATE_ACTIVE (1)
from " The device is idle" to "The device is in use", which is more consistent with its name.MEDIA_DEVICE_STATE_IDLE (0)
, which reports the device is ready for use.On macOS:
0
from "Added" to "The device is ready for use".1
to 8
.5. Music file state
When you call StartAudioMixing
after PauseAudioMixing
, this release adds the OnAudioMixingStateChangedHandler(AUDIO_MIXING_STATE_STOPPED, AUDIO_MIXING_REASON_STOPPED_BY_USER)
state, which indicates the music file is stopped, before reporting OnAudioMixingStateChangedHandler(AUDIO_MIXING_STATE_PLAYING, AUDIO_MIXING_REASON_STARTED_BY_USER)
.
This release fixed the following issues:
StartAudioMixing
method could not play the MP3 local music files with the .m4a
filename extension.StartAudioMixing
to play an online music file, occasionally the SDK response time was too long and caused a freeze.AUDIO_SCENARIO_CHATROOM_GAMING
, after the local user played a video through the system media player, started screen sharing, and used a sound card to sample audio streams, the video sound heard by remote users contained noise.StartAudioMixing
to play an online music file Under poor network conditions, an ANR pop-up window occasionally appeared.Added
EnableVirtualBackground
OnVirtualBackgroundSourceEnabledHandler
RTMP_STREAM_UNPUBLISH_ERROR_OK (100)
in RTMP_STREAM_PUBLISH_ERROR
RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE (2)
in RTMP_STREAMING_EVENT
AES_128_GCM2 (7)
and AES_256_GCM2 (8)
in EncryptionMode
encryptionKdfSalt
in EncryptionConfig
MuteLocalAudioStream
and MuteLocalVideoStream
in IRtcEngine
publishLocalAudio
and publishLocalVideo
in ChannelMediaOptions
MEDIA_DEVICE_STATE_IDLE (0)
in MEDIA_DEVICE_STATE_TYPE
Modified
Deprecated
Publish
and Unpublish
in AgoraChannel
v3.4.2 was released on May, 2021.
Integration changes
This release adds the libagora-wgc.dll
dynamic library, which is related to window sharing. To upgrade the SDK to v3.4.2 or later, ensure that you have copied this dynamic library to the folder where the agora_rtc_sdk.dll
file is located.
To reduce the app size after integrating the SDK, this release packages some features as extension libraries (with the Extension
suffix). If you do not need to use the related features, you can remove the corresponding extension libraries and recompile the project.
Behavior changes
To monitor the reason why the playback state of a music file changes, this release modifies the OnAudioMixingStateChangedHandler
callback as follows:
errorCode
parameter with the reason
parameter.AUDIO_MIXING_ERROR_TYPE
and replaces it with AUDIO_MIXING_REASON_TYPE
instead. Using AUDIO_MIXING_REASON_TYPE
, you can get the reason for the change of the playback state, such as start, pause, stop or fail.state
. For example, as of this release, when looping music, the SDK triggers the 710
state when each loop is completed or starts.If you upgrade the SDK to v3.4.2 or later, to avoid affecting your service, Agora recommends that you modify the implementation of OnAudioMixingStateChangedHandler
.
As of this release, the AdjustRecordingSignalVolume
method only adjusts the volume of the signal captured by the microphone. If you need to adjust the volume of the signal captured by the sound card, use the AdjustLoopbackRecordingSignalVolume
method instead.
1. Volume control of sound cards
This release adds the AdjustLoopbackRecordingSignalVolume
method. You can call this method after calling EnableLoopbackRecording
to adjust the volume of the signal captured by the sound card.
2. Playback progress of audio effect files
To control the playback progress of audio effect files, this release adds the following methods:
PlayEffect
[2/2]: Sets the playback position when starting playback of an audio effect file by using the startPos
parameter.SetEffectPosition
: Sets the playback position after starting playback of an audio effect file.GetEffectDuration
: Gets the duration of a local audio effect file.GetEffectCurrentPosition
: Gets current playback progress of an audio effect file.Also, this release deprecates the PlayEffect
[1/2] method. You can use PlayEffect
[2/2] instead.
1. Video encoding
The Agora SDK allows you to use degradationPreference
to set the degradation preference of local video encoding under limited bandwidth, for example, reducing the video frame rate while maintaining video quality, or reducing the video quality while maintaining the video frame rate. As of this release, degradationPreference
can be set as MAINTAIN_BALANCED
, which reduces the video frame rate and video quality simultaneously to strike a balance between smoothness and video quality. MAINTAIN_BALANCED
is suitable for scenarios where both smoothness and video quality are a priority, such as one-to-one calls, one-to-one online teaching, and multi-user online meetings.
2. Window sharing
This release optimizes window sharing as follows:
StartScreenCaptureByWindowId
method supports sharing most UWP (Universal Windows Platform) application windows and windows rendered using DirectX. During window sharing, a yellow border appears around the shared window, and calling captureMouseCursor(false)
does not take effect.3. Playback progress of music files
To control the playback progress of music files, this release is optimized as follows:
StartAudioMixing
method and adds a new method with the same name in its place. The new StartAudioMixing
method allows you to set the playback position when starting playback of a music file by using the startPos
parameter.GetAudioMixingDuration
method and adds a new method with the same name in its place. The new GetAudioMixingDuration
method allows you to get the duration of a local music file before playing it.4. AirPlay callback
This release adds support for reporting AUDIO_ROUTE_AIRPLAY
in the OnAudioRouteChangedHandler
callback on iOS devices. When you use Apple AirPlay to play audio on an iOS device, the SDK triggers the OnAudioRouteChangedHandler
callback and reports AUDIO_ROUTE_AIRPLAY
.
5. Audio recording
To set the recording configuration during audio recording, this release adds a new StartAudioRecording
method and deprecates the old method with the same name. The config
parameter of the new StartAudioRecording
method allows you to set the audio recording quality, content, sample rate, and storage path of the recording file.
This release also adds a new error code: 160
. If you call the new StartAudioRecording
method again before the current playback completes, the SDK reports this error code.
6. Media device errors
To help users better understand the cause of local video or audio errors, this release adds the following new error codes:
To LOCAL_VIDEO_STREAM_ERROR
: LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND(8)
, which indicates that the SDK cannot find the local video-capture device.
To LOCAL_AUDIO_STREAM_ERROR
:
LOCAL_AUDIO_STREAM_ERROR_NO_RECORDING_DEVICE(6)
, which indicates that the SDK cannot find the local audio-capture device.LOCAL_AUDIO_STREAM_ERROR_NO_PLAYOUT_DEVICE(7)
, which indicates that the SDK cannot find the local audio-playback device.7. URI support
To meet the requirements of Google Play Store, this release supports accessing a local file through URIs. When you call StartAudioMixing
, GetAudioMixingDuration
, PreloadEffect
, PlayEffect
, GetEffectDuration
or AddVideoWatermark
and need to access a local file, Agora recommends the following steps:
Uri.toString
to convert the URI to a string.filePath
or watermarkUrl
parameter.This release fixed the following issues:
OnVolumeIndicationHandler
callback returned incorrect volume information after you called EnableSoundPositionIndication(true)
.libagora_ai_denoise_extension.dll
library.Added
AdjustLoopbackRecordingSignalVolume
GetAudioMixingDuration
[2/2]StartAudioRecording
[3/3]GetEffectDuration
SetEffectPosition
GetEffectCurrentPosition
PlayEffect
[2/2]StartAudioMixing
[2/2]LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND(8)
in LOCAL_VIDEO_STREAM_ERROR
LOCAL_AUDIO_STREAM_ERROR_NO_RECORDING_DEVICE(6)
and LOCAL_AUDIO_STREAM_ERROR_NO_PLAYOUT_DEVICE(7)
in LOCAL_AUDIO_STREAM_ERROR
-160
Modified
Deprecated
GetAudioMixingDuration
[1/2]StartAudioRecording
[2/3]PlayEffect
[1/2]StartAudioMixing
[1/2]AUDIO_MIXING_ERROR_TYPE
v3.3.1 was released on March 12, 2021.
1. Integration change
This release adds the following libraries:
Target platform | Agora basic calculation library | Noise suppression library (Optional) |
---|---|---|
Android | libagora-core.so |
libagora_ai_denoise_extension.so |
iOS | AgoraCore.framework |
AgoraAIDenoiseExtension.framework |
macOS | AgoraCore.framework |
AgoraAIDenoiseExtension.framework |
Windows | libagora-core.dll |
libagora_ai_denoise_extension.dll |
2. Behavior change
This release deprecates SetDefaultMuteAllRemoteAudioStreams
and SetDefaultMuteAllRemoteVideoStreams
and changes the behavior of Mute
-related methods as follows:
Mute
-related methods must be called after joining or switching to a channel; otherwise, the method call does not take effect.MuteAll
are no longer the master switch, and each Mute
-related method independently controls the user's subscribing state. When you call methods with the prefixes MuteAll
and MuteRemote
together, the method that is called later takes effect.MuteAll
set whether to subscribe to the audio or video streams of all remote users, including all subsequent users, which means methods with the prefix MuteAll
contain the function of methods with the prefix SetDefaultMute
. Agora recommends not calling methods with the prefixes MuteAll
and SetDefaultMute
together; otherwise, the setting may not take effect.See details in Set the Subscribing State.
1. Native support for the M1 chip
This release adds native support for the M1 chip, which means the SDK supports both x86-64 and arm64 architectures. As of v3.3.1, apps that integrate the SDK can natively run on Mac devices with the M1 chip, and you no longer need to set the Rosetta translation.
2. Channel media options
To help developers control media subscription more flexibly, this release adds the JoinChannel
2 and SwitchChannel
2 methods to set whether users subscribe to all remote audio or video streams in a channel when joining and switching channels.
3. Cloud proxy
To improve the usability of the Agora Cloud Proxy, this release adds the SetCloudProxy
method to set the cloud proxy and allows you to select a cloud proxy that uses the UDP protocol. For details, see Cloud Proxy.
4. Noise suppression
To eliminate non-stationary noise based on traditional noise reduction, this release adds EnableDeepLearningDenoise
to enable noise suppression.
5. Singing beautifier
To beautify the voice and add reverberation effects in a singing scenario, this release adds the SetVoiceBeautifierParameters
method and adds the SINGING_BEAUTIFIER
enumeration value to VOICE_BEAUTIFIER_PRESET
.
You can call SetVoiceBeautifierPreset(SINGING_BEAUTIFIER)
to beautify the male voice and add the reverberation effect for a voice in a small room. For more settings, you can call SetVoiceBeautifierParameters
(SINGING_BEAUTIFIER
, param1
, param2
) to beautify male or female voices and add reverberation effects for a voice in a small room, large room, or hall.
6. Voice Conversion
This release adds the SetVoiceConversionPreset
method to set a voice conversion effect (to disguise a user's voice). You can use this method to make a male-sounding voice sound steady or deep, and a female-sounding voice sound gender-neutral or sweet. See Set the Voice Effect.
7. Log files
To ensure the integrity of log content, this release adds the logConfig
member variable to RtcEngineContext
. You can use logConfig
to set the log files output by the Agora SDK when you initialize IRtcEngine
.
As of v3.3.1, Agora does not recommend using the SetLogFile
, SetLogFileSize
, or SetLogFilter
methods to set the log files.
8. Quality of captured video
To control the quality of video captured by the local camera, this release adds support for customizing the capture resolution and listening for abnormalities.
SetCameraCapturerConfiguration
method to set the capture preference to CAPTURER_OUTPUT_PREFERENCE_MANUAL(3)
and set the width and height of the captured video image.captureBrightnessLevel
in the OnLocalVideoStatsHandler
callback.OnLocalVideoStateChangedHandler(LOCAL_VIDEO_STREAM_STATE_FAILED, LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE)
callback.OnLocalVideoStateChangedHandler(LOCAL_VIDEO_STREAM_STATE_CAPTURING, LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE)
callback.9. Data streams
To support scenarios such as lyrics synchronization and courseware synchronization, this release deprecates the previous CreateDataStream
method and replaces it with a new method of the same name. You can use this new method to create a data stream and set whether to synchronize the data stream with the audio stream sent to the Agora channel and whether the received data is ordered.
1. AES-GCM encryption mode
For scenarios requiring high security, to guarantee the confidentiality, integrity, and authenticity of data, and to improve the computational efficiency of data encryption, this release adds the following enumerators in ENCRYPTION_MODE
:
AES_128_GCM
: 128-bit AES encryption, GCM mode.AES_256_GCM
: 256-bit AES encryption, GCM mode.2. Remote audio statistics
To monitor quality of experience (QoE) of the local user when receiving a remote audio stream, this release adds the following members to OnRemoteAudioStatsHandler
:
qoeQuality
: Reports QoE of the local user.qualityChangedReason
: Reports the reason for poor QoE.mosValue
: Reports the quality of the remote audio stream as determined by the Agora real-time audio MOS (Mean Opinion Score) measurement system.This release fixed the following issues:
OnVolumeIndicationHandler
callback.Added
SetVoiceConversionPreset
AES_128_GCM
and AES_256_GCM
in ENCRYPTION_MODE
SetVoiceBeautifierParameters
SINGING_BEAUTIFIER
in VOICE_BEAUTIFIER_PRESET
EnableDeepLearningDenoise
JoinChannel
2SwitchChannel
2CreateDataStream
logConfig
in RtcEngineConfig
qoeQuality
, qualityChangedReason
and mosValue
in RemoteAudioStats
SetCloudProxy
captureBrightnessLevel
in LocalVideoStats
captureWidth
and captureHeight
in CameraCapturerConfiguration
CAPTURER_OUTPUT_PREFERENCE_MANUAL(3)
in CAPTURER_OUTPUT_PREFERENCE
ERR_MODULE_NOT_FOUND(157)
Deprecated
SetDefaultMuteAllRemoteVideoStreams
SetDefaultMuteAllRemoteAudioStreams
SetLogFile
SetLogFileSize
SetLogFilter
CreateDataStream
v3.2.1 was released on December 30, 2020.
1. Integration change
Since v3.2.1, the following libraries have been added to the SDK package:
See the added files for each platform as follows:
Platform | File name |
---|---|
Android | libagora-fdkaac.so libagora-mpg123.so libagora-soundtouch.so libagora-ffmpeg.so |
iOS | Agorafdkaac.framework AgoraSoundTouch.framework Agoraffmpeg.framework |
macOS | Agorafdkaac.framework AgoraSoundTouch.framework Agoraffmpeg.framework |
Windows | libagora-fdkaac.dll libagora-mpg123.dll libagora-soundtouch.dll libagora-ffmpeg.dll |
If you upgrade the SDK to v3.2.1, ensure that you have added the above files in your project according to Quickstart Guide.
2. Cloud proxy
This release optimizes the Agora cloud proxy architecture. If you are already using cloud proxy, to avoid compatibility issues between the new SDK and the old cloud proxy, please contact support@agora.io before upgrading the SDK. See Cloud Proxy.
3. Security and compliance
Agora has passed ISO 27001, ISO 27017, and ISO 27018 international certifications, providing safe and reliable real-time interactive cloud services for users worldwide. See ISO Certificates.
This release supports transport layer encryption by adding TLS (Transport Layer Security) and UDP (User Datagram Protocol) encryption methods.
1. Interactive Live Streaming Standard
This release adds SetClientRole
for setting the latency level of an audience member. You can use this method to switch between Interactive Live Streaming Premium and Interactive Live Streaming Standard as follows:
For details, see the product overview of Interactive Live Streaming Standard.
2. Publishing and subscription states
This release adds the following callbacks to report the current publishing and subscribing states:
OnAudioPublishStateChangedHandler
: Reports the change of the audio publishing state.OnVideoPublishStateChangedHandler
: Reports the change of the video publishing state.OnAudioSubscribeStateChangedHandler
: Reports the change of the audio subscribing state.OnVideoSubscribeStateChangedHandler
: Reports the change of the video subscribing state.3. First local frame published callback
This release adds the OnFirstLocalAudioFramePublishedHandler
and OnFirstLocalVideoFramePublishedHandler
callbacks to report that the first audio or video frame is published. The OnFirstLocalAudioFrameHandler
callback is deprecated from v3.1.0.
4. Custom data report
This release adds the SendCustomReportMessage
method for reporting customized messages. To try out this function, contact support@agora.io and discuss the format of customized messages with us.
1. Regional connection
This release changes the AREA_CODE
for regional connection, and adds area codes for Japan and India. The latest area codes are as follows:
AREA_CODE_CN
: Mainland China.AREA_CODE_NA
: North America.AREA_CODE_EU
: Europe.AREA_CODE_AS
: Asia, excluding Mainland China.AREA_CODE_JP
: Japan.AREA_CODE_IN
: India.AREA_CODE_GLOB
: (Default) Global.If you have specified a region for connection when calling GetEngine
, ensure that you use the latest area code when migrating from an earlier SDK version.
2. Meeting scenario
To improve the audio experience for multi-person meetings, this release adds AUDIO_SCENARIO_MEETING(8)
in SetAudioProfile
.
3. Voice beautifier and audio effects
To improve the usability of the APIs related to voice beautifier and audio effects, this release deprecates SetLocalVoiceChanger
and SetLocalVoiceReverbPreset
, and adds the following methods instead:
SetVoiceBeautifierPreset
: Compared with SetLocalVoiceChanger
, this method deletes audio effects such as a little boy’s voice and a more spatially resonant voice.SetAudioEffectPreset
: Compared with SetLocalVoiceReverbPreset
, this method adds audio effects such as the 3D voice, the pitch correction, a little boy’s voice and a more spatially resonant voice.SetAudioEffectParameters
: This method sets detailed parameters for a specified audio effect. In this release, the supported audio effects are the 3D voice and pitch correction.4. Media Push
To improve the user experience in Media Push, this release adds the OnRtmpStreamingEventHandler
callback to report events during Media Push, such as failure to add a background image or watermark image.
5. Encryption
This release adds the EnableEncryption
method for enabling built-in encryption, and deprecates the following methods:
SetEncryptionSecret
SetEncryptionMode
6. More in-call statistics
This release adds the following attributes to provide more in-call statistics:
Adds txPacketLossRate
in LocalAudioStats
, which represents the audio packet loss rate (%) from the local client to the Agora edge server before applying anti-packet loss strategies.
Adds the following attributes in LocalVideoStats
:
txPacketLossRate
: The video packet loss rate (%) from the local client to the Agora edge server before applying anti-packet loss strategies.captureFrameRate
: The capture frame rate (fps) of the local video.Adds publishDuration
in RemoteAudioStats
and RemoteVideoStats
, which represents the total publish duration (ms) of the remote media stream.
7. Audio profile
To improve audio performance, this release adjusts the maximum audio bitrate of each audio profile as follows:
Profile | v3.2.1 | Earlier than v3.2.1 |
---|---|---|
AUDIO_PROFILE_DEFAULT |
For the interactive streaming profile: 64 KbpsFor the communication profile:Windows: 16 KbpsAndroid/iOS/macOS: 18 Kbps | For the interactive streaming profile: 52 KbpsFor the communication profile:Windows: 16 KbpsAndroid/iOS/macOS: 18 Kbps |
AUDIO_PROFILE_SPEECH_STANDARD |
18 Kbps | 18 Kbps |
AUDIO_PROFILE_MUSIC_STANDARD |
64 Kbps | 48 Kbps |
AUDIO_PROFILE_MUSIC_STANDARD_STEREO |
80 Kbps | 56 Kbps |
AUDIO_PROFILE_MUSIC_HIGH_QUALITY |
96 Kbps | 128 Kbps |
AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO |
128 Kbps | 192 Kbps |
8. Log files
This release increases the default number of log files that the Agora SDK outputs from 2 to 5, and increases the default size of each log file from 512 KB to 1024 KB. By default, the SDK outputs five log files, agorasdk.log
, agorasdk_1.log
, agorasdk_2.log
, agorasdk_3.log
, agorasdk_4.log
. The SDK writes the latest logs in agorasdk.log
. When agorasdk.log
is full, the SDK deletes the log file with the earliest modification time among the other four, renames agorasdk.log
to the name of the deleted log file, and creates a new agorasdk.log
to record the latest logs.
9. Image enhancement
This release adds support for calling SetBeautyEffectOptions
on macOS. You can call this method to set parameters including contrast, brightness, smoothness, and red saturation.
10. Audio route
To play audio on more macOS devices, this release adds four enumerators in AUDIO_ROUTE
, and supports USB, HDMI, DisplayPort peripherals, and Apple AirPlay.
11. In-ear monitoring improvement on OPPO models
This release reduces the delay of in-ear monitoring on the following OPPO models:
12. Video experience under poor network conditions
13. Local video quality
This release improves the quality of the video captured by the local camera of the iOS devices:
This release fixed the following issues:
Audio
SetAudioMixingPitch
did not work when setting the pitch
parameter to certain values.Video
SDK
Added
SetClientRole
SetAudioEffectPreset
SetVoiceBeautifierPreset
SetAudioEffectParameters
EnableEncryption
OnAudioPublishStateChangedHandler
OnVideoPublishStateChangedHandler
OnAudioSubscribeStateChangedHandler
OnVideoSubscribeStateChangedHandler
OnFirstLocalAudioFramePublishedHandler
OnFirstLocalVideoFramePublishedHandler
OnRtmpStreamingEventHandler
txPacketLossRate
in LocalAudioStats
txPacketLossRate
and captureFrameRate
in LocalVideoStats
publishDuration
in RemoteAudioStats
and RemoteVideoStats
AUDIO_SCENARIO_MEETING(8)
in AUDIO_SCENARIO_TYPE
enumAUDIO_ROUTE_USB
, AUDIO_ROUTE_HDMI
, AUDIO_ROUTE_DISPLAYPORT
and AUDIO_ROUTE_AIRPLAY
in AUDIO_ROUTE
enumDeprecated
SetLocalVoiceChanger
SetLocalVoiceReverbPreset
SetEncryptionSecret
SetEncryptionMode
OnFirstLocalAudioFrameHandler
v3.0.1 was released on September 16, 2020.
In this release, Agora improves the user experience under poor network conditions for both the COMMUNICATION
and LIVE_BROADCASTING
profiles through the following measures:
COMMUNICATION
profile.COMMUNICATION
and LIVE_BROADCASTING
profiles, which enhances the SDK's anti-packet-loss capacity by maximizing the net bitrate when the uplink and downlink bandwidth are insufficient.To deal with any incompatibility issues caused by the architecture change, Agora uses the fallback mechanism to ensure that users of different versions of the SDKs can communicate with each other: if a user joins the channel from a client using a previous version, all clients using v3.0.1 automatically fall back to the older version. This has the effect that none of the users in the channel can enjoy the improved experience. Therefore we strongly recommend upgrading all your clients to v3.0.1.
If you also use the On-premise Recording SDK, ensure that you upgrade your On-premise Recording SDK to v3.0.0 so that all users can enjoy the improvements brought by the new architecture and network strategy.
1. Dynamic library replaces the static library (for macOS and iOS)
This release adds support for a dynamic library and removes the static library. This release renames the library from AgoraRtcEngineKit.framework
to AgoraRtcKit.framework
. If you upgrade your SDK to v3.0.1, you must re-import the AgoraRtcKit
class in Xcode, and set the Embed attribute as Embed & Sign.
If you integrated the encryption library AgoraRtcCryptoLoader.framework
, you must re-import the AgoraRtcCryptoLoader
class in Xcode, and set the Embed attribute as Embed & Sign.
2. Enumerator names change
This release changes CLIENT_ROLE
to CLIENT_ROLE_TYPE
, and changes the name of the following members:
BROADCASTER
to CLIENT_ROLE_BROADCASTER
AUDIENCE
to CLIENT_ROLE_AUDIENCE
3. Dual-stream mode not enabled in the COMMUNICATION
profile
As of v3.0.1, the native SDK does not enable the dual-stream mode by default in the COMMUNICATION
profile. Call the EnableDualStreamMode (true)
method after joining the channel to enable it. In video scenarios with multiple users, we recommend enabling the dual-stream mode.
1. Specifying the area of connection
This release adds GetEngine2
for specifying the area of connection when creating an IRtcEngine
instance. This advanced feature applies to scenarios that have regional restrictions. You can choose from areas including Mainland China, North America, Europe, Asia (excluding Mainland China), and global (default).
2. Multiple channel management
To enable a user to join an unlimited number of channels at a time, this release adds the AgoraChannel
class. By creating multiple AgoraChannel
objects, a user can join the corresponding channels at the same time. Besides, this release adds SetMultiChannelWant
for enabling the multi-channel mode, and SetForMultiChannelUser
for setting the local or remote video of users in multiple channels.
After joining multiple channels, users can receive the audio and video streams of all the channels, but publish one stream to only one channel at a time. This feature applies to scenarios where users need to receive streams from multiple channels, or frequently switch between channels to publish streams. See Join multiple channels for details.
3. Audio mixing pitch
To set the pitch of the local music file during audio mixing, this release adds SetAudioMixingPitch
. You can set the pitch
parameter to increase or decrease the pitch of the music file. This method sets the pitch of the local music file only. It does not affect the pitch of a human voice.
4. Adjusting the playback volume of the specified remote user
Adds AdjustUserPlaybackSignalVolume
for adjusting the playback volume of a specified remote user. You can call this method as many times as necessary in a call or the interactive live streaming to adjust the playback volume of different remote users, or to repeatedly adjust the playback volume of the same remote user.
5. Voice beautifier and audio effects
To improve the audio quality, this release adds the following enumerate elements in SetLocalVoiceChanger
and SetLocalVoiceReverbPreset
:
VOICE_CHANGER_PRESET
adds several enumerations that have the prefixes VOICE_BEAUTY
and GENERAL_BEAUTY_VOICE
. The VOICE_BEAUTY
enumerations implement voice timbre transformation, and the GENERAL_BEAUTY_VOICE
enumerations beautify chat voice.AUDIO_REVERB_PRESET
adds the enumeration AUDIO_VIRTUAL_STEREO
and several enumerations that have the prefix AUDIO_REVERB_FX
. The AUDIO_VIRTUAL_STEREO
enumeration implements reverberation in the virtual stereo, and the AUDIO_REVERB_FX
enumerations implement voice changer effects, new style transformation effects, and new room acoustics effects.6. Face detection
This release enables local face detection on Android and iOS. After you call EnableFaceDetection
to enable this function, the SDK triggers the OnFacePositionChangedHandler
callback in real time to report the detection results, including the distance between the human face and the device screen. This function can remind users to keep a certain distance from the screen.
1. Audio profiles
To meet the need for higher audio quality, this release adjusts the corresponding audio profile of AUDIO_PROFILE_DEFAULT(0)
in the LIVE_BROADCASTING
profiles.
SDK | AUDIO_PROFILE_DEFAULT(0) |
---|---|
v3.0.1 | A sample rate of 48 KHz, music encoding, mono, and a bitrate of up to 52 Kbps. |
Earlier than v3.0.1 | A sample rate of 32 KHz, music encoding, mono, and a bitrate of up to 44 Kbps. |
2. Quality statistics
Adds the following members in the RtcStats
class for providing more in-call statistics, making it easier to monitor the call quality and memory usage in real time:
gatewayRtt
memoryAppUsageRatio
memoryTotalUsageRatio
memoryAppUsageInKbytes
On iOS, to prevent the prompt to find local network devices from popping up when an end user launches the app on an iOS 14.0 device, the gatewayRtt
parameter is disabled by default. See the FAQ for details. If you do not mind the prompt, and want to enable the gatewayRtt
parameter, please contact Agora technical support via support@agora.io.
3. Screen sharing
This release enables window sharing of UWP (Universal Windows Platform) applications when you call StartScreenCaptureByWindowId
.
4. Image enhancement
This release adds SetBeautyEffectOptions
on Windows for enabling image enhancement in scenarios such as video social networking, an online class, or interactive live streaming. You can call this method to set parameters including contrast, brightness, smoothness, red saturation, and so on.
5. Others
VIDEO_PIXEL_RGBA
in VIDEO_PIXEL_FORMAT
. You can capture the RGBA data from an external video source and send the data to the SDK.EnableWebSdkInteroperability
method.OnVideoSizeChangedHandler
callback, no buffer data in VideoFrame
, an unexpected watermark, incorrect aspect ratio, poor video sharpness, or a black outline appearing while screen sharing and toggling to full-screen.SetRemoteSubscribeFallbackOption
, which should work in the LIVE_BROADCASTING
profile only, also works in the COMMUNICATION
profile.SendStreamMessage
and the TranscodingUser
of SetLiveTranscoding
, which do not support an array format.OnClientRoleChangedHandler
callback, authentication issues with an App ID and token, and a garbled log directory.Added
GetEngine2
CreateChannel
AgoraChannel
classSetMultiChannelWant
SetForMultiChannelUser
SetAudioMixingPitch
AdjustUserPlaybackSignalVolume
VOICE_CHANGER_PRESET
, such as VOICE_BEAUTY_VIGOROUS
AUDIO_REVERB_PRESET
, such as AUDIO_REVERB_FX_KTV
EnableFaceDetection
OnFacePositionChangedHandler
gatewayRtt
, memoryAppUsageRatio
, memoryTotalUsageRatio
and memoryAppUsageInKbytes
members in the RtcStats
classtotalActiveTime
member in the RemoteAudioStats
structtotalActiveTime
member in the RemoteVideoStats
structchannelId
member in the AudioVolumeInfo
structRenamed
Enum type CLIENT_ROLE
changed to CLIENT_ROLE_TYPE
. Enum name BROADCASTER
and AUDIENCE
changed to CLIENT_ROLE_BROADCASTER
and CLIENT_ROLE_AUDIENCE
.
Deprecated
EnableWebSdkInteroperability
OnFirstRemoteVideoFrameHandler
, replaced by OnRemoteVideoStateChangedHandler
OnUserMutedAudioHandler
, OnFirstRemoteAudioDecodedHandler
, and OnFirstRemoteAudioFrameHandler
, replaced by OnRemoteAudioStateChangedHandler
OnStreamPublishedHandler
and OnStreamUnpublishedHandler
, replaced by OnRtmpStreamingStateChangedHandler
v2.9.2 is released on Feb 17, 2020.
Agora Unity SDK is widely used in games, education, AR, VR and other scenarios.
v2.9.1 was released on December 23, 2019.
1. Multi-platform support
Supports iOS, Android, macOS and Windows (x86/x86-64) platforms.
2. Interoperability with the Agora Web SDK
Provides the EnableWebSdkInteroperability
method for enabling interoperability with the Agora Web SDK in LIVE_BROADCASTING
profile.
3. Video rendering method
Supports multiple video rendering methods. You can choose any method in Auto Graphics API.
4. Multithreaded rendering
Supports multithreaded rendering. You can click the Multithreaded Rendering option for rendering in multiple threads.
5. Raw data
Supports raw audio data and raw video data in RGBA format. You can capture and process the raw data according to your needs. See details in Raw Video Data.
6. External data source
Provides APIs for accessing to the external data source. You can configure the external audio and video source, and push the data to the Agora Unity SDK. See details in Custom Video Source and Renderer
7. Encryption
Supports encryption of audio and video streaming. The following table shows the information of the encryption libraries for the Android and iOS platforms. If you do not intend to use this function, you can remove the encryption libraries to decrease the SDK size.
Platform | Encryption libraries |
---|---|
Android | libagora-crypto.so |
iOS |
|
8. Cloud proxy
Supports the cloud proxy service. See Use Cloud Proxy for details.
See the following documentation to quickly integrate the SDK and implement real-time voice and video communication in your project.
Agora also provides an open-source Unity Sample on GitHub.