Agora C++ API Reference for All Platforms

CHANGES

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

# Agora Low 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()

# API (2025-06-20)

## NGIAgoraLocalUser.h

Add: Add callback functions of remote audio context info.

- virtual void onRemoteAudioContextInfoChanged()

# API (2025-04-28)

## NGIAgoraAudioTrack.h

Add:

- int enableAudioBurstAccelerate(bool enable)

# API (2025-03-25)

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_VIDEO_OFFICE_TARGET_EXE_LIST
- Add CONFIGURABLE_KEY_VIDEO_WPS_TARGET_EXE_LIST

# API (2025-03-31)

## config_engine_i.h

Modified:

- Add CONFIGURABLE_KEY_VIDEO_SHOW_AGORA_BORDER_WHEN_WINDOW_MAXIMIZED

# API (2024-12-24)

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_VIDEO_FORCE_DISABLE_WGC_FRAME_DIFF

# API (2025-07-15)

NGIAgoraExtensionScreenSource.h Add add a member(bool disable_frame_transparent_check) for struct VideoCaptureConfig

# API (2024-10-12)

## NGIAgoraSyncClient.h

Modified:

- Add default initialze param in construct

# API (2024-09-24)

## config_engine_i.h

Modified:

- Add CONFIGURABLE_KEY_VIDEO_INGNORE_UNRESPONSIVE

# API (2024-09-20)

## NGIAgoraExtensionScreenSource.h

Modified:

- Add captureMode in VideoCaptureConfig

# API (2024-09-03)

## NGIAgoraExtensionScreenSource.h

Modified:

- Modify type of display_id from uint32_t to int64_t

# API (2024-08-27)

## NGIAgoraAudioTrack.h

Modified:

- add aosl_ref_t default paramters to ILocalAudioTrack::setMaxBufferedAudioFrameNumber

# API (2024-06-12)

## agora_service_i.h

Add:

- int setExternalRemoteEglContext(void* eglContext)

# API (2024-08-09)

## NGIAgoraLocalUser.h

Add:

- Add "virtual int setRemoteRenderTargetFps(int targetFps) = 0;"

# API (2024-07-15)

NGIAgoraAudioTrack.h Modified: -Modify a parameter(AudioEncFrameRecvParams& recvParams) for method registerAudioEncodedFrameReceiver

# API (2024-07-15)

## NGIAgoraExtensionProvider.h

Add:

- Add VIDEO_POST_CAPTURE_FILTER, VIDEO_PRE_PREVIEW_FILTER, VIDEO_PRE_ENCODER_FILTER for EXTENSION_TYPE

# API (2024-07-14)

## NGIAgoraAudioTrack.h

Add:

- new_e2e_delay_ms

# API (2024-07-15)

## NGIAgoraSyncClient.h

Add:

- Add virtual int32_t addReadable(const char* database, const char* coll, const char* readable, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
- Add virtual int32_t removeReadable(const char* database, const char* coll, const char* readable, aosl_ref_t ares = AOSL_REF_INVALID) = 0;

# API (2024-07-08)

config_engine_i.h Add:

- Add CONFIGURABLE_KEY_VIDEO_FALBACK_TO_GDI_WITH_WGC_BORDER_ISSUE

# API (2024-07-05)

NGIAgoraExtensionScreenSource.h Add add a member(bool disable_avf) for struct VideoCaptureConfig

# API (2024-07-02)

LocalAudioTrack add setMaxBufferedAudioFrameNumber and ClearSenderBuffer

## NGIAgoraAudioTrack.h

Add:

- setMaxBufferedAudioFrameNumber
- ClearSenderBuffer

# API (2024-07-01)

NGIAgoraVideoTrack.h Add: add a member(decoder_type) for struct RemoteVideoTrackStats

- uint32_t decoder_type

# API (2024-06-05)

NGIAgoraAudioTrack.h Add:

- RemoteAudioTrackStats::full_frozen_time_80_ms
- RemoteAudioTrackStats::full_frozen_time_200_ms

  # API (2024-06-06)

Changes for media recorder

## NGIAgoraMediaNodeFactory.h

Add:

- add createMediaRecorder()

# API (2024-06-06)

Changes for media recorder Add:

- Add a header: IAgoraMediaRecorder2.h

# API (2024-05-20)

Changes for AudioSessionConfiguration

## IAgoraService.h

Add:

- category for struct AudioSessionConfiguration

# API (2024-05-08)

Modified: add ares parameter for media relay interface

# API (2024-04-30)

Adaption for rtm2 in sync interface

## NGIAgoraSyncClient.h

Modified:

- Add more enum value as return value

# API (2024-06-04)

modify createCollection

## NGIAgoraSyncClient.h

Modified:

- remove parameter const char** writable, int writeSize

# API (2024-04-02)

## NGIAgoraVideoFrame.h

Add:

- Add fence_object in TextureInfo

# API (2024-04-02)

## IAgoraService.h

Add:

- add setLogWriter && releaseLogWriter

# API (2024-04-02)

Audio metadata

## NGIAgoraLocalUser.h

Modified:

- Add "@technical preview" for audio metadata api

# API (2024-4-01)

NGIAgoraAudioTrack.h

## NGIAgoraMediaNode.h

Add:
– Changes virtual bool IAudioTrack::addAudioFilter – Add IAudioFilterV2 interface – Add *WithContext interface in IMediaExtensionObserver

# API (2024-03-25)

Loopback recording.

## IAgoraService.h

Modified:

- Add a parameter for IAgoraService::createRecordingDeviceAudioTrack()

# API (2024-03-07)

## NGIAgoraExtensionProvider.h

Deleted:

- IExtensionProvider::EXTENSION_TYPE.LIP_SYNC_PROCESSING_FILTER
- IExtensionProvider createLipSyncFilter

# API (2024-02-23)

## NGIAgoraVideoTrack.h

Add:

- add struct StreamLayerIndexInternal & StreamLayerConfigInternal for simulcast

# API(2023-08-24)

## config_engine_i.h

Add:

- CONFIGURABLE_KEY_VIDEO_DO_NOT_SKIP_SYSTEM_WINDOW

## NGIAgoraExtensionScreenSource.h

Modified:

- Add one parameters to skip system window or not in ScreenSourceListOption

# API (2024-03-08)

## NGIAgoraVideoFrame.h

Deleted:

- remove struct ColorSpace to AgoraMediaBase.h

# API (2024-02-22)

## NGIAgoraLocalUser.h

Add:

- virtual int sendAudioMetadata(const char* metadata, size_t length, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
- virtual void onAudioMetadataReceived(user_id_t userId, const char* metadata, size_t length)

# API (2024-02-22)

## NGIAgoraAudioDeviceManager.h

Modified:

- AudioDeviceInfo struct add char deviceTypeName[MAX_DEVICE_ID_LENGTH]

# API (2024-02-21)

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_DATASTREAM_ENCRYPTION_ENABLED

# API (2024-02-27)

## packet_i.h

Add:

- More value for enum MEDIA_STREAM_TYPE
- More value for enum video_packet_t::VIDEO_STREAM_TYPE

# API (2024-02-05)

## NGIAgoraAudioTrack.h

Add:

- int muteRemoteFromTimestamp(int timestamp)
- int unmuteRemoteFromTimestamp(int timestamp)

# API (2024-01-24)

## config_engine_i.h

Add:

- Add LOCAL_EXTENSION_LOCAL_COUNTER_LIP_SYNC_COST_TIME to the LocalExtensionCounter

## NGIAgoraExtensionProvider.h

Add:

- IExtensionProvider::EXTENSION_TYPE.LIP_SYNC_PROCESSING_FILTER
- IExtensionProvider createLipSyncFilter

## NGIAgoraMediaNode.h

Add:

- class ILipSyncFilter

# API (2024-01-07)

## NGIAgoraExtensionScreenSource.h

Add:
– Add `virtual int stopVideoCaptureAsync() = 0;`

# API (2024-01-05)

## NGIAgoraRtmpConnection.h

Modified:

- delete RtmpConnectionConfiguration::enableWriteFlvFile for it is no longer used

# API (2024-01-03)

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_VIDEO_EXCLUDE_HIGHLIGHT_BORDER_FOR_MAGNIFITER
- Add CONFIGURABLE_KEY_VIDEO_FORCE_USE_BITBLT_ON_WIN7

# API (2023-11-17)

## NGIAgoraVideoTrack.h

Modified:

- add aosl_ref_t default paramters to IVideoTrack::getFilterProperty

# API (2023-11-14)

NGIAgoraExtensionScreenSource.h Add:

- Add `virtual void printLog(commons::LOG_LEVEL level, const char* fromat, va_list) = 0;`

# API (2023-11-07)

## IAgoraService.h

Modified:

- add __deprecated tag to AgoraServiceConfiguration::threadPriority

# API (2023-10-31)

NGIAgoraAudioTrack.h Modified:

- Change onLocalAudioTrackStateChanged::LOCAL_AUDIO_STREAM_ERROR errorCode to LOCAL_AUDIO_STREAM_REASON reasonCode.

# API (2023-10-11)

IAgoraMediaRelayService.h internal/video_track_i.h internal/local_user_i.h internal/diagnostic_service_i.h internal/common_defines.h

## internal/agora_service_i.h

Modified:

- add aosl_ref_t default paramters

# API (2023-09-27)

## NGIAgoraExtensionScreenSource.h

Add: Add interface for IScreenCaptureSource (Windows)

- virtual void recycleVideoCache() = 0;

# API (2023-09-25)

NGIAgoraMediaNode.h NGIAgoraVideoFrame.h

## NGIAgoraVideoTrack.h

Modified:

- Remove depends on aosl_ares_class

# API (2023-09-26)

## IAgoraService.h

Modified:

- Remove `virtual agora_refptr<rtc::ILocalVideoTrack> createScreenVideoTrack(agora_refptr<rtc::IScreenCapturer> videoSource, const char* id = OPTIONAL_NULLPTR)`

# API (2023-08-28)

## NGIAgoraMediaNodeFactory.h

Modified:

- Remove createScreenCapturer() on mobile platform.

# API (2023-08-28)

Format NAIAgoraConfigCenter.h

## NAIAgoraConfigCenter.h

Modified:

- Format the whole file

# API (2023-08-15)

update config for face capture

## config_engine_i.h

Add:

- CONFIGURABLE_KEY_VIDEO_FACE_CAPTURE_THRESHOLD

# API(2023-08-03)

## agora_service_i.h

Add:

- virtual aosl_ref_t createRhythmPlayer() = 0;
- virtual int destroyRhythmPlayer(aosl_ref_t ref_id) = 0;
- virtual aosl_ref_t createMediaPlayer(media::base::MEDIA_PLAYER_SOURCE_TYPE type) = 0;
- virtual int destroyMediaPlayer(aosl_ref_t ref_id) = 0;

# API (2023-8-1)

## NGIAgoraVideoTrack.h

Modified:

- remove default value for parameter |position| of function addRenderer and removeRenderer

# API(2023-07-05)

## NGIAgoraLocalUser.h

Add:

- add annotations to setAudienceLatencyLevel

# API (2023-07-04)

NGIAgoraAudioTrack.h Add:

- RemoteAudioTrackStats::frozen_count_10_ms

# API(2023-12-20)

## NGIAgoraSyncClinet.h

Add:

- add ISyncClinet

# API(2023-12-20)

## NGIAgoraSyncClinet.h

Modify:

- modify onCollectionEvent param name to curJson

IAograService.h Add

- add createSyncClient(const base::SyncConfig& config) = 0;

# API (2023-08-21)

IAgoraService.h Modify:

- add comment for getAgoraParameter

# API(2023-07-03)

## NGIAgoraLocalUser.h

Modified:

- Changes setAudienceLatencyLevel(AUDIENCE_LATENCY_LEVEL_TYPE level) to setAudienceLatencyLevel(AUDIENCE_LATENCY_LEVEL_TYPE level, int role)

# API(2023-07-01)

## NGIAgoraMediaNode.h

Modified:

- Deprecate parameter |independent_thread| in IExtensionVideoFilter::getProcessMode(...)

# API(2023-06-25)

## NGIAgoraMediaNodeFactory.h

Deleted:

- virtual agora_refptr<IRemoteAudioMixerSource> createRemoteAudioMixerSource()

# API(2023-07-18)

## IAgoraService.h

Add:

- add api virtual agora_refptr<base::IAgoraParameter> getAgoraParameter() = 0;

# API(2023-05-10)

## internal/screen_capture_i.h

Add:

- Add interface SetCaptureToTexture in IScreenCapturerEx
- Add interface GetCaptureToTexture in IScreenCapturerEx

# API(2023-05-16)

## video_node_i.h

ADD

- Add struct `IVideoRendererEx:ViewOption` Modified:
- Change `virtual int addViewEx(uintptr_t handle, const Rectangle& cropArea, bool enableAlphaMask)` to `virtual int addViewEx(uintptr_t handle, const ViewOption& option)`

# API (2023-11-16)

## low level api include aosl using <>

nothing changed else

# API (2023-5-15)

## NGIAgoraVideoFrame.h

Add:

- VideoFrameMetaDataType::kFaceCaptureInfo

# API(2023-05-10)

## NGIAgoraCameraCapturer.h

Modified:

- add two parameters to get camera device type in IDeviceInfo::GetDeviceName(...)

# API (2023-04-27)

## NGIAgoraDataChannel.h & NGIAgoraLocalUser.h & NGIAgoraRtcConnection.h

Modified:

- takeDataChannelSnapshot

# API (2023-04-26)

move SetLocalAccessPoint interface to low level module

## NGIAgoraConfigCenter.h

Add:

- Add SetLocalAccessPoint interface

# API (2023-04-12)

## NGIAgoraMediaNode.h

Modified:

# - IAudioPcmDataSender::sendAudioPcmData(...) add a parameter with type of "const int audio_track_number"

- modify doc of onFacePositionChanged()

# API (2023-03-28)

NGIAgoraAudioTrack.h Add:

- RemoteAudioTrackStats::fec_decode_ms

# API(2023-03-24)

## NGIAgoraMediaNode.h

Modified:

- IAudioPcmDataSender::sendAudioPcmData(...) add a parameter (presentation_ms) with type of int64_t

# API(2023-03-18)

## NGIAgoraVideoFrame.h

Modified:

- Update the comment of fillVideoFrameData

# API(2023-03-16)

## IAgoraService.h

Add:

- Add onFetchConfigResult

# API (2023-03-21)

NGIAgoraRtcConnection.h

## NGIAgoraLocalUser.h

Modified:

- fix api error

# API (2023-03-09)

## NGIAgoraCameraCapturer.h

Modified:

- modify doc of onFacePositionChanged()

# API(2023-02-06)

[FEAT] CSD-52362: provide APIs for adjusting acceleration and deceleration speeds during poor network

## NGIAgoraAudioTrack.h

Add:

- int adjustAudioAcceleration(int percentage)
- int adjustAudioDeceleration(int percentage)

# API (2023-01-24)

Support set video application scenarios

## NGIAgoraLocalUser.h

Add:

- int ILocalUser::setVideoScenario(VIDEO_APPLICATION_SCENARIO scenario)

# API (2023-2-6)

## NGIAgoraExtensionScreenSource.h

MODIFY:

- Modify function void* getScreenCaptureSources(const ScreenSourceListOption& option)

# API (2023-02-14)

Support set video qoe preference

## IAgoraRtcEngine.h

Add:

- int setVideoQoEPreference(VIDEO_QOE_PREFERENCE_TYPE qoePreference)

# API (2022-12-30)

## NGIAgoraRtmpLocalUser.h

MODIFY:

- Optimize Documents

# API (2023-01-18)

## IAgoraMediaRelayService.h

Add:

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

# API (2023-05-18)

## IAgoraMediaRelayService.h

Deleted:

- Deprecated virtual void onChannelMediaRelayEvent(int code)

# API (2023-02-22)

## IAgoraMediaRelayService.h

Modified:

- supplemental onChannelMediaRelayEvent comments

# API(2022-11-30)

Get AI-AEC Interface for version

## NGIAgoraExtensionAiAec.h

- virtual void Version(char ver[MAX_VERSION_LEN]) = 0;

# API (2022-12-01)

## NGIAgoraExtensionScreenSource.h

Modified: modified interface for IScreenCaptureSource

- virtual int SetContentType(int type)

# API (2022-11-21)

## NGIAgoraVideoFrame.h

Add:

- add kI010 in RawPixelBuffer

# API (2023-01-30)

## NGIAgoraExtensionScreenSource.h

Add: Add interface for IScreenCaptureSource (iOS)

- virtual int pushVideoFrame(CVPixelBufferRef pixelBuffer, int64_t timestamp_ms, uint32_t rotation)

# API(2022-12-08)

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

## NGIAgoraLocalUser.h

Add:

- ILocalUserObserver::onVideoRenderingTracingResult(user_id_t user_id, MEDIA_TRACE_EVENT currentState, VideoRenderingTracingInfo tracingInfo)

# API (2022-12-15)

## NGIAgoraLocalUser.h

Add:

- Add SetAudioNsMode.

  # API (2022-12-15)

# API (2022-11-10)

## NGIAgoraAudioDeviceManager.h

Modified:

- add deviceType for onVolumeIndication in class IAudioDeviceManagerObserver

# API (2022-11-09)

update config for super resolution 3.0

## config_engine_i.h

Add:

- CONFIGURABLE_KEY_VIDEO_SRTYPE_BITMAP
- CONFIGURABLE_KEY_VIDEO_SRTIMES_SELECT_WEIGHT
- CONFIGURABLE_KEY_VIDEO_ENABLE_LOCAL_SR
- CONFIGURABLE_KEY_VIDEO_LOCAL_SRTYPE
- CONFIGURABLE_KEY_VIDEO_SR_PADDING Deleted:
- CONFIGURABLE_KEY_VIDEO_SHARPEN_TRACK_LIMIT
- CONFIGURABLE_KEY_VIDEO_SIMPLE_SR
- CONFIGURABLE_KEY_VIDEO_RESOURCE_MANAGER_POLICY_TYPE

# API (2022-11-09)

API changes audio local playback.

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Modified:

Main methods:

- void enableLocalPlayback(bool enable, bool sync = true)

# API(2022-11-7)

add private parameter to support configuration from server for adm latency calcuation

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_RTC_AUDIO_EXTRA_PLAYOUT_LATENCY, CONFIGURABLE_KEY_RTC_AUDIO_EXTRA_RECORD_LATENCY to adjust adm latency calculation result.

## audio_options_i.h

Add:

- Add option adm_extra_playout_latency adm_extra_record_latency to adjust adm latency calculation result.

# API (2021-10-28)

NGIAgoraAudioDeviceManager.h

## NGIAgoraRtmpLocalUser.h

Modified:

- rename agora::media::base::IAudioFrameObserver to agora::media::IAudioPcmFrameSink

# API (2022-10-18)

## NGIAgoraVideoTrack.h

Deleted:

- Delete superResolutionType in RemoteVideoTrackStats

# API (2022-10-12)

## NGIAgoraVideoTrack.h

Modified:

- update default position for addRenderer

  # API (2022-09-06)

## NGIAgoraVideoFrame.h

Modified:

- add "kFaceInfo" in VideoFrameMetaDataType

# API (2022-11-16)

NGIAgoraRtmpConnection.h

Modified: RtmpStreamingVideoConfiguration add encoderBitrateControlMode

# API (2022-10-11)

## IAgoraService.h

Modified:

- add comments for domainLimit in AgoraServiceConfiguration

# API (2022-09-28)

## IAgoraService.h

Add:

- add domainLimit in AgoraServiceConfiguration

# API (2022-09-12)

## IAgoraRtcEngine.h

Modified: adding memver variable

- add hw_encoder_accelerating in LocalVideoStats

# API (2022-09-27)

- 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-10-08)

## NGIAgoraLocalUser.h

Add:**

- Add interface for DataChannel

# API (2022-09-26)

NGIAgoraLocalUser.h

## NGIAgoraVideoTrack.h

Modified:

- onEncodedVideoFrameReceived

# API (2022-10-20)

## IAgoraMediaRelayService.h

Modified:

- add the description of the cross channel relay return value

# API (2022-09-22)

## NGIAgoraRtcConnection.h

Deleted:

- Remove onApiCallExecuted from IRtcConnectionObserver

# API (2022-09-22)

NGIAgoraAudioTrack.h Add:

- RemoteAudioTrackStats::frozen_rate_by_custom_plc_count
- RemoteAudioTrackStats::plc_count

# API (2022-09-20)

Remove unused forward declaration

## IAgoraService.h

Deleted:

- Remove ISignalingEngine
- Remove IEngineBase

# API(2022-9-15)

add private parameter to control builtin 3a for java adm, the default value is true

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_RTC_AUDIO_BUILTIN3A_ENABLE to control builtin 3a for java adm

## audio_options_i.h

Add:

- Add option adm_enable_builtin3a to control builtin 3a for java adm

# API (2023-11-01)

## NGIAgoraCameraCapturer.h

Add:

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

# API (2022-09-14)

## NGIAgoraCameraCapturer.h

Add:

- virtual int enableMultiCamera(bool enabled)

# API (2022-09-08)

## NGIAgoraRtmpConnection.h

Modified:

- onTransferStatistics add params (video_width video_height)

# API (2022-08-30)

## IAgoraRtmService.h

Modified:

- Include <stdint.h> to use fixed width integer types

# API (2022-08-29)

## NGIAgoraExtensionScreenSource.h

Add: Add interface for IScreenCaptureSource

- virtual int setHighLight(bool isHighLight, unsigned int color, int width)
- virtual int SetContentType(VideoContentSubType type)

# API (2022-08-24)

## NGIAgoraRtcConnection.h

Modified:

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

# API(2022-08-15)

Add AI-AEC Interface

## NGIAgoraExtensionAiAec.h

- virtual int ProcessAiNlpFrame(float* input, float* output) = 0;
- virtual int ClearHiddenState(float scale_factor = 0.0) = 0;

# API (2022-08-23)

NGIAgoraExtensionVQA.h

## NGIAgoraVideoTrack.h

Add:

- IAgoraVideoQualityAnalyzer

Modify:

- add mosValue in RteRemoteVideoStats

# API(2022-8-10)

## IAgoraService.h

Modified:

- delete createCustomAudioTrack( agora_refptr<rtc::IAudioPcmDataSender> audioSource, agora_refptr<rtc::IAudioPcmDataSender> audioReverseSource, int audioSourceDelay)

# API (2022-07-15)

Changes for AudioSessionConfiguration

## IAgoraService.h

Add:

- add Optional<bool> allowDuckOthers

# API (2022-07-14)

NGIAgoraAudioTrack.h

## NGIAgoraExtensionProvider.h

Add:

- IAudioTrack::AudioFilterPosition::RemoteMixedPlayback
- IExtensionProvider::EXTENSION_TYPE.AUDIO_REMOTE_MIXED_PLAYBACK_FILTER

# API (2022-07-12)

IAgoraService.h Modified: Delete some commented fields in AudioEncoderConfiguration

# API (2022-07-12)

IAgoraService.h

Modified:

## modify void SetAll(const AudioSessionConfiguration& change)

Modified:

- set "unload_after_use" false by default in loadExtensionProvider

# API (2022-07-04)

## IAgoraService.h

Modified:

- add "unload_after_use" boolean flag in loadExtensionProvider

# API (2022-07-08)

NGIAgoraVideoFrame.h

Deleted:

- virtual int updateSimulcastStreamConfig(const SimulcastStreamConfig& config) = 0;
- virtual int enableSimulcastStream(bool enabled, const SimulcastStreamConfig& config) = 0;

# API (2022-06-29)

NGIAgoraRtmpConnection.h

Modified: RtmpStreamingVideoConfiguration add encoderHwSwMode

# API (2022-06-23)

NGIAgoraVideoFrame.h

Modified: add video source type in meta info

# API (2022-06-22)

## NGIAgoraMixerSource.h

Add: Add interface for setting master clock of the mixer int setMasterClockSource(const char* id)

# API (2022-06-10)

## NGIAgoraAudioDeviceManager.h

ADD:

- virtual int setLoopbackDevice(int index) = 0;
- virtual int followSystemLoopabckDevice(bool enable) = 0;

# API (2022-06-10)

IAgoraService.h

Modified: Add loadExtensionProvider for Android

# API (2022-06-06)

NGIAgoraRtcConnection.h

Modified: Add a new Connect() API. Add TConnectSettings

# API (2024-08-06)

NGIAgoraRtcConnection.h

Modified: Add TConnectSettings info

# API (2022-06-05)

NGIAgoraRtcConnection.h

Modified:

- remove channel from onSnapshotTaken

# API (2022-06-01)

## NGIAgoraExtensionScreenSource.h

Add: Add interface for IScreenCaptureSource

- IScreenCaptureSourceList* getScreenCaptureSources( int thumb_cx, int thumb_cy, int icon_cx, int icon_cy, bool include_screen)

# API (2022-05-06)

## NGIAgoraExtensionScreenSource.h

Delete:

- Delete allowCaptureCurrentApp for iOS and Android

# API (2022-05-23)

## NGIVideoFrame.h

Delete:

- Delete Screen Capture Meta Info

# API (2022-05-31)

## NGIAgoraVideoTrack.h

Add:

- int setSimulcastStreamMode(SIMULCAST_STREAM_MODE mode, const SimulcastStreamConfig& config)

# API (2022-05-18)

## IAgoraService.h

Modify:

- Add id for all video track creator

## video_track_i.h

Modify:

- Add id for `prepareNodes`

# API (2022-05-13)

## NGIAgoraScreenCapturer.h

Add:

- Add setScreenCaptureDimensions for iOS and Android

# API(2022-05-13)

## NGIAgoraMediaNode.h

Modified:

- del a parameter with type of "const AudioFrameHandleInfo*" in IAudioPcmDataSender::sendAudioPcmData(...)

# API (2023-02-15)

## NGIAgoraVideoTrack.h

Add:

- RemoteVideoTrackStats.received_bytes

# API (2022-05-09)

## NGIAgoraCameraCapturer.h

ADD: Add comments for isCameraTorchSupported setCameraTorchOn

# API (2022-05-08)

internal/config_engine_i.h

## NGIAgoraRtcConnection.h

ADD: Add parameter INTERNAL_KEY_RTC_VIDEO_WIFI_ACC_ENABLE.

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

# API (2022-05-08)

## internal/config_engine_i.h

ADD: Add parameter INTERNAL_KEY_RTC_AUTO_LOG_UPLOAD_SERVER_PATH and INTERNAL_KEY_RTC_AUTO_LOG_UPLOAD_SERVER_CONFIG.

# API (2022-05-08)

API changes for Screen Capture

# - enable initWithDisplayId for Windows.

# API (2022-06-07)

## config_engine_i.h

Add:

- INTERNAL_KEY_RTC_AUDIO_RECORD
- INTERNAL_KEY_RTC_SDK_IN_BACKGROUND
- CONFIGURABLE_KEY_JUDGE_SDK_BROADCAST_VERSION

# API(2022-5-7)

add private parameter to control adm fallback

## config_engine_i.h

Add:

- Add CONFIGURABLE_KEY_RTC_ADM_FALLBACK_ENABLE to control adm fallback

## audio_options_i.h

Add:

- Add option adm_enable_fallback to control adm fallback

# API (2022-05-26)

## NGIAgoraExtensionScreenSource.h

Add:

- Add allowCaptureCurrentApp for iOS and Android

# API (2022-07-25)

## NGIAgoraRtmpLocalUser.h

Delete:

- IRtmpLocalUser::setAudioEnabled()
- IRtmpLocalUser::publishMediaPlayerAudio()
- IRtmpLocalUser::unpublishMediaPlayerAudio()

Modified:

- Rename unregisteRtmpUserObserver() to unregisterRtmpUserObserver()

# API (2022-05-02)

## IAgoraService.h

Modified:

- Rename createCustomExtensionVideoTrack() to createScreenCaptureVideoTrack()

Add:

- createScreenCaptureAudioTrack for iOS and Android

## NGIAgoraScreenCapturer.h

Add: Add setAudioRecordConfig for iOS and Android

# API(2022-04-30)

Add Noise Suppresor Interface

## NGIAgoraExtensionAINoiseSuppressor.h

- virtual int ProcessDenoiseFrame(float* input, float* output) = 0;
- virtual int ClearHiddenState() = 0;

# API(2022-04-28)

## NGIAgoraRtcConnection.h

Delete:

- IRtcConnectionObserver::onWarning(WARN_CODE_TYPE warning, const char* msg)

# API (2022-4-27)

## NGIAgoraVideoTrack.h

Add:

- CAPTURE_BRIGHTNESS_LEVEL_TYPE captureBrightnessLevel in LocalVideoTrackStats

# API(2022-04-24)

## NGIAgoraRtcConnection.h

Add:

- bool isInteractiveAudience in Struct RtcConnectionConfiguration

# API (2022-4-18)

Add methods for control to follow default audio device

## NGIAgoraAudioDeviceManager.h

Add:

- int followSystemPlaybackDevice(bool enable) = 0;
- int followSystemRecordingDevice(bool enable) = 0;

# API (2022-04-21)

## NGIAgoraVideoTrack.h

Modify:

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

# API(2022-04-22)

## NGIAgoraLocalUser.h

Add:

- void onAudioTrackPublishStart(agora_refptr<ILocalAudioTrack> audioTrack)
- void onAudioTrackUnpublished(agora_refptr<ILocalAudioTrack> audioTrack)
- void onVideoTrackPublishStart(agora_refptr<ILocalVideoTrack> videoTrack)
- void onVideoTrackUnpublished(agora_refptr<ILocalVideoTrack> videoTrack)

## NGIAgoraRtmpLocalUser.h

Add:

- void onAudioTrackPublishStart(agora_refptr<ILocalAudioTrack> audioTrack)
- void onAudioTrackUnpublished(agora_refptr<ILocalAudioTrack> audioTrack)
- void onVideoTrackPublishStart(agora_refptr<ILocalVideoTrack> videoTrack)
- void onVideoTrackUnpublished(agora_refptr<ILocalVideoTrack> videoTrack)

# API (2022-04-20)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::downlink_effect_type

# API (2022-04-24)

## NGIAgoraExtensionScreenSource.h

Add:

- setCustomContext
- getCustomContext

# API (2022-04-17)

## NGIAgoraLocalUser.h

Add:

- add interface setAudioFilterabl

# API (2022-08-15)

IAgoraService.h Modified: Add license field in AgoraServiceConfiguration

NGIAgoraAudioTrack.h Add: void onLicenseValidationFailure(LICENSE_ERROR_TYPE error)

# API (2021-04-09)

NGIAgoraAudioTrack.h Add:

- RemoteAudioTrackStats.quality_changed_reason

# API (2022-05-10)

NGIAgoraExtensionProvider.h Add:

- IExtensionProvider::EXTENSION_TYPE.AUDIO_RECORDING_LOCAL_PLAYBACK_FILTER
- IExtensionProvider::EXTENSION_TYPE.AUDIO_POST_PROCESSING_FILTER
- IExtensionProvider::EXTENSION_TYPE.AUDIO_REMOTE_USER_PLAYBACK_FILTER
- IExtensionProvider::EXTENSION_TYPE.AUDIO_PCM_SOURCE_FILTER
- IExtensionProvider::EXTENSION_TYPE.AUDIO_PCM_SOURCE_SENDING_FILTER
- IExtensionProvider::EXTENSION_TYPE.AUDIO_PCM_SOURCE_LOCAL_PLAYBACK_FILTER

NGIAgoraAudioTrack.h Add:

- int getFilterProperty(const char* id, const char* key, char* jsonValue, size_t bufSize, AudioFilterPosition position);

Modified:

- setFilterProperty(const char* id, const char* key, const char* jsonValue) to setFilterProperty(const char* id, const char* key, const char* jsonValue, AudioFilterPosition position)
- enableAudioFilter(const char* id, bool enable) to enableAudioFilter(const char* id, bool enable, AudioFilterPosition position)

NGIAgoraLocalUser.h Add:

- int enableRemoteAudioTrackFilter(user_id_t userId, const char* id, bool enable)
- int setRemoteAudioTrackFilterProperty(user_id_t userId, const char* id, const char* key, const char* jsonValue)
- int getRemoteAudioTrackFilterProperty(user_id_t userId, const char* id, const char* key, char* jsonValue, size_t bufSize)

# API (2021-04-15)

Modified:

# API (2022-09-6)

add counter of neteq burst jitter and burst peak num

## IAgoraService.h

Modified:

- set AgoraServiceConfiguration.channelProfile default to CHANNEL_PROFILE_LIVE_BROADCASTING_2.

  NGIAgoraRtcConnection.h

Modified:

# API (2022-06-15)

add counter of neteq packet_expired_loss adn packet_max_expired_ms because of expired packet

Modified:

- set RtcConnectionConfiguration.channelProfile default to CHANNEL_PROFILE_LIVE_BROADCASTING_2.

# API (2022-04-01)

add counter of neteq accelerate ratio and preemptive expand ratio

# API(2022-03-28)

## NGIAgoraLocalUser.h

Delete:

- ILocalUsr::LocalAudioDetailedStats::uplink_process_time_ms

## NGIAgoraMediaNode.h

Modified:

- IAudioPcmDataSender::sendAudioPcmData(...) add a parameter with type of "const AudioFrameHandleInfo*"

## internal/packet_i.h

Add:

- SAudioFrame::handle_info_;
- SAudioPacket::handle_timing_
- PacketOptions::handle_info

# API (2022-04-08)

## NGIAgoraAudioDeviceManager.h

Add: Add loopback recording parameters

- int setLoopbackDeviceParameter(const LoopbackRecordingOption &option)

# API (2022-03-24)

## NGIAgoraAudioDeviceManager.h

Modify: add deviceName param for class IRecordingDeviceSource

- int initRecording(const char* deviceName = NULL)
- int startRecording()

# API (2022-04-08)

## AgoraBase.h

Modified:

- enum TCcMode
- struct SenderOptions

# API (2022-03-27)

## NGIAgoraLocalUser.h

Add:

- int setVideoSubscriptionOptions(user_id_t userId, const VideoSubscriptionOptions& options)

# API (2022-03-24)

Update ScreenCaptureProfilingStatistics

## NGIAgoraExtensionScreenSource.h

Add:

- `bool capture_mouse_cursor`
- `uint64_t per_capture_cpu_cycles`

# API (2022-03-11)

## NGIAgoraRtcConnection.h

Modified:

- Modify TConnectionInfo to include int proxyType, and connectionIp

# API (2022-03-08)

## NGIAgoraExtensionScreenSource.h

Add: Add interfaces for audio capturing

## NGIAgoraScreenCapturer.h

Add: Add IScreenCapturer2 for iOS and Android

# API (2022-03-04)

## NGIAgoraAudioDeviceManager.h

Modify: add deviceName param for class IRecordingDeviceSource

- int startRecording(const char* deviceName = NULL)

# API (2022-03-03)

## NGIAgoraMediaNode.h

Modify:

- virtual void onEvent(const char* provider, const char* extension, const char* key, const char* json_value) {}
- virtual void onExtensionStopped(const char* provider, const char* extension) {}
- virtual void onExtensionStarted(const char* provider, const char* extension) {}
- virtual void onExtensionError(const char* provider, const char* extension, int error, const char* message) {}

# API (2022-03-03)

## AgoraExtensionProviderEntry.h

Modify: use registerProviderEntry on Windows

# API (2022-03-26)

## NGIAgoraLocalUser.h

**Add:

- onVideoSizeChanged for ILocalUserObserver

# API (2022-03-27)

## NGIAgoraLocalUser.h

Add:

- int setVideoSubscriptionOptions(user_id_t userId, const VideoSubscriptionOptions& options)

# API (2022-03-05)

## NGIAgoraVideoTrack.h

Add:

- QUALITY_ADAPT_INDICATION quality_adapt_indication

# API (2022-03-04)

## NGIAgoraVideoTrack.h

Add:

- Add superResolutionType in RemoteVideoTrackStats

# API (2022-02-11)

## NGIAgoraLocalUser.h

Deleted:

- remove VideoSubscriptionOptions from ILocalUser

## NGIAgoraVideoTrack.h

Add:

- add REMOTE_VIDEO_IMAGE_TRACK to VideoTrackType

# API (2022-02-10)

## agora_service_i.h

Modified:

- agora::rtc::uid_t getUidByUserAccount(const std::string& app_id, const std::string& user_account) const

# API (2022-02-15)

## NGIAgoraVideoFrame.h

Deprecate kTexture in VideoFrameData::Type Add:

- Add kTextureOES and kTexture2D in VideoFrameData::Type.

# API (2021-11-07)

## NGIAgoraVideoTrack.h

Add:

- QUALITY_ADAPT_INDICATION quality_adapt_indication

# API (2021-09-23)

add HKMC and US Area Code

## config_engine_i.h

Add: add HKMC and US Area Code

# API (2022-02-08)

## NGIAgoraExtensionScreenSource.h

Add new interfaces for screen capture extension source

# API (2022-01-29)

Add support for encoded frame receiver

## NGIAgoraAudioTrack.h

Add: Add two functions to register and unregister encoded frame receiver.

- int registerAudioEncodedFrameReceiver(IAudioEncodedFrameReceiver* packetReceiver)
- int unregisterAudioEncodedFrameReceiver(IAudioEncodedFrameReceiver* packetReceiver)

## NGIAgoraMediaNode.h

Add:

- class IAudioEncodedFrameReceiver

## NGIAgoraRtcConnection.h

Add:

- bool audioRecvEncodedFrame in Struct RtcConnectionConfiguration

# API (2022-01-24)

## NGIAgoraMediaNode.h

Add: Extension video filter support rotation apply

- `bool getRotationApplied()`

# API (2022-01-17)

## NGIAgoraAudioTrack.h

Add:

- IAudioTrack::AudioFilterPosition::PcmSource

# API (2022-01-17)

## NGIAgoraLocalUser.h

Add:

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

# API (2022-04-01)

## NGIAgoraLocalUser.h

Deleted:

- ILocalUser.pullMixedAudioPcmData()

## NGIAgoraRtcConnection.h

Deleted:

- AudioSubscriptionOptions
- RtcConnectionConfiguration.audioSubscriptionOptions

## NGIAgoraAudioTrack.h

Modify:

- remove `PostAudioRecordingDevice`

# API (2021-01-14)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::target_level

# API (2021-12-16)

add counter and config for super resolution

## config_engine_i.h

Add:

- CONFIGURABLE_KEY_VIDEO_ENABLE_SUPER_RESOLUTION
- CONFIGURABLE_KEY_VIDEO_SUPER_RESOLUTION_SRTYPE

## video_config_i.h

Add:

- add variable enable_sr
- add variable sr_type

## extension_counter_event_def.h

Add:

- Add enum LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_TYPE LOCAL_EXTENSION_REMOTE_COUNTER_SUPER_RESOLUTION_COST_TIME

# API (2021-12-10)

## NGIAgoraRtcConnection.h

Modify:

- virtual void onChangeRoleFailure(CLIENT_ROLE_CHANGE_FAILED_REASON reason, CLIENT_ROLE_TYPE currentRole)

# API (2021-12-11)

## IAgoraRtmpStreamingService.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-12-07)

## NGIAgoraVideoTrack.h

Modify:

- initialize `int regulated_frame_rate`
- initialize `int regulated_width`
- initialize `int regulated_height`

# API (2021-11-30)

## AgoraExtensionProviderEntry.h

Modify:

- Use dummy global var instead of dllmain on windows

# API (2021-11-30)

## NGIAgoraLocalUser.h

Modified:

- move enum REMOTE_USER_STATE from NGIAgoraLocalUser.h to AgoraBase.h.

# API (2021-11-24)

## NGIAgoraVideoTrack.h

Modify:

- Replace tab with spaces. Add:
- int int enableSpatialAudio(bool enabled)
- int setRemoteUserSpatialAudioParams(const agora::SpatialAudioParams& params)

# API (2022-01-10)

## NGIAgoraAudioTrack.h

Add: Add uint32_t audio_volume for LocalAudioTrackStats struct

## NGIAgoraLocalUser.h

**Modify: volume range **

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

# API (2022-01-08)

## NGIAgoraLocalUser.h

Modify: -virtual int setPlaybackAudioFrameParameters(size_t numberOfChannels, uint32_t sampleRateHz, RAW_AUDIO_FRAME_OP_MODE_TYPE mode = RAW_AUDIO_FRAME_OP_MODE_READ_ONLY, int samplesPerCall = 0)

# API (2021-12-28)

## NGIAgoraAudioTrack.h

Add:

- IAudioTrack::AudioFilterPosition::RemoteUserPlayback

# API (2021-12-20)

IAgoraService.h Add: Modify AgoraServiceConfiguration for external egl context

- bool useExternalEglContext

# API (2022-01-19)

## NGIAgoraAudioTrack.h

Add:

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

# API (2021-12-20)

Add parameter key for trace

## config_engine_i.h

Add: Add parameter key

- INTERNAL_KEY_RTC_START_TRACE
- INTERNAL_KEY_RTC_STOP_TRACE

# API (2021-12-17)

## NGIAgoraAudioTrack.h

Modify:

- remove `PostAudioRecordingDevice`

# API (2021-12-10)

## NGIAgoraRtcConnection.h

Modify:

- virtual void onChangeRoleFailure(CLIENT_ROLE_CHANGE_FAILED_REASON reason, CLIENT_ROLE_TYPE currentRole)

# API (2021-12-07)

Add method in IRtmpLocalUser class.

## NGIAgoraRtmpLocalUser.h

Modify:

- initialize `int regulated_frame_rate`
- initialize `int regulated_width`
- initialize `int regulated_height`

# API (2021-12-01)

Add support for encoded frame receiver

## NGIAgoraAudioTrack.h

Add: Add two functions to register and unregister encoded frame receiver.

- int registerAudioEncodedFrameReceiver(IAudioEncodedFrameReceiver* packetReceiver)
- int unregisterAudioEncodedFrameReceiver(IAudioEncodedFrameReceiver* packetReceiver)

## NGIAgoraMediaNode.h

Add:

- class IAudioEncodedFrameReceiver

## NGIAgoraRtcConnection.h

Add:

- bool audioRecvEncodedFrame in Struct RtcConnectionConfiguration

# API (2021-11-07)

## NGIAgoraVideoTrack.h

Add:

- QUALITY_ADAPT_INDICATION quality_adapt_indication

# API (2021-11-30)

## AgoraExtensionProviderEntry.h

Modify:

- Use dummy global var instead of dllmain on windows

# API (2021-11-30)

## NGIAgoraLocalUser.h

Modified:

- move enum REMOTE_USER_STATE from NGIAgoraLocalUser.h to AgoraBase.h.

# API (2021-11-24)

## NGIAgoraVideoTrack.h

Modify:

- Replace tab with spaces.

# API (2021-11-23)

## IAgoraService.h

Add:

- createDirectCustomAudioTrack(audioSource)

# API (2021-11-23)

## NGIAgoraVideoTrack.h

Add: Add filed in LocalVideoTrackStats

- `int capture_frame_rate`
- `int regulated_capture_frame_rate`
- `int capture_width`
- `int capture_height`
- `int regulated_capture_width`
- `int regulated_capture_height`

# API (2021-11-6)

## NGIAgoraAudioTrack.h

Add: Add fields in LocalAudioTrackStats

- `uint64_t total_active_time`
- ‘uint64_t publish_duration’

## NGIAgoraLocalUser.h

Add: Add fields in ILocalUserObserver

- `onFirstRemoteAudioFrame`
- ‘onFirstRemoteAudioDecoded’
- `onFirstRemoteVideoFrame`
- ‘onFirstRemoteVideoDecoded’

## NGIAgoraVideoTrack.h

Add: Add fields in LocalVideoTrackStats

- `uint64_t totalActiveTime`
- ‘uint64_t publishDuration’

# API (2021-11-2)

## NGIAgoraScreenCapturer.h

Modify:

- Enable screen capture in Linux

# API (2021-11-03)

## agora_service_i.h

Deleted:

- static const char* getSourceVersion();
- virtual int panic(void* exception) = 0;
- virtual agora::rtc::AgoraGenericBridge* getBridge() = 0;
- virtual BaseContext& getBaseContext() = 0;
- virtual void setBaseContext(BaseContext* context) = 0;
- virtual rtc::ConfigService* getConfigService() = 0;
- virtual rtc::ConfigSourceAP* getConfigSourceAP() = 0;
- virtual const std::string& getAppId() const = 0;
- virtual agora_refptr<rtc::PredefineIpList> getPredefineIpList() const = 0;
- virtual rtc::XdumpHandler* getXdumpHandler() const = 0;
- virtual const std::string& getServiceId() const = 0;

Add:

- IAgoraServiceEx* GetService()

# API (2021-10-18)

## NGIAgoraRtmpConnection.h

Add:

- enum RTMP_CONNECTION_ERROR::STATE_RECONNECTED
- class IRtmpConnectionObserver:virtual void onReconnected(const RtmpConnectionInfo& connectionInfo) = 0;

# API(2021-12-09)

## NGIAgoraExtensionControl.h

Modify:

- provider_name -> provider
- ext_name -> extension
- event_key -> key
- event_json_str -> value

# API (2021-12-01)

Add method in IRtmpLocalUser class.

## NGIAgoraRtmpLocalUser.h

Add:

- int publishMediaPlayerAudio(agora_refptr<rtc::ILocalAudioTrack> audioTrack, int32_t playerId).
- int unpublishMediaPlayerAudio(agora_refptr<rtc::ILocalAudioTrack> audioTrack, int32_t playerId).

# API (2021-11-07)

## NGIAgoraVideoTrack.h

Add:

- QUALITY_ADAPT_INDICATION quality_adapt_indication

# API (2022-03-08)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats.qoe_quality

## NGIAgoraVideoTrack.h

Add:

- LocalVideoTrackStats.txPacketLossRate

# API (2021-09-30)

## NGIAgoraAudioTrack.h

Add:

- e2e_delay_ms

# API (2022-03-09)

## NGIAgoraAudioTrack.h

Add:

- class ILocalAudioTrackObserver
- ILocalAudioTrack::registerTrackObserver
- ILocalAudioTrack::unregisterTrackObserver

## NGIAgoraLocalUser.h

Deleted:

- ILocalUserObserver::onLocalAudioTrackStateChanged

# API (2021-12-12)

## IAgoraService.h

Modify:

- nothing

# API (2022-04-20)

## NGIAgoraLocalUser.h

Add:

- ILocalUser::setEarMonitoringAudioFrameParameters

# API (2021-11-27)

remove enum TCcMode

## IAgoraService.h

Deleted:

- enum TCcMode

# API (2021-10-18)

## NGIAgoraRtmpConnection.h

Add:

- enum RTMP_CONNECTION_ERROR::STATE_RECONNECTED
- class IRtmpConnectionObserver:virtual void onReconnected(const RtmpConnectionInfo& connectionInfo) = 0;

# API (2021-10-12)

## config_engine_i.h

Add:

- CONFIGURABLE_KEY_RTC_ENABLE_SYNC_RENDER_NTP

  # API (2021-09-24)

add Korea Area Code

## config_engine_i.h

Add: add Korea Area Code

# API (2021-10-14)

- add definition CONFIGURABLE_KEY_VIDEO_VP8_ENC_SWITCH
- add definition CONFIGURABLE_KEY_VIDEO_SVC_TEMPORAL_LAYERS
- add definition CONFIGURABLE_KEY_VIDEO_VP8_ENC_SWITCH
- add definition CONFIGURABLE_KEY_VIDEO_SVC_TEMPORAL_LAYERS

## channel_capability_i.h

Add:

- add enum Vp8Feature
- add enum Svc
- add enum CapabilityType:kVp8Feature

## video_track_i.h

Add:

- add variable video_codec_capbits
- add variable curr_temporal_layer

## packet_i.h

Add:

- add variable max_temporal_layers
- add variable codec_type

## video_config_i.h

Add:

- add variable svc_num_temporal_layers
- add variable vp8_enc_switch

# API (2021-10-09)

Modify param for RtmpStreamingVideoConfiguration

## NGIAgoraRtmpConnection.h

Modify:

- modify gop_ms to gopInMs in RtmpStreamingVideoConfiguration

# API (2021-10-09)

Add param for RtmpStreamingVideoConfiguration

## NGIAgoraRtmpConnection.h

Add:

- add push_video_frame_cnt、pop_video_frame_cnt in onTransferStatistics

Add:

- add gop_ms in RtmpStreamingVideoConfiguration

# API (2021-09-23)

## NGIAgoraRtcConnection.h

Add:

- AudioSubscriptionOptions& operator=(const AudioSubscriptionOptions& rhs)

# API (2021-09-22)

## NGIAgoraAudioDeviceManager.h

Modified:

- fix marco

# API (2021-09-17)

## NGIAgoraMediaNode.h

Modified:

- Update interface for C++98 standard

# API (2021-09-08)

## AgoraExtensionProviderEntry.h

Add:

- add ProviderInterfaceUsed argument for providers to declare provider version.

## AgoraExtensionVersion.h

Add:

- Define extension version and concrete interface versions.

## NGIAgoraVideoFrame.h

Add:

- add PaddedRawPixelBuffer data structure for padded memory buffer.

# API (2021-09-08)

## IAgoraService.h

Add:

- add a createCustomAudioTrack() for IAgoraService.

# API (2021-09-07)

## IAgoraService.h

Add:

- Add thread priority option

# API (2021-09-03)

## IAgoraMediaRelayService.h

Add:

- Add pauseAllChannelMediaRelay
- Add resumeAllChannelMediaRelay

# API (2021-08-30)

## AgoraExtensionProviderEntry.h

Modified:

- Use extension provider entry for android extensions too.

## extension_counter_event_def.h

Add:

- Add enum LocalExtensionCounter and struct VideoBeautyParam.

# API (2021-08-12)

Gets the NTP time.

## NGIAgoraRtcConnection.h

Add:

- agora::base::NtpTime getNtpTime()

# API (2021-09-02)

## NGIAgoraAudioDeviceManager.h

Add:

- void onAudioDeviceStateChanged(const char <em>deviceId, int deviceType, int deviceState)

  # API (2021-09-15)

## NGIAgoraMediaNodeFactory.h

Add:

- int setRenderMode(void view, media::base::RENDER_MODE_TYPE renderMode)
- int setMirror(void* view, bool mirror)
- int addView(void* view, const Rectangle& cropArea)
- int removeView(void* view)

# API (2021-08-30)

## agora_service_i.h

Add:

- int AgoraService::startTrace(uint32_t count, uint64_t mask)
- int AgoraService::stopTrace(const char* file_path)

# API (2021-08-25)

## NGIAgoraAudioDeviceManager.h

Add:

- onAudioDeviceVolumeChanged(int deviceType, int volume, bool muted)

# API (2021-08-27)

Update class IVideoSinkBase

## NGIAgoraMediaNode.h

Add:

- bool applyMirror()
- bool applyRotation()

# API (2021-08-16)

## NGIAgoraLocalUser.h

Modified:

- Add callback function onUserStateChanged() and enum REMOTE_USER_STATE.

# API (2021-08-12)

## NGIAgoraLocalUser.h

Add:

- onActiveSpeaker(user_id_t userId).

# API (2021-09-11)

## audio_track_i.h

Add:

- Add IRemoteAudioTrackEx GetAudioLevel

# API (2021-08-13)

## NGIAgoraScreenCapturer.h

Add:

- void setScreenOrientation(VIDEO_ORIENTATION orientation)

# API (2021-08-11)

## NGIAgoraRtcConnection.h

Modified: Deprecate setEncryptionMode and setEncryptionSecret, correct description of enableEncryption

- setEncryptionMode
- setEncryptionSecret
- enableEncryption

Add:

- void onContentInspectResult(media::CONTENT_INSPECT_RESULT result) Add:
- void onSnapshotTaken(const char* channel, uid_t uid, const char* filePath, int width, int height, int errCode)

# API (2021-08-06)

## NGIVideoFrame.h

Add:

- MatrixID and TransferID in agora::rtc::ColorSpace

## IAgoraService.h

Modified:

- EnableExtension: fix comment and use track_id instead of id

## NGIAgoraExtensionProvider.h

Add:

- setProperty: set provider-wide (key, value) property

# API (2021-07-29)

## IAgoraService.h

Add:

- DisableExtension Modified:
- EnableExtension: use id to identify track and mark if the extension is open automatically on track

# API (2021-08-16)

## NGIAgoraLocalUser.h

Modified:

- onFrame(user_id_t uid, rtc::conn_id_t connectionId, const media::base::VideoFrame* frame) to onFrame(const char* channelId, user_id_t remoteUid, const media::base::VideoFrame* frame)

# API (2021-08-05)

## NGIAgoraLocalUser.h

Add:

- onFirstRemoteVideoFrameRendered()

# API (2021-09-10)

## NGIAgoraMediaNode.h

Add:

- IAudioFilterBase::getPreferredChannelNumbers()
- IAudioFilter::getPreferredChannelNumbers()

# API (2021-07-29)

## AgoraExtensionProviderEntry.h

Modified:

- Register entry function while loading windows extension

# API (2021-10-19)

## NGIAgoraLocalUser.h

Add:

- struct AudioVolumeInformation

Modified:

- onAudioVolumeIndication(const AudioVolumeInfo* , ...) to onAudioVolumeIndication(const AudioVolumeInformation* , ...)

# API (2021-07-29)

## IAgoraService.h

Add:

- const char* getExtensionId(const char* provider_name, const char* extension_name)
- int loadExtensionProvider(const char* extension_lib_path)

# API (2021-07-27)

## IAgoraService.h

Add:

- enableExtension(const char* provider_name, const char* extension_name, bool enable)

# API (2021-07-22)

## NGIAgoraLocalUser.h

Add:

- void setAudienceLatencyLevel(AUDIENCE_LATENCY_LEVEL_TYPE level)
- AUDIENCE_LATENCY_LEVEL_TYPE getAudienceLatencyLevel()

# API (2021-07-15)

## IAgoraService.h

Add:

- createCustomAudioTrack(agora_refptr<rtc::IAudioPcmDataSender> audioSource, bool enableAec)

## NGIAgoraLocalUser.h

Modified:

- Add comments.

# API (2021-07-22)

## NGIAgoraVideoTrack.h

Add: hasVideoFilter(const char* id, media::base::VIDEO_MODULE_POSITION position = media::base::POSITION_POST_CAPTURER) = 0;

# API (2021-06-23)

## NGIAgoraExtensionControl.h

Add:

- agora::rtc::IExtensionControl* getAgoraExtensionControl()
- int registerProvider(const char* provider_name, agora_refptr<IExtensionProvider> provider)

# API (2021-06-21)

## NGIAgoraVideoFrame.h

Add:

- ColorSpace in VideoFrameInfo

# API (2021-06-25)

## NGIAgoraAudioTrack.h

Add:

- enableAudioFilter(const char* id, bool enable)
- setFilterProperty(const char* id, const char* key, const char* jsonValue)

# API (2021-06-09)

## NGIAgoraCameraCapturer.h

Delete:

- VIDEO_ORIENTATION getDeviceOrientation() = 0

# API (2021-07-19)

use string uid in ILocalUserObserver callback

## NGIAgoraLocalUser.h

Modified:

- Change onAudioSubscribeStateChanged(const char* channel, uid_t uid , ...) to onAudioSubscribeStateChanged(const char* channel, user_id_t userId , ...)
- Change onVideoSubscribeStateChanged(const char* channel, uid_t uid , ...) to onVideoSubscribeStateChanged(const char* channel, user_id_t userId , ...)

# API (2021-06-08)

## NGIAgoraVideoTrack.h

Add:

- Add playout_audio_frames field for ILocalAudioTrack::LocalAudioTrackStats

# API (2021-06-10)

## NGIAgoraAudioTrack.h

Add:

- Add LocalAudioTrackStats.hw_ear_monitor

# API (2021-06-06)

## NGIAgoraVideoFrame.h

Modified:

- Exchange kGlTextureOes & kGlTexture2D in TextureType

# API (2021-05-25)

1. add function to update minor stream config

## NGIAgoraVideoTrack.h

Add:

- virtual int updateSimulcastStreamConfig(const SimulcastStreamConfig& config) = 0;

# API (2020-05-24)

Support set audio scenario dynamically.

## NGIAgoraLocalUser.h

Add:

- int ILocalUser::setAudioScenario(AUDIO_SCENARIO_TYPE scenario)

# API (2021-06-02)

## config_engine_i.h

Delete:

- INTERNAL_KEY_RTC_ENABLE_CRYPTO_ACCESS

# API (2020-05-10)

Default value change for RtmpStreamingVideoConfiguration

## NGIAgoraRtmpConnection.h

Add:

- IRtmpConnectionObserver::onTransferStatistics

Modified:

- RtmpStreamingVideoConfiguration

# API (2021-05-06)

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

## NGIAgoraScreenCapture.h

Modified:

- int initWithDisplayId(uint32_t displayId, const Rectangle& regionRect)

# API (2020-05-05)

Support R/W recording audio frame observer.

## NGIAgoraLocalUser.h

Modified:

- setPlaybackAudioFrameParameters()
- setRecordingAudioFrameParameters()
- setMixedAudioFrameParameters()

# API (2021-05-06)

delete onRemoteVideoStreamInfoUpdated.

## NGIAgoraLocalUser.h

Modified:

- delete onRemoteVideoStreamInfoUpdated

# API (2020-05-31)

## NGIAgoraCameraCapturer.h

Add:

- bool isCameraFaceDetectSupported()
- int enableFaceDetection(bool enabled)

# API (2020-04-30)

## NGIAgoraCameraCapturer.h

Add:

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

# API (2020-05-20)

## NGIAgoraMediaNode.h

Add:

- int getPreferredSampleRate()

# API (2021-04-28)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::mos_value

# API (2021-04-28)

## video_track_i.h

Add:

- enum class InternalVideoSourceType
- IVideoTrackObserver::onEncoderConfigurationChanged()
- ILocalVideoTrackEx::getInternalVideoSourceType()
- RemoteVideoTrackStatsEx::isHardwareCodec

## vide_node_i.h

Add:

- enum InternalRendererType

# API (2021-08-10)

## NGIAgoraLocalUser.h

Modified:

- registerAudioFrameObserver(agora::media::IAudioFrameObserver *) to registerAudioFrameObserver(agora::media::IAudioFrameObserverBase *)
- unregisterAudioFrameObserver(agora::media::IAudioFrameObserver *) to registerAudioFrameObserver(agora::media::IAudioFrameObserverBase *)

# API (2021-04-27)

Ensure get correct filter composite from specified position.

## NGIAgoraAudioTrack.h

Modified: add position parameter

- Changes getAudioFilter(const char *name) to getAudioFilter(const char *name, AudioFilterPosition position)

# API (2020-04-22)

delete some includeing of unnecessary header files,modify it to forward declaration

## NGIAgoraVideoTrack.h

Delete:

- #include "AgoraRefPtr.h"
- #include "NGIAgoraMediaNodeFactory.h"
- #include "IAgoraService.h"

Add:

- class IVideoEncodedImageReceiver;
- class IMediaPacketReceiver;
- class IVideoSinkBase;

## NGIAgoraVideoFrame.h

Delete:

- #include "AgoraRefPtr.h"

## NGIAgoraRtcConnection.h

Delete:

- #include "AgoraRefPtr.h"
- #include "NGIAgoraLocalUser.h"

Add:

- class ILocalUser;

## NGIAgoraMediaNodeFactory.h

Delete:

- #include "AgoraRefPtr.h"
- #include "IAgoraService.h"
- #include "NGIAgoraMediaNode.h"
- #include "IAgoraMediaPlayerSource.h"
- #include "NGIAgoraCameraCapturer.h"
- #include "NGIAgoraRemoteAudioMixerSource.h"
- #include "NGIAgoraScreenCapturer.h"
- #include "NGIAgoraVideoMixerSource.h"

Add:

- class IAudioPcmDataSender;
- class IAudioEncodedFrameSender;
- class IRemoteAudioMixerSource;
- class ICameraCapturer;
- class IScreenCapturer;
- class IVideoMixerSource;
- class IVideoFrameTransceiver;
- class IVideoFrameSender;
- class IVideoRenderer;
- class IVideoFilter;
- class IAudioFilter;
- class IVideoSinkBase;
- class IVideoEncodedImageSender;
- class IMediaPlayerSource;
- class IMediaPacketSender;
- class IMediaStreamingSource;

## NGIAgoraLocalUser.h

Delete:

- #include "IAgoraService.h"
- #include "NGIAgoraAudioTrack.h"
- #include "NGIAgoraVideoTrack.h"

Add:

- class IMediaControlPacketSender;
- class IMediaControlPacketReceiver;
- struct AudioEncoderConfiguration;
- struct VideoEncoderConfiguration;
- class ILocalAudioTrack;
- struct RemoteAudioTrackStats;
- class IRemoteAudioTrack;
- struct LocalVideoTrackStats;
- struct RemoteVideoTrackStats;
- class IMediaPacketReceiver;
- class IVideoSinkBase;

## NGIAgoraAudioTrack.h

Delete:

- #include "AgoraRefPtr.h"
- #include "IAgoraService.h"
- #include "NGIAgoraMediaNodeFactory.h"

Add:

- class IAudioFilter;
- class IAudioSinkBase;
- class IMediaPacketReceiver;

## IAgoraService.h

Delete:

- #include "NGIAgoraExtensionProvider.h"

Add:

- class IMediaExtensionObserver;
- class IExtensionProvider;

## NGIAgoraVideoTrack.h

Delete: #include "AgoraRefPtr.h" #include "NGIAgoraMediaNodeFactory.h" #include "IAgoraService.h" Add: class IVideoEncodedImageReceiver; class IMediaPacketReceiver; class IVideoSinkBase;

## NGIAgoraVideoFrame.h

Delete:

- #include "AgoraRefPtr.h"

## NGIAgoraRtcConnection.h

Delete:

- #include "AgoraRefPtr.h"
- #include "NGIAgoraLocalUser.h"

Add:

- class ILocalUser;

## NGIAgoraMediaNodeFactory.h

Delete:

- #include "AgoraRefPtr.h"
- #include "IAgoraService.h"
- #include "NGIAgoraMediaNode.h"
- #include "IAgoraMediaPlayerSource.h"
- #include "NGIAgoraCameraCapturer.h"
- #include "NGIAgoraRemoteAudioMixerSource.h"
- #include "NGIAgoraScreenCapturer.h"
- #include "NGIAgoraVideoMixerSource.h"

Add:

- class IAudioPcmDataSender;
- class IAudioEncodedFrameSender;
- class IRemoteAudioMixerSource;
- class ICameraCapturer;
- class IScreenCapturer;
- class IVideoMixerSource;
- class IVideoFrameTransceiver;
- class IVideoFrameSender;
- class IVideoRenderer;
- class IVideoFilter;
- class IAudioFilter;
- class IVideoSinkBase;
- class IVideoEncodedImageSender;
- class IMediaPlayerSource;
- class IMediaPacketSender;
- class IMediaStreamingSource;

## NGIAgoraLocalUser.h

Delete:

- #include "IAgoraService.h"
- #include "NGIAgoraAudioTrack.h"
- #include "NGIAgoraVideoTrack.h"

Add:

- class IMediaControlPacketSender;
- class IMediaControlPacketReceiver;
- struct AudioEncoderConfiguration;
- struct VideoEncoderConfiguration;
- class ILocalAudioTrack;
- struct RemoteAudioTrackStats;
- class IRemoteAudioTrack;
- struct LocalVideoTrackStats;
- struct RemoteVideoTrackStats;
- class IMediaPacketReceiver;
- class IVideoSinkBase;

## NGIAgoraAudioTrack.h

Delete:

- #include "AgoraRefPtr.h"
- #include "IAgoraService.h"
- #include "NGIAgoraMediaNodeFactory.h"

Add:

- class IAudioFilter;
- class IAudioSinkBase;
- class IMediaPacketReceiver;

## IAgoraService.h

Delete:

- #include "NGIAgoraExtensionProvider.h"

Add:

- class IMediaExtensionObserver;
- class IExtensionProvider;

# API (2020-07-13)

## NGIAgoraLocalUser.h

Modified:

- adjustUserPlaybackSignalVolume(uid_t uid, int volume) to adjustUserPlaybackSignalVolume(user_id_t userId, int volume)
- getUserPlaybackSignalVolume(uid_t uid, int* volume) to getUserPlaybackSignalVolume(user_id_t userId, int* volume)

# API (2020-04-25)

## NGIAgoraLocalUser.h

Add:

- int enableSoundPositionIndication(bool enabled)
- int setRemoteVoicePosition(uid_t uid, double pan, double gain)

## NGIAgoraAudioTrack.h

Add:

- int setRemoteVoicePosition(float pan, float gain)

# API (2020-04-06)

## NGIAgoraLocalUser.h

Add:

- Add new interface IVideoFrameObserver2
- registerVideoEncodedFrameObserver()
- unregisterVideoEncodedFrameObserver()
- registerVideoFrameObserver()
- unregisterVideoFrameObserver()

## NGIAgoraLocalUser.h

Add:

- Add new interface IVideoFrameObserver2
- registerVideoEncodedFrameObserver()
- unregisterVideoEncodedFrameObserver()
- registerVideoFrameObserver()
- unregisterVideoFrameObserver()

# API (2021-03-31)

Add media streaming source module

## IAgoraService.h

Add:

- IAgoraService::createMediaStreamingVideoTrack
- IAgoraService::createMediaStreamingAudioTrack

## NGIAgoraMediaNodeFactory.h

Add:

- IMediaNodeFactory::createMediaStreamingSource

# API (2020-04-06)

## NGIAgoraCameraCapturer.h

Add:

- ICameraCapturer::isCameraTorchSupported()
- ICameraCapturer::setCameraTorchOn(bool isOn)
- ICameraCapturer::isCameraExposurePositionSupported()
- ICameraCapturer::setCameraExposurePosition(float positionXinView, float positionYinView)
- ICameraCaptureObserver::onCameraExposureAreaChanged(int x, int y, int width, int height)

# API (2020-03-26)

Refine IVideoFrame interfaces

## NGIVideoFrame.h

Modified:

- Refine interfaces to support mempixelbuffer, texture and cvpixelbuffer

# API (2020-03-26)

Move 'areaCode' field from 'AgoraServiceConfigurationEx' to 'AgoraServiceConfiguration'

## IAgoraService.h

Modified:

- IAgoraService::AgoraServiceConfiguration

# API (2021-04-12)

Add parameter key and modify broadcast_packet_t.

## config_engine_i.h

Add: Add parameter key

- INTERNAL_KEY_RTC_JOIN_VOS_TIMEOUT

## config_engine_i.h

Modified: Modify broadcast_packet_t.

- add [bool need_reliable; / bool real_quit;] to broadcast_packet_t.

# API (2021-03-23)

IAgoraService.h rtc_engine_i.h IAgoraRtcEngine.h

## IAgoraRtcEngineEx.h

# API (2021-02-23)

## IAgoraService.h

## AgoraServiceConfiguration

Add: channelProfile

# API (2021-01-18)

IAgoraService.h NGIAgoraExtensionProvider.h NGIAgoraMediaNode.h NGIAgoraRtcConnection.h

## NGIAgoraVideoTrack.h

# API (2021-02-05)

## NGIAgoraAudioTrack.h

Modify: Modify Struct RemoteAudioTrackStats:

- Initial audio_level in constructor

# API (2021-03-25)

## NGIAgoraAudioTrack.h

Modified:

- enableEarMonitor(bool enable, bool includeAudioFilter) to enableEarMonitor(bool enable, int includeAudioFilters)

Add:

- add AudioFilterPosition.RecordingLocalPlayback
- add AudioFilterPosition.PostAudioRecordingDevice
- add AudioFilterPosition.PostAudioProcessing

# API (2020-03-25)

Add "Safe Deleter" in Register*Observer function argument list

Modified: IAgoraMediaRelayService.h NGIAgoraAudioDeviceManager.h NGIAgoraLocalUser.h NGIAgoraRtcConnection.h NGIAgoraRtmpConnection.h NGIAgoraRtmpLocalUser.h

# API (2021-03-25)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::delay_estimate_ms

## NGIAgoraLocalUser.h

Add:

- ILocalUserObserver::onStreamMessage()

## NGIAgoraRtcConnection.h

Modified:

- IRtcConnection::createDataStream()
- IRtcConnectionObserver::onStreamMessage()

# API (2020-03-23)

Loopback recording.

## IAgoraService.h

Modified:

- Add a parameter for IAgoraService::createRecordingDeviceAudioTrack()

# API (2020-03-19)

modify to adapt c++ 11

# API (2020-03-17)

Add audio and video downlink and uplink process time stats field

## NGIAgoraLocalUser.h

Add:

- LocalAudioDetailedStats::uplink_process_time_ms

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::downlink_process_time_ms

## NGIAgoraVideoTrack.h

Add:

- LocalVideoTrackStats::uplink_cost_time_ms
- RemoteVideoTrackStats::downlink_process_time_ms
- RemoteVideoTrackStats::frame_render_delay_ms;

# API (2021-03-16)

## AgoraRefCountedObject.h

Modified:

- Modify include path

# API (2020-03-10)

Add remote video A/V sync offset

## IAgoraRtcEngine.h

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

# API (2021-03-18)

Modify RtcConnectionConfigurationEx.

## rtc_connection_i.h

Modified:

- Changes RtcConnectionConfigurationEx::RtcConnectionConfigurationEx implement

## video_track_i.h

Modified:

- Changes AttachInfo::recv_type to AttachInfo::recv_media_packet

## NGIAgoraRtcConnection.h

Modified:

- Changes RtcConnectionConfiguration::recvType to RtcConnectionConfiguration::audio/videoRecvMediaPacket

## NGIAgoraRtcConnection.h

Deleted:

- Deleted enum RECV_TYPE

# API (2021-02-22)

Support for mixed remote audio track

## NGIAgoraRemoteAudioMixerSource.h

Add:

- class IRemoteAudioMixerSource

# API (2021-01-12)

Change definition of bytes_per_sample without channel

## NGIAgoraMediaNode.h

Modified:

- change param type of sendAudioPcmData::bytes_per_sample from size_t to enum BYTES_PER_SAMPLE

## NGIAgoraRtcConnection.h

Modified:

- change param type of AudioSubscriptionOptions::bytes_per_sample from size_t to enum BYTES_PER_SAMPLE

# API (2020-10-23)

Add/Remove/Modify methods to support extension management, which includes adding/removing extension, enabling/disabling extension, setting extension property.

## rtc_engine_i.h

Add:

- struct Extension
- RtcEngineContextEx::extensions
- RtcEngineContextEx::numExtension

## IAgoraRtcEngine.h

Add:

- IRtcEngine::enableExtension
- IRtcEngine::setExtensionProperty

Remove:

- IRtcEngine::enableLocalVideoFilter
- IRtcEngine::setLocalVideoFilterProperty
- IRtcEngine::getLocalVideoFilterProperty
- IRtcEngine::enableRemoteVideoFilter
- IRtcEngine::setRemoteVideoFilterProperty
- IRtcEngine::getRemoteVideoFilterProperty

## IAgoraService.h

Add:

- IAgoraService::createCustomAudioTrack

## NGIAgoraMediaNodeFactory.h

Add:

- IMediaNodeFactory::createRemoteAudioMixerSource

# API (2021-03-24)

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::frozen_count_80_ms
- RemoteAudioTrackStats::frozen_time_80_ms
- RemoteAudioTrackStats::frozen_count_200_ms
- RemoteAudioTrackStats::frozen_time_200_ms

# API (2021-02-08)

NGIAgoraMediaNodeFactory.h

## NGIAgoraRtcConnection.h

Fix "warning: unused parameter"

# API (2021-02-05)

Add two interface file NGIAgoraRtmpConnection.h and NGIAgoraRtmpLocalUser.h.

## IAgoraService.h

Add:

- createRtmpConnection()

# API (2021-02-18)

Add key INTERNAL_KEY_RTC_DESENSITISE_IP.

## config_engine_i.h

Add:

- INTERNAL_KEY_RTC_DESENSITISE_IP

# API (2021-02-05)

## NGIAgoraAudioTrack.h

Modify: Modify Struct RemoteAudioTrackStats:

- Add int32_t audio_level

# API (2020-11-27)

## NGIAgoraLocalUser.h

Modified:

- changed agora::base::Optional to agora::Optional

# API (2020-12-2)

## NGIAgoraRemoteAudioMixerSource.h

Deleted:

- Deleted IRemoteAudioMixerSource::startMixing()
- Deleted IRemoteAudioMixerSource::stopMixing()

# API (2021-02-02)

Modify INetworkObserver.

## NGIAgoraRtcConnection.h

Modified: Add more callback to INetworkObserver

- Changes add onDownlinkNetworkInfoUpdated

# API (2021-01-03)

## IAgoraService.h

Modify: Modify Struct AgoraServiceConfiguration:

- Remove const char* logDir;
- Add commons::LogConfig logConfig;

Deleted: Short description

- Deleted Foo()

# API (2021-02-05)

## IAgoraRtmService.h

Add:

- getRawMessageData()
- getRawMessageLength()
- setMessageType()
- setRawMessage()

# API (2021-01-05)

## NGIAgoraLocalUser.h

Add:

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

# API (2021-01-19)

Remove KEY_RTC_CONNECTION_LOST_PERIOD

## config_engine_i.h

Deleted:

- Deleted macro KEY_RTC_CONNECTION_LOST_PERIOD

## NGIAgoraMediaNodeFactory.h

Modified:

- Changes IMediaControlPacketReceiver::onMediaControlPacketReceived(const uint8_t *packet, size_t length) to IMediaControlPacketReceiver::onMediaControlPacketReceived(uid_t uid, const uint8_t *packet, size_t length)

# API (2021-01-04)

## NGIAgoraCameraCampturer.h

Added:

- ICameraCaptureObserver::onCameraStateChanged
- ICameraCapturer::switchCamera

# API (2020-12-24)

adjustUserPlaybackSignalVolume

## NGIAgoraLocalUser.h

Add:

- adjustUserPlaybackSignalVolume(uid_t uid, int volume)
- getUserPlaybackSignalVolume(uid_t uid, int* volume)

# API (2020-12-17)

video_node_i.h

## NGIAgoraRtcConnection.h

Modified:

- Modify TConnectionInfo to include int uid

# API (2020-12-09)

Rename REMOTE_VIDEO_STREAM_TYPE.

## rtc_connection_i.h/NGIAgoraLocalUser.h/NGIAgoraVideoTrack.h

Modified:

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

## video_node_i.h

Modified: Modify VideoEncodedImageData.

- Changes Add VIDEO_STREAM_TYPE streamType to VideoEncodedImageData

# API (2020-11-30)

Refine comments.

- IMediaRelayService::unregisterEventHandler

## video_node_i.h

Add:

- IVideoFilterEx::attachStatsSpace

# API (2020-11-11)

## AgoraBase.h

Add:

- MAINTAIN_RESOLUTION into DEGRADATION_PREFERENCE

# API (2020-11-11)

## AgoraBase.h

Add:

- MAINTAIN_RESOLUTION into DEGRADATION_PREFERENCE

# API (2020-11-09)

Update API parameter

## NGIAgoraLocalUser.h

Modified: Remove elapsed

- Changes `void onVideoTrackPublishSuccess(agora_refptr<ILocalVideoTrack> videoTrack, int elapsed)` to `void onVideoTrackPublishSuccess(agora_refptr<ILocalVideoTrack> videoTrack)`

# API (2020-11-6)

## NGIAgoraAudioDeviceManager.h

Refine a inclusion usage of TARGET_OS_IPHONE

# API (2023-06-21)

## NGIAgoraScreenCapturer.h

Modified:

- fix iOS platform macro definition

# API (2020-10-27)

Add callback for encryption error

## NGIAgoraRtcConnection.h

Add:

- IRtcConnectionObserver::onEncryptionError

# API (2020-09-16)

fix ios and mac marco

API (2020-10-12)

# API (2020-09-16)

Support SM4 Encryption.

## NGIAgoraRtcConnection.h

Add:

- IRtcConnection::enableEncryption

# API (2020-09-17)

Add member fields to RemoteAudioTrackStats

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::expanded_speech_samples
- RemoteAudioTrackStats::expanded_noise_samples
- RemoteAudioTrackStats::timestamps_since_last_report
- RemoteAudioTrackStats::min_sequence_number
- RemoteAudioTrackStats::max_sequence_number

# API (2020-08-28)

Modify VideoEncodedImageData.

## video_node_i.h

Modify: Modify VideoEncodedImageData.

- Remove packetizationMode.

# API (2020-09-11)

## Add v2.7.1 docs for high-level apis. For details, see jira MS-17241.

Merge docs for low-level apis from v2.7.0.2 to v2.7.1.

## NGIAgoraAudioDeviceManager.h

Modified:

- Modify change marco

# API (2020-09-24)

## NGIAgoraLocalUser.h

Modified:

- Changes ILocalUser::sendIntraRequest(uid_t uid) to ILocalUser::sendIntraRequest(user_id_t userId)

# API (2020-09-07)

API (2020-09-15) Add video engine flags and video track method.

## packet_i.h

Add:

- kVideoEngineFlagScalableDelta
- kVideoEngineFlagMajorStreamOnly

## video_track_i.h

Add: Add method to ILocalVideoTrackEx

- GetActiveStreamsCount()

# API (2020-09-09)

Modify enum VIDEO_FRAME_TYPE

## packet_i.h

Modified:

- Changes remove DROPPABLE_FRAME from VIDEO_FRAME_TYPE

# API (2020-08-30)

## NGIAgoraVideoTrack.h

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

# API (2020-08-21)

## NGIAgoraAudioDeviceManager.h

Deleted:

- Delete INGAudioDeviceManager::startMicrophoneTest and INGAudioDeviceManager::stopMicrophoneTest
- Delete IAudioDeviceManagerObserver::onVolumeIndication

# API (2020-09-02)

Modify enum VIDEO_FRAME_TYPE

## packet_i.h

Modified:

- Changes remove DROPPABLE_FRAME from VIDEO_FRAME_TYPE

# API (2020-08-21)

## agora_service_i.h

Modified: Remove dup 'appId'.

## IAgoraRtmService.h

Modified: Merge changes from arsenal.

## IAgoraRtmService.h

Modified: Modify macro definition

NGIAgoraAudioDeviceManager.h NGIAgoraCameraCapturer.h

## NGIAgoraScreenCapturer.h

Modified: Refine macro defition and add comments for #endif.

## NGIAgoraLocalUser.h

Modified: Fix typo.

## NGIAgoraMediaNodeFactory.h

Modified: Fix return value of setProperty() and getProperty().

# API (2020-09-04)

Add new callback to IRtcConnectionObserver.

## NGIAgoraRtcConnection.h

Modified:

- Changes add onNetworkTypeChanged to IRtcConnectionObserver

# API (2020-08-13)

## IAgoraRtmService.h

Modified:

- Changes onSendMessageState(int64_t messageId, CHANNEL_MESSAGE_STATE state) to onSendMessageState(int64_t messageId, CHANNEL_MESSAGE_STATE state)

# API (2020-08-21)

## NGIAgoraVideoTrack.h

Modified:

- Change addVideoFilter(filter) to addVideoFilter(filter, position)

# API (2022-12-09)

## IAgoraRtmpStreamingService.h

Modified:

- Fix return value of startRtmpStreamWithTranscoding/startRtmpStreamWithoutTranscoding

# API (2020-08-07)

## NGIAgoraMediaNodeFactory.h

Add:

- `IVideoFrameTransceiver`class
- createVideoFrameTransceiver function for IMediaNodeFactory

## IAgoraService.h

Add:

- createTranscodedVideoTrack function for IAgoraService

# API (2020-08-04)

API change to support string UID.

## IAgoraService.h

Modified: Modify AgoraServiceConfiguration to include string uid switch

- bool useStringUid Add: Add Low level api to IAgoraService to support register user account
- IAgoraService::registerLocalUserAccount

# API (2020-08-11)

Fix return error

NGIAgoraMediaNodeFactory.h

## NGIAgoraLocalUser.h

Modified:

- Modify setProperty and getProperty return type
- Fix spell error

# API (2020-07-31)

## NGIAgoraAudioTrack.h

Add `mean_waiting_time` field for RemoteAudioTrackStats

# API (2020-07-29)

## NGIAgoraAudioDeviceManager.h

Add `getPlayoutAudioParameters(AudioParameters* params) const` function for INGAudioDeviceManager Add `getRecordAudioParameters(AudioParameters* params) const` function for INGAudioDeviceManager

# API (2020-08-03)

IAgoraService.h Add:

- AgoraServiceConfiguration add logDir

# API (2020-07-27)

## NGIAgoraAudioTrack.h

Remove free_pcm_data_list_size from ILocalAudioTrack::LocalAudioTrackStats

# API (2020-07-17)

Modify comment.

AgoraRefCountedObject.h IAgoraRtmpStreamingService.h IAgoraService.h NGIAgoraAudioDeviceManager.h NGIAgoraAudioTrack.h NGIAgoraCameraCapturer.h NGIAgoraExtensionControl.h NGIAgoraLocalUser.h NGIAgoraMediaNodeFactory.h NGIAgoraRtcConnection.h NGIAgoraScreenCapturer.h NGIAgoraVideoFrame.h NGIAgoraVideoMixerSource.h

## NGIAgoraVideoTrack.h

Modify:

- Remove api2 prefix.

# API (2020-07-16)

add onConnecting

## NGIAgoraRtcConnection.h

Modified: add onConnecting to IRtcConnectionObserver

# API (2020-07-13)

## NGIAgoraAudioTrack.h

Add:

- add "uint32_t effect_type" member to ILocalAudioTrack::LocalAudioTrackStats

# API (2020-07-03)

Modify comment.

## NGIAgoraLocalUser.h

Modify: Modify comment.

- Changes changes comment about pcmDataOnly.

## NGIAgoraRtcConnection.h

Modify: Modify AudioSubscriptionOptions and RtcConnectionConfiguration.

- Changes remove pcmDataOnly from AudioSubscriptionOptions.
- Changes add enableAudioRecordingOrPlayout into RtcConnectionConfiguration.

# API (2020-07-01)

## IAgoraService.h

Modify: Remove media engine type.

# API (2020-06-27)

Make include path correct

# API (2020-06-18)

Modify VideoEncodedImageData.

## video_node_i.h

Modify: Modify VideoEncodedImageData.

- Remove packetizationMode.

# API (2020-06-18)

Move Move IRecordingDeviceSource from NGIAgoraMediaNodeFactory.h to NGIAgoraAudioDeviceManager.h

# API (2020-06-17)

## agora_service_i.h

Deleted: Delete unused api

- Deleted createLocalAudioTrack(const rtc::AudioOptions& audioOptions)

# API (2020-06-16)

## IAgoraRtmService.h

Modify: Fix compile error

- Remove the incorrect type conversion code in class IChannelEventHandler

# API (2020-06-15)

## IAgoraService.h

Add:

- Add createRecordingDeviceAudioTrack() for IAgoraService.

## NGIAgoraMediaNodeFactory.h

Add:

- Add createRecordingDeviceSource() for IMediaNodeFactory.
- Add interface IRecordingDeviceSource

# API (2020-06-10)

## NGIAgoraVideoFrame.h

Modify: Fix compile error

- unnamed class used in typedef name won't compile in C++20

# API (2020-06-09)

Modify onMediaPacketReceived.

## NGIAgoraMediaNodeFactory.h

Modified: Modify the declaration of onMediaPacketReceived.

- Changes onMediaPacketReceived(const uint8_t *packet, size_t length) to onMediaPacketReceived(const uint8_t *packet, size_t length, const agora::media::base::PacketOptions& options)

# API (2020-06-04)

Modify the callback onBandwidthEstimationUpdated

## NGIAgoraRtcConnection.h

Modified: Modify the declaration of onBandwidthEstimationUpdated

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

# API (2020-06-04)

Add SenderOptions and modify createCustomVideoTrack

## IAgoraService.h

Add: Add SenderOptions

- struct SenderOptions

Modified: Change the declaration of createCustomVideoTrack

- Changes "virtual agora_refptr<rtc::ILocalVideoTrack> createCustomVideoTrack( agora_refptr<rtc::IVideoEncodedImageSender> videoSource, bool syncWithAudioTrack = false, TCcMode ccMode = CC_ENABLED)" To "virtual agora_refptr<rtc::ILocalVideoTrack> createCustomVideoTrack( agora_refptr<rtc::IVideoEncodedImageSender> videoSource, SenderOptions& options)"
- Remove option syncWithAudioTrack from all related apis

# API (2020-05-29)

Updated docs for the following header files:

- NGIAgoraVideoTrack.h
- NGIAgoraRtcConnection.h
- NGIAgoraMediaNodeFactory.h
- NGIAgoraLocalUser.h
- NGIAgoraAudioTrack.h
- IAgoraService.h

# API (2020-05-27)

## NGIAgoraMediaNodeFactory.h

Modify:

- Add a parameter for createMediaPlayerSource()

# API (2020-05-26)

## NGIAgoraAudioTrack.h

Modified:

- Init RemoteAudioTrackStats

# API (2020-05-26)

Move createObservableVideoSink() from IMediaNodeFactory to IMediaNodeFactoryEx

## NGIAgoraMediaNodeFactory.h

Deleted:

- Delete createObservableVideoSink()

# API (2020-05-20)

## NGIAgoraMediaPlayerSource.h

Modified:

- Rename registerPlayerObserver()/unregisterPlayerObserver() to registerPlayerSourceObserver()/unregisterPlayerSourceObserver() in IMediaPlayerSource.
- Remove 'const' from the parameter of onPlayerSourceStateChanged(), onPositionChanged() and onPlayerEvent() in IMediaPlayerSourceObserver since unnecessary.

# API (2020-05-20)

## NGIAgoraVideoTrack.h

Modified:

- Change addRenderer(renderer) to addRenderer(renderer, position)

# API (2020-05-19)

## NGIAgoraMediaNodeFactory.h

Add:

- bool isExternal()

## NGIAgoraVideoTrack.h

Modified:

- remove "bool internal" parameter form funciton addVideoFilter

# API (2020-05-19)

## NGIAgoraCameraCapturer.h

Deleted:

- Delete ICameraCaptureObserver interface
- Delete ICameraCaptureObserver::registerCameraCaptureObserver
- Delete ICameraCaptureObserver::unregisterCameraCaptureObserver
- Delete ICameraCaptureObserver::getCaptureState

## NGIAgoraLocalUser.h

Modified:

- Annotation of ILocalUserObserver::onLocalVideoTrackStateChanged

# API (2020-05-12)

Remove illegal header files included and add including header files.

## NGIAgoraLocalUser.h

Deleted: Delete the IAgoraRtcEngine.h included

- Deleted #include "IAgoraRtcEngine.h"

## NGIAgoraMediaNodeFactory.h

Deleted: Delete the IAgoraRtcEngine.h included

- Deleted #include "IAgoraRtcEngine.h"

## internal/agora_service_i.h

Add: Add the IAgoraLog.h including

- #include "base/IAgoraLog.h"

# API (2020-05-09)

## IAgoraService.h

Add:

Add AUDIO_SCENARIO_TYPE audioScenario for AgoraServiceConfiguration

# API (2020-05-08)

NGIAgoraLocalUser.h NGIAgoraMediaNodeFactory.h NGIAgoraMediaPlayerSource.h internal/media_node_factory_i.h

## internal/rtc_connection_i.h

Modified:

- Change namespace

# API (2020-05-08)

## NGIAgoraExtensionControl.h

Modified:

- Move LOG_LEVEL from AgoraBase.h to IAgoraLog.h and change namespace to commons

## NGIAgoraMediaNodeFactory.h

Modify:

- Remove parameter |view| in createVideoRenderer
- Change namespace

# API (2020-05-07)

## AgoraOptional.h

Modified:

- Changes optional.h to AgoraOptional.h

# API (2020-04-29)

Refine RemoteVideoTrackStats

## NGIAgoraVideoTrack.h

Modified: Rename fields

- streamType to rxStreamType

Add: Add fields

- decoderOutputFrameRate
- rendererOutputFrameRate
- packetLossRate
- totalFrozenTime
- frozenRate

# API (2020-04-26)

## NGIAgoraCameraCapturer.h

Deleted:

- ICameraCapturer::CAPTURE_STATE::CAPTURE_STATE_STOPPING
- ICameraCapturer::CAPTURE_STATE::CAPTURE_STATE_STARTING
- switchCamera()

# API (2020-04-20)

## NGIAgoraMediaNodeFactory.h

Add:

- IVideoSinkBase::onDataStreamWillStart()
- IVideoSinkBase::onDataStreamWillStop()
- IVideoFilter::onDataStreamWillStart()
- IVideoFilter::onDataStreamWillStop()

# API (2020-04-17)

## NGIAgoraExtensionControl.h

Add: Add IExtensionControl interfaces for agora extensions

- getCapabilities
- registerExtensionProvider
- unregisterExtensionProvider
- createVideoFrame
- copyVideoFrame
- recycleVideoCache
- dumpVideoFrame
- log

## NGIAgoraExtension.h

Deleted: file deleted

## NGIAgoraMediaNodeProvider.h

Deleted: file deleted

## NGIAgoraMediaNodeFactory

Deleted:

- registerMediaNodeProvider
- unregisterMediaNodeProvider

# API (2020-04-16)

NGIAgoraVideoFrame.h Add: Add IVideoFrame interfaces for external video frames

- type
- format
- width
- height
- size
- rotation
- setRotation
- timestampUs
- setTimestampUs
- data
- mutableData
- resize
- textureId
- fill

# API (2020-04-13)

## NGIAgoraMediaPlayerSource.h

Modified:

- Refine the API order of IMediaPlayerSource().

API (2020-04-12)

# Add send intra request api.

## NGIAgoraLocalUser.h

Add: Add send intra request api.

- sendIntraRequest()

# API (2020-04-11)

## NGIAgoraVideoTrack.h

Modified:

- IVideoTrack::addVideoFilter()

# API (2020-04-10)

## NGIAgoraRtcConnection.h

Added: Support sending custom event to argus

- IRtcConnection::sendCustomReportMessage().

## IAgoraRtmService.h

Added: Add parameter 'eventSpace', used during report RTM events

- IAgoraRtmService::initialize(const char *appId, IRtmServiceEventHandler *eventHandler, uint64_t eventSpace).

# API (2020-04-10)

Add field in struct LocalAudioTrackStats

## NGIAgoraAudioTrack.h

*Deleted:** delete struct LocalAudioTrackStats, use LocalAudioStats instead

- struct LocalAudioTrackStats

# API (2020-04-10)

## NGIAgoraMediaPlayerSource.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-09)

## NGIAgoraVideoMixerSource.h

Add:

- Video Mixer related data structures and interfaces (POC)

## IAgoraService.h

Add:

- createMixedVideoTrack (POC)

## NGIAgoraMediaNodeFactory.h

Add:

- createVideoMixer (POC)

# API (2020-04-03)

## NGIAgoraCameraCapturer.h

Modified: Add APPLE macro judge.

# API (2020-04-03)

Add intra request callback and network observer.

## NGIAgoraLocalUser.h

Add: Add intra request callback.

- ILocalUserObserver::onIntraRequestReceived()

## NGIAgoraRtcConnection.h

Add: Add network observer and its register/unregister methods.

- class INetworkObserver
- IRtcConnection::registerNetworkObserver()
- IRtcConnection::unregisterNetworkObserver()

## NGIAgoraCameraCapturer.h

Add: Add destructor of ICameraCaptureObserver

- ICameraCaptureObserver::~ICameraCaptureObserver()

## NGIAgoraMediaNodeFactory.h

Modified: Modify the implement of BeautyOptions constructor

- BeautyOptions::BeautyOptions()

# API (2020-04-2)

## NGIAgoraLocalUser.h

*Add:** elapsed in onUserVideoTrackStateChanged onVideoTrackPublishSuccess

# API (2020-03-31)

Move appId from AgoraServiceConfigurationEx to AgoraServiceConfiguration

## IAgoraService.h

Add:** struct AgoraServiceConfiguration { const char appId = nullptr; }

# API (2020-03-30)

## NGIAgoraCameraCapturer.h

Modified: Refine the API order of IDeviceInfo.

# API (2020-03-30)

## IAgoraService.h

Modified: Remove enabled parameter from IAgoraService::createLocalAudioTrack()

# API (2020-03-27)

## NGIAgoraRtcConnection.h

Modified:

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

Deleted:

- Deleted enableLastmileTest()
- Deleted disableLastmileTest()

# API (2020-03-16)

## NGIAgoraAudioTrack.h

Add: Add isEnabled to ILocalAudioTrack to get the local audio track enabled status

- ILocalAudioTrack::isEnabled()

# API (2020-03-16)

## NGIAgoraRtcConnection.h

Add:

- enum RECV_TYPE

# API (2020-03-12)

Add 'received_bytes' for 'RemoteAudioTrackStats'

## NGIAgoraAudioTrack.h

Add:

- RemoteAudioTrackStats::received_bytes

# API (2020-03-06)

Add 'virtual' for ~IAgoraService() and ~IAgoraServiceEx()

## IAgoraService.h

Modified:

- Add 'virtual' for ~IAgoraService()

## agora_service_i.h

Modified:

- Add 'virtual' for ~IAgoraServiceEx()

# API (2020-02-27)

new cc type

## AgoraBase.h

Modified:

- Add new cc type CONGESTION_CONTROLLER_TYPE_AUT_CC;

# API (2020-02-25)

Changes for AudioSessionConfiguration

## IAgoraService.h

Modified:

- Change Optional<int> ioBufferDuration; to Optional<double> ioBufferDuration;

# API (2020-02-23)

API changes for supporting data channel

## NGIAgoraRtcConnection.h

Add: Add data channel api to IRtcConnection

- createDataStream()
- sendStreamMessage()

Add data channel callback api to IRtcConnectionObserver

- onStreamMessage()
- onStreamMessageError()

# API (2020-02-21)

Changes for audio video stats and state

## NGIAgoraAudioTrack.h

Add: Add two structs of audio track stats.

- add struct RemoteAudioTrackStats
- add struct LocalAudioTrackStats

Modified:

- Changes getStatistics(RemoteAudioStats& stats) to getStatistics(RemoteAudioTrackStats& stats)
- Changes REMOTE_AUDIO_STATE getState() to REMOTE_AUDIO_STATE getState()

## NGIAgoraLocalUser.h

Add: Add callback functions of audio track statistics.

- onLocalAudioTrackStatistics()
- onRemoteAudioTrackStatistics()

Modified: Modify the type of field codec_name

- Changes std::string codec_name to char codec_name[media::kMaxCodecNameLength]
- Changes onUserAudioTrackStateChanged(user_id_t, agora_refptr<rtc::IRemoteAudioTrack>, REMOTE_AUDIO_STREAM_STATE, REMOTE_AUDIO_STREAM_REASON) to onUserAudioTrackStateChanged(user_id_t, REMOTE_AUDIO_STATE, REMOTE_AUDIO_STATE_REASON, int) = 0;

## NGIAgoraAudioDeviceManager.h

Deleted:

- Deleted onMicrophoneEnabled()

# API (2020-02-20)

Support lastmile probe test

## NGIAgoraRtcConnection.h

Add: Add callback for getting lastmile probe test results and two functions to control lastmile probe test

- void onLastmileProbeResult(const LastmileProbeResult& result)
- int startLastmileProbeTest(const LastmileProbeConfig& config)
- int stopLastmileProbeTest()

# API (2020-02-10)

API changes for create video track parameter

## IAgoraService.h

Modified:

- createCameraVideoTrack(), createScreenVideoTrack(), createCustomVideoTrack() remove `bool enable`

# API (2020-02-15)

API changes for unifying the definition of connection state in AgoraBase.h

## NGIAgoraRtcConnection.h

Deleted: Delete the definition of TConnectionState.

- Deleted enum TConnectionState

# API (2020-02-06)

API changes for media packet and media control packet sender and receiver

## IAgoraService.h

Add:

Add two functions to create media tracks with IMediaPacketSender, which is created from media node factory.

- agora_refptr<rtc::ILocalAudioTrack> createCustomAudioTrack(agora_refptr<rtc::IMediaPacketSender> source)
- agora_refptr<rtc::ILocalVideoTrack> createCustomVideoTrack(agora_refptr<rtc::IMediaPacketSender> source)

## NGIAgoraAudioTrack.h

Add: Add two functions to register and unregister media packet receiver.

- int registerMediaPacketReceiver(IMediaPacketReceiver* packetReceiver)
- int unregisterMediaPacketReceiver(IMediaPacketReceiver* packetReceiver)

## NGIAgoraLocalUser.h

Add: Add function to get IMediaControlPacketSender. Add two functions to register and unregister media control packet receiver.

- IMediaControlPacketSender* getMediaControlPacketSender()
- int registerMediaControlPacketReceiver(IMediaControlPacketReceiver* ctrlPacketReceiver)
- int unregisterMediaControlPacketReceiver(IMediaControlPacketReceiver* ctrlPacketReceiver)

## NGIAgoraVideoTrack.h

Add: Add two functions to register and unregister media packet receiver.

- int registerMediaPacketReceiver(IMediaPacketReceiver* packetReceiver)
- int unregisterMediaPacketReceiver(IMediaPacketReceiver* packetReceiver)

## NGIAgoraMediaNodeFactory.h

Add: Add function to create media packet sender as well as related definitions

- agora_refptr<IMediaPacketSender> createMediaPacketSender()
- IMediaPacketSender
- IMediaControlPacketSender
- IMediaPacketReceiver
- IMediaControlPacketReceiver

# API (2020-01-21)

API changes for getting audio filter.

## Audio Filter (api2/NGIAgoraMediaNodeFactory.h)

Add:

Main methods:

- const char * getName() const

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Add:

Main methods:

- agora_refptr<IAudioFilter> getAudioFilter(const char *name) const

# API (2020-02-10)

## Deleted:

- IAgoraService.h
  - class IAgoraService -API createSignalingEngine()

# API (2020-01-20)

## Add:

- NGIAgoraLocalUser.h
  - class ILocalUser
    - API adjustPlaybackSignalVolume()
    - API getPlaybackSignalVolume()

# API (2020-01-19)

## Modified:

- NGIAgoraRtcConnection.h
  - struct RtcConnectionConfiguration add CHANNEL_PROFILE_TYPE channelProfile

# API (2020-01-17)

## Modified:

- IAgoraService.h
  - createCameraVideoTrack(), createScreenVideoTrack(), createCustomVideoTrack() and createCustomVideoTrack() change argument to `bool enable = false`

# API (2020-01-15)

## Add:

- NGIAgoraScreenCapturer.h
  - class IScreenCapturer
    - API initWithMediaProjectionPermissionResultData()

# API (2020-01-13)

## Modified:

- NGIAgoraMediaPlayerSource.h
  - Rename onPlayerStateChanged() of IMediaPlayerSourceObserver to onPlayerSourceStateChanged

# API (2020-01-09)

## Deleted:

- NGIAgoraMediaPlayerSource.h
  - class IMediaPlayerSource
    - API registerVideoFrameObserver()
    - API unregisterVideoFrameObserver()

# API (2020-01-08)

## Add:

- NGIAgoraMediaPlayerSource.h
  - Add the following class
    - class IMediaPlayerSource
    - class IMediaPlayerSourceObserver
- NGIAgoraMediaNodeFactory.h
  - class IMediaNodeFactory
    - Add API createMediaPlayerSource()
- IAgoraService.h
  - class IAgoraService
    - Add API createMediaPlayerVideoTrack()
    - Add API createMediaPlayerAudioTrack()

## Deleted:

- NGIAgoraMediaPlayer.h
  - Delete class IMediaPlayer
  - Delete class IMediaPlayerObserver
- IAgoraService.h
  - class IAgoraService
    - Delete API createMediaPlayer()

# API (2019-12-24)

Macro cleanup

IAgoraService (api2/IAgoraService.h)

- remove FEATURE_RTMP_STREAMING_SERVICE and FEATURE_RTM_SERVICE

# API (2019-12-22)

API changes

## Add:

## Modified:

- AgoraBase.h
  - rename RemoteVideoTrackInfo to VideoTrackInfo
  - relevant changes in other interfaces
- IAgoraRtcEngine.h
  - struct VideoCanvas add field isScreenView
- IAgoraService.h
  - createCameraVideoTrack(), createScreenVideoTrack(), createCustomVideoTrack() and createCustomVideoTrack() add argument `bool enable = true`
- NGIAgoraLocalUser.h
  - rename RemoteVideoTrackInfo to VideoTrackInfo
- NGIAgoraMediaNodeFactory.h
  - rename RemoteVideoTrackInfo to VideoTrackInfo
- NGIAgoraVideoTrack.h
  - rename RemoteVideoTrackInfo to VideoTrackInfo

# API (2019-12-03)

API changes for graceful exiting

IAgoraService (api2/IAgoraService.h)

- add release()

# API (2019-12-10)

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Add:

Main methods:

- int enableEarMonitor(bool enable, bool includeAudioFilter)

# API (2019-12-04)

API changes for supporting create RTMP streaming serivce.

## Add:

- IAgoraRtmpStreamingService.h
- IAgoraRtmService.h

## Modified:

- IAgoraService.h
  - Add method `agora_refptr<rtc::IRtmpStreamingService> createRtmpStreamingService`
  - Add method `rtm::IRtmService* createRtmService()`

# API (2019-11-29)

API changes for supporting audio filter.

## Audio Filter (api2/NGIAgoraMediaNodeFactory.h)

Base class of custom audio filter, application can implement its own filter and add it to audio track.

New interface and enum definition:

class IAudioFilterBase : public RefCountInterface {
public:
// Return false if filter decide to drop the frame.
virtual bool adaptAudioFrame(const AudioPcmFrame& inAudioFrame,
AudioPcmFrame& adaptedFrame) = 0;
};
class IAudioFilter : public IAudioFilterBase {
public:
virtual void setEnabled(bool enable) = 0;
virtual bool isEnabled() = 0;
};
enum AUDIO_FILTER_TYPE {
AUDIO_FILTER_EFFECT,
AUDIO_FILTER_ANS,
AUDIO_FILTER_VOICE_CHANGE
};

## Media Node Factory (api2/NGIAgoraMediaNodeFactory.h)

Add:

Main methods:

- agora_refptr<IAudioFilter> createAudioFilter(AUDIO_FILTER_TYPE type)

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Add:

Internal enum:

enum AudioFilterPosition {
Default
};

Main methods:

- bool addAudioFilter(agora_refptr<IAudioFilter> filter, AudioFilterPosition position)
- bool removeAudioFilter(agora_refptr<IAudioFilter> filter, AudioFilterPosition position)

# API (2019-11-28)

API cleanup

## Modified:

- NGIAgoraMediaNodeFactory
  - modify class IVideoFrameSender, use agora ExternalVideoFrame instead of webrtc VideoFrame
  - modify class IVideoFilterBase
    - use agora VideoFrame instead of webrtc VideoFrame
    - remove onSinkWantsChanged
  - modify class IVideoSinkBase
    - Add a interface to distinguish external or internal video sink
  - move class IVideoFrameAdapter to internal interface
  - move createVideoFrameAdapter() to internal interface
- NGIAgoraAudioTrack.h
  - IAudioTrack
    - virtual int adjustPlayoutVolume(int volume) = 0;
    - virtual int getPlayoutVolume(int* volume) = 0;
  - ILocalAudioTrack
    - virtual int adjustPublishVolume(int volume) = 0;
    - virtual int getPublishVolume(int* volume) = 0;

# API (2019-11-14)

Refine Media Statistics and event report

## Add:

## Modified:

- NGIAgoraAudioTrack.h
  - Add struct LocalAudioTrackStats
  - Add method GetStats()
- NGIAgoraLocalUser.h
  - rename LocalAudioStats to LocalAudioDetailedStats, since LocalAudioStats belong to high level API

## Deleted:

- AgoraBase.h
  - remove AUDIO_CODEC_AAC in AUDIO_CODEC_TYPE

# API (2019-11-25)

API changes for extension

- move `interface/cpp/api2/IAgoraParameter.h` to `interface/cpp/IAgoraParameter.h`

# API (2019-11-21)

API changes for extension

- move `interface/cpp/AgoraParameter.h` to `interface/cpp/api2/IAgoraParameter.h`

# API (2019-11-19)

API changes.

## Audio Frame Observer (IAgoraMediaEngine.h)

Modified:

Main field(s)

Old | New
--- | ---
`IAudioFrameObserver::AudioFrame::samples` | `IAudioFrameObserver::AudioFrame::samplesPerChannel`

# API (2019-11-12)

API changes for extension

## Agora Extension (interface/cpp/api2/NGIAgoraExtension.h)

- struct `agora_extension`
- struct `agora_core`

# API (2021-06-03)

## IAudioDeviceManagerObserver (api2/NGIAgoraAudioDeviceManager.h)

Add:

- void onVolumeIndication(int volume)

# API (2019-11-11)

API changes for supporting audio local playback.

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Add:

Main methods:

- void enableLocalPlayback(bool enable)
- int adjustPlayoutVolume(int volume)
- int adjustPublishVolume(int volume)

# API (2019-11-08)

API changes for default client role is audience.

## Rtc Engine (interface/cpp/IAgoraRtcEngine.h)

- struct `ChannelMediaOptions` add field `clientRoleType`.

## Rtc Connection (interface/cpp/api2/NGIAgoraRtcConnection.h)

- struct `RtcConnectionConfiguration` add field `clientRoleType`.

## Local User (api2/NGIAgoraLocalUser.h)

Add:

Main methods:

- CLIENT_ROLE_TYPE getUserRole();

# API (2019-11-05)

API changes for supporting register/unregister encoded image receiver.

Deleted:

move IVideoEncodedImageReceiver to AgoraBase.h

# API (2019-11-04)

## Media Player (api2/NGIAgoraMediaPlayer.h)

Add:

Main methods:

- int setLooping(bool looping)

Deleted:

Main methods:

- int close()

# API (2019-10-30)

API changes for supporting audio simple audio player.

## Media Player (api2/NGIAgoraMediaPlayer.h)

This interface provide access to a media player.

Main methods are:

- int open(const char* url)
- int play()
- int playFromPosition(int position)
- int stop()
- int pause()
- int resume()
- int getDuration(int& duration)
- int getCurrentPosition(int& currentPosition)
- int setCurrentPosition(int newPos)
- int close()
- int registerPlayerObserver(IMediaPlayerObserver* observer)
- int unregisterPlayerObserver(IMediaPlayerObserver* observer)
- agora_refptr<rtc::ILocalAudioTrack> getPlayerAudioTrack()
- agora_refptr<rtc::ILocalVideoTrack> getPlayerVideoTrack()

The denifinion of IMediaPlayerObserver:

class IMediaPlayerObserver {
public:
virtual ~IMediaPlayerObserver() = default;
virtual void onPlayerStateChanged(const IMediaPlayer::PlayerState& state) = 0;
virtual void onPositionChanged(const int position_ms) = 0;
};

# API (2019-10-17)

API changes for supporting audio tx mixer.

## Local User (api2/NGIAgoraLocalUser.h)

Add:

Internal struct

- struct ANAStats;
- struct AudioProcessingStats;
- struct LocalAudioStats;

Main methods:

- int setAudioEncoderConfiguration(const rtc::AudioEncoderConfiguration& config)
- bool getLocalAudioStatistics(LocalAudioStats& stats)

Modified:

Main methods

Old | New
--- | ---
`int setPlaybackAudioFrameParameters(size_t bytesPerSample, size_t numberOfChannels, uint32_t sampleRateHz)` | `int setPlaybackAudioFrameParameters(size_t numberOfChannels, uint32_t sampleRateHz)`
`int setRecordingAudioFrameParameters(size_t bytesPerSample, size_t numberOfChannels, uint32_t sampleRateHz)` | `int setPlaybackAudioFrameParameters(size_t numberOfChannels, uint32_t sampleRateHz)`
`int setMixedAudioFrameParameters(size_t bytesPerSample, size_t numberOfChannels, uint32_t sampleRateHz)` | `int setPlaybackAudioFrameParameters(size_t numberOfChannels, uint32_t sampleRateHz)`
`int setPlaybackAudioFrameBeforeMixingParameters(size_t bytesPerSample, size_t numberOfChannels, uint32_t sampleRateHz)` | `int setPlaybackAudioFrameParameters(size_t numberOfChannels, uint32_t sampleRateHz)`

## agora_refptr (AgoraRefPtr.h)

Add:

Main methods

- bool operator==(const agora_refptr<T>& r)
- bool operator<(const agora_refptr<T>& r) const

## Audio PCM Data (api2/internal/audio_node_i.h)

Modified:

Main field(s)

Old | New
--- | ---
number_of_samples | samples_per_channel

## Local Audio Track (api2/NGIAgoraAudioTrack.h)

Deleted:

Internal struct

- struct ANAStats;
- struct AudioProcessingStats;
- struct LocalAudioStats;

Main methods:

- int setAudioEncoderConfiguration(const rtc::AudioEncoderConfiguration& config)
- bool getStatistics(LocalAudioStats& stats)

# API (2019-10-13 recorded frome release/2.6.0)

The full details of API descritpion can be seen in https://confluence.agoralab.co/display/MS/API+Introduction

# Agora Low Level APIs

## NGIAgoraLocalUser.h

Modify: moidfy enableAudioVolumeIndication support vad

# API (2021-09-01)

## Agora Service

Agora Communications as a Service (CaaS) provides ensured quality of experience (QoE) for worldwide Internet-based voice and video communications through a virtual global network that is especially optimized for real-time web and mobile-to-mobile applications.

The IAgoraService is the entry point of Agora Low Level APIs. This interface is used by applications to create access points to Agora Modules to enable real-time communication, including RTC Connection, Media Tracks, Audio Device Manager and etc. In addition, in order to customize different user scenarios, the interface allows application to configure service and media sessions on the global level, i.e., AgoraServiceConfiguration or AudioSessionConfiguration.

Main methods are:

- initialize(appId, serviceConfiguration)
- createRtcConnection()
- createLocalAudioTrack()
- createAudioDeviceManager()
- createMediaNodeFactory()
- createLocalVideoTrack()
- setAudioSessionConfiguration()
- getAudioSessionConfiguration()
- setLogFile()
- setLogFilter()
- release()

## RTC Connection

This allows an application to establish a connection to a Agora Channel. In order to establish a connection, application must provide an App ID or Token and the channel identifier you want to join.

Connecting to a Agora Channel is done asynchronous, application can listen connection state by provided RTC Connection Observer. With connected to a channel, application can use Local User to publish and subscribe media stream/data from Agora Channel.

RTC connection also monitors remote users in the channel. Once a remote user joined or left a channel application will be notified.

Main methods are:

- connect()
- disconnect()
- getLocalUser()
- getConnectionInfo()
- getRemoteUsers()
- getUserInfo()
- release()
- IConnectionObserver::onConnected()
- IConnectionObserver::onDisconnected()
- IConnectionObserver::onConnecting()
- IConnectionObserver::onConnectionFailure()
- IConnectionObserver::onUserJoined()
- IConnectionObserver::onUserleft()

## Local User (get from RtcConnection)

This interface represents a combination of Publisher and Subscriber. Each Rtc Connection has its own Local User, and application can get the Local User by IRtcConnection::getLocalUser()

The Local User has two clients roles, broadcaster(Publisher with or w/o Subscriber) and audience(Subscriber only). The Publisher publish local Audio and Video tracks to a channel, like a host in LIVE BROADCAST profile or a participant in COMMUNICATION profile. The Subscriber subscribes and receives remote Audio and Video tracks from different users in the channel.

Main methods are:

- publishAudio()
- unpublishAudio()
- publishVideo()
- unpublishVideo()
- subscribeAudio()
- subscribeAllAudio()
- unsubscribeAudio()
- unsubscribeAllAudio()
- subscribeVideo()
- subscribeAllVideo()
- unsubscribeVideo()
- unsubscribeAllVideo()
- registerLocalUserObserver()
- unregisterLocalUserObserver()
- release()
- ILocaUserlObserver::onAudioTrackPublishSuccess()
- ILocaUserlObserver::onAudioTrackPublicationFailure()
- ILocaUserlObserver::onVideoTrackPublishSuccess()
- ILocaUserlObserver::onVideoTrackPublicationFailure()
- ILocaUserlObserver::onUserAudioTrackSubscribed()
- ILocaUserlObserver::onUserAudioTrackUnsubscribed()
- ILocaUserlObserver::onUserAudioTrackStateChanged()
- ILocaUserlObserver::onUserAudioTrackStatistics()
- ILocaUserlObserver::onUserAudioTrackSubscriptionFailure()
- ILocaUserlObserver::onUserVideoTrackSubscribed()
- ILocaUserlObserver::onUserVideoTrackUnsubscribed()
- ILocaUserlObserver::onUserVideoTrackStateChanged()
- ILocaUserlObserver::onUserVideoTrackStatistics()
- ILocaUserlObserver::onUserVideoTrackSubscriptionFailure()
- ILocaUserlObserver::onUserNetworkQuality()
- ILocaUserlObserver::onAudioVolumeIndication()

## Local Audio Track

A presentation of a PCM stream. A Local Audio Track can be created directly by IAgoraService::createLocalTrack(), which originates from default audio recording device, i.e., built-in microphone. Application can also change default audio recording devices by IAudioDeviceManager APIs if multiple recording devices available in system. Local Audio Track can also be created from IMediaPlayer().

After local tracks are created, Application can publish one or multiple local audio tracks through ILocalUser::PublishAudio(). By natual, all published tracks will be mixed first, then encoded into a single audio stream and send to Agora Channel.

Main methods are:

- setEnabled()
- isEnabled()
- adjustSignalingVolume()
- getSignalingVolume()
- release()

## Remote Audio Track

A presentation of a remote audio track.

Main methods are:

- setPlaybackEnabled()
- isPlaybackEnabled()
- getState()

## Audio Device Manager

The interface provides access to connected audio recording devices like microphones and audio playout devices like speakers.

Main methods are:

- setMicrophoneVolume()
- getMicrophoneVolume()
- setSpeakerVolume()
- getSpeakerVolume()
- setMicrophoneMute()
- getMicrophoneMute()
- setSpeakerMute()
- getSpeakerMute()
- getNumberOfPlayoutDevices()
- getNumberOfRecordingDevices()
- getPlayoutDeviceInfo()
- getRecordingDeviceInfo()
- setPlayoutDevice()
- setRecordingDevice()
- startMicrophoneTest()
- stopMicrophoneTest()
- registerObserver()
- unregisterObserver()
- onVolumeIndication()
- onDeviceStateChanged()
- onRoutingChanged()

## Video Node Factory

This factory interface is used to create video nodes to build video track.

Main methods are:

- createCameraCapturer()
- createScreenCapturer()
- createCustomVideoSource()
- createVideoFilter()
- createVideoRenderer()

## Video Camera Capturer

This interface is used to control camera as a video source. It also manages camera devices in the windows and MacOS.

Main methods are:

- setCameraSource()
- switchCamera()
- startCapture()
- stopCapture()
- getCaptureFormat()
- getCaptureState()
- registerVideoFrameObserver()
- unregisterVideoFrameObserver()
- registerCameraCaptureObserver()
- unregisterCameraCaptureObserver()

## Video Screen Capturer

This interface is used to control screen sharing as video source.

Main methods are:

- release()

## Custom Video Source

This interface allows application to push external video frame to the Agora SDK.

Main method is:

- pushVideoFrame()

## Video Filter & Video Filter Base

The Video Filter is an intermediate node, which can be added in the video track by IVideoTrack::addVideoFilter(). It reads video frames from the previous node in the track, e.g., a video source or another video filter and then writes video frames back after frame adaption.

Agora provides several built-in video filters, e.g., video beauty filter, which can be created by IMediaNodeFactory::createVideoFilter().

Application can also write its own video filter to modify video frame by implementing IVideoFilterBase::adaptVideoFrame() and add the video filter in the track by IVideoTrack::addVideoFilter().

Main methods are:

- setFilterParameters()
- setEnabled()
- isEnabled()
- registerVideoFrameObserver()
- unregisterVideoFrameObserver()

## Video Renderer & Video Sink Base

The Video Renderer inherits Video Sink Base, which is used to render video frame. Agora provides built-in video renderer by IMediaNodeFactory::createVideoRenderer() and application can add it in the video track by IVideoTrack::addVideoRenderer() The Video Sink Base is video frame observer, which can reads video frame from built-in video sources, video filters and video track.

Main methods are:

- setRenderMode()
- setMirror()

## Local Video Track

A presentation of local video track that originates from one video source, e.g., camera capturer, screen capturer or a custom video source. Local Video Track can be created by IAgoraService::createVideoTrack()

Agora allows application to customize video track by selecting or adding different video nodes which can be created by IMediaNodeFactory, e.g., Video Source, Video Filter and Video Renderer. You can add multiple nodes and the order of nodes in the pipeline depends on the order of addition by the application.

After video track customized, Application can publish one or multiple local video tracks through ILocalUser::PublishVideo() and each video track has its own video send stream. e.g., you can send camera capturing stream and screen sharing stream simultaneously, and remote users can receive two video streams accordingly.

Main methods are:

- setEnabled()
- isEnabled()
- addVideoFilter()
- removeVideoFilter()
- addVideoRenderer()
- removeVideoRenderer()
- release()

## Remote Video Track

A presentation of a remote video track. Similar with local video track, it also supports customization by adding video filters and renderers.

Main methods are:

- isEnabled()
- addVideoFilter()
- removeVideoFilter()
- addVideoRenderer()
- removeVideoRenderer()
- release()

# Terminologies & Basics

## APP ID

Each “vendor�organization using the Agora SDK (across platforms) has a unique App ID which identifies that organization. All the communication sessions that are created across the Agora Global Network for one App ID are isolated from all other sessions for other App IDs. Therefore, communication sessions will not be connected together across vendors. Statistics, management, and billing are all separated according to the App ID. If an organization has multiple applications that should be kept completely separate, like they are built by completely different teams, then they would use multiple App IDs in this case. If applications need to communicate with each other, then a single App ID should be used.

## Dynamical Keys

Using your App ID directly is easy and works well for the initial development of applications, However, if someone illicitly obtains your App ID, then they will be able to perform the same operations in their own client applications. This will allow them to join sessions that belong to you and are billed to you. To prevent this and to secure your applications, Agora recommends to use dynamic keys for large-scale production applications.

Dynamical Keys has constructed within server-side code by APP Cert and other key materials, and APP Cert is never accessible in any client code, which makes Dynamical Key is more secure than static App ID.

Dynamical Key has expiration dates and also contains client permissions as different roles to access Agora Global Network, like host and audience.

Please also review Agora's Security Keys for more technical details.

## Agora Channel

Think of a channel as a meeting room. To set up communications between two or more instances of an application, the instances will join the same channel. Channel names are unique within the domain of an App ID. The process for app instances to exchange channel names is managed outside the SDK, and is handled by the application developer.

Channels are hosted on the Agora.io Global Network and a channel will automatically be created the first time an app instance tries to join, and destroyed when the last app instance leaved.

## User & User Information

User represents a participant in the channel. Each User has a unique string ID for its identity. Application can get current users-in-channel information and monitor user joining and leaving event by provided RTC Connection Observer after connected to a channel.

There are two kinds of users in channel, Local User and remote users. Local User is application itself which has two roles as Publisher to publish local streams and Subscriber to subscribe remote streams. Remote user represents the remote participant in the channel, who produces and publishes remote stream from remote end.

After connection established, application can get basic user info including User Id and user's media stream info. If Subscriber has subscribed specific remote user, application may also monitor remote user's stream track state.

# API (2022-03-16)

API changes for Screen Capture

- enable initWithDisplayId for Windows

  # API (2022-03-02)

## Add:

- NGIAgoraLocalUser.h
  - class ILocalUserObserver
    - API onRemoteSubscribeFallbackToAudioOnly(user_id_t userId, bool isFallbackOrRecover)

# API (2022-05-09)

## Add:

- NGIAgoraLocalUser.h
  - class ILocalUser virtual int registerLocalVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver* observer) virtual int unregisterLocalVideoEncodedFrameObserver(agora::media::IVideoEncodedFrameObserver* observer) virtual int forceNextIntraFrame()

# API (2022-06-09)

## **Modified:**

- NGIAgoraLocalUser.h
- NGIAgoraVideoTrack.h modify comments

IAgoraRtmpStreamingService.h

## remove deprecated API and callback of CDN stream

Deleted:

addPublishStreamUrl removePublishStreamUrl setLiveTranscoding onStreamUnpublished onStreamPublished

# API (2022-09-13)

## NGIAgoraLocalUser.h

Add: Add interface for ILocalUser

- virtual int setHighPriorityUserList(uid_t* vipList, int uidNum, int option)
- virtual int getHighPriorityUserList(std::vector<uid_t>& vipList, int& option)

# API (2023-01-30)

## NGIAgoraExtensionScreenSource.h

Modified:

- struct ScreenCaptureProfilingStatistics

# API (2023-01-12)

NGIAgoraExtensionAINoiseSuppressor.h Modified: change GetLibVersion() return value type from std::string to const char*

# API (2023-01-30)

## NGIAgoraExtensionScreenSource.h

Modified:

- struct ScreenCaptureProfilingStatistics

# API (2023-03-02)

## NGIAgoraVideoTrack.h

Modified:

- Add int e2eDelay for RemoteVideoTrackStats struct

# API (2023-03-12)

NGIAgoraVideoFrame.h Modified: modify comments

## video_node_i.h

Add:

- BUILT_IN_SOURCE_TEE

# API (2023-03-31)

## NGIAgoraRtcConnection.h

Deleted: getNtpTime

# API (2023-04-25)

## NGIAgoraVideoTrack.h

ADD: encoder_vender_id

# API (2023-04-25)

## NGIAgoraAudioDeviceManager.h

ADD: setAudioRoutingSpeakerOn

# API (2023-05-08)

NGIAgoraExtensionAINoiseSuppressor.h Modified: change GetLibVersion() input value from void to int

# API (2023-06-04)

NGIAgoraAudioDeviceManager.h ADD: setupAudioAttributeContext()

# API (2023-06-04)

IAgoraService.h ADD: createLocalMixedAudioTrack()

NGIAgoraLocalUser.h ADD: EnableLocalMixedAudioTrack()

NGIAgoraAudioMixerSource.h ADD: addAudioTrack() removeAudioTrack()

# API (2023-05-18)

## NGIAgoraCameraCapturer.h

Add:

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

# API (2023-07-05)

## NGIAgoraExtensionScreenSource.h

Modified:

- struct ScreenCaptureProfilingStatistics

# API (2023-08-07)

"$media_sdk_path/interface/cpp/api2/IAgoraRtmService.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/IAgoraFileUploader.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/IAgoraService.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraAudioDeviceManager.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraAudioTrack.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraCameraCapturer.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraExtensionControl.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraLocalUser.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraMediaNodeFactory.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraMediaNode.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraRtcConnection.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraRtmpConnection.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraRtmpLocalUser.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraDataChannel.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraScreenCapturer.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraVideoFrame.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraVideoMixerSource.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraVideoTrack.h", #**** async set and add ares for wait "$media_sdk_path/interface/cpp/api2/NGIAgoraRemoteAudioMixerSource.h", #**** async set and add ares for wait

# API (2023-08-29)

"$media_sdk_path/interface/cpp/api2/IAgoraService.h", #**** async api shoudl return if action has launch "$media_sdk_path/interface/cpp/api2/NGIAgoraLocalUser.h", #**** async api shoudl return if action has launch

# API (2023-12-26)

## NGIAgoraExtensionScreenSource.h

Add:

- virtual void setResetVitualDisplay(bool reset)

# API(2024-02-26)

## NGIAgoraCameraCapturer.h

Add:

- add CAMERA_EXTRA in CAMERA_SOURCE

# API (2024-02-27)

## NGIAgoraExtensionAINoiseSuppressor.h

Modified:

- Modified virtual int ProcessDenoiseFrame(float* input, float* output, int stage) = 0;
- Modified virtual const char* GetLibVersion(int mode = 0) = 0;

# API (2024-02-27)

## NGIAgoraExtensionAiAec.h

Modified:

- Modified virtual const char* GetLibVersion(int mode = 0) = 0;

# API (2024-03-07)

## video_node_i.h

ADD:

- virtual void setFocalLengthType()

# API (2023-11-09)

## NGIAgoraCameraCapturer.h

Add:

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

# API (2024-04-03)

## NGIAgoraCameraCapturer.h

Modify: rename api

- Modified: virtual bool isCenterStageSupported()

# API(2024-04-24)

## NGIAgoraLocalUser.h

Add:

- setRemoteSubscribeFallbackOption

# API (2024-05-07)

## NGIAgoraCameraCapturer.h

Deleted:

- virtual void onCameraCapturerConfigurationChanged()

# API (2024-05-15)

## NGIAgoraExtensionAINoiseSuppressor.h

Modify:

- virtual int Init(const char* weight_raw_buffer, size_t raw_buffer_bytes)
- virtual int ClearHiddenState(bool clear_hidden, int clear_lpsbuffer_nframe)

## NGIAgoraExtensionAiAec.h

Modify:

- virtual int Init(const char* weight_raw_buffer, size_t raw_buffer_bytes)
- virtual int ClearHiddenState(bool clear_hidden, int clear_lpsbuffer_nframe)
- virtual int ProcessAiNlpFrame(const float* linear, const float* nearin, const float* far_ref, float* out_mask)

# API (2024-07-04)

## NGIAgoraSyncClient.h

Modified:

- add new field for sync client config

# API (2024-07-29)

## NGIAgoraLocalUser.h

Modified:

- RegisterLocalMixedAudioTrack

# API (2024-07-30)

## NGIAgoraExtensionScreenSource.h

ADD:

- int setExternalMediaProjection(void* mediaProjection)

# API (2024-07-30)

## NGIAgoraLocalUser.h

Modified:

- void onStreamMessage(user_id_t userId, int streamId, const char* data, size_t length, uint64_t sendTs = 0)