This page provides the release notes for the Agora Flutter SDK.
As of v4.0.5 (Native v3.4.5), the SDK supports iOS 15. For the SDK versions between v3.2.1 and v4.0.1 (Native v3.4.2) inclusive, crashes occur on iOS 15. To fix this issue, upgrade the SDK to v4.0.5 or later.
v5.3.0 was released on July 20, 2022.
v5.3.0 adapts to the Agora RTC Native SDK v3.7.0.2. For new features and improvements, see the release notes for each platform from v3.6.2 to v3.7.0.2:
To support screen sharing on mobile platforms, v5.3.0 provides the startScreenCaptureMobile
and updateScreenCaptureParametersMobile
methods, which function the same way as the startScreenCapture
and updateScreenCaptureParameters
methods on Android and iOS.
This release fixed the following issues:
onRemoteAudioStateChanged(2,6)
callback after disconnecting from and reconnecting to a network even though the remote user had not changed the audio state.localAudioStateChange
callback after a user denied microphone permission was inaccurate. (iOS)playEffect
or startAudioMixing
to play 8-bit PCM-encoded audio in the WAV format. (iOS)gatewayRtt
reported by the onRtcStats
callback was inaccurate when the network latency was too high or the router did not respond to ICMP packets.onNetworkQuality
callback was inaccurate for the user who was sharing a screen.deviceName
returned by the enumerateDevices
method was empty when calling enumerateDevices
to enumerate video capture devices in the system. (macOS)NSInternalInconsistencyException
error occasionally occurred in event handling. (iOS)v5.2.0 was released on May 24, 2022.
This version adds support for Flutter 3.
This version fixed the null
return value issue when you call the following methods:
isCameraAutoFocusFaceModeSupported
isCameraExposurePositionSupported
isCameraFocusSupported
isCameraTorchSupported
v5.1.1 was released on May 10, 2022.
This version fixed the following issues:
v5.1.0 was released on April 15, 2022.
v5.1.0 has the following compatibility changes:
RtcEngine.setDefaultAudioRoutetoSpeakerphone
is renamed as RtcEngine.setDefaultAudioRouteToSpeakerphone
.LiveTranscoding.watermark
member variable changes from AgoraImage?
to List<AgoraImage>?
.LiveTranscoding.backgroundImage
member variable changes from AgoraImage?
to List<AgoraImage>?
.LiveTranscoding.backgroundColor
member variable changes from Color
to int
.VideoEncoderConfiguration.degradationPrefer
member variable is renamed as degradationPreference
.VirtualBackgroundSource.color
member variable changes from Color
to int
.v5.1.0 adapts to the Agora RTC Native SDK v3.6.2. For new features and improvements, see the release notes for each platform from 3.5.2 to 3.6.2:
startAudioMixing
does not support playing audio files in the assets
folder of a Flutter project.
v5.0.0 was released on February 22, 2022.
As of v5.0.0, the Agora RTC Flutter SDK supports Flutter 2.x and can run on Android, iOS, macOS, and Windows platforms.
v5.0.0 optimizes the underlying architecture and makes the code neater, you can modify your business logic code by referring to the following compatibility changes:
Compatibility changes in the RtcEngine
class:
getErrorDescription
is no longer a static
method.getSdkVersion
is no longer a static
method.metadata
in the sendMetadata
method is changed from String
to Uint8List
.metadata
in the sendStreamMessage
method is changed from String
to Uint8List
.volume
in the setEffectsVolume
method is changed from double
to int
.preset
in the setLocalVoiceReverbPreset
method is renamed to reverbPreset
.volume
in the setVolumeOfEffect
method is changed from double
to int
.enabled
in the enableFaceDetection
method is renamed to enable
.enabled
in the enableDeepLearningDenoise
method is renamed to enable
.enableRemoteSuperResolution
method, uid
is renamed to userId
and enabled
is renamed to enable
.getAudioFileInfo
method is changed from void
to int
.gain
in the playEffect
method is changed from double
to int
.enabled
in the setEnableSpeakerphone
method is renamed to defaultToSpeaker
.uid
in the setRemoteVideoStreamType
method is renamed to userId
.Compatibility changes in the RtcChannel
class:
metadata
in the sendMetadata
method is changed from String
to Uint8List
.metadata
in the sendStreamMessage
method is changed from String
to Uint8List
.uid
in the muteRemoteAudioStream
method is renamed to userId
.uid
in the muteRemoteVideoStream
method is renamed to userId
.uid
in the setRemoteVideoStreamType
method is renamed to userId
.enableRemoteSuperResolution
method, uid
is renamed to userId
and enabled
is renamed to enable
.muted
in the muteLocalAudioStream
method is renamed to mute
.muted
in themuteLocalVideoStream
method is renamed to mute
.context
in the createWithContext
method is renamed to config
.Compatibility changes related to View
:
channelId
in the RtcSurfaceView
class is changed from optional to required.channelId
in the RtcTextureView
class is changed from optional to required.Changes in error codes returned when the request to join a channel is rejected: To more accurately report the reason for the failure to join a channel, as of this release, the SDK returns the error code -17
instead of -5
in the following situations:
RtcEngine
channel calls the joining channel method of the RtcEngine
class with a valid channel name.RtcChannel
channel calls the joining channel method of this RtcChannel
object.v5.0.0 adapts to the Agora RTC Native SDK v3.5.2. For new features and improvements, see the release notes for each platform from 3.5.0.4 to 3.5.2:
v3.5.0.3 was released on September 15, 2021.
Changes to audio route behavior (Android only)
To improve user experience, this release improves the following SDK behavior:
When the SDK uses the media volume, the audio route is affected as follows:
If multiple external audio devices are connected, when the user removes the current playback device, the audio route is affected as follows:
setEnableSpeakerphone
> setDefaultAudioRouteToSpeakerphone
> the default audio route of the SDK.See Set the Audio Route for Android platform.
Virtual background (beta)
This release adds the enableVirtualBackground
method, with which you can enable and set a virtual background for users as either a solid color or an image in PNG or JPG format. You can use the VirtualBackgroundSourceEnabled
callback to learn whether the virtual background is successfully enabled or the reason for an error.
1. Video quality
The following improvements have been made to the quality of captured and received video in this release:
setCameraAutoFocusFaceModeEnabled(false)
. (iOS only)2. Additional improvements
This release also improves the following:
This release fixed the following issues:
Android and iOS
enableLoopbackRecording
, occasionally the local user heard an echo of their own audio. muteLocalAudioStream(true)
to stop publishing a local audio stream, the local user could hear remote users when the local user joined a channel for the first time. After leaving the channel and joining another channel, occasionally the local user could not hear remote users.rxQuality
) of remote users reported by the SDK was not accurate.Android only
iOS only
memoryTotalUsageRatio
reported by the RtcStats
callback was not accurate.orientationMode
was set as FixedPortrait
, the width and height of the video resolution was reversed, which caused the human face in video to be scaled up.Added
Modified
v4.0.6 was released on July 23, 2021.
To improve the accuracy of face detection results, as of this release, the SDK triggers the facePositionChanged
callback immediately after detecting the disappearance of the human face.
This release fixed the following issues:
v4.0.5 was released on July 15, 2021.
1. Compatibility with iOS 15 (iOS only)
As of v4.0.5, the SDK supports iOS 15. For the SDK versions between v3.2.1 and v4.0.1 inclusive, crashes occur on iOS 15. To fix this issue, upgrade the SDK to v4.0.5 or later.
2. API incompatibility changes
This release makes the following incompatibility changes to APIs:
Deprecates the RtcEngineConfig
class and the createWithConfig
method, and replace them with the RtcEngineContext
class and the createWithContext
method. Compared with RtcEngineConfig
, the data type of the areaCode
property in RtcEngineContext
changes from AreaCode
to List<AreaCode>
, which supports setting multiple regions for connection.
Renames the the following properties in the RtcStats
interface:
totalDuration
to duration
users
to userCount
The data type and definition of the properties remain unchanged.
Strictly distinguishes the mandatory and non-mandatory parameters in the constructors of all classes. For details, see Incompatible changes of class constructors.
If you upgrade the SDK to v4.0.5 or later, to avoid affecting your service, ensure that you modify the implementation of these APIs.
3. Support for GCM2 encryption
To further improve the security during real-time audio and video transmission process, this release adds the following:
AES128GCM2
and AES256GCM2
encryption modes in EncryptionMode
. The new GCM encryption modes use a more secure KDF (Key Derivation Function) and support setting the key and salt.encryptionKdfSalt
member in EncryptionConfig
to add the salt for the AES128GCM2
and AES256GCM2
encryption modes.This release also changes the default encryption mode from AES128XTS
to AES128GCM2
. If you use the default encryption mode in earlier versions, after upgrading the SDK to v4.0.5, ensure that you call enableEncryption
and set EncryptionMode
to AES128XTS
.
4. Media stream publishing behavior changes
To flexibly control the publishing state in multiple channels, this release optimizes the RtcChannel
class as follows:
publish
and unpublish
methods, and adds muteLocalAudioStream
and muteLocalVideoStream
instead. You can set the publishing state of the audio stream and video stream separately.publishLocalAudio
and publishLocalVideo
members in ChannelMediaOptions
. You can set the publishing state when joining a channel.setClientRole(Broadcaster)
, the local user publishes audio and video streams by default.publishLocalAudio = false
serves the same function as muteLocalAudioStream(true)
.publishLocalVideo = false
serves the same function as muteLocalVideoStream(true)
.The above improvements bring the following changes in the RtcEngine
class:
muteLocalAudioStream
and muteLocalVideoStream
of RtcEngine
do not take effect for channels created by the RtcChannel
class, so you need to use the muteLocalAudioStream
and muteLocalVideoStream
of the RtcChannel
class instead.joinChannel
with the options
parameter, you can set the publishing state.joinChannel
with the options
parameter, muteLocalAudioStream
or muteLocalVideoStream
only takes effect when it is called after joinChannel
.If you upgrade the SDK to v4.0.5 or later, to avoid affecting your service, Agora recommends modifying the implementation of muteLocalAudioStream
, muteLocalVideoStream
, publish
, and unpublish
.
1. Media Push
To be more transparent to users about errors and events in Media Push, this release adds the following codes:
RtmpStreamingStateChanged
: Error code UnPublishOK (100)
, which reports that the streaming has been stopped normally. After you call removePublishStreamUrl
to stop streaming, the SDK returns this error code and state code Idle (0)
.RtmpStreamingEvent
: Event code UrlAlreadyInUse (2)
, which reports that the streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL.2. Music file state
When you call startAudioMixing
after pauseAudioMixing
, this release adds the AudioMixingStateChanged(Playing,StartedByUser)
state, which indicates the music file is stopped, before reporting AudioMixingStateChanged(Stopped,StoppedByUser)
.
3. Audio device errors
To convey the impact of a system call on the audio sampling, this release adds Interrupted (8)
in AudioLocalError
, which reports that the audio sampling is interrupted by a system call.
This release fixed the following issues:
startAudioMixing
to play an online music file, occasionally the SDK response time was too long and caused a freeze.startAudioMixing
to play an online music file, an ANR pop-up window occasionally appeared.Added
RtcEngineContext
classcreateWithContext
UnPublishOK (100)
in RtmpStreamingErrorCode
UrlAlreadyInUse (2)
in RtmpStreamingEvent
AES128GCM2 (7)
and AES256GCM2 (8)
in EncryptionMode
encryptionKdfSalt
in EncryptionConfig
muteLocalAudioStream
and muteLocalVideoStream
in RtcChannel
publishLocalAudio
and publishLocalVideo
in ChannelMediaOptions
Interrupted (8)
in AudioLocalError
Modified
This release renames the following properties in RtcStats
:
totalDuration
to duration
users
to userCount
Deprecated
createWithConfig
RtcEngineConfig
classpublish
and unpublish
in RtcChannel
To make the code more standardized and robust, as of v4.0.5, the Agora SDK strictly distinguishes mandatory and non-mandatory member properties of all classes and modifies the class constructors.
This section lists all the classes that have constructor changes in v4.0.5. If you upgrade the SDK to v4.0.5 or later, to avoid affecting your service, ensure that you modify the implementation of these classes.
The following properties in the VideoDimensions
class change from required to optional:
width
height
The constructor of the VideoDimensions
class changes as follows:
Earlier than v4.0.5
new VideoDimensions(640, 360);
As of v4.0.5
new VideoDimensions(width: 640, height: 360);
The following properties in the AgoraImage
class change from required to optional:
x
y
width
height
The constructor of the AgoraImage
class changes as follows:
Earlier than v4.0.5
new AgoraImage('url', 0, 0, 640, 360);
As of v4.0.5
new AgoraImage('url', x: 0, y: 0, width: 640, height: 360);
The properties in the TranscodingUser
class change from required to optional:
x
y
The constructor of the TranscodingUser
class changes as follows:
Earlier than v4.0.5
new TranscodingUser(0, 0, 0, width: 640, height: 360, ...);
As of v4.0.5
new TranscodingUser(0, x: 0, y: 0, width: 640, height: 360, ...);
The channelName
property in the ChannelMediaInfo
class changes from optional to required.
The constructor of the ChannelMediaInfo
class changes as follows:
Earlier than v4.0.5
new ChannelMediaInfo(0, channelName: 'channelName', token: 'token');
As of v4.0.5
new ChannelMediaInfo('channelName', 0, token: 'token');
The following properties in the Rectangle
class change form required to optional:
x
y
width
height
The constructor of the Rectangle
class changes as follows:
Earlier than v4.0.5
new Rectangle(0, 0, 640, 360);
As of v4.0.5
new Rectangle(x: 0, y: 0, width: 640, height: 360);
The following properties in the WatermarkOptions
class change from required to optional:
positionInLandscapeMode
positionInPortraitMode
The constructor of the WatermarkOptions
class changes as follows:
Earlier than v4.0.5
new WatermarkOptions(Rectangle, Rectangle, visibleInPreview: true);
As of v4.0.5
new WatermarkOptions(visibleInPreview: true, positionInLandscapeMode: Rectangle, positionInPortraitMode: Rectangle);
The following properties in the CameraCapturerConfiguration
class change from required to optional:
preference
cameraDirection
The constructor of the CameraCapturerConfiguration
class changes as follows:
Earlier than v4.0.5
new CameraCapturerConfiguration(CameraCaptureOutputPreference, CameraDirection, captureWidth: 640, captureHeight: 360);
As of v4.0.5
new CameraCapturerConfiguration(preference: CameraCaptureOutputPreference, captureWidth: 640, captureHeight: 360, cameraDirection: CameraDirection);
The following properties in the ChannelMediaOptions
class change from required to optional:
autoSubscribeAudio
autoSubscribeVideo
The constructor of the ChannelMediaOptions
class changes as follows:
Earlier than v4.0.5
new ChannelMediaOptions(true, true);
As of v4.0.5
new ChannelMediaOptions(autoSubscribeAudio: true, autoSubscribeVideo: true);
The following properties in the EncryptionConfig
class change from required to optional:
encryptionMode
encryptionKey
The constructor of the EncryptionConfig
class changes as follows:
Earlier than v4.0.5
new EncryptionConfig(EncryptionMode, 'encryptionKey');
As of v4.0.5
new EncryptionConfig(encryptionMode: EncryptionMode, encryptionKey: 'encryptionKey');
All properties in RtcStats
cannot be null, thus saving you from extra code logic to determine whether the properties are null.
The audienceLatencyLevel
property in the ClientRoleOptions
class changes from required to optional.
The constructor of the ClientRoleOptions
class changes as follows:
Earlier than v4.0.5
new ClientRoleOptions(AudienceLatencyLevelType);
As of v4.0.5
new ClientRoleOptions(audienceLatencyLevel: AudienceLatencyLevelType);
The following properties in the DataStreamConfig
class change from optional to required:
syncWithAudio
ordered
The constructor of the DataStreamConfig
class changes as follows:
Earlier than v4.0.5
new DataStreamConfig(syncWithAudio: true, ordered: true);
As of v4.0.5
new DataStreamConfig(true, true);
v4.0.1 was released on May 25, 2021.
Integration changes
Since this version, Agora RTC Flutter SDK supports null safety. Because null safety is not backward compatible, you must ensure that the dart version is 2.12 or higher. See Flutter documentation for more information.
Since this version, Agora RTC Flutter SDK supports Flutter 2.x (Android and iOS only.)
Because JCenter is about to retire, Agora publishes the RTC Android SDK package to JitPack instead of JCenter. Therefore, to build an Android application, add the following line in the /android/build.gradle
file of your project:
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
'https://www.jitpack.io'
with 'https://jitpack.io'
.To reduce the app size after integrating the SDK, this release packages some features as extension libraries (with the Extension
suffix). For details, see Extension libraries. If you do not need to use the related features, you can remove the corresponding extension libraries and recompile the project.
Behavior changes
To monitor the reason why the playback state of a music file changes, this release modifies the AudioMixingStateChanged
callback as follows:
errorCode
parameter with the reason
parameter.AudioMixingErrorCode
and replace it with AudioMixingReason
. Using AudioMixingReason
, you can get the reason for the change of the playback state, such as start, pause, stop or fail.AudioMixingStateCode
. For example, as of this release, when looping music, the SDK triggers the Playing
state when each loop is completed or starts.If you upgrade the SDK to v4.0.1 or later, to avoid affecting your service, Agora recommends that you modify the implementation of AudioMixingStateChanged
.
1. Virtual metronome
To meet the needs of online teaching scenarios that would benefit from a metronome, this release adds the following methods:
startRhythmPlayer
: Enables the virtual metronome.stopRhythmPlayer
: Disables the virtual metronome.configRhythmPlayer
: Reconfigures the virtual metronome after it is enabled.2. Playback progress of audio effect files
To control the playback progress of audio effect files, this release adds the following methods or parameters:
setEffectPosition
: Sets the playback position after starting playback of an audio effect file.getEffectDuration
: Gets the duration of a local audio effect file.getEffectCurrentPosition
: Gets current playback progress of an audio effect file.startPos
in playEffect
: Sets the playback position when starting playback of an audio effect file.1. Local file path (on Android only)
To meet the requirements of Google Play Store, this release supports accessing a local file through URIs. When you call startAudioMixing
, startAudioRecordingWithConfig
, getAudioMixingDuration
, preloadEffect
, playEffect
, getEffectDuration
, or addVideoWatermark
and need to access a local file, Agora recommends the following steps:
Uri.toString
to convert the URI to a string.filePath
or watermarkUrl
parameter.2. Video encoding
The Agora SDK allows you to use DegradationPreference
to set the degradation preference of local video encoding under limited bandwidth, for example, reducing the video frame rate while maintaining video quality, or reducing the video quality while maintaining the video frame rate. As of this release, DegradationPreference
can be set as Balanced
, which reduces the video frame rate and video quality simultaneously to strike a balance between smoothness and video quality. Balanced
is suitable for scenarios where both smoothness and video quality are a priority, such as one-to-one calls, one-to-one online teaching, and multi-user online meetings.
3. Playback progress of music files
To control the playback progress of music files, this release is optimized as follows:
startPos
parameter in startAudioMixing
, which allows you to set the playback position when starting playback of a music file.filePath
parameter in getAudioMixingDuration
, which allows you to get the duration of a local music file before playing it.4. Audio recording
To set the recording configuration during audio recording, this release adds the startAudioRecordingWithConfig
method and deprecates the startAudioRecording
method. The config
parameter of startAudioRecordingWithConfig
allows you to set the audio recording quality, content, sample rate, and storage path of the recording file.
This release also adds a new error code: AlreadyInRecording(160)
. If you call startAudioRecordingWithConfig
again before the current recording ends, the SDK reports this error code.
5. Media device errors
To help users better understand the cause of local video errors, this release adds a new error code to LocalVideoStreamError
: DeviceNotFound(8)
, which indicates that the SDK cannot find the local video-capture device.
This release fixed the following issues:
AudioVolumeIndication
callback returned incorrect volume information after you called enableSoundPositionIndication(true)
.destroy
or the get
method such as getCallId
or getSdkVersion
after calling setupLocalVideo
or setupRemoteVideo
. (On iOS only)Added
startRhythmPlayer
stopRhythmPlayer
configRhythmPlayer
startAudioRecordingWithConfig
getEffectDuration
setEffectPosition
getEffectCurrentPosition
filePath
in getAudioMixingDuration
startPos
in playEffect
startPos
in startAudioMixing
DeviceNotFound(8)
in LocalVideoStreamError
Error code
: AlreadyInRecording(160)
Modified
Deprecated
startAudioRecording
AudioMixingErrorCode
v3.3.1 was released on March 12, 2021.
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.1. Channel media options
To help developers control media subscription more flexibly, this release adds the options
parameter to joinChannel
and switchChannel
methods to set whether users subscribe to all remote audio or video 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.
4. Singing beautifier
To beautify the voice and add reverberation effects in a singing scenario, this release adds the setVoiceBeautifierParameters
method and adds the SingingBeautifier
constant to VoiceBeautifierPreset
.
You can call setVoiceBeautifierPreset(SingingBeautifier)
to beautify the male voice and add the reverberation effect for a voice in a small room. For more settings, you can call setVoiceBeautifierParameters(SingingBeautifier, 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 createWithConfig
method and adds the logConfig
property to the log
parameter. You can use logConfig
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.1, Agora does not recommend using the setLogFile
, setLogFileSize
, or setLogFilter
methods to set the log files.
6. 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 Manual(3)
and set the width and height of the captured video image.captureBrightnessLevel
in the localVideoStats
callback.localVideoStateChanged(Failed, CaptureFailure)
callback.localVideoStateChanged(Capturing, CaptureFailure)
callback.(iOS only) To improve the user experience, this release adds the following reasons for local video capture errors in the localVideoStateChanged
callback:
CaptureInBackGround(6)
: The application is running in the background.CaptureMultipleForegroundApps(7)
: The application is running in Slide Over, Split View, or Picture in Picture mode.7. Data streams
To support scenarios such as lyrics synchronization and courseware synchronization, this release deprecates the previous createDataStream
method and replaces it with createDataStreamWithConfig
. 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.
8. Voice Conversion
This release adds the setVoiceConversionPreset
method to set a voice conversion effect (to disguise a user's voice). You can use this method to make a male-sounding voice sound steady or deep, and a female-sounding voice sound gender-neutral or sweet.
1. AES-GCM encryption mode
For scenarios requiring high security, to guarantee the confidentiality, integrity, and authenticity of data, and to improve the computational efficiency of data encryption, this release adds the following enumerators in EncryptionMode
:
AES128GCM
: 128-bit AES encryption, GCM mode.AES256GCM
: 256-bit AES encryption, GCM mode.2. Remote audio statistics
To monitor quality of experience (QoE) of the local user when receiving a remote audio stream, this release adds:
mosValue
to remoteAudioStats
, which reports the quality of the remote audio stream as determined by the Agora real-time audio MOS (Mean Opinion Score) measurement system.qoeQuality
and qualityChangedReason
to remoteAudioStats
, which report QoE of the local user and the reason for poor QoE, respectively.Android
audioVolumeIndication
callback.iOS
audioVolumeIndication
callback.enableLocalVideo(false)
while the application window was switching to Slide Over, Split View, or Picture in Picture mode.This release adds the following APIs:
Added
createWithConfig
setVoiceConversionPreset
AES128GCM
and AES256GCM
in EncryptionMode
mosValue
in RemoteAudioStats
setVoiceBeautifierParameters
SingingBeautifier
in the VoiceBeautifierPreset
constantenableDeepLearningDenoise
options
in joinChannel
options
in switchChannel
createDataStreamWithConfig
qoeQuality
and qualityChangedReason
in RemoteAudioStats
setCloudProxy
captureBrightnessLevel
property in the LocalVideoStats
captureWidth
and captureHeight
properties in the CameraCapturerConfiguration
classManual(3)
in the CameraCaptureOutputPreference
constantCaptureInBackGround(6)
and CaptureMultipleForegroundApps(7)
in the LocalVideoStreamError
constantModuleNotFound(157)
Deprecated
createWithAreaCode
setDefaultMuteAllRemoteVideoStreams
setDefaultMuteAllRemoteAudioStreams
setLogFile
setLogFileSize
setLogFilter
createDataStream
v3.2.1 was released on December 23, 2020.
1. Cloud proxy
This release optimizes the Agora cloud proxy architecture. If you are already using cloud proxy, to avoid compatibility issues between the new SDK and the old cloud proxy, please contact support@agora.io before upgrading the SDK. See Cloud Proxy.
2. Security and compliance
Agora has passed ISO 27001, ISO 27017, and ISO 27018 international certifications, providing safe and reliable real-time interactive cloud services for users worldwide. See ISO Certificates.
This release supports transport layer encryption by adding TLS (Transport Layer Security) and UDP (User Datagram Protocol) encryption methods.
Interactive live streaming standard
This release adds options
in 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 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.
Android
enableEncryption
, the SDK did not trigger the firstLocalVideoFramePublished
callback.Client.on(disable-local-video)
or Client.on(mute-video)
callback.iOS
stopChannelMediaRelay
method did not take effect.AdmStartRecording(1012)
error.enableEncryption
, the SDK did not trigger the firstLocalVideoFramePublished
callback.Client.on(disable-local-video)
or Client.on(mute-video)
callback.Added
options
in setClientRole
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
MEETING(8)
in AudioScenario
Deprecated
setLocalVoiceChanger
setLocalVoiceReverbPreset
v3.1.2 was released on September 30th, 2020.
Functions and features
async/await
.Related documentation
See the following documentation to quickly integrate the SDK and implement real-time voice and video communication in your project.
Agora also provides an open-source Agora Flutter Quickstart on GitHub.
gatewayRtt
parameter in the RtcStats
callback is disabled by default. Do not use gatewayRtt
to obtain the round-trip delay between the client and the local router. See the FAQ for details.