This page provides the release notes for the Agora Video SDK for macOS.
USB device driver issue
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
If your app is integrated with the SDK earlier than v3.3.0, 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.0 or later and adapt the app to x86-64 and arm64 architectures.
v3.3.0 was released on January 22, 2021.
1. Integration change
This release adds the following frameworks:
AgoraCore.framework
: The Agora basic calculation framework. av1.framework
: The AV1 framework for screen sharing.To integrate the SDK into your project, see Integrate the SDK.
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 Agora SDK supports both x86-64 and arm64 architectures. As of v3.3.0, apps that integrate the Agora 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 joinChannelByToken
2 and switchChannelByToken
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. Deep-learning noise reduction
To eliminate non-stationary noise based on traditional noise reduction, this release adds enableDeepLearningDenoise
to enable deep-learning noise reduction.
Before enabling deep-learning noise reduction, integrate the AgoraAIDenoiseExtension.framework
dynamic library into your project files.
5. Singing beautifier
To beautify the voice and add reverberation effects in a singing scenario, this release adds the setVoiceBeautifierParameters
method and adds the AgoraSingingBeautifier
constant to AgoraVoiceBeautifierPreset
.
You can call setVoiceBeautifierPreset(AgoraSingingBeautifier)
to beautify the male voice and add the reverberation effect for a voice in a small room. For more settings, you can call setVoiceBeautifierParameters(AgoraSingingBeautifier, param1, param2)
to beautify male or female voices and add reverberation effects for a voice in a small room, large room, or hall.
6. Log files
To ensure the integrity of log content, this release adds the logConfig
property to AgoraRtcEngineConfig
. You can use logConfig
to set the log files output by the Agora SDK when you initialize AgoraRtcEngineKit
. See How can I set the log file? for details.
As of v3.3.0, Agora does not recommend using the setLogFile
, setLogFileSize
, or setLogFilter
methods to set the log files.
7. 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 AgoraCameraCaptureOutputPreferenceManual(3)
and set the width and height of the captured video image.captureBrightnessLevel
in the localVideoStats
callback.localVideoStateChange(AgoraLocalVideoStreamStateFailed, AgoraLocalVideoStreamErrorCaptureFailure)
callback.localVideoStateChange(AgoraLocalVideoStreamStateCapturing, AgoraLocalVideoStreamErrorCaptureFailure)
callback.8. 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. Raw audio data
This release adds raw audio data APIs for the macOS platform. Once you obtain raw audio data through the following APIs, you can pre-process or post-process it for desired playback effects:
setAudioFrameDelegate
onRecordAudioFrame
onPlaybackAudioFrame
onMixedAudioFrame
onPlaybackAudioFrameBeforeMixing
2. Remote audio statistics
To monitor quality of experience (QoE) of the local user when receiving a remote audio stream, this release adds qoeQuality
and qualityChangedReason
to AgoraRtcRemoteAudioStats
, which report QoE of the local user and the reason for poor QoE, respectively.
Added
setVoiceBeautifierParameters
AgoraSingingBeautifier
in the AgoraVoiceBeautifierPreset
constantenableDeepLearningDenoise
joinChannelByToken
2switchChannelByToken
2createDataStream
logConfig
property in the AgoraRtcEngineConfig
classsetAudioFrameDelegate
onRecordAudioFrame
onPlaybackAudioFrame
onMixedAudioFrame
onPlaybackAudioFrameBeforeMixing
qoeQuality
and qualityChangedReason
properties in the AgoraRtcRemoteAudioStats
classsetCloudProxy
captureBrightnessLevel
property in the AgoraRtcLocalVideoStats
classcaptureWidth
and captureHeight
properties in the AgoraCameraCapturerConfiguration
classAgoraCameraCaptureOutputPreferenceManual(3)
in the AgoraCameraCaptureOutputPreference
constantAgoraErrorCodeModuleNotFound(157)
Deprecated
setDefaultMuteAllRemoteVideoStreams
setDefaultMuteAllRemoteAudioStreams
setLogFile
setLogFileSize
setLogFilter
createDataStream
v3.2.1 was released on December 17, 2020. This release fixed the following issues:
enableEncryption
, the SDK did not trigger the firstLocalVideoFramePublished
callback.v3.2.0 was released on November 30, 2020.
1. Integration change
Since v3.2.0, the following files have been added to the SDK package:
Agorafdkaac.framework
: The Fraunhofer FDK AAC dynamic library.AgoraSoundTouch.framework
: The SoundTouch dynamic library.Agoraffmpeg.framework
: The FFmpeg dynamic library.If you upgrade the SDK to v3.2.0 or later, refer to the following steps to add the above dynamic libraries when integrating the SDK:
AgoraRtcKit.framework
file is located.Agorafdkaac.framework
, AgoraSoundTouch.framework
, and Agoraffmpeg.framework
. Ensure the status of these dynamic libraries is Embed & Sign.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. Image enhancement
To enable image enhancement in scenarios such as video social networking, an online class, or live interactive streaming, this release adds setBeautyEffectOptions
. You can call this method to set parameters including contrast, brightness, smoothness, and red saturation.
2. 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.
1. Meeting scenario
To improve the user experience in the meeting scenario, this release adds the following:
AgoraAudioScenarioMeeting(8)
in setAudioProfile
.AgoraLocalVideoStreamErrorScreenCaptureWindowClosed(12)
error code, 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.AgoraVideoContentHintDetails
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.
This release fixed the following issues:
enumerateDevices
, the SDK unnecessarily requested permission to use the microphone.Added
setClientRole
setBeautyEffectOptions
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
AgoraAudioScenarioMeeting(8)
in AgoraAudioScenario
AgoraLocalVideoStreamErrorScreenCaptureWindowClosed(12)
in AgoraLocalVideoStreamError
enumDeprecated
setLocalVoiceChanger
setLocalVoiceReverbPreset
v3.1.2 was released on September 15, 2020.
This release fixed the issue that the firstLocalVideoFrameWithSize
and firstRemoteVideoFrameOfUid
callbacks are not triggered at the right time.
v3.1.1 was released on August 27, 2020.
This release changes the AgoraAreaCode
for regional connection. The latest area codes are as follows:
AgoraAreaCodeCN
: Mainland China.AgoraAreaCodeNA
: North America.AgoraAreaCodeEU
: Europe.AgoraAreaCodeAS
: Asia, excluding Mainland China.AgoraAreaCodeJP
: Japan.AgoraAreaCodeIN
: India.AgoraAreaCodeGLOB
: (Default) Global.If you have specified a region for connection when calling sharedEngineWithConfig
, ensure that you use the latest area code when migrating from an earlier SDK version.
v3.1.0 was released on August 11, 2020.
1. Publishing and subscription states
This release adds the following callbacks to report the current publishing and subscribing states:
didAudioPublishStateChange
: Reports the change of the audio publishing state.didVideoPublishStateChange
: Reports the change of the video publishing state.didAudioSubscribeStateChange
: Reports the change of the audio subscribing state.didVideoSubscribeStateChange
: Reports the change of the video subscribing state.2. First local frame published callback
This release adds the firstLocalAudioFramePublished
and firstLocalVideoFramePublished
callbacks to report that the first audio or video frame is published. The firstLocalAudioFrame
callback is deprecated from v3.1.0.
3. 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 adds the following regions for regional connection. After you specify the region for connection, your app that integrates the Agora SDK connects to the Agora servers within that region.
AgoraIpAreaCode_JAPAN
: Japan.AgoraIpAreaCode_INDIA
: India.2. Advanced screen sharing
This release adds the following features for screen sharing:
windowFocus
member to the AgoraScreenCaptureParameters
class.excludeWindowList
member to the AgoraScreenCaptureParameters
class.AgoraLocalVideoStreamStateCapturing(1)
and the error code AgoraLocalVideoStreamErrorScreenCaptureWindowMinimized(11)
to the localVideoStateChange
callback.captureType
callback to the AgoraVideoSourceProtocol
protocol.contentHint
callback to the AgoraVideoSourceProtocol
protocol.3. CDN live streaming
This release adds the rtmpStreamingEventWithUrl
callback to report events during CDN live streaming, such as failure to add a background image or watermark image.
4. Encryption
This release adds the enableEncryption
method for enabling built-in encryption, and deprecates the following methods:
setEncryptionSecret
setEncryptionMode
5. More in-call statistics
This release adds the following attributes to provide more in-call statistics:
txPacketLossRate
in AgoraRtcLocalAudioStats
, which represents the audio packet loss rate (%) from the local client to the Agora edge server before applying anti-packet loss strategies.AgoraRtcLocalVideoStats
: 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 AgoraRtcRemoteAudioStats
and AgoraRtcRemoteVideoStats
, which represents the total publish duration (ms) of the remote media stream.6. Audio profile
To improve audio performance, this release adjusts the maximum audio bitrate of each audio profile as follows:
Profile | v3.1.0 | Earlier than v3.1.0 |
---|---|---|
AgoraAudioProfileDefault |
||
AgoraAudioProfileSpeechStandard |
18 Kbps | 18 Kbps |
AgoraAudioProfileMusicStandard |
64 Kbps | 48 Kbps |
AgoraAudioProfileMusicStandardStereo |
80 Kbps | 56 Kbps |
AgoraAudioProfileMusicHighQuality |
96 Kbps | 128 Kbps |
AgoraAudioProfileMusicHighQualityStereo |
128 Kbps | 192 Kbps |
7. 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.
8. Audio route
To play audio on more devices, this release adds four enumerators in AgoraAudioOutputRouting
, and supports USB, HDMI, DisplayPort peripherals, and Apple AirPlay.
9. Video experience under poor network conditions
This release fixed the issue that the app failed to record any audio because the audio device module failed to start.
Added
didAudioPublishStateChange
didVideoPublishStateChange
didAudioSubscribeStateChange
didVideoSubscribeStateChange
firstLocalAudioFramePublished
firstLocalVideoFramePublished
enableEncryption
txPacketLossRate
in AgoraRtcLocalAudioStats
classtxPacketLossRate
and captureFrameRate
in AgoraRtcLocalVideoStats
classpublishDuration
in AgoraRtcRemoteAudioStats
and AgoraRtcRemoteVideoStats
classwindowFocus
and excludeWindowList
in AgoraScreenCaptureParameters
classAgoraLocalVideoStreamStateCapturing(1)
in AgoraLocalVideoStreamState
classAgoraLocalVideoStreamErrorScreenCaptureWindowMinimized(11)
in AgoraLocalVideoStreamError
classcaptureType
and contentHint
in AgoraVideoSourceProtocol
protocolrtmpStreamingEventWithUrl
AgoraWarningCodeAdmCategoryNotPlayAndRecord(1029)
and AgoraWarningCodeApmResidualEcho(1053)
AgoraErrorCodeNoServerResources(103)
Deprecated
setEncryptionSecret
setEncryptionMode
firstLocalAudioFrame
Deleted
AgoraWarningCodeAdmImproperSettings(1053)
v3.0.1.1 was released on Jun 18, 2020. This release fixed the crashes after calling registerVideoRenderFactory
(deprecated).
v3.0.1 was released on May 27, 2020.
1. Dynamic library
This release replaces the static library with a dynamic library for the following reasons:
To upgrade the RTC Native SDK, you must re-integrate the dynamic library, AgoraRtcKit.framework
. This process should take no more than five minutes. See Migration Guide.
2. Frame position for the video observer (C++)
As of this release, to get the video frame from the onPreEncodeVideoFrame
callback, you must set POSITION_PRE_ENCODER(1<<2)
in getObservedFramePosition
as the frame position to observe, as well as implementing the onPreEncodeVideoFrame
callback.
1. 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.
2. Voice enhancement
To improve the audio quality, this release adds the following enumerate elements in setLocalVoiceChanger
and setLocalVoiceReverbPreset
:
AgoraAudioVoiceChanger
adds several elements that have the prefixes AgoraAudioVoiceBeauty
and AgoraAudioGeneralBeautyVoice
. The AgoraAudioVoiceBeauty
elements enhance the local voice, and the AgoraAudioGeneralBeautyVoice
enumerations add gender-based enhancement effects.AgoraAudioReverbPreset
adds the enumeration AgoraAudioReverbPresetVirtualStereo
and several enumerations that have the prefix AgoraAudioReverbPresetFx
. The AgoraAudioReverbPresetVirtualStereo
enumeration implements reverberation in the virtual stereo, and the AgoraAudioReverbPresetFx
enumerations implement additional enhanced reverberation effects.See Set the Voice Changer and Reverberation Effects for more information.
3. Face detection
This release enables local face detection. After you call enableFaceDetection
to enable this function, the SDK triggers the facePositionDidChangeWidth
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.
4. Fill mode
To improve the user experience of watching videos, this release adds a video display mode AgoraVideoRenderModeFill(4)
. This mode zooms and stretches the video to fill the display window. You can select this mode when calling the following methods:
setupLocalVideo
setupRemoteVideo
setLocalRenderMode
setRemoteRenderMode
5. Remote video renderer in multiple channels
This release adds setRemoteVideoRenderer
and remoteVideoRendererOfUserId
in the AgoraRtcChannel
class to enable users who join the channel using the AgoraRtcChannel
object to customize the remote video renderer.
6. Data post-processing in multiple channels (C++)
This release adds support for post-processing remote audio and video data in a multi-channel scenario by adding the following C++ methods:
IAudioFrameObserver
class: isMultipleChannelFrameWanted
and onPlaybackAudioFrameBeforeMixingEx
.IVideoFrameObserver
class: isMultipleChannelFrameWanted
and onRenderVideoFrameEx
.After successfully registering the audio or video observer, if you set the return value of isMultipleChannelFrameWanted
as true
, you can get the corresponding audio or video data from onPlaybackAudioFrameBeforeMixingEx
or onRenderVideoFrameEx
. In a multi-channel scenario, Agora recommends setting the return value as true
.
Frame position (C++)
After successfully registering the video observer, you can observe and get the video frame at each node of video processing. To conserve power consumption, this release enables customizing the frame position for the video observer. Set the return value of the getObservedFramePosition
callback to set the position to observe:
This release adds the following APIs:
setAudioMixingPitch
AgoraAudioVoiceBeauty
and AgoraAudioGeneralBeautyVoice
in the AgoraAudioVoiceChanger
enumerationAgoraAudioReverbPresetVirtualStereo
and several elements that have the prefixes AgoraAudioReverbPresetFx
in the AgoraAudioReverbPreset
enumerationenableFaceDetection
facePositionDidChangeWidth
AgoraVideoRenderModeFill
in the AgoraVideoRenderMode
enumeration setRemoteVideoRenderer
and remoteVideoRendererOfUserId
in the AgoraRtcChannel
classtotalActiveTime
in the AgoraRtcRemoteAudioStats
classtotalActiveTime
in the AgoraRtcRemoteVideoStats
classv3.0.0.2 was released on Apr 22, 2020.
Specifying the area of connection
This release adds sharedEngineWithConfig
for specifying the area of connection when creating an AgoraRtcEngineKit
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).
After specifying the area of connection:
This release fixed issues relating to no audio, disconnecting from a Bluetooth device after joining a channel, and the occasional failure to join a channel.
Added
v3.0.0 was released on Mar 4, 2020.
In this release, Agora improves the user experience under poor network conditions for both the Communication
and LiveBroadcasting
profiles through the following measures:
Communication
profile.Communication
and LiveBroadcasting
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. Renaming the static library and adding support for dynamic library
To unify the library names across platforms, this release renames the library from AgoraRtcEngineKit.framework
to AgoraRtcKit.framework
. If you upgrade your SDK to v3.0.0, you must re-import the AgoraRtcKit
class. For details, see Import the class in the Quickstart.
To improve your development experience, this release also adds support for the dynamic library. You can integrate either the static or the dynamic library in your project, and the name of the dynamic library package is Agora_Native_SDK_for_macOS_v3_0_0_FULL_Dynamic.
Integrating the dynamic library has the following advantages:
If you prefer the dynamic library, you need to re-integrate the SDK and re-import the AgoraRtcKit
class. This process should take no more than five minutes. See Integrate the SDK and Import the class in the Quickstart.
Library type | ipa size (M) | Decompressed ipa size (M) | Frameworks folder size (M) | Binary file size (M) | Total size of frameworks folder + binary file (M) |
Dynamic library | 31.1 | 65 | 51.47 | 2.4 | 53.87 |
Static library | 30.6 | 63.7 | 30.1 | 22.5 | 52.6 |
The dynamic library is located in the framework folder as an independent library. Note that the corresponding binary file size does not include the SDK size. Overall, this decreases the binary file size by 20.1 M and increases the framework folder size by 21.37 M.
2. 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 (YES)
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
and AgoraRtcChannelDelegate
classes. 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. See Join multiple channels for details.
2. Raw video data
Adds the following C++ callbacks to the IVideoFrameObserver
class to provide raw video data at different video transmission stages, and to accommodate more scenarios.
onPreEncodeVideo
: Gets the video data after pre-processing and prior to encoding. This method applies to the scenarios where you need to pre-process the video data.getSmoothRenderingEnabled
: Sets whether to smooth the acquired video frames. The smoothed video frames are more evenly spaced, providing a better rendering experience.3. 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.
1. Audio profiles
To meet the need for higher audio quality, this release adjusts the corresponding audio profile of AgoraAudioProfileDefault(0)
in the LiveBroadcasting
profile.
SDK | AgoraAudioProfileDefault(0) |
---|---|
v3.0.0 | A sample rate of 48 KHz, music encoding, mono, and a bitrate of up to 52 Kbps. |
Earlier than v3.0.0 | A sample rate of 32 KHz, music encoding, mono, and a bitrate of up to 52 Kbps. |
2. Mirror mode
The mirror mode determines how the SDK mirrors the video in different stages of transmission. This release supports setting the video mirror mode when encoding and rendering the video:
mirrorMode
member to the AgoraVideoEncoderConfiguration
struct struct for setting a mirror effect for the stream to be encoded and transmitted.mirrorMode
member to the AgoraRtcVideoCanvas
struct. You can use setupLocalVideo
, to set a mirror effect for the local view, or use setupRemoteVideo
to set a mirror effect for the remote view on the local device.setLocalRenderMode
and setRemoteRenderMode
methods, both of which take an extra mirrorMode
parameter. During a call, you can use setLocalRenderMode
to update the mirror effect of the local view or setRemoteRenderMode
to update the mirror effect of the remote view on the local device.3. Quality statistics
Adds the following members in the AgoraChannelStats
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
4. Others
This release enables interoperability between the Native SDK and the Web SDK by default, and deprecates the enableWebSdkInteroperability
method.
Behavior change
enableLocalAudio (NO)
does not change the in-call volume to media volume.Added
setLocalRenderMode
setRemoteRenderMode
mirrorMode
parameter in the AgoraVideoEncoderConfiguration
structmirrorMode
and channelId
parameter in the AgoraRtcVideoCanvas
structchannelId
parameter in the AgoraRtcAudioVolumeInfo
structcreateRtcChannel
AgoraRtcChannel
classAgoraRtcChannelDelegate
classgatewayRtt
, memoryAppUsageRatio
, memoryTotalUsageRatio
and memoryAppUsageInKbytes
members in the AgoraChannelStats
classDeprecated
enableWebSdkInteroperability
setLocalRenderMode
¹. Use the new setLocalRenderMode
method instead.setRemoteRenderMode
¹. Use the new setRemoteRenderMode
method instead.setLocalVideoMirrorMode
. Use the mirrorMode
parameter in the setupLocalVideo
and setLocalRenderMode
methods instead.firstRemoteVideoFrameOfUid
. Use the remoteVideoStateChangedOfUid callback instead.didAudioMuted
, firstRemoteAudioFrameDecodedOfUid
and firstRemoteAudioFrameOfUid
. Use the remoteAudioStateChangedOfUid
callback instead.streamPublishedWithUrl
and streamUnpublishedWithUrl
. Use the rtmpStreamingChangedToState
callback instead.v2.9.3 was released on Feb 10, 2020.
This release fixed the following issues:
setRemoteSubscribeFallbackOption
method, which should work in the LiveBroadcasting
profile only, also works in the Communication
profile.v2.9.1 is released on Sep 19, 2019.
1. Detecting local voice activity
This release adds the report_vad(bool)
parameter to the enableAudioVolumeIndication
method to enable local voice activity detection. Once it is enabled, you can check the AgoraRtcAudioVolumeInfo
struct of the reportAudioVolumeIndicationOfSpeakers
callback for the voice activity status of the local user.
2. Supporting RGBA raw video data
This release supports RGBA raw video data. Use the C++ method getVideoFormatPreference
to set the format of the raw video data format.
You can also rotate or mirror the RGBA raw data using the C++ methods getRotationApplied
or getMirrorApplied
respectively.
1. Improving the watermark function in interactive live streaming
This release adds a new addVideoWatermark
method with the following settings:
visibleInPreview
member sets whether the watermark is visible in the local preview.positionInLandscapeMode
/positionInPortraitMode
member sets the watermark position when the encoding video is in landscape/portrait mode.This release optimizes the watermark function, reducing the CPU usage by 5% to 20%.
The original addVideoWatermark
method is deprecated.
2. 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. The original method supports only a fixed sample rate of 32 kHz and is deprecated.
Video
The return value of the getDeviceInfo
method does not match the actual available device.
To improve the user experience, we made the following changes in v2.9.1:
Added
startAudioRecording
addVideoWatermark
getVideoFormatPreference
getRotationApplied
getMirrorApplied
report_vad
parameter in the enableAudioVolumeIndication
methodvad
member in the AgoraRtcAudioVolumeInfo
classDeprecated
startAudioRecording
addVideoWatermark
v2.9.0 is released on Aug. 16, 2019.
1. RTMP streaming
In this release, we deleted the following methods:
configPublisher
setVideoCompositingLayout
clearVideoCompositingLayout
If your app implements RTMP streaming with the methods above, ensure that you upgrade the SDK to the latest version and use the following methods for the same function:
For how to implement the new methods, see Push Streams to the CDN.
2. Reporting the state of the remote video
This release extends the remoteVideoStateChangedOfUid
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 remoteVideoStateChangedOfUid
callback is deleted. If you upgrade your Native SDK to the latest version, ensure that you re-implement the remoteVideoStateChangedOfUid
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.
remoteVideoStateChangedOfUid
callback is triggered only when the remote video state has changed.3. Disabling/enabling the local audio
To improve the audio quality in the Communication
profile, this release sets the system volume to the media volume after you call the enableLocalAudio
(true) method. Calling enableLocalAudio
(false) switches the system volume back to the in-call volume.
1. Faster switching to another channel
This release adds the switchChannelByToken
method to enable the audience in an interactive streaming channel to quickly switch to another channel. With this method, you can achieve a much faster switch than with the leaveChannel
and joinChannelByToken
methods. After the audience successfully switches to another channel by calling the switchChannelByToken
method, the SDK triggers the didLeaveChannelWithStats
and didJoinChannel
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 interactive streaming channels interact with each other.
During the media stream relay, the SDK reports the states and events of the relay with the channelMediaRelayStateDidChange
and didReceiveChannelMediaRelayEvent
callbacks.
For more information on the implementation, API call sequence, sample code, and considerations, see Co-host across Channels.
3. Reporting the local and remote audio state
This release adds the localAudioStateChange
and remoteAudioStateChangedOfUid
callbacks to report the local and remote audio states. With these callbacks, the SDK reports the following states for the local and remote audio:
error
parameter for troubleshooting.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.
5. Pulling the remote audio data
To improve the experience in audio playback, this release adds the following methods to pull the remote audio data. After getting the audio data, you can process it and play it with the audio effects that you want.
enableExternalAudioSink
disableExternalAudioSink
pullPlaybackAudioFrameRawData
pullPlaybackAudioFrameSampleBufferByLengthInByte
The difference between the onPlaybackAudioFrame
callback and the pullPlaybackAudioFrameRawData
/ pullPlaybackAudioFrameSampleBufferByLengthInByte
method is as follows:
onPlaybackAudioFrame
: The SDK sends the audio data to the app once every 10 ms. Any delay in processing the audio frames may result in an audio delay.pullPlaybackAudioFrameRawData
/ pullPlaybackAudioFrameSampleBufferByLengthInByte
: The app pulls the remote audio data. After setting the audio data parameters, the SDK adjusts the frame buffer and avoids problems caused by jitter in external audio playback.1. Reporting more statistics of the in-call quality
This release adds the following statistics in the AgoraChannelStats
, AgoraRtcLocalVideoStats
, and AgoraRtcRemoteVideoStats
classes:
AgoraChannelStats
: The total number of the sent audio bytes, sent video bytes, received audio bytes, and received video bytes during a session.AgoraRtcLocalVideoStats
: The encoding bitrate, the width and height of the encoding frame, the number of frames, and the codec type of the local video.AgoraRtcRemoteVideoStats
: The packet loss rate of the remote video.2. Improving the interactive live video streaming quality
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
GameStreaming
.Communication
profile.Audio
Video
Miscellaneous
To improve the user experience, we made the following changes in v2.9.0:
Added
enableExternalAudioSink
disableExternalAudioSink
pullPlaybackAudioFrameRawData
pullPlaybackAudioFrameSampleBufferByLengthInByte
localAudioStateChange
remoteAudioStateChangedOfUid
remoteVideoStateChangedOfUid
localAudioStats
switchChannelByToken
startChannelMediaRelay
updateChannelMediaRelay
stopChannelMediaRelay
channelMediaRelayStateDidChange
didReceiveChannelMediaRelayEvent
AgoraChannelStats
: txAudioBytes
, txVideoBytes
, rxAudioBytes
and rxVideoBytes
AgoraRtcLocalVideoStats
: encodedBitrate
, encodedFrameWidth
, encodedFrameHeight
, encodedFrameCount
and codedType
AgoraRtcRemoteVideoStats
: packetLossRate
Deprecated
didMicrophoneEnabled
. Use AgoraAudioLocalStateStopped(0) or AgoraAudioLocalStateRecording(1) in the localAudioStateChange
callback instead.audioTransportStatsOfUid
. Use the remoteAudioStats
callback instead.videoTransportStatsOfUid
. Use the remoteVideoStats
callback instead.didVideoEnabled
. Use the remoteVideoStateChangedOfUid
callback with the following parameters instead:didLocalVideoEnabled
. Use the remoteVideoStateChangedOfUid
callback with the following parameters instead:firstRemoteVideoDecodedOfUid
. Use AgoraVideoRemoteStateStarting(1) or AgoraVideoRemoteStateDecoding(2) in the remoteVideoStateChangedOfUid
callback instead.Deleted
configPublisher
setVideoCompositingLayout
clearVideoCompositingLayout
remoteVideoStateChangedOfUid
v2.8.0 is released on Jul. 8, 2019.
1. Supporting string user IDs
Many apps use string user IDs. This release adds the following methods to enable apps to join an Agora channel directly with string user IDs as user accounts:
For other methods, Agora uses the integer uid parameter. The Agora Engine maintains a mapping table that contains the user ID and string user account, and you can get the corresponding user account or ID by calling the getUserInfoByUid or getUserInfoByUserAccount method.
To ensure smooth communication, use the same parameter type to identify all users within a channel, that is, all users should use either the integer user ID or the string user account to join a channel.
Note:
Do not mix parameter types within the same channel. The following Agora SDKs support string user accounts:
If you use SDKs that do not support string user accounts, only integer user IDs can be used in the channel.
If you change your user IDs into string user accounts, ensure that all app clients are upgraded to the latest version.
If you use string user accounts, ensure that the token generation script on your server is updated to the latest version. If you join the channel with a user account, ensure that you use the same user account or its corresponding integer user ID to generate a token. Call the getUserInfoByUserAccount
method to get the user ID that corresponds to the user account.
2. Adding remote audio and video statistics
To monitor the audio and video transmission quality during a call or interactive live streaming, this release adds the totalFrozenTime
and frozenRate
members in the AgoraRtcRemoteAudioStats and AgoraRtcRemoteVideoStats classes, to report the audio and video freeze time and freeze rate of the remote user.
This release also adds the numChannels
, receivedSampleRate
, and receivedBitrate
members in the AgoraRtcRemoteAudioStats class.
This release adds a AgoraConnectionChangedKeepAliveTimeout(14)
member to the AgoraConnectionChangedReason
parameter of the connectionChangedToState callback. This member indicates a connection state change caused by the timeout of the connection keep-alive between the SDK and Agora's edge server.
Video
MediaIO
methods.Miscellaneous
To improve your experience, we made the following changes to the APIs:
Added
numChannels
, receivedSampleRate
, receivedBitrate
, totalFrozenTime
, and frozenRate
members in the AgoraRtcRemoteAudioStats classtotalFrozenTime
and frozenRate
members in the AgoraRtcRemoteVideoStats classDeprecated
lowLatency
member in the AgoraLiveTranscoding classV2.4.1 is released on Jun 12th, 2019.
Ensure that you read the following SDK behavior changes if you migrate from an earlier SDK version.
1. Publishing streams to the RTMP
To improve the usability of the RTMP streaming service, v2.4.1 defines the following parameter limits:
Class / Interface | Parameter Limit |
---|---|
AgoraLiveTranscoding | |
AgoraImage | url: The maximum length of this parameter is 1024 bytes. |
addPublishStreamUrl | url: The maximum length of this parameter is 1024 bytes. |
removePublishStreamUrl | url: The maximum length of this parameter is 1024 bytes. |
This release also adds the audioCodecProfile parameter in the LiveTranscoding
class to set the audio codec profile type. The default type is LC-AAC, which means the low-complexity audio codec profile.
v2.4.1 also adds five error codes to the error parameter in the streamPublishedWithUrl method for quick troubleshooting.
2. Renaming the receivedFrameRate parameter in the RemoteVideoStats class
v2.4.1 renames the receivedFrameRate
parameter to rendererOutputFrameRate in the AgoraRtcRemoteVideoStats class to more accurately describe the statistics of the remote video stream.
1. Adding 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. v2.4.1 adds the setMediaMetadataSource and the setMediaMetadataDelegate interface and the AgoraMediaMetadataDataSource and the AgoraMediaMetadataDelegate protocol, allowing the host to add metadata to the output video and to send media attached information.
2. Optimized screen sharing
To avoid image cropping and distortion in screen sharing, v2.4.1 optimizes the encoding algorithms. In this release Agora applies the following encoding algorithms:
Suppose the value of dimensions is 1920 x 1080 pixels, that is, 2073600 pixels:
dimensions
is lower than that of the encoding dimensions, for example, 1000 x 1000 pixels, the SDK uses 1000 x 1000 pixels for encoding.dimensions
is higher than that of the encoding dimensions, for example, 2000 x 2000 pixels, the SDK uses the maximum value under 1920 x 1080 pixels with the aspect ratio of the screen dimension (1:1) for encoding, that is, 1440 x 1440 pixels.Agora uses the dimensions value in the AgoraScreenCaptureParameters class to calculate the charges. If you do not set the value of dimensions, the SDK uses the default value of 1920 x 1080 to calculate the charges.
You can also choose whether or not to capture the mouse cursor when sharing the screen. v2.4.1 adds the captureMouseCursor parameter in the AgoraScreenCaptureParameters
class and captures the mouse by default.
3. State of the local video
v2.4.1 adds the localVideoStateChange callback to indicate the local video state. In this callback, the SDK returns the Stopped
,Capturing
, Encoding
, or Failed
state. When the state is Failed
, you can use the error code for troubleshooting. This callback indicates whether or not the interruption is caused by capturing or encoding. This release deprecates the rtcEngineCameraDidReady
and rtcEngineVideoDidStop
callbacks.
4. State of the RTMP streaming
v2.4.1 adds the rtmpStreamingChangedToState callback to indicate the state of the RTMP streaming and help you troubleshoot issues when exceptions occur. In this callback, the SDK returns the Idle
, Connecting
, Runing
, Recovering
, or Failure
state. When the state is Failure
, you can use the error code for troubleshooting. You can still use the streamPublishedWithUrl
and streamUnpublishedWithUrl
callbacks, but we do not recommend using them.
5. More reasons for a network connection state change
In the onConnectionStateChanged callback, v2.4.1 adds error codes to the reason parameter to help you troubleshoot issues when exceptions occur. The SDK returns the connectionChangedToState callback whenever the connection state changes. This release also deprecates AgoraWarningCodeLookupChannelRejected(105)
, AgoraErrorCodeTokenExpired(109)
, and AgoraErrorCodeInvalidToken(110)
.
*6. State of the local network type *
v2.4.1 adds the networkTypeChangedToType callback to indicate the local network type. In this callback, the SDK returns the Unknown
, Disconnected
, Lan
, Wifi
, 2G
, 3G
, or 4G
type. When the network connection is interrupted, this callback indicates whether or not the interruption is caused by a network type change or poor network conditions.
7. Getting the audio mixing volume
v2.4.1 adds the getAudioMixingPlayoutVolume and getAudioMixingPublishVolume methods, which respectively gets the audio mixing volume for local playback and remote playback, to help you troubleshoot audio volume related issues.
8. Reporting when the first remote audio frame is received and decoded
To get the more accurate time of the first audio frame from a specified remote user, v2.4.1 adds the firstRemoteAudioFrameDecodedOfUid callback to report to the app that the SDK decodes first remote audio. This callback is triggered in either of the following scenarios:
The difference between the onFirstRemoteAudioDecoded and onFirstRemoteAudioFrame
callbacks is that the onFirstRemoteAudioFram
e callback occurs when the SDK receives the first audio packet. It occurs before the onFirstRemoteAudioDecoded
callback.
1. Reporting more statistics
v2.4.1 adds the txPacketLossRate and rxPacketLossRate parameters in the AgoraChannelStats class. These parameters return the packet loss rate from the local client to the server and vice versa.
To provide more accurate statistics of the local and remote video, v2.4.1 makes the following changes to the following classes:
2. Miscellaneous
enableAudioVolumeIndication
method.Video
Miscellaneous
onNetworkQuality
callback after leaving the channel. To improve your experience, we made the following changes to the APIs:
Unified the C++ interface for all platforms
v2.4.1 unifies the behavior of the C++ interfaces across different platforms so that you can apply the same code logic on different platforms. v2.4.1 implements the methods of the RtcEngineParameters
class in the IRtcEngine
class. Refer to Agora C++ API Reference for All Platforms home page for the applicable platforms and considerations of each interface.
Added
LiveTranscoding
classAgoraScreenCaptureParameters
classAgoraChannelStats
classAgoraRtcLocalVideoStats
classreceivedRemoteRate
) parameters in the AgoraRtcRemoteVideoStats
classDeprecated
enableAudioQualityIndication
rtcEngineCameraDidReady
. Use AgoraLocalVideoStreamStateCapturing(1) in the localVideoStateChange callback instead.rtcEngineVideoDidStop
. Use AgoraLocalVideoStreamStateStopped(0) in the localVideoStateChange callback instead.AgoraWarningCodeLookupChannelRejected(105)
warning code. Use AgoraConnectionChangedRejectedByServer(10) in the connectionChangedToState callback instead.AgoraErrorCodeTokenExpired(109)
error code. Use AgoraConnectionChangedTokenExpired(9) in the connectionChangedToState callback instead.AgoraErrorCodeInvalidToken(110)
error code. Use AgoraConnectionChangedInvalidToken(8) in the connectionChangedToState callback instead.AgoraErrorCodeStartCamera(1003)
error code. Use AgoraLocalVideoStreamErrorCaptureFailure(4) in the localVideoStateChange callback instead.v2.4.0
v2.4.0 is released on April 1, 2019.
If you integrate the SDK by using CocoaPods,ensure that you run pod update
in your Terminal before pod install
. If you prefer to specify the SDK version to obtain the latest release, ensure that you specify it as 'AgoraRtcEngine_macOS', '2.4.0.1'
in the Podfile.
v2.4.0 upgrades screen sharing and provides the following advanced functions:
startScreenCaptureByDisplayId
).startScreenCaptureByWindowId
).setScreenCaptureContentHint
).updateScreenCaptureParameters
).v2.4.0 deprecates the startScreenCapture
method. We recommend using the new methods for screen sharing. With the new methods, developers need to design the code logic to obtain the displayId
and windowId
. For more information, see Share the Screen.
Adding voice changer and reverberation effects in an audio chat room brings much more fun. v2.4.0 adds the setLocalVoiceChanger
and setLocalVoiceReverbPreset
methods, allowing you to change your voice or reverberation by choosing from the preset options. See Adjust the pitch and tone.
v2.4.0 adds the enableSoundPositionIndication
and setRemoteVoicePosition
methods. Call the enableSoundPositionIndication
method before joining a channel to enable stereo panning for the remote users, and then you can call the setRemoteVoicePosition
method to track the position of a remote user.
Conducting a last-mile probe test before joining the channel helps the local user to evaluate or predict the uplink network conditions. v2.4.0 adds the startLastmileProbeTest
, stopLastmileProbeTest
, and lastmileProbeResult
APIs, allowing you to get the uplink and downlink last-mile network statistics, including the bandwidth, packet loss, jitter, and round-trip time (RTT).
v2.4.0 adds the startAudioDeviceLoopbackTest
and stopAudioDeviceLoopbackTest
methods for testing whether the local audio devices are working properly. The test involves only the local audio devices and does not report the network condition.
v2.4.0 adds the setRemoteUserPriority
method for setting the priority of a remote user's media stream. You can use this method with the setRemoteSubscribeFallbackOption
method. If the fallback function is enabled for a remote stream, the SDK ensures the high-priority user gets the best possible stream quality.
v2.4.0 adds the localAudioMixingStateDidChanged
callback to report any change of the audio-mixing file playback state (playback succeeds or fails) and the corresponding reason. This release also adds the warning code 701, which is triggered if the local audio-mixing file does not exist, or if the SDK does not support the file format or cannot access the music file URL when playing the audio-mixing file.
The SDK has two log files, each with a default size of 512 KB. In case some customers require more than the default size, v2.4.0 adds the setLogFileSize
method for setting the log file size (KB).
Supports the cloud proxy service. See Use Cloud Proxy for details.
startEchoTest
method with the startEchoTestWithInterval
method. The intervalInSeconds
parameter of startEchoTestWithIntervals
allows you to set the interval between when you speak and when the recording plays back.AgoraRtcLocalVideoStats
class: sentTargetBitrate
for setting the target bitrate of the current encoder, sentTargetFrameRate
for setting the target frame rate, and qualityAdaptIndication
for reporting the quality of the local video since last count.v2.4.0 provides the following options for setting video encoder preferences:
AgoraVideoEncoderConfiguration
class: minFrameRate
and degradationPreference
. You can use these parameters together to set the minimum video encoder frame rate and the video encoding degradation preference under limited bandwidth. For more information, see Set the Video Profile.setCameraCapturerConfiguration
method, allowing you to set the camera capture preference. You can choose system performance over video quality or vice versa as needed. For more information, see the API Reference.enableLocalAudio
method disconnects all connected Bluetooth devices.pushExternalAudioFrameSampleBuffer
method call succeeds.getAudioPlaybackDevices
method.renderMode
setting, the video stretches due to a mismatch with the display.To improve your experience, we made the following changes to the APIs:
setBeautyEffectOptions
startScreenCaptureByDisplayId
startScreenCaptureByWindowId
updateScreenCaptureParameters
setScreenCaptureContentHint
setLocalVoiceChanger
setLocalVoiceReverbPreset
enableSoundPositionIndication
setRemoteVoicePosition
startLastmileProbeTest
stopLastmileProbeTest
setRemoteUserPriority
startEchoTestWithInterval
startAudioDeviceLoopbackTest
stopAudioDeviceLoopbackTest
setCameraCapturerConfiguration
setLogFileSize
localAudioMixingStateDidChanged
lastmileProbeResult
startEchoTest
startScreenCapture
setVideoQualityParameters
v2.4.0 changes the type of the frameRate
parameter in the AgoraVideoEncoderConfiguration
class from enum
to int
.
v2.3.3
v2.3.3 is released on January 24, 2019.
v2.3.3 optimizes the screen-sharing algorithm for different scenarios. The video smoothness and quality are enhanced when a user presents slides or browses websites. v2.3.3 also improves the initial image quality in the Communication
profile.
Occasional inaccurate statistics returned in the networkQuality
callback.
v2.3.2
v2.3.2 is released on January 16, 2019.
Besides the new features and improvements mentioned below, it is worth noting that v2.3.2:
LiveBroadcasting
profile.Before upgrading your SDK, ensure that the version is:
v2.3.2 adds the minBitrate parameter (minimum encoding bitrate) in the setVideoEncoderConfiguration method. The SDK automatically adjusts the encoding bitrate to adapt to the network conditions. Using a value greater than the default value forces the video encoder to output high-quality images but may cause more packet loss and hence sacrifice the smoothness of the video transmission. Agora does not recommend changing this value unless you have special requirements for image quality.
v2.3.2 adds the adjustAudioMixingPlayoutVolume
and adjustAudioMixingPublishVolume
methods to complement the adjustAudioMixingVolume
method, allowing you to independently adjust the audio mixing volume for local playback and remote publishing.
This release also changes the behavior of the adjustPlaybackSignalVolume method to control only the voice volume. Therefore, to mute the local audio playback, call both the adjustPlaybackSignalVolume(0)
and adjustAudioMixingVolume(0)
methods.
See Adjust the Volume for the scenarios and corresponding APIs.
Unreliable network conditions affect the overall quality of the interactive live streaming. v2.3.2 adds the setLocalPublishFallbackOption
and setRemoteSubscribeFallbackOption
methods to allow the SDK to:
The SDK triggers the didLocalPublishFallbackToAudioOnly
or didRemoteSubscribeFallbackToAudioOnly
callback when the stream falls back to audio-only or switches back to the video.
v2.3.2 adds the audioTransportStatsOfUid
and videoTransportStatsOfUid
callbacks to provide the upstream and downstream statistics of each remote user/host. During a call or interactive live streaming, the SDK triggers these callbacks once every two seconds after the local user receives audio/video packets from a remote user. The callbacks return the user ID, received audio/video bitrate, packet loss rate, and network time delay (ms).
To support video rotation scenarios and improve the quality of the custom video source, v2.3.2 deprecates the setVideoProfile
method and replaces it with the setVideoEncoderConfiguration
method to set the video encoder configurations. The AgoraVideoEncoderConfiguration
class provides a set of configurable video parameters, including the dimension, frame rate, bitrate, and orientation. You can still use the setVideoProfile
method, but we recommend using the setVideoEncoderConfiguration
method to set the video profile.
v2.3.2 adds the deviceName
parameter in the enableLoopbackRecording method, allowing you to use a virtual sound card for audio recording:
deviceName
as NULL.deviceName
as the name of the virtual card.v2.3.2 deprecates the audioQualityOfUid
callback and replaces it with the remoteAudioStats
callback to improve the accuracy of the call quality statistics. The remoteAudioStats
callback returns parameters such as the audio frame loss rate, end-to-end audio delay, and jitter buffer delay at the receiver, which are more closely linked to the real-user experience. In addition, v2.3.2 optimizes the algorithm of the networkQuality
callback for the uplink and downlink network qualities.
remoteAudioStats
: Reports the statistics of the remote audio stream from each user/host. This callback replaces the onAudioQuality callback. networkQuality
: Reports the last mile network quality of each user in the channel.Agora plans to improve the following callback in subsequent versions:
lastmileQuality
: Reports the last mile network quality of the local user before the user joins a channel.For the list of API methods related to the call quality statistics and on how and when to use them, see Report In-call Statistics.
v2.3.2 adds the following API method and callback to get the current network connection state and the reason for a connection state change:
getConnectionState
: Gets the connection state of the SDK.connectionChangedToState
: Occurs when the connection state of the SDK to the server changes.v2.3.2 deprecates the rtcEngineConnectionDidInterrupted
and rtcEngineConnectionDidBanned
callbacks.
In the new API method, the network connection states are "disconnected", "connecting", "connected", "reconnecting", and "failed". The SDK triggers the connectionChangedToState
callback when the network connection state changes. The SDK also triggers the rtcEngineConnectionDidInterrupted
and rtcEngineConnectionDidBanned
callbacks under certain circumstances, but we do not recommend using them.
v2.3.2 changes the rating parameter in the rate
method to "1 to 5" to encourage more feedback from end-users on the quality of a call or interactive live streaming. You can use this feedback for future product improvement. We strongly recommend integrating this method in your application.
LiveBroadcasting
profile.The following issues are fixed in v2.3.2:
startAudioMixing
method to play music files.To improve your experience, we made the following changes to the APIs:
setVideoEncoderConfiguration
setLocalPublishFallbackOption
setRemoteSubscribeFallbackOption
getConnectionState
adjustAudioMixingPlayoutVolume
adjustAudioMixingPublishVolume
connectionChangedToState
didLocalPublishFallbackToAudioOnly
didRemoteSubscribeFallbackToAudioOnly
remoteAudioStats
audioTransportStatsOfUid
videoTransportStatsOfUid
v2.2.3
v2.2.3 is released on July 5, 2018.
The security keys are improved and updated in v2.1.0. If you are using an Agora SDK version earlier than v2.1.0 and wish to migrate to the latest version, see Token Migration Guide.
v2.2.2
v2.2.2 is released on June 21, 2018.
v2.2.1
v2.2.1 is released on May 30th, 2018 and improves the internal code implementation.
v2.2.0
v2.2.0 is released on May 4, 2018.
Adds a publish
parameter in the playEffect
method to enable the remote user in the channel to hear the audio effect played locally.
If your SDK is upgraded to v2.2 from a previous version, pay attention to the functional changes of this API.
We provide a proxy package for enterprise users with corporate firewalls to deploy before accessing our services.
Adds the remoteVideoStateChangedOfUid
method to get the state of the remote video stream.
Adds the watermark function for users to add a PNG file to the local or RTMP streaming as a watermark. Adds the addVideoWatermark
and clearVideoWatermarks
methods to add and delete watermarks in the interactive video streaming. Adds the watermark
parameter in the LiveTranscording
interface to add watermarks in RTMP streaming.
Improves the enableAudioVolumeIndication
method. This method once enabled, sends the audio volume indication of the speaker in its callback at set intervals, regardless of whether anyone is speaking in the channel.
To meet the customers’ need for real-time network quality detection in the channel, the onNetworkQuality
method improves its data accuracy.
To test if the customers’ network condition can support voice or video calls before joining the channel, the onLastmileQuality
callback changes its detection from a fixed bitrate to the bitrate set by the customer in videoProfile
to improve data accuracy. When the network condition is unknown, the SDK still triggers this callback once every 2 seconds.
Improves the audio quality in scenarios that involve music playback.
v2.1.3
v2.1.3 is released on April 19, 2018.
In v2.1.3, we updated the bitrate values of the setVideoProfile
method in the LiveBroadcasting
profile. The bitrate values in v2.1.3 stay consistent with those in v2.0.
Improves the performance of screen sharing by shortening the time interval between which users switch from screen sharing to the normal Communication
or LiveBroadcasting
profile.
v2.1.2
v2.1.2 is released on April 2, 2018.
If you upgraded the SDK to v2.1.2 from a previous version, the
LiveBroadcasting
video quality will be better than theCommunication
video quality in the same resolutions, resulting in the live broadcasts using more bandwidth.
Extends the setVideoProfile
method to enable users to manually set the resolution, frame rate, and bitrate of the video.
The video resolution of the shared screen is worse in the Communication
profile than in LiveBroadcasting
profile.
v2.1.1
v2.1.1 is released on March 16, 2018.
We identified a critical bug in SDK v2.1. Upgrade to v2.1.1 if you are using the Agora SDK v2.1.
v2.1.0
V2.1.0 is released on March 7, 2018.
Adds a scenario for the game chat room to reduce the bandwidth and cancel the noise with the setAudioProfile
method.
In an interactive streaming, the host can enhance the local audio effects from the built-in microphone with the setLocalVoiceEqualization
and setLocalVoiceReverb
methods by implementing the voice equalization and reverberation effects.
Adds RESTful APIs to check the status of the users in the channel, the channel list of a specific company, and whether the user is an audience or a host:
Adds the support of 17-way video in interactive streaming, see:
Supports the default video-capturing features provided by the camera and the customized video source.
Supports the default functions provided by the renderers to display the local and remote videos to meet your requirements. We provide a set of interfaces for customized renderers.
Improvement | Description |
---|---|
Video Freeze Rate | Reduces the video freeze rate in the audience mode and for specific devices. |
Authentication | Supports a new authentication mechanism. Each legacy Dynamic Key (Channel Key) corresponds to a single privilege (for example, joining a channel), but each token in the new authentication mechanism includes all privileges (for example, joining a channel, hosting in, and stream-pushing). |
Billing Optimization | Small video resolutions are charged according to voice-only mode. For example, 16 x 16. |
API Naming Optimization | Modifies a set of names for the API attributes and enumeration values. |
v2.0.2
v2.0.2 is released on December 15, 2017 and fixes the FFmpeg symbol conflict.
v2.0
v2.0 is released on December 6, 2017.
Adds the setRemoteVideoStreamType
and enableDualStreamMode
methods in the Communication
profile to support dual streams.
Updates the following callbacks for audio mixing and sound effects:
Name | Description |
---|---|
rtcEngineMediaEngineDidAudioMixingFinish |
Removed. Replaced by rtcEngineLocalAudioMixingDidFinish. |
rtcEngineDidAudioEffectFinish |
Added. Notifies the app when the local audio effect playback stops. |
rtcEngineRemoteAudioMixingDidStart |
Added. Notifies the app when the remote user starts audio mixing. |
rtcEngineRemoteAudioMixingDidFinish |
Added. Notifies the app when the remote user stops audio mixing. |
Adds the camera management function in the Communication
and LiveBroadcasting
profiles by adding the following API methods:
Name | Description |
---|---|
isCameraZoomSupported |
Checks whether the device supports camera zoom. |
isCameraTorchSupported |
Checks whether the device supports camera flash. |
isCameraFocusPositionInReviewSupported |
Checks whether the device supports camera manual focus. |
isCameraAutoFocusFaceModeSupported |
Checks whether the device supports camera auto-face focus. |
setCameraZoomFactor |
Sets the camera zoom ratio. |
setCameraFocusPositionInPreview |
Sets the position for manual focus and activates focusing. |
setCameraTorchOn |
Sets the device to turn on the camera flash. |
setCameraAutoFocusFaceModeEnabled |
Sets the device to start auto-face focusing. |
Supports the external audio source in the Communication
and LiveBroadcasting
profiles by adding the following API methods:
Name | Description |
---|---|
enableExternalAudioSourceWithSampleRate |
Enables the external audio source. |
disableExternalAudioSource |
Disables the external audio source. |
pushExternalAudioFrameRawData |
Pushes the external audio frame to the Agora SDK. |
Communication
and LiveBroadcasting
profiles. Contact support@agora.io to enable this function, if required.Audio routing and Bluetooth issues.
v1.14
v1.14 is released on October 20, 2017.
setAudioProfile
method to set the audio parameters and scenarios.setLocalVoicePitch
method to set the local voice pitch.LiveBroadcasting
: Adds the setInEarMonitoringVolume
method to adjust the volume of the in-ear monitor.LiveBroadcasting
: The audience can view the host within one second in a single-stream mode (858 ms on average, and 625 ms in good network conditions).v1.13.1
v1.13.1 is released on September 28, 2017 and optimizes the echo issue under certain circumstances.
v1.13
v1.13 is released on September 4, 2017.
didClientRoleChanged
callback to indicate a user role change between the host and audience in the interactive live streaming.Occasional crashes on some devices.
v1.12
v1.12 is released on July 25, 2017.
injectStream
method to inject an RTMP stream into the current channel in the LiveBroadcasting
profile.aes-128-ecb
encryption mode in the setEncryptionMode
method.quality
parameter in the startAudioRecording
method to set the recording audio quality.ActiveSpeaker
method to report on the active speaker in the current channel.setScreenCaptureWindow
method, and updates the startScreenCapture
method to share the whole screen and specify the window or region in the Communication
profile.Communication
profile.In the Communication
profile, the 320 × 180 resolution profile is improved.
Occasional crashes.