This page provides the release notes for the Agora RTC SDK for Electron.
The Agora RTC SDK for Electron is developed upon the Agora RTC SDK for macOS and the Agora RTC SDK for Windows, with the Node.js C++ plug-in units.
Compatibility with macOS Monterey 12
As of v3.4.5, the SDK supports macOS Monterey 12. For the SDK versions between v3.2.0 and v3.4.2 inclusive, crashes occur on macOS Monterey 12. To fix this issue, upgrade the SDK to v3.4.5 or later.
USB device driver issue (macOS)
A USB device driver issue occurs when you do not hear any audio or the audio is corrupted with a USB headset. USB is not user-friendly on macOS, and we recommend using higher quality headsets.
Rosetta translation issue (macOS)
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.0 was released on May 7, 2022.
Injecting online media streams
This release renames the videoFrameRate
property in InjectStreamConfig
to videoFramerate
. You need to modify the implementation of the following methods:
AgoraRtcEngine.addInjectStreamUrl
AgoraRtcChannel.addInjectStreamUrl
1. 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. This enables the local user to hear remote users with the spatial audio effect.
To use this feature, contact support@agora.io.
2. Screen sharing
This release adds the setScreenCaptureScenario
method for setting the screen sharing scenario, including sharing documents or videos. The SDK can adjust the video quality and experience of screen sharing according to the scenario you set.
3. Local voice pitch
This release adds the enableLocalVoicePitchCallback
method and the localVoicePitchInHz
callback, to allow the SDK to report the voice pitch of the local user at the set time interval to the app.
4. Reporting the first remote video frame rendered
This release adds the firstRemoteVideoFrame
callback to the AgoraRtcChannel
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 (px) of the video, and the time (in milliseconds) to render the first video frame from this callback.
5. Reporting the user role switch failure
This release adds the clientRoleChangeFailed
callback to report the reason for a user role switch failure and the current user role in the interactive live streaming.
6. 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.7. 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.libagora_video_process_extension.dll
dynamical library is integrated.1. 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.
2. 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.
3. A new version of 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
4. playEffect improvements
This release improves the internal implementation logic of playEffect
to avoid blocking and reduce freezing when playing an audio effect file.
5. Audio experience optimization
This release reduces audio stuttering under network conditions with burst jitter and high packet loss.
6. 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.
7. 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.7.0, 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 proxyConnected
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.
8. Audio device test
To support testing audio devices after joining a channel, this release improves the following methods and callbacks:
audioDeviceTestVolumeIndication
in the AgoraRtcChannel
class, which reports the volume information of the audio device being tested.startAudioDeviceLoopbackTest
. Before v3.7.0, you can call the method only before joining a channel; as of v3.7.0, you can call the method either before or after joining a channel. After a successful method call, the SDK triggers the following callbacks:audioVolumeIndication
and audioDeviceTestVolumeIndication
when you call the method 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 audioDeviceTestVolumeIndication
.audioDeviceTestVolumeIndication
when you call the method after joining a channel.startAudioDeviceLoopbackTest
after joining a channel tests the audio devices that the SDK is using.9. 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.10. Music file playback
This release optimizes the experience of calling startAudioMixing
to play music files as follows:
getAudioFileInfo
.If you want to experience these improvements, ensure that you have integrated the libagora-full-audio-format-extension.dll
dynamic library. Given the large size of this library, if you have limitations on app size and do not need these improvements, you can remove this dynamic library when integrating the SDK. For more instructions, see Reduce App Size.
This release fixed the following issues:
Added
setScreenCaptureScenario
enableLocalVoicePitchCallback
localVoicePitchInHz
firstRemoteVideoFrame
in the AgoraRtcChannel
classclientRoleChangeFailed
CONNECTION_CHANGED_SAME_UID_LOGIN(19)
and CONNECTION_CHANGED_TOO_MANY_BROADCASTERS(20)
in CONNECTION_CHANGED_REASON_TYPE
setVideoDenoiserOptions
setLowLightEnhanceOptions
setColorEnhanceOptions
audioDeviceTestVolumeIndication
in the AgoraRtcChannel
classrecordingChannel
in AudioRecordingConfiguration
AUDIO_RECORDING_QUALITY_ULTRA_HIGH(3)
in AudioRecordingConfiguration.recordingQuality
proxyConnected
TCP_PROXY(2)
in CLOUD_PROXY_TYPE
Modified
startAudioDeviceLoopbackTest
method call.NONE_PROXY(0)
in CLOUD_PROXY_TYPE
.Deprecated
LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_NOT_SUPPORTED(20)
v3.6.1.4 was released on March 29, 2022.
1. 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 Media Push 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 Media Push function. Check your application code logic.RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM(13)
: The update
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 Media Push function. Refer to Prerequisites to enable the Media Push 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
.
2. Following the system default audio device
To help developers more flexibly manage audio device switching, this release adds the following methods:
getDefaultAudioPlaybackDevices
: Gets the default audio playback device of the system.getDefaultAudioRecordingDevices
: Gets the default audio recording 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)
.3. 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
instead of -5
in the following situations:
IRtcEngine
channel calls the joining channel method of the IRtcEngine
class with a valid channel name.IChannel
channel calls the joining channel method of this IChannel
object.4. Screen sharing methods
As of v3.6.1.4, screen sharing methods have the following changes:
callback
parameter (with a WindowInfo
array as the input parameter) to getScreenWindowsInfo
.callback
parameter (with a DisplayInfo
array as the input parameter) to getScreenDisplaysInfo
.getRealScreenDisplayInfo
and replaces it wth getScreenDisplaysInfo
.1. 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 snapshotTaken
callback to report whether the snapshot is successfully taken as well as the details of the snapshot taken.
2. 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 startEchoTestWithConfig
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 startEchoTestWithInterval
, startEchoTestWithConfig
can test video devices and secure the test, but cannot support setting the time interval for reporting test results.
3. 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.
4. 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 channelMediaRelayEvent
callback to report whether the media stream relay is successfully paused or resumed.
5. 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.6. Getting audio file information
To get the information of any audio file, this release deletes getAudioMixingFileDuration
and adds getAudioFileInfo
instead. After joining a channel, you can call getAudioFileInfo
and get information such as duration for the specified audio file in requestAudioFileInfo
.
1. 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.2. Rendering of the first remote video frame
This release speeds up rendering of the first remote video frame under poor network conditions to enhance user video experience.
3. Screen sharing
This release adds the getScreenCaptureSources
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 by using thumbnails.
4. Local video errors
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. 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.6. 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 networkTypeChanged
callback to report this network connection type.enableLastmileTest
or startLastmileProbeTest
to test the connection quality of the 5G mobile network.7. Other improvements
This release also provides the following improvements:
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.This release fixed the following issues:
updateScreenCaptureParameters
to update the screen sharing configuration, windowFocus
did not work.enableLoopbackRecording
to enable loopback audio capturing on some devices, remote users heard the audio being played back twice.startAudioMixing
on some Android devices.GAME_STREAMING
scenario, occasional echo or noise that was caused by inaccurate music detection occurred.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.muteAllRemoteAudioStreams
and received onRemoteAudioStateChanged(REMOTE_AUDIO_REASON_LOCAL_MUTED)
, onRemoteAudioStateChanged(REMOTE_AUDIO_REASON_REMOTE_MUTED)
was incorrectly received after 15 seconds.audioDeviceStateChanged
callback when the user connected or disconnected an audio device.joinChannel
multiple times in a row.localAudioStateChanged
callback to report LOCAL_AUDIO_STREAM_STATE_CAPTURING(1)
when you called enableLocalAudio(false)
after joining a channel.AgoraRtcEngine
on a specific device in a specific scenario crashed. getScreenCaptureSources
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)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.localAudioStateChanged(3,9)
callback but not localAudioStateChanged(3,2)
after a user in a channel set permission to disable the SDK from using the microphone.Added
startRtmpStreamWithoutTranscoding
startRtmpStreamWithTranscoding
updateRtmpTranscoding
stopRtmpStream
startEchoTestWithConfig
getScreenCaptureSources
startScreenCaptureByDisplayId
takeSnapshot
snapshotTaken
setAudioMixingPlaybackSpeed
getAudioTrackCount
selectAudioTrack
setAudioMixingDualMonoMode
pauseAllChannelMediaRelay
resumeAllChannelMediaRelay
getAudioFileInfo
requestAudioFileInfo
5
for the state
parameter in rtmpStreamingStateChanged
11
, 13
, 14
, and 15
for the code
parameter in rtmpStreamingStateChanged
RTMP_STREAMING_EVENT
:RTMP_STREAMING_EVENT_ADVANCED_FEATURE_NOT_SUPPORT(3)
RTMP_STREAMING_EVENT_REQUEST_TOO_OFTEN(4)
zOrder
and alpha
in the RtcImage
structureAUDIO_CODEC_PROFILE_HE_AAC_V2(2)
in AUDIO_CODEC_PROFILE_TYPE
sharpnessLevel
in the BeautyOptions
structureLOCAL_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)
blur_degree
and BACKGROUND_BLUR_DEGREE
in the VirtualBackgroundSource
structureBACKGROUND_BLUR
in BACKGROUND_SOURCE_TYPE
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)
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
Modified
lighteningLevel
from 0.7 to 0.6getScreenWindowsInfo
getScreenDisplaysInfo
Deleted
getAudioMixingFileDuration
getRealScreenDisplayInfo
v3.5.0.3 was released on September 14, 2021.
1. Video quality
The following improvements have been made to the quality of captured and received video in this release:
2. Virtual background (beta)
This release optimizes the portrait edge effect of the virtual background.
3. Noise reduction
This release shortens the convergence time for noise reduction in scenarios where the AGC is enabled, which reduces noise fluctuations.
This release fixed the following issues:
setupLocalVideo
or setupRemoteVideo
was called under certain circumstances, such as the following:setupLocalVideo(null)
or setupRemoteVideo(null)
was called to disable the local or remote video view, and then setupLocalVideo
or setupRemoteVideo
was called to initialize the local or remote video view.setupRemoteVideo
was called in the remoteVideoStateChanged
callback to initialize the remote video view.enableLoopbackRecording
, occasionally the local user heard an echo of their own audio.muteLocalAudioStream(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.rxquality
) of remote users reported by the SDK was not accurate.memoryTotalUsageRatio
reported by the rtcStats
callback was not accurate.v3.4.6 was released on July 23, 2021.
This release improved the stability of the SDK.
This release fixed the following issues on macOS devices:
nonnull
and _Nullable
modifiers in Objective-C header files caused warnings when the project was run.v3.4.5 was released on July 1, 2021.
1. Upgraded GCM2 encryption
To further improve the security during real-time audio and video transmission process, this release has the following changes:
AES_128_GCM2 (7)
and AES_256_GCM2 (8)
encryption modes in ENCRYPTION_MODE
. 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 (7)
and AES_256_GCM2 (8)
encryption modes.This release also changes the default encryption mode from AES_128_XTS (1)
to AES_128_GCM2 (7)
. 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 ENCRYPTION_MODE
to AES_128_XTS (1)
.
2. Media stream publishing behavior changes
To flexibly control the publishing state in multiple channels, this release optimizes the AgoraRtcChannel
class as follows:
publish
and unpublish
methods, and adds muteLocalAudioStream
and muteLocalVideoStream
instead. You can set the publishing state of the audio stream and video stream separately.publishLocalAudio
and publishLocalVideo
members in ChannelMediaOptions
. You can set the publishing state when joining a channel.setClientRole(1)
, the local user publishes audio and video streams by default.publishLocalAudio = false
serves the same function as muteLocalAudioStream(true)
.publishLocalVideo = false
serves the same function as muteLocalVideoStream(true)
.The above improvements bring the following changes in the AgoraRtcEngine
class:
muteLocalAudioStream
and muteLocalVideoStream
of AgoraRtcEngine
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
.
Virtual background (beta)
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 onVirtualBackgroundSourceEnabled
callback to learn whether the virtual background is successfully enabled or the reason for an error.
1. Performance optimization
Agora has optimized internal threads of the SDK, which reduces CPU usage by about 20% on low-end devices.
2. Media Push
To be more transparent to users about errors and events in Media Push, this release adds the following codes:
rtmpStreamingStateChanged
: Error code 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 0 (the Media Push has not started or has ended)
.RTMP_STREAMING_EVENT
: 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.3. Media device state
To report media device states more accurately, this modifies the value of the deviceState
parameter in the audioDeviceStateChanged
and videoDeviceStateChanged
callbacks:
0
, which reports the device is ready for use.1
from "The device is ready for use" to "The device is in use"4. Music file state
When you call startAudioMixing
after pauseAudioMixing
, this release adds the audioMixingStateChanged(710, 720)
state, which indicates the music file is stopped, before reporting audioMixingStateChanged(713, 724)
.
This release fixed the following issues:
startAudioMixing
to play an online music file, occasionally the SDK response time was too long and caused a freeze.5
(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.Added
enableVirtualBackground
RTMP_STREAMING_EVENT_URL_ALREADY_IN_USE (2)
in RTMP_STREAMING_EVENT
encryptionKdfSalt
in EncryptionConfig
AES_128_GCM2 (7)
and AES_256_GCM2 (8)
in ENCRYPTION_MODE
muteLocalAudioStream
and muteLocalVideoStream
in AgoraRtcChannel
publishLocalAudio
and publishLocalVideo
in ChannelMediaOptions
virtualBackgroundSourceEnabled
100
to rtmpStreamingStateChanged
Modified
ENCRYPTION_MODE
Deprecated
publish
and unpublish
in AgoraRtcChannel
v3.4.2 was released on June 1, 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 audioMixingStateChanged
callback as follows:
Replaces the err
parameter with the reason
parameter.
Modifies some logic of reporting the state
parameter. 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 audioMixingStateChanged
.
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 and parameters:
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.playEffect
: The optional parameter startPos
, which sets the playback position when starting playback of an audio effect file.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:
startScreenCaptureByWindow
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:
Adds the optional parameter startPos
in startAudioMixing
, which allows you to set the playback position when starting playback of a music file.
Deprecates the getAudioMixingDuration
method and replaces it with the new method getAudioMixingFileDuration
. The filePath
parameter of the new method allows you to get the duration of a local music file before playing it.
4. Audio recording
To set the recording configuration during audio recording, this release deprecates the startAudioRecording
method and replaces it with the new method startAudioRecordingWithConfig
. The config
parameter of the new 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 startAudioRecordingWithConfig
again before the current recording ends, the SDK reports this error code.
5. 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
(Windows only):
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.This release fixed the following issues:
groupVolumeIndication
callback returned incorrect volume information after you called enableSoundPositionIndication(true)
.libagora_ai_denoise_extension.dll
library (Windows).Added
adjustLoopbackRecordingSignalVolume
getAudioMixingFileDuration
getEffectDuration
setEffectPosition
getEffectCurrentPosition
startAudioRecordingWithConfig
MAINTAIN_BALANCED(2)
in the degradationPreference
enumLOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND(8)
in the LOCAL_VIDEO_STREAM_ERROR
enumLOCAL_AUDIO_STREAM_ERROR_NO_RECORDING_DEVICE(6)
and LOCAL_AUDIO_STREAM_ERROR_NO_PLAYOUT_DEVICE(7)
in the LOCAL_AUDIO_STREAM_ERROR
enum (Windows)-160
Modified
audioMixingStateChanged
playEffect
startAudioMixing
Deprecated
getAudioMixingDuration
startAudioRecording
v3.3.2 was released on April 15, 2021. This release fixed the following issues:
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) |
---|---|---|
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 options
parameter to the joinChannel
and switchChannel
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.
7. Log files
To ensure the integrity of log content, this release adds the logConfig
parameter to the initialize
method. You can use logConfig
to set the log files output by the Agora SDK when you initialize AgoraRtcEngine
.
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 localVideoStateChanged
callback.localVideoStateChanged(LOCAL_VIDEO_STREAM_STATE_FAILED, LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE)
callback.localVideoStateChanged(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 the createDataStreamWithConfig
method. 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 RemoteAudioStats
:
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:
Added
setVoiceConversionPreset
AES_128_GCM
and AES_256_GCM
in the ENCRYPTION_MODE
enumqoeQuality
, qualityChangedReason
and mosValue
in the RemoteAudioStats
interfacesetVoiceBeautifierParameters
SINGING_BEAUTIFIER
in the VOICE_BEAUTIFIER_PRESET
enumenableDeepLearningDenoise
createDataStreamWithConfig
setCloudProxy
captureBrightnessLevel
in the LocalVideoStats
interfacecaptureWidth
and captureHeight
in the CameraCapturerConfiguration
interfaceCAPTURER_OUTPUT_PREFERENCE_MANUAL(3)
in the CaptureOutPreference
enum-157
Deprecated
setDefaultMuteAllRemoteVideoStreams
setDefaultMuteAllRemoteAudioStreams
setLogFile
setLogFileSize
setLogFilter
createDataStream
v3.2.1 was released on December 30, 2020. This release fixed the following issues:
enableEncryption
, the SDK did not trigger the firstLocalVideoFramePublished
callback.v3.2.0 was released on December 30, 2020.
1. 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.
2. 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. Image enhancement
To enable image enhancement in scenarios such as video social networking, an online class, or live interactive streaming, this release adds support for the setBeautyEffectOptions
method on macOS. You can call this method to set parameters including contrast, brightness, smoothness, and red saturation.
2. Interactive live streaming standard
This release adds setClientRoleWithOptions
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.
3. Specify the region of connection
This release supports for restricting the SDK access to the specified region through the areaCode
parameter when calling the initialize
method.
4. Publishing and subscription states
This release adds the following callbacks to report the current publishing and subscribing states:
audioPublishStateChanged
: Reports the change of the audio publishing state.videoPublishStateChanged
: Reports the change of the video publishing state.audioSubscribeStateChanged
: Reports the change of the audio subscribing state.videoSubscribeStateChanged
: Reports the change of the video subscribing state.5. First local frame published callback
To report that the first audio or video frame is published, this release adds the following callbacks:
firstLocalAudioFramePublished
firstLocalVideoFramePublished
The firstLocalAudioFrame
callback is deprecated, and you can use firstLocalAudioFramePublished
instead.
6. 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 first.
7. 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.
8. Media metadata
In interactive live streaming scenarios, the host can send shopping links, digital coupons, and online quizzes to the audience for more diversified interactive live streaming. This release adds the following APIs, allowing the host to add metadata to the video streams and for sending the attached information.
registerMediaMetadataObserver
method: Register a media metadata observer.unRegisterMediaMetadataObserver
method: Unregister a media metadata observer.setMaxMetadataSize
method: Sets the maximum size of the media metadata.sendMetadata
method: Sends the media metadata.receiveMetadata
callback: Reports the receiver receives the media metadata.sendMetadataSuccess
callback: Reports the sender sends the media metadata successfully.1. Meeting scenario
To improve the user experience in the meeting scenario, this release adds the following:
scenario
of the setAudioProfile
method as 8
(Meeting).error
for the localVideoStateChanged
callback as 12
(Closed), notifying you that a window shared by the window ID has been closed, or a full-screen window shared by the window ID has exited full-screen mode.windowFocus
to the CaptureParam
interface.excludeWindowList
to the CaptureParam
interface.1
and the error code 11
to the localVideoStateChange
callback.CONTENT_HINT_DETAILS
type in a poor network environment.2. 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.3. Interactive streaming delay
This release reduces the latency on the audience's client during an interactive live streaming by about 500 ms.
4. Media Push
This release adds the rtmpStreamingEvent
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 properties to provide more in-call statistics:
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.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.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.0 | Earlier than v3.1.0 |
---|---|---|
0 (default) |
||
1 (speech standard) |
18 Kbps | 18 Kbps |
2 (music standard) |
64 Kbps | 48 Kbps |
3 (music standard stereo) |
80 Kbps | 56 Kbps |
4 (music high quality) |
96 Kbps | 128 Kbps |
5 (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 create a new agorasdk.log
to record the latest logs. For details, see setLogFileSize
.
9. Audio route
To play audio on more devices, this release adds four enumerators in AUDIO_ROUTE_TYPE
, and supports USB (6
), HDMI (7
), DisplayPort peripherals (8
), and Apple AirPlay (9
).
10. Video experience under poor network conditions
From this release, Agora automatically reduces video resolution under poor network conditions to improve the smoothness of the video.
This release improves video quality by ensuring that the video does not become blurry due to changing network conditions.
This release fixed the following issues:
clientRoleChanged
callback. (Windows)firstLocalVideoFrame
and firstRemoteVideoFrame
callbacks are not triggered at the right time. (macOS/Windows)Added
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
setBeautyEffectOptions
setClientRoleWithOptions
enableEncryption
sendCustomReportMessage
setAudioMixingPitch
registerMediaMetadataObserver
unRegisterMediaMetadataObserver
setMaxMetadataSize
sendMetadata
audioPublishStateChanged
videoPublishStateChanged
audioSubscribeStateChanged
videoSubscribeStateChanged
firstLocalAudioFramePublished
firstLocalVideoFramePublished
Deprecated
setLocalVoiceChanger
setLocalVoiceReverbPreset
setEncryptionSecret
setEncryptionMode
firstLocalAudioFrame
v3.0.0 was released on April 7th, 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.0 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.0.
We also upgrade the On-premise Recording SDK to v3.0.0. 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. Dual-stream mode not enabled in the COMMUNICATION
profile
As of v3.0.0, 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. Multiple channel management
To enable a user to join an unlimited number of channels at a time, this release adds the AgoraRtcChannel
class. By creating multiple AgoraRtcChannel
objects, a user can join the corresponding channels at the same time.
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.
2. 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 interactive live streaming to adjust the playback volume of different remote users, or to repeatedly adjust the playback volume of the same remote user.
3. Detecting local voice activity
This release adds the report_vad(boolean)
parameter to the enableAudioVolumeIndication
method to enable local voice activity detection. Once it is enabled, you can check the groupAudioVolumeIndication
callback for the voice activity status of the local user.
4. Image enhancement
Adds setBeautyEffectOptions
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, and red saturation.
1. Audio profiles
To meet the need for higher audio quality, this release adjusts the corresponding audio profile (profile(0)
) of setAudioProfile
in the LIVE_BROADCASTING
profile.
SDK | profile(0) |
---|---|
3.0.0 | A sample rate of 48 kHz, music encoding, mono, and a bitrate of up to 52 Kbps. |
Earlier than v3.0.0 |
2. Mirror mode
This release enables you to set a mirror effect for the stream to be encoded:
Setting a mirror mode for the stream to be encoded: This release adds the mirrorMode
property to the VideoEncoderConfiguration
interface for setting a mirror effect for the stream to be encoded and transmitted.
3. Quality statistics
Adds the following properties in the RtcStats
interface for providing more in-call statistics, making it easier to monitor the call quality and memory usage in real time:
gatewayRtt
memoryAppUsageRatio
memoryTotalUsageRatio
memoryAppUsageInKbytes
4. Screen sharing
This release enables window sharing of UWP (Universal Windows Platform) applications when you sharing a screen by the windows ID.
5. Watermark in Live Streaming
This release enables the watermark function for users to add a PNG file to the local live streaming as a watermark. The addVideoWatermark
and clearVideoWatermark
methods can add and delete watermarks in interactive live streaming.
6. Supporting more audio sample rates for recording
To enable more audio sample rate options for recording, this release adds a new startAudioRecording
method with a sampleRate
parameter. In the new method, you can set the sample rate as 16, 32, 44.1 or 48 kHz.
7. Others
This release enables interoperability between the Electron SDK and the Web SDK by default, and deprecates the enableWebSdkInteroperability
and videoSourceEnableWebSdkInteroperability
method.
setRemoteSubscribeFallbackOption
method, which should work in the LIVE_BROADCASTING
profile only, also works in the COMMUNICATION
profile.Behavior change
When connected to a headset or Bluetooth, the macOS device changes its audio route to be uniform as the audio route shown in the device manager.
Added
mirrorMode
property in the VideoEncoderConfiguration
interfacecreateChannel
AgoraRtcChannel
classgatewayRtt
, memoryAppUsageRatio
, memoryTotalUsageRatio
and memoryAppUsageInKbytes
properties in the RtcStats
interfacestartAudioRecording
setBeautyEffectOptions
addVideoWatermark
clearVideoWatermark
report_vad
parameter in the enableAudioVolumeIndication
methodDeprecated
enableWebSdkInteroperability
videoSourceEnableWebSdkInteroperability
firstRemoteVideoFrame
, replaced by remoteVideoStateChanged
userMuteAudio
, firstRemoteAudioDecoded
, and firstRemoteAudioFrame
, replaced by remoteAudioStateChanged
streamPublished
and streamUnpublished
, replaced by rtmpStreamingStateChanged
v2.9.0 is released on Aug 30, 2019.
Reporting the state of the remote video
This release extends the remoteVideoStateChanged
callback with more states of the remote video: STOPPED(0)
, STARTING(1)
, DECODING(2)
, FROZEN(3)
, and FAILED(4)
. It adds a reason parameter to the callback to indicate why the remote video state changes. The original remoteVideoStateChanged
callback is deleted. If you upgrade your Native SDK to the latest version, ensure that you re-implement the remoteVideoStateChanged
callback.
The new callback reports most of the remote video states, and therefore deprecates the following callbacks. You can still use them, but we do not recommend doing so.
userEnableVideo
userEnableLocalVideo
addStream
1. Faster switching to another channel
This release adds the switchChannel
method to enable the audience in a LIVE_BROADCASTING
channel to quickly switch to another channel. With this method, you can achieve a much faster switch than with the leaveChannel
and joinChannel
methods. After the audience successfully switches to another channel by calling the switchChannel
method, the SDK triggers the leaveChannel
and joinedChannel
callbacks to indicate that the audience has left the original channel and joined a new one.
2. Channel media stream relay
This release adds the following methods to relay the media streams of a host from a source channel to a destination channel. This feature applies to scenarios such as online singing contests, where hosts of different LIVE_BROADCASTING
channels interact with each other.
During the media stream relay, the SDK reports the states and events of the relay with the channelMediaRelayState
and channelMediaRelayEvent
callbacks.
3. Reporting the local and remote audio state
This release adds the localAudioStateChanged
and remoteAudioStateChanged
callbacks to report the local and remote audio states. With these callbacks, the SDK reports the following states for the local and remote audio:
STOPPED(0)
, RECORDING(1)
, ENCODING(2)
, or FAILED(3)
. When the state is FAILED(3)
, see the error
parameter for troubleshooting.STOPPED(0)
, STARTING(1)
, DECODING(2)
, FROZEN(3)
, or FAILED(4)
. See the reason
parameter for why the remote audio state changes.4. Reporting the local audio statistics
This release adds the localAudioStats
callback to report the statistics of the local audio during a call, including the number of channels, the sending sample rate, and the average sending bitrate of the local audio.
1. Reporting more statistics of the in-call quality
This release adds the following statistics in the RtcStats
, LocalVideoStats
, and RemoteVideoStats
classes:
RtcStats
: The total number of the sent audio bytes, sent video bytes, received audio bytes, and received video bytes during a session.LocalVideoStats
: The encoding bitrate, the width and height of the encoding frame, the number of frames, and the codec type of the local video.RemoteVideoStats
: The packet loss rate of the remote video.2. Improving the video quality of interactive live streaming
This release minimizes the video freeze rate under poor network conditions, improves the video sharpness, and optimizes the video smoothness when the packet loss rate is high.
3. Improving the screen sharing quality
This release improves the sharpness of text during screen sharing in the COMMUNICATION
profile, particularly when the network condition is poor. Note that this improvement takes effect only when you set ContentHint
as Details(2)
.
4. Other Improvements
COMMUNICATION
profile.Audio
muteRemoteAudioStream
method.Video
remoteVideoStateChanged
callback behaves unexpectedly.Miscellaneous
To improve the user experience, we made the following changes in v2.9.0:
Added
localAudioStats
localAudioStateChanged
remoteAudioStateChanged
switchChannel
startChannelMediaRelay
updateChannelMediaRelay
stopChannelMediaRelay
channelMediaRelayState
channelMediaRelayEvent
remoteVideoStateChanged
RtcStats
: txAudioBytes
, txVideoBytes
, rxAudioBytes
and rxVideoBytes
localVideoStats
: encodedBitrate
,encodedFrameWidth
,encodedFrameHeight
, encodedFrameCount
and codecType
remoteVideoStats
: packetLossRate
Deprecated
microphoneEnabled
. Use the localAudioStateChanged
callback instead.remoteVideoTransportStats
. Use the remoteVideoStats
callback instead.remoteAudioTransportStats
. Use the remoteAudioStats
callback instead.userEnableVideo
. Use the remoteVideoStateChanged
callback instead.userEnableLocalVideo
. Use the remoteVideoStateChanged
callback instead.addStream
. Use the remoteVideoStateChanged
callback instead.v2.8.0 is released on Jul 8, 2019.
This is the first release of the Agora SDK for Electron. Refer to the following documentation to quickly integrate the SDK and enable real-time communication in your project.
Agora also provides the open-source Electron-Quickstart sample project.