This page provides the release notes for the Agora Voice SDK for Android.
If your app targets Android 9, you should keep the following behavior changes in mind. These updates to device serial and DNS information enhance user privacy.
Build serial number deprecation
In Android 9, Build.SERIAL
is always set to "UNKNOWN" to protect users' privacy.
If your app needs to access a device's hardware serial number, you should instead request the READ_PHONE_STATE permission, then call getSerial()
.
DNS privacy
Apps targeting Android 9 should honor the private DNS APIs. In particular, apps should ensure that, if the system resolver is doing DNS-over-TLS, any built-in DNS client either uses encrypted DNS to the same hostname as the system, or is disabled in favor of the system resolver.
For more information about privacy changes, see Android Privacy Changes.
v3.3.0 was released on January 22, 2021.
1. Integration change
This release adds libagora-core.so
, the Agora basic calculation framework. To integrate the SDK into your project, see Integrate the SDK.
2. Behavior change
This release deprecates setDefaultMuteAllRemoteAudioStreams
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 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. Channel media options
To help developers control media subscription more flexibly, this release adds the joinChannel
[2/2] and switchChannel
[2/2] methods to set whether users subscribe to all remote audio streams in a channel when joining and switching channels.
2. 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.
3. Deep-learning noise reduction
To eliminate non-stationary noise based on traditional noise reduction, this release adds enableDeepLearningDenoise
to enable deep-learning noise reduction.
libagora_ai_denoise_extension.so
dynamic library into your project files.4. Singing beautifier
To beautify the voice and add reverberation effects in a singing scenario, this release adds the setVoiceBeautifierParameters
method and the SINGING_BEAUTIFIER
enumeration value.
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.
5. Log files
To ensure the integrity of log content, this release adds the mLogConfig
member variable to RtcEngineConfig
. You can use mLogConfig
to set the log files output by the Agora SDK when you initialize RtcEngine
. 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.
6. 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 Android platforms. Once you obtain raw audio data through the following APIs, you can pre-process or post-process it for desired playback effects:
onPlaybackFrameBeforeMixing
onMixedFrame
isMultipleChannelFrameWanted
onPlaybackFrameBeforeMixingEx
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 onRemoteAudioStats
, which report QoE of the local user and the reason for poor QoE, respectively.
Added
setVoiceBeautifierParameters
SINGING_BEAUTIFIER
enumaration valueenableDeepLearningDenoise
joinChannel
[2/2]switchChannel
[2/2]createDataStream
mLogConfig
member variable in the RtcEngineConfig
classonPlaybackFrameBeforeMixing
onMixedFrame
isMultipleChannelFrameWanted
onPlaybackFrameBeforeMixingEx
qoeQuality
and qualityChangedReason
in the RemoteAudioStats
classsetCloudProxy
ERR_MODULE_NOT_FOUND(157)
Deprecated
setDefaultMuteAllRemoteAudioStreams
setLogFile
setLogFileSize
setLogFilter
createDataStream
v3.2.1 was released on December 17, 2020. This release fixed the following issues:
Client.on(disable-local-video)
or Client.on(mute-video)
callback. v3.2.0 was released on November 30, 2020.
1. Integration change
SDK package change
Since v3.2.0, the following files have been added to the SDK package:
libagora-fdkaac.so
: The Fraunhofer FDK AAC dynamic library.libagora-mpg123.so
: The mpg123 dynamic library.libagora-soundtouch.so
: The SoundTouch dynamic library.If you upgrade the SDK to v3.2.0 or later, ensure that you have copied the above files to the folder where the libagora-rtc-sdk.so
file is located.
This release also merges libagora-crypto.so
into libagora-rtc-sdk.so
. After integrating libagora-rtc-sdk.so
, you can use built-in encryption directly.
Spelling correction
This release renames USER_PRIORITY_NORANL
to USER_PRIORITY_NORMAL
.
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.
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 audio experience for multi-person meetings, this release adds AUDIO_SCENARIO_MEETING(8)
in setAudioProfile
.
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.
Added
setClientRole
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
AUDIO_SCENARIO_MEETING(8)
Deprecated
setLocalVoiceChanger
setLocalVoiceReverbPreset
v3.1.1 was released on August 27, 2020. This release changes the AreaCode
for regional connection. The latest area codes are as follows:
AREA_CODE_CN
: Mainland China.AREA_CODE_NA
: North America.AREA_CODE_EU
: Europe.AREA_CODE_AS
: Asia, excluding Mainland China.AREA_CODE_JP
: Japan.AREA_CODE_IN
: India.AREA_CODE_GLOB
: (Default) Global.If you have specified a region for connection when calling create
, 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:
onAudioPublishStateChanged
: Reports the change of the audio publishing state.onAudioSubscribeStateChanged
: Reports the change of the audio subscribing state.2. First local frame published callback
This release adds the onFirstLocalAudioFramePublished
callback to report that the first audio frame is published. The onFirstLocalAudioFrame
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.
AREA_CODE_JAPAN
: Japan.AREA_CODE_INDIA
: India.2. Encryption
This release adds the enableEncryption
method for enabling built-in encryption, and deprecates the following methods:
setEncryptionSecret
setEncryptionMode
3. More in-call statistics
This release adds the following attributes 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.publishDuration
in RemoteAudioStats
, which represents the total publish duration (ms) of the remote media stream.4. 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 |
---|---|---|
AUDIO_PROFILE_DEFAULT |
||
AUDIO_PROFILE_SPEECH_STANDARD |
18 Kbps | 18 Kbps |
AUDIO_PROFILE_MUSIC_STANDARD |
64 Kbps | 48 Kbps |
AUDIO_PROFILE_MUSIC_STANDARD_STEREO |
80 Kbps | 56 Kbps |
AUDIO_PROFILE_MUSIC_HIGH_QUALITY |
96 Kbps | 128 Kbps |
AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO |
128 Kbps | 192 Kbps |
5. Log files
This release increases the default number of log files that the Agora SDK outputs from 2 to 5, and increases the default size of each log file from 512 KB to 1024 KB. By default, the SDK outputs five log files, agorasdk.log
, agorasdk_1.log
, agorasdk_2.log
, agorasdk_3.log
, agorasdk_4.log
. The SDK writes the latest logs in agorasdk.log
. When agorasdk.log
is full, the SDK deletes the log file with the earliest modification time among the other four, renames agorasdk.log
to the name of the deleted log file, and creates a new agorasdk.log
to record the latest logs.
6. In-ear monitoring improvement on OPPO models (Android)
This release reduces the delay of in-ear monitoring on the following OPPO models:
7. Others
This release fixed the following issues:
setAudioMixingPitch
did not work when setting the pitch
parameter to certain values.Added
onAudioPublishStateChanged
onAudioSubscribeStateChanged
onFirstLocalAudioFramePublished
enableEncryption
txPacketLossRate
in LocalAudioStats
publishDuration
in RemoteAudioStats
onRtmpStreamingEvent
ERR_NO_SERVER_RESOURCES(103)
Deprecated
setEncryptionSecret
setEncryptionMode
onFirstLocalAudioFrame
v3.0.1 was released on May 27, 2020.
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
:
VOICE_BEAUTY
and GENERAL_BEAUTY_VOICE
. The VOICE_BEAUTY
elements enhance the local voice, and the GENERAL_BEAUTY_VOICE
enumerations add gender-based enhancement effects.AUDIO_VIRTUAL_STEREO
and several enumerations that have the prefix AUDIO_REVERB_FX
. The AUDIO_VIRTUAL_STEREO
enumeration implements reverberation in the virtual stereo, and the AUDIO_REVERB_FX
enumerations implement additional enhanced reverberation effects.See Set the Voice Changer and Reverberation Effects for more information.
3. 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
.After successfully registering the audio observer, if you set the return value of isMultipleChannelFrameWanted
as true
, you can get the corresponding audio data from onPlaybackAudioFrameBeforeMixingEx
. In a multi-channel scenario, Agora recommends setting the return value as true
.
onRemoteAudioStateChanged
callback, no audio, audio mixing and audio freezing.onClientRoleChanged
callback, occasional crashes, and interoperability when using encryption.This release adds the following APIs:
setAudioMixingPitch
AUDIO_VIRTUAL_STEREO
and several elements that have the prefixes VOICE_BEAUTY
, GENERAL_BEAUTY_VOICE
, and AUDIO_REVERB_FX
totalActiveTime
in RemoteAudioStats
v3.0.0.2 was released on Apr 22, 2020.
Specifying the area of connection
This release adds create
for specifying the area of connection when creating an RtcEngine
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 the occasional no-audio issue.
Added
v3.0.0 was released on Mar 4, 2020.
On Mar 24, 2020, we fixed occasional issues relating to no audio, audio mixing, multiple onClientRoleChanged
callbacks, and SDK crashes.
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.
Default log file path change
To avoid privilege issues, this release changes the default log file path from /storage/emulated/0/<package name>/
to /storage/emulated/0/Android/data/<package name>/files/
.
1. Multiple channel management
To enable a user to join an unlimited number of channels at a time, this release adds the RtcChannel
and IRtcChannelEventHandler
classes. By creating multiple RtcChannel
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. 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. Agora Mediaplayer Kit
To enrich the playability of the interactive live streaming, Agora releases the Mediaplayer Kit plug-in, which supports the host playing local or online media resources and sharing them with all users in the channel during the streaming. See Mediaplayer Kit release notes for details.
1. Audio profiles
To meet the need for higher audio quality, this release adjusts the corresponding audio profile of AUDIO_PROFILE_DEFAULT (0)
in the LIVE_BROADCASTING
profile.
SDK | AUDIO_PROFILE_DEFAULT (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 44 Kbps. |
2. Quality statistics
Adds the following members in the RtcStats
class for providing more in-call statistics, making it easier to monitor the call quality and memory usage in real time:
gatewayRtt
memoryAppUsageRatio
memoryTotalUsageRatio
memoryAppUsageInKbytes
Others
This release enables interoperability between the RTC Native SDK and the RTC Web SDK by default, and deprecates the enableWebSdkInteroperability
method.
Behavior change
enableLocalAudio
(false) does not change the in-call volume to media volume. setEnableSpeakerphone
(true) does not route the audio to the speakerphone.Added
channelId
in AudioVolumeInfo
gatewayRtt
, memoryAppUsageRatio
, memoryTotalUsageRatio
, and memoryAppUsageInKbytes
in RtcStats
createRtcChannel
RtcChannel
IRtcChannelEventHandler
Deprecated
enableWebSdkInteroperability
.onUserMuteAudio
, onFirstRemoteAudioDecoded
, and onFirstRemoteAudioFrame
, replaced by onRemoteAudioStateChanged
.onStreamPublished
and onStreamUnpublished
, replaced by onRtmpStreamingStateChanged
.v2.9.4 was released on Feb 17, 2020.
This release fixed some abnormal behaviors on Android devices.
v2.9.2 is released on Oct 18, 2019.
This release fixed crashes on some Android device.
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 AudioVolumeInfo struct of the onAudioVolumeIndication
callback for the voice activity status of the local user.
2. Removing the event handler
This release adds the removeHandler method to remove specified IRtcEngineEventHandler objects when you want to stop listening for specific events.
1. 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.
2. Adding error codes
This release adds the following error codes in the ErrorCode class:
ERR_ALREADY_IN_USE(19)
ERR_WATERMARK_PATH(125)
ERR_INVALID_USER_ACCOUNT(134)
ERR_AUDIO_BT_SCO_FAILED(1030)
ERR_ADM_NO_RECORDING_DEVICE(1359)
ERR_VCM_UNKNOWN_ERROR(1600)
ERR_VCM_ENCODER_INIT_ERROR(1601)
ERR_VCM_ENCODER_ENCODE_ERROR(1602)
ERR_VCM_ENCODER_SET_ERROR(1603)
For detailed descriptions for each error, see Error Codes.
Audio
setEnableSpeakerphone
method when Bluetooth is connected in the COMMUNICATION
profile.LIVE_BROADCASTING
profile.startAudioMixing
method on devices running Android 10.Miscellaneous
Added
report_vad
parameter in enableAudioVolumeIndicationvad
member in AudioVolumeInfo Deprecated
startAudioRecording
v2.9.0 is released on Aug 16, 2019.
1. RTMP streaming
In this release, we deleted the following methods:
configPublisher
If your app implements CDN 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. 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 switchChannel
method to enable the audience in a live-streaming 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 onLeaveChannel
and onJoinChannelSuccess
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-streaming channels interact with each other.
During the media stream relay, the SDK reports the states and events of the relay with the onChannelMediaRelayStateChanged
and onChannelMediaRelayEvent
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 onLocalAudioStateChanged
and onRemoteAudioStateChanged
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 onLocalAudioStats
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.
The difference between the onPlaybackFrame
callback and the pullPlaybackAudioFrame
method is as follows:
onPlaybackFrame
: 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.pullPlaybackAudioFrame
: 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 RtcStats
class:
RtcStats
: The total number of the sent audio bytes and received audio bytes during a session.2. Other Improvements
COMMUNICATION
profile.Audio
startAudioMixing
method. Miscellaneous
To improve the user experience, we made the following changes in v2.9.0:
Added
setExternalAudioSink
pullPlaybackAudioFrame
onLocalAudioStateChanged
onRemoteAudioStateChanged
onLocalAudioStats
switchChannel
startChannelMediaRelay
updateChannelMediaRelay
stopChannelMediaRelay
onChannelMediaRelayStateChanged
onChannelMediaRelayEvent
RtcStats
: txAudioBytes
and rxAudioBytes
Deprecated
onMicrophoneEnabled
. Use LOCAL_AUDIO_STREAM_STATE_CHANGED(0) or LOCAL_AUDIO_STREAM_STATE_RECORDING(1) in the onLocalAudioStateChanged
callback instead. onRemoteAudioTransportStats
. Use the onRemoteAudioStats
callback instead.Deleted
configPublisher
v2.8.2 is released on Aug 1, 2019.
This release fixed the interoperating problem with the Agora Web SDK.
v2.8.1 is released on Jul. 20, 2019.
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 statistics
To monitor the audio transmission quality during a call or interactive live streaming, this release adds the totalFrozenTime
and frozenRate
members in the RemoteAudioStats class, to report the audio freeze time and freeze rate of the remote user.
This release also adds the numChannels
, receivedSampleRate
, and receivedBitrate
members in the RemoteAudioStats class.
This release adds a CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT(14)
member to the reason
parameter of the onConnectionStateChanged 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.
Audio
Miscellaneous
setLogFile
method does not exist, no log file is generated and the default log file is incomplete.To improve your experience, we made the following changes to the APIs:
Added
numChannels
, receivedSampleRate
, receivedBitrate
, totalFrozenTime
, and frozenRate
members in the RemoteAudioStats classDeprecated
v2.4.1 is released on Jun 12, 2019.
Ensure that you read the following SDK behavior changes if you migrate from an earlier SDK version.
Publishing streams to the CDN
To improve the usability of the CDN streaming service, v2.4.1 defines the following parameter limits:
Class / Interface | Parameter Limit |
---|---|
LiveTranscoding | |
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 onStreamPublished method for quick troubleshooting.
1. State of the RTMP streaming
v2.4.1 adds the onRtmpStreamingStateChanged 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
, RUNNING
, RECOVERING
, or FAILURE
state. When the state is FAILURE
, you can use the error code for troubleshooting. You can still use the onStreamPublished
and onStreamUnpublished
callbacks, but we do not recommend using them.
2. 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 onConnectionStateChanged
callback whenever the connection state changes. This release also deprecates WARN_LOOK_UP_CHANNEL_REJECTED(105)
, ERR_TOKEN_EXPIRED(109)
, and ERR_INVALID_TOKEN(110)
.
*3. State of the local network type *
v2.4.1 adds the onNetworkTypeChanged 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.
4. 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.
5. 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 onFirstRemoteAudioDecoded 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. Playing multiple online audio effect files simultaneously
v2.4.1 adds the support for playing multiple online audio effect files simultaneously by allowing you to call the playEffect method multiple times with the URLs of the online audio effect files.
2. Reporting more statistics
v2.4.1 adds the txPacketLossRate and rxPacketLossRate parameters in the RtcStats 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:
receivedFrameRate
parameter to the rendererOutputFrameRate parameter.3. Miscellaneous
enableAudioVolumeIndication
method.Audio
LIVE_BROADCASTING
profile.Miscellaneous
onNetworkQuality
callback after leaving the channel.joinChannel
.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
classRtcStats
classDeprecated
enableAudioQualityIndication
WARN_LOOKUP_CHANNEL_REJECTED(105)
warning code. Use CONNECTION_CHANGED_REJECTED_BY_SERVER(10) in the onConnectionStateChanged callback instead.ERR_TOKEN_EXPIRED(109)
error code. Use CONNECTION_CHANGED_TOKEN_EXPIRED(9) in the onConnectionStateChanged callback instead.ERR_INVALID_TOKEN(110)
error code. Use CONNECTION_CHANGED_INVALID_TOKEN(8) in the onConnectionStateChanged callback instead.v2.4.0
v2.4.0 is released on April 1, 2019.
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 onLastmileProbeResult
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 onAudioMixingStateChanged
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.
intervalInSeconds
parameter to the startEchoTest
method, allowing you to set the interval between when you speak and when the recording plays back.LocalVideoStats
class: targetBitrate
for setting the target bitrate of the current encoder, targetFrameRate
for setting the target frame rate, and qualityAdaptIndication
for reporting the quality of the local video since last count.enableLocalAudio
method disconnects all connected Bluetooth devices.To improve your experience, we made the following changes to the APIs:
setLocalVoiceChanger
setLocalVoiceReverbPreset
enableSoundPositionIndication
setRemoteVoicePosition
startLastmileProbeTest
stopLastmileProbeTest
setRemoteUserPriority
startEchoTest
setLogFileSize
onAudioMixingStateChanged
onLastmileProbeResult
startEchoTest
v2.3.3
v2.3.3 is released on January 24, 2019.
onNetworkQuality
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:
LIVE_BROADCASTING
profile. Before upgrading your SDK, ensure that the version is:
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.
v2.3.2 deprecates the onAudioQuality
callback and replaces it with the onRemoteAudioStats
callback to improve the accuracy of the call quality statistics. The onRemoteAudioStats
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 onNetworkQuality
callback for the uplink and downlink network qualities.
onRemoteAudioStats
: Reports the statistics of the remote audio stream from each user/host. This callback replaces the onAudioQuality callback. onNetworkQuality
: Reports the last mile network quality of each user in the channel.We plan to improve the following callback in subsequent versions:
onLastmileQuality
: 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.onConnectionStateChanged
: Occurs when the connection state of the SDK to the server changes.v2.3.2 deprecates the onConnectionInterrupted
and onConnectionBanned
callbacks.
In the new API method, the network connection states are "disconnected", "connecting", "connected", "reconnecting", and "failed". The SDK triggers the onConnectionStateChanged
callback when the network connection state changes. The SDK also triggers the onConnectionInterrupted
and onConnectionBanned
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 app.
LIVE_BROADCASTING
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:
getConnectionState
adjustAudioMixingPlayoutVolume
adjustAudioMixingPublishVolume
onConnectionStateChanged
onCameraExposureAreaChanged
onRemoteAudioStats
v2.3.1
v2.3.1 is released on October 12, 2018.
When a user joins a channel, the audio function is enabled by default.
To receive audio streams without sending any audio stream after joining a channel, this version adds the enableLocalAudio
method is to disable or re-enable the local audio function.
Once the local audio function is disabled or re-enabled, the SDK returns the onMicrophoneEnabled
callback, and the local audio capturing stops.
This method does not affect receiving or playing the remote audio streams.
The difference between this method and the muteLocalAudioStream
method is that the enableLocalAudio
method does not capture or send any audio stream, while the muteLocalAudioStream
method captures but does not send audio streams.
LIVE_BROADCASTING
profile: Delay at the client due to incorrect statistics.LIVE_BROADCASTING
profile: Occasional crashes on some Android devices after a user repeats the process of switching roles between BROADCASTER
and AUDIENCE
.v2.3.0
v2.3.0 is released on August 31, 2018.
From v2.3.0, the LiveTranscoding
class is moved from the io.agora.live package to the io.agora.rtc.live
package.
Fixed a typo in the constants.java API in v2.3.0.
public static final int SOFEWARE_ENCODER = 1;
public static final int SOFTWARE_ENCODER = 1;
The security keys are improved and updated in v2.1.0. If you are using an Agora SDK version below v2.1.0 and wish to migrate to the latest version, see Token Migration Guide.
The SDK returns the onTokenPrivilegeWillExpire
callback 30 seconds before a token expires to notify the app to renew it. When this callback is received, you need to generate a new token on your server and call the renewToken
method to pass the newly-generated token to the SDK.
The onRemoteAudioTransportStats
callback is added to provide user-specific upstream and downstream statistics, including the bitrate, frame rate, and packet loss rate. During a call or the interactive live streaming, the SDK triggers these callbacks once every two seconds after the user receives audio/video packets from a remote user. The callbacks include the user ID, audio bitrate at the receiver, packet loss rate, and time delay (ms).
AUDIENCE
and BROADCASTER
.destroy
method does not respond after a user enables the video and joins a channel.To improve your experience, we made the following changes to the APIs:
To avoid adding too many users with the same uid into the CDN publishing channel, the following API method is deleted in v2.3.0, and the return value type of addUser
is changed from void to int.
setUser
The following API methods are deleted and no longer supported in v2.3.0. Agora provides the Recording SDK for better recording services. For more information on the Recording SDK, see Release Notes for Agora Recording SDK.
startRecordingService
stopRecordingService
refreshRecordingServiceStatus
The following deprecated API methods are deleted and no longer supported from v2.3.0:
monitorConnectionEvent
monitorBluetoothHeadsetEvent
monitorHeadsetEvent
setPreferHeadset
switchView
setSpeakerphoneVolume
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 below v2.1.0 and wish to migrate to the latest version, see Token Migration Guide
.
onLeaveChannel
callback long after a user has left the channel on some Android devices.v2.2.2
v2.2.2 is released on June 21, 2018.
onLeaveChannel
callback long after a user has left the channel on some Android devices.v2.2.1
v2.2.1 is released on May 30, 2018.
v2.2.0
v2.2.0 is released on May 4, 2018.
Adds a publish
parameter in the playEffect
method for 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.
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 the detection from a fixed bitrate to the bitrate set by the customer in the setVideoProfile
method to improve data accuracy. When the network condition is unknown, the SDK triggers this callback once every two 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, Agora updates the bitrate values of the setVideoProfile
method in the LIVE_BROADCASTING
profile. The bitrate values in v2.1.3 stay consistent with those in v2.0.
Occasional recording failures on some phones when a user leaves a channel and turns on the built-in recording device.
v2.1.2
v2.1.2 is released on April 2, 2018.
Video freeze in DTX + AAC mode.
v2.1.1
v2.1.1 is released on March 16, 2018.
Agora has identified a critical issue in SDK v2.1. Upgrade to v2.1.1 if you are using 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 scenario, 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. For details, see Online Statistics Query API.
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). |
v2.0.2
v2.0.2 is released on December 15, 2017, and fixes occasional audio routing issues.
v2.0
v2.0 is released on December 6, 2017.
Supports external audio sources in the COMMUNICATION
and LIVE_BROADCASTING
profiles by adding the following API methods:
Name | Description |
---|---|
setExternalAudioSource |
Enables the external audio source function. |
pushExternalAudioFrame |
Pushes the external audio frame to the Agora SDK. |
Provides a set of RESTful APIs to ban a peer user from the server in the COMMUNICATION
and LIVE_BROADCASTING
profiles profiles. Contact support@agora.io to enable this function, if required.
Supports the following Android emulators: NOX, Lightning, and Xiaoyao.
v1.14
v1.14 is released on October 20, 2017.
setAudioProfile
method to set the audio parameters and scenariossetLocalVoicePitch
method to set the local voice pitchLIVE_BROADCASTING
: Adds the setInEarMonitoringVolume
method to adjust the volume of the in-ear monitorLIVE_BROADCASTING
: The audience can view the host within one second in a single-stream mode (226 ms on average, and 204 ms under good network conditions).Camera related issues on Android devices.
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.
onClientRoleChanged
callback to report to the app on a user role switch between the host and the audience in the interactive live streaming.Occasional crashes on some devices.
v1.12
v1.12 is released on July 25, 2017.
aes-128-ecb
encryption mode in the setEncryptionMode
method.quality
parameter in the startAudioRecording
method to set the recording audio quality.