Agora C++ API Reference for All Platforms

Loading...
Searching...
No Matches
CHANGES

Note: Please update this file for every Agora API change you do. Simply fill in your updates in the Working section below.

# Agora High Level APIs (Working)

# API (yyyy-mm-dd)

Purpose of this change

## API file name #1

Add: Short description

- Foo()
- Bar()

Modified: Short description

- Changes Foo() to Foo1()
- Changes Bar() to Bar1()

Deleted: Short description

- Deleted Foo()

# API(2025-08-13)

## IAgoraRtcEngine.h

Add:

- onLocalVideoEvent(VIDEO_SOURCE_TYPE source, LOCAL_VIDEO_EVENT_TYPE event)

# API(2025-07-02)

## IAgoraRtcEngine.h

Modifed: Refine doc for async-destroy

# API(2025-06-26)

## IAgoraRtcEngine.h

Add: add comment for multipath

# API(2025-06-24)

## IAgoraRtcEngine.h

Modifed: Mark the DirectCdnStreaming(RSK) interface as deprecated

- enum DIRECT_CDN_STREAMING_REASON
- enum DIRECT_CDN_STREAMING_STATE

# API (2025-06-13)

## IAgoraRtcEngine.h

Modify:

- add sourceType for IAgoraRtcEngineEx#onLocalVideoStats

API (2025-06-13)

## IAgoraRtcEngine.h / IAgoraRtcEngineEx.h

Deleted:

- Delete enableWirelessAccelerate, onWlAccStats, onWlAccMessage

# API (2025-05-14)

## IAgoraRtcEngine.h / IAgoraRtcEngineEx.h

Deleted:

- Delete onDownlinkNetworkInfoUpdated

# API (2025-05-14)

## IAgoraRtcEngine.h / IAgoraRtcEngineEx.h

Deleted:

- Delete "@technical preview" for setSimulcastConfig and setSimulcastConfigEx

# API (2025-05-15)

IAgoraRtcEngine.h IAgoraRtcEngineEx.h

add comment

# API (2025-05-12)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.hModified

Add:

- virtual void onMultipathStats(const MultipathStats& stats)
- Optional<bool> enableMultipath;
- Optional<MultipathMode> uplinkMultipathMode;
- Optional<MultipathMode> downlinkMultipathMode;
- Optional<MultipathType> preferMultipathType;

# API (2025-04-07)

## IAgoraRtcEngine.h

Add

- createVideoEffectObject(const char* bundlePath, agora::media::MEDIA_SOURCE_TYPE sourceType)
- destroyVideoEffectObject(agora_refptr<IVideoEffectObject> videoEffectObject)
- IVideoEffectObject::addOrUpdateVideoEffect(uint32_t nodeId, const char* templateName)
- IVideoEffectObject::removeVideoEffect(uint32_t nodeId)
- IVideoEffectObject::performVideoEffectAction(uint32_t nodeId, VIDEO_EFFECT_ACTION actionId)
- IVideoEffectObject::setVideoEffectFloatParam(const char* option, const char* key, float param)
- IVideoEffectObject::setVideoEffectIntParam(const char* option, const char* key, int param)
- IVideoEffectObject::setVideoEffectBoolParam(const char* option, const char* key, bool param)
- IVideoEffectObject::getVideoEffectFloatParam(const char* option, const char* key)
- IVideoEffectObject::getVideoEffectIntParam(const char* option, const char* key)
- IVideoEffectObject::getVideoEffectBoolParam(const char* option, const char* key)
- enum VIDEO_EFFECT_NODE_ID
- enum VIDEO_EFFECT_ACTION

# API (2025-03-22)

## IAgoraRtcEngine.h

Modify:

- Mark the DirectCdnStreaming(RSK) interface as deprecated

# API (2025-03-10)

Perfect watermark api.

## IAgoraRtcEngine.h

Add:

- addVideoWatermark(const WatermarkConfig& configs)
- removeVideoWatermark(const char* id)

Deprecated:

- int addVideoWatermark(const char* watermarkUrl, const WatermarkOptions& options)

## IAgoraRtcEngineEx.h

Add:

- addVideoWatermarkEx(const WatermarkConfig& config, const RtcConnection& connection)
- removeVideoWatermarkEx(const char* id, const RtcConnection& connection)

Deprecated:

- addVideoWatermarkEx(const char* watermarkUrl, const WatermarkOptions& options, const RtcConnection& connection)

# API (2025-02-24)

## IAgoraRtcEngine.h

Add:

- using RtcEngineReleaseCallback = void(*)() Modify:
- void release(RtcEngineReleaseCallback callback = nullptr)

# API (2024-09-03)

## IAgoraRtcEngine.h

Modify:

- ScreenCaptureSourceInfo::sourceId

# API (2024-08-26)

Add enum APP_TYPE

## rtc_engine_i.h

Add:

- APP_TYPE_UNREAL_BP = 15

# API (2024-7-31)

## IAgoraRtcEngine.h

Add:

- Add field frozenCntByCustom and frozenTimeByCustom for struct RemoteAudioStats

# API (2024-06-12)

## IAgoraMediaEngine.h

Add:

- int setExternalRemoteEglContext(void* eglContext)

# API (2024-08-09)

## IAgoraRtcEngine.h,AgoraRtcEngineKit.h,RtcEngine.java,RtcEngineImpl.java

Add:

- int setLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps)
- int setRemoteRenderTargetFps(int targetFps)

# API (2024-07-24)

## IAgoraRtcEngine.h

Modify:

- Refine the explanation of int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type)
- fix mistakes in API comments of clear_vision plugin

# API (2024-07-09)

## IAgoraRtcEngine.h

Modify:

- add -8(ERR_INVALID_STATE) as possible return value of int setClientRole(CLIENT_ROLE_TYPE role, const ClientRoleOptions& options)
- add -8(ERR_INVALID_STATE) as possible return value of int setChannelProfile(CHANNEL_PROFILE_TYPE profile)

# API (2024-07-08)

## IAgoraRtcEngine.h

Add:

- Add AUDIO_MIXING_REASON_TYPE::AUDIO_MIXING_REASON_RESUMED_BY_USER(726)

# API (2024-07-08)

## IAgoraRtcEngine.h

Add:

- MEDIA_DEVICE_STATE_PLUGGED_IN

# API (2024-06-20)

## IAgoraRtcEngine.h / IAgoraRtcEngineEx.h

Remove:

- setDefaultMuteAllRemoteVideoStreams
- setDefaultMuteAllRemoteAudioStreams
- onLocalVideoStateChanged(const RtcConnection& connection, ...)

# API (2024-04-29)

Add apis for FaceShape Beauty

## IAgoraRtcEngine.h,AgoraRtcEngineKit.h,RtcEngine.java,RtcEngineImpl.java

Add:

- int setFaceShapeBeautyOptions(bool enabled, const FaceShapeBeautyOptions& options);
- int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options);
- int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options);
- int getFaceShapeAreaOptions(int shapeArea, FaceShapeAreaOptions& options);

# API (2024-5-09)

## IAgoraRtcEngine.h

Modify:

- delete startEchoTest()
- delete startEchoTest(int intervalInSeconds)
- delete setEncryptionMode(const char* encryptionMode)
- delete setEncryptionSecret(const char* secret)

# API (2024-05-11)

Add apis for Filter Effect

## IAgoraRtcEngine.h,AgoraRtcEngineKit.h,RtcEngine.java,RtcEngineImpl.java

Add:

- int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options);

# API (2024-02-24)

## IAgoraRtcEngine.h

Add:

- Add simulcastDimensions to LocalVideoStats

# API(2024-04-08)

## IAgoraRtcEngine.h

Modified: int setCameraCapturerConfiguration(const CameraCapturerConfiguration& config)

# API (2024-04-02)

Audio metadata

## NGIAgoraLocalUser.h

Modified:

- Add "@technical preview" for audio metadata api

# API (2024-03-19)

## IAgoraRtcEngine.h

Add: Metadata

- add channelId callback for Metadata

# API (2024-03-08)

## IAgoraRtcEngine.h

Modified:

- mark setLocalRenderMode(media::base::RENDER_MODE_TYPE renderMode) as Deprecated
- mark setLocalVideoMirrorMode(VIDEO_MIRROR_MODE_TYPE mirrorMode) as Deprecated

# API(2024-2-28)

## IAgoraRtcEngine.h

Modified: playEffect

- modify comments

# API (2024-02-20)

## IAgoraRtcEngine.h

Add: virtual int setPlaybackAudioFrameBeforeMixingParameters(int sampleRate, int channel, int samplesPerCall) = 0

# API (2024-02-26)

## IAgoraRtcEngine.h

Add:

- needExtensionContext
- onExtensionEventWithContext
- onExtensionStartedWithContext
- onExtensionStoppedWithContext
- onExtensionErrorWithContext

# API (2024-02-27)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add

- add interface information

# API (2024-02-23)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add

- virtual int sendAudioMetadata(const char* metadata, size_t length) = 0;
- virtual void onAudioMetadataReceived(uid_t uid, const char* metadata, size_t length)

# API (2024-02-23)

## IAgoraMediaEngine.h

Add:

- add class registerFaceInfoObserver

## IAgoraRtcEngine.h

ADD:

- add publishLipSyncTrack

# API (2024-02-21)

IAgoraRtcEngine.h Add:

- enum STREAM_FALLBACK_OPTIONS add STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_1 ~ STREAM_FALLBACK_OPTION_VIDEO_STREAM_LAYER_6

# API(2024-2-21)

IAgoraRtcEngineEx.h

## RtcEngineEx.java

Add

- IRtcEngineEx::enableEncryptionEx:(bool)enabled encryptionConfig:(AgoraEncryptionConfig *_Nonnull)config connection:(AgoraRtcConnection* _Nonnull)connection NS_SWIFT_NAME(enableEncryptionEx(_:encryptionConfig:connection:))
- public abstract int enableEncryptionEx(boolean enabled, EncryptionConfig config, RtcConnection connection)

# API (2024-02-19)

## IAgoraRtcEngine.h

Add:

- RemoteAudioStats.e2eDelay

# API(2023-12-18)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add

- IRtcEngine::sendRdtMessage
- IRtcEngine::sendRdtMessageEx
- IRtcEngine::sendMediaControlMessage
- IRtcEngine::sendMediaControlMessageEx

# API(2023-09-20)

## IAgoraRtcEngineEx.h

Add

- add cameraId in CameraCapturerConfiguration

# API(2023-12-14)

IAgoraRtcEngineEx.h AgoraRtcEngineEx.h

## RtcEngineEx.java

Add

- IRtcEngineEx::getCallIdEx(agora::util::AString& callId, const RtcConnection& connection)
- getCallIdEx:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(getCallIdEx(_:));
- public abstract String getCallIdEx(RtcConnection connection);

# API (2023-11-07)

## IAgoraRtcEngineBase.h

Modified:

- Make IRtcEngineBase::release to be a static member function

# API (2023-10-31)

IAgoraRtcEngineBase.h Modified:

- Change RHYTHM_PLAYER_REASON_TYPE errorCode to RHYTHM_PLAYER_REASON reasonCode.
- Change LOCAL_AUDIO_STREAM_ERROR error to LOCAL_AUDIO_STREAM_REASON reason
- Change DIRECT_CDN_STREAMING_ERROR error to DIRECT_CDN_STREAMING_REASON reason

IAgoraRtcEngineEx.h Modified:

- Change LOCAL_AUDIO_STREAM_ERROR error to LOCAL_AUDIO_STREAM_REASON reason

IAgoraRtcEngineExS.h Modified:

- Change LOCAL_AUDIO_STREAM_ERROR error to LOCAL_AUDIO_STREAM_REASON reason

# API(2023-09-12)

## rtc_engine_i.h

Modified:

- Remove RefCountedObject from low level APIs.

# API(2023-08-03)

## IAgoraRtcEngineBase.h, AgoraRtcEngineKitBase.h, RtcEngineBase.java, rtc_engine_i.h

Modified:

- description of isFeatureAvailableOnDevice

Add:

- virtual aosl_ref_t ref() = 0;

Deleted:

- virtual int notifyNetworkChange(agora::commons::network::network_info_t&& networkInfo) = 0;
- virtual int reportRecordingArgusEvent(uint32_t* eventIds, int64_t* value, int count, RecordingEventType eventType) = 0;

# API(2023-07-31)

## IAgoraRtcEngine.h

Add:

- enum FeatureType
- bool isFeatureAvailableOnDevice(FeatureType type)

# API(2023-07-10)

## IAgoraRtcEngineBase.h

Modified Remove other warning.

# API(2023-07-07)

## IAgoraRtcEngine.h

Add:

- onSetRtmFlagResult(int)

# API(2023-07-6)

IAgoraH265Transcoder.h

## IAgoraRtcEngine.h

Modified Remove some warning.

# API(2023-06-02)

## IAgoraRtcEngineEx.h

Add

- IRtcEngineEx::enableContentInspectEx(bool enabled, const media::ContentInspectConfig &config, const RtcConnection& connection)

# API (2024-06-11)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add:

- virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0;
- virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0;

# API(2023-07-10)

## IAgoraRtcEngine.h

Add

- IRtcEngine::preloadChannel
- IRtcEngine::preloadChannel (for userAccount)
- IRtcEngine::updatePreloadChannelToken

# API(2023-05-16)

## IAgoraRtcEngine.h

Add

- ChannelMediaOptions#publishThirdCameraTrack
- ChannelMediaOptions#publishFourthCameraTrack
- ChannelMediaOptions#publishThirdScreenTrack
- ChannelMediaOptions#publishFourthScreenTrack

# API (2023-04-26)

## IAgoraRtcEngine.h

Deleted

- remove local ap configs, move to AgoraBase.h

# API(2023-05-16)

## IAgoraRtcEngine.h

Add

- ChannelMediaOptions#parameters

# API (2023-04-20)

## IAgoraRtcEngine.h

Deleted

- createRemoteMediaRecorder(const char* channelId, uid_t uid)
- createLocalMediaRecorder(const RtcConnection& connection) Add createMediaRecorder(const RecorderStreamInfo& options)

# API (2023-10-10)

## IAgoraRtcEngine.h

Modify

- move api preloadChannel & updatePreloadChannelToken & to correct position
- modify preloadChannel to preloadChannelWithUserAccount in class IRtcEngine

# API (2023-04-10)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- remove deprecated tag of method onUserEnableVideo

# API(2023-04-04)

## IAgoraRtcEngine.h

Modified: modify api comment

- queryScreenCaptureCapability()

# API (2023-03-22)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- modidy queryCodecCapability CodecCapInfo codec_info to codecInfo

# API (2023-03-22)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- mark enableDualStreamMode(bool enabled) as Deprecated
- mark enableDualStreamMode(bool enabled, const SimulcastStreamConfig& streamConfig) as Deprecated
- mark enableDualStreamModeEx(bool enabled, const SimulcastStreamConfig& streamConfig, const RtcConnection& connection) as Deprecated

# API (2023-04-11)

## IAgoraRtcEngine.h

Modified:

- modidy publishTrancodedVideoTrack to publishTranscodedVideoTrack

# API (2023-03-21)

IAgoraRtcEngineBase.h IAgoraRtcEngine.h IAgoraRtcEngineS.h IAgoraRtcEngineEx.h IAgoraRtcEngineExS.h IAgoraMediaEngineBase.h IAgoraMediaEngine.h

## IAgoraMediaEngineS.h

Modified:

## - fix fuid: IAgoraRtcEngine.h, IAgoraRtcEngineEx.h, IAgoraMediaEngine.h

Add:

- add .h: IAgoraRtcEngineBase.h, IAgoraRtcEngineS.h, IAgoraRtcEngineExS.h, IAgoraMediaEngineBase.h, IAgoraMediaEngineS.h

# API (2023-08-09)

IAgoraRtcEngineS.h

## IAgoraRtcEngineExS.h

Modified:

## - modify API setupRemoteVideo & setupRemoteVideoEx

IAgoraH265TranscoderS.h IAgoraMediaEngineS.h IAgoraRtcEngineExS.h

## IAgoraRtcEngineS.h

Modified:

- modify API comment

# API (2023-11-20)

IAgoraRtcEngineS.h IAgoraRtcEngineExS.h IAgoraH265TranscoderS.h IAgoraMediaEngineS.h IAgoraRtcEngineExS.h

## IAgoraRtcEngineS.h

Modified:

- delete fuid API

# API (2023-03-09)

## IAgoraRtcEngine.h

Modified:

- modify doc of onFacePositionChanged()

# API (2023-03-28)

## IAgoraRtcEngine.h

Modify:

- change param name from "type" to "sourceType"

# API (2023-03-8)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add:

- Add fix xcode warning

# API (2023-03-24)

## IAgoraRtcEngineEx.h

Modified:

- onLocalVideoStateChanged()
- onVideoSizeChanged()
- onFirstLocalVideoFrame() add videoSourceType

# API (2023-02-21)

IAgoraMediaEngine.h IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add:

- Add __deprecated tag

# API (2023-02-17)

## IAgoraRtcEngine.h

Add:

- add IAgoraH265Transcoder.h header file

# API(2023-02-16)

## IAgoraRtcEngine.h

Add:

- IRtcEngine::getNtpTimeInMs

# API(2023-02-16)

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEx::setParametersEx(const RtcConnection& connection, const char* parameters)

# API(2023-02-16)

## IAgoraRtcEngineExS.h

Add:

- IRtcEngineExS::setParametersEx(const RtcConnectionS& connectionS, const char* parameters)

# API(2023-02-17)

[FEAT] CSD-53336: Screen(Windows) info include sourceDisplayId

## IAgoraRtcEngine.h

Add ScreenCaptureSourceInfo add sourceDisplayId

- view_t sourceDisplayId

# API (2023-02-16)

## IAgoraRtcEngine.h

Modified

- Add 'Rectangle position' to struct ScreenCaptureSourceInfo

# API (2023-02-02)

remove past addition by mistake

## IAgoraRtcEngineEx.h

Deleted

- int enableWirelessAccelerate(bool enabled)

# API (2023-04-03)

## IAgoraRtcEngineEx.h

Deleted

- virtual int setVideoProfileEx(int width, int height, int frameRate, int bitrate) = 0;

# API (2023-02-01)

## IAgoraRtcEngine.h

Add:

- struct RtcEngineContext add autoRegisterAgoraExtensions.

# API(2023-01-17)

## IAgoraMediaEngine.h

Add

- addVideoFrameRenderer
- removeVideoFrameRenderer

# API (2023-02-14)

Support set video application scenarios

## IAgoraRtcEngine.h

Add:

- int setVideoQoEPreference(VIDEO_QOE_PREFERENCE_TYPE qoePreference)

# API (2023-01-24)

Support set video application scenarios

## IAgoraRtcEngine.h

Add:

- int setVideoScenario(VIDEO_APPLICATION_SCENARIO scenarioType)

# API(2022-1-31)

## IAgoraRtcEngine.h

Add

- createLocalMediaRecorder
- createRemoteMediaRecorder
- destroyMediaRecorder

# API(2023-01-05)

## IAgoraRtcEngine.h

Add

- Refine description of registerExtension & enableExtension

# API(2022-12-26)

## IAgoraRtcEngine.h

Add

- PROXY_TYPE_HTTP
- PROXY_TYPE_HTTPS

# API(2022-12-1)

## IAgoraRtcEngineEx.h

Add

- adjustRecordingSignalVolumeEx
- muteRecordingSignalEx

# API (2023-01-18)

## IAgoraRtcEngine.h

Add:

- virtual int startOrUpdateChannelMediaRelay(const ChannelMediaRelayConfiguration& configuration) Modified:
- Deprecated virtual int startChannelMediaRelay(const ChannelMediaRelayConfiguration& configuration)
- Deprecated virtual int updateChannelMediaRelay(const ChannelMediaRelayConfiguration& configuration)
- Deprecated virtual void onChannelMediaRelayEvent(int code)

# API (2023-05-18)

## IAgoraRtcEngine.h

Deleted:

- Deprecated virtual void onChannelMediaRelayEvent(int code)

# API (2023-02-22)

## IAgoraRtcEngine.h

Modified:

- supplemental onChannelMediaRelayEvent comments

## IAgoraRtcEngineEx.h

Add:

- virtual int startOrUpdateChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection) Modified:
- Deprecated virtual int startChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection)
- Deprecated virtual int updateChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection)

# API (2023-10-30)

## IAgoraRtcEngine.h

Deleted:

- Deprecated virtual int startChannelMediaRelay(const ChannelMediaRelayConfiguration& configuration)
- Deprecated virtual int updateChannelMediaRelay(const ChannelMediaRelayConfiguration& configuration)

## IAgoraRtcEngineEx.h

Deleted:

- Deprecated virtual int startChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection)
- Deprecated virtual int updateChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection)

# API (2021-12-05)

## IAgoraRtcEngine.h

Modified:

- Optiomize the Note of startDirectCdnStreaming again

# API (2021-11-28)

## IAgoraRtcEngine.h

Modified:

- Optiomize the Note of startDirectCdnStreaming

# API(2022-09-28)

## IAgoraRtcEngine.h

Add:

- Add SetAINSMode and annotation.

# API(2022-12-08)

[FEAT] NMS-9295: provide APIs for setting first video frame starting tick & for optimizing first frame time consumption

## IAgoraRtcEngine.h

Add

- IRtcEngineEventHandler::onVideoRenderingTracingResult(uid_t uid, MEDIA_TRACE_EVENT currentEvent, VideoRenderingTracingInfo tracingInfo)
- IRtcEngine::startMediaRenderingTracing()
- IRtcEngine::enableInstantMediaRendering()

## IAgoraRtcEngineEx.h

Add

- IRtcEngineEventHandlerEx::onVideoRenderingTracingResult(const RtcConnection& connection, uid_t uid, MEDIA_TRACE_EVENT currentEvent, VideoRenderingTracingInfo tracingInfo)
- IRtcEngineEx::startMediaRenderingTracingEx(const RtcConnection& connection)

# API (2022-10-31)

## IAgoraRtcEngine.h

Modified:

- Update comments for getScreenCaptureSources.

# API(2022-11-25)

## IAgoraRtcEngine.h

Add

- Add setParameters.

# API(2022-10-19)

Delete onMediaDeviceChanged, use onVideoDeviceStateChanged instead it.

## IAgoraRtcEngine.h

Deleted

- onMediaDeviceChanged

# API (2022-10-18)

Delete fields in RemoteVideoStats.

## IAgoraRtcEngine.h

Deleted

- superResolutionType

# API(2022-10-18)

Delete enableRemoteSuperResolution api.

## IAgoraRtcEngine.h

Deleted

- enableRemoteSuperResolution

# API(2022-10-17)

## IAgoraRtcEngine.h

Add:

- registerExtension

# API(2022-10-12)

## IAgoraRtcEngine.h

Modified:

- startPrimaryCameraCapture change to startCameraCapture
- stopPrimaryCameraCapture change to stopCameraCapture
- startPrimaryScreenCapture change to startScreenCapture
- stopSecondaryScreenCapture change to stopScreenCapture

Deleted:

- Deleted startSecondaryCameraCapture
- Deleted stopSecondaryCameraCapture
- Deleted startSecondaryScreenCapture
- Deleted stopSecondaryScreenCapture

Add:

- add onLocalVideoTranscoderError

# API(2022-09-22)

## IAgoraRtcEngine.h

Deleted:

- Remove onApiCallExecuted from IRtcEngineEventHandler

# API(2022-09-21)

IAgoraRtcEngine.h IAgoraRtcEngineEx.h

## IAgoraMediaEngine.h

Modified

- Updated code comments

# API (2022-12-09)

## IAgoraRtcEngine.h

Modified:

- Fix return value of startRtmpStreamWithTranscoding/startRtmpStreamWithoutTranscoding

# API(2022-09-28)

## IAgoraRtcEngine.h

Add

- queryCodecCapability()

# API (2023-01-30)

## IAgoraRtcEngine.h

Add

- virtual int queryScreenCaptureCapability()

# API (2023-01-30)

## IAgoraRtcEngine.h

Modified:

- virtual int setScreenCaptureScenario(SCREEN_SCENARIO_TYPE screenScenario)

# API (2022-11-01)

## IAgoraRtcEngine.h

Add:

- virtual int setCameraStabilizationMode(CAMERA_STABILIZATION_MODE mode)
- virtual bool isCenterStageSupported()
- virtual int enableCenterStage(bool enabled)

# API (2022-09-14)

## IAgoraRtcEngine.h

Add:

- virtual int enableMultiCamera(bool enabled, const CameraCapturerConfiguration& config)

# API(2022-10-18)

## IAgoraRtcEngine.h

Add: removeInjectStreamUrl addInjectStreamUrl

# API (2022-09-12)

## IAgoraRtcEngine.h

Modified: adding memver variable

- add hwEncoderAccelerating in LocalVideoStats

# API(2022-08-24)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- add parameter 'const ClientRoleOptions& newRoleOptions' for onClientRoleChanged()

# API (2022-09-06)

## IAgoraRtcEngine.h

Deleted:

- Deleted clearVideoWatermark()

# API (2022-09-04)

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEx::adjustUserPlaybackSignalVolumeEx()

# API (2022-08-23)

## IAgoraRtcEngine.h

Modify:

- add mosValue in RemoteVideoStats

# API (2022-08-23)

## IAgoraRtcEngine.h

Modify:

- remove the iOS and Android limitation for in ear monitor

# API(2022-09-21)

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEx::muteLocalAudioStreamEx
- IRtcEngineEx::muteLocalVideoStreamEx
- IRtcEngineEx::muteAllRemoteAudioStreamsEx
- IRtcEngineEx::muteAllRemoteVideoStreamsEx
- IRtcEngineEx::startRtmpStreamWithoutTranscodingEx
- IRtcEngineEx::startRtmpStreamWithTranscodingEx
- IRtcEngineEx::updateRtmpTranscodingEx
- IRtcEngineEx::stopRtmpStreamEx
- IRtcEngineEx::startChannelMediaRelayEx
- IRtcEngineEx::updateChannelMediaRelayEx
- IRtcEngineEx::pauseAllChannelMediaRelayEx
- IRtcEngineEx::resumeAllChannelMediaRelayEx
- IRtcEngineEx::stopChannelMediaRelayEx

# API (2022-08-11)

Add audio effect interfaces

## IAgoraRtcEngine.h

Add:

- int setHeadphoneEQPreset(HEADPHONE_EQUALIZER_PRESET preset)
- int setHeadphoneEQParameters(float low_gain, float high_gain)

Modified:

- modify annotation in setHeadphoneEQParameters api

# API (2022-09-15)

## IAgoraRtcEngine.h

Modified:

- int setHeadphoneEQParameters(int lowGain, int highGain)

# API (2022-08-11)

## IAgoraRtcEngine.h

Modify:

- add VIDEO_SOURCE_TYPE in onVideoSizeChanged

## IAgoraRtcEngineEx.h

Modify:

- add VIDEO_SOURCE_TYPE in onVideoSizeChanged

# API(2022-8-10)

## IAgoraRtcEngine.h

Deleted:

- delete pushReverseAudioFrame()
- delete AudioTrackConfig struct
- delete ChannelMediaOptions#publishDirectCustomAudioTrack
- delete ChannelMediaOptions#publishCustomAudioTrackEnableAec
- delete ChannelMediaOptions#publishCustomAudioTrackAec
- delete enableEchoCancellationExternal(bool enabled, int audioSourceDelay)
- delete startPrimaryCustomAudioTrack(const AudioTrackConfig& config)
- delete stopPrimaryCustomAudioTrack()
- delete startSecondaryCustomAudioTrack(const AudioTrackConfig& config)
- delete stopSecondaryCustomAudioTrack()

Modify:

- modify ChannelMediaOptions#publishCustomAudioSourceId to ChannelMediaOptions#publishCustomAudioTrackId
- modify enableCustomAudioLocalPlayback(int sourceId, bool enabled) to enableCustomAudioLocalPlayback(track_id_t trackId, bool enabled
- modify adjustCustomAudioPublishVolume(int32_t sourceId, int volume) to adjustCustomAudioPublishVolume(track_id_t trackId, int volume)
- modify adjustCustomAudioPlayoutVolume(int32_t sourceId, int volume) to adjustCustomAudioPlayoutVolume(track_id_t trackId, int volume)
- modify pushAudioFrame(MEDIA_SOURCE_TYPE type, IAudioFrameObserver::AudioFrame* frame, bool wrap = false, rtc::track_id_t trackId = 0) to pushAudioFrame(IAudioFrameObserver::AudioFrame* frame, rtc::track_id_t trackId = 0)

# API (2022-08-08)

## IAgoraRtcEngine.h

Add:

- Add startScreenCapture for iOS screen capture
- Add stopScreenCapture for iOS screen capture

# API (2022-06-09)

## rtc_engine_impl.h

Add:

- int getEffectDuration(const char* filePath)
- int setEffectPosition(int soundId, int pos)
- int getEffectCurrentPosition(int soundId) override

# API (2022-07-20)

## IAgoraRtcEngineEx.h

Add:

- leaveChannelEx(const RtcConnection& connection, const LeaveChannelOptions& options)

# API (2022-08-16)

## IAgoraRtcEngine.h

Modify: mark enum RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED as Deprecated

# API (2022-06-22)

## IAgoraRtcEngine.h

Modify:

- comments about onError()

# API (2022-08-08)

## IAgoraRtcEngine.h

Deleted:

- Deleted onVideoSourceFrameSizeChanged

## IAgoraRtcEngineEx.h

Deleted:

- Deleted onVideoSourceFrameSizeChanged

Modified:

- Deprecated void onFirstLocalVideoFrame(const RtcConnection& connection, int width, int height, int elapsed)
- Deprecated void onFirstLocalVideoFramePublished(const RtcConnection& connection, int elapsed)
- Deprecated void onLocalVideoStateChanged(const RtcConnection& connection, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_REASON errorCode)
- Deprecated void onLocalVideoStats(const RtcConnection& connection, const LocalVideoStats& stats)

# API (2022-07-12)

## IAgoraRtcEngine.h

Modified:

- set "unload_after_use" false by default in loadExtensionProvider

# API (2022-07-04)

## IAgoraRtcEngine.h

Modified:

- add "unload_after_use" boolean flag in loadExtensionProvider

# API (2022-06-30)

## IAgoraRtcEngine.h.h

Add:

- add source type argument for local video related callbacks in IRtcEngineEventHandler

# API (2022-06-22)

## IAgoraMediaEngine.h.h

Add:

- add enum AUDIO_MIXING_DUAL_MONO_MODE

## IAgoraRtcEngine.h

Add:

- virtual int setAudioMixingDualMonoMode(media::AUDIO_MIXING_DUAL_MONO_MODE mode)

# API(2022-06-19)

## IAgoraRtcEngine.h

Add:

- add IRtcEngineEventHandler#onAudioMixingPositionChanged

# API (2022-07-05)

## IAgoraRtcEngine.h

Modified:

- delete the argument sourceType of enableDualStreamMode and setDualStreamMode

# API (2022-07-05)

## IAgoraRtcEngineEx.h

Modified:

- delete the argument sourceType of enableDualStreamModeEx and setDualStreamModeEx

# API (2022-08-15)

## IAgoraRtcEngine.h

Add:

- void onLicenseValidationFailure(LICENSE_ERROR_TYPE error)
- Add License in struct RtcEngineContext

## IAgoraRtcEngineEx.h

Add: void onLicenseValidationFailure(const RtcConnection& connection, LICENSE_ERROR_TYPE reason)

# API (2022-05-27)

## IAgoraRtcEngine.h

Modified:

- modify annotation in ScreenCapture api

# API (2022-08-30)

## rtc_engine_impl.h

Add:

- int setLocalVoiceFormant(double formantRatio)

# API (2022-06-16)

## IAgoraRtcEngine.h

Modified: adding memver variable

- add dualStreamEnabled in LocalVideoStats

# API (2022-06-10)

IAgoraRtcEngine.h

Modified: Add loadExtensionProvider for Android

# API (2022-06-08)

IAgoraRtcEngine.h Modified: Update comments

- ScreenCaptureConfiguration

# API(2022-05-27)

## IAgoraRtcEngine.h

Modified: remove channel param

- remove channel from onSnapshotTaken

## IAgoraRtcEngineEx.h

Modified:

- remoteUid -> uid from takeSnapshot

# API (2022-05-30)

## IAgoraRtcEngine.h

Modified: add sourceType for setAdvancedAudioOptions

# API (2022-05-31)

## IAgoraRtcEngine.h

Add:

- int setDualStreamMode(SIMULCAST_STREAM_MODE mode)
- int setDualStreamMode(VIDEO_SOURCE_TYPE sourceType, SIMULCAST_STREAM_MODE mode)
- setDualStreamMode(VIDEO_SOURCE_TYPE sourceType, SIMULCAST_STREAM_MODE mode, const SimulcastStreamConfig& streamConfig)

  ## IAgoraRtcEngineEx.h

Add:

- int setDualStreamModeEx(VIDEO_SOURCE_TYPE sourceType, SIMULCAST_STREAM_MODE mode, const SimulcastStreamConfig& streamConfig, const RtcConnection& connection)

# API (2022-05-09)

## IAgoraRtcEngine.h

Modified: add remoteUid param

- int takeSnapshot(uid_t remoteUid, const char* filePath) add enabled param
- int enableContentInspect(bool enabled, const media::ContentInspectConfig &config)

## IAgoraRtcEngineEx.h

Modified: add remoteUid param

- void onSnapshotTaken(const RtcConnection& connection, uid_t remoteUid, const char* filePath, int width, int height, int errCode)

# API (2022-05-08)

## IAgoraRtcEngine.h

Add:

- int startScreenCaptureByDisplayId(uint32_t displayId, const Rectangle& regionRect, const ScreenCaptureParameters& captureParams);
- int setScreenCaptureScenario(SCREEN_SCENARIO_TYPE screenScenario);

# API (2022-05-06)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add:

- void onWlAccMessage(WLACC_MESSAGE_REASON reason, WLACC_SUGGEST_ACTION action, const char* wlAccMsg)
- void onWlAccStats(WlAccStats currentStats, WlAccStats averageStats)
- int enableWirelessAccelerate(bool enabled)

# API (2022-05-05)

## IAgoraMediaEngine.h

Add:

- add Optional<bool> publishScreenCaptureVideo to ChannelMediaOptions on Android and IOS
- add Optional<bool> publishScreenCaptureAudio to ChannelMediaOptions on Android and IOS Modified:
- exclude ChannelMediaOptions::publishSecondaryScreenTrack from Android and iOS

# API (2022-05-15)

## IAgoraMediaEngine.h

Add:

- add Optional<bool> enableMicrophone

# API (2022-06-29)

## IAgoraRtcEngine.h

Modify:

- int startAudioMixing(const char* filePath, bool loopback, bool replace, int cycle, int startPos) to int startAudioMixing(const char* filePath, bool loopback, int cycle, int startPos)
- int startAudioMixing(const char* filePath, bool loopback, bool replace, int cycle) to int startAudioMixing(const char* filePath, bool loopback, bool replace, int cycle)

# API(2022-04-28)

## IAgoraRtcEngine.h

Delete:

- IRtcEngineEventHandler::onWarning(int warn, const char* msg)

# API (2022-4-27)

## IAgoraRtcEngine.h

Add:

- CAPTURE_BRIGHTNESS_LEVEL_TYPE captureBrightnessLevel in LocalVideoStats

# API(2022-04-24)

## IAgoraRtcEngine.h

Add:

- ChannelMediaOptions::isInteractiveAudience

# API(2022-08-17)

## IAgoraRtcEngine.h

Change:

- Change some annotation of ChannelMediaOptions, DirectCdnStreamingMediaOptions

# API (2022-04-22)

## IAgoraRtcEngine.h

Add: add apis for screen capture for mobile platform

- int startScreenCapture(const ScreenCaptureParameters2& captureParams)
- int updateScreenCapture(const ScreenCaptureParameters2& captureParams)

# API (2022-04-21)

## IAgoraRtcEngine.h

Add:

- bool stopPreview for LeaveChannelOptions

# API (2022-04-21)

## IAgoraMediaEngine.h

Modify:

- change registerVideoEncodedImageReceiver(IVideoEncodedImageReceiver* videoReceiver) to registerVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver* encodedObserver)

# API (2021-02-18)

## IAgoraRtcEngine.h

Add:

- struct ChannelMediaOptions::customVideoTrackId
- video_track_id_t createCustomVideoTrack() = 0;
- video_track_id_t createCustomEncodedVideoTrack() = 0;
- int destroyCustomVideoTrack(video_track_id_t video_track_id) = 0;

  ## - int destroyCustomEncodedVideoTrack(video_track_id_t video_track_id) = 0;

Remove:

- int pushDirectCdnStreamingCustomVideoFrame(media::base::ExternalVideoFrame* frame) = 0;

## IAgoraMediaEngine.h

Modify:

- change param "const rtc::RtcConnection" in pushVideoFrame to "unsigned int"
- change param "const rtc::RtcConnection" in pushEncodedVideoImage to "unsigned int"

# API (2022-04-17)

## IAgoraRtcEngine.h

Add:

- add Optional<bool> isAudioFilterable to ChannelMediaOptions

# API (2022-04-14)

## IAgoraRtcEngine.h

Modified: replace publishAudioTrack with publishMicrophoneTrack

# API (2022-04-15)

## IAgoraRtcEngine.h

Modified:

- set RtcEngineContext.channelProfile default to CHANNEL_PROFILE_LIVE_BROADCASTING_2.

# API(2022-05-14)

## IAgoraRtcEngine.h

Add:

- ImageTrackOptions#mirrorMode

# API(2022-03-31)

## IAgoraRtcEngine.h

Add:

- int64_t getCurrentMonotonicTimeInMs()

# API (2022-04-13)

## IAgoraRtcEngine.h

Deleted: Remove AUDIO_SCENARIO_HIGH_DEFINITION in comment

# API (2022-04-13)

[NMS-1630]: Add start echo test with config.

## IAgoraRtcEngine.h

Add:

- int startEchoTest(const EchoTestConfiguration& config);

# API(2022-04-21)

## IAgoraRtcEngine.h

Update CameraCapturerConfiguration Add:

- `bool followEncodeDimensionRatio`

# API(2022-04-11)

## IAgoraRtcEngine.h

Add:

- int enableVideoImageSource(bool enable, const ImageTrackOptions& options)

# API(2022-04-11)

## IAgoraRtcEngine.h

Add:

- int selectAudioTrack(int index)
- int getAudioTrackCount()

# API(2022-05-13)

## IAgoraRtcEngine.h

Add:

- IRtcEngine::enableExtension
- IRtcEngine::setExtensionProperty
- IRtcEngine::getExtensionProperty
- struct ExtensionInfo

# API (2022-04-03)

## IAgoraRtcEngine.h

Add:

- struct AdvancedAudioOptions

# API (2022-04-21)

## IAgoraRtcEngine.h

Modified:

- Changes AUDIO_MIXING_ERROR_TYPE to AUDIO_MIXING_REASON_TYPE

# API (2022-03-31)

## IAgoraRtcEngine.h

Deleted:

- int switchChannel(const char* token, const char* channel)

Add:

- virtual int setLowlightEnhanceOptions
- virtual int setVideoDenoiserOptions
- virtual int setColorEnhanceOptions

# API(2021-11-27)

modify setExternalVideoSource

## IAgoraMediaEngine.h

Modifed:

- add one more parameter opt for setExternalVideoSource.

# API (2022-03-05)

## IAgoraRtcEngine.h

Add:

- QUALITY_ADAPT_INDICATION quality_adapt_indication

# API (2022-03-04)

## IAgoraRtcEngine.h

Modified: add deviceName param virtual int enableLoopbackRecording(bool enabled, const char* deviceName = NULL)

## IAgoraRtcEngineEx.h

Modified: add deviceName param virtual int enableLoopbackRecordingEx(const RtcConnection& connection, bool enabled, const char* deviceName = NULL)

# API (2022-02-27)

## IAgoraRtcEngine.h

Modified: Modify arguments name

## IAgoraRtcEngineEx.h

Modified: Modify arguments name

# API (2022-03-04)

## IAgoraRtcEngine.h

Add: Add fields in RemoteVideoStats

- superResolutionType

# API (2022-02-27)

## multiple head files

Modified:

- fix param warnings on xcode

# API (2022-02-14)

## IAgoraRtcEngine.h

Add:

- MEDIA_DEVICE_STATE_IDLE

# API (2022-02-11)

## IAgoraRtcEngineEx.h

Add:

- virtual int getUserInfoByUserAccountEx(const char*, rtc::UserInfo*, const RtcConnection&) = 0;
- virtual int getUserInfoByUidEx(uid_t, rtc::UserInfo*, const RtcConnection&) = 0;

# API (2022-02-10)

## IAgoraRtcEngine.h

Modified:

- Delete the last two parameters of IRtcEngine::getUserInfoByUserAccount
- Delete the last two parameters of IRtcEngine::getUserInfoByUid

# API (2022-02-25)

## IAgoraRtcEngine.h

**add: IVideoDeviceManager **

- virtual int numberOfCapabilities(const char* deviceIdUTF8) = 0;
- virtual int getCapability(const char* deviceIdUTF8, const uint32_t deviceCapabilityNumber, VideoFormat& capability) = 0;

# API (2022-02-08)

## IAgoraRtcEngine.h

**add: setRemoteVideoSubscriptionOptions **

- virtual int setRemoteVideoSubscriptionOptions(uid_t uid, const VideoSubscriptionOptions &options) = 0;

## IAgoraRtcEngineEx.h

**add: setRemoteVideoSubscriptionOptionsEx **

- virtual int setRemoteVideoSubscriptionOptionsEx(uid_t uid, const VideoSubscriptionOptions& options, const RtcConnection& connection) = 0;

# API (2022-01-27)

## IAgoraRtcEngine.h

Modified:

- change DirectCdnStreamStats to DirectCdnStreamingStats
- onDirectCdnStreamingStateChanged
- onDirectCdnStreamingStats

# API (2021-09-24)

Add params for enableVirtualBackground

## IAgoraRtcEngine.h

Add:

- int enableVirtualBackground(bool enabled, VirtualBackgroundSource backgroundSource, SegmentationProperty segProperty)

# API (2022-01-26)

## IAgoraRtcEngine.h

Deleted:

- delete bool stopPreview from LeaveChannelOptions

# API (2022-01-25)

## IAgoraRtcEngine.h

Add:

- struct AudioOptionsAdvanced

# API (2022-01-20)

## IAgoraRtcEngine.h

Deleted:

- virtual int setExternalAudioSource(bool enabled, int sampleRate, int channels, int sourceNumber = 1, bool localPlayback = false, bool publish = true) = 0;
- virtual int setExternalAudioSink(int sampleRate, int channels) = 0;
- virtual int pullAudioFrame(media::IAudioFrameObserver::AudioFrame* frame) = 0;

## IAgoraMediaEngine.h

Add: virtual int setExternalAudioSink(int sampleRate, int channels) = 0;

# API (2022-01-20)

## IAgoraRtcEngine.h

Add:

- int setAVSyncSource(const char* channelId, uid_t uid)

# API (2022-04-01)

## IAgoraMediaEngine.h

**Modify:

- int setExternalAudioSink(int sampleRate, int channels) to int setExternalAudioSink(bool enabled, int sampleRate, int channels)

## IAgoraRtcEngine.h

Deleted:

- RtcEngineContext.enableAudioDevice

# API (2022-01-12)

## IAgoraRtcEngine.h

Add:

- add Optional<bool> startPreview to ChannelMediaOptions
- add bool stopPreview to LeaveChannelOptions

# API (2022-01-29)

## IAgoraRtcEngineEx.h

**add: enableAudioVolumeIndicationEx **

- virtual int enableAudioVolumeIndicationEx(int interval, int smooth, bool reportVad, const RtcConnection& connection) = 0;

# API (2022-01-10)

## IAgoraRtcEngine.h

**Modify: volume range **

- virtual int adjustUserPlaybackSignalVolume(unsigned int uid, int volume) = 0;

# API (2022-01-09)

## IAgoraRtcEngine.h

Add:

- struct SIZE for MAC
- struct ThumbImageBuffer
- enum ScreenCaptureSourceType
- struct ScreenCaptureSourceInfo
- class IScreenCaptureSourceList
- virtual IScreenCaptureSourceList* getScreenCaptureSources(const SIZE& thumbSize, const SIZE& iconSize, const bool includeScreen)

# API (2022-01-05)

## IAgoraRtcEngine.h

Modified:

- change default RtcEngineContext#audioScenario from 'AUDIO_SCENARIO_HIGH_DEFINITION' to 'AUDIO_SCENARIO_DEFAULT'

# API (2022-01-05)

change api comment

## IAgoraRtcEngine.h

Modified:

- int enableVirtualBackground(bool enabled, VirtualBackgroundSource backgroundSource)

# API(2021-12-28)

## IAgoraRtcEngine.h

Add:

- virtual int setAdvancedAudioOptions(media::base::AdvancedAudioOptions &options) = 0;

- # API(2021-12-27)

## IAgoraRtcEngine.h

Deleted:

- virtual int setLocalVoiceReverbPreset(AUDIO_REVERB_PRESET reverbPreset)
- virtual int setLocalVoiceChanger(VOICE_CHANGER_PRESET voiceChanger)

# API(2021-12-20)

## IAgoraRtcEngine.h

Add: Add bool useExternalEglContext for RtcEngineContext

# API(2022-04-19)

## IAgoraRtcEngine.h

Add:

- IRtcEngine::setSubscribeAudioBlacklist
- IRtcEngine::setSubscribeAudioWhitelist
- IRtcEngine::setSubscribeVideoBlacklist
- IRtcEngine::setSubscribeAudioBlacklist

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEx::setSubscribeAudioBlacklistEx
- IRtcEngineEx::setSubscribeAudioWhitelistEx
- IRtcEngineEx::setSubscribeVideoBlacklistEx
- IRtcEngineEx::setSubscribeAudioBlacklistEx

# API(2021-11-17)

## IAgoraRtcEngine.h

Add:

- int getAudioDeviceInfo(DeviceInfo& deviceInfo)

# API (2021-12-23)

## IAgoraRtcEngine.h

Add:

- int int enableSpatialAudio(bool enabled)
- int setRemoteUserSpatialAudioParams(uid_t uid, const agora::SpatialAudioParams& params)

## IAgoraRtcEngineEx.h

Add:

- int setRemoteUserSpatialAudioParamsEx(uid_t uid, const agora::SpatialAudioParams& param, const RtcConnection& connection)

# API(2021-12-10)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Add:

- virtual void onClientRoleChangeFailed(CLIENT_ROLE_CHANGE_FAILED_REASON reason, CLIENT_ROLE_TYPE currentRole)

# API (2021-12-03)

## IAgoraRtcEngine.h

Modified:

- Add callback function onUserStateChanged() and enum REMOTE_USER_STATE.

# API(2021-12-1)

## IAgoraRtcEngine.h

Add:

- int startRtmpStreamWithoutTranscoding(const char* url)
- int startRtmpStreamWithTranscoding(const char* url, const LiveTranscoding& transcoding)
- int updateRtmpTranscoding(const LiveTranscoding& transcoding)
- int stopRtmpStream(const char* url)
- void onRtmpStreamingEvent(const char* url, RTMP_STREAMING_EVENT eventCode)

# API(2021-11-24)

## IAgoraRtcEngine.h

Modifed:

- Replace tab with spaces

# API(2021-11-23)

## IAgoraMediaEngine.h

Add:

- int setDirectExternalAudioSource(bool enable, bool localPlayback = false)
- int pushDirectAudioFrame(media::IAudioFrameObserver::AudioFrame* frame)

# API (2021-12-01)

Add publishMediaPlayerAudioTrack and publishMediaPlayerId field in DirectCdnStreamingMediaOptions.

## IAgoraRtcEngine.h

Add: Add `publishMediaPlayerId` and `publishMediaPlayerAudioTrack` field for struct `DirectCdnStreamingMediaOptions`

- struct DirectCdnStreamingMediaOptions::publishMediaPlayerAudioTrack
- struct DirectCdnStreamingMediaOptions::publishMediaPlayerId

# API(2021-12-09)

## IAgoraRtcEngineEx.h

Add:

- addPublishStreamUrlEx

# API(2021-11-18)

## IAgoraRtcEngine.h

Modify:

- provider_name -> provider
- ext_name -> extension
- json_value -> value

## IAgoraRtcEngineEx.h

Modify:

- remoteUid -> uid

# API (2021-11-23)

## IAgoraRtcEngine.h

Add: Add filed in LocalVideoStats

- `int captureFrameRate`
- `int regulatedCaptureFrameRate`
- `int captureFrameWidth`
- `int captureFrameHeight`
- `int regulatedCaptureFrameWidth`
- `int regulatedCaptureFrameHeight`

# API(2021-11-17)

## IAgoraRtcEngine.h

Modifed: add macro to switch parameters on different platform

- limit CAMERA_DIRECTION cameraDirection only on Android and IOS

## IAgoraRtcEngine.h

Add:

- int setAudioSessionOperationRestriction(AUDIO_SESSION_OPERATION_RESTRICTION restriction)

# API (2021-11-15)

Add enableRemoteSuperResolution for Super Resolution

## IAgoraRtcEngine.h

Add:

- int enableRemoteSuperResolution(uid_t userId, bool enable) = 0;

# API(2021-11-03)

## rtc_engine_i.h

Deleted:

- virtual const char* getSourceVersion() const = 0;

# API(2022-03-08)

## IAgoraRtcEngine.h

Add:

- LocalVideoStats.txPacketLossRate

# API(2022-04-20)

## IAgoraRtcEngine.h

Add:

- IRtcEngine::setEarMonitoringAudioFrameParameters()

# API(2021-11-08)

## IAgoraRtcEngine.h

Add:

- int setAudioSessionOperationRestriction(AUDIO_SESSION_OPERATION_RESTRICTION restriction)

# API(2021-08-30)

## IAgoraRtcEngine.h

Add:

- int takeSnapshot(media::SnapShotConfig &config, media::ISnapshotCallback* callback)

# API(2021-08-30)

## IAgoraRtcEngine.h

Add:

- int SetContentInspect(media::ContentInspectConfig &config)

  # API(2021-08-30)

## IAgoraRtcEngine.h

Add:

- int SetContentInspect(media::ContentInspectConfig &config)

# API(2021-10-27)

## IAgoraRtcEngine.h

Add:

- int adjustCustomAudioPublishVolume(int32_t sourceId, int volume)
- int adjustCustomAudioPlayoutVolume(int32_t sourceId, int volume)

# API(2021-10-20)

## IAgoraRtcEngine.h

*Add:**

- Add enableEchoCancellationExternal() for IRtcEngine
- Add publishCustomAudioTrackAec for ChannelMediaOptions

## IAgoraMediaEngine.h

*Add:**

- Add pushCaptureAudioFrame()
- Add pushReverseAudioFrame()

# API(2021-10-19)

## IAgoraRtcEngine.h

*Modified:**

- virtual int startAudioRecording(const AudioRecordingConfiguration& config) = 0;

# API (2021-10-18)

## IAgoraRtcEngine.h

Add: void onUserMuteAudio(uid_t uid, bool muted)

# API(2021-10-15)

## IAgoraRtcEngine.h

Add:

- add int enableDualStreamModeEx(VIDEO_SOURCE_TYPE sourceType, bool enabled, const SimulcastStreamConfig& streamConfig, const RtcConnection& connection)

# API(2021-10-12)

## IAgoraRtcEngine.h

*Modified:**

- format int setLocalVoiceChanger(VOICE_CHANGER_PRESET voiceChanger) docs

# API(2021-10-11)

## IAgoraRtcEngineEx.h

Modified:

- Update for C++ 98 standard

# API (2021-10-09)

Modified:

- enum DIRECT_CDN_STREAMING_STATE_RUNNING

# API(2021-08-30)

## IAgoraRtcEngine.h

Add:

- int SetContentInspect(media::ContentInspectConfig &config)

  # API(2021-08-30)

## IAgoraRtcEngine.h

Add:

# - int SetContentInspect(media::ContentInspectConfig &config)

## NGIAgoraRtmpConnection.h

Add:

- enum RTMP_CONNECTION_ERROR::RTMP_CONNECTION_ERR_BAD_NAME

*Modified:**

- Add enableBuiltInMediaEncryption for ChannelMediaOptions

# API(2021-09-23)

## IAgoraRtcEngineEx.h

Add:

- int enableEncryptionEx(const RtcConnection& connection, bool enabled, const EncryptionConfig& config)

# API(2021-09-03)

## IAgoraMediaEngine.h

*Modified:**

- change a parameter for setExternalVideoSource

# API (2021-09-24)

Add enableVirtualBackground for Virtual Background Setting

## IAgoraRtcEngine.h

Add:

- int enableVirtualBackground(bool enabled, VirtualBackgroundSource backgroundSource)

# API(2021-09-03)

## IAgoraRtcEngine.h

*Modified:**

- add pauseAllChannelMediaRelay
- add resumeAllChannelMediaRelay
- add switchChannel

# API(2021-09-08)

## IAgoraRtcEngine.h

Add:

- int startRhythmPlayer(const char* sound1, const char* sound2, const AgoraRhythmPlayerConfig& config)
- int stopRhythmPalyer()
- int configRhythmPlayer(AgoraRhythmPlayerConfig& config)
- publishRhythmPlayerTrack for ChannelMediaOptions
- RHYTHM_PLAYER_STATE_TYPE
- RHYTHM_PLAYER_REASON_TYPE
- onRhythmPlayerStateChanged for IRtcEngineEventHandler

# API (2021-09-02)

## IAgoraRtcEngine.h

Add:

- Add thread priority option

# API(2021-09-01)

## IAgoraRtcEngine.h

*Modified:**

- change the bad micro WEBRTC to ANDROID

  # API (2021-08-12)

Gets the NTP time.

## rtc_engine_i.h

Add: base::NtpTime getNtpTime()

# API (2021-08-18)

Add setAppType

## rtc_engine_i.h

Add: Add int32_t setAppType(APP_TYPE appType)

# API (2021-08-18)

Add enum APP_TYPE

## rtc_engine_i.h

Add:

- APP_TYPE_INVALID_VALUE = -1
- APP_TYPE_NATIVE = 0
- APP_TYPE_COCOS = 1
- APP_TYPE_UNITY = 2
- APP_TYPE_ELECTRON = 3
- APP_TYPE_FLUTTER = 4
- APP_TYPE_UNREAL = 5
- APP_TYPE_XAMARIN = 6

# API (2021-08-18)

## IAgoraRtcEngine.h

Modified:

- onActiveSpeaker modify comment info

# API (2022-01-19)

## NGIAgoraAudioTrack.h

Add:

- IAudioTrack::AudioFilterPosition::PcmSource
- IAudioTrack::AudioFilterPosition::PcmSourceSending
- IAudioTrack::AudioFilterPosition::PcmSourcePlayback

# API (2021-09-03)

## IAgoraRtcEngineEx.h

Delete:

- struct RtcEngineContextEx
- IRtcEngineEx::initialize()

# API(2021-08-13)

## IAgoraRtcEngine.h

Add:

- int setScreenCaptureOrientation(MEDIA_SOURCE_TYPE type, VIDEO_ORIENTATION orientation)

# API(2021-11-14)

## IAgoraRtcEngine.h

Add:

- IRtcEngine::enableCustomAudioLocalPlayback

## IAgoraMediaEngine.h.h

Add:

- IMediaEngine::enableCustomAudioLocalPlayback

# API (2021-08-11)

## IAgoraRtcEngine.h

Modified: Deprecate setEncryptionMode and setEncryptionSecret, correct description of enableEncryption

- setEncryptionMode
- setEncryptionSecret
- enableEncryption

# API (2021-08-11)

## IAgoraRtcEngine.h

Add:

- Add getExtensionProperty

# API (2021-08-05)

Add setAudioMixingPitch

## IAgoraRtcEngine.h

Add: Add int setAudioMixingPitch(int pitch)

# API (2021-11-09)

## IAgoraRtcEngine.h

Add:

- RemoteVideoStats.totalActiveTime
- RemoteVideoStats.publishDuration

# API (2023-02-15)

## IAgoraRtcEngine.h

Add:

- RemoteAudioStats
- RemoteVideoStats.rxVideoBytes

# API (2021-08-04)

## IAgoraRtcEngine.h

Modified:

- Add `MEDIA_SOURCE_TYPE type` parameter in setBeautyEffectOptions
- Add `MEDIA_SOURCE_TYPE type` parameter in setExtensionProperty
- Add `MEDIA_SOURCE_TYPE type` parameter in getExtensionProperty
- Add `MEDIA_SOURCE_TYPE type` parameter in enableExtension

Add:

- Add `int setExtensionProviderProperty(const char* provider_name, const char* key, const char* json_value)`

## IAgoraMediaEngine.h

Delete:

- Remove MEDIA_SOURCE_TYPE

API (2022-03-03)

## IAgoraRtcEngine.h

Modified:

- IRtcEngineEventHandler::onExtensionEvent()
- IRtcEngineEventHandler::onExtensionStarted()
- IRtcEngineEventHandler::onExtensionStopped()
- IRtcEngineEventHandler::onExtensionError()

# API (2021-07-29)

## IAgoraRtcEngine.h

Add:

- ChannelMediaOptions::audienceLatencyLevel
- int setClientRole(CLIENT_ROLE_TYPE role, const ClientRoleOptions& options)

# API (2021-07-22)

## IAgoraRtcEngine.h

Add:

- Add token to ChannelMediaOptions

# API (2021-07-20)

Add setBeautyEffectOptions for Beauty Parameter Setting

## IAgoraRtcEngine.h

Add:

- int setBeautyEffectOptions(bool enabled, const BeautyOptions& options)

# API (2021-05-14)

## IAgoraRtcEngine.h

Modified:

- Move int setCameraCapturerConfiguration(const CameraCapturerConfiguration& config) out of MICRO ANDROID

# API (2021-07-05)

## IAgoraRtcEngine.h

Add:

- Add publishCustomAudioTrackEnableAec for ChannelMediaOptions

# API (2021-09-23)

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEx::setRemoteVideoStreamTypeEx()

# API (2021-06-28)

Change extension loading mechanism

## IAgoraRtcEngineEx.h

Deleted:

- extension provider list from the RtcEngineContext

## IAgoraRtcEngine.h

Add:

- loadExtensionProvider for loading extension binary explicitly (for Windows&Linux)

# API (2021-06-03)

## IAgoraRtcEngine.h

Modified:

- remove IAudioDeviceManager
- remove IAudioDeviceCollection

# API (2021-09-22)

## IAgoraMediaEngine.h

Add:

- int startAudioMixing(const char* filePath, bool loopback, bool replace, int cycle, int startPos)

# API (2021-09-10)

## IAgoraRtcEngineEx.h

Add:

- IRtcEngineEventHandlerEx::onJoinChannelSuccess
- IRtcEngineEventHandlerEx::onRejoinChannelSuccess

# API (2021-05-22)

Modify note of setClientRole

## IAgoraRtcEngine.h

Modified:

- note of setClientRole

# API (2021-05-17)

## IAgoraRtcEngine.h

Modified:

- int enableExtension(const char* provider_name, const char* extension_name, bool enable)
- int setExtensionProperty(const char* provider_name, const char* extension_name, const char* key, const char* json_value)

# API (2021-08-16)

## IAgoraMediaEngine.h

Delete:

- IMediaEngine::pushPrimaryAudioFrame()
- IMediaEngine::pushSecondaryAudioFrame()
- IMediaEngine::setExternalVideoConfigEx()

Modified:

- IMediaEngine::pushVideoFrame(base::ExternalVideoFrame* frame, rtc::conn_id_t connectionId = rtc::DEFAULT_CONNECTION_ID) to pushVideoFrame(base::ExternalVideoFrame* frame) and pushVideoFrame(base::ExternalVideoFrame* frame, const rtc::RtcConnection& connection)
- IMediaEngine::pushEncodedVideoImage(const uint8_t* imageBuffer, size_t length, const agora::rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo, rtc::conn_id_t connectionId = rtc::DEFAULT_CONNECTION_ID) to pushEncodedVideoImage(const uint8_t* imageBuffer, size_t length, const agora::rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo) and pushEncodedVideoImage(const uint8_t* imageBuffer, size_t length, const agora::rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo, const rtc::RtcConnection& connection)

## IAgoraRtcEngine.h

Add:

- IRtcEngineEventHandler::eventHandlerType()
- IRtcEngineEventHandler::onExtensionEvent()
- IRtcEngineEventHandler::onExtensionStarted()
- IRtcEngineEventHandler::onExtensionStopped()
- IRtcEngineEventHandler::onExtensionError()
- IRtcEngineEventHandler::onUserAccountUpdated()

Modified:

- IRtcEngineEventHandler::onStreamMessage(uid_t userId, int streamId, const char* data, size_t length) to onStreamMessage(uid_t userId, int streamId, const char* data, size_t length, uint64_t sentTs)
- IRtcEngine::updateChannelMediaOptions(const ChannelMediaOptions& options, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to updateChannelMediaOptions(const ChannelMediaOptions& options)
- IRtcEngine::setVideoEncoderConfiguration(const VideoEncoderConfiguration& config, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to setVideoEncoderConfiguration(const VideoEncoderConfiguration& config)
- IRtcEngine::setupRemoteVideo(const VideoCanvas& canvas, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to setupRemoteVideo(const VideoCanvas& canvas)
- IRtcEngine::muteRemoteAudioStream(uid_t uid, bool mute, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to muteRemoteAudioStream(uid_t uid, bool mute)
- IRtcEngine::muteRemoteVideoStream(uid_t uid, bool mute, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to muteRemoteVideoStream(uid_t uid, bool mute)
- IRtcEngine::setRemoteVoicePosition(uid_t uid, double pan, double gain, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to setRemoteVoicePosition(uid_t uid, double pan, double gain)
- IRtcEngine::setRemoteRenderMode(uid_t uid, media::base::RENDER_MODE_TYPE renderMode, VIDEO_MIRROR_MODE_TYPE mirrorMode, conn_id_t connectionId = DEFAULT_CONNECTION_ID) to setRemoteRenderMode(uid_t uid, media::base::RENDER_MODE_TYPE renderMode, VIDEO_MIRROR_MODE_TYPE mirrorMode, VIDEO_MIRROR_MODE_TYPE mirrorMode)
- IRtcEngine::getConnectionState(conn_id_t connectionId = 0) to getConnectionState()
- IRtcEngine::createDataStream(int* streamId, bool reliable, bool ordered, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to createDataStream(int* streamId, bool reliable, bool ordered)
- IRtcEngine::createDataStream(int* streamId, DataStreamConfig& config, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to createDataStream(int* streamId, DataStreamConfig& config)
- IRtcEngine::sendStreamMessage(int streamId, const char* data, size_t length, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to sendStreamMessage(int streamId, const char* data, size_t length)
- IRtcEngine::addVideoWatermark(const char* watermarkUrl, const WatermarkOptions& options, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to addVideoWatermark(const char* watermarkUrl, const WatermarkOptions& options)
- IRtcEngine::clearVideoWatermark(conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to clearVideoWatermark()
- IRtcEngine::sendCustomReportMessage(const char* id, const char* category, const char* event, const char* label, int value, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to sendCustomReportMessage(const char* id, const char* category, const char* event, const char* label, int value)
- IRtcEngine::joinChannelWithUserAccountEx(const char* token, const char* channelId, const char* userAccount, const ChannelMediaOptions& options, IRtcEngineEventHandler* eventHandler, conn_id_t* connectionId = 0) to joinChannelWithUserAccountEx(const char* token, const char* channelId, const char* userAccount, const ChannelMediaOptions& options, IRtcEngineEventHandler* eventHandler)
- IRtcEngine::getUserInfoByUserAccount(const char* userAccount, rtc::UserInfo* userInfo, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to getUserInfoByUserAccount(const char* userAccount, rtc::UserInfo* userInfo, const char* channelId = NULL, const char* localUserAccount = NULL)
- IRtcEngine::getUserInfoByUid(uid_t uid, rtc::UserInfo* userInfo, conn_id_t connectionId = agora::rtc::DEFAULT_CONNECTION_ID) to getUserInfoByUid(uid_t uid, rtc::UserInfo* userInfo, const char* channelId = NULL, const char* localUserAccount = NULL)

Delete:

- IRtcEngineEventHandler::onRemoteAudioMixingBegin()
- IRtcEngineEventHandler::onRemoteAudioMixingEnd()
- IRtcEngineEventHandler::onRefreshRecordingServiceStatus()
- IRtcEngineEventHandler::onMediaEngineLoadSuccess()
- IRtcEngineEventHandler::onMediaEngineStartCallSuccess()
- IRtcEngineEventHandler::onStreamInjectedStatus()
- IRtcEngineEventHandler::setRemoteRenderMode()
- RtcEngineContext.eventHandlerEx
- IRtcEngine::joinChannelEx()
- IRtcEngine::leaveChannelEx()
- IRtcEngine::setRemoteRenderMode(uid_t uid, media::base::RENDER_MODE_TYPE renderMode, conn_id_t connectionId = DEFAULT_CONNECTION_ID)
- IRtcEngine::enableLoopbackRecording(conn_id_t connectionId, bool enabled)

## IAgoraRtcEngineEx.h

Add:

- struct RtcConnection
- struct RtcEngineContextEx
- IRtcEngineEx::joinChannelEx()
- IRtcEngineEx::leaveChannelEx()
- IRtcEngineEx::updateChannelMediaOptionsEx()
- IRtcEngineEx::setVideoEncoderConfigurationEx()
- IRtcEngineEx::setupRemoteVideoEx()
- IRtcEngineEx::muteRemoteAudioStreamEx()
- IRtcEngineEx::muteRemoteVideoStreamEx()
- IRtcEngineEx::setRemoteVoicePositionEx()
- IRtcEngineEx::setRemoteRenderModeEx()
- IRtcEngineEx::enableLoopbackRecordingEx()
- IRtcEngineEx::getConnectionStateEx()
- IRtcEngineEx::createDataStreamEx()
- IRtcEngineEx::createDataStreamEx()
- IRtcEngineEx::sendStreamMessageEx()
- IRtcEngineEx::addVideoWatermarkEx()
- IRtcEngineEx::clearVideoWatermarkEx()
- IRtcEngineEx::sendCustomReportMessageEx()

Modified:

- IRtcEngineEventHandlerEx::onAudioQuality(conn_id_t connId, uid_t uid, int quality, unsigned short delay, unsigned short lost) to onAudioQuality(const RtcConnection& connection, uid_t remoteUid, int quality, unsigned short delay, unsigned short lost)
- IRtcEngineEventHandlerEx::onAudioVolumeIndication(conn_id_t connId, const AudioVolumeInfo* speakers, unsigned int speakerNumber, int totalVolume) to onAudioVolumeIndication(const RtcConnection& connection, const AudioVolumeInfo* speakers, unsigned int speakerNumber, int totalVolume)
- IRtcEngineEventHandlerEx::onLeaveChannel(conn_id_t connId, const RtcStats& stats) to onLeaveChannel(const RtcConnection& connection, const RtcStats& stats)
- IRtcEngineEventHandlerEx::onRtcStats(conn_id_t connId, const RtcStats& stats) to onRtcStats(const RtcConnection& connection, const RtcStats& stats)
- IRtcEngineEventHandlerEx::onNetworkQuality(conn_id_t connId, uid_t uid, int txQuality, int rxQuality) to onNetworkQuality(const RtcConnection& connection, uid_t remoteUid, int txQuality, int rxQuality)
- IRtcEngineEventHandlerEx::onIntraRequestReceived(conn_id_t connId) to onIntraRequestReceived(const RtcConnection& connection)
- IRtcEngineEventHandlerEx::onFirstLocalVideoFrame(conn_id_t connId, int width, int height, int elapsed) to onFirstLocalVideoFrame(const RtcConnection& connection, int width, int height, int elapsed)
- IRtcEngineEventHandlerEx::onFirstLocalVideoFramePublished(conn_id_t connId, int elapsed) to onFirstLocalVideoFramePublished(const RtcConnection& connection, int elapsed)
- IRtcEngineEventHandlerEx::onVideoSourceFrameSizeChanged(conn_id_t connId, VIDEO_SOURCE_TYPE sourceType, int width, int height) to onVideoSourceFrameSizeChanged(const RtcConnection& connection, VIDEO_SOURCE_TYPE sourceType, int width, int height)
- IRtcEngineEventHandlerEx::onFirstRemoteVideoDecoded(conn_id_t connId, uid_t uid, int width, int height, int elapsed) to onFirstRemoteVideoDecoded(const RtcConnection& connection, uid_t remoteUid, int width, int height, int elapsed)
- IRtcEngineEventHandlerEx::onVideoSizeChanged(conn_id_t connId, uid_t uid, int width, int height, int rotation) to onVideoSizeChanged(const RtcConnection& connection, uid_t uid, int width, int height, int rotation)
- IRtcEngineEventHandlerEx::onLocalVideoStateChanged(conn_id_t connId, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_REASON errorCode) to onLocalVideoStateChanged(const RtcConnection& connection, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_REASON errorCode)
- IRtcEngineEventHandlerEx::onRemoteVideoStateChanged(conn_id_t connId, uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed) to onRemoteVideoStateChanged(const RtcConnection& connection, uid_t remoteUid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed)
- IRtcEngineEventHandlerEx::onFirstRemoteVideoFrame(conn_id_t connId, uid_t uid, int width, int height, int elapsed) to onFirstRemoteVideoFrame(const RtcConnection& connection, uid_t remoteUid, int width, int height, int elapsed)
- IRtcEngineEventHandlerEx::onUserJoined(conn_id_t connId, uid_t uid, int elapsed) to onUserJoined(const RtcConnection& connection, uid_t remoteUid, int elapsed)
- IRtcEngineEventHandlerEx::onUserOffline(conn_id_t connId, uid_t uid, USER_OFFLINE_REASON_TYPE reason) to onUserOffline(const RtcConnection& connection, uid_t remoteUid, USER_OFFLINE_REASON_TYPE reason)
- IRtcEngineEventHandlerEx::onUserMuteVideo(conn_id_t connId, uid_t uid, bool muted) to onUserMuteVideo(const RtcConnection& connection, uid_t remoteUid, bool muted)
- IRtcEngineEventHandlerEx::onUserEnableVideo(conn_id_t connId, uid_t uid, bool enabled) to onUserEnableVideo(const RtcConnection& connection, uid_t remoteUid, bool enabled)
- IRtcEngineEventHandlerEx::onUserEnableLocalVideo(conn_id_t connId, uid_t uid, bool enabled) to onUserEnableLocalVideo(const RtcConnection& connection, uid_t remoteUid, bool enabled)
- IRtcEngineEventHandlerEx::onLocalAudioStats(conn_id_t connId, const LocalAudioStats& stats) to onLocalAudioStats(const RtcConnection& connection, const LocalAudioStats& stats)
- IRtcEngineEventHandlerEx::onRemoteAudioStats(conn_id_t connId, const RemoteAudioStats& stats) to onRemoteAudioStats(const RtcConnection& connection, const RemoteAudioStats& stats)
- IRtcEngineEventHandlerEx::onLocalVideoStats(conn_id_t connId, const LocalVideoStats& stats) to onLocalVideoStats(const RtcConnection& connection, const LocalVideoStats& stats)
- IRtcEngineEventHandlerEx::onRemoteVideoStats(conn_id_t connId, const RemoteVideoStats& stats) to onRemoteVideoStats(const RtcConnection& connection, const RemoteVideoStats& stats)
- IRtcEngineEventHandlerEx::onConnectionLost(conn_id_t connId) to onConnectionLost(const RtcConnection& connection)
- IRtcEngineEventHandlerEx::onConnectionInterrupted(conn_id_t connId) to onConnectionInterrupted(const RtcConnection& connection)
- IRtcEngineEventHandlerEx::onConnectionBanned(conn_id_t connId) to onConnectionBanned(const RtcConnection& connection)
- IRtcEngineEventHandlerEx::onStreamMessage(uid_t uid, int streamId, const char* data, size_t length, uint64_t sentTs) to onStreamMessage(const RtcConnection& connection, uid_t remoteUid, int streamId, const char* data, size_t length, uint64_t sentTs)
- IRtcEngineEventHandlerEx::onStreamMessageError(conn_id_t connId, uid_t uid, int streamId, int code, int missed, int cached) to onStreamMessageError(const RtcConnection& connection, uid_t remoteUid, int streamId, int code, int missed, int cached)
- IRtcEngineEventHandlerEx::onRequestToken(conn_id_t connId) to onRequestToken(const RtcConnection& connection)
- IRtcEngineEventHandlerEx::onTokenPrivilegeWillExpire(conn_id_t connId, const char* token) to onTokenPrivilegeWillExpire(const RtcConnection& connection, const char* token)
- IRtcEngineEventHandlerEx::onFirstLocalAudioFramePublished(conn_id_t connId, int elapsed) to onFirstLocalAudioFramePublished(const RtcConnection& connection, int elapsed)
- IRtcEngineEventHandlerEx::onLocalAudioStateChanged(conn_id_t connId, LOCAL_AUDIO_STREAM_STATE state, LOCAL_AUDIO_STREAM_ERROR error) to onLocalAudioStateChanged(const RtcConnection& connection, LOCAL_AUDIO_STREAM_STATE state, LOCAL_AUDIO_STREAM_ERROR error)
- IRtcEngineEventHandlerEx::onRemoteAudioStateChanged(conn_id_t connId, uid_t uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed) to onRemoteAudioStateChanged(const RtcConnection& connection, uid_t remoteUid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed)
- IRtcEngineEventHandlerEx::onActiveSpeaker(conn_id_t connId, uid_t uid) to onActiveSpeaker(const RtcConnection& connection, uid_t uid)
- IRtcEngineEventHandlerEx::onClientRoleChanged(conn_id_t connId, CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole) to onClientRoleChanged(const RtcConnection& connection, CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole)
- IRtcEngineEventHandlerEx::onRemoteAudioTransportStats(conn_id_t connId, uid_t uid, unsigned short delay, unsigned short lost, unsigned short rxKBitRate) to onRemoteAudioTransportStats(const RtcConnection& connection, uid_t uid, unsigned short delay, unsigned short lost, unsigned short rxKBitRate)
- IRtcEngineEventHandlerEx::onRemoteVideoTransportStats(conn_id_t connId, uid_t uid, unsigned short delay, unsigned short lost, unsigned short rxKBitRate) to onRemoteVideoTransportStats(const RtcConnection& connection, uid_t uid, unsigned short delay, unsigned short lost, unsigned short rxKBitRate)
- IRtcEngineEventHandlerEx::onConnectionStateChanged(conn_id_t connId, CONNECTION_STATE_TYPE state, CONNECTION_CHANGED_REASON_TYPE reason) to onConnectionStateChanged(const RtcConnection& connection, CONNECTION_STATE_TYPE state, CONNECTION_CHANGED_REASON_TYPE reason)
- IRtcEngineEventHandlerEx::onNetworkTypeChanged(conn_id_t connId, NETWORK_TYPE type) to onNetworkTypeChanged(const RtcConnection& connection, NETWORK_TYPE type)
- IRtcEngineEventHandlerEx::onEncryptionError(conn_id_t connId, ENCRYPTION_ERROR_TYPE errorType) to onEncryptionError(const RtcConnection& connection, ENCRYPTION_ERROR_TYPE errorType)
- IRtcEngineEventHandlerEx::onUserAccountUpdated(uid_t uid, const char* userAccount) to onUserAccountUpdated(const RtcConnection& connection, uid_t remoteUid, const char* userAccount)

Delete:

- onJoinChannelSuccess()
- onRejoinChannelSuccess()
- onWarning()
- onError()
- onAudioQuality()
- onAudioDeviceStateChanged()
- onAudioMixingFinished()
- onRemoteAudioMixingEnd()
- onAudioEffectFinished()
- onVideoDeviceStateChanged()
- onMediaDeviceChanged()
- onBandwidthEstimationUpdated()
- onLastmileQuality()
- onApiCallExecuted()
- onCameraReady()
- onCameraFocusAreaChanged()
- onCameraExposureAreaChanged()
- onVideoStopped()
- onAudioMixingStateChanged()
- onRefreshRecordingServiceStatus()
- onStreamMessage(conn_id_t connId, uid_t uid, int streamId, const char* data, size_t length)
- onMediaEngineLoadSuccess()
- onMediaEngineStartCallSuccess()
- onAudioDeviceVolumeChanged()
- onRtmpStreamingStateChanged()
- onStreamPublished()
- onStreamUnpublished()
- onTranscodingUpdated()
- onStreamInjectedStatus()
- onAudioRoutingChanged()
- onChannelMediaRelayStateChanged()
- onChannelMediaRelayEvent()
- onLocalPublishFallbackToAudioOnly()
- onRemoteSubscribeFallbackToAudioOnly()
- onAudioTransportQuality()
- onVideoTransportQuality()
- onRecap()
- onCustomizedSei()
- onExtensionEvent()
- onExtensionStarted()
- onExtensionStopped()
- onExtensionError()
- onInternalEngineStatus()

# API (2021-05-10)

## IAgoraRtcEngine.h

Add:

- int pushDirectCdnStreamingCustomVideoFrame(media::base::ExternalVideoFrame* frame)

Modified:

- int startDirectCdnStreaming(IDirectCdnStreamingEventHandler* eventHandler, const char* publishUrl, const DirectCdnStreamingMediaOptions& options)

# API (2021-05-06)

1. Add switches for c++11 features.
2. Change displayId from view_t to uint32_t.

## IAgoraRtcEngine.h

Modified:

- struct ScreenCaptureConfiguration -> uint32_t displayId

# API (2020-05-05)

Support R/W recording audio frame observer.

## IAgoraRtcEngine.h

Modified: Move out definition of RAW_AUDIO_FRAME_OP_MODE_TYPE

# API (2021-05-06)

delete onRemoteVideoStreamInfoUpdated.

## IAgoraRtcEngine

Deleted:

- onRemoteVideoStreamInfoUpdated()

# API (2020-04-30)

## IAgoraRtcEngine.h

Add: only for ios

- bool isCameraAutoExposureFaceModeSupported()
- int setCameraAutoExposureFaceModeEnabled(bool enabled)

# API (2020-11-09)

## IAgoraRtcEngine.h

Add:

- onFirstRemoteAudioFrame(uid_t userId, int elapsed)
- onFirstRemoteAudioDecoded(uid_t userId, int elapsed)

## IAgoraRtcEngineEx.h

Add:

- onFirstRemoteAudioFrame(const RtcConnection& connection, uid_t userId, int elapsed)
- onFirstRemoteAudioDecoded(const RtcConnection& connection, uid_t userId, int elapsed)

# API (2021-04-25)

## IAgoraRtcEngineEx.h

Adding Code Comments Modified:

- REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE is not 100% guaranteed. When the remote user leaves, use onUserOffline to make a business decision
- REMOTE_AUDIO_STATE_REASON_REMOTE_OFFLINE is not 100% guaranteed. When the remote user leaves, use onUserOffline to make a business decision

# API (2021-05-31)

Add face detect for android.

## IAgoraRtcEngine.h

Add:

- enableFaceDetection(boolean enable)
- bool isFaceDetectSupported

# API (2020-04-22)

Add enableSoundPositionIndication and setRemoteVoicePosition

## IAgoraRtcEngine.h

Add: Add int enableSoundPositionIndication(bool enabled) Add int setRemoteVoicePosition(uid_t uid, double pan, double gain, conn_id_t connectionId)

# API (2021-04-21)

Support rtmp.

## IAgoraRtcEngine.h

Add:

- setDirectCdnStreamingAudioConfiguration()
- setDirectCdnStreamingVideoConfiguration()
- startDirectCdnStreaming()
- stopDirectCdnStreaming()
- updateDirectCdnStreamingMediaOptions()

# API (2021-04-20)

Add high level api for audio spectrum.

## IAgoraRtcEngine.h

Add:

- enableAudioSpectrumMonitor(int intervalInMS = 100)
- disableAudioSpectrumMonitor()
- registerAudioSpectrumObserver(agora::media::IAudioSpectrumObserver * observer)
- unregisterAudioSpectrumObserver(agora::media::IAudioSpectrumObserver * observer)

# API (2021-04-07)

## IAgoraRtcEngine.h

add:

- registerEncodedAudioFrame(AudioEncodedFrameObserverConfig, IAudioEncodedFrameObserver)

# API (2020-04-19)

Add audio effect interfaces

## IAgoraRtcEngine.h

Add: Add setVoiceBeautifierPreset, setAudioEffectPreset, setVoiceConversionPreset, setAudioEffectParameters, setVoiceBeautifierParameter and setVoiceConversionParameters in IRtcEngine for audio effect.

# API (2020-04-16)

## IAgoraRtcEngine.h

Add:

- Add bool isCameraZoomSupported()
- Add bool isCameraTorchSupported()
- Add bool isCameraFocusSupported()
- Add bool isCameraAutoFocusFaceModeSupported()
- Add int setCameraZoomFactor(float factor)
- Add float getCameraMaxZoomFactor()
- Add int setCameraFocusPositionInPreview(float positionX, float positionY)
- Add int setCameraTorchOn(bool isOn)
- Add int setCameraAutoFocusFaceModeEnabled(bool enabled)
- Add bool isCameraExposurePositionSupported()
- Add int setCameraExposurePosition(float positionXinView, float positionYinView)

# API (2020-04-01)

Add setExternalAudioSink and pullAudioFrame

## IAgoraRtcEngine.h

Add: Add bool enableAudioDevice for RtcEngineContext Add setExternalAudioSink(int sampleRate, int channels) Add pullAudioFrame(media::IAudioFrameObserver::AudioFrame* frame)

# API (2020-04-01)

## IAgoraRtcEngine.h

Modified: change annotation for onRejoinChannelSuccess elapsed

- "@param elapsed The time elapsed (ms) from the local user calling `joinChannel` until this event occurs." to "@paramelapsed Time elapsed (ms) from starting to reconnect until this callback is triggered."

# API (2020-03-26)

## IAgoraRtcEngine.h

Modified: change annotation for enableAudioVolumeIndication

# API (2020-03-25)

Add setExternalAudioSink and pullAudioFrame

## IAgoraRtcEngine.h

Add: Add bool enableAudioDevice for RtcEngineContext Add setExternalAudioSink(int sampleRate, int channels) Add pullAudioFrame(media::IAudioFrameObserver::AudioFrame* frame)

# API (2020-03-25)

Add createDataStream with config

## IAgoraRtcEngine.h

Add: Add createDataStream()

## IAgoraRtcEngineEx.h

Add: Add onStreamMessage with sentTs

# API (2021-04-29)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- Add callback onFacePositionChanged(int imageWidth, int imageHeight, const Rectangle* vecRectangle, const int* vecDistance, int numFaces)

# API (2021-03-23)

rtc_engine_i.h IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

# API (2020-03-19)

modify to adapt c++ 11

# API (2020-03-10)

Add remote video A/V sync offset

## IAgoraRtcEngine.h

Modified: Add `avSyncTimeMs` field for struct `RemoteVideoStats`

# API (2020-03-22)

Add api StartEchoTest(int)

## IAgoraRtcEngine.h

Add: Add api StartEchoTest(int) -`StartEchoTest(int)

# API (2021-02-22)

## IAgoraRtcEngine.h

Modified:

- Add stopAllEffect in LeaveChannelOptions

# API (2021-02-08)

## IAgoraMediaEngine.h

Fix "warning: unused parameter"

# API (2021-02-02)

Modify INetworkObserver.

## IAgoraRtcEngine.h

Modified: Add more callback to INetworkObserver

- Changes add onDownlinkNetworkInfoUpdated

# API (2021-01-30)

## IAgoraRtcEngine.h

Modified:

- fix a bug in ChannelMediaOptions

# API (2021-01-07)

## IAgoraRtcEngine.h

Remove:

- enum AUDIO_RECORDING_QUALITY_TYPE

Add:

- add startAudioRecording() for IRtcEngine

API (2021-01-03)

# API (2020-12-28)

## IAgoraRtcEngine.h

Add:

- onAudioSubscribeStateChanged()
- onVideoSubscribeStateChanged()
- onAudioPublishStateChanged()
- onVideoPublishStateChanged()

Remove: Remove useless callbacks.

# API (2020-11-26)

## IAgoraRtcEngine.h

Deleted: Remove function in IMetadataObserver.

- getMetadataSourceType() Modified: Modify onReadyToSendMetadata signature.
- bool onReadyToSendMetadata(Metadata &metadata) -> bool onReadyToSendMetadata(Metadata &metadata, VIDEO_SOURCE_TYPE source_type)

# API (2020-11-27)

## IAgoraRtcEngine.h

Modified: change agora::base::Optional to agora::Optional

# API (2020-12-24)

## IAgoraRtcEngine.h

Add: Add functions for IRtcEngine:

- adjustUserPlaybackSignalVolume(uid_t uid, int volume)

# API (2020-12-23)

## IAgoraRtcEngine.h

Deleted: Remove function in IRtcEngine.

- enableExternalAudioSourceLocalPlayback()

Add: Add functions for IRtcEngine:

- startPrimaryCustomAudioTrack()
- stopPrimaryCustomAudioTrack()
- startSecondaryCustomAudioTrack()
- stopSecondaryCustomAudioTrack()

## IAgoraMediaEngine.h

Add: Add functions for IMediaEngine:

- pushPrimaryAudioFrame()
- pushSecondaryAudioFrame()

# API (2020-12-8)

## IAgoraRtcEngine.h

Modified: add audioDelayMs in ChannelMediaOptions

# API (2020-11-27)

## IAgoraRtcEngine.h

Modified: change agora::base::Optional to agora::Optional

# API (2022-10-20)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified:

- add the description of the cross channel relay return value

# API (2020-11-23)

## IAgoraRtcEngine.h

Modified: IMediaPlayerSource -> IMediaPlayer

# API (2020-11-22)

Rename REMOTE_VIDEO_STREAM_TYPE.

## IAgoraRtcEngine.h

Modified:

- Changes Rename all REMOTE_VIDEO_STREAM_TYPE/REMOTE_VIDEO_STREAM_HIGH/REMOTE_VIDEO_STREAM_LOW to VIDEO_STREAM_TYPE/VIDEO_STREAM_HIGH/VIDEO_STREAM_LOW.

# API (2020-10-12)

Add function to set camera capture config

## IAgoraRtcEngine.h

Add:

- function setCameraCapturerConfiguration(const CameraCapturerConfiguration& config)

# API (2020-09-27)

Add Mirror Mode in setLocalRenderMode / setRemoteRenderMode

## IAgoraRtcEngine.h

Modified: Add mirror mode parameter in the following function call

- setLocalRenderMode
- setRemoteRenderMode Deprecate setLocalVideoMirrorMode Deprecate old setLocalRenderMode Deprecate old setRemoteRenderMode

# API (2020-09-23)

Add Frame Process Mode for Video Frame Observer

# API (2020-11-26)

Support Media Relay service

## IAgoraRtcEngine.h

Add:

- startChannelMediaRelay
- updateChannelMediaRelay
- stopChannelMediaRelay

# API (2020-11-09)

Add event callback

## IAgoraRtcEngine.h

Add:

- `void onFirstLocalVideoFramePublished(int elapsed)`

# API (2020-10-20)

## IAgoraRtcEngine.h

Add: Add function in IVideoFrameObserver

- getVideoFrameProcessMode

# API (2020-09-22)

Support audio frame dump

## IAgoraRtcEngine.h

Add:

- startAudioFrameDump()
- stopAudioFrameDump()

# API (2020-09-16)

Update enableDualStreamMode API

## IAgoraRtcEngine.h

Add:

- `int enableDualStreamMode(VIDEO_SOURCE_TYPE sourceType, bool enabled)`

Modified:

- `int enableDualStreamMode(bool enabled, const SimulcastStreamConfig& streamConfig)` to `int enableDualStreamMode(VIDEO_SOURCE_TYPE sourceType, bool enabled, const SimulcastStreamConfig& streamConfig)`

# API (2020-09-11)

Delete enum NETWORK_TYPE and add callback onNetworkTypeChanged

## IAgoraRtcEngine.h

Deleted:

- Deleted enum NETWORK_TYPE

# API (2020-08-30)

add remote video frame loss rate

## IAgoraRtcEngine.h

Modified: Add `frameLossRate` field for struct `RemoteVideoStats`

# API (2020-08-14)

Support get video source type

## IAgoraRtcEngine.h

Add:

- IRtcEngine::enableEncryption

API (2020-09-10)

# API (2020-08-11)

Support leave channel with options, options determines whether to do something when leave the channel.

## IAgoraRtcEngine.h

Add: When LeaveChannelOptions::stopAudioMixing = false, after leave the channel is still playing and mixing the music file.

- struct LeaveChannelOptions.
- leaveChannel(const LeaveChannelOptions& options)

# API (2020-08-11)

Support adjust loopback recording volume.

## IAgoraRtcEngine.h

Add:

- adjustLoopbackRecordingVolume()
- getLoopbackRecordingVolume()

API (2020-08-02)

# API (2020-08-03)

Modify data stream.

## IAgoraRtcEngine.h

Modified: Modify data stream apis

- Changes: add input args connectionId for createDataStream.
- Changes: add input args connectionId for sendStreamMessage.

# API (2020-07-31)

Make release() pure virtual in IMediaEngine.

## IAgoraMediaEngine.h

Modified: Make release() pure virtual in IMediaEngine.

# API (2020-07-07)

Modify ChannelMediaOptions.

## IAgoraRtcEngine.h

Modified: Rename pcmDataOnly of ChannelMediaOptions.

- Changes: Rename pcmDataOnly of ChannelMediaOptions to enableAudioRecordingOrPlayout.

# API (2020-07-06)

## IAgoraRtcEngine.h

Modify: Change include dir.

# API (2020-07-01)

## IAgoraRtcEngine.h

Modify: Remove string UID.

# API (2020-06-27)

Make include path correct

# API (2020-07-03)

Refine audio effect API

## IAgoraRtcEngine.h

Modified:

- int playAllEffects(double pitch, double pan, int gain) to int playAllEffects(int loopCount, double pitch, double pan, int gain, bool publish = false)

# API (2020-06-22)

Modify ChannelMediaOptions.

## IAgoraRtcEngine.h

Modified: Add pcmDataOnly to ChannelMediaOptions.

- Changes: Add member pcmDataOnly for ChannelMediaOptions.

# API (2020-06-22)

Add API

## IAgoraRtcEngine.h

Add: Extend enableDualStreamMode

- `int enableDualStreamMode(bool enabled, const SimulcastStreamConfig& streamConfig)`

# API (2020-06-21)

Refine audio effect interface

## IAgoraRtcEngine.h

Add:

- getEffectsVolume()
- setEffectsVolume()

Modified:

- preloadEffect(int soundId, const char* filePath)
- playEffect(int soundId, int loopCount, double pitch, double pan, int gain, bool publish = false)
- playEffect(int soundId, const char* filePath, int loopCount, double pitch, double pan, int gain, bool publish = false)

# API (2020-06-17)

Refine ChannelMediaOptions

## IAgoraRtcEngine.h

Modified: Refine ChannelMediaOptions

- `bool publishCameraTrack` to `base::Optional<bool> publishCameraTrack`
- `bool publishAudioTrack` to `base::Optional<bool> publishAudioTrack`
- `bool publishScreenTrack` to `base::Optional<bool> publishScreenTrack`
- `bool publishCustomAudioTrack` to `base::Optional<bool> publishCustomAudioTrack`
- `bool publishCustomVideoTrack` to `base::Optional<bool> publishCustomVideoTrack`
- `bool publishEncodedVideoTrack` to `base::Optional<bool> publishEncodedVideoTrack`
- `bool publishMediaPlayerAudioTrack` to `base::Optional<bool> publishMediaPlayerAudioTrack`
- `bool publishMediaPlayerVideoTrack` to `base::Optional<bool> publishMediaPlayerVideoTrack`
- `bool autoSubscribeAudio` to `base::Optional<bool> autoSubscribeAudio`
- `bool autoSubscribeVideo` to `base::Optional<bool> autoSubscribeVideo`
- `bool publishMediaPlayerId` to `base::Optional<bool> publishMediaPlayerId`
- `bool clientRoleType` to `base::Optional<CLIENT_ROLE_TYPE> clientRoleType`
- `bool defaultVideoStreamType` to `base::Optional<REMOTE_VIDEO_STREAM_TYPE> defaultVideoStreamType`
- `bool channelProfile` to `base::Optional<CHANNEL_PROFILE_TYPE> channelProfile`

# API (2020-06-16)

Modify ChannelMediaOptions.

## IAgoraRtcEngine.h

Modified: Add pcmDataOnly to ChannelMediaOptions.

- Changes: Add member pcmDataOnly for ChannelMediaOptions.

# API (2020-06-16)

Add interface to audio mixing volume

## IAgoraRtcEngine.h

Add:

- adjustAudioMixingPublishVolume()
- getAudioMixingPublishVolume()
- adjustAudioMixingPlayoutVolume()
- getAudioMixingPlayoutVolume()

# API (2020-06-16)

## IAgoraRtcEngine.h

Add:

- Add enableLoopbackRecording(conn_id_t connectionId, bool enabled), for supporting to send audio pcm data got from loopback device by a specific connection.

# API (2020-06-09)

Modify the callback onBandwidthEstimationUpdated

## IAgoraRtcEngine.h

Modified: Modify the declaration of onBandwidthEstimationUpdated

- Changes "virtual void onBandwidthEstimationUpdated(int targetBitrateBps)" to "virtual void onBandwidthEstimationUpdated(const NetworkInfo& info)"

# API (2020-06-03)

## IAgoraRtcEngine.h

Add:

- createMediaPlayer()
- destroyMediaPlayer(agora_refptr<IMediaPlayerSource> media_player)

Modified: Audio effect interface

preloadEffect(int soundId, const char* filePath) -> preloadEffect(int& soundId, const char* filePath, int loopCount) playEffect(int& soundId, const char* filePath, int loopCount, double pitch, double pan, int gain, bool publish) -> playEffect(int soundId, const char* filePath, int loopCount, double pitch, double pan, int gain, bool publish = false) getEffectsVolume() -> getVolumeOfEffect(int soundId)

Add a new function playEffect(int soundId, double pitch, double pan, int gain, bool publish). It should be used with preloadEffect(). Add playAllEffects(double pitch, double pan, int gain). Add unloadAllEffects().

Remove setEffectsVolume(int volume)

# API (2020-06-01)

## IAgoraRtcEngine.h

Add:

- enableLocalVideoFilter(const char*, const char*, agora_refptr<IVideoFilter>, int)
- enableRemoteVideoFilter(const char*, const char*, agora_refptr<IVideoFilter>, int)

# API (2020-05-29)

## IAgoraRtcEngine.h

Modified:

- Move definition of type AREA_CODE from IAgoraRtcEngine.h to AgoraBase.h

# API (2020-05-25)

## IAgoraRtcEngine.h

Add:

- Add AREA_CODE type define

# API (2020-05-20)

## IAgoraMediaPlayer.h

Modified:

- Refine the APIs' order of IMediaPlayer.
- Remove 'const' from the parameter of onPositionChanged() in IMediaPlayerObserver since unnecessary.

# API (2020-05-14)

Deprecated setAudioProfile(AUDIO_PROFILE_TYPE, AUDIO_SCENARIO_TYPE), add setAudioProfile(AUDIO_PROFILE_TYPE)

## IAgoraRtcEngine.h

Add:

- setAudioProfile(AUDIO_PROFILE_TYPE)

Deprecate:

- setAudioProfile(AUDIO_PROFILE_TYPE, AUDIO_SCENARIO_TYPE)

# API (2020-05-13)

## AgoraBase.h

Modified:

- API annotations for EncodedVideoFrameInfo::framesPerSecond

IAgoraRtcEngine.h

# API (2020-05-12)

Add:

## IAgoraMediaPlayer.h

Add relative log and unregister API in player. setLogFile() setLogFilter() unregisterVideoFrameObserver() unregisterAudioFrameObserver()

# API (2020-05-12)

Move lastmile and connection state enum to AgoraBase.h

## IAgoraRtcEngine.h

Deleted: Delete lastmile and connection state enum

- Deleted enum LASTMILE_PROBE_RESULT_STATE
- Deleted struct LastmileProbeOneWayResult
- Deleted struct LastmileProbeResult
- Deleted struct LastmileProbeConfig
- Deleted enum CONNECTION_CHANGED_REASON_TYPE
- Deleted enum AUDIO_REVERB_PRESET
- Deleted enum VOICE_CHANGER_PRESET
- Deleted struct ScreenCaptureParameters
- Deleted struct VideoCanvas

# API (2020-05-09)

## IAgoraRtcEngine.h

Add:

Add AUDIO_SCENARIO_TYPE audioScenario for RtcEngineContext

# API (2020-05-08)

Some structures are consistent with the definition in the old SDK, resulting in conflicts when the new and old SDK are used at the same time. Therefore, change the above the structures to agora::media::base namespace

## AgoraBase.h

Deleted:

- AudioPcmFrame
- RENDER_MODE_TYPE
- IVideoFrameObserver
- IAudioFrameObserver

## AgoraMediaBase.h

Add: Move defines to agora::media::base namespace

- AudioPcmFrame
- RENDER_MODE_TYPE
- IVideoFrameObserver
- IAudioFrameObserver
- typedef void* view_t;
- typedef const char* user_id_t;

## IAgoraMediaEngine.h

Modified: Needed changes to namespace agora::media::base

## IAgoraMediaPlayer.h

Modified: Needed changes to namespace agora::media::base

## IAgoraRtcEngine.h

Modified: Needed changes to namespace agora::media::base

# API (2020-05-08)

## AgoraBase.h

Modified:

- Move LOG_LEVEL from AgoraBase.h to IAgoraLog.h

# API(2021-11-14)

Remove some dead code

## IAgoraRtcEngine.h

Deleted:

- pushPrimaryAudioFrame()
- pushSecondaryAudioFrame()

# API (2020-05-06)

IAgoraRtcEngine.h Added:

- Add interface setLogLevel(LOG_LEVEL)

# API (2020-04-29)

Modified:

API annotations in the IAgoraRtcEngine.h file.

# API (2020-04-29)

Refine LocalVideoStats and RemoteVideoStats

## IAgoraRtcEngine.h

Add: Add fields in LocalVideoStats

- encoderOutputFrameRate
- rendererOutputFrameRate
- targetFrameRate

Add fields in RemoteVideoStats

- decoderOutputFrameRate
- rendererOutputFrameRate
- packetLossRate
- totalFrozenTime
- frozenRate

Deleted: Remove fields in RemoteVideoStats

- userId
- receivedFrameRate

# API (2020-04-30)

Modify comments of CHANNEL_PROFILE_TYPE default setting.

## AgoraBase.h

Modified: Short description

- Changes the comment of CHANNEL_PROFILE_TYPE default setting from CHANNEL_PROFILE_COMMUNICATION to CHANNEL_PROFILE_LIVE_BROADCASTING.

# API (2020-04-28)

## AgoraBase.h

Add:

- Add enum CHANNEL_PROFILE_COMMUNICATION_1v1 for CHANNEL_PROFILE_TYPE

## IAgoraRtcEngine.h

Add:

- Add field channelProfile for RtcEngineContext

# API (2020-04-27)

AgoraRefPtr.h Add: Add interface HasOneRef

# API (2020-04-22)

## AgoraBase.h

Modified: Initialize member variable for RtcStats and RemoteAudioStats.

# API (2020-04-20)

## AgoraBase.h

Modified: Change default value of agora::rtc::VideoFormat from 0, 0, 0 to 640(width), 480(height), 15(fps)

# API (2020-04-16)

Fix a typo

## AgoraMediaBase.h

Modified: Change PLAY_ERROR_SRC_BUFFER_UNDERFLOW to PLAYER_REASON_SRC_BUFFER_UNDERFLOW.

# API (2020-04-17)

Add Log Levels

## AgoraBase.h

Add: Add enum LOG_LEVEL for logging severities.

# API (2020-04-13)

Add internal states

## AgoraMediaBase.h

Modified: Add internal states for Media Player Source.

# API (2020-04-10)

Add field in struct LocalAudioStats

## IAgoraRtcEngine.h

Modified: Move LocalAudioStats to AgoraBase.h add internalCodec in struct LocalAudioStats

- struct LocalAudioStats
- internalCodec

# API (2020-04-10)

Refine code comments

## IAgoraRtcEngine.h

Modified: Refine code comment for onRemoteAudioStats

# API (2020-04-10)

## IAgoraRtcEngine.h

Add:

- IAgoraRtcEngine.h
- class IMetadataObserver
- class IRtcEngine
  - API registerMediaMetadataObserver()

# API (2020-04-10)

## AgoraMediaBase.h

Modified:

- Refine the enum names of MEDIA_PLAYER_STATE and add some internal ones.

## IAgoraMediaPlayer.h

Modified:

- Change one parameter's type of getStreamCount() and getStreamInfo() from int to int64_t to get aligned with the other APIs.

# API (2020-04-10)

## AgoraBase.h

Modified:

- Modified AUDIO_PROFILE_TYPE
- Modified AUDIO_SCENARIO_TYPE

Deleted:

- Deleted AUDIO_PROFILE_IOT
- Deleted AUDIO_SCENARIO_IOT

# API (2020-04-10)

## IAgoraRtcEngine.h

Added: Support sending custom event to argus

- IRtcEngine::sendCustomReportMessage()

# API (2020-03-27)

## IAgoraRtcEngine.h

Modified:

- Modified the comment of onLastmileQuality
- Modified the comment of startLastmileProbeTest

Deleted:

- Deleted enableLastmileTest()
- Deleted disableLastmileTest()

# API (2020-03-18)

## AgoraBase.h

Modified:

- Replace FEATURE_ENABLE_UT with FEATURE_ENABLE_UT_SUPPORT

# API (2020-03-16)

add field in struct MediaStreamInfo

## AgoraMediaBase.h

Add: add audioBitsPerSample in struct MediaStreamInfo

- struct MediaStreamInfo
- audioBitsPerSample

# API (2020-03-12)

## AgoraMediaBase.h

Deleted:

- Some comments in struct PacketOptions

# API (2020-03-09)

## IAgoraRtcEngine.h

Modified:

- updateChannelMediaOptions provider default connectionId param is agora::rtc::DEFAULT_CONNECTION_ID

# API (2020-03-09)

## IAgoraRtcEngine.h

Modified:

- Modified the comment of member availableBandwidth for struct LastmileProbeOneWayResult
- Modified the comment of member expectedUplinkBitrate for struct LastmileProbeConfig

# API (2020-03-05)

## AgoraMediaBase.h

Deleted:

- payload_type and ssrc fields in struct PacketOptions

API (2020-03-03)

## AgoraBase.h

Modified:

- Change field name of sampleCount in EncodedAudioFrameInfo to samplesPerChannel

API (2020-02-26)

# API (2020-02-27)

Changes for warning

## AgoraBase.h

Modified:

- Add warning WARN_CHANNEL_CONNECTION_UNRECOVERABLE;

# API (2020-02-21)

## AgoraBase.h

Add:

- struct RemoteAudioStats
- LOCAL_AUDIO_STREAM_ERROR::LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY
- LOCAL_AUDIO_STREAM_ERROR::LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE
- RtcStats::txAudioBytes
- RtcStats::txVideoBytes
- RtcStats::rxAudioBytes
- RtcStats::rxVideoBytes

Modified:

- Changes LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 3 to LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE = 5
- Changes REMOTE_AUDIO_STREAM_STATE to REMOTE_AUDIO_STATE
- Changes REMOTE_AUDIO_STREAM_REASON to REMOTE_AUDIO_STATE_REASON

## IAgoraRtcEngine.h

Add:

- onLocalAudioStats()
- onRemoteAudioStats()

Modified:

- Changes onFirstLocalAudioFrame to onFirstLocalAudioFramePublished
- Changes onLocalAudioStateChanged(LOCAL_AUDIO_STREAM_STATE) to onLocalAudioStateChanged(LOCAL_AUDIO_STREAM_STATE, LOCAL_AUDIO_STREAM_ERROR)
- Changes onRemoteAudioStateChanged(uid_t, REMOTE_AUDIO_STREAM_STATE) to onRemoteAudioStateChanged(uid_t, REMOTE_AUDIO_STATE, REMOTE_AUDIO_STATE_REASON, int)

Deleted:

- Deleted onRemoteAudioStats()
- Deleted onUserMuteAudio()
- Deleted onMicrophoneEnabled

# API (2020-02-20)

Support lastmile probe test

## Add:

- IAgoraRtcEngine.h
  - class IRtcEngine
    - add API startLastmileProbeTest
    - add API stopLastmileProbeTest

# API (2020-02-19)

## Modified:

Modified API annotations in the following files:

- AgoraBase.h
- AgoraMediaBase.h
- IAgoraRtcEngine.h

# API (2020-02-18)

## Modified:

- AgoraBase.h
  - struct `RtcStats`, rename field `cid` into `connectionId`

# API (2020-02-15)

API changes for unifying the definition of connection state and adding the API for getting connection state.

## IAgoraRtcEngine.h

Add: Add the API for getting the connection state.

- CONNECTION_STATE_TYPE IRtcEngine::getConnectionState(conn_id_t connectionId)

Deleted: Delete the definition of enum CONNECTION_STATE_TYPE.

- Deleted enum CONNECTION_STATE_TYPE

## AgoraBase.h

Add: Add the definition for connection state.

- enum CONNECTION_STATE_TYPE

# API (2020-02-15)

## Modified:

- IAgoraRtcEngine.h
  - Modified the comment of member publishMediaPlayerAudioTrack for struct ChannelMediaOptions

# API (2020-02-12)

## Modified:

- AgoraBase.h
  - remove isScreenCapture and syncWithAudio in track info

# API (2020-02-12)

## Modified:

- AgoraMediaBase.h
  - Add PLAY_ERROR_SRC_BUFFER_UNDERFLOW

# API (2020-02-12)

## Add:

- IAgoraRtcEngine.h
  - AUDIO_REVERB_PRESET definition
  - VOICE_CHANGER_PRESET definition
  - class IRtcEngine
    - API setLocalVoiceReverbPreset()
    - API setLocalVoiceChanger()

# API (2020-02-11)

## Add:

- IAgoraParameter.h
  - Add KEY_RTC_VIDEO_RESEND and KEY_RTC_AUDIO_RESEND

# API (2022-08-25)

## Remove:

- IAgoraRtcEngine.h
  - remove IRtcEngineParameter as is chanage name to IAgoraParameter

# API (2020-02-13)

## Modified:

- AgoraRefPtr.h
  - Refine Agora shared pointer, re-struct code

# API (2020-02-17)

## Add:

- AgoraBase.h
  - Add HEAAC2

# API (2020-02-10)

## Add:

- IAgoraRtcEngine.h
  - class IRtcEngine
    - API setLogFileSize()

# API (2020-02-06)

## Add:

- IAgoraRtcEngine.h
  - Add member publishMediaPlayerAudioTrack for struct ChannelMediaOptions

API (2020-02-05)

## Add:

- AgoraRefPtr.h
  - Add member function reset() for class agora_refptr

# API (2020-01-19)

## Modified:

- IAgoraRtcEngine.h AgoraBase.h
  - Move enum CHANNEL_PROFILE_TYPE to AgoraBase.h

# API (2020-01-15)

## Add:

- IAgoraRtcEngine.h
  - class IRtcEngine
    - API startScreenCapture()

# API (2020-01-13)

## Modified:

- AgoraMediaBase.h
  - Rename PLAYER_STATE_OPEN_COMPLETE of MEDIA_PLAYER_STATE to PLAYER_STATE_OPEN_COMPLETED

# API (2020-01-09)

## Add:

- IAgoraMediaPlayer.h
  - class IMediaPlayer
    - API initialize()

# API (2020-01-08)

## Add:

- IAgoraMediaPlayer.h
  - Add the following class
    - class IMediaPlayer
    - class IMediaPlayerObserver
- AgoraBase.h
  - Add the following class
    - class IVideoFrameObserver
    - class IAudioFrameObserver

# API (2019-12-25)

## Modified:

- IAgoraRtcEngine.h
  - change API enableInEarMonitoring()

# API (2019-12-15)

## Add:

- IAgoraRtcEngine.h
  - add API enableInEarMonitoring()

## Modified:

- AgoraMediaBase.h
  - Delete unused class AudioFrame
  - Move ExternalVideoFrame from IAgoraMediaEngine.h
  - Move VIDEO_PIXEL_FORMAT definition out from class ExternalVideoFrame.
  - Move VideoFrame out from class IVideoFrameObserver.
- IAgoraMediaEngine.h
  - Move ExternalVideoFrame from this file to AgoraMediaBase.h
  - Delete the following class
    - class IVideoFrame
    - class IExternalVideoRenderCallback
    - class IExternalVideoRender
    - class IExternalVideoRenderFactory
  - Delete method registerVideoRenderFactory() in class IMediaEngine
- IAgoraRtcEngine.h
  - all platform supports setInEarMonitoringVolume()

## Deleted:

- Delete class MEDIA_ENGINE_EVENT_CODE_TYPE in IAgoraRtcEngine.h
- Delete API setPlaybackDeviceVolume in interface IRtcEngine
- Delete API setVideoProfile in interface IRtcEngine
- Delete class RtcEngineParameters in IAgoraRtcEngine.h

# API (2019-11-25)

## Add:

## Modified:

- AgoraMediaBase.h
  - Delete unused class AudioFrame
  - Move ExternalVideoFrame from IAgoraMediaEngine.h
  - Move VIDEO_PIXEL_FORMAT definition out from class ExternalVideoFrame.
  - Move VideoFrame out from class IVideoFrameObserver.
- IAgoraMediaEngine
  - Move ExternalVideoFrame from this file to AgoraMediaBase.h
  - Delete the following class
    - class IVideoFrame
    - class IExternalVideoRenderCallback
    - class IExternalVideoRender
    - class IExternalVideoRenderFactory
  - Delete method registerVideoRenderFactory() in class IMediaEngine

## Deleted:

- IAgoraLiveEngine.h
- IAgoraLivePublisher.h
- IAgoraLiveSubscriber.h
- IAgoraSignalingEngine.h

# API (2021-03-22)

## IAgoraRtcEngine.h

Add:

# - enableInEarMonitoring(bool enabled, bool includeAudioFilter) to enableInEarMonitoring(bool enabled, int includeAudioFilters)

## IAgoraRtcEngine.h

Modify: moidfy enableAudioVolumeIndication support vad

# API(2021-09-30)

## IAgoraRtcEngine.h

*Modified:**

- add API setLocalPublishFallbackOption(STREAM_FALLBACK_OPTIONS option)
- add API setRemoteSubscribeFallbackOption(STREAM_FALLBACK_OPTIONS option)

  # API (2021-11-18)

## IAgoraRtcEngine.h

Add: virtual int setCloudProxy(CLOUD_PROXY_TYPE proxyType) = 0;

# API (2021-09-29)

## IAgoraRtcEngine.h

Add: virtual int setLocalAccessPoint(const LocalAccessPointConfiguration& config) = 0;

# API (2021-09-15)

## Add:

- IAgoraRtcEngineEx.h -add API enableFishCorrection(bool enabled, const FishCorrectionParams& params)

# API (2022-08-16)

## IAgoraRtcEngine.h

Modified:

- Add AdvancedConfigInfo in LocalAccessPointConfiguration;

# API (2022-03-22)

## Add:

- IAgoraRtcEngine.h -remove k

  # API (2022-03-11)

## IAgoraRtcEngine.h

Add:

- virtual void onProxyConnected(const char* channel, uid_t uid, PROXY_TYPE proxyType, const char* localProxyIp, int elapsed)

# API (2022-04-06)

Modify IRtcEngine.

## IAgoraRtcEngine.h

Modified: Rename adjustLoopbackRecordingVolume of IRtcEngine.

- Changes: Rename adjustLoopbackRecordingVolume of IRtcEngine to adjustLoopbackSignalVolume.

# API (2022-08-22)

IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

Modified: Modify comment for muteAllRemoteVideoStreams. Cancel deprecated for onUserMuteVideo.

# API (2022-04-27)

## Add:

- IAgoraRtcEngine.h -add API setAudioScenario(AUDIO_SCENARIO_TYPE scenario)

# API (2022-05-16)

## Add:

- IAgoraRtcEngine.h Modified: ScreenCaptureSourceInfo pointer to NSNumber to Number

# API (2022-5-21)

## Add:

- IAgoraRtcEngine.h Add: virtual int getNetworkType() = 0

# API (2021-06-29)

## IAgoraRtcEngine.h

Delete:

- delete enableFishCorrection

IAgoraRtcEngineEx.h remove deprecated API and callback of CDN stream

## Deleted:

addPublishStreamUrlEx

IAgoraRtcEngine.h

## Deleted:

addPublishStreamUrl removePublishStreamUrl setLiveTranscoding onStreamUnpublished onStreamPublished

# API (2022-08-29)

## Add:

- IAgoraRtcEngine.h Modified: add minimizeWindow field in ScreenCaptureSourceInfo

# API (2022-09-23)

## Modified:

- NGIAgoraLocalUser.h,IAgoraRtcEngine.h,IAgoraRtcEngineEx.h,AgoraRtcEngineKit.h,AgoraRtcEngineKitEx.h,RtcEngine.java,RtcEngineEx.java,RtcEngineImpl.java Modified: setSubscribe(audio,video)(Black,white)list api to block,allow

# API (2022-09-14)

## Add:

- IAgoraRtcEngine.h Modified: add domainLimit field in RtcEngineContext

# API (2022-10-24)

- IAgoraRtcEngine.h Modified: STREAM_FALLBACK_OPTIONS default value change to Low(1).

# API (2021-09-25)

## Add:

- IAgoraRtcEngine.h
  - virtual int setHighPriorityUserList(uid_t* uidList, int uidNum, STREAM_FALLBACK_OPTIONS option) = 0;
- IAgoraRtcEngineEx.h
  - virtual int setHighPriorityUserListEx(uid_t* uidList, int uidNum, STREAM_FALLBACK_OPTIONS option, const RtcConnection& connection) = 0;

# API (2023-01-19)

## IAgoraRtcEngine.h.h

Add:

- enum MEDIA_DEVICE_TYPE add AUDIO_VIRTUAL_PLAYOUT_DEVICE and AUDIO_VIRTUAL_RECORDING_DEVICE

# API (2023-01-30)

## IAgoraRtcEngine.h

Add

- virtual int queryScreenCaptureCapability()

# API (2023-01-30)

## IAgoraRtcEngine.h

Modified:

- virtual int setScreenCaptureScenario(SCREEN_SCENARIO_TYPE screenScenario)

# API (2023-03-02)

## IAgoraRtcEngine.h

Modified:

- Add int e2eDelay for RemoteVideoStats struct

# API (2023-03-28)

## IAgoraRtcEngine.h/RtcEngine.java/AgoraRtcEngineKit.h

Add: getNtpWallTimeInMs

# API (2023-03-31)

## IAgoraRtcEngine.h/RtcEngine.java/AgoraRtcEngineKit.h

Deleted: getNtpTimeInMs

# API (2024-05-13)

## IAgoraRtcEngineEx.h

Add:

- int leaveChannelWithUserAccountEx

# API (2023-03-31)

## IAgoraRtcEngine.h

ADD: setRouteInCommunicationMode

# API (2023-06-12)

## IAgoraRtcEngine.h

ADD: publishMixedAudioTrack

# API (2023-07-03)

## IAgoraRtcEngine.h

Add:

- int queryDeviceScore

# API (2023-07-04)

## IAgoraRtcEngine.h

Add:

- Add bool isCameraExposureSupported()
- Add int setCameraExposureFactor(float factor)

# API (2023-08-08)

## IAgoraRtcEngine.h

Add:

- Add void onVideoLayoutInfo(uid_t uid, int width, int height, int layoutNumber,const VideoLayout* layoutlist)

# API (2023-09-21)

## IAgoraRtcEngine.h

Modify:

- rename void onTranscodedStreamLayoutInfo(uid_t uid, int width, int height, int layoutCount,const VideoLayout* layoutlist)

# API (2024-01-02)

## IAgoraRtcEngine.h

Add:

- Add int writeLog(commons::LOG_LEVEL level, const char* fmt, ...)

# API (2024-02-23)

## IAgoraRtcEngine.h

Add:

- Add int setAudioMixingPlaybackSpeed(int speed)

# API (2024-03-07)

IAgoraRtcEngine.h ADD:

- virtual int queryCameraFocalLengthCapability()

# API (2024-03-13)

IAgoraRtcEngine.h Modify: struct CameraCapturerConfiguration

# API (2023-11-09)

IAgoraRtcEngine.h ADD:

- virtual void onCameraCapturerConfigurationChanged(int direction, int focalLengthType, int width, int height, int frameRate)

# API (2024-03-20)

IAgoraRtcEngine.h Delete: delete duplicate code

- virtual int queryCameraFocalLengthCapability()

# API (2024-04-03)

## IAgoraRtcEngine.h

Modify: rename api

- Modified: virtual bool isCameraCenterStageSupported()
- Modified: virtual int enableCameraCenterStage(bool enabled)

# API (2024-04-08)

## IAgoraRtcEngine.h

Deleted:

- virtual void onCameraCapturerConfigurationChanged()

# API (2023-04-29)

IAgoraRtcEngine.h ADD:

- virtual int enableVoiceAITuner(bool enabled, VOICE_AI_TUNER_TYPE type)

# API (2024-06-11)

IAgoraRtcEngine.h Modify: struct CameraCapturerConfiguration

# API (2024-07-23)

IAgoraRtcEngine.h Add:

- virtual int startLocalAudioMixer()
- virtual int updateLocalAudioMixerConfiguration()
- virtual int stopLocalAudioMixer()

# API (2024-07-30)

## IAgoraRtcEngine.h

Add

- virtual int setExternalMediaProjection(void* mediaProjection)

# API (2024-08-21)

IAgoraRtcEngine.h Add:

- int queryHDRCapability(VIDEO_MODULE_TYPE videoModule, HDR_CAPABILITY& capability)

# API(2024-08-27)

## IAgoraRtcEngine.h

Add:

- Add onPermissionGranted

# API (2024-09-14)

## IAgoraRtcEngineEx.h

Add:

- Add int playEffectEx
- Add int preloadEffectEx

# API (2024-12-12)

## IAgoraRtcEngine.h AgoraRtcEngineKit.h AgoraRtcEngineDelegate.h rtc_engine_i.h

Modify: description change struct STREAM_FALLBACK_OPTIONS Deleted:

- virtual int setLocalPublishFallbackOption(STREAM_FALLBACK_OPTIONS option) = 0;
- virtual void onLocalPublishFallbackToAudioOnly(bool isFallbackOrRecover)

# API (2025-07-30)

## IAgoraRtcEngine.h

Modified: adding memver variable

- add encodedFrameDepth in LocalVideoStats