This page provides the release notes for the Agora Video SDK for Android.
The Video SDK supports the following scenarios:
- Voice/Video Communication
- Live Voice/Video Broadcast
v2.3.3 is released on January 24, 2019.
- Occasional inaccurate statistics returned in the
- Occasional crashes on Huawei P9.
v2.3.2 is released on January 16, 2019.
Before Getting Started
Besides the new features and improvements mentioned below, it is worth noting that v2.3.2:
- Improves the SDK's ability to counter packet loss under unreliable network conditions.
- Improves the communication smoothness.
- Reduces video freezes in the Live Broadcast profile.
Before upgrading your SDK, ensure that the version is:
- Native SDK v1.11 or later.
- Web SDK v2.1 or later.
1. Automatic exposure at a point of interest
v2.3.2 adds the following methods and callback to support camera exposure and improve the captured video quality:
isCameraExposurePositionSupported: Checks whether the device supports camera exposure.
setCameraExposurePosition: Sets the camera exposure position.
onCameraExposureAreaChanged: Occurs when the camera exposure area changes.
You can send the touch point coordinates in the view to the SDK for automatic exposure.
2. Video quality in a live broadcast
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.
3. Independent audio mixing volume adjustments for local playback and remote publishing
v2.3.2 adds the
adjustAudioMixingPublishVolume methods to complement the
adjustAudioMixingVolume method, allowing you to independently adjust the audio mixing volume for local playback and remote publishing. See Adjust the Volume for the scenarios and corresponding APIs.
1. Improves the accuracy of the call quality statistics
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.
2. New network connection policy
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.
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
onConnectionBanned callbacks under certain circumstances, but we do not recommend using them.
3. Improves the call rating system
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 live broadcast. You can use this feedback for future product improvement. We strongly recommend integrating this method in your app.
4. Other improvements
- Minimizes packet loss under unreliable network conditions in the Live Broadcast profile.
- Accelerates the video quality recovery under network congestion.
- Improves the stability in pushing streams.
- Improves the performance of the SDK on Android 6.0 or later.
- Optimizes the API calling threads.
- Checks the headset and Bluetooth device connection.
- Reduces the audio delay.
- Supports Smartisan camera.
The following issues are fixed in v2.3.2:
- Crashes on emulators, such as Yeshen and mumu.
- Crashes on Android 6.0+ due to x86 .so relocation.
- A user joins a live broadcast with a Bluetooth headset. The audio is not played through the Bluetooth headset when the user leaves the channel and opens another app.
- Crashes when calling the
startAudioMixingmethod to play music files.
- A previously disabled microphone becomes enabled when the device connects to a headset.
- On Huawei Mate 20 X, a remote user cannot hear any voice when the app switches to the background and the user opens another app.
- Echo on Pixel 2.
- Cannot adjust the volume of the speaker when users change roles, join and leave channels, or a system phone or Siri interrupts.
- Users do not hear any voice for a while when an app switches back from the background.
- Occasional issues when using an external video source.
- The cursor on the remote side is not in the same position as the local side when sharing the desktop.
To improve your experience, we made the following changes to the APIs:
v2.3.1 is released on October 12, 2018.
Disables/Re-enables the Local Audio Function
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.
- Improves the SDK's adaptiveness to the Android video encoder.
- Occasional crashes when switching between front and rear cameras.
- Occasionally, failing to render the video on some Android devices.
- Occasional image freezes on some Android devices.
- Occasionally on some Android devices, a user hears a popping sound if the user leaves the channel at the same time another user is speaking.
- Communication profile: If a user disables the video and re-enables it during a one-to-one call, it takes a long time for the other user to see the image.
- Live-broadcast profile: Delay at the client due to incorrect statistics.
- Live-broadcast profile: Occasional crashes on some Android devices after a user repeats the process of switching roles between BROADCASTER and AUDIENCE.
- The timestamp in the captured raw video frames does not refresh with the frame.
v2.3.0 is released on August 31, 2018.
To support video rotation and enable better quality for the custom video source, this version deprecates the
setVideoProfilemethod and uses the
setVideoEncoderConfigurationmethod instead to set the video encoding configurations. You can still use the
setVideoProfilemethod, but Agora recommends using the
setVideoEncoderConfigurationmethod to set the video profile because:
- During a live broadcast, users can set the video orientation mode as adaptive, under which the SDK can transfer rotated video frames without cropping them, thus avoiding the “big headshot” or blurry images at the player.
- In scenarios involving external video sources, the SDK adjusts the width and height of the output video frames based on the inputting video frames, avoiding unnecessary cropping and thereby rendering more image frames at the player.
From v2.3.0, the
LiveTranscodingclass is moved from the io.agora.live package to the
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.
1. Fallback options for a live broadcast under unreliable network conditions
The audio and video quality of a live broadcast deteriorate under unreliable network conditions. To improve the efficiency of a live broadcast, the
setRemoteSubscribeFallbackOption methods are added. These interfaces allow the SDK to automatically disable the video stream when the network conditions cannot support both audio and video, and enable the video when the network conditions improve. The SDK triggers the
onRemoteSubscribeFallbackToAudioOnly callback when the stream falls back to audio-only or when the stream switches back to the video.
2. Notifies the user that the token expires in 30 seconds
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.
3. Returns user-specific upstream and downstream statistics, including the bitrate, frame rate, packet loss rate, and time delay
onRemoteVideoTransportStats callbacks are added to provide user-specific upstream and downstream statistics, including the bitrate, frame rate, and packet loss rate. During a call or a live broadcast, 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).
4. Sets the video encoder configurations
To support scenarios with video rotation and enable better quality for the custom video source, this version deprecates the
setVideoProfile method and uses the
setVideoEncoderConfiguration method instead to set the video encoding configurations. You can still use the
setVideoProfile method, but Agora recommends using the
setVideoEncoderConfiguration method to set the video profile because:
During a live broadcast, users can set the video orientation mode as adaptive, under which the SDK can transfer rotated video frames without cropping them, thus avoiding the “big headshot” or blurry images at the player.
In scenarios involving external video sources, the SDK adjusts the width and height of the output video frames based on the inputting video frames, avoiding unnecessary cropping and thereby rendering more image frames at the player.
VideoEncoderConfiguration class provides a set of configurable video parameters, including the dimension, frame rate, bitrate, and orientation. For more information on the API, see
Set the Video Encoder Configuration.
6. Adds support for background image settings in setLiveTranscoding
backgroundImage parameter is added to the
setLiveTranscoding method allowing you to set the background image in the combined video of a live broadcast.
- Improves the quality for one-on-one voice/video scenarios with optimized latency and smoothness, especially for areas like Southeast Asia, South America, Africa, and the Middle East.
- Improves the audio encoder efficiency in a live broadcast to reduce user traffic while ensuring the call quality.
- Improves the audio quality during a call or a live broadcast using the deep-learning algorithm.
- The users on the Web client cannot see the video sent from the Native client due to codec bugs.
- Excessive increase in memory usage when multiple delegated hosts broadcast in the channel.
- Occasional crashes on some Android devices.
- The remote view does not display on some devices.
- The local video cannot be enabled on some Android devices.
- Occasional ghost images.
- Occasional green lines at the bottom of the video when a user switches from a low stream to a high stream video in the Communication profile.
- Occasional crashes after interoperating with devices of other platforms for some Android devices.
- Excessive increase in the memory usage for the host when the host frequently joins and leaves a channel that has multiple delegated hosts.
- Occasional black screens on some Android devices.
- Occasionally, the remote user cannot hear the host when the host switches between AUDIENCE and BROADCASTER.
- Occasionally, the settings applied to the background image in live transcoding do not take effect.
- Occasionally on some devices, the video height and width are swapped in the Communication profile.
- Occasionally, the
destroymethod does not respond after a user enables the video and joins a channel.
- Occasional crashes on Android devices when remote users frequently join and leave the channel.
- Black screen due to failure to render the remote video on some Android devices.
- Occasionally, the audience cannot adjust the channel volume.
- Occasionally, apps do not respond on some Android devices.
- Occasional crashes on some Android devices when switching video resolutions in a live broadcast.
- A delegated host cannot see the video of the other hosts in the channel on some Android devices.
- The bitrates cannot reach the target values on some Android devices when a user frequently joins and leaves the communication channel with different video profiles.
- Occasional failures to capture the video of the delegated host when the hosts and the audience members frequently change roles.
- Occasional failures to capture video or publish streams on some Android devices when a user frequently joins and leaves a communication channel with different video profiles.
- Occasional crashes when calling the
setCameraFocusPositionInPreviewmethod on some devices.
- Occasional failures to enable the camera during communication on some Android devices.
- Occasional video freezes and stream publishing hangs on some Android devices after a user joins a communication or live broadcast channel.
- Occasional crashes when one of the two broadcasters mutes or disables the local audio while playing the background music.
- A user cannot join a communication channel after frequently changing the video encoder profiles.
- Occasional crashes on some devices when preloading the sound effects.
- Failure to render videos of lower resolutions on some Android devices.
- Occasionally, an Android client still interoperates in a communication channel when removed from Dashboard.
- Video resolution inconsistencies between the encoder and the decoder in the Live-broadcast profile.
- Failure to enable the hardware encoder on some Android devices.
- Occasional video freezes in the Communication or Live-broadcast profile.
- Occasional crashes when calling the
muteRemoteVideoStreammethod after joining the channel.
- Occasional video freezes on some Android devices when switching from the Communication profile to the Live-broadcast profile.
- Occasional crashes on some Android devices when frequently turning on and off the camera flash during a live broadcast.
- The host cannot receive the audio/video stream of the delegated host on some Android devices.
- Occasional crashes on some Android devices when setting the video encoder profile of an external video source during a live broadcast.
- Incorrect video orientation on some Android devices when setting the video profile of an external video source during a live broadcast.
- Occasionally on some Android devices, the video fallback option does not take effect under poor network conditions.
- Occasional crashes on some Android devices when a user frequently changes the token.
- Occasional failures to split the screen on some Android devices.
- The CDN audience on some Android devices cannot see the video of the host.
- Occasional video freezes when switching from multiple hosts to a single host.
- Occasional inter-operational failures between SIP devices and the SDK.
- Occasionally on Mi 8, the local video cannot be seen locally or remotely.
- Occasionally on some Android devices, users cannot see each other.
- Occasional echo issues when using a specific audio card.
- Occasional video delays on some Android devices.
- Occasional crashes on some Android devices when transmitting the video streams.
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.
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.
The following deprecated API methods are deleted and no longer supported from v2.3.0:
Backward Compatibility Issues
v2.2.3 is released on July 5, 2018.
Read This First
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.
- Occasional online statistics crashes.
- The broadcaster’s voice distorts occasionally on some Android devices.
- Occasional crashes during a live broadcast.
- Excessive increase in the memory usage when multiple delegated hosts broadcast in the channel.
- Receiving the
onLeaveChannelcallback long after a user has left the channel on some Android devices.
- Failing to report the uid and volume of the speaker in a channel.
- Unsteady voice volume of the broadcaster in a live broadcast.
- Occasional video freezes during a live broadcast.
- Occasional ANR (application no response) problem on some Android devices after a user turns off the camera to end a video session.
- Occasional video freeze after a view size change.
v2.2.2 is released on June 21, 2018.
- Fixed occasional online statistics crashes.
- Fixed occasional audio crashes on some Android devices.
- Fixed the issue that the broadcaster’s voice distorts occasionally on some Android devices.
- Fixed the issue of failing to report the uid and volume of the speaker in a channel.
- Fixed the issue of receiving the onLeaveChannel callback long after a user has left the channel on some Android devices.
- Fixed the issue of occasional video freeze after a view size change.
- Fixed the occasional ANR (application no response) problem on some Android devices after the user turns off the camera to end a video session.
v2.2.1 is released on May 30, 2018.
- Occasional crashes during gaming on some Android devices.
- The soundtrack pointer cannot be retrieved on some Android devices.
- Occasional crashes on some Android devices.
- The audio volume on some Android devices cannot be adjusted after a headset is plugged in.
v2.2.0 is released on May 4, 2018.
1. Play the audio effect in the channel
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.
2. Deploy the proxy at the server
We provide a proxy package for enterprise users with corporate firewalls to deploy before accessing our services. See Deploying the Enterprise Proxy.
3. Get the remote video state
remoteVideoStateChangedOfUid method to get the state of the remote video stream.
4. Add watermarks on the broadcasting video
Adds the watermark function for users to add a PNG file to the local or CDN broadcast as a watermark. Adds the
clearVideoWatermarks methods to add and delete watermarks in a local live-broadcast. Adds the
watermark parameter in the
LiveTranscording interface to add watermarks in CDN broadcasts.
1. Audio volume indication
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.
2. Network quality detection during a session
To meet the customers’ need for real-time network quality detection in the channel, the
onNetworkQuality method improves its data accuracy.
3. Last mile network quality detection before joining a channel
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.
4. Audio quality enhancement
Improves the audio quality in scenarios that involve music playback.
- Occasional screen display abnormalities when a large number of audience members join as the host in a live-broadcast channel.
- Fixes occasional CDN streaming abnormalities when some app switches to run in the background during a live broadcast.
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-broadcast 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.
Improves the performance of screen sharing by shortening the time interval between which users switch from screen sharing to the normal Communication or Live-broadcast profile.
v2.1.2 is released on April 2, 2018.
If you upgrade the SDK to v2.1.2 from a previous version, the live-broadcast video quality is better than the communication video quality in the same resolutions, resulting in the live broadcasts using more bandwidth.
setVideoProfile method to enable users to manually set the resolution, frame rate, and bitrate of the video.
Video freeze in DTX + AAC mode.
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 is released on March 7, 2018.
1. Voice Optimization
Adds a scenario for the game chat room to reduce the bandwidth and cancel the noise with the
2. Enhance the audio effect input from the built-in microphone
In an interactive broadcast scenario, the host can enhance the local audio effects from the built-in microphone with the
setLocalVoiceReverb methods by implementing the voice equalization and reverberation effects.
3. Online statistics query
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:
- Voice or video calls: See Online Statistics Query API.
- Interactive broadcasts: See Online Statistics Query API.
4. 17-way video
Adds the support of 17-way video in interactive broadcasts, see:
5. Video source customization
Supports the default video-capturing features provided by the camera and the customized video source.
6. Renderer customization
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.
7. Injecting an external video stream
Adds the function of injecting an external video stream to an ongoing live broadcast.
8. Camera focus change
onCameraFocusAreaChanged callback to report to the app when the camera focus area changes.
|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).|
|Hardware Encoder||Enables the H.264 hardware encoder on the Qualcomm, MTK, HiSilicon, and Orion chips.|
|Hardware Encoder||Improves the bitrate control for the hardware encoder.|
|Billing Optimization||Small video resolutions are charged according to the voice-only mode. For example, 16 × 16.|
- Occasional playback noise on specific devices.
- Occasional crackling voice playback on specific devices.
- Occasional crashes.
v2.0.2 is released on December 15, 2017, and fixes occasional audio routing issues.
v2.0 and Earlier
v2.0 is released on December 6, 2017.
enableDualStreamModemethods in the Communication profile to support dual streams.
Adds the camera management function in the Communication and Live-broadcast profiles by adding the following API methods:
Checks whether the device supports camera zoom.
Checks whether the device supports camera flash.
Checks whether the device supports camera manual focus.
Checks whether the device supports camera auto-face focus.
Sets the camera zoom ratio.
Gets the maximum zoom ratio of the camera.
Sets the position for manual focus and activates focusing.
Sets the device to turn on the camera flash.
Sets the device to start auto-face focusing.
Supports external audio sources in the Communication and Live-broadcast profiles by adding the following API methods:
Enables the external audio source function.
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-broadcast profiles. Contact email@example.com to enable this function, if required.
- Supports the following Android emulators: NOX, Lightning, and Xiaoyao.
Optimizes the hardware encoder by supporting encoding resolutions as low as 64 x 64.
- Audio routing and Bluetooth issues.
- Optimizes the volume balance control.
v1.14 is released on October 20, 2017.
- Adds the
setAudioProfilemethod to set the audio parameters and scenarios
- Adds the
setLocalVoicePitchmethod to set the local voice pitch
- Live Broadcast: Adds the
setInEarMonitoringVolumemethod to adjust the volume of the in-ear monitor
- Optimizes the audio at high bitrates.
- Live Broadcast: 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).
- Adds the ability to reduce the bandwidth.
- Before v1.14: If you muted the audio of a specific user, the network still sent the stream.
- Starting from v1.14: If you mute the audio of a specific user, the network will not send the stream of the user to reduce the bandwidth.
- Accurate control over the bitrate:
- Before v1.14: Inaccurate control over the bitrate often caused huge fluctuations, leading to network congestion and higher rates of packet and frame loss. This affected the accuracy of the bandwidth estimation module, especially under poor network conditions.
- Starting from v1.14: Accurate control over the bitrate prevents huge fluctuations avoiding network congestion and shortening the transmission latency.
Camera related issues on Android devices.
v1.13.1 is released on September 28, 2017, and optimizes the echo issue under certain circumstances.
v1.13 is released on September 4, 2017.
- Adds the function to dynamically enable and disable acquiring the sound card in a live broadcast.
- Adds the function to disable the audio playback.
- Supports the profile configuration for stream-pushing on the client side.
- Adds the
onClientRoleChangedcallback to report to the app on a user role switch between the host and the audience in a live broadcast.
- Supports the push-stream failure callback on the server side.
The video profile is controllable by the software codec.
Occasional crashes on some devices
v1.12 is released on July 25, 2017.
- Adds the
aes-128-ecbencryption mode in the
- Adds the
qualityparameter in the
startAudioRecordingmethod to set the recording audio quality.
- Android: Bluetooth issues related to audio routing.
- Android/iOS/Mac/Windows: Occasional crashes.