From 214665124190a64923ab223bbeefe24e8e089e03 Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Wed, 21 Aug 2024 03:36:16 +0000 Subject: [PATCH 001/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_rtcimage.dita | Bin 8726 -> 8725 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_rtcimage.dita b/en-US/dita/RTC-NG/API/class_rtcimage.dita index cc52eb3732ee2a941bc42facad921a9ed46588d4..86c49af3738263d2acfa0aba13203870a4e6cd12 100644 GIT binary patch delta 14 VcmbQ{GSy|nMqWmS&6|0XMF1*t1q}cI delta 15 WcmbR0GR Date: Wed, 21 Aug 2024 11:10:43 +0800 Subject: [PATCH 002/354] remove empty detail section --- .../API/api_irtcengine_getextensionproperty.dita | 13 +++++++++---- .../API/api_irtcengine_getextensionproperty2.dita | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita b/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita index 93dc4233f35..3ade1028cf7 100644 --- a/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita +++ b/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita @@ -26,11 +26,16 @@

-
- 详情 -

+

+
+ 调用时机 +

加入频道前后均可调用。

+
+
+ 调用限制 +

无。

-
+
参数 diff --git a/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita b/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita index 2249a7700ee..1624297ac80 100644 --- a/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita @@ -51,11 +51,16 @@ MediaSourceType type = MediaSourceType.unknownMediaSource});

-
- 详情 -

+

+
+ 调用时机 +

加入频道前后均可调用。

+
+
+ 调用限制 +

无。

-
+
参数 From 717073acba224d31db22c154219e53c834a4411e Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 21 Aug 2024 11:46:54 +0800 Subject: [PATCH 003/354] update adjustaudiomixingvolume --- dita/RTC-NG/API/api_irtcengine_adjustaudiomixingvolume.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_adjustaudiomixingvolume.dita b/dita/RTC-NG/API/api_irtcengine_adjustaudiomixingvolume.dita index ef80ada6cfa..e9f66fc11eb 100644 --- a/dita/RTC-NG/API/api_irtcengine_adjustaudiomixingvolume.dita +++ b/dita/RTC-NG/API/api_irtcengine_adjustaudiomixingvolume.dita @@ -27,7 +27,7 @@

该方法调节混音音乐文件在本端和远端的播放音量大小。

- 调调用该方法不会影响 方法中设置的音效文件播放音量。 + 调用该方法不会影响 方法中设置的音效文件播放音量。
调用时机 From 4b06b2b0d1ea85a620ab4af5a74197ddcf5f10fb Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 21 Aug 2024 14:06:00 +0800 Subject: [PATCH 004/354] Electron: add cn props --- dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index 4af0e354d1b..f042a9914db 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -3234,7 +3234,7 @@ - + onSongSimpleInfoResult From d08d17c722c03d8c412f01ce40d9e60c6126c903 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 21 Aug 2024 06:09:47 +0000 Subject: [PATCH 005/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index 4af0e354d1b..f042a9914db 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -3234,7 +3234,7 @@ - + onSongSimpleInfoResult From 881bfc107a18f56146f0a713c696ad47439774c4 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 21 Aug 2024 22:24:17 +0800 Subject: [PATCH 006/354] add proto --- .../API/api_imediaengine_pushvideoframe.dita | 2 +- ...ediaengine_registeraudioframeobserver.dita | 2 +- ...ediaengine_registervideoframeobserver.dita | 2 +- .../api_imediaplayer_adjustplayoutvolume.dita | 2 +- ...mediaplayer_adjustpublishsignalvolume.dita | 2 +- .../API/api_imediaplayer_getduration.dita | 2 +- .../api_imediaplayer_getmediaplayerid.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_getmute.dita | 2 +- .../api_imediaplayer_getplayoutvolume.dita | 2 +- .../API/api_imediaplayer_getplayposition.dita | 2 +- .../API/api_imediaplayer_getplaysrc.dita | 2 +- ...i_imediaplayer_getpublishsignalvolume.dita | 2 +- .../RTC-NG/API/api_imediaplayer_getstate.dita | 2 +- .../API/api_imediaplayer_getstreamcount.dita | 2 +- .../API/api_imediaplayer_getstreaminfo.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_mute.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_open.dita | 2 +- .../api_imediaplayer_openwithmediasource.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_pause.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_play.dita | 2 +- .../api_imediaplayer_playpreloadedsrc.dita | 2 +- .../API/api_imediaplayer_preloadsrc.dita | 2 +- ...diaplayer_registeraudioframeobserver2.dita | 2 +- ...iaplayer_registerplayersourceobserver.dita | 2 +- ...ediaplayer_registervideoframeobserver.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_resume.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_seek.dita | 2 +- .../api_imediaplayer_selectaudiotrack.dita | 2 +- ...pi_imediaplayer_selectmultiaudiotrack.dita | 2 +- ...api_imediaplayer_setaudiodualmonomode.dita | 2 +- .../API/api_imediaplayer_setaudiopitch.dita | 2 +- .../API/api_imediaplayer_setloopcount.dita | 2 +- .../api_imediaplayer_setplaybackspeed.dita | 2 +- .../API/api_imediaplayer_setplayeroption.dita | 2 +- .../api_imediaplayer_setplayeroption2.dita | 2 +- .../API/api_imediaplayer_setrendermode.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_setview.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_stop.dita | 2 +- .../API/api_imediaplayer_switchsrc.dita | 2 +- .../API/api_imediaplayer_unloadsrc.dita | 2 +- ...player_unregisterplayersourceobserver.dita | 2 +- ...imusiccontentcenter_createmusicplayer.dita | 2 +- .../API/api_imusiccontentcenter_destroy.dita | 5 +- .../api_imusiccontentcenter_getcaches.dita | 2 +- ...usiccontentcenter_getinternalsongcode.dita | 2 +- .../API/api_imusiccontentcenter_getlyric.dita | 2 +- ...pi_imusiccontentcenter_getmusiccharts.dita | 2 +- ...ter_getmusiccollectionbymusicchartid2.dita | 2 +- ...imusiccontentcenter_getsongsimpleinfo.dita | 2 +- .../api_imusiccontentcenter_initialize.dita | 2 +- .../api_imusiccontentcenter_ispreloaded.dita | 2 +- ...siccontentcenter_registereventhandler.dita | 2 +- .../api_imusiccontentcenter_removecache.dita | 2 +- .../api_imusiccontentcenter_renewtoken.dita | 2 +- .../api_imusiccontentcenter_searchmusic2.dita | 2 +- ...ccontentcenter_unregistereventhandler.dita | 2 +- .../API/api_imusicontentcenter_preload2.dita | 2 +- .../api_irtcengine_clearvideowatermarks.dita | 2 +- .../API/api_irtcengine_createmediaplayer.dita | 2 +- .../api_irtcengine_destroymediaplayer.dita | 2 +- .../api_irtcengine_enablecontentinspect.dita | 2 +- .../API/api_irtcengine_enableextension.dita | 2 +- ...rtcengine_getaudiomixingplayoutvolume.dita | 2 +- ...rtcengine_getaudiomixingpublishvolume.dita | 2 +- ...api_irtcengine_getcameramaxzoomfactor.dita | 2 +- .../api_irtcengine_geterrordescription.dita | 4 +- .../RTC-NG/API/api_irtcengine_getversion.dita | 4 +- ...ne_iscameraautofocusfacemodesupported.dita | 2 +- ...ine_iscameraexposurepositionsupported.dita | 2 +- ..._irtcengine_iscameraexposuresupported.dita | 2 +- ...rtcengine_iscamerafacedetectsupported.dita | 2 +- .../api_irtcengine_iscamerazoomsupported.dita | 2 +- ...rtcengine_setaudiomixingplaybackspeed.dita | 2 +- ...ine_setcameraautofocusfacemodeenabled.dita | 2 +- ...pi_irtcengine_setcameraexposurefactor.dita | 2 +- ..._irtcengine_setcameraexposureposition.dita | 2 +- .../API/api_irtcengine_setcameratorchon.dita | 2 +- .../api_irtcengine_setcamerazoomfactor.dita | 2 +- .../api_irtcengine_setenablespeakerphone.dita | 2 +- ...ybackaudioframebeforemixingparameters.dita | 2 +- .../API/api_irtcengine_startaudiomixing2.dita | 2 +- .../api_irtcengine_startaudiorecording.dita | 2 +- ...ine_startrtmpstreamwithouttranscoding.dita | 2 +- .../api_irtcengine_startscreencapture.dita | 2 +- .../api_irtcengine_stopaudiorecording.dita | 2 +- .../RTC-NG/API/api_irtcengine_stopeffect.dita | 2 +- ...cengine_updatescreencaptureparameters.dita | 2 +- ...neex_adjustuserplaybacksignalvolumeex.dita | 2 +- ...ngineex_enableaudiovolumeindicationex.dita | 2 +- ..._irtcengineex_muteremoteaudiostreamex.dita | 2 +- ..._irtcengineex_muteremotevideostreamex.dita | 2 +- .../api_irtcengineex_sendstreammessageex.dita | 2 +- ...pi_irtcengineex_setremoterendermodeex.dita | 2 +- ...tcengineex_setremotevideostreamtypeex.dita | 2 +- .../API/api_irtcengineex_takesnapshotex.dita | 2 +- ...cengineex_updatechannelmediaoptionsex.dita | 2 +- ...spectrumobserver_onlocalaudiospectrum.dita | 2 +- ...pectrumobserver_onremoteaudiospectrum.dita | 2 +- ...ourceobserver_onaudiovolumeindication.dita | 2 +- ...imediaplayersourceobserver_onmetadata.dita | 2 +- ...ayersourceobserver_onplayercachestats.dita | 2 +- ...diaplayersourceobserver_onplayerevent.dita | 2 +- ...yersourceobserver_onplayerinfoupdated.dita | 2 +- ...rsourceobserver_onplayerplaybackstats.dita | 2 +- ...ceobserver_onplayersourcestatechanged.dita | 2 +- ...sourceobserver_onplayersrcinfochanged.dita | 2 +- ...layersourceobserver_onpositionchanged.dita | 2 +- ...iaplayersourceobserver_onpreloadevent.dita | 2 +- ...ntentcentereventhandler_onlyricresult.dita | 2 +- ...entereventhandler_onmusicchartsresult.dita | 2 +- ...reventhandler_onmusiccollectionresult.dita | 2 +- ...tentcentereventhandler_onpreloadevent.dita | 2 +- ...ereventhandler_onsongsimpleinforesult.dita | 2 +- ...venthandler_onaudiomixingstatechanged.dita | 2 +- ...enthandler_onaudiopublishstatechanged.dita | 2 +- ...thandler_onaudiosubscribestatechanged.dita | 2 +- ...ndler_onchannelmediarelaystatechanged.dita | 2 +- ...llback_irtcengineeventhandler_onerror.dita | 2 +- ...neeventhandler_onfirstlocalvideoframe.dita | 2 +- ...eeventhandler_onfirstremotevideoframe.dita | 2 +- ...enthandler_ontokenprivilegewillexpire.dita | 2 +- ...rtcengineeventhandler_onusermuteaudio.dita | 2 +- ...rtcengineeventhandler_onusermutevideo.dita | 2 +- ...thandler_onvideosubscribestatechanged.dita | 2 +- dita/RTC-NG/API/class_advanceoptions.dita | 10 +- dita/RTC-NG/API/class_audiospectrumdata.dita | 5 +- dita/RTC-NG/API/class_cachestatistics.dita | 10 +- .../RTC-NG/API/class_channelmediaoptions.dita | 120 +++++++++--------- dita/RTC-NG/API/class_climaxsegment.dita | 6 +- .../API/class_contentinspectconfig.dita | 12 +- .../API/class_contentinspectmodule.dita | 7 +- dita/RTC-NG/API/class_logconfig.dita | 9 +- dita/RTC-NG/API/class_mediasource.dita | 20 ++- dita/RTC-NG/API/class_music.dita | 26 +++- dita/RTC-NG/API/class_musiccacheinfo.dita | 8 +- dita/RTC-NG/API/class_musicchartinfo.dita | 8 +- ...class_musiccontentcenterconfiguration.dita | 16 ++- .../RTC-NG/API/class_playerplaybackstats.dita | 12 +- dita/RTC-NG/API/class_playerstreaminfo.dita | 17 ++- dita/RTC-NG/API/class_playerupdatedinfo.dita | 18 ++- dita/RTC-NG/API/class_rtcengineconfig.dita | 1 + .../API/class_segmentationproperty.dita | 4 +- dita/RTC-NG/API/class_srcinfo.dita | 8 +- dita/RTC-NG/API/class_videocanvas.dita | 1 + .../API/class_virtualbackgroundsource.dita | 22 +++- 145 files changed, 387 insertions(+), 208 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita b/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita index 142aa1dcad9..79e1ab56064 100644 --- a/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita +++ b/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita @@ -14,7 +14,7 @@

public abstract int pushExternalVideoFrameById(AgoraVideoFrame frame, int videoTrackId); - + public abstract pushExternalVideoFrameById(frame: VideoFrame, videoTrackId: number): number; - (BOOL)pushExternalVideoFrame:(AgoraVideoFrame * _Nonnull)frame videoTrackId:(NSUInteger)videoTrackId NS_SWIFT_NAME(pushExternalVideoFrame(_:videoTrackId:)); virtual int pushVideoFrame(base::ExternalVideoFrame* frame, unsigned int videoTrackId = 0) = 0; abstract pushVideoFrame( diff --git a/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita b/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita index 69c5203841b..7c21b37c9c7 100644 --- a/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita @@ -14,7 +14,7 @@

public abstract int registerAudioFrameObserver(IAudioFrameObserver observer); - public abstract registerAudioFrameObserver(observer:IAudioFrameObserver):number; + - (BOOL)setAudioFrameDelegate:(id<AgoraAudioFrameDelegate> _Nullable)delegate; virtual int registerAudioFrameObserver(IAudioFrameObserver* observer) = 0; abstract registerAudioFrameObserver(observer: IAudioFrameObserver): number; diff --git a/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita b/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita index d766b25831d..a0b66e478f1 100644 --- a/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita @@ -14,7 +14,7 @@

public abstract int registerVideoFrameObserver(IVideoFrameObserver observer); - public abstract registerVideoFrameObserver(observer:IVideoFrameObserver):number; + - (BOOL)setVideoFrameDelegate:(id<AgoraVideoFrameDelegate> _Nullable)delegate; virtual int registerVideoFrameObserver(IVideoFrameObserver* observer) = 0; abstract registerVideoFrameObserver(observer: IVideoFrameObserver): number; diff --git a/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita b/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita index 392dce45ff9..326a3ff31a6 100644 --- a/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita @@ -14,7 +14,7 @@

int adjustPlayoutVolume(int volume); - + public abstract adjustPlayoutVolume(vol: number): number; - (int)adjustPlayoutVolume:(int)volume; virtual int adjustPlayoutVolume(int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita b/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita index 3ff415f1dde..50863ab0041 100644 --- a/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita @@ -14,7 +14,7 @@

int adjustPublishSignalVolume(int volume); - + public abstract adjustPublishSignalVolume(volume:number):number; - (int)adjustPublishSignalVolume:(int)volume; virtual int adjustPublishSignalVolume(int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getduration.dita b/dita/RTC-NG/API/api_imediaplayer_getduration.dita index 4692dcc6233..f2e51170786 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getduration.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getduration.dita @@ -14,7 +14,7 @@

long getDuration(); - + public abstract getDuration():number; - (NSInteger)getDuration; virtual int getDuration(int64_t& duration) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita b/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita index 53912509d32..c20acfe0ad2 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita @@ -14,7 +14,7 @@

int getMediaPlayerId(); - + public abstract getMediaPlayerId():number; - (int)getMediaPlayerId; virtual int getMediaPlayerId() const = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getmute.dita b/dita/RTC-NG/API/api_imediaplayer_getmute.dita index ffe3fe2ad55..279c9d8f8e3 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getmute.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getmute.dita @@ -14,7 +14,7 @@

boolean getMute(); - + public abstract getMute(): boolean; - (bool)getMute; virtual int getMute(bool& mute) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita b/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita index 339a2f8b5c3..c6fe39f2dd3 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita @@ -14,7 +14,7 @@

int getPlayoutVolume(); - + public abstract getPlayoutVolume():number - (int)getPlayoutVolume; virtual int getPlayoutVolume(int& volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita b/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita index d1e754673d5..97dc7a627a2 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita @@ -14,7 +14,7 @@

long getPlayPosition(); - + public abstract getPlayPosition():number; - (NSInteger)getPosition; virtual int getPlayPosition(int64_t& pos) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita b/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita index 924d943a74a..f9945f24803 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita @@ -14,7 +14,7 @@

String getPlaySrc(); - + public abstract getPlaySrc():string; - (NSString *)getPlaySrc; virtual const char* getPlaySrc() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita b/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita index 2f004afa92f..09d08ade0a6 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita @@ -14,7 +14,7 @@

int getPublishSignalVolume(); - + public abstract getPublishSignalVolume():number; - (int)getPublishSignalVolume; virtual int getPublishSignalVolume(int& volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getstate.dita b/dita/RTC-NG/API/api_imediaplayer_getstate.dita index 6d9e175ec56..c9929dfd417 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getstate.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getstate.dita @@ -14,7 +14,7 @@

Constants.MediaPlayerState getState(); - + public abstract getState():Constants.MediaPlayerState; - (AgoraMediaPlayerState)getPlayerState; virtual media::base::MEDIA_PLAYER_STATE getState() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita b/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita index d681d146d07..0ee7fc721e2 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita @@ -14,7 +14,7 @@

int getStreamCount(); - + public abstract getStreamCount():number; - (NSInteger)getStreamCount; virtual int getStreamCount(int64_t& count) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita b/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita index 026242bf007..26908348228 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita @@ -14,7 +14,7 @@

MediaStreamInfo getStreamInfo(int index); - + public abstract getStreamInfo(index:number):MediaStreamInfo|undefined; - (AgoraMediaStreamInfo *_Nullable)getStreamByIndex:(int)index; virtual int getStreamInfo(int64_t index, media::base::PlayerStreamInfo* info) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_mute.dita b/dita/RTC-NG/API/api_imediaplayer_mute.dita index 3b6531dde04..16a3f8175db 100644 --- a/dita/RTC-NG/API/api_imediaplayer_mute.dita +++ b/dita/RTC-NG/API/api_imediaplayer_mute.dita @@ -14,7 +14,7 @@

int mute(boolean muted); - + public abstract mute(muted:boolean) : number; - (int)mute:(bool)isMute NS_SWIFT_NAME(mute(_:)); virtual int mute(bool muted) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_open.dita b/dita/RTC-NG/API/api_imediaplayer_open.dita index fc790258acc..01ceff4d33d 100644 --- a/dita/RTC-NG/API/api_imediaplayer_open.dita +++ b/dita/RTC-NG/API/api_imediaplayer_open.dita @@ -15,7 +15,7 @@

int open(String url, long startPos); - + public abstract open(url:string, startPos:number):number; - (int)open:(NSString *)url startPos:(NSInteger)startPos; virtual int open(const char* url, int64_t startPos) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita b/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita index 35fdd9cc7bc..cb6d28b7458 100644 --- a/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita +++ b/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita @@ -14,7 +14,7 @@

int openWithMediaSource(MediaPlayerSource source); - + public abstract openWithMediaSource(source: MediaPlayerSource) :number ; - (int)openWithMediaSource:(AgoraMediaSource *)source; virtual int openWithMediaSource(const media::base::MediaSource &source) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_pause.dita b/dita/RTC-NG/API/api_imediaplayer_pause.dita index d02b4ea84cd..fa93aa84865 100644 --- a/dita/RTC-NG/API/api_imediaplayer_pause.dita +++ b/dita/RTC-NG/API/api_imediaplayer_pause.dita @@ -15,7 +15,7 @@

int pause(); - + public abstract pause(): number; - (int)pause; virtual int pause() = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_play.dita b/dita/RTC-NG/API/api_imediaplayer_play.dita index 0446ed0effb..ed45a7089f3 100644 --- a/dita/RTC-NG/API/api_imediaplayer_play.dita +++ b/dita/RTC-NG/API/api_imediaplayer_play.dita @@ -14,7 +14,7 @@

int play(); - + public abstract play(): number; - (int)play; virtual int play() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita b/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita index 839c6be2ee9..91539a874a6 100644 --- a/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita @@ -15,7 +15,7 @@

int playPreloadedSrc(String src); - + public abstract playPreloadedSrc(src:string):number; - (int)playPreloadedSrc:(NSString *)src; virtual int playPreloadedSrc(const char* src) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita index 4c4958f073b..875f9e91ac4 100644 --- a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita @@ -15,7 +15,7 @@

int preloadSrc(String src, long startPos); - + public abstract preloadSrc(src:string, startPos:number):number; - (int)preloadSrc:(NSString *)src startPos:(int)startPos; virtual int preloadSrc(const char* src, int64_t startPos) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita b/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita index ac5e4972586..d2f59fa1d1f 100644 --- a/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita +++ b/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita @@ -15,7 +15,7 @@

int registerAudioFrameObserver(IMediaPlayerAudioFrameObserver audioFrameObserver, int mode); - public abstract registerAudioFrameObserver(observer:IAudioFrameObserver):number; + virtual int registerAudioFrameObserver(media::IAudioPcmFrameSink* observer, RAW_AUDIO_FRAME_OP_MODE_TYPE mode) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita b/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita index 9a41cbda07d..be91392024b 100644 --- a/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita +++ b/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita @@ -15,7 +15,7 @@

int registerPlayerObserver(IMediaPlayerObserver playerObserver); - + public abstract registerPlayerObserver(playerObserver:IMediaPlayerObserver); virtual int registerPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita b/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita index 9a35ed36cb5..ab29f1f97b9 100644 --- a/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita @@ -14,7 +14,7 @@

int registerVideoFrameObserver(IMediaPlayerVideoFrameObserver videoFrameObserver); - public abstract registerVideoFrameObserver(observer:IVideoFrameObserver):number; + virtual int registerVideoFrameObserver(media::base::IVideoFrameObserver* observer) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_resume.dita b/dita/RTC-NG/API/api_imediaplayer_resume.dita index fb514f6c4a9..81dac38a8df 100644 --- a/dita/RTC-NG/API/api_imediaplayer_resume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_resume.dita @@ -14,7 +14,7 @@

int resume(); - + public abstract resume(): number; - (int)resume; virtual int resume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_seek.dita b/dita/RTC-NG/API/api_imediaplayer_seek.dita index dbff9f728e5..e2ce0898f7a 100644 --- a/dita/RTC-NG/API/api_imediaplayer_seek.dita +++ b/dita/RTC-NG/API/api_imediaplayer_seek.dita @@ -15,7 +15,7 @@

int seek(long newPos); - + public abstract seek(newPos: number): number; - (void)seekToPosition:(NSInteger)position; virtual int seek(int64_t newPos) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita b/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita index 6867a6c9dab..a0a36448e2e 100644 --- a/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita +++ b/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita @@ -14,7 +14,7 @@

int selectAudioTrack(int index); - + public abstract selectAudioTrack(index: number): number; - (int)selectAudioTrack:(int)index; virtual int selectAudioTrack(int index) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita b/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita index 87968cbcb2d..456a4c779ff 100644 --- a/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita +++ b/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita @@ -14,7 +14,7 @@

int selectMultiAudioTrack(int playoutTrackIndex, int publishTrackIndex); - + public abstract selectMultiAudioTrack(playoutTrackIndex:number, publishTrackIndex: number): number; - (int)selectMultiAudioTrack:(NSInteger)playoutTrackIndex publishTrackIndex:(NSInteger)publishTrackIndex NS_SWIFT_NAME(selectMultiAudioTrack(_:publishTrackIndex:)); virtual int selectMultiAudioTrack(int playoutTrackIndex, int publishTrackIndex) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita b/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita index d8a9cfc22ef..370be1d2a19 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita @@ -14,7 +14,7 @@

int setAudioDualMonoMode(int mode); - + public abstract setAudioDualMonoMode(mode:Constants.AudioDualMonoMode):number; - (int)setAudioDualMonoMode:(AgoraAudioDualMonoMode)mode; virtual int setAudioDualMonoMode(agora::media::base::AUDIO_DUAL_MONO_MODE mode) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita index 5825f796399..a02da6918df 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita @@ -14,7 +14,7 @@

int setAudioPitch(int pitch); - + public abstract setAudioPitch(pitch:number): number; - (int)setAudioPitch:(NSInteger)pitch; virtual int setAudioPitch(int pitch) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita b/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita index 9f53cc3f609..aa9b775a676 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita @@ -15,7 +15,7 @@

int setLoopCount(int loopCount); - + public abstract setLoopCount(loopCount:number):number; - (void)setLoopCount:(NSInteger)loopCount; virtual int setLoopCount(int loopCount) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita b/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita index ad733dc6497..e8ec504264b 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita @@ -14,7 +14,7 @@

int setPlaybackSpeed(int speed); - + public abstract setPlaybackSpeed(speed: number) : number; - (int)setPlaybackSpeed:(int)speed; virtual int setPlaybackSpeed(int speed) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita b/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita index 3205fc9b717..abf88b3496a 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita @@ -14,7 +14,7 @@

int setPlayerOption(String key, int value); - + public abstract setPlayerOption(key:string, value:number); - (int)setPlayerOption:(NSString *)key value:(NSInteger)value NS_SWIFT_NAME(setPlayerOption(_:value:)); virtual int setPlayerOption(const char* key, int64_t value) = 0; abstract setPlayerOptionInInt(key: string, value: number): number; diff --git a/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita b/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita index 55d5c9dd8a8..70b4122c5a1 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita @@ -14,7 +14,7 @@

int setPlayerOptionString(String key, String value); - + public abstract setPlayerOptionString(key:string, value:string): number; - (int)setPlayerOptionString:(NSString *)key value:(NSString *)value NS_SWIFT_NAME(setPlayerOptionString(_:value:)); virtual int setPlayerOption(const char* key, const char* value) = 0; abstract setPlayerOptionInString(key: string, value: string): number; diff --git a/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita b/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita index ca0a751f4cb..f95b8f3125e 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita @@ -15,7 +15,7 @@

int setRenderMode(int mode); - + public abstract setRenderMode(mode:number):number; - (void)setRenderMode:(AgoraMediaPlayerRenderMode)mode; virtual int setRenderMode(media::base::RENDER_MODE_TYPE renderMode) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_setview.dita b/dita/RTC-NG/API/api_imediaplayer_setview.dita index aa7c2dc49ee..2b752c3977f 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setview.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setview.dita @@ -15,7 +15,7 @@

int setView(View videoView); - + public abstract setView(view:string):number; - (void)setView:(View *_Nullable)view; virtual int setView(media::base::view_t view) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_stop.dita b/dita/RTC-NG/API/api_imediaplayer_stop.dita index 74c3413c9ee..7356ee11a2a 100644 --- a/dita/RTC-NG/API/api_imediaplayer_stop.dita +++ b/dita/RTC-NG/API/api_imediaplayer_stop.dita @@ -15,7 +15,7 @@

int stop(); - + public abstract stop(): number; - (void)stop; virtual int stop() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita index 9b467487e2e..2cf928e62bd 100644 --- a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita @@ -15,7 +15,7 @@

int switchSrc(String src, boolean syncPts); - + public abstract switchSrc(src:string, syncPts:boolean):number; - (int)switchSrc:(NSString *)src syncPts:(BOOL)sync; virtual int switchSrc(const char* src, bool syncPts) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita b/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita index 80fd556c127..f7de7de4748 100644 --- a/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita @@ -15,7 +15,7 @@

int unloadSrc(String src); - + public abstract unloadSrc(src:string):number; - (int)unloadSrc:(NSString *)src; virtual int unloadSrc(const char* src) = 0; diff --git a/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita b/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita index e9f497f2607..7fd11c75ff3 100644 --- a/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita +++ b/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita @@ -14,7 +14,7 @@

int unRegisterPlayerObserver(IMediaPlayerObserver playerObserver); - + public abstract unRegisterPlayerObserver(); virtual int unregisterPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita b/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita index 4a7a1b6cdda..e450d22d8ab 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita @@ -14,7 +14,7 @@

public abstract IAgoraMusicPlayer createMusicPlayer(); - + public abstract createMusicPlayer():IAgoraMusicPlayer (id<AgoraMusicPlayerProtocol> _Nullable)createMusicPlayerWithDelegate:(id<AgoraRtcMediaPlayerDelegate> _Nullable)delegate NS_SWIFT_NAME(createMusicPlayer(delegate:)); virtual agora_refptr<IMusicPlayer> createMusicPlayer() = 0; abstract createMusicPlayer(): IMusicPlayer; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita b/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita index 10af7dc5218..ddbe78af275 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita @@ -19,7 +19,10 @@ mInstance.release(); mInstance = null; } - + public static destroy():void +{ + RtcNapi.destroyMusicContentCenter() +} + (void)destroy; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index 0893c89fe19..452bfade7eb 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -14,7 +14,7 @@

public abstract MusicCacheInfo[] getCaches(); - + public abstract getCaches():MusicCacheInfo[] - (NSArray *)getCaches NS_SWIFT_NAME(getCaches()); virtual int getCaches(MusicCacheInfo *cacheInfo, int32_t* cacheInfoSize) = 0; abstract getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number }; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita index a1cb4b2fd20..c00c16ff267 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita @@ -14,7 +14,7 @@

public abstract long getInternalSongCode(long songCode, String jsonOption); - + public abstract getInternalSongCode(songCode:bigint,jsonOption:string):bigint - (NSInteger)getInternalSongCode:(NSInteger)songCode jsonOption:(NSString * _Nullable)jsonOption NS_SWIFT_NAME(getInternalSongCode(songCode:jsonOption:)); virtual int getInternalSongCode(int64_t songCode, const char* jsonOption, int64_t& internalSongCode) = 0; abstract getInternalSongCode(songCode: number, jsonOption: string): number; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita index c8abd239217..0fc375bf663 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita @@ -14,7 +14,7 @@

public abstract String getLyric(long songCode, int lyricType); - + public abstract getLyric(songCode:bigint,lyricType:number):string - (NSString *)getLyricWithSongCode:(NSInteger)songCode lyricType:(NSInteger)lyricType NS_SWIFT_NAME(getLyric(songCode:lyricType:)); virtual int getLyric(agora::util::AString& requestId, int64_t songCode, int32_t LyricType = 0) = 0; abstract getLyric(songCode: number, lyricType?: number): string; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita index 969030db483..c9f9bb42e5c 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita @@ -14,7 +14,7 @@

public abstract String getMusicCharts(); - + public abstract getMusicCharts():string - (NSString *)getMusicCharts; virtual int getMusicCharts(agora::util::AString& requestId) = 0; abstract getMusicCharts(): string; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita index 193aab0725e..d8acdaea6a7 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita @@ -15,7 +15,7 @@

public abstract String getMusicCollectionByMusicChartId( int musicChartId, int page, int pageSize, String jsonOption); - + public abstract getMusicCollectionByMusicChartId(musicChartId:number,page:number,pageSize:number,jsonOption?:string):string diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita index fcb603b2efd..ee6aef2321c 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita @@ -14,7 +14,7 @@

public abstract String getSongSimpleInfo(long songCode); - + public abstract getSongSimpleInfo(songCode:bigint):string - (NSString *)getSongSimpleInfoWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(getSongSimpleInfo(songCode:)); virtual int getSongSimpleInfo(agora::util::AString& requestId, int64_t songCode) = 0; abstract getSongSimpleInfo(songCode: number): string; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita b/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita index 535aacc6d21..9139e5ac79a 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita @@ -14,7 +14,7 @@

public abstract int initialize(MusicContentCenterConfiguration configuration); - + public abstract initialize(configuration:MusicContentCenterConfiguration):number + (instancetype)sharedContentCenterWithConfig:(AgoraMusicContentCenterConfig *)config NS_SWIFT_NAME(sharedContentCenter(config:)); virtual int initialize(const MusicContentCenterConfiguration & configuration) = 0; abstract initialize(configuration: MusicContentCenterConfiguration): number; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita b/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita index 6a4a2650068..c892e972f0c 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita @@ -14,7 +14,7 @@

public abstract int isPreloaded(long songCode); - + public abstract isPreloaded(songCode:bigint):number - (NSInteger)isPreloadedWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(isPreloaded(songCode:)); virtual int isPreloaded(int64_t songCode) = 0; abstract isPreloaded(songCode: number): number; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita b/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita index 06ad56df417..3be7a4ee377 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita @@ -14,7 +14,7 @@

public abstract int registerEventHandler(IMusicContentCenterEventHandler eventHandler); - + public abstract registerEventHandler(eventHandler:IMusicContentCenterEventHandler):number - (NSInteger)registerEventDelegate:(id<AgoraMusicContentCenterEventDelegate> _Nullable)eventDelegate; virtual int registerEventHandler(IMusicContentCenterEventHandler* eventHandler) = 0; abstract registerEventHandler( diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita b/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita index c36d68d3e1a..4ff836a3693 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita @@ -14,7 +14,7 @@

public abstract int removeCache(long songCode); - + public abstract removeCache(songCode:bigint):number - (NSInteger)removeCacheWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(removeCache(songCode:)); virtual int removeCache(int64_t songCode) = 0; abstract removeCache(songCode: number): number; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita b/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita index 9fc4eaf5d1c..5a06914a3e2 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita @@ -14,7 +14,7 @@

public abstract int renewToken(String token); - + public abstract renewToken(token:string):number - (NSInteger)renewToken:(NSString * _Nonnull)token; virtual int renewToken(const char* token) = 0; abstract renewToken(token: string): number; diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita b/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita index 3a514965f52..c0fb1e4dd3f 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita @@ -14,7 +14,7 @@

public abstract String searchMusic(String keyword, int page, int pageSize, String jsonOption); - + public abstract searchMusic(keyword:string,page:number,pageSize:number,jsonOption?:string):string diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita b/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita index a083ebab7e5..ab46e0226b6 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita @@ -14,7 +14,7 @@

public abstract int unregisterEventHandler(); - + public abstract unregisterEventHandler():number virtual int unregisterEventHandler() = 0; abstract unregisterEventHandler(): number; diff --git a/dita/RTC-NG/API/api_imusicontentcenter_preload2.dita b/dita/RTC-NG/API/api_imusicontentcenter_preload2.dita index 590efe8c4d5..dc5a80db438 100644 --- a/dita/RTC-NG/API/api_imusicontentcenter_preload2.dita +++ b/dita/RTC-NG/API/api_imusicontentcenter_preload2.dita @@ -14,7 +14,7 @@

public abstract String preload(long songCode); - + public abstract preload(songCode:bigint):string - (NSString *)preloadWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(preload(songCode:)); virtual int preload(agora::util::AString& requestId, int64_t songCode) = 0; abstract preload(songCode: number): string; diff --git a/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita b/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita index 2cfb4a7879b..9361f0a6eaa 100644 --- a/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita +++ b/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita @@ -14,7 +14,7 @@

public abstract int clearVideoWatermarks(); - public abstract clearVideoWatermarks(): number; + - (int)clearVideoWatermarks; virtual int clearVideoWatermarks() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita b/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita index 02a77b82f5c..c532f413875 100644 --- a/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita +++ b/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita @@ -14,7 +14,7 @@

public abstract IMediaPlayer createMediaPlayer(); - + public abstract createMediaPlayer():IMediaPlayer|undefined; - (id<AgoraRtcMediaPlayerProtocol>_Nullable)createMediaPlayerWithDelegate: (id<AgoraRtcMediaPlayerDelegate>_Nullable)delegate; virtual agora_refptr <IMediaPlayer> createMediaPlayer() = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita b/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita index 4c5bf4c97e8..dc0737e0a36 100644 --- a/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita +++ b/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita @@ -15,7 +15,7 @@

int destroy(); - + public abstract destroy():number; - (int)destroyMediaPlayer:(id<AgoraRtcMediaPlayerProtocol>_Nullable)mediaPlayer; virtual int destroyMediaPlayer(agora_refptr<IMediaPlayer> media_player) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita b/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita index 53117ae0557..6baa01097c9 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita @@ -14,7 +14,7 @@

public abstract int enableContentInspect(boolean enabled, ContentInspectConfig config); - + public abstract enableContentInspect(enabled:boolean,config:ContentInspectConfig):number; - (int)enableContentInspect:(BOOL)enabled config:(AgoraContentInspectConfig* _Nonnull)config; virtual int enableContentInspect(bool enabled, const media::ContentInspectConfig &config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_enableextension.dita b/dita/RTC-NG/API/api_irtcengine_enableextension.dita index c70ae669b50..b8b07ef16b4 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableextension.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableextension.dita @@ -15,7 +15,7 @@

public abstract int enableExtension( String provider, String extension, boolean enable, Constants.MediaSourceType sourceType); - public abstract enableExtension(provider:string,extension:string,enable:boolean,extensionInfo:ExtensionInfo):number; + - (int)enableExtensionWithVendor:(NSString * __nonnull)provider extension:(NSString * __nonnull)extension enabled:(BOOL)enabled diff --git a/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita b/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita index 635090956a5..b1f194c062a 100644 --- a/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita +++ b/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita @@ -14,7 +14,7 @@

public abstract int getAudioMixingPlayoutVolume(); - + public abstract getAudioMixingPlayoutVolume():number; - (int)getAudioMixingPlayoutVolume; virtual int getAudioMixingPlayoutVolume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita b/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita index 73e3d5fe224..1b0aa54bab4 100644 --- a/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita +++ b/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita @@ -14,7 +14,7 @@

public abstract int getAudioMixingPublishVolume(); - + public abstract getAudioMixingPublishVolume():number; - (int)getAudioMixingPublishVolume; virtual int getAudioMixingPublishVolume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita b/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita index 10609744549..7e2afe6980f 100644 --- a/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita +++ b/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita @@ -14,7 +14,7 @@

public abstract float getCameraMaxZoomFactor(); - public abstract getCameraMaxZoomFactor():number; + public abstract getCameraMaxZoomFactor(): number; - (CGFloat)cameraMaxZoomFactor; virtual float getCameraMaxZoomFactor() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita b/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita index fe58c5fc353..e4443a198dd 100644 --- a/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita +++ b/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita @@ -14,7 +14,9 @@

public static String getErrorDescription(int error) - + public static getErrorDescription(error: number): string { + return RtcEngineImpl.getErrorDescriptionInternal(error); +} + (NSString* _Nonnull)getErrorDescription: (NSInteger)error; virtual const char* getErrorDescription(int code) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_getversion.dita b/dita/RTC-NG/API/api_irtcengine_getversion.dita index 8ca609d24f7..243b4798b46 100644 --- a/dita/RTC-NG/API/api_irtcengine_getversion.dita +++ b/dita/RTC-NG/API/api_irtcengine_getversion.dita @@ -14,7 +14,9 @@

public static String getSdkVersion() - + public static getSdkVersion(): string { + return RtcEngineImpl.getRtcSdkVersion(); +} + (NSString * _Nonnull)getSdkVersion; virtual const char* getVersion(int* build) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita b/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita index f96dcef1619..fbf967b73af 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita @@ -14,7 +14,7 @@

public abstract boolean isCameraAutoFocusFaceModeSupported(); - + public abstract isCameraAutoFocusFaceModeSupported(): boolean; - (BOOL)isCameraAutoFocusFaceModeSupported; virtual bool isCameraAutoFocusFaceModeSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita b/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita index 4bfda68d675..e83fb1d6e38 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita @@ -14,7 +14,7 @@

public abstract boolean isCameraExposurePositionSupported(); - + public abstract isCameraExposurePositionSupported(): boolean; - (BOOL)isCameraExposurePositionSupported; virtual bool isCameraExposurePositionSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita b/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita index d9f9d1f89ba..4dbb4883bbf 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita @@ -14,7 +14,7 @@

public abstract boolean isCameraExposureSupported(); - + public abstract isCameraExposureSupported(): boolean; - (BOOL)isCameraExposureSupported NS_SWIFT_NAME(isCameraExposureSupported()); virtual bool isCameraExposureSupported() = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita b/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita index a82f401a21e..3d886314c02 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita @@ -14,7 +14,7 @@

public abstract boolean isCameraFaceDetectSupported(); - + public abstract isCameraFaceDetectSupported(): boolean; virtual bool isCameraFaceDetectSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita b/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita index 8fa8808e4c9..287a3617fe3 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita @@ -14,7 +14,7 @@

public abstract boolean isCameraZoomSupported(); - + public abstract isCameraZoomSupported(): boolean; - (BOOL)isCameraZoomSupported; virtual bool isCameraZoomSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita b/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita index 7cdc4a64adc..934f1f06251 100644 --- a/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita +++ b/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita @@ -14,7 +14,7 @@

public abstract int setAudioMixingPlaybackSpeed(int speed); - + public abstract setAudioMixingPlaybackSpeed(speed: number): number - (int)setAudioMixingPlaybackSpeed:(NSInteger)speed NS_SWIFT_NAME(setAudioMixingPlaybackSpeed(_:)); virtual int setAudioMixingPlaybackSpeed(int speed) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita b/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita index 2dfff7d1c8f..fe04aefe582 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita @@ -14,7 +14,7 @@

public abstract int setCameraAutoFocusFaceModeEnabled(boolean enabled); - + public abstract setCameraAutoFocusFaceModeEnabled(enabled: boolean): number; - (BOOL)setCameraAutoFocusFaceModeEnabled:(BOOL)enable; virtual int setCameraAutoFocusFaceModeEnabled(bool enabled) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita b/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita index 8fc92f7119a..cb6dbdf6d34 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita @@ -14,7 +14,7 @@

public abstract int setCameraExposureFactor(int factor); - + public abstract setCameraExposureFactor(factor: number): number; - (CGFloat)setCameraExposureFactor:(CGFloat)exposureFactor NS_SWIFT_NAME(setCameraExposureFactor(_:)); virtual int setCameraExposureFactor(float factor) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita b/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita index 8f95b56af60..8ce4aee5aab 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita @@ -14,7 +14,7 @@

public abstract int setCameraExposurePosition(float positionXinView, float positionYinView); - + public abstract setCameraExposurePosition(positionXinView: number, positionYinView: number): number; - (BOOL)setCameraExposurePosition:(CGPoint)positionInView; virtual int setCameraExposurePosition(float positionXinView, float positionYinView) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita b/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita index a4f8abed7de..178f0947e62 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita @@ -14,7 +14,7 @@

public abstract int setCameraTorchOn(boolean isOn); - public abstract setCameraTorchOn(isOn:boolean):number; + - (BOOL)setCameraTorchOn:(BOOL)isOn NS_SWIFT_NAME(setCameraTorchOn(_:)); virtual int setCameraTorchOn(bool isOn) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita b/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita index 5006c43d6f7..a2c089c6030 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita @@ -14,7 +14,7 @@

public abstract int setCameraZoomFactor(float factor); - public abstract setCameraZoomFactor(factor:number):number; + public abstract setCameraZoomFactor(factor: number): number; - (CGFloat)setCameraZoomFactor:(CGFloat)zoomFactor; virtual int setCameraZoomFactor(float factor) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita b/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita index 385deb44f24..12f83e7c774 100644 --- a/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita +++ b/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita @@ -14,7 +14,7 @@

public abstract int setEnableSpeakerphone(boolean enabled); - public abstract setEnableSpeakerphone(enabled: boolean): number; + - (int)setEnableSpeakerphone:(BOOL)enableSpeaker; virtual int setEnableSpeakerphone(bool speakerOn) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita b/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita index 8d5a9a79a4d..d43db8a5ee3 100644 --- a/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita +++ b/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita @@ -14,7 +14,7 @@

public abstract int setPlaybackAudioFrameBeforeMixingParameters(int sampleRate, int channel); - public abstract setPlaybackAudioFrameBeforeMixingParameters(sampleRate:number,channel:number):number; + public abstract setPlaybackAudioFrameBeforeMixingParameters(sampleRate:number,channel:number):number; - (int)setPlaybackAudioFrameBeforeMixingParametersWithSampleRate:(NSInteger)sampleRate channel:(NSInteger)channel; virtual int setPlaybackAudioFrameBeforeMixingParameters(int sampleRate, int channel) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita b/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita index acaf43045ab..9e69c8cbe98 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita @@ -14,7 +14,7 @@

public abstract int startAudioMixing(String filePath, boolean loopback, int cycle, int startPos); - public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number): number; + public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number, startpos?:number): number; - (int)startAudioMixing:(NSString* _Nonnull)filePath loopback:(BOOL)loopback cycle:(NSInteger)cycle startPos:(NSInteger)startPos; virtual int startAudioMixing(const char* filePath, bool loopback, int cycle, int startPos) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita index 76450a9476f..eb3f209ff98 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita @@ -14,7 +14,7 @@

public abstract int startAudioRecording(String filePath, int quality); - public abstract startAudioRecording(filePath: string, quality: Constants.AudioRecordingQualityType): number; + public abstract startAudioRecording(filePath: string, quality: Constants.AudioRecordingQualityType): number;; - (int)startAudioRecording:(NSString * _Nonnull)filePath quality:(AgoraAudioRecordingQuality)quality; virtual int startAudioRecording(const char* filePath, AUDIO_RECORDING_QUALITY_TYPE quality) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita b/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita index f9126d754b9..33bb37b78f5 100644 --- a/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita +++ b/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita @@ -14,7 +14,7 @@

public abstract int startRtmpStreamWithoutTranscoding(String url); - + public abstract startRtmpStreamWithoutTranscoding(url:string): number; - (int)startRtmpStreamWithoutTranscoding:(NSString* _Nonnull)url; virtual int startRtmpStreamWithoutTranscoding(const char* url) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita index a828da7bf24..991132ce848 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita @@ -15,7 +15,7 @@

public abstract int startScreenCapture(ScreenCaptureParameters screenCaptureParameters); - public abstract startScreenCapture(parameter: ScreenCaptureParameters): number; + public abstract startScreenCapture(screenCaptureParameters: ScreenCaptureParameters): number; - (int)startScreenCapture:(AgoraScreenCaptureParameters2* _Nullable)parameters NS_SWIFT_NAME(startScreenCapture(_:)); #if defined(__ANDROID__) || (defined(__APPLE__) && TARGET_OS_IOS) virtual int startScreenCapture(const ScreenCaptureParameters2& captureParams) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita b/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita index 709974600b4..8618186f689 100644 --- a/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita @@ -14,7 +14,7 @@

public abstract int stopAudioRecording(); - public abstract stopAudioRecording(): number; + public abstract stopAudioRecording(): number;; - (int)stopAudioRecording; virtual int stopAudioRecording() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita index 046853754b9..10135cb332a 100644 --- a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita +++ b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita @@ -15,7 +15,7 @@

public abstract int stopEffect(int soundId); - + public abstract stopEffect(soundId:number):number; - (int)stopEffect:(int)soundId; virtual int stopEffect(int soundId) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita index f7d4f0adf90..84028bf0c22 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita @@ -16,7 +16,7 @@ public abstract int updateScreenCaptureParameters( ScreenCaptureParameters screenCaptureParameters); - + public abstract updateScreenCaptureParameters(screenCaptureParameters: ScreenCaptureParameters): number; - (int)updateScreenCaptureParameters:(AgoraScreenCaptureParameters * _Nonnull)captureParams; virtual int updateScreenCaptureParameters(const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita b/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita index 63b9d01276a..ef9d59005fa 100644 --- a/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita @@ -15,7 +15,7 @@

public abstract int adjustUserPlaybackSignalVolumeEx( int uid, int volume, RtcConnection connection); - + public abstract adjustUserPlaybackSignalVolumeEx(uid:number,volume:number,connection:RtcConnection):number; - (int)adjustUserPlaybackSignalVolumeEx:(NSUInteger)uid volume:(NSInteger)volume connection:(AgoraRtcConnection* _Nonnull)connection; diff --git a/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita b/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita index 96324efecfe..1b92382ab54 100644 --- a/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita @@ -15,7 +15,7 @@

public abstract int enableAudioVolumeIndicationEx( int interval, int smooth, boolean reportVad, RtcConnection connection); - + public abstract enableAudioVolumeIndicationEx(interval:number,smooth:number,reportVad:boolean,connection:RtcConnection):number; - (int)enableAudioVolumeIndicationEx:(NSInteger)interval smooth:(NSInteger)smooth reportVad:(BOOL)reportVad diff --git a/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita b/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita index 75e8eec9116..1780ab555b9 100644 --- a/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita @@ -14,7 +14,7 @@

public abstract int muteRemoteAudioStreamEx(int uid, boolean muted, RtcConnection connection); - + public abstract muteRemoteAudioStreamEx(uid:number,muted:boolean,connection:RtcConnection):number; - (int)muteRemoteAudioStreamEx:(NSUInteger)uid mute:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection; diff --git a/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita b/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita index 9e8ddb4bf2a..dcf6d72d986 100644 --- a/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita @@ -14,7 +14,7 @@

public abstract int muteRemoteVideoStreamEx(int uid, boolean muted, RtcConnection connection); - + public abstract muteRemoteVideoStreamEx(uid:number,muted:boolean,connection:RtcConnection):number; - (int)muteRemoteVideoStreamEx:(NSUInteger)uid mute:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection; diff --git a/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita b/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita index 037910c5096..56d9d8bc80b 100644 --- a/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita @@ -14,7 +14,7 @@

public abstract int sendStreamMessageEx(int streamId, byte[] message, RtcConnection connection); - + public abstract sendStreamMessageEx(streamId:number,message:ArrayBuffer,connection:RtcConnection):number; virtual int sendStreamMessageEx(int streamId, const char* data, size_t length, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita b/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita index 41e016f0084..de42d534e09 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita @@ -15,7 +15,7 @@

public abstract int setRemoteRenderModeEx( int uid, int renderMode, int mirrorMode, RtcConnection connection); - + public abstract setRemoteRenderModeEx(uid:number,renderMode:number,mirrorMode:number,connection:RtcConnection):number; - (int)setRemoteRenderModeEx:(NSUInteger)uid mode:(AgoraVideoRenderMode)mode mirror:(AgoraVideoMirrorMode)mirror diff --git a/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita b/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita index 05d7c22bfa9..6a2e7ecd8e3 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita @@ -14,7 +14,7 @@

public abstract int setRemoteVideoStreamTypeEx(int uid, int streamType, RtcConnection connection); - + public abstract setRemoteVideoStreamTypeEx(uid:number,streamType:number,connection:RtcConnection):number; - (int)setRemoteVideoStreamEx:(NSUInteger)uid type:(AgoraVideoStreamType)streamType connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(setRemoteVideoStreamEx(_:type:connection:)); diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita index 093f7d085ce..ecd77382cd7 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita @@ -14,7 +14,7 @@

public abstract int takeSnapshotEx(RtcConnection connection, int uid, String filePath); - + public abstract takeSnapshotEx(connection:RtcConnection,uid:number,filePath:string):number; - (NSInteger)takeSnapshotEx:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid filePath:(NSString* _Nonnull)filePath; virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const char* filePath) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita b/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita index 87086cb94bd..7d083f8b9f5 100644 --- a/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita @@ -15,7 +15,7 @@

public abstract int updateChannelMediaOptionsEx( ChannelMediaOptions options, RtcConnection connection); - + public abstract updateChannelMediaOptionsEx(options:ChannelMediaOptions,connection:RtcConnection):number; - (int)updateChannelExWithMediaOptions:(AgoraRtcChannelMediaOptions* _Nonnull)mediaOptions connection:(AgoraRtcConnection * _Nonnull)connection; virtual int updateChannelMediaOptionsEx(const ChannelMediaOptions& options, const RtcConnection& connection) = 0; diff --git a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita index 2d9be2d80e3..f7dae57b848 100644 --- a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita +++ b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita @@ -15,7 +15,7 @@

boolean onLocalAudioSpectrum(AudioSpectrumInfo data); - + onLocalAudioSpectrum?:(data:AudioSpectrumData) => boolean ; - (BOOL)onLocalAudioSpectrum:(NSArray<NSNumber *> * _Nullable)audioSpectrumData; virtual bool onLocalAudioSpectrum(const AudioSpectrumData& data) = 0; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnLocalAudioSpectrum, const FAudioSpectrumData&, data); diff --git a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita index b2582f27ecf..db6d6fcd2cb 100644 --- a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita +++ b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita @@ -15,7 +15,7 @@

boolean onRemoteAudioSpectrum(UserAudioSpectrumInfo[] userAudioSpectrumInfos, int spectrumNumber); - + onRemoteAudioSpectrum?:(data:Array<AudioSpectrumInfo>) => boolean ; - (BOOL)onRemoteAudioSpectrum:(NSArray<AgoraAudioSpectrumInfo *> * _Nullable)AudioSpectrumInfo; virtual bool onRemoteAudioSpectrum(const UserAudioSpectrumInfo * spectrums, unsigned int spectrumNumber) = 0; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita index 8f98d0acf3f..e45e379dcb6 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita @@ -14,7 +14,7 @@

void onAudioVolumeIndication(int volume); - onAudioVolumeIndication?:( speakers:Array<AudioVolumeInfo>, totalVolume:number) => void + onAudioVolumeIndication?:(volume:number) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit volumeIndicationDidReceive:(NSInteger)volume; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita index 7ef736bb02d..58b3bf5a5ed 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita @@ -15,7 +15,7 @@

void onMetaData(Constants.MediaPlayerMetadataType type, byte[] data); - + onMetaData?:(type:Constants.MediaPlayerMetadataType,data:ArrayBuffer) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didReceiveData:(NSString *_Nullable)data length:(NSInteger)length; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita index 715614747a3..77a870ee51f 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita @@ -14,7 +14,7 @@

void onPlayerCacheStats(CacheStatistics stats); - + onPlayerCacheStats?:(stats:CacheStatistics) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit cacheStats:(AgoraMediaPlayerCacheStatistics *_Nonnull)info NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:cacheStats:)); virtual void onPlayerCacheStats(const media::base::CacheStatistics& stats) { (void)stats; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita index 236bcb188d7..69390eeeff0 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita @@ -15,7 +15,7 @@

void onPlayerEvent(Constants.MediaPlayerEvent eventCode, long elapsedTime, String message); - + onPlayerEvent?:(eventCode:Constants.MediaPlayerEvent,elapsedTime:bigint,message:string) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didOccurEvent:(AgoraMediaPlayerEvent)eventCode elapsedTime:(NSInteger)elapsedTime diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita index af260db1115..475e3827697 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita @@ -15,7 +15,7 @@

void onPlayerInfoUpdated(PlayerUpdatedInfo info); - + onPlayerInfoUpdated?:(info:PlayerUpdatedInfo) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit infoUpdated:(AgoraMediaPlayerUpdatedInfo *_Nonnull)info; virtual void onPlayerInfoUpdated(const media::base::PlayerUpdatedInfo& info) = 0; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita index 441abfe434c..d3f841c7a78 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita @@ -14,7 +14,7 @@

void onPlayerPlaybackStats(PlayerPlaybackStats stats); - + onPlayerPlaybackStats?:(stats:PlayerPlaybackStats) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit playbackStats:(AgoraMediaPlayerPlaybackStats *_Nonnull)info NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:playbackStats:)); virtual void onPlayerPlaybackStats(const media::base::PlayerPlaybackStats& stats) { (void)stats; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita index 2303078c688..6423a11e682 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita @@ -15,7 +15,7 @@

void onPlayerStateChanged(Constants.MediaPlayerState state, Constants.MediaPlayerReason reason); - + onPlayerStateChanged?:(state:Constants.MediaPlayerState,reason:Constants.MediaPlayerReason) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didChangedToState:(AgoraMediaPlayerState)state reason:(AgoraMediaPlayerReason)reason NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:didChangedTo:reason:)); diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita index 127cbed8e7f..92a80ff27eb 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita @@ -15,7 +15,7 @@

void onPlayerSrcInfoChanged(SrcInfo from, SrcInfo to); - + onPlayerSrcInfoChanged?:(from:SrcInfo,to:SrcInfo) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit playerSrcInfoDidChange:(AgoraMediaPlayerSrcInfo *_Nonnull)to from:(AgoraMediaPlayerSrcInfo *_Nonnull)from; virtual void onPlayerSrcInfoChanged(const media::base::SrcInfo& from, const media::base::SrcInfo& to) = 0; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita index 4dab43866db..a1fbd4deeaf 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita @@ -14,7 +14,7 @@

void onPositionChanged(long positionMs, long timestampMs); - + onPositionChanged?:(positionMs:bigint,timestampMs:bigint) => void - (void)AgoraMediaPlayer:(AgoraMediaPlayer *_Nonnull)playerKit didChangedToPosition:(NSInteger)positionMs atTimestamp:(NSTimeInterval)timestampMs NS_SWIFT_NAME(AgoraMediaPlayer(_:didChangedToPosition:atTimestamp:)); diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita index c6eb44e2d34..a2a5604888e 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita @@ -15,7 +15,7 @@

void onPreloadEvent(String src, Constants.MediaPlayerPreloadEvent event); - + onPreloadEvent?:(src:string,event:Constants.MediaPlayerPreloadEvent) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didPreloadEvent:(AgoraMediaPlayerPreloadEvent)event; diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita index 5402dea8617..0942220f233 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita @@ -14,7 +14,7 @@

void onLyricResult(String requestId, long songCode, String lyricUrl, int reason); - + onLyricResult?:(requestId:string,songCode:bigint,lyricUrl:string,reason:Constants.MusicContentCenterStateReason) => void - (void)onLyricResult:(NSString*)requestId songCode:(NSInteger)songCode lyricUrl:(NSString* _Nullable)lyricUrl reason:(AgoraMusicContentCenterStateReason)reason; virtual void onLyricResult(const char* requestId, int64_t songCode, const char* lyricUrl, MusicContentCenterStateReason reason) = 0; onLyricResult?( diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita index b543aab632e..ce1b0a5e72c 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita @@ -14,7 +14,7 @@

void onMusicChartsResult(String requestId, MusicChartInfo[] list, int reason); - + onMusicChartsResult?:(requestId:string,list:MusicChartInfo[],reason:Constants.MusicContentCenterStateReason) => void - (void)onMusicChartsResult:(NSString *)requestId result:(NSArray<AgoraMusicChartInfo*> *)result reason:(AgoraMusicContentCenterStateReason)reason; virtual void onMusicChartsResult(const char* requestId, agora_refptr<MusicChartCollection> result, MusicContentCenterStateReason reason) = 0; onMusicChartsResult?( diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita index 232818807fc..14122214595 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita @@ -15,7 +15,7 @@

void onMusicCollectionResult( String requestId, int page, int pageSize, int total, Music[] list, int reason); - + onMusicCollectionResult?:(requestId:string,page:number,pageSize:number,total:number,list:Music[],reason:Constants.MusicContentCenterStateReason) => void - (void)onMusicCollectionResult:(NSString *)requestId result:(AgoraMusicCollection *)result reason:(AgoraMusicContentCenterStateReason)reason; virtual void onMusicCollectionResult(const char* requestId, agora_refptr<MusicCollection> result, MusicContentCenterStateReason reason) = 0; onMusicCollectionResult?( diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita index 079432c4729..c2fa0c2a2d2 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita @@ -15,7 +15,7 @@

void onPreLoadEvent( String requestId, long songCode, int percent, String lyricUrl, int state, int reason); - + onPreLoadEvent?:(requestId:string,songCode:bigint,percent:number,lyricUrl:string,state:number,reason:Constants.MusicContentCenterStateReason) => void - (void)onPreLoadEvent:(NSString*)requestId songCode:(NSInteger)songCode percent:(NSInteger)percent lyricUrl:(NSString * _Nullable)lyricUrl state:(AgoraMusicContentCenterPreloadState)state reason:(AgoraMusicContentCenterStateReason)reason; virtual void onPreLoadEvent(const char* requestId, int64_t songCode, int percent, const char* lyricUrl, PreloadState state, MusicContentCenterStateReason reason) = 0; onPreLoadEvent?( diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita index a72ba0e102c..78c74c90d16 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita @@ -14,7 +14,7 @@

void onSongSimpleInfoResult(String requestId, long songCode, String simpleInfo, int reason); - + onSongSimpleInfoResult?:(requestId:string,songCode:bigint,simpleInfo:string,reason:Constants.MusicContentCenterStateReason) => void - (void)onSongSimpleInfoResult:(NSString*)requestId songCode:(NSInteger)songCode simpleInfo:(NSString* _Nullable)simpleInfo reason:(AgoraMusicContentCenterStateReason)reason; virtual void onSongSimpleInfoResult(const char* requestId, int64_t songCode, const char* simpleInfo, MusicContentCenterStateReason reason) = 0; onSongSimpleInfoResult?( diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita index c39f8a9ce20..f6d0827cce1 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita @@ -14,7 +14,7 @@

public void onAudioMixingStateChanged(int state, int reasonCode); - onAudioMixingStateChanged?:(state:number,reason:number) => void + onAudioMixingStateChanged?:(state:Constants.AudioMixingState,reason:Constants.AudioMixingReason) => void - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioMixingStateChanged:(AgoraAudioMixingStateType)state reasonCode:(AgoraAudioMixingReasonCode)reasonCode; virtual void onAudioMixingStateChanged(AUDIO_MIXING_STATE_TYPE state, AUDIO_MIXING_REASON_TYPE reason) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita index 224eeb4da45..fdedd820270 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita @@ -15,7 +15,7 @@

public void onAudioPublishStateChanged(String channel, STREAM_PUBLISH_STATE oldState, STREAM_PUBLISH_STATE newState, int elapseSinceLastState) {} - + onAudioPublishStateChanged?:(channel:string, oldState:Constants.StreamPublishState, newState:Constants.StreamPublishState, elapseSinceLastState:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioPublishStateChange:(NSString * _Nonnull)channelId oldState:(AgoraStreamPublishState)oldState diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita index 2805937bb3a..a871d5ffc78 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita @@ -15,7 +15,7 @@

public void onAudioSubscribeStateChanged( String channel, int uid, int oldState, int newState, int elapseSinceLastState) {} - + onAudioSubscribeStateChanged?:(channel:string,uid:number,oldState:Constants.StreamSubscribeState,newState:Constants.StreamSubscribeState,elapseSinceLastState:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioSubscribeStateChange:(NSString * _Nonnull)channelId uid:(unsigned int)uid diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita index 30e9e558f3c..8d9d0978fe6 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita @@ -14,7 +14,7 @@

public void onChannelMediaRelayStateChanged(int state, int code) {} - + onChannelMediaRelayStateChanged?:(state:Constants.ChannelMediaRelayState,code:Constants.ChannelMediaRelayError) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine channelMediaRelayStateDidChange:(AgoraChannelMediaRelayState)state error:(AgoraChannelMediaRelayError)error; diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita index 1d66fae9583..ed2e4c08aba 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita @@ -15,7 +15,7 @@

public void onError(int err) {} - onError?:(err:number,message:string) => void + onError?:(err:Constants.ErrorCode,message:string) => void - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didOccurError:(AgoraErrorCode)errorCode; virtual void onError(int err, const char* msg) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita index 31ec85bd6b1..3f12bccb3e8 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita @@ -16,7 +16,7 @@ public void onFirstLocalVideoFrame( Constants.VideoSourceType source, int width, int height, int elapsed) {} - + onFirstLocalVideoFrame?:(source:Constants.VideoSourceType,width:number,height:number,elapsed:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita index 76df41ef904..aa7f889270e 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita @@ -14,7 +14,7 @@

public void onFirstRemoteVideoFrame(int uid, int width, int height, int elapsed) {} - + onFirstRemoteVideoFrame?:(uid:number,width:number,height:number,elapsed:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed; virtual void onFirstRemoteVideoFrame(uid_t userId, int width, int height, int elapsed) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita index 3a11969fb0b..1f4db2c4697 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita @@ -14,7 +14,7 @@

public void onTokenPrivilegeWillExpire(String token) {} - + onTokenPrivilegeWillExpire?: (token:string) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine tokenPrivilegeWillExpire:(NSString *_Nonnull)token; virtual void onTokenPrivilegeWillExpire(const char* token) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita index 6b7895b5b7c..c6174206da6 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita @@ -14,7 +14,7 @@

public void onUserMuteAudio(int uid, boolean muted) {} - + onUserMuteAudio?:(uid:number,muted:boolean) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSUInteger)uid; virtual void onUserMuteAudio(uid_t uid, bool muted) { (void)uid; diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita index aba321dbe96..0b0aff840ab 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita @@ -14,7 +14,7 @@

public void onUserMuteVideo(int uid, boolean muted) {} - + onUserMuteVideo?:(uid:number,muted:boolean) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid virtual void onUserMuteVideo(uid_t uid, bool muted) { (void)uid; diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita index 3a94fd31033..f4ff60f98be 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita @@ -15,7 +15,7 @@

public void onVideoSubscribeStateChanged( String channel, int uid, int oldState, int newState, int elapseSinceLastState) {} - + onVideoSubscribeStateChanged?:(channel:string,uid:number,oldState:Constants.StreamSubscribeState,newState:Constants.StreamSubscribeState,elapseSinceLastState:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoSubscribeStateChange:(NSString * _Nonnull)channelId uid:(unsigned int)uid diff --git a/dita/RTC-NG/API/class_advanceoptions.dita b/dita/RTC-NG/API/class_advanceoptions.dita index 82aa0a26f7d..95698d192d6 100644 --- a/dita/RTC-NG/API/class_advanceoptions.dita +++ b/dita/RTC-NG/API/class_advanceoptions.dita @@ -23,11 +23,11 @@ } } export class AdvanceOptions { - public encodingPreference:EncodingPrefence = EncodingPrefence.PREFER_AUTO; - public compressionPreference:CompressionPrefence = CompressionPrefence.PREFER_LOW_LATENCY; - constructor() { - } - } + public encodingPreference:EncodingPrefence = EncodingPrefence.PREFER_AUTO; + public compressionPreference:CompressionPrefence = CompressionPrefence.PREFER_LOW_LATENCY; + constructor() { + } +} __attribute__((visibility("default"))) @interface AgoraAdvancedVideoOptions : NSObject @property(assign, nonatomic) AgoraEncodingPreference encodingPreference; @property(assign, nonatomic) AgoraCompressionPreference compressionPreference; diff --git a/dita/RTC-NG/API/class_audiospectrumdata.dita b/dita/RTC-NG/API/class_audiospectrumdata.dita index 126297193f2..da3718f45dd 100644 --- a/dita/RTC-NG/API/class_audiospectrumdata.dita +++ b/dita/RTC-NG/API/class_audiospectrumdata.dita @@ -10,7 +10,10 @@ private float[] audioSpectrumData; private int dataLength; } - + export class AudioSpectrumInfo { + public uid:number = 0 ; + public audioSpectrumData = new AudioSpectrumData(); +} struct AudioSpectrumData { const float *audioSpectrumData; diff --git a/dita/RTC-NG/API/class_cachestatistics.dita b/dita/RTC-NG/API/class_cachestatistics.dita index 9e615b81e04..2f86755c324 100644 --- a/dita/RTC-NG/API/class_cachestatistics.dita +++ b/dita/RTC-NG/API/class_cachestatistics.dita @@ -17,7 +17,15 @@ private long cacheSize; private long downloadSize; } - + export class CacheStatistics +{ + + public fileSize:number = 0 + + public cacheSize:number = 0 + + public downloadSize:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerCacheStatistics : NSObject @property(assign, nonatomic) NSInteger fileSize; @property(assign, nonatomic) NSInteger cacheSize; diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index 4660733227d..e4b7016168b 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -664,67 +664,67 @@ class ChannelMediaOptions { public Boolean isAudioFilterable; } export class ChannelMediaOptions { + + public publishCameraTrack?:boolean; + + public publishSecondaryCameraTrack?:boolean; + + public publishMicrophoneTrack?:boolean; + + public publishScreenCaptureVideo?:boolean; + + public publishScreenCaptureAudio?:boolean; + + public publishCustomAudioTrack?:boolean; + + public publishCustomAudioTrackId?:number; + + public publishCustomVideoTrack?:boolean; + + public publishEncodedVideoTrack?:boolean; + + public publishMediaPlayerAudioTrack?:boolean; + + public publishMediaPlayerVideoTrack?:boolean; + + public publishTranscodedVideoTrack?:boolean; + + public publishMixedAudioTrack?:boolean; + + public autoSubscribeAudio?:boolean; + + public autoSubscribeVideo?:boolean; + + public enableAudioRecordingOrPlayout?:boolean; + + public publishMediaPlayerId?:number; + + public clientRoleType?:number; + + public audienceLatencyLevel?:number; + + public defaultVideoStreamType?:number; + + public channelProfile?:number; + + public audioDelayMs?:number; + + public mediaPlayerAudioDelayMs?:number; - public publishCameraTrack?:boolean; - - public publishSecondaryCameraTrack?:boolean; - - public publishMicrophoneTrack?:boolean; - - public publishScreenCaptureVideo?:boolean; - - public publishScreenCaptureAudio?:boolean; - - public publishCustomAudioTrack?:boolean; - - public publishCustomAudioTrackId?:number; - - public publishCustomVideoTrack?:boolean; - - public publishEncodedVideoTrack?:boolean; - - public publishMediaPlayerAudioTrack?:boolean; - - public publishMediaPlayerVideoTrack?:boolean; - - public publishTranscodedVideoTrack?:boolean; - - public publishMixedAudioTrack?:boolean; - - public autoSubscribeAudio?:boolean; - - public autoSubscribeVideo?:boolean; - - public enableAudioRecordingOrPlayout?:boolean; - - public publishMediaPlayerId?:number; - - public clientRoleType?:number; - - public audienceLatencyLevel?:number; - - public defaultVideoStreamType?:number; - - public channelProfile?:number; - - public audioDelayMs?:number; - - public mediaPlayerAudioDelayMs?:number; - - public enableBuiltInMediaEncryption?:boolean; - - public publishRhythmPlayerTrack?:boolean; - - public isInteractiveAudience?:boolean; - - public customVideoTrackId?:number; - - public isAudioFilterable?:boolean; - - public startPreview?:boolean; - public constructor() { - } - } + public enableBuiltInMediaEncryption?:boolean; + + public publishRhythmPlayerTrack?:boolean; + + public isInteractiveAudience?:boolean; + + public customVideoTrackId?:number; + + public isAudioFilterable?:boolean; + + public startPreview?:boolean; + public constructor() { + } +} __attribute__((visibility("default"))) @interface AgoraRtcChannelMediaOptions : NSObject @property(assign, nonatomic) BOOL publishCameraTrack; @property(assign, nonatomic) BOOL publishSecondaryCameraTrack; diff --git a/dita/RTC-NG/API/class_climaxsegment.dita b/dita/RTC-NG/API/class_climaxsegment.dita index 1aaad90b47b..aeafde4bdce 100644 --- a/dita/RTC-NG/API/class_climaxsegment.dita +++ b/dita/RTC-NG/API/class_climaxsegment.dita @@ -26,7 +26,11 @@ return endTimeMs; } } - + export class ClimaxSegment +{ + public startTimeMs:number = 0 + public endTimeMs:number = 0 +} __attribute__((visibility("default"))) @interface AgoraClimaxSegment : NSObject @property(nonatomic, assign) NSInteger startTimeMs; @property(nonatomic, assign) NSInteger endTimeMs; diff --git a/dita/RTC-NG/API/class_contentinspectconfig.dita b/dita/RTC-NG/API/class_contentinspectconfig.dita index 4de270babb1..97b4a41654b 100644 --- a/dita/RTC-NG/API/class_contentinspectconfig.dita +++ b/dita/RTC-NG/API/class_contentinspectconfig.dita @@ -34,7 +34,17 @@ moduleCount = 0; } } - + export class ContentInspectConfig { + public static readonly MAX_CONTENT_INSPECT_MODULE_COUNT:number = 32; + + public extraInfo?:string; + + public serverConfig?:string; + + public modules? :Array<ContentInspectModule>; + + public moduleCount:number = 0; +} __attribute__((visibility("default"))) @interface AgoraContentInspectConfig: NSObject @property (nonatomic, copy) NSString* _Nullable extraInfo; @property (nonatomic, copy) NSString* _Nullable serverConfig; diff --git a/dita/RTC-NG/API/class_contentinspectmodule.dita b/dita/RTC-NG/API/class_contentinspectmodule.dita index 382fa1f1fd1..fa4fc7adb22 100644 --- a/dita/RTC-NG/API/class_contentinspectmodule.dita +++ b/dita/RTC-NG/API/class_contentinspectmodule.dita @@ -13,7 +13,12 @@ type = CONTENT_INSPECT_TYPE_INVALID; interval = 0; } - + export class ContentInspectModule { + + public type:Constants.ContentInspectType = Constants.ContentInspectType.INVALID; + + public interval:number = 0; +} __attribute__((visibility("default"))) @interface AgoraContentInspectModule: NSObject @property (assign, nonatomic) AgoraContentInspectType type; diff --git a/dita/RTC-NG/API/class_logconfig.dita b/dita/RTC-NG/API/class_logconfig.dita index 16ea5ef428a..61e5c747b82 100644 --- a/dita/RTC-NG/API/class_logconfig.dita +++ b/dita/RTC-NG/API/class_logconfig.dita @@ -11,7 +11,14 @@ public int fileSizeInKB; public int level = Constants.LogLevel.getValue(Constants.LogLevel.LOG_LEVEL_INFO); } - + export class LogConfig { + + public filePath:string = ''; + + public fileSizeInKB:number = 2048; + + public level: Constants.LogLevel = Constants.LogLevel.INFO; +} __attribute__((visibility("default"))) @interface AgoraLogConfig: NSObject @property (copy, nonatomic) NSString * _Nullable filePath; @property (assign, nonatomic) NSInteger fileSizeInKB; diff --git a/dita/RTC-NG/API/class_mediasource.dita b/dita/RTC-NG/API/class_mediasource.dita index 5adda6d0bbf..b26e4cb2097 100644 --- a/dita/RTC-NG/API/class_mediasource.dita +++ b/dita/RTC-NG/API/class_mediasource.dita @@ -17,7 +17,25 @@ boolean enableMultiAudioTrack; IMediaPlayerCustomDataProvider provider; } - + export class MediaPlayerSource +{ + + public url:string = "" + + public uri:string = "" + + public startPos:number = 0 + + public autoPlay:boolean = true ; + + public enableCache:boolean = false ; + + public enableMultiAudioTrack:boolean = false ; + + public isAgoraSource?:Boolean + + public isLiveSource?:Boolean +} __attribute__((visibility("default"))) @interface AgoraMediaSource : NSObject @property(copy, nonatomic) NSString *_Nullable url; @property(copy, nonatomic) NSString *_Nullable uri; diff --git a/dita/RTC-NG/API/class_music.dita b/dita/RTC-NG/API/class_music.dita index fa9359071fe..8461efe6bbe 100644 --- a/dita/RTC-NG/API/class_music.dita +++ b/dita/RTC-NG/API/class_music.dita @@ -86,7 +86,31 @@ return climaxSegments; } } - + export class Music +{ + + public songCode:bigint = BigInt(0) + + public name:string = "" + + public singer:string = "" + + public poster:string = "" + + public releaseTime:string = "" + + public type:number = 0 + + public pitchType:number = 0 + + public durationS:number = 0 + + public lyricTypes?:number[] + + public mvProperties?:MvProperty[] + + public climaxSegments?:ClimaxSegment[] +} __attribute__((visibility("default"))) @interface AgoraMusic : NSObject @property(nonatomic, assign) NSInteger songCode; @property(nonatomic, assign) NSInteger type; diff --git a/dita/RTC-NG/API/class_musiccacheinfo.dita b/dita/RTC-NG/API/class_musiccacheinfo.dita index 31ef0e3e934..680470d16fc 100644 --- a/dita/RTC-NG/API/class_musiccacheinfo.dita +++ b/dita/RTC-NG/API/class_musiccacheinfo.dita @@ -12,7 +12,13 @@ public MusicCacheInfo() {} } - + export class MusicCacheInfo +{ + + public songCode:bigint = BigInt(0) + + public status:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMusicCacheInfo : NSObject @property(nonatomic, assign) NSInteger songCode; diff --git a/dita/RTC-NG/API/class_musicchartinfo.dita b/dita/RTC-NG/API/class_musicchartinfo.dita index 74afa74bab4..8e06407e6dc 100644 --- a/dita/RTC-NG/API/class_musicchartinfo.dita +++ b/dita/RTC-NG/API/class_musicchartinfo.dita @@ -26,7 +26,13 @@ return type; } } - + export class MusicChartInfo +{ + + public name:string = "" + + public type:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMusicChartInfo : NSObject @property (nonatomic, copy) NSString *chartName; @property (nonatomic, assign) NSInteger identify; diff --git a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita index 6f642dc4453..eccaff91c37 100644 --- a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita +++ b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita @@ -22,7 +22,21 @@ eventHandler = null; } } - + export class MusicContentCenterConfiguration +{ + + public appId:string = "" + + public token:string = "" + + public mccUid:number = 0 + + public maxCacheSize:number = 0 + + public eventHandler?:IMusicContentCenterEventHandler + + public mccDomain:string = "" +} __attribute__((visibility("default"))) @interface AgoraMusicContentCenterConfig : NSObject @property(assign, nonatomic) AgoraRtcEngineKit* _Nullable rtcEngine; @property (nonatomic, copy) NSString *appId; diff --git a/dita/RTC-NG/API/class_playerplaybackstats.dita b/dita/RTC-NG/API/class_playerplaybackstats.dita index fb42818cc20..f197d1704cc 100644 --- a/dita/RTC-NG/API/class_playerplaybackstats.dita +++ b/dita/RTC-NG/API/class_playerplaybackstats.dita @@ -12,7 +12,17 @@ private long audioBitrateInKbps; private long totalBitrateInKbps; } - + export class PlayerPlaybackStats +{ + + public videoFps:number = 0 + + public videoBitrateInKbps:number = 0 + + public audioBitrateInKbps:number = 0 + + public totalBitrateInKbps:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerPlaybackStats : NSObject @property(assign, nonatomic) NSInteger videoFps; @property(assign, nonatomic) NSInteger videoBitrateInKbps; diff --git a/dita/RTC-NG/API/class_playerstreaminfo.dita b/dita/RTC-NG/API/class_playerstreaminfo.dita index 072bdf9e0d6..6edcbf45253 100644 --- a/dita/RTC-NG/API/class_playerstreaminfo.dita +++ b/dita/RTC-NG/API/class_playerstreaminfo.dita @@ -23,7 +23,22 @@ public MediaStreamInfo() {} } - + export class MediaStreamInfo +{ + public streamIndex:number = 0 + public mediaStreamType:number = 0 + public codecName:string = "" + public language:string = "" + public videoFrameRate:number = 0 + public videoBitRate:number = 0 + public videoWidth:number = 0 + public videoHeight:number = 0 + public videoRotation:number = 0 + public audioSampleRate:number = 0 + public audioChannels:number = 0 + public audioBytesPerSample:number = 0 + public duration:bigint = BigInt(0) +} __attribute__((visibility("default"))) @interface AgoraMediaStreamInfo : NSObject @property(nonatomic, assign) NSInteger streamIndex; diff --git a/dita/RTC-NG/API/class_playerupdatedinfo.dita b/dita/RTC-NG/API/class_playerupdatedinfo.dita index 608c9697e47..d92c49c868d 100644 --- a/dita/RTC-NG/API/class_playerupdatedinfo.dita +++ b/dita/RTC-NG/API/class_playerupdatedinfo.dita @@ -14,7 +14,23 @@ private long audioChannels; private long audioBitsPerSample; } - + export class PlayerUpdatedInfo +{ + + public internalPlayerUuid:string = "" + + public deviceId:string = "" + + public videoHeight:number = 0 + + public videoWidth:number = 0 + + public audioSampleRate:number = 0 + + public audioChannels:number = 0 + + public audioBitsPerSample:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerUpdatedInfo : NSObject @property(copy, nonatomic) NSString *_Nullable deviceId; @property(assign, nonatomic) NSInteger videoHeight; diff --git a/dita/RTC-NG/API/class_rtcengineconfig.dita b/dita/RTC-NG/API/class_rtcengineconfig.dita index 8050d83704f..c2f9ab9621b 100644 --- a/dita/RTC-NG/API/class_rtcengineconfig.dita +++ b/dita/RTC-NG/API/class_rtcengineconfig.dita @@ -29,6 +29,7 @@ public mContext:Context | null = null; public mAppId:string | null = null; public mEventHandler: IRtcEngineEventHandler | null = null; + public mLogConfig?:LogConfig; } __attribute__((visibility("default"))) @interface AgoraRtcEngineConfig: NSObject diff --git a/dita/RTC-NG/API/class_segmentationproperty.dita b/dita/RTC-NG/API/class_segmentationproperty.dita index ea04676fece..0db625d5b38 100644 --- a/dita/RTC-NG/API/class_segmentationproperty.dita +++ b/dita/RTC-NG/API/class_segmentationproperty.dita @@ -22,8 +22,10 @@ } } export class SegmentationProperty { + public static readonly SEG_MODEL_AI:number = 1; + public static readonly SEG_MODEL_GREEN:number = 2; - public modelType:Constants.SegModelType = Constants.SegModelType.AI; + public modelType:number = SegmentationProperty.SEG_MODEL_AI; public greenCapacity:number = 0.5; } diff --git a/dita/RTC-NG/API/class_srcinfo.dita b/dita/RTC-NG/API/class_srcinfo.dita index bf7ed1c1392..719883a7473 100644 --- a/dita/RTC-NG/API/class_srcinfo.dita +++ b/dita/RTC-NG/API/class_srcinfo.dita @@ -12,7 +12,13 @@ public SrcInfo() {} } - + export class SrcInfo +{ + + public bitrateInKbps:number = 0 + + public name:string = "" +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerSrcInfo : NSObject @property(assign, nonatomic) int bitrateInKbps; @property(copy, nonatomic) NSString *_Nullable name; diff --git a/dita/RTC-NG/API/class_videocanvas.dita b/dita/RTC-NG/API/class_videocanvas.dita index 951ee55a61e..6d2b10c2b00 100644 --- a/dita/RTC-NG/API/class_videocanvas.dita +++ b/dita/RTC-NG/API/class_videocanvas.dita @@ -58,6 +58,7 @@ public uid:number = 0; public renderMode:number = VideoCanvas.RENDER_MODE_HIDDEN; public mirrorMode:number = 0; + public sourceType:Constants.VideoSourceType = Constants.VideoSourceType.CAMERA_PRIMARY; constructor(componentId:string) { this.xcomponentId = componentId; } diff --git a/dita/RTC-NG/API/class_virtualbackgroundsource.dita b/dita/RTC-NG/API/class_virtualbackgroundsource.dita index aa6dc9ebd9a..1c11dcbd683 100644 --- a/dita/RTC-NG/API/class_virtualbackgroundsource.dita +++ b/dita/RTC-NG/API/class_virtualbackgroundsource.dita @@ -36,13 +36,29 @@ export class VirtualBackgroundSource { - public backgroundSourceType: Constants.VirtualBackgroundType = Constants.VirtualBackgroundType.COLOR; + public static readonly BACKGROUND_NONE:number = 0; + + public static readonly BACKGROUND_COLOR:number = 1; + + public static readonly BACKGROUND_IMG:number = 2; + + public static readonly BACKGROUND_BLUR:number = 3; + + public static readonly BACKGROUND_VIDEO:number = 4; + + public static readonly BLUR_DEGREE_LOW:number = 1; + + public static readonly BLUR_DEGREE_MEDIUM:number = 2; + + public static readonly BLUR_DEGREE_HIGH:number = 3; + + public backgroundSourceType:number = VirtualBackgroundSource.BACKGROUND_COLOR; public color:number = 0xffffff; - public source:string | null = null; + public source?:string; - public blurDegree:Constants.VirtualBackgroundBlurDegree = Constants.VirtualBackgroundBlurDegree.HIGH; + public blurDegree:number = VirtualBackgroundSource.BLUR_DEGREE_HIGH; } __attribute__((visibility("default"))) @interface AgoraVirtualBackgroundSource : NSObject @property(nonatomic, assign) AgoraVirtualBackgroundSourceType backgroundSourceType NS_SWIFT_NAME(backgroundSourceType); From e901d53ca1ef220fce54f1020412f9b08bf4f57a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 22 Aug 2024 10:55:22 +0800 Subject: [PATCH 007/354] add note --- dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita | 1 + 1 file changed, 1 insertion(+) diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita b/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita index 88cf54ae12b..aae43b96e2f 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita @@ -50,6 +50,7 @@

调用限制
    +
  • 使用该方法播放时长较短的音效文件可能会导致播放失败。如需播放音效文件,建议使用
  • 如需多次调用该方法,请确保调用间隔大于 500 ms。
  • 在 Android 平台上调用该方法时,请注意如下事项:
      From d6b92529165d611383e1405c086c4615779f26b8 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 22 Aug 2024 15:32:58 +0800 Subject: [PATCH 008/354] Update keys-rtc-ng-api-unity.ditamap --- dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 8480f2f4bbc..325a4dc2da1 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -9067,6 +9067,13 @@ + + + + LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE + + + From a45759f641871a8268f5fa9781a8d271fa31c2a6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 22 Aug 2024 07:33:32 +0000 Subject: [PATCH 009/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 8480f2f4bbc..325a4dc2da1 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -9067,6 +9067,13 @@ + + + + LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE + + + From 853f76984ff8d3e507c810b7b73c199109fe2d50 Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 23 Aug 2024 12:44:59 +0800 Subject: [PATCH 010/354] Update release_flutter_ng.md --- .../en-US/framework/release_flutter_ng.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md index 189466ba1e7..2aa7fe08726 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md @@ -10,6 +10,71 @@ AirPods Pro does not support A2DP protocol in communication audio mode, which ma + +## v6.4.0 + +This version was released on August x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | ------------------ | ------------------------------- | + | `onExtensionEvent` | `onExtensionEventWithContext` | + | `onExtensionStarted` | `onExtensionStartedWithContext` | + | `onExtensionStopped` | `onExtensionStoppedWithContext` | + | `onExtensionError` | `onExtensionErrorWithContext` | + +#### New features + +1. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +2. **1v1 video call scenario** + + This version adds `applicationScenario1v1` (1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. + +#### Improvements + +1. **Adaptive hardware decoding support (Android, Windows)** + + This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. + +2. **Rendering performance enhancement (Windows)** + + DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities. + +3. **Facial region beautification** + + To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. + +4. **Other improvements** + + This version also includes the following improvements: + + - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. + - The `localVideoStreamReasonScreenCaptureDisplayDisconnected` enumerator is added in `onLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. (Windows, macOS) + - Optimizes the video link for window sharing, reducing CPU usage. (macOS) + - Improves echo cancellation for screen sharing scenarios. (Windows) + - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. + - Deprecates redundant enumeration values `clientRoleChangeFailedRequestTimeOut` and `clientRoleChangeFailedConnectionFailed` in `ClientRoleChangeFailedReason`. + +#### Issues fixed + +This release fixed the following issues: + +- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS) +- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS) +- After the sender called `startDirectCdnStreaming` to start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS) +- Audio playback failed when pushing external audio data using `pushAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. (Android, iOS) + + + + ## v6.3.2 This version was released on May x, 20xx. From 7d912c49c8c039f85bc1d47e6fd8d98ba8597491 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 23 Aug 2024 14:28:34 +0800 Subject: [PATCH 011/354] update unity proto --- dita/RTC-NG/API/class_externalvideoframe.dita | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 251aafc664a..34f3c13b7d4 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -182,8 +182,8 @@ public byte[] alphaBuffer; public bool fillAlphaBuffer; public ALPHA_STITCH_MODE alphaStitchMode; - public IntPtr d3d11_texture_2d; - public int texture_slice_index; + public IntPtr d3d11Texture2d; + public int textureSliceIndex; }; export class ExternalVideoFrame { type?: VideoBufferType; @@ -470,8 +470,7 @@ class ExternalVideoFrame { - texture_slice_index - textureSliceIndex + textureSliceIndex 该参数仅适用于 Windows Texture 格式的视频数据。表示在 ID3D11Texture2D 数组中,被视频帧使用的某一个 ID3D11Texture2D 纹理对象的索引。 From 2e071121904bab3be29071c9ef6508e6ddcd2ae9 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 23 Aug 2024 06:29:07 +0000 Subject: [PATCH 012/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_externalvideoframe.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita index 8533a3e3da6..33b18fe4c99 100644 --- a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita @@ -182,8 +182,8 @@ public byte[] alphaBuffer; public bool fillAlphaBuffer; public ALPHA_STITCH_MODE alphaStitchMode; - public IntPtr d3d11_texture_2d; - public int texture_slice_index; + public IntPtr d3d11Texture2d; + public int textureSliceIndex; }; export class ExternalVideoFrame { type?: VideoBufferType; From a1fa01200698a6f29c7797d9d723e5bd1c9997df Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:40:35 +0800 Subject: [PATCH 013/354] 1 --- .../api_irtcengine_startscreencapture.dita | 4 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 56 ++++++------ .../config/keys-rtc-ng-api-harmony.ditamap | 86 +++++++++---------- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita index a828da7bf24..c3ee036e869 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita @@ -73,8 +73,8 @@ parameters screenCaptureParameters - captureParams - 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2,073,600 像素。该像素值为计费标准。详见 + captureParams + 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2,073,600 像素。该像素值为计费标准。详见
diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 89121d8e9b9..12ba32f1862 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -119,7 +119,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -281,11 +281,11 @@ - + - + @@ -402,8 +402,8 @@ - - + + @@ -411,7 +411,7 @@ - + @@ -446,13 +446,13 @@ - + - + @@ -461,7 +461,7 @@ - + @@ -471,7 +471,7 @@ - + @@ -497,11 +497,11 @@ - - - + + + - + @@ -529,7 +529,7 @@ - + @@ -588,7 +588,7 @@ - + @@ -641,25 +641,25 @@ - + - - + + - + - - + + - + - + @@ -676,7 +676,7 @@ - + @@ -699,11 +699,11 @@ - + - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 8795eee2fe2..ad17b13d223 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -389,7 +389,7 @@ - + @@ -593,14 +593,14 @@ - + registerAudioFrameObserver - + registerVideoFrameObserver @@ -1209,7 +1209,7 @@ - + adjustUserPlaybackSignalVolumeEx @@ -1237,7 +1237,7 @@ - + enableAudioVolumeIndicationEx @@ -1287,14 +1287,14 @@ - + muteRemoteAudioStreamEx - + muteRemoteVideoStreamEx @@ -1315,7 +1315,7 @@ - + sendCustomReportMessageEx @@ -1329,7 +1329,7 @@ - + setRemoteRenderModeEx @@ -1343,7 +1343,7 @@ - + setRemoteVideoStreamTypeEx @@ -1406,14 +1406,14 @@ - + takeSnapshotEx - + updateChannelMediaOptionsEx @@ -1527,7 +1527,7 @@ - + updateScreenCaptureParameters @@ -1564,7 +1564,7 @@ - + setAudioMixingPlaybackSpeed @@ -1621,14 +1621,14 @@ - + getAudioMixingPlayoutVolume - + getAudioMixingPublishVolume @@ -2045,7 +2045,7 @@ - + startRtmpStreamWithoutTranscoding @@ -2359,7 +2359,7 @@ - + isCameraFaceDetectSupported @@ -2375,7 +2375,7 @@ - + setEnableSpeakerphone @@ -2727,7 +2727,7 @@ - + @@ -2744,7 +2744,7 @@ - + registerAudioFrameObserver @@ -2789,7 +2789,7 @@ - + @@ -3058,7 +3058,7 @@ - + isCameraZoomSupported @@ -3079,7 +3079,7 @@ - + isCameraExposurePositionSupported @@ -3093,7 +3093,7 @@ - + isCameraAutoFocusFaceModeSupported @@ -3121,21 +3121,21 @@ - + setCameraExposurePosition - + setCameraTorchOn - + setCameraAutoFocusFaceModeEnabled @@ -3252,7 +3252,7 @@ - + @@ -3415,7 +3415,7 @@ - + @@ -3460,7 +3460,7 @@ - + enableContentInspect @@ -3546,7 +3546,7 @@ - + getErrorDescription @@ -3560,7 +3560,7 @@ - + getSdkVersion @@ -4005,42 +4005,42 @@ - + onMetaData - + onPlayerCacheStats - + onPlayerEvent - + onPlayerPlaybackStats - + onPlayerStateChanged - + onPositionChanged @@ -4068,7 +4068,7 @@ - + onPreloadEvent @@ -4082,14 +4082,14 @@ - + onPlayerSrcInfoChanged - + onPlayerInfoUpdated @@ -4244,7 +4244,7 @@ - + From 19bbec81f4941d08d6998a1c5c92e08f99c89f92 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:40:39 +0800 Subject: [PATCH 014/354] 1 --- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 12ba32f1862..26f8065d679 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -387,7 +387,7 @@ - + From 7f4df5d3f9c6f69684bb2ba26f9a3dc9e30e2ad2 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 23 Aug 2024 14:58:33 +0800 Subject: [PATCH 015/354] RN/Electron: add en release notes --- .../en-US/framework/release_electron_ng.md | 73 +++++++++++++++++++ .../en-US/framework/release_rn_ng.md | 71 ++++++++++++++++++ 2 files changed, 144 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md index ed1fbb00023..49643e81553 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md @@ -1,3 +1,76 @@ +## v4.4.0 + +This version was released on July x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | ------------------ | ---------------- | + | `onExtensionEvent` | `onExtensionEventWithContext` | + | `onExtensionStarted` | `onExtensionStartedWithContext` | + | `onExtensionStopped` | `onExtensionStoppedWithContext` | + | `onExtensionError` | `onExtensionErrorWithContext` | + +2. This version renames the following members in `ExternalVideoFrame`: + + - `d3d11_texture_2d` is renamed to `d3d11Texture2d`. + - `texture_slice_index` is renamed to `textureSliceIndex`. + - `metadata_buffer` is renamed to `metadataBuffer`. + - `metadata_size` is renamed to `metadataSize`. + +#### New features + +1. **Alpha transparency effects** + + This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: + + - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. + - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. + - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. + + Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. + +2. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType`enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +3. **1v1 video call scenario** + + This version adds `ApplicationScenario1v1`(1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. + +#### Improvements + +1. **Adaptive hardware decoding support (Windows)** + + This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. + +2. **Rendering performance enhancement (Windows)** + + DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities. + +3. **Facial region beautification** + + To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. + +4. **Other improvements** + + This version also includes the following improvements: + + - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. + - The ``enumerator is added in `onLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. + - Optimizes the video link for window sharing, reducing CPU usage. (macOS) + - Improves echo cancellation for screen sharing scenarios. + - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. + - Deprecates redundant enumeration values `ClientRoleChangeFailedRequestTimeOut` and `ClientRoleChangeFailedConnectionFailed` in `ClientRoleChangeFailedReason`. + +#### Issues fixed + +This release fixes the issue where the App crashes during audio and video interactions after the user actively denies permission for the App to use audio and video devices. (macOS) + ## v4.3.2 This version was released on May x, 20xx. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md index 8f1fc18434d..9180442b02f 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md @@ -8,6 +8,77 @@ On Android 14 devices (such as OnePlus 11), screen sharing may not be available AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v4.4.0 + +This version was released on July x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | ------------------ | ---------------- | + | `onExtensionEvent` | `onExtensionEventWithContext` | + | `onExtensionStarted` | `onExtensionStartedWithContext` | + | `onExtensionStopped` | `onExtensionStoppedWithContext` | + | `onExtensionError` | `onExtensionErrorWithContext` | + +2. This version renames the following members in `ExternalVideoFrame`: + + - `d3d11_texture_2d` is renamed to `d3d11Texture2d`. + - `texture_slice_index` is renamed to `textureSliceIndex`. + - `metadata_buffer` is renamed to `metadataBuffer`. + - `metadata_size` is renamed to `metadataSize`. + +#### New features + +1. **Alpha transparency effects** + + This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: + + - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. + - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. + - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. + + Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. + +2. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType`enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +3. **1v1 video call scenario** + + This version adds `ApplicationScenario1v1`(1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. + +#### Improvements + +1. **Adaptive hardware decoding support (Android)** + + This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. + +2. **Facial region beautification** + + To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. + +3. **Other improvements** + + This version also includes the following improvements: + + - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. + - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. + - Deprecates redundant enumeration values `ClientRoleChangeFailedRequestTimeOut` and `ClientRoleChangeFailedConnectionFailed` in `ClientRoleChangeFailedReason`. + +#### Issues fixed + +This release fixed the following issues: + +- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS) +- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS) +- After the sender called `startDirectCdnStreaming` to start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS) +- Audio playback failed when pushing external audio data using `pushAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. + ## v4.3.2 This version was released on May x, 20xx. From 2423f847f13ec100ae1b33d89db347f9bb94f4ad Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 23 Aug 2024 15:03:15 +0800 Subject: [PATCH 016/354] Update release_unity_ng.md --- .../en-US/framework/release_unity_ng.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md index 028412ca324..3a9e07977c3 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md @@ -8,6 +8,84 @@ On Android 14 devices (such as OnePlus 11), screen sharing may not be available AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v4.4.0 + +This version was released on August x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | -------------------- | ------------------------------- | + | `onExtensionEvent` | `OnExtensionEventWithContext` | + | `onExtensionStarted` | `OnExtensionStartedWithContext` | + | `onExtensionStopped` | `OnExtensionStoppedWithContext` | + | `onExtensionError` | `OnExtensionErrorWithContext` | + +2. This version renames the following members in `ExternalVideoFrame`: + +- `d3d11_texture_2d` is renamed to `d3d11Texture2d`. +- `texture_slice_index` is renamed to `textureSliceIndex`. +- `metadata_buffer` is renamed to `metadataBuffer`. +- `metadata_size` is renamed to `metadataSize`. + +#### New features + +1. **Alpha transparency effects** + + This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: + + - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. + - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. + - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. + + Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `SetVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. + +2. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `EnableVoiceAITuner` method and passing in the sound effect types supported in the `VOICE_AI_TUNER_TYPE` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +3. **1v1 video call scenario** + + This version adds `APPLICATION_SCENARIO_1V1` (1v1 video call) in `VIDEO_APPLICATION_SCENARIO_TYPE`. You can call `SetVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. + +#### Improvements + +1. **Adaptive hardware decoding support (Android, Windows)** + + This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. + +2. **Rendering performance enhancement (Windows)** + + DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities. + +3. **Facial region beautification** + + To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. + +4. **Other improvements** + + This version also includes the following improvements: + + - Optimizes transmission strategy: calling `EnableInstantMediaRendering` no longer impacts the security of the transmission link. + - The `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED` enumerator is added in `OnLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. (Windows, macOS) + - Optimizes the video link for window sharing, reducing CPU usage. (macOS) + - Improves echo cancellation for screen sharing scenarios. + - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. + - Deprecates redundant enumeration values `CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUT` and `CLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED` in `CLIENT_ROLE_CHANGE_FAILED_REASON`. + +#### Issues fixed + +This release fixed the following issues: + +- Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS) +- Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS) +- After the sender called `StartDirectCdnStreaming` to start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS) +- Audio playback failed when pushing external audio data using `PushAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. + ## v4.3.2 This version was released on May x, 20xx. From b1f4ee5187ac9cf8dc7fc27ffccaaf1fd2c19cd7 Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 23 Aug 2024 15:44:43 +0800 Subject: [PATCH 017/354] Update keys-rtc-ng-api-unity.ditamap --- dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 8480f2f4bbc..5abe2bdf949 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -4597,7 +4597,7 @@ - SendMetaData + SendMetadata From 938a3e2a85701b384bebcee82e19e6fc7128bfae Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 23 Aug 2024 15:47:51 +0800 Subject: [PATCH 018/354] Update keys-rtc-ng-api-unity.ditamap --- dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 325a4dc2da1..4a5fde373e0 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -4597,7 +4597,7 @@ - SendMetaData + SendMetadata From 0688425dfc59ccee473748f579e06e3da3642205 Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Fri, 23 Aug 2024 07:48:22 +0000 Subject: [PATCH 019/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 325a4dc2da1..4a5fde373e0 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -4597,7 +4597,7 @@ - SendMetaData + SendMetadata From 3cf6612672b505c4e5ca87f9900f24f2990c2b08 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 23 Aug 2024 15:48:29 +0800 Subject: [PATCH 020/354] RN/Electron: remove alpha buffer --- .../en-US/framework/release_electron_ng.md | 14 ++------------ .../release-notes/en-US/framework/release_rn_ng.md | 14 ++------------ 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md index 49643e81553..27d65e4a375 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md @@ -24,21 +24,11 @@ This version includes optimizations to some features, including changes to SDK b #### New features -1. **Alpha transparency effects** - - This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: - - - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. - - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. - - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. - - Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. - -2. **Voice AI tuner** +1. **Voice AI tuner** This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType`enum to achieve effects like deep voice, cute voice, husky singing voice, etc. -3. **1v1 video call scenario** +2. **1v1 video call scenario** This version adds `ApplicationScenario1v1`(1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md index 9180442b02f..0060c74aa54 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md @@ -34,21 +34,11 @@ This version includes optimizations to some features, including changes to SDK b #### New features -1. **Alpha transparency effects** - - This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: - - - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. - - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. - - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. - - Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. - -2. **Voice AI tuner** +1. **Voice AI tuner** This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType`enum to achieve effects like deep voice, cute voice, husky singing voice, etc. -3. **1v1 video call scenario** +2. **1v1 video call scenario** This version adds `ApplicationScenario1v1`(1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. From 1b7e7d34e5f2507c143a0c73656449f923480b68 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:29:13 +0800 Subject: [PATCH 021/354] 1 --- ...venthandler_onaudiomixingstatechanged.dita | 10 +++--- .../config/keys-rtc-ng-api-harmony.ditamap | 32 +++++++++++++------ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita index c39f8a9ce20..828c4a3af2f 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita @@ -42,8 +42,8 @@ reasonCode:(AgoraAudioMixingReasonCode)reasonCode; state - 音乐文件播放状态。详见 -

+ 音乐文件播放状态。详见 +

  • (710): 音乐文件正常播放。
  • (711): 音乐文件暂停播放。
  • @@ -56,9 +56,9 @@ reasonCode:(AgoraAudioMixingReasonCode)reasonCode; reasonCode - reason - 错误码。详见 -

    + reason + 错误码。详见 +

    • (0): 正常。
    • (701): 音乐文件打开出错。
    • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index ad17b13d223..d84bda45962 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3845,7 +3845,7 @@ - + onAudioPublishStateChanged @@ -3861,7 +3861,7 @@ - + onAudioSubscribeStateChanged @@ -4177,7 +4177,7 @@ - + onChannelMediaRelayStateChanged @@ -6228,6 +6228,13 @@ + + + + AudioMixingReason + + + @@ -6277,45 +6284,52 @@ + + + + AudioMixingState + + + - AUDIO_MIXING_STATE_PLAYING + PLAYING - AUDIO_MIXING_STATE_PAUSED + PAUSED - AUDIO_MIXING_STATE_STOPPED + STOPPED - AUDIO_MIXING_STATE_FAILED + FAILED - AUDIO_MIXING_STATE_COMPLETED + COMPLETED - AUDIO_MIXING_STATE_ALL_LOOPS_COMPLETED + ALL_LOOPS_COMPLETED From 902d64da525c346f77f752ef9f31a9a584c9462e Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:32:49 +0800 Subject: [PATCH 022/354] 1 --- .../release-notes/en-US/framework/release_electron_ng.md | 2 +- .../RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md | 2 +- .../RTC 4.x/release-notes/en-US/framework/release_unity_ng.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md index 27d65e4a375..6223d4c2282 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md @@ -51,7 +51,7 @@ This version includes optimizations to some features, including changes to SDK b This version also includes the following improvements: - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. - - The ``enumerator is added in `onLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. + - The ``enumerator is added in `onLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. - Optimizes the video link for window sharing, reducing CPU usage. (macOS) - Improves echo cancellation for screen sharing scenarios. - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md index 2aa7fe08726..3085667681c 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md @@ -57,7 +57,7 @@ This version includes optimizations to some features, including changes to SDK b This version also includes the following improvements: - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. - - The `localVideoStreamReasonScreenCaptureDisplayDisconnected` enumerator is added in `onLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. (Windows, macOS) + - The `localVideoStreamReasonScreenCaptureDisplayDisconnected` enumerator is added in `onLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. (Windows, macOS) - Optimizes the video link for window sharing, reducing CPU usage. (macOS) - Improves echo cancellation for screen sharing scenarios. (Windows) - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md index 3a9e07977c3..fe8fee87ef3 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md @@ -71,7 +71,7 @@ This version includes optimizations to some features, including changes to SDK b This version also includes the following improvements: - Optimizes transmission strategy: calling `EnableInstantMediaRendering` no longer impacts the security of the transmission link. - - The `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED` enumerator is added in `OnLocalVideoStateChanged` callback , indicating that the display used for screen capture has been disconnected. (Windows, macOS) + - The `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED` enumerator is added in `OnLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. (Windows, macOS) - Optimizes the video link for window sharing, reducing CPU usage. (macOS) - Improves echo cancellation for screen sharing scenarios. - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. From fc03843734235b60924a9c1efe21815dc210b1c1 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 23 Aug 2024 16:49:50 +0800 Subject: [PATCH 023/354] recover RN alpha effect --- .../release-notes/en-US/framework/release_rn_ng.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md index 0060c74aa54..9180442b02f 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md @@ -34,11 +34,21 @@ This version includes optimizations to some features, including changes to SDK b #### New features -1. **Voice AI tuner** +1. **Alpha transparency effects** + + This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: + + - `VideoFrame` and `ExternalVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. + - `ExternalVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. + - `VideoFrame` and `ExternalVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. + + Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. + +2. **Voice AI tuner** This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType`enum to achieve effects like deep voice, cute voice, husky singing voice, etc. -2. **1v1 video call scenario** +3. **1v1 video call scenario** This version adds `ApplicationScenario1v1`(1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. From f0db5f136ff9db104b0cf3f2f939d0c3860dbe36 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:54:11 +0800 Subject: [PATCH 024/354] 1 --- .../API/callback_irtcengineeventhandler_onerror.dita | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita index 1d66fae9583..2ed1c8a0f1a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita @@ -42,14 +42,14 @@ errorCode - err + err 错误码。详见 msg 错误描述。 - + err 错误码。 diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index d84bda45962..ef36781589f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3717,7 +3717,7 @@ - + onUserMuteAudio @@ -3759,7 +3759,7 @@ - + onTokenPrivilegeWillExpire @@ -3838,7 +3838,7 @@ - + onFirstLocalVideoFrame @@ -3875,7 +3875,7 @@ - + onFirstRemoteVideoFrame @@ -3910,7 +3910,7 @@ - + onUserMuteVideo @@ -3924,7 +3924,7 @@ - + onVideoSubscribeStateChanged From ec1781a3d02e5353f140d307a4cd646386197405 Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 23 Aug 2024 18:21:55 +0800 Subject: [PATCH 025/354] + --- ...iaplayer_addblueprintcallbackexecutor.dita | 46 +++++++++++++++ ...tcengine_addblueprintcallbackexecutor.dita | 46 +++++++++++++++ ...ngine_clearalleventhandlercbexecutors.dita | 38 +++++++++++++ .../API/api_irtcengine_geteventhandler.dita | 57 +++++++++++++++++++ ...tcengine_getmediaplayersourceobserver.dita | 41 +++++++++++++ ...gineex_addblueprintcallbackexecutorex.dita | 46 +++++++++++++++ dita/RTC-NG/RTC_NG_API_Blueprint.ditamap | 8 ++- .../config/keys-rtc-ng-api-blueprint.ditamap | 44 +++++++++++++- .../config/relations-rtc-ng-api.ditamap | 2 +- 9 files changed, 325 insertions(+), 3 deletions(-) create mode 100644 dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_geteventhandler.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita create mode 100644 dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita diff --git a/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita b/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita new file mode 100644 index 00000000000..5b571e89bab --- /dev/null +++ b/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita @@ -0,0 +1,46 @@ + + + + <ph keyref="AddBlueprintCallbackExecutor_IMediaPlayer" /> + 添加一个蓝图回调执行器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintCallable, Category = "Agora|Event") +void AddBlueprintCallbackExecutor(UAgoraBPuIMediaPlayerSourceObserverCBExecutor* Executor); + + + +

      +
      +
      +

      获取事件处理器后,你可以调用该方法绑定回调执行器,用于执行 接口类下的相关回调。

      +
      +
      + 调用时机 +

      调用 获取事件处理器后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      + 参数 + + + Executor + 指向 UAgoraBPuIMediaPlayerSourceObserverCBExecutor 类型的指针,用于执行 接口类下的回调逻辑。 + +
      +
      diff --git a/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita b/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita new file mode 100644 index 00000000000..837dc912bce --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita @@ -0,0 +1,46 @@ + + + + <ph keyref="AddBlueprintCallbackExecutor" /> + 添加一个蓝图回调执行器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintCallable, Category = "Agora|Event") +void AddBlueprintCallbackExecutor(UAgoraBPuIRtcEngineEventHandlerCBExecutor* Executor); + + + +

      +
      +
      +

      获取事件处理器后,你可以调用该方法绑定回调执行器,用于执行 接口类下的相关回调。

      +
      +
      + 调用时机 +

      调用 获取事件处理器后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      + 参数 + + + Executor + 指向 UAgoraBPuIRtcEngineEventHandlerCBExecutor 类型的指针,用于执行 接口类下的回调逻辑。 + +
      +
      diff --git a/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita b/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita new file mode 100644 index 00000000000..1fa9cfd53d0 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita @@ -0,0 +1,38 @@ + + + + <ph keyref="ClearAllEventHandlerCBExecutors" /> + 清除所有已添加的回调执行器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") +void ClearAllEventHandlerCBExecutors(); + + + +

      +
      +
      +

      调用该方法后,所有回调执行器将被移除。如果需要继续处理事件回调,需要重新添加回调执行器。

      +
      +
      + 调用时机 +

      调用 添加回调执行器后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      diff --git a/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita b/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita new file mode 100644 index 00000000000..a09ae63e688 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="GetEventHandler" /> + 获取事件处理器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintPure, Category = "Agora|IRtcEngine") +void GetEventHandler(EAgoraBPuEventHandlerType& HandlerType, UAgoraBPuIRtcEngineEventHandler*& EventHandler, UAgoraBPuIRtcEngineEventHandlerEx* & EventHandlerEx); + + + +

      +
      +
      +

      调用该方法获取事件处理器后,你可以调用 绑定对应的回调执行器。

      +
      +
      + 调用时机 +

      调用 后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      + 参数 + + + HandlerType + 输出参数,事件处理器类型。
        +
      • 1: EventHandler。
      • +
      • 2: EventHandlerEx。
      +
      +
      + + EventHandler + 输出参数,返回一个指向 UAgoraBPuIRtcEngineEventHandler 事件处理器的指针。 + + + EventHandlerEx + 输出参数,返回一个指向 UAgoraBPuIRtcEngineEventHandlerEx 事件处理器的指针。 + +
      +
      diff --git a/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita b/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita new file mode 100644 index 00000000000..711e84da8e3 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita @@ -0,0 +1,41 @@ + + + + <ph keyref="GetMediaPlayerSourceObserver" /> + 获取事件处理器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintPure, Category = "Agora|IRtcEngine") +UAgoraBPuIMediaPlayerSourceObserver* GetMediaPlayerSourceObserver(); + + + +

      +
      +
      +

      调用该方法获取事件处理器后,你可以调用 绑定对应的回调执行器。

      +
      +
      + 调用时机 +

      调用 后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      + <ph keyref="return-section-title"/> +

      返回一个指向 UAgoraBPuIMediaPlayerSourceObserver 事件处理器的指针。

      +
      diff --git a/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita b/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita new file mode 100644 index 00000000000..b40c218e57a --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita @@ -0,0 +1,46 @@ + + + + <ph keyref="AddBlueprintCallbackExecutorEx" /> + 添加一个蓝图回调执行器。 + + + + + + + + +
      +

      + + + + + UFUNCTION(BlueprintCallable, Category = "Agora|Event") +void AddBlueprintCallbackExecutorEx(UAgoraBPuIRtcEngineEventHandlerExCBExecutor* Executor); + + + +

      +
      +
      +

      获取事件处理器后,你可以调用该方法绑定回调执行器,用于执行 IRtcEngineEventHandlerEx 接口类下的相关回调。

      +
      +
      + 调用时机 +

      调用 获取事件处理器后。

      +
      +
      + 调用限制 +

      无。

      +
      +
      + 参数 + + + Executor + 指向 UAgoraBPuIRtcEngineEventHandlerExCBExecutor 类型的指针,用于执行 IRtcEngineEventHandlerEx 接口类下的回调逻辑。 + +
      +
      diff --git a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap index 562029c73fd..ee09bb5749b 100644 --- a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -53,6 +53,10 @@ + + + + @@ -508,11 +512,13 @@ - + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index ebfb35e9545..f07dddd7182 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -318,6 +318,34 @@
      + + + + GetEventHandler + + + + + + + AddBlueprintCallbackExecutor + + + + + + + AddBlueprintCallbackExecutorEx + + + + + + + ClearAllEventHandlerCBExecutors + + + @@ -719,13 +747,27 @@ - + + + + registerPlayerSourceObserver + + + + GetMediaPlayerSourceObserver + + + + AddBlueprintCallbackExecutor + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 193d2a9ca2c..4c40d818993 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2777,7 +2777,7 @@ - + From 7855a50a982d4050e428a00630616291cb5e7ed1 Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 23 Aug 2024 23:08:57 +0800 Subject: [PATCH 026/354] fix --- .../API/api_imediaplayer_addblueprintcallbackexecutor.dita | 1 + dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita | 1 + .../API/api_irtcengine_clearalleventhandlercbexecutors.dita | 1 + dita/RTC-NG/API/api_irtcengine_geteventhandler.dita | 1 + dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita | 1 + .../API/api_irtcengineex_addblueprintcallbackexecutorex.dita | 1 + 6 files changed, 6 insertions(+) diff --git a/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita b/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita index 5b571e89bab..ef6fae8a58a 100644 --- a/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita +++ b/dita/RTC-NG/API/api_imediaplayer_addblueprintcallbackexecutor.dita @@ -43,4 +43,5 @@ void AddBlueprintCallbackExecutor(UAgoraBPuIMediaPlayerSourceObserverCBExecutor* 指向 UAgoraBPuIMediaPlayerSourceObserverCBExecutor 类型的指针,用于执行 接口类下的回调逻辑。
+ diff --git a/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita b/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita index 837dc912bce..98c18ada4b3 100644 --- a/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita +++ b/dita/RTC-NG/API/api_irtcengine_addblueprintcallbackexecutor.dita @@ -43,4 +43,5 @@ void AddBlueprintCallbackExecutor(UAgoraBPuIRtcEngineEventHandlerCBExecutor* Exe 指向 UAgoraBPuIRtcEngineEventHandlerCBExecutor 类型的指针,用于执行 接口类下的回调逻辑。
+ diff --git a/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita b/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita index 1fa9cfd53d0..18eb384741f 100644 --- a/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita +++ b/dita/RTC-NG/API/api_irtcengine_clearalleventhandlercbexecutors.dita @@ -35,4 +35,5 @@ void ClearAllEventHandlerCBExecutors(); 调用限制

无。

+ diff --git a/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita b/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita index a09ae63e688..052cc2a3bad 100644 --- a/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita +++ b/dita/RTC-NG/API/api_irtcengine_geteventhandler.dita @@ -54,4 +54,5 @@ void GetEventHandler(EAgoraBPuEventHandlerType& HandlerType, UAgoraBPuIRtcEn 输出参数,返回一个指向 UAgoraBPuIRtcEngineEventHandlerEx 事件处理器的指针。
+ diff --git a/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita b/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita index 711e84da8e3..8f176504eee 100644 --- a/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita +++ b/dita/RTC-NG/API/api_irtcengine_getmediaplayersourceobserver.dita @@ -38,4 +38,5 @@ UAgoraBPuIMediaPlayerSourceObserver* GetMediaPlayerSourceObserver();
<ph keyref="return-section-title"/>

返回一个指向 UAgoraBPuIMediaPlayerSourceObserver 事件处理器的指针。

+ diff --git a/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita b/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita index b40c218e57a..8bbda92aef0 100644 --- a/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_addblueprintcallbackexecutorex.dita @@ -43,4 +43,5 @@ void AddBlueprintCallbackExecutorEx(UAgoraBPuIRtcEngineEventHandlerExCBExecutor* 指向 UAgoraBPuIRtcEngineEventHandlerExCBExecutor 类型的指针,用于执行 IRtcEngineEventHandlerEx 接口类下的回调逻辑。
+ From 989be9f62b0e9e4bbe5025c66ad8a819f831da6d Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Mon, 26 Aug 2024 05:55:29 +0000 Subject: [PATCH 027/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-blueprint.ditamap | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index ebfb35e9545..f07dddd7182 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -318,6 +318,34 @@ + + + + GetEventHandler + + + + + + + AddBlueprintCallbackExecutor + + + + + + + AddBlueprintCallbackExecutorEx + + + + + + + ClearAllEventHandlerCBExecutors + + + @@ -719,13 +747,27 @@ - + + + + registerPlayerSourceObserver + + + + GetMediaPlayerSourceObserver + + + + AddBlueprintCallbackExecutor + + + From 601df582a64a0fd3c59aa922667f1ba57ca62d26 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 26 Aug 2024 15:08:37 +0800 Subject: [PATCH 028/354] + --- .../framework/img/rtc/ue-bp-release440-01.png | Bin 0 -> 58984 bytes .../framework/img/rtc/ue-bp-release440-02.png | Bin 0 -> 63327 bytes .../framework/img/rtc/ue-bp-release440-03.png | Bin 0 -> 125991 bytes .../framework/img/rtc/ue-bp-release440-04.png | Bin 0 -> 95007 bytes .../framework/img/rtc/ue-bp-release440-05.png | Bin 0 -> 19379 bytes .../en-US/framework/release_bluerprint_ng.md | 131 ++++++++++++++++++ .../en-US/framework/release_unreal_ng.md | 123 ++++++++++++++++ 7 files changed, 254 insertions(+) create mode 100755 markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-01.png create mode 100755 markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-02.png create mode 100755 markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-03.png create mode 100755 markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-04.png create mode 100755 markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-05.png diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-01.png b/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-01.png new file mode 100755 index 0000000000000000000000000000000000000000..eb9243b33a72c4fc5c0c1756792db6ef26b79e9f GIT binary patch literal 58984 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 z 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 literal 0 HcmV?d00001 diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-04.png b/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-04.png new file mode 100755 index 0000000000000000000000000000000000000000..6ef339d33c1eb2db0173d95ee7494c6939a7180c GIT binary patch literal 95007 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%0D%<*OYPeXwSjIt$`+W&#alBOv8 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

u=Qm^wrnaaN4g7crEn*+MsmV>HI5Q z^B+2(tK1b`b3IkXA^SPH8+I5${!Q2`;|@O@vGG?iFO*EY=r-<73Z81pd(v`WzvI-K znVO6t39IirsM?|~YwAjT70a1lmCr?E&I+WJR{!*}v)!KLc=RjL{cf_l|3D9(t65D) zgZVBvBh@Zmu?bYk*6_zwB-LPMqO1Wno_${gm4h-#2`5M0T;!S!6qy2>>G=bH{o_S- zwB#T1lpK{i=KZtD%EDHiZq&28)dORCMi9PYSN=Q#V*>SYdqg5weT;|wtO~}8)taHhUeh9JFof;Cw z)(`Ck8yOpqjCS%dJs*e+&5@jM3FqiXXYEkL&oxs}K-5~~{o>|?0jjG;O_7U1ce@Wz z&s*v0XvNIAJtEl~%~(LOo>dS;lHj^_LGGOMDZ+>E=^CMVn>`Ma2=?yBW*!uD5D2z> z@h+U%-WQ3y(A8P~j*iVSL81Lk+_BWt@u;X%mi#P|_+(Ema;Le@l8_G?)Ie(CV-kvQ zBOdU|#0?o}y1Bo5R!c4c95B%}VuCuW`;HPJ?e2v?cJ5ZHmE~h30L9dh-(Vj?UOpr1 zudAYf^``1*o6;Cu>?uDwF&ka>9>1V&xxmC=Wg16DEaCG&A(HfIu=ionVC;v*&lI-n zy`~4oBy;l5Q8*QXTFquP%?O3xIn+~mv`@UGC6Lb!!B)8bC3h%hbAR!^H+23qOy~4B z-`Q7V`xnEio&U~8bomo`N4I3||P?U)su{#RZ(M1 zJfh+$Y01is7wVg2p!gQ-Pk|#P?V$TFkd!Y+wpffq(s!T@E6z8uv?--bVq(Fxq4a@G z;h#6&(ec!LV6}9TCArxBB72Y1u481wjd!@J>+pGr$tBv^KBuM`Z}mYM$Fd zdv{FEpNP~DJwZ6b9?9)Ty$aXd{kopKgv>(^QOl*bZHISd9w$c0c3(@+kT%rp-$#QI zc~PD9#`uN+k6YAGk>G*X>Ci7Tf7Q8@NCrEKc?$`6uMCFT)-%&BsQ9Hrca;!vMU7G8ejq< z!AUbW->aaWhf69QPP_Z4g#XmlYXV{2Y>|$^oo0!?NagqRqN$(ehUbQRyQ=t&GlzDe zlH`e2e^JZCT$qM*O^$Yks}o`2yhd(PR%!~nPO;%FgI4T;o6y;KVg6y~c4z zce=syqs)4Gse1a=AslKzp$ezNURG+x+=S;srPlc`YI?BwpRQ%QbF_-pZr--^OZ}UB zkL}Dl#y_%MojyyyWvUIFqFngQ?|%YC!KbbZK`oyRxE4+#aT0MfXf=2{I^zsjP={aC z5elT*%}Z(vdZse;fo&Pz)($7y88Mv(sIv`f7JDdYO2+79Yk22hHkqhmJa3yYoCup; zF&W!h-xc*=0iX8|(~qw`NNk;vq`7R0yH2E&fKF~r=2}rjt%%*oG|6|0lsEryQihXX z)ZY{qc7&N*bY$P+P`phdHFib4H-?_;cr86zs+PF8l0N_C;4r@zd54#A8Fk<16!?gP z0%B5r)8%hYo+aupAaQ+4wE_$@f0YH^Fm%SEms(Ez{A5S1m_Yb2zudmHoQRX7*-`4{ zKF_w>*@w772-YwNF>`-cIVgR9QaKnKklFIF8pr`?IlN;(Ul2R6SuFbYX3b7w2a4F6 zu+=~L+JD9|rf{>DdZ;Gu>=ER5auGlGbQF%$C6GuL=oZ=nP%9ed{iYBv)gDD#O_3>> zNEZ+w5)THbjLF{A*$9}%6BJXJSkJ#O!flI0CD+LeUcIDYtC zE0+->p`(57q^B&HO2=M=2Fr~p+C?$NypJ|(-(9_45OsTPqc^KLf$B`e!)BUNxXzlj zEZlYbP8VNTB|dK6^}|VoP~E7RCR(%`TSY|$aJbSb79LiutVoRo>wQL{p5;8;WKdld z;7_;lHG@h1z;nK7UyN$E`b6TE>D%| zT>B($|`r-j(R5DF~_i`$W!4pF!T4FOR(MU zx3A!F@Qbe&(SiLt&NcYs?-W2vakeJt4fBk`m8H*1#*WvgliQ^HJ%(S^ z!1_4FS|OgX9sESTuKO3fy9zat4?Z^+1R#Xh(!=ui<|;&s-Or(3_dnWY<>X_lAx_Vw z47BJuE2-oH&fUT>6hMth&YXACT5?^lL{)@X#0QXuasEA>E(nj(!!puTjI3?Bc4>iU_07Zd+BYK(8ot z*G2+1hi@0UF0mm^$bayVtH~}H=1nN~%y}J+L@8v8bO)Sxw5SY5b|SQ{6oQO73Eo@2 zY_8R5aEYhsf>4c>i@U6xK<$^kL`w~Rl>N9kNLDNeKQEH!6oUWGUzzIGkmP=N$9dgR zCg44Uee=6vIiR9pC7rMDxewWvcAdls^MpBIOtZ=0lIEKT7`wCe?oA#J{QOz)JSs~s zf+lcooCm+3A|k>1}O{ld;ZCts6q}#FPxAK*~4h+shY3hF%CBd z9hL@8)#Orh``JodF0#AB#&LLSw#bt1Z#_$_CYstruPs=dp9w#Gw#*|J957MV&D*9n z=Upfvrv*rPH2cUA3`dSL~}sMh)~{g z0uyu{5CzlX&eM|P`b9rY{IMtUrOh?yUkWBu$R*hVh?bRpQNDqtFU(kM?-c6Hibwqp`h(lM=3N2iv~A9~b+z?XzUw$p8Q zHN009Gy*P2QY#EphI|DH)$)*vo5L@bKL?RMT4JEY`RQDP^pL0<|5tuzCuXJr{VFN$ zg$ni;&@A_xPzNc8Hfj^6W$rAkimY@YTeRWeK7iJb)_QE@7~XrV2tspD7`W9f-qR3* zrVOz|chRhQ)T62fn4a<6_J^Xg2HFc1`N0)gvMC9vj8RE24IbAn5N*}GtEbxB+AJL2 zktnY(((}{}X!#7x;*0tKq!~iOR8%U>*(iJ$Q8an2I^mN>tZ_vT`8)uh-yN{~jgNgs z5z~=|t?UMpLpyvMzA2Of?WojxjI*Uy*aUn21MRKK?mH0Kj^(0H6Cy$yVmCP&tnXjz zvNi2F)oDVWCZ=uP=dvMbjWYZu;Y)d2S$;6^on)()k(iTQBU>a2nDZu#wvf8{ct>3P zl8E=q#C>-|OUj~O&kK_4^k~<5p@>JZ;_aIsN_0N7<&b9zrn^i^9;cjyP*7Ig`H0bL zbe?L_Sx=ZXS>uUl>yNk~C3jK~prI@2jv-=B;w?fg3LVDpPP=zsT&X+PcK`Xu9Ya}8 zTDOJX3FVUkNF$MImk$~thY*w?rM1Skoo@Gj`66~bz+AtHsqVv^L}-Goawc1lX%>Lk z>W`)ZS)&q8;_hh0sGjP@3YITyXSU154T9Z4_@m;XFL3d5&pcR z9EGE(QdgCNX~=y&W8wn7>nG7D{L8s%L~~0M5-EgMWq(!jx-F2-zhpp9AVoV_agPub zYa1SHuxp@${MbwMWgI7q?~}p^Yr)Uv>>|gU4eU%5oGecGL}XZuYITp$H5Q64C<^#8W z=UXwDd9EvBRE1B*XvtgB_7TbL@uFxWC2A~PASEl%M-0$M_Kv##Bkp_O7pXU|J?QeK zTSdnL>#UpI`3;@`o{Ob?N*?7XKboL)WBE?2alh(z43-<2- zwcW=pf+jY`*1g%=N+H0zK?t^r|A`1<6LB@NKrM8n_q4uJKqrqoR@jmu%CEWI`563Wpdg^ACm0gWR8aqXP9ifb8DCH{4uV=DBR;M_A6G|-iyT}cs zcYbN%$$hYt`{&@(pN!9A2q?eJgc4KW2x{v4cX+M2C#T^|l66lYD1Xl=Ep7Hy16?%M|~o(WbT` zbWRQ$-#662qi$00UA7f6-UTn#`ES}zJ}{-~ z`xMRhB* z7A8Bm;GuT6{as%l_YGaa6^q;tSy8(0*x(;|li!~crGkz0!+ff3FP-O?Rvv{)T%k}| z?F5_{Mqwj_y*nk7{2ZaQzatL#uhuQfGh-I}5@OBhiJP4C`gwT@>tKC#%>~?_t#Ad3 zOOh!#!PMVUW@z2Sm9AREA|T>zWF>x?{p!B{oj}I!wEcF9;C_c3JMf~0f@m|d9}P|H zu@;x-?tRm7yBS67+<_-&B1*J+NB1wQwvX8f3IHd-r*Z`tYK>1<|2zmIm)p~x-;#yp zXuzJ07F?T(DkLpG*b%x=x3x(`G{^ZM5iBc6m;-vtVlq06pIMqsv|CSkzZ2O@mv&^t zaHYjM$>plDUbx5vte4;zi4#Z+bI0NB>Ujp(Xo5CbvQmpZwrLA3b@Td!7rp#xj!|P9 zvBjeEgKWYGjc@MuK9R?LOtDSoq;bt@p*t{O`Q;&WvNv6(<*V8Ob|BRJslM;r{$kO^a|{2@ zf2`lFpo{RWCvWUF&>DW!hDKR=IdDE?sD7>Q1OLe44_-S!)o>|*xgMXvbmaz_;;gaI zr$3_(mL}wFRlZEFsm|8UC~#MK3{kuGQ7E)d9S3;x0xy_@`xhVLYX3y8guibN_XrW{ zXNp{Tm>|5B-1UJH8`+Bg1vQ@L|C5PE-9{ersm0Lgk*_4~e)o-5ESY8FET;RzP208% zn#Y~GyJEM5oA1N6796U##Nu(E1~X6rMNbNATjg-Jzgf%Ro|!9#j8*A%n4N_@#)-h^i8I%XP~f(&e9;uBM@3BX=PZa^j}9p8HN>9fwhgjmeJS=Ti#Efj9pz8& zTrj)3s-`M6FRjSo(0f3h*Qh>cxLE5HFPmB;k9HI=orZQgcDEU7fy)eRS}K(m9aT8& z?Ixno-4gr{_Ob|?;OlUE8;6R%neft##d6vh4yRR~5>M06Onq2He12SmdCB#lN>)@D zBX){;UVsby8O3!`gzkKnC$@*=fk^()BAi2G;itfJ<<23T5Dyv-th~;pPr+N~Q_&TB zJ+QQivzp4h&Viy*JbB$tY+d8|w91LzF08)!=dFO?LlF^l=KUC*b^_uL!M3K?@6n zlh9;HoC2+}Ri1>2|GiV>U%jOaCL|CXxUkuxO}zHyhiwkz3tiA1Sj&(NIv2Tdj+)W| z7DckE6>`>eBz0X>xzuH%Nm~KPf=Am`Z**B{sZy!{x)BLV#AbzE0K6gRAo=NKZ0iS9 z<$Sp=E?~r6#*lU(GY#9d>)`VCy6LD3atlXmRsM379z*OU;{y~HY6cb%!TT$il=CwC zi|sj0txVbQXvx+u=`_tW?>2fr(Iyz{(nYJ6IEB=X)<=$;#C0UpGU0>0D8qPkd;8sJ z7EbldzEsV~!uAqI%@vx&QpP|IIW~01-Z-6X(Ein&ATVnz>Y%@x5)yN;bC!Ghov(%Ql*c9mg2-F1m@JT$_=*Q80xcn*?9C5bs;t zPBh|0;rZ!Y&K5bhpBfdPRlkw}5qjl%El1$I3IsVjPP0ENuc+9I48_soz#I*}xE6+) z1$+-VA-SS`{!LmwcsJ(FXs#-6X9`d26>-b zN`~r3oo&a$t>fj3`c4aL-Nz@IisVEEk)yEM`lTamSdK*XP&8gNbcL5FB3rI&+T4V8 zm&r`S$27Gu+^f!G6lE!z{)s97@tsvwj9XV~f~&NN@jLo`V4tKm#h00j3Jy=Ypw!=e zpLtVaI2&<|-WS@iomCPFy`ChBT?oQSnbiVuAx$EFHHX)xFu>l^ZI~+TPsJ-Cn&Bo- zsy>FkS^PL0X|Z4ms{H5YB0-I^>@;s*QuTapU;v27848hvN9Jt z>@2#5SD4k&ZtiYBcP`k~9dW6JVtBgm+|2nzoDTs-XeCkDT&>tE#K5;(M%M3?Jsr=m zto{5%ySYjbLFZBR_ zNZs#gobO2eNq6qP_iDS|&bS_UKWplaH&#%a#b^CA_Qjhp`q)oS?=pNC#I4bu6EFX#Je0&2m7#xiE6MDK`|9Hr`1V0|(UAUG zwbq+^^kUmAb6s+u-QQRqkjGNwGdSrafDUxlaZ=|N6cEsqwZ;$>6gm-sn%ceOg#`I8 zy6lx#RBxn8R)K%7Nq3puZ5db;H#*F6I01eJX65}YCDFZh6YTyvx&B*9lDZEeyKQ!? zP0-2ge{u~hf>OWmn3W4KR3fo9QPZdV9Q)?s7p`i)AQtYMGBiX;CmBb@o)sWTf3Z6e zoE81`kLxh>3lu6q-oNfM1)_z~e9g)l`799dv1OUcFJC6V*Ef5Q8#w}ZWX zX?b~6&ZC&_H^yiXv=j=RQbBMpCs^;N^zX|N+WqKko=8T2yu;hvZrwzTLGEG#5*LDn za@p>+67G^sNpQWs$R2>>>iruV`tKRA0;UPp6|`Ot?UVIE@||Fy?Pr-1|Eda;SLv8< z0lV0cuZOn@yXXw3P686A|JLQ<8h<49;xpAlKYm&QcQ z{`AZXbm(p6?`atQ$(Kb~K6$A*FF_~1RlE*5F{|GQ_Qkg!C6Rg&+s+=EW5c>VRG*+j zJRnJZgK4vg%KP<84Yl0k8{rTX;;Pwe6iImdv=iUgU&hBoh;i~OCp9&-(VAmrMMc5F zg0YwA2AGNvK(}re@{-`p7cJ5iqh9|i_X41zg|#2Q^wf1L<=4+K1`Ydj3}}N`@KS=^ ztq&{ZWO!sVmece^whq5M&F!-6jgED^v%p&N$Yw>E4Mc$Xre6&0@;kgmck=6?pv(Q2 zf>-jgB}G5gq~-s|1MU0uWMkuEJS|WTjdzs(o}f=^4v;!v>bd3-V?lDV9OH_xVDyl3 z;G8${jDq>%+^txi3fLHVZSJJ8W89$h)`!`t^`++|*07Kp`JLav?@CN_7vkA%Bd59n3ozBzG5LwDS zyD5By%J(73M1BC$3wy;)27Fs)Od&$^SRPDID}O`FXKM+Lcq!3^>LtwL)h5l(MVTEm z!|cR(3yEcExeBUiMMM2@@Pqb%c+Xc!wH67x3jBL7R{+aNf{~h%SIK*8XCWl5L`sJZ z*;LR0j|$N$(oXq2(i^QG*0UDs0MI{QhKh_6d64|AekjR{AOOCkjkHN}|mAse}eXAaLBCj#$JA@2jsry+|Ml>@2Vhp#IYd%Q5)DJ+cZ ze1?o>ZtYhZLth}xAH#aKPhRA#;CWoM)mXJL`@0ab-d?=v({|H_dituOl+QHt^`TWF zTCwjAX6y8&)61W=!I4956oj~vexI2*lVhoFMyY9}B#$P=$YPq1Mz${i#Q=7RzIUT5 z@ReM?JCe`P_Rc%i>G4+HBGSBT#AUU(WYgMn-g@}NR02>^0N%f@FoC*QUiCnIQzuef|mQRMxPI|wA~BH6O( zNYgX%2!uh9)n8zcn^s;(N;L38whWDnPqOE^nd@d&+`FN4=}PDQH@a2kcRfxQ{ZO{# zv$vY;))nU;uE`dDY;O!WI|%A*Qd5OHtN(*P%8E_={yNggDS>SrO8>2g_`8|7uE|rh zy7~C?c@kUx)=Utp1FxI5t>OU|yvDu^Un4nl;AJ?f;XpnK>*@*;65$lsS(k;}eI23@ zA~(b5Jk;k+EcSx4aqlv_!8pPtGPSSc632_m|3PYOJhmJplKswfPHIm2gy~tST$$|m zPw_dGJ{aWiZGl^_z3bQ$?uJl@{A^GbO+@iZ%w4bb5U$a))Rza?)fr{aFhfUY9#j-U zv?ws)mAv%A&(DMJ-Kyu6b~imCWJ`^l7ky-OW{%humjZf9Q0U-Ti`Tc0bEM1tR2JmzlVTXjkIMLUX1cat?TfI}dr?!6l;VeqGtVbni<@ zoyW|p7mm7TKeS9uRn1OBpq$K1FuHZqgP%DE_Dcjjh~G;4IH8oM&AhoZ{!IVG{5lv< zGA-Tav$SBC=yban|?r_pZfg z4W(;oA<9SY{mC^SbgWN)_rxRK*=Trxykq))YlIE`TI+ zvxnLaU_+;gONacI4vO_c;X#(OH4Idf9p(hLEr@~K1^^LO-+d6D7XmPacNwAG7v@*h z)N&iWK>0f}QRT!m*@xwFG1$rfbL!Z$eWu~O+T;mzD#-$ll@e5>2y)mzalIVMZ;{>G zuMayjzNy`D#pR%n-)t2c<34j7N-azU*ZoBs$2RnLgMJya{l_uw?>=nvWOTnK`S00I zSJJdkA$(fT?25=|9=Dq-Y+Z!Naf8` z&uE9*XoM3yBf6jOJ^5d;Qi$+bSQz8gfk@Qne!ay9r$_9NY!K?4j7|KaV?gIe!-bgV zL6Kf&+x=rcrs@BI#~8ZJCRn7%SC&c+Umdc9a2qT&*vfUfTBpM&UjQ#2Kx~GN_icHq zX|1RMG`CX6Pr+cShAf7NE%Q5r@uTTvp8riqij3<40}lYzYk&0n*Qfmzb`!gec`V|ZFu6bf4DV9 zS$_xFs|g>-v7q+}>`#*iHU>dX*8cYJ9afF&-gNDmvQh80*NUjRxUUoa5P#9+cC=>C zr7Ha4W=xVTJ$2*82O;~ZtM<;AI(64`*+TJzSBCh`P3nB9;apIbT;#Fn3OAALUr#70 zgI8lkAZuo>99TUxv9dU^mZq)lqjg(U*3wE)Y>BQF8Gd+tztzIujp{)y`epiz^-H*M zHpjOPUG_xxT1UC9PZWJQh$X!|1S&;U?V=0?;}oeB*pSc2zOIbU}OAsuPJP9v;L|?@w)VEW-b*z6_7Y{|cSLwBk!H$3Ep!+;$sfYB1-T)2Jzv`FQ{wnj%?Enoiv=m7iOnUkxWQ1Lz#1HferFk-b^j z${k6Y^oQEV>{7Q#U@1?{S%m2mhevXs%yHU3le75nK*=b|=63=Y85FIa)E9VXZcmV~DHBSN*!uVGs!O**AgxVXcy?d>bHkK4n$s?v!;=fNaEPGg4Z;oak3hv5=Z%Ai@S{m{!`Ksth+48` zWn~RHK@JSgp;{0LtEMB;IooY^do$){_9Qxu;q+;K_igeGC(jz_|RdY4&2~(zxQi+kj(3e*mFZPT= z+s`;@j#hD#7R>|5P<9~BkN$v7l{m$poKs-MFhn{BI3a~qZ7C+U$)ugsLYK93Cwd;Gu*m)l=S%QitBFE z$s<;VAWg5*1YbhxY+J_ZMf-2bVyDRb5lF zGZebDW$udTVbU4cFk<^ASg|fZOR4dk7RFZ=@|Azy+1u5A_nA>wu<^S21qQu&Gy$rC zvbn#Z8yg)R+}%ZqVwvmbhnsiCPOrH(MSnA*zOIo+al%4}=%`#iQkL^}&vlZ7T+XND z`A9J`lJ^9s;Qq+er78cr5n{Agof#Q5rTHRis*@WXj#h3N#b2&h{Iv?x^|Ty3VAe<$ z?h0rwbwUnJIt;n-UB5-xvNmd# zlT-|W!{SbYU|`WcRog-ya^?*jK(Y)=&;j`KUeS#XF)Mim^hyo^;i`1TD|w&P!*i;E zuB&H$cbuw19wD!UIdfLCFaLdN?)0una__;lc&X+`cz6%@yvqHDHO0GZo`0>xqcW_S zbESmOHb;#Y>&Ww8piCTT1gDl_mzvy80{d#dvpr&a)zHh)5NtfS@T}5!n^eo<-Q76k zAPZL0)qV^)nA;r`Tn8In*S!5%Gwc(NLWsi32~u#r#tJlDVM^RJlb)IyW3-Ixhw*N+ z8A=S=s2owu7*P}riDfg8FkT%Nw8SGCK?K^)dloFWeTvS0h$5w}vcV8-D0f`_d9%Ay zGG@XjdlhtQl!-mwdgW!e%bP!;F2i`PZ82z>G+>0bXOHU-ZWwRN*VrR~HO=_}# z)opunDACAD>ZaKY{D0gxdSZQo|MO#&+MCJ>2pPGu}(>1yk{O+ zz@E#&(ASN3wB^6f%;yxcvp%w#VL|YWs+xO**h)z(#QU_!>PXDzGw=z%oR{mSL+s2v zNQof3=0g>wJ;W$c7~akzhq{E=fxT?qq1g%l?y}GjJv^J6u$FvBNhG4UaY;^SbyV$L zcPZUrMasp?)ob)b_o!aZ)jO!=S(hS;GBbTRns!v>JrPlZ?A^HO4%_2H`5Fam%$%&I z9z0zwiY_jKt4_UIdE-+xUZ5bOgACe>7pt9}2Ls{*L_KPXf>~oRvDV2Zrp6U^!)ET4 zL|0=-ULI6Pa+yvcQF9+hhGqs^3hqxmnVOVJUi%{} z;cmpQ8o3`gnVGpiXw|^6EVaMN2%Dq-Q|$Toto>g<{fnXdKmC$PDXpK_la^{W8@$<1 z$SHCDtV*%H>eW=5Ur;BDO8ew5&IhIYI;^g=*-I8_I*=1e)blvZn$lU+5HK4{jU2vh zIOMDGp=jz2P=3&&}^|xYB^BX}z8lHHt_t&pqD_^x{j4^>$6fa+YvO<9Xn)++(r5@7hlqANiKhv$VWpwBz1`+1;`gzS~+XZ+^hDSyOFCw~V(y)lVmE}c9e$U*$!&9iA?TXCE^pn!KfXZj6 z!9_{?xs&3IhTY~w%_41SVaJ_?b+zfrmNm>?nSi4 z{^U}Pm*^?2C)p8soHW2z`KtKDD#7Te<1Ph;Gt#cohDy29sm;m#`N9)X- zaiQmYK!Kv@^*cL$`vqj5(H}PVu>!=tpN!w-CI;R)mhpC;863l+b=YsaZz*nwm7vPL z<}6pCKQ6L=sha)r>l^r;I zR5R9UDxB~PdvTmsH%pN*J{K2^cY6>f@iEY{AV zb*b)d`vFxSJ$2+Apml24V{PwE+2qL z;e8#W+naHDC*RfurOw|8K6oZ_5%J^~>T?@EnK^(=s=f(;hX8+J0dNmaIMiqss*Q`H=tJyLYLC7S&T`4;=j+7)f{DR9)?YVn7!dvJhcUDnbe_e-0gM z*#aWjL0xJ~*-DQ_st|aWURPPE*XC;6>FEr0#QiMhRAacDph=Ju)1P#Q@`kUXU&40bSwHD68@3SuCkglu^6>u#GyDlz04RnK z`uEU?jET<1b(F(JA+BbqWGMRGnjDCj`;{5}C(8mI{yQ%Hm4f}s%I3(e%RP*Vxp7EVbJ?O}g==Qughyp+D8^L&)%*<5Y%9 zIvODf^&!omhjc&{UiPDGt2AErXYXUF(y9wGFScJz3+UaofVR!(YpTd! zi|X4iT5|Z;TbRGz9-w^NAy_76>d1T))t?pk9wWKxi zvV{S(>!0NsV8rmR0`4zshF@Blf0{M?`()h>_*cF{)Jj(&wo3o&&Tu6qT8d`!LXJod zm%m2Bg&B{y#|qc;H-qfJj@31#?KSVnf58go1|==QTb8vK=`tj_DEs&iBP%FCH{ zS@TypA*Wn$&iMgV*UV_59pRRJ@QhRb?XFntVgexF>QKffhly!--gG|elBT6}aIZh) zW^5B``{zCX{ki^B{OJ7;rwN7kE<(R=Kk}LYqZ-AwOV-=Ryyv{!$7*kCc#^G2d0#g8 zUls+B5&1hIEskpKVd3h;SGjF-T^5|p<83eTDhhZf__o?G!`NmhOjF$Wj@Wm4FPo$Y zBrZ#P2MNG&8>RU*v1Ek=5wmhR@*BSW5^Q$*T#M%8VMoV<&Q{cll~^8@)J#|J(4;3I zq;+r`G@;(tu=oX+J_wFpdkA2qQ3KI0j~-c2F3f7l2lKqF3%@*vR12@kq54GC@}!3u zKigRK;A7dSfC&xn39aN26G&m@sOS5=cz!3EBK_vbu01)qmwS9mXpVPlcygE=jslp=T`KVxLKMXpceB9s|EgwwO{M>b0w+iO_h>4Qy!|eHv{MNG zbof#H)|clffdJjUNz!hUA-?`$k<%;quILZ+w_FP>sRQkHcW6j9MB_hWUIM#miXU+4 z$V6vmXAh@b9Gad_^@(S+w&ALonK7devs3c*(}DP`TW`;-kj(WJzy{DT2qp~UcmaFY zzHy7^Rm&gap9*)_Tv0<^o5UxmPtQZiWjD<>?cux=!>d|`idgOzdTRobzTNCZ9S0B@ zz;XR6S6`4ndE-+h-uh}V^6CAj*!0g~TT^b}WsbViq5P)kmbgLRCljI!#-H8=X>~f& zE+Xas=`WlXFA3}EX~+XsT+2~3v*&47&5}+(qEPNc8CRL)QX3nS+TLM91D0UWTv!;~ zrrq_&KYeum-SHMur}Y*5Dy5(0O|?~dLx<@BKe0!g#NC(}38vyG?UZ~(1gXtzVBs zpl7Bj4t!vzR+mOq+m7jhC0s8g}e0KMHoU*DdW*_p;+F*>8jl|$_`$&pyRX~T^2|0 zs3js4TkF97c-D-au0!HC&Sk&6wy`PdG=59v5quzWpL4Bp{yghuo&Hk;gbta{QbHI% z4GCFedZPj@P2B51NwJv#o?^f=Z%#=mK}Cp z2HVRST4S!-w-NFW&brtMS~$rqY5qv`a^x=3Y4ANz-Yqt0*yyC4eU}s|YYud@a4mAS z14yyH17hEqbS+PS8T$Xx`ww%aY=^zS zyXf5giAi!(U`Vl89oo}tx~^rc!Rt4iXF}Y>^&^4~cDvVxdF<#YJt>aM)>b1q?6VNa zr+b;F`u$jtWA|WOES-Jc=;SEdL9NB2F}-9#@HBCl)(5rrM4L~S!8d(|pLf)8O4#Tq z`Z5a@YgWi!f58+xoMrupF_X;32J9UqvVxb85UrSGG=*TEEc~WS|i6N!oT7Q)=qjVYg?pKL|>SZ5jK57n0^8F@E@_q2@ zr+cJhe8%y^qfe8mX(O%BdZUk*RS}RA5Q5X~C5_Uj=ETQ?Y@r1q0Nr7>&TbQOaRL%L zI#knf8q?4kiircsnu6U(g{ieT^vnbqRgO8m&Iv+N1d>M_a~^1F&AVz6!MPGCKZ|gk`!t7)$B=8rTp=yOFx}2TK^(&Rd1DA z!uS+>_++t>d0v1K7#6_zS&rs8PJJ)T*b(3+wxgD-pTwibIuNZUA&k})7@kz|RTkPP zUnC*fgih;bc}ps-%usm^*D)a$_JXXBvy6=^ii^u+g)Zn3MU|lhWmLiRhkF$#BBLZE z7VB`oX_GJYa4M+B>+4G?UzbqIN#g!gcsXD3tD+QE=qiOb8<+5}pJ)5x>IvR`KHhbl zZzxZjY7d!Yx@Gm0)^;wxv5H+salGL0nudoCxmglO&44_@^nDOZ?@Sd!>d^xx)~Mx} zTIcfBpeUAtmyb9&;_hcUJhR!4X-lK>Q|;PNc7qh!3&<=tQ2pGoJy+z1y^wWlN#5=V zBy~p#_S)lt01R8G+=;VPqe!>g9RcVb84S(D!oBc;fDhmVD|A%C^FC4-Ys#r%%agpd z%g?E}srcNRpv2+3Q8nEa9)wr98zQ{+z28VGl*gx5eZeu7fle~lx%8SSrZ{ey9o8T* z&$&(dQvur9`2^0z8_|+zD!wGp$0(R2jo)mN{`6iCZvDO=|1dz%mEcFOJgmncC+x%! zV!Fs%=tEQSEYoB+-_B5S`KhU?$`5B;=M&-=(tgCWKznwJY;@9pEE{gelN4EW^hpnB zXa9$XL?et$Z^V^by&zdUh6}mw>xOax*5{x5f84N@Ootz(j(dyzA`SZ4$kj9aS2*zI zG@zM)z?`RUsMA4LqWYOZ!OuFij6pG}!CF^%CX<7eKdg;qwwj;| zY`ajkJ*k!^&K=a|T8IdGL~E#Nac5om8nC+>!5@vE_&X%~cB+&uNX_bq{RvtFYF2k{ zuN(O@ka*RIE?vgif2x*oEm0ulV2|`oC;?c&PqLf-(AsBDFHk!EVLyR#aay(R7Cl06 zj%|Bf$Zc+H_00|c$4m^8(`Bg^`P4$A@UCWUqNe++Yj5qeb?CMh(WA(~UVQMl%@DP2 zSNCIL;Nv=Lp*d(mc5Sg9Fp%pGIH5U9y}Q|#^0b+jy|h1vgM*`7_P(GMk77^fbx``b zo#)d}G&pC%RM(TDnF$?M=E^@)N8}-ERL#$xVVWn+;B~tZin1l~Y771%Ko?Et|GZaOJ)LEh9o!1JO3re>n~u<3AE{_v>8V-A`kWXv+>u|CK1Ve;{GwFf1( zpK~}qW3@libb)SxY;Kw+XVan|9M1Mt|6I_IcHH=ZWc!z`J&iEH+X8Me^DiHJfb#)- z-q4@q!VopCeeBZzSg}XZoO8{!)?=^j2dzMR>K(cgj7lh1(|Ji_dLa0H-CTV@V|a#w z(A+}&h|sEkkoBbT+hrY3!~8|l{Z=zmyPc_CTdJC?1@-F5{M0oV*Ssh9`vvO?XDuiB zENrIucD%1iyX~`y?Jx)nrQt1ErOjP>_eG%2kDD;`O3ZP(ywv2ZHm&U%ol;lK9Zt3) z`{A+)DRME+Z6I1pO-|B-vdb)}Weg_8hWnzyU+JbNUurA~KyBYu;1_vBSkxqW05RYV z3~|~H5YXgqb>B1KaCmkF_7~DCu{dS-W7tt6P#ygIkU{>|HgdA zzZu=0hxS{4>(*p;8eZ%gkThNT$*ck{Mc?=RB}dtp307;6aJ31&5uAy1$$@ID(p#-6Ws#Z zrKM2&?mN+5Jau_t)vMnTk#9_ftQSAU2>(8NV)+?Qms9OXjqJ^2g{*R52u z?FyyVug=Z&mz10^TJHx_B|I6d0*FV33w@Dk_Q!O$Y%fC}YX}YAwAD`%&%1d($lgM? zuJ@vnC@qjx#?V>+T9?MuI8^(LMcu5~Slb5^e8ZCXFjg&cq#ixki(cS4CS{7+d7!4q z?GwwO;LBA6{xB@aBrUWeFly#A9g)+)G9r}+tz$Z35oe=jVO^H+F@#|#A3}SWmeZS9 zR-Co{J=Bo_O`V}LZHgbi65L2-2=V?X?p+N&vP*XIZA4K54T9XHn*uN_90zGWEE|>* zVpMylWb6yIk!icWu8gh>%B_2M`D%Ineq*?9bBcRnY=qa?$jZ!lGs{`WWtkO#+nn2& zp7aAX2Ub^Bei~=s`4uYa%EPmyurB49(r`E1xBn-EhY_rL;~KS26QS5+)hv{3p4jN# zM;t(g=6}7=@`>uXJP*-J!Vke}0VPMf2lFWfD_zO?f~ zP3SJMU3pnQsa2Z}lf$ul*0M9JG5x`}>epn252gI8<-zu+0kvbEO;&F(<3wCGV%gLt z*4eTK-94Q`;Oh1tg?C>2aF^s4s!#H$&?M*KHHpFi!v&6h2mP#DQ1~-H<)9a=IhkY0 z{(O4KPf?n;pgcZ_+fuKai-?yQtunP{D-0#bs&Mz zUAc(H2KO_sIgG-2Ao09Ue4_pBVyNPxK?JtHl?v3{7_OyFKNVmhSR>D zBku&E=QUOYVF9g8Rrd+`ltzV$!*9NPMm|ql7xw0IhZMA*OJGDGR5=N+C&qy;hjMAW z2ts(I%Cu(e*v)Ke_`U{dZcsnKFx;m;P=lt2ZPt0+1foFK>_GiPXsZQ;z9e5F_|h$C zb)KUyT(bLXz~jo4XDrK*>(2y9y)%_p|af>^u7~H z?J)R-%0TRC{9%5(IN&#FLAU4 zT%&p$-|O>^DZxI!H3By$d2Z+-*lwp$&4xCg#yp{_)coXO(N3xCpTqT`Bf|yrEsSyO8qndfOe*9wzxr z#!dUw4#a%VOR756tMJd5CSj==2OGni(KIKbO~rXtmo!V&sdpj;E_@0Ul&F+aZwChR(E8&rRhQ&X1@qZz3tZ*t=+j zx7Dd$`!Ix!RM(2*SfP)UMQIvR4;Xq6j(7Hzg;krxh!S035*BfxPwT`RFQ6(9!EdM2 z9#&7y`Um*zt-&6zr_9lr3T{ZaW-iu7S)nY_JEs#$MZg1`sCQ|1=p{zMU?RU)+!|W3 z1WmJ=xzuU3H_C|VSH=R(K~nK?K{XiM+{;E3UMW6%S&uG?B>asAAXKsmHnaHq)Bnx# zuB=OKe)Ryd^Uw-@Fp8eT(>BFhZ`g@$Y+s8;39CHMw#a&0XCwFA8z6VjV^_jX<|!L^ z5aI(X<6<-_G8TM#YLD3CrvM`zYn|yGCHa_idInE`9OkiWP=B#| z!m8jeCCDfPfK+(IR4b_JohO$BJjy7P1cJ;tF?X*b&V7=uxbi)7v3Um8b^OSc+^muG zX)N4ny(?Okk=jqOat!x<*4q#Od652zJd}Z)U+qA(X@rjkae-|GZ@W}0zt}hi3I2c= zT(Yz65X;Q&*7GWwG0VaUUB0&tJ?j*TFj=Q+H*#CH64gXbCAr+>pba$QO)cckJjmn6 z@Lg$lx@lai-_9p^ql%p*5dE}yGVEiOm&D|z-(62364;Rc`qr0k*`zg?azjBl+d5cH zx1&hUtALgIKvMB(nZhkw3L6eTeso~n(@eWFozM9e)0=*kRm8{WNW0k64l7iLd6%sr zqrb|KE#^JJfq`P9D3GU}B7vq#s{kW_ieVjN6A2P3+yc?<02mIja?3iF=6P$j%DN0xUD=9LLZK}G_nI+6oZqd?OH_zH^m+oyY->n zAAml47nUNXeQ?QRy#ba67+{P5?6A#MGEjB(^_*GW34^woD>-0CiaCdMgXrW~#h`h8 zsr3}6<_xvSlXayxUbw!;Ii;!Lq)pBK${T%R?)kPFVn6Spfh1!pj zl5URHx579xCQV^XLESY!2+e7DB8F2?yjeUwWOt;8#|0iM$~sY@`C1w>(=}(;qL(uR zgPw%5?nG#*==7LvI~v@Y)~fxolosP2{^3avLrH%9^UX!Jk=6For-BidHrplm1>0NF z8)?CXABd_#R-KL9@I#x}CW(gAQ_GqLw=58+sKWQ1S|7K^XFhT(Tc}NV zD^DFX2R!L-qHH&ZJdDun=ccp03bsedb|qcwaOwb3Ij|B+TIOrEt4%~klJo0OQ84Kn z!IM#__=;)v*<^FE94f5}nn5UJIg@zIYVfK6S|;@LGzhNj3aGR*#@C*gDX3Fqf0!Uf8O02b2Q*JbbhqGS+|~&u__-o za>TE%M3AEYg5S`K0qnB&m1lRwr4f9rDc29WZ?*fJ@{c5+AX4@v3(wj$$@)b+{?aG} zt=9#f*Y!oVFKV`9ff|i{Imw=Z#TS?(`%ZGxJ-&+aij9h+l%X)I^CwM*2zmSM600ov zHPG-kW*q~AKIB1EqUX2JUN6+HxU*NX=bD+T*D7+y$78XBtX3gH9py=QwY;I%$1(p! zNz7CC)zRh!z8}F%p3=N=7oo!-Bx_dFk zbs!z2H`L^Ki2J&Yb?z0zLk>-Az?I}0n2ljsP^2|e*;s?okA25tGh9v4Pijg~FsYct z1M0I{aLz_eRyy3>3)I#=V{dM7(OX)`#1M=~ucU>3|IVg3u~4nnuS8fNDb$_>wh{0( zbDyzb8RO-#5vm+kiZ!C1NVD&5vsve&L7eY{Q0nF@Gma`mtHxqo4mw0%w1vpCT~}B{ z1rAR+qx#p63lQU&M@@tNt*y7)dwj2{;HS-9Ck@<=v01d)JR}Gwn<3;=vtyug$R##@ z+a1bJT@J?A;e`4-QjSumrjNF47~GrdboI z?inee(b(Cf4{5}zS2YO&2dACpl%Dz#QH6*f%b+iF$o-$CM(uT}t}9g2Ui(tsKi*3x@m~i-Nj85KwxQS@3P7C?k*R=EaOe-e1wdPHS{M0hNH1tZ z3vzy!7#L*ZBO0KlKu7qzG;PtD|MOs)XLd>n@?K{LppER5`Sw-QmnqLOWI}*Cdqt-5 z%@qFDcn0Nmm^jAS6&^E@Tk1uZGh-(wv|j+afYy8Hd0j85Md1q}3oABv>;_D79#HvB zK0HR(E{A4l8M=O{35faX1aslXB6e`S1`jtxW>2HIIPz?ucD6Ea#M#RdwHTr~SES+y zBeHK^)qjI`>&gNpp3F6=6=N9EIKLiaBPUwvU5;^JzY1NcU}JxkpQOMJX_uH#W<9)= zUtpG6S%QgG9p(x^ZAuy1sIDEU1a`@Xh!Ckt4R_H^bigBQI%8w|*)?qwsNZ}x5pdQm zvjetIXVEQL3;Ux6mKN+U??zsO&=C28ym_n}cAviTaGdkY!els!Es35nMVt`HT(OCpD4CR_$jZRwF?0FYuJn<{LDI4HZdGWVai7EtKtcA zs<}8@H`YklP0$ofRIs0Icx%nyh1y|yW~))0i+cDf;6^N;>8&0h?wDliw6)1|u5y$U zC=aeZT@Y8VJt8|Ee9@#A+R>rJgB>4$<+hC+h1;v7$o-SoKoS9D91v{BF;swzXZ2`N zuht{W4PXT>HCC4?t}awc2r_bpTFaRLsrC1XKmjF^dpU2Hb^t#l;15tw0C0FfjTLLo zgW_}!4=n1A8Pt|mvm613PD{W1V1gQ=(QaTFt%F?DGgk% zjg70VF^V%Hg6?nw4wTm4J5ET6T76w@B$z&+J;nX3g%QVfV&uMpQ6J78C1&qzX^1Ks zgOgN%W*CR!O=)edAXA*Y@@g(2`+S`G;9y`MEQFk_U%AD`O^L9x8+4j2TaC&t0=w2P zfl9(4p5v*YGj58%R+$|!-y%?|?0nR?wy;(Fe`(^SsB)7x4I!8{8RY?Oci|559 z0Q@L3g4R=$6-#4o<3D@!Fl;pcHq;rluI{#J^$6bQ6@CHs@`FykdmmW=Yc>$DPMuWG zkFS*&i1vy8BC2+KW<4{66hA<9eYNNMT5hua^VXsGw*U(R=)JowUaEJc1xjJ8QrqeI zC%~%|@GvS5^9~*K1IqmX8XQ1;`50*30&eqL`pVq)EO5w%CKS0Ry|q6MvnlU&P1*&X zskV>VCD}&K_Fh5LKN5Q&%jDdc0X8ah+T;eeF*A!A;!3`+jMb~Jq*d?9q?^a!O zi!Q=z%4jFNy{P&Tv1ztJrA4OU8uP8Yo9p|FI_|os$8(R%syc4#i8@9I)3yJimkS)f z-NE>jR~KjIN7&^ypWMu0;~X8X;~j=73#Ng5dg5>HE#vR}ZW?AUfRMm?s(!!7f%I06{2`T&ApH|r4qbFiYyyv3XD0&-Z5IHgSj|1J=h-=iZwPAEtk9&|(=i}%52?rXaJ5A1;55{98A_q(%O zZrU&npD7K|{D!fF&}_F6DijFF-@FvupdxcdRqyhz-(C+(1xThOL$kuAsN zM^L1qI24VshGNiyDmGg2Y;^)+Ttq2mSuq1zmcv}s;tU9%ehybJW`LVs z?I^>UC6#-%SA2wfgju?T9AI)#AG zJI}@l5knSTft=sMUTFfvnO`&)@3giEY+)WNCdb^@r|z+Kl54Yfouvyq@xYf(IO}CY z7Nz-RF{LVi!ZdutZ~XJ0-VxP+S6m+;#r%KQokqO0dv>(<)!uo&=21<3{CrVjNu?Co ztE{)#u0tU&63OPI{9J|Fs#Ug%cc;-X zM1t~9+k{vkUi>kz8gG_eZRsjdonL~ll2+ENnx^V=yc60?93+u8m*b9hjN4A#TMQ$Q zF_a{R3wX~;tOvS)K#T&*!u$Q{g+#vU#TICzMh#B6^XoRqMg`1?u2$5`8t2CWq$!oQ z%Ah>U)}qnJ+gy2JpQo7mvjL_p+f?amZ>Zq$_Z0Dzhf2wXsy|waQULR%o((BOSpWwA z9RzSCZ9fLtusf=%Vku#-k#V(zOdek-OxRMNIud8yY7xY{pxRP6Qnp)sVIJ>7&ilRj zGewwq%;%}OI&C(6m(`d`&pB5F61}2yFp{$^o>fp>A9#SZTML32ycDk4&GZu8I#jM?CfD@tMtLw_PLZ zEzk8Lr*{*;jt+-vN@~wuU)q)lzSlZ~Y%}mmB^EyocK{yfx^)6FlIovNq zN>)zR$VoAh#@N(!WI0Ss(F@a?Vs@IlsNY5GwI@lWw~S!r$dR_3fVje2F!U~gV z=Av6g_NeK}GAo48bG9gUr*_F)0^wdA;mT5+w3eo-2^!vq$`NOcYFtlbGpF!+$omqa zZCP@+^o>pDcXBoeYK$``b|WK9ES*}|skBh1!q)-VH~;`EmjYR}eQ%IUB-VV${@i@E zvc#D-?ouM3WjbIst(Y~dqOJVG?PN!TIXyq0g@u!o*bYkve9&h0L*DkEUw}I0n4>d- z_L{Psk!aSqMnulmH5XQ*Qt#VKUnX9$2S^i~gX0TeC@p|_8YSa)Q&O~1dL1H7|xv2vGWuQEn{%);~Lu?8iWm_F_T zpLJsgWvFz@fJ|O3brW^zma4eq?FF5fTH}V=T5U7n%?_t$7xaJpXJ~3`n^-u_k{(*C z5{$bGStz{0qb6r}CyUf7ny4pru=UdQu1v@0^u<&$%tsp0y1ryRS9)p?W>EJH87XZS zaz<@Jmw~wxfKmyQhBO>F9r}r*J~bM0vg?%lVE3l_EKh3fI$LYQW7K)W74U`1GYw0& zpLbc`53=z@Cc=hewDe`&PJUzs2I30=UGK9jLD0qd#2D!VYh5B1iuTan6He?FP8 z>+K(`^jX$PCFkBNQ;-<<_n-$bCM%WBZ=hP+7fT^i&XU!!SUTthYT!Z{=&*~P4tk@4 zWeV+4$2E|?0r$owDC-8+oUZ0I%nOE&PEPLc?_h0qzdCogoVan&mr@b69}1g$Mo36# z-$rbi3c)}i!{(M_Vd-nzfv65ZGHn7_z4fohUC z!TCU?{+^Q84@Ic^xg)|-S3(^m{mcs&a*e49b^lCLTz*q&UIMeKlsgPuH)zu$;_o$V zkNdAFMN@b)-wNO0+cY|=R-|iga%cgByuCVmK?p_fUx7B5++Q`|kGJ)F;>|^K{=}uG zP&Er!h8KhUK$w!H7BSdZfXhv#X84Uv!1=6Wx+XP#73b4OMs3|@ENiv*B|}M9fgE{c zfNv)*5n4>#&$nNO+mibhZ0hhzfh=i2&7J=W^Ag@A0NhjlD zB7HMW5i32F=mR*_KyPmbgI}of?tGeQ!SChTcZKOuasPIrTE`bQ4wIPMxz2Kvy7a*3 zcwtz0cH>iM;LUFbuO@|{D~!hN{m#T7cb4O{(osXa!r&)AGXwC*-71joS z0Svp|&ij=|a(PN7&KY?i@|Z@j4YPcY*$)?yXK{m}VBu4`zKB%95mUt+cD-tC2R3(i zI(CElXpHMFNN|n@UiBIp&3t$mr8Ls=3}=ctfPW(7p6F*H8iDS!q2n|)2-vaHtkQB$ zD8^Q4P8O8YlKYipgFi6A?MCWoTf-xV-RFo8y3aOu(J3rrVis^oz?`i5P1ajr)hN6h zsTyOn7g$e{a-1zv*m+a>jmyZEQqW@!!8)?C@ zU}r~n@_k0y+jbRN9E6dNj>yxL!w)P#k52AjBt(wX-e|=3@qK|MZGZwb=Ii+gnWqUam05qo9Z#sFK7azt(s{9tL$u@IMv6ZiK-J2 znfWeHg*?jnWuC)s{@>sIN6YF53#0A0(s_~-vO(-TiU>#=*hwb%?hQ7s=2qR(|aIdR8V<&`McA-#Y&eEllt>StqM$A747hM za_%~mQJC2C9Iz|JoaZ*&9@cbH#zC>xmng%kRhZe-a58)_Ag1I&a9&O`@O*S;w%UQR zNT;cD`k?^2a%3~3igu_|iGNtD7*GIKUqK%9&+J-LH;PZ`=<^>h7dQM!C)V^zm8%|z z(K3|Xo+x61z?3jN;vV%FwR!+VQMVM(rkfIRCCZ|je4fXN`64nfuaL}t@hsW&NBSrk z=DX`khW_#>0du&iCI9aiGMz!nS>HNV8-9b9lcanv`)9_yLFLnDN}muSYgvL^dpldN&F@9PngE&HC7A-h5;MD}dSnqd+eB4b9zGMGvk3{4tF zjG1}w$vHjG`+VN>eBSf?b$@1j%*=h=*M0x4`?|j0?^WGiUmG_p$`9(00}@hFr6uvY z+YJ~1Drx*ONhmA>I?tnaV&ShBJ%P-OCX%z`c7}9m2dVv`f1HV_Q3bKCGktJvX)*;Q zCzui3+V@w;#dQ2^_ts#2+avDI_N3TNqBEv>+;Q-Q{?-P`l-au+^apMD{mSo+g025x zd^U|MF2ZjI@o5Ch<>cmIP<~s-2&|oNFT3lZUx{lb;jgVyK&v<6UtaDYX8?l)F#xm~lXMtFJbDNh=o>Kz~%rl_{qd-v4X-8cR- zYJ{4g%5dj1Z}SyXeBZx}UMPlD7I(!v#jIQMow>e;IP>-0QByP|wp9+}dm>Z_qPYOeUA=P0#@ z8=k{b?Y>`MvCCH47}3K~LhY#Ic*g98EsP+v{aswUoXJY{gVQgjw^CB~YCz>Z7)pjS z%}(CSdn7_O_6-xRk9oY)@Dd(#poOib-9u&nynY>&p0vo8F=^4g(7!C~(4lNk_~c#1 zx>SJHSEXNhLs2B_#w051c%R=cJg)tO<7vim!4u&f(oQF{ZjPv&<=EGAc^~<}JkOBg zp&|81&R5a5B7Py8zo>X1uW?Dk-`csIFezpO z1L&+fl zjCy~^SF3MQTNU@COHD}HB3CNr%^9$KnU33y^rjotaodomXX#P9H}kZ+1J!-gc9To^ z!+wBcgh)Nh=l+>7l2u_%_JcNp2ZIosKrvIB?q3`EiQ*g{*PBOqDvaRgSKJ(R90p<; zy3b_OvDw1_0m2Sp z+e96yy6VT7Sy2^F5BkNn>$cDAF?}{4T1jdII_-o(xAe5L8rcY2i(`@eCF35XIECPR zZGbCo4LY2{25*i8%1=#heFwNTCjgkw$U0{8biTU3496)x9c9|`No=cLgf5`5`!GHk zkWgamGOpe9>F){rmVVcaA1b9Kavn3J9iZOUoRdES_jq_9@vuh-kAzS4<+G`W7Id}p zj8Gq?NJ#%o2F+8|@2A_o>h23OD9D(d&T&^YtK*fGDTzt@)hk!>WZ-<7wN7}$X^Hb+ zKkk>-vR^Rb$VRXm@>zMiHs?YMv+6{yKp^(r+iuDEVNEvVqw`XVz)#({Zr-2E&j(6_ zrT*0$2i#|SwqX$s&p{c*@!r@|>*wN8uh))66P0Y>;b%eyNf((#3`tgG8o%CXg((5v z0<~WThxPEy2U%ibV%y7uk}`<%pPSw`dJKAfecTww^W@c`wRaeTac-{jG* zD{qbsxK@v3JaNIFaFEHINf5}kWqcPpLsV$&{4;2E@iH)%yDf;DNDH+rzuOjDacp-| zmwbGsshxiRq#eZ*l2@mj~A}RH+ayu z^=s|8?@U*kvKNCIA2(`lstqKxni7z- z?{>}e;S%rBislHaQrp*??3-BsPal-N3empmDR}iCcWSBe$7_YZe>`2((Mvy=LnS}8 zkL{z5&aU9HXi6ZOQwW{5*}^iSQ*ba6vaxIsoWepS)Gt1p*g&{thc~wD-t_?WvMzFF zu$dJ^_|2Dd@$@GW;oq!JO+?8>ix&)F0(t$JUIgEOKp92uV0o;6*g3znE(2(Pqzq|WX^Xb%Pt z`2v9<_t?Ni?G{iXZb1MpTQUC@ZVVjf}QC{LqPbCdXL zjPIxwQ`l1A2MF@-)J?JjWg498DZ_)0kG>EnK1&rSe+CA{kdFuVu|#+MttdwE zBQ`L<*5NX^58LJ8dehRHxM-sVhH1{9pUis@eKTcs>56Qv?Ay|cmQSPFSOQv7y>Vd< z>fKa3t*3q(-t-h>6jcpxs-J?gUDXJ##6tC!%&MBSa^BpwP%QtZ8|!O+U`)Bm@3Z=Hthx2i*Vt=eg3inS=U^cDAaRGqC> zLJ4kUqVjdTY)jw>nku(#PfYc|zn@OT5;O4*z8NI>mkPHlX7(jWEI)4gSo>*{wg|zF zjj;ws6WFv!YEG_$rkNS?~<>d4+;|SQwVO#4a zN>;B={f7MpRO+QC%hjt_RZ??7BTuIOA(Dxqw?VK^Rl$^w3lhT&HXLhkVOO=kt%Y=^ z`*dpV*}3!FYMDpqyM-E>fGanqtB)Iow=aMM8tEY z3ej1+bW$~UwCCX;mu#NDzGT}X3^=TmTe(e|$Dk%O3sM{D<^hzAAe0qc9>Bzx zN~R?|`8;~3S+F(qlqXMzwv4=n9q2E&n~n36oSoYPlnWE@4bsBP(>8e9RX}%x+TUmY z4P44!vJ9!n-9O{PGN8e^)>p6Dlv2_RI_oB9b ztd+$GdUtpgXlmqxFK})%Z|uaiwgRC_Cxmj1$TVis|6vGV%z(-h=#*sl6dG+Wk;Ha6 zsVH%4-|17Q_6OSg{70YKKssK4XUsJ&ZO=X~pBlR_5uY2+Pg3h8jQZ)ph+^pr4T%*hfwEqf{LkqIQUBuPJ65uC|yg@2Y z?*=08e1ou(hzJzC+({iJ4x9S$d`ZssDmb*NCiSsd*{xKhAI*zg#k#hRuZDwefhEbt zVM=x(hD!oSd8|uN=B~G_U6-9t$4I3_tf*|aiQAaP&*Z|74_P=0AnRZh1EL- zDmrVpSn1^NUc#f`X9{d}JkkC>yhsv2=0LL%cQ3ILkMTa1GvP>3%lF z2BdwM9k|eLTO*TB#OXsMN_;2h_LG;S4YE-s5W3lXI~~~$A8m{n8N)Xn08djO1s?V< zIhIMnuAL)zVJYrt`o({jewQP_et7vqa!)TV;X-ToBO$)1_X?aPtFFCUloh3dY@2wG zFvF=nrw8VJEG9>Pv$jSS7hta`^p8^lZeC2NQ@4szuiU*3#Nba|3Vs=}=ZHuBhU12A z6R=9=f>x3T#LH7KDU=#&f2f_-AFU45jPoYmcifT>(7JdBEAnoAVdPQpNd^->Z=$xt zTLh9%;HtoQ7@+X)q9ia?ZDTr<;`oRuj1Quh`R$R3-4%f&h4^8U8j}Glf4tu%VSy9A zzgPt#Q=TU(W7}zo^s}qLk3tSqeq;&P8b7n>8kTv%u(U_iOvtAz^rCKV$~}E` zX|&4oM@uUQOEQYgove>m%ze2yoeC9K-~VlyVzTKw=86hC?aoM_(v6Gzb2sgHq?&MT zSB$;7^71fO$JyQi1Glh3ou;$p&CyBxRQ=AG*8?U-J`^<5!KS)8wXT|eoY4{m0FXPK z56|#OtmHJ0FIr#?{AIb&c*~#pUFOeC{QX3APBx`27Yh-iXmqqm%!xjm=q0A!1W;r^ z6+9F4CP-w}PYC$209q@5wQ^-esdiE~_gP*_4O9rHkH$Ox?~hA2e2TjFZlXXS6qdvv zc)iKXv2@m8c^J}B!2b+4K}@x>3p&-F17IwYdhXO!?5Zvfhs@#+tnQJaTt`n#meqcv zkSc%1^32nUX-~reeR0^#>fy!x=ok9QeVcB1;mggw);uxMkG`d<82PwMn31eLHjm?F z-xbeowN2@|XZ);&|FB>11*Q-ZW=XwkrJi`vp+dxYZe`7mWTRrY&U=1&@;R)BPNN2S zeRor}<9yX08T_JIF1tWI?7EGGMQ?F2(e?EW*871jEFfDv#4885I0r$OQ)b@yF|r#J z6G8Hlfgcu_ZK;L2vefcqD#X)F`NJ8u@c7cb+X2bEr_44L4+=Ck4YS_z5p8Siot@}q zE5;9yO9=Ihice5@ETpLDU8Dy3^Y;x-#zj)#HhrTdOoM)rm4$^RG9aI@>HSDG-MyOl zqCEd$G-prdQj2fZeA33&Hoe`D3LVhAg{5Ug#ntH6VK%rJulO#ySo@@F!4kCF6P-DP z^E?bf^2;rPn(6k@efaC7jo+r6)pmba@UfW^vU7%#iuM+-E3VB7rPB+(-cekp3EH7_ z7GgN;H(;2c2_Z@xR~d~0TcJXUJ`LLMgeddJ#dmKTet8zw#fUNc_I$riS5P!^Ho^|# z9AmaJiGIOwC51Vw8sfFnF+uQ>I1)iSB$~2Jh>F!lS#yH<+z|A*o!w43|0}F#bvu0C zAHfFRTo}km%myP1OVKZ4%vs;4zV+j^j^%j+=G%`?7mG5--*SFC!W=6NPyNCiEyV8a zVUE>D40ka{%fI;d>e2Pc&N%oy$BbXAg>0TtHRP`9%Y%o8Si2!E`}WVXoYj$IyM=^2 zLJ=&2W=NZ8x3zGyoiAEaK#@mPf*?qX@sLZ3)+Ac-MwCsi*qC>|*;@||9Meiog$ZFc zJ+o9J&*P974kMQhU&dqfXBfJMjrLR|c(k4MKs@@KA3A&6P?Y+2UK~ zT8DM2_D5_5@+Mle`Wl6xW;Zn?{?^p~Tgy}s*CQF>Z~0%$_*FT{)GLu;U|C&vRZe9Gx4mCvoC%H;yO-8?}c{g)XWt zb5Rj6Of0pBLIa*SA+*F56_iO{o0B_O<%i2%D(oaj{IM2)bJ72-5!p<=~DP zvrY$@s_Vu(jdQ`!E~qw?PZ3bA$5fdY&h(=OI)S)^4oL6qZvJNr7wK# htE1=|_wxb!#$3?v?98LUK-c6#-FcUr{{wh_D%=17 literal 0 HcmV?d00001 diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-05.png b/markdown/RTC 4.x/release-notes/en-US/framework/img/rtc/ue-bp-release440-05.png new file mode 100755 index 0000000000000000000000000000000000000000..4034c0b8369839c3bb40064974f6776c1bc37c4f GIT binary patch literal 19379 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 Eg-UCrv{O1wUfIE6;w8gISviDJ((`3`BJw& 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 AM*si- literal 0 HcmV?d00001 diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md index 18f52a267d2..c80bd08693f 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md @@ -1,3 +1,134 @@ +## Known issues + +**Audio module incompatibility (iOS)** + +The audio module of the Agora Unreal SDK is incompatible with the AudioMixer module in Unreal Engine 5.3 and 5.4. If you use Unreal Engine 5.3 or 5.4, you need to add the following code to the `/Config/IOS/IOSEngine.ini` file in your project to disable Unreal Engine’s AudioMixer module and avoid conflicts. + +```ini +[Audio] +AudioMixerModuleName= +``` + +## v4.4.0 + +This version releases on August xx, 2024. + +#### Compatibility changes + +This version simplifies the way methods are called and callbacks are implemented in Blueprints. + +**1. Method calls** + +In this version, there is no need to manually maintain instance variables. You can directly retrieve the desired class at any point in your Blueprint using the `Get` node, and connect the appropriate function nodes to complete the call. This improvement makes calling methods in Blueprints more convenient and streamlines the development process. + +![](img/rtc/ue-bp-release440-01.png) + +The image below demonstrates how to obtain the [`IRtcEngine`](/api-ref/rtc/unreal-blueprint/API/rtc_interface_class#class_irtcengine) instance through the [`GetAgoraRtcEngine`](/api-ref/rtc/unreal-blueprint/API/toc_initialize#api_createagorartcengine) node and connect it to the [`Initialize`](/api-ref/rtc/unreal-blueprint/API/toc_initialize#api_irtcengine_initialize) node to perform the initialization. + +![](img/rtc/ue-bp-release440-02.png) + + +**2. Callback implementation** + +This version introduces the concept of `CallbackExecutor`. You can bind the corresponding `CallbackExecutor` in Blueprints using the `EventHandler`, allowing for the execution of callbacks. This improvement offers the following advantages: + +- Callback implementation is more convenient. +- Enhanced security, with bound callbacks executing without causing crashes when destroyed. +- Easier reuse and code management. + +![](img/rtc/ue-bp-release440-03.png) + +The image below demonstrates how to obtain the `EventHandler` through the [`GetEventHandler`](/api-ref/rtc/unreal-blueprint/API/toc_initialize#api_irtcengine_geteventhandler) node and connect it to the [`AddBlueprintCallbackExecutor`](/api-ref/rtc/${frontMatter.ag_platform}/API/toc_initialize#api_irtcengine_addblueprintcallbackexecutor) node to bind the specified `CallbackExecutor`, thereby executing the related callbacks under the [`IRtcEngineEventHandler`](/api-ref/rtc/unreal-blueprint/API/rtc_interface_class#class_irtcengineeventhandler) interface class. + +![](img/rtc/ue-bp-release440-04.png) + + +#### New features + +1. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `EnableVoiceAITuner` method and passing in the sound effect types supported in the `EVOICE_AI_TUNER_TYPE` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +2. **Privacy manifest file (iOS)** + + To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file, `PrivacyInfo.xcprivacy`, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected. + + **Note:** If you need to publish an app with SDK versions prior to v4.4.0 to the Apple App Store, you must manually add the `PrivacyInfo.xcprivacy` file to your Xcode project. + +3. **Multi-camera capture (Android)** + + This release introduces additional functionalities for Android camera capture: + + 1. Support for capturing and publishing video streams from the third and fourth cameras: + + - `VIDEO_SOURCE_CAMERA_THIRD` (11) and `VIDEO_SOURCE_CAMERA_FOURTH` (12) in `EVIDEO_SOURCE_TYPE` add support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling `StartCameraCapture`. + - `publishThirdCameraTrack` and `publishFourthCameraTrack` in `FChannelMediaOptions` add support for Android. Set these parameters to `true` when joining a channel with `JoinChannelWithOptions` to publish video streams captured from the third and fourth cameras. + + 2. Support for specifying cameras by camera ID: + + A new parameter `cameraId` is added to `FCameraCapturerConfiguration`. For devices with multiple cameras, where `cameraDirection` cannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling `StartCameraCapture` with the specific `cameraId`. + +4. **Select different audio tracks for local playback and streaming** + + This release introduces the `SelectMultiAudioTrack` method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the `OpenWithMediaSource` method and enable this function by setting the `EnableMultiAudioTrack` parameter in `FAgoraMediaSource`. + +5. **Update video screenshot and upload** + + To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes: + + - The `CONTENT_INSPECT_IMAGE_MODERATION` enumeration is added in `ECONTENT_INSPECT_TYPE` which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. + - An optional parameter `serverConfig` is added in `FContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). + + Additionally, this version introduces the `EnableContentInspectEx` method, which supports simultaneous screenshot and upload of multiple video streams. + +6. **Wildcard token** + + This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +

+ +7. **Preloading channels** + + This release adds `PreloadChannel` and `PreloadChannelWithUserAccount` methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host. + + When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +8. **Publishing video streams from different sources** (Windows, macOS) + + This release adds the following members in `FChannelMediaOptions` to allow you publish video streams captured from the third and fourth camera or screen: + + - `publishThirdCameraTrack`: Publishing the video stream captured from the third camera. + - `publishFourthCameraTrack`: Publishing the video stream captured from the fourth camera. + - `publishThirdScreenTrack`: Publishing the video stream captured from the third screen. + - `publishFourthScreenTrack`: Publishing the video stream captured from the fourth screen. + +
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
+ +#### Improvements + +1. **Improved rendering usability** + + When using the UImage widget, you can control the size of the displayed image by setting the properties of the Brush. Starting from this version, the **Size To Content** option is supported, allowing UImage to automatically adjust to the size of the incoming video frames from the remote end. This improvement enhances the usability of image rendering. + + ![](img/rtc/ue-bp-release440-05.png) + +2. **Channel media relay** + + The number of target channels for media relay has been increased to 6. When calling `StartOrUpdateChannelMediaRelay` and `StartOrUpdateChannelMediaRelayEx`, you can specify up to 6 target channels. + +#### Issues fixed + +In Unreal Engine 5.3 and 5.4, adding the following code to the `/Source/xxx.Target.cs` file in your project to solve iOS memory allocation issues may lead to missing iOS compilation symbols. To address this issue, this version adds three function definitions (`StdMalloc`, `StdRealloc`, and `StdFree`) related to the standard library in the `UnrealMemory.cpp` file, ensuring proper handling of memory management needs when using the standard memory allocator. (iOS) + +```csharp +if (Target.Platform == UnrealTargetPlatform.IOS) +{ + bOverrideBuildEnvironment = true; + GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1"); +} +``` + + ## v4.2.1 This version was released on October xx, 2023. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md index 81ea8868554..1d1b8d2889c 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md @@ -1,3 +1,126 @@ +## Known issues + +**Audio module incompatibility (iOS)** + +The audio module of the Agora Unreal SDK is incompatible with the AudioMixer module in Unreal Engine 5.3 and 5.4. If you use Unreal Engine 5.3 or 5.4, you need to add the following code to the `/Config/IOS/IOSEngine.ini` file in your project to disable Unreal Engine’s AudioMixer module and avoid conflicts. + +```ini +[Audio] +AudioMixerModuleName= +``` + +## v4.4.0 + +This version releases on August xx, 2024. + +#### Compatibility changes + +**1. Changes to API usage** + +In this release, the creation and destruction of engine instances use the [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) and [`Release`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_irtcengine_release) methods, replacing the previous `createAgoraRtcEngine` and `release` methods. This change simplifies instance management. Details are as follows: + +- Creating an engine instance: Call [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) to return a pointer to `AgoraUERtcEngine`, and you can directly call methods under [`IRtcEngine`](/api-ref/rtc/unreal-cpp/API/rtc_interface_class#class_irtcengine) using this pointer. + + ```cpp + // Example of joining a channel using joinChannel + AgoraUERtcEngine::Get()->joinChannel(TCHAR_TO_UTF8(*Token), TCHAR_TO_UTF8(*ChannelName), 0, ChannelMediaOptions); + ``` + +- Destroying an engine instance: Call [`Release`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_irtcengine_release) to destroy the engine instance and release related resources. + + ```cpp + AgoraUERtcEngine::Release(); + ``` + +#### New features + +1. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VOICE_AI_TUNER_TYPE` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +2. **Privacy manifest file (iOS)** + + To meet Apple's safety compliance requirements for app publication, the SDK now includes a privacy manifest file, `PrivacyInfo.xcprivacy`, detailing the SDK's API calls that access or use user data, along with a description of the types of data collected. + + **Note:** If you need to publish an app with SDK versions prior to v4.4.0 to the Apple App Store, you must manually add the `PrivacyInfo.xcprivacy` file to your Xcode project. + +3. **Multi-camera capture (Android)** + + This release introduces additional functionalities for Android camera capture: + + 1. Support for capturing and publishing video streams from the third and fourth cameras: + + - `VIDEO_SOURCE_CAMERA_THIRD` (11) and `VIDEO_SOURCE_CAMERA_FOURTH` (12) in `VIDEO_SOURCE_TYPE` add support for Android, specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling `startCameraCapture`. + - `publishThirdCameraTrack` and `publishFourthCameraTrack` in `ChannelMediaOptions` add support for Android. Set these parameters to `true` when joining a channel with `joinChannel`[2/2] to publish video streams captured from the third and fourth cameras. + + 2. Support for specifying cameras by camera ID: + + A new parameter `cameraId` is added to `CameraCapturerConfiguration`. For devices with multiple cameras, where `cameraDirection` cannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling `startCameraCapture` with the specific `cameraId`. + +4. **Select different audio tracks for local playback and streaming** + + This release introduces the `selectMultiAudioTrack` method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the `openWithMediaSource` method and enable this function by setting the `enableMultiAudioTrack` parameter in `MediaSource`. + +5. **Update video screenshot and upload** + + To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes: + + - The `CONTENT_INSPECT_IMAGE_MODERATION` enumeration is added in `CONTENT_INSPECT_TYPE` which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. + - An optional parameter `serverConfig` is added in `ContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). + + Additionally, this version introduces the `enableContentInspectEx` method, which supports simultaneous screenshot and upload of multiple video streams. + +6. **ID3D11Texture2D rendering (Windows)** + + As of this release, the SDK supports video formats of type ID3D11Texture2D, improving the rendering effect of video frames in game scenarios. You can set `format` to `VIDEO_TEXTURE_ID3D11TEXTURE2D` when pushing external raw video frames to the SDK by calling `pushVideoFrame`. By setting the `textureSliceIndex` property, you can determine the ID3D11Texture2D texture object to use. + +7. **Wildcard token** + + This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +
All 4.x SDKs support using wildcard tokens.
+ +8. **Preloading channels** + + This release adds `preloadChannel` and `preloadChannelWithUserAccount` methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host. + + When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +9. **Publishing video streams from different sources** (Windows, macOS) + + This release adds the following members in `ChannelMediaOptions` to allow you publish video streams captured from the third and fourth camera or screen: + + - `publishThirdCameraTrack`: Publishing the video stream captured from the third camera. + - `publishFourthCameraTrack`: Publishing the video stream captured from the fourth camera. + - `publishThirdScreenTrack`: Publishing the video stream captured from the third screen. + - `publishFourthScreenTrack`: Publishing the video stream captured from the fourth screen. + +
For one RtcConnection, Agora supports publishing multiple audio streams and one video stream at the same time.
+ +#### Improvements + +1. **Header file management simplification** + +To reference other header files, you can add them uniformly to `AgoraHeaderBase.h`, simplifying the management of header files in the project and facilitating future maintenance. + +2. **Channel media relay** + + The number of target channels for media relay has been increased to 6. When calling `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, you can specify up to 6 target channels. + +#### Issues fixed + +In Unreal Engine 5.3 and 5.4, adding the following code to the `/Source/xxx.Target.cs` file in your project to solve iOS memory allocation issues may lead to missing iOS compilation symbols. To address this issue, this version adds three function definitions (`StdMalloc`, `StdRealloc`, and `StdFree`) related to the standard library in the `UnrealMemory.cpp` file, ensuring proper handling of memory management needs when using the standard memory allocator. (iOS) + +```csharp +if (Target.Platform == UnrealTargetPlatform.IOS) +{ + bOverrideBuildEnvironment = true; + GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1"); +} +``` + + + ## v4.2.1 This version was released on October xx, 2023. From ff0dd3d11c890362dbc18a35c5ba8077a1ca681e Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 26 Aug 2024 15:48:54 +0800 Subject: [PATCH 029/354] Update release_unreal_ng.md --- .../release-notes/en-US/framework/release_unreal_ng.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md index 1d1b8d2889c..19464b000ca 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md @@ -19,14 +19,14 @@ This version releases on August xx, 2024. In this release, the creation and destruction of engine instances use the [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) and [`Release`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_irtcengine_release) methods, replacing the previous `createAgoraRtcEngine` and `release` methods. This change simplifies instance management. Details are as follows: -- Creating an engine instance: Call [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) to return a pointer to `AgoraUERtcEngine`, and you can directly call methods under [`IRtcEngine`](/api-ref/rtc/unreal-cpp/API/rtc_interface_class#class_irtcengine) using this pointer. +- Creating an engine instance: Call [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) to create an `IRtcEngine` instance and return a pointer to `AgoraUERtcEngine`, and you can directly call methods under [`IRtcEngine`](/api-ref/rtc/unreal-cpp/API/rtc_interface_class#class_irtcengine) using this pointer. ```cpp // Example of joining a channel using joinChannel AgoraUERtcEngine::Get()->joinChannel(TCHAR_TO_UTF8(*Token), TCHAR_TO_UTF8(*ChannelName), 0, ChannelMediaOptions); ``` -- Destroying an engine instance: Call [`Release`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_irtcengine_release) to destroy the engine instance and release related resources. +- Destroying an engine instance: After calling [`Get`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_createagorartcengine) to create an `IRtcEngine` instance, you must call [`Release`](/api-ref/rtc/unreal-cpp/API/toc_initialize#api_irtcengine_release) to destroy the engine instance and release related resources. ```cpp AgoraUERtcEngine::Release(); From ef237394923098e9dfae850c3c477bc33769edfd Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:32:56 +0800 Subject: [PATCH 030/354] 1 --- .../API/api_imediaplayer_setaudiopitch.dita | 4 + dita/RTC-NG/API/rtc_api_overview.dita | 26 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 183 +++++++------ .../api_irtcengine_setremoterendermode.dita | 2 +- .../config/keys-rtc-ng-api-harmony.ditamap | 67 ++--- .../config/keys-rtc-ng-links-harmony.ditamap | 2 +- .../config/relations-rtc-ng-api.ditamap | 247 +++++++++--------- 7 files changed, 259 insertions(+), 272 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita index a02da6918df..0925ccbb471 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita @@ -35,6 +35,10 @@ + + pitch + 按半音音阶调整本地播放的音乐文件的音调,默认值为 0,即不调整音调。取值范围为 [-12,12],每相邻两个值的音高距离相差半音。取值的绝对值越大,音调升高或降低得越多。 +

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

<ph keyref="return-section-title"/> diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 976c6042e18..cd1746edff4 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -557,7 +557,7 @@ 方法/回调 描述 - + @@ -1521,7 +1521,7 @@
-
+
虚拟节拍器 @@ -2118,7 +2118,7 @@ - + @@ -2255,7 +2255,7 @@ (仅适用于 Android 和 iOS) - + (仅适用于 Android 和 iOS) @@ -2585,7 +2585,7 @@ (仅适用于 Android)
-
+
插件相关 @@ -2600,7 +2600,7 @@ - + @@ -2608,31 +2608,31 @@ - + - + - + - + - + - + - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 26f8065d679..ba7dc031c23 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -19,15 +19,15 @@ - + - + - + @@ -37,7 +37,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -61,47 +61,47 @@ - + - + - + - + - + - + - + - - - + + + - + - + - + @@ -112,9 +112,9 @@ - - - + + + @@ -124,14 +124,14 @@ - + - + - + @@ -139,11 +139,11 @@ - + - + @@ -152,8 +152,8 @@ - - + + @@ -172,31 +172,31 @@ - - - - - + + + + + - - - - - + + + + + - - - - - - - - + + + + + + + + - + @@ -230,10 +230,10 @@ - + - + @@ -256,9 +256,9 @@ - + - + @@ -266,10 +266,10 @@ - + - + @@ -288,7 +288,7 @@ - + @@ -297,14 +297,14 @@ - - - - - - - - + + + + + + + + @@ -312,23 +312,23 @@ - + - + - + - + - + @@ -336,25 +336,25 @@ - + - + - + - + @@ -413,7 +413,7 @@ - + @@ -455,7 +455,6 @@ - @@ -495,23 +494,23 @@ - + - - - + + + - - - - - - + + + + + + @@ -582,12 +581,12 @@ - + - + @@ -606,10 +605,10 @@ - - - - + + + + @@ -676,7 +675,7 @@ - + @@ -684,7 +683,7 @@ - + @@ -711,8 +710,6 @@ - - diff --git a/dita/RTC-NG/archive/api_irtcengine_setremoterendermode.dita b/dita/RTC-NG/archive/api_irtcengine_setremoterendermode.dita index 622150c5845..edcbb009bcf 100644 --- a/dita/RTC-NG/archive/api_irtcengine_setremoterendermode.dita +++ b/dita/RTC-NG/archive/api_irtcengine_setremoterendermode.dita @@ -14,7 +14,7 @@

public abstract int setRemoteRenderMode(int userId, int renderMode); - public abstract setRemoteRenderMode(uid: number, renderMode: number, mirrorMode: number): number; + - (int)setRemoteRenderMode:(NSUInteger)uid mode:(AgoraVideoRenderMode) mode; virtual int setRemoteRenderMode(uid_t userId, RENDER_MODE_TYPE renderMode) = 0; diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index ef36781589f..719ce6436df 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -23,6 +23,14 @@ + + + + API 列表 + API List + + + @@ -187,7 +195,7 @@ - + IBaseSpatialAudioEngine @@ -208,21 +216,21 @@ - + IMusicContentCenterEventHandler - + IAgoraMusicPlayer - + IAgoraMusicContentCenter @@ -740,13 +748,6 @@ - - - - openWithCustomSource - - - @@ -1025,7 +1026,7 @@ - + setRemoteRenderMode [1/2] @@ -1315,7 +1316,7 @@ - + sendCustomReportMessageEx @@ -1427,84 +1428,84 @@ - + startRtmpStreamWithoutTranscodingEx - + startRtmpStreamWithTranscodingEx - + updateRtmpTranscodingEx - + stopRtmpStreamEx - + startOrUpdateChannelMediaRelayEx - + pauseAllChannelMediaRelayEx - + muteLocalAudioStreamEx - + muteLocalVideoStreamEx - + muteAllRemoteAudioStreamsEx - + muteAllRemoteVideoStreamsEx - + stopChannelMediaRelayEx - + resumeAllChannelMediaRelayEx @@ -2744,7 +2745,7 @@ - + registerAudioFrameObserver @@ -2945,20 +2946,6 @@ - - - - setEncryptionMode - - - - - - - setEncryptionSecret - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap index 7306c00e8b4..92270584b53 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap @@ -3,7 +3,7 @@ Keys RTC NG Android Links - + 音频路由 diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index b49a666bf6c..b5902edde4b 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2197,8 +2197,8 @@ - - + + @@ -2208,9 +2208,9 @@ - - - + + + @@ -2232,30 +2232,30 @@ - - - + + + - + - + - - + + - + - - + + @@ -2266,10 +2266,10 @@ - + - + @@ -2278,19 +2278,19 @@ - + - - + + - - + + - + @@ -2299,14 +2299,14 @@ - + - - + + @@ -2326,8 +2326,8 @@ - - + + @@ -2347,18 +2347,18 @@ - - + + - - + + - - + + - + @@ -2375,15 +2375,15 @@ - + - - - - - - + + + + + + @@ -2391,7 +2391,7 @@ - + @@ -2406,30 +2406,29 @@ - - + + - - - - - + + + + + - - + - - + + @@ -2437,15 +2436,15 @@ - - - - - + + + + + - + @@ -2456,46 +2455,46 @@ - + - + - + - + - - - - + + + + - + - + - + - - + + - + @@ -2503,20 +2502,20 @@ - + - - + + - + @@ -2527,14 +2526,14 @@ - + - + @@ -2555,18 +2554,18 @@ - - + + - - - + + + - + @@ -2580,32 +2579,32 @@ - + - + - + - - - - + + + + - - - - - - - + + + + + + + - - + + @@ -2624,17 +2623,17 @@ - + - + - - + + @@ -2643,8 +2642,8 @@ - - + + @@ -2655,12 +2654,12 @@ - + - - - - + + + + @@ -2681,13 +2680,13 @@ - - + + - + - + @@ -2696,10 +2695,10 @@ - - - - + + + + @@ -2707,10 +2706,10 @@ - + - + @@ -2793,7 +2792,7 @@ - + From 44965d5e3fb666b684b54dd08198f10b966513d4 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:30:56 +0800 Subject: [PATCH 031/354] 1 --- .../API/api_imediaplayer_setaudiopitch.dita | 4 ++-- dita/RTC-NG/API/api_irtcengine_getcallid.dita | 2 +- .../RTC-NG/API/api_irtcengine_initialize.dita | 4 +++- .../API/api_irtcengine_joinchannel2.dita | 2 +- .../API/api_irtcengine_selectaudiotrack.dita | 4 ++-- ...ne_setdefaultaudioroutetospeakerphone.dita | 6 +++--- ...tcengine_setvideoencoderconfiguration.dita | 2 +- dita/RTC-NG/API/class_rtcengineconfig.dita | 20 +++++++++--------- dita/RTC-NG/API/enum_errorcodetype.dita | 6 +++--- .../enum_videoapplicationscenariotype.dita | 2 +- dita/RTC-NG/API/enum_videomoduleposition.dita | 6 +++--- dita/RTC-NG/API/rtc_api_data_type.dita | 2 +- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 14 ++++++------- .../config/keys-rtc-ng-api-harmony.ditamap | 21 ++++++++++++------- 15 files changed, 53 insertions(+), 44 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita index 0925ccbb471..e96cd000ccf 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita @@ -31,7 +31,7 @@

参数 - + @@ -48,4 +48,4 @@
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_getcallid.dita b/dita/RTC-NG/API/api_irtcengine_getcallid.dita index ea92738818c..d77fe8cdab6 100644 --- a/dita/RTC-NG/API/api_irtcengine_getcallid.dita +++ b/dita/RTC-NG/API/api_irtcengine_getcallid.dita @@ -26,7 +26,7 @@

    -

    客户端在每次加入频道后会生成一个对应的 callId,标识该客户端的此次通话。你可以调用该方法获取 callId 参数,然后在调用 等方法时填入。

    +

    客户端在每次加入频道后会生成一个对应的 callId,标识该客户端的此次通话。你可以调用该方法获取 callId 参数,然后在调用 等方法时填入。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_initialize.dita b/dita/RTC-NG/API/api_irtcengine_initialize.dita index a5bede4cdad..b9f5ba73f71 100644 --- a/dita/RTC-NG/API/api_irtcengine_initialize.dita +++ b/dita/RTC-NG/API/api_irtcengine_initialize.dita @@ -15,7 +15,9 @@

    public static synchronized RtcEngine create(RtcEngineConfig config) throws Exception {} - + public static create(config: RtcEngineConfig): RtcEngine { + return RtcEngineImpl.createEngineImpl(config); + } + (instancetype _Nonnull)sharedEngineWithConfig:(AgoraRtcEngineConfig * _Nonnull)config delegate:(id<AgoraRtcEngineDelegate> _Nullable)delegate; virtual int initialize(const RtcEngineContext& context) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita index aad3183bce1..27c51b95e7e 100644 --- a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita +++ b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita @@ -126,7 +126,7 @@

  • -2:传入的参数无效。例如,使用了不合法的 Token,uid 参数未设置为整型,或 成员值不合法。你需要填入有效的参数,重新加入频道。
  • -3: 对象初始化失败。你需要重新初始化 对象。
  • -7: 对象尚未初始化。你需要在调用该方法前成功初始化 对象。
  • -
  • -8: 对象内部状态错误。可能的原因是:调用 开始通话回路测试后,未调用 停止测试就调用该方法加入频道。你需要在该方法前调用
  • +
  • -8: 对象内部状态错误。可能的原因是:调用 开始通话回路测试后,未调用 停止测试就调用该方法加入频道。你需要在该方法前调用
  • -17:加入频道被拒绝。可能的原因是用户已经在频道中。建议通过 回调判断用户是否在频道中。除收到 (1) 状态外,不要再次调用该方法加入频道。
  • -102:频道名无效。你需要在 channelId 中填入有效的频道名,重新加入频道。
  • -121:用户 ID 无效。你需要在 uid 中填入有效的用户 ID,重新加入频道。
  • diff --git a/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita b/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita index 6bfa2575521..cfe72da412b 100644 --- a/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita +++ b/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita @@ -14,7 +14,7 @@

    public abstract int selectAudioTrack(int audioIndex); - + public abstract selectAudioTrack(index: number): number; - (int)selectAudioTrack:(NSInteger)index; virtual int selectAudioTrack(int index) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") @@ -37,7 +37,7 @@ 参数 - index + index audioIndex 指定的播放音轨。取值范围应大于等于 0 且小于 的返回值。 diff --git a/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita b/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita index 57adedd7a68..c8aff2e99c4 100644 --- a/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita +++ b/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita @@ -18,7 +18,7 @@ - (int)setDefaultAudioRouteToSpeakerphone:(BOOL)defaultToSpeaker; virtual int setDefaultAudioRouteToSpeakerphone(bool defaultToSpeaker) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int SetDefaultAudioRouteToSpeakerphone(bool defaultToSpeaker); abstract setDefaultAudioRouteToSpeakerphone( defaultToSpeaker: boolean @@ -46,7 +46,7 @@

    调用时机 -

    该方法需要在加入频道前调用。如需在加入频道后切换音频路由,请调用

    +

    该方法需要在加入频道前调用。如需在加入频道后切换音频路由,请调用

    调用限制 @@ -76,4 +76,4 @@
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoencoderconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_setvideoencoderconfiguration.dita index 78e28c6b94c..f2fbd3beb67 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoencoderconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoencoderconfiguration.dita @@ -41,7 +41,7 @@
    调用限制
      -
    • 该方法和 方法均支持设置镜像效果,声网建议你仅选择一种方法进行设置,同时使用两种方法会导致镜像效果叠加从而造成设置镜像失败。
    • +
    • 该方法和 方法均支持设置镜像效果,声网建议你仅选择一种方法进行设置,同时使用两种方法会导致镜像效果叠加从而造成设置镜像失败。
    • 该方法的 config 参数设置是在理想网络状态下能达到的最大值。如果网络状态不好,视频引擎便不能使用该 config 渲染本地视频,它会自动降低到一个合适的视频参数设置。
    diff --git a/dita/RTC-NG/API/class_rtcengineconfig.dita b/dita/RTC-NG/API/class_rtcengineconfig.dita index c2f9ab9621b..a0fbedb63dd 100644 --- a/dita/RTC-NG/API/class_rtcengineconfig.dita +++ b/dita/RTC-NG/API/class_rtcengineconfig.dita @@ -212,7 +212,7 @@ class RtcEngineContext {

    上下文。

    - + mNativeLibPath

    指定 .so 文件的存储目录。存储目录必须为有效的 App 的私有目录,可以通过 Context.getDir() 获取。

    @@ -226,17 +226,17 @@ class RtcEngineContext {
  • 务必确保你设置的路径为有效路径,否则会导致 创建失败。
  • - + channelProfile mChannelProfile - + audioScenario mAudioScenario - + areaCode mAreaCode 服务器的访问区域。该功能为高级设置,适用于有访问安全限制的场景。支持的区域详见 。区域码支持位操作。 @@ -252,12 +252,12 @@ class RtcEngineContext {
  • - + mExtensionList 插件列表。 - - mExtensionObserver + + mExtensionObserver eventDelegate 实例。 @@ -265,7 +265,7 @@ class RtcEngineContext { mediaFilterExtensions 实例。 - + mDomainLimit domainLimit @@ -276,7 +276,7 @@ class RtcEngineContext {

    - + mAutoRegisterAgoraExtensions autoRegisterAgoraExtensions @@ -288,7 +288,7 @@ class RtcEngineContext {
  • -
    +
    方法 diff --git a/dita/RTC-NG/API/enum_errorcodetype.dita b/dita/RTC-NG/API/enum_errorcodetype.dita index 29547c8d468..a5dbf151a83 100644 --- a/dita/RTC-NG/API/enum_errorcodetype.dita +++ b/dita/RTC-NG/API/enum_errorcodetype.dita @@ -30,7 +30,7 @@
    • 初始化失败。请重新初始化
    • 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
    • -
    • 调用 方法时用户尚未离开频道。请检查方法的调用逻辑。
    • +
    • 调用 方法时用户尚未离开频道。请检查方法的调用逻辑。
    • 音频模块未开启。
    • 程序集不完整。
    @@ -41,7 +41,7 @@
      -
    • Android 平台调用 方法时,如果设备版本低于 Android 5.0,会上报该错误码。请确认 Android 设备版本。
    • +
    • Android 平台调用 方法时,如果设备版本低于 Android 5.0,会上报该错误码。请确认 Android 设备版本。
    • 使用内置加密时,设置的加密模式不正确,或加载外部加密库失败。请检查加密的枚举值是否正确,或重新加载外部加密库。
    @@ -83,7 +83,7 @@
    • 用户已经在频道中。建议通过 回调判断用户是否在频道中。除收到 (1) 状态外,不要再次调用该方法加入频道。
    • -
    • 用户在调用 进行通话测试后,未调用 结束当前测试就尝试加入频道。开始通话测试后,需要先调用 结束当前测试,再加入频道。
    • +
    • 用户在调用 进行通话测试后,未调用 结束当前测试就尝试加入频道。开始通话测试后,需要先调用 结束当前测试,再加入频道。
    diff --git a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita index d71d5783eae..6cb0973510c 100644 --- a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita +++ b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita @@ -19,7 +19,7 @@ 0: (默认) 通用场景。 - +

    1: 会议场景。

    diff --git a/dita/RTC-NG/API/enum_videomoduleposition.dita b/dita/RTC-NG/API/enum_videomoduleposition.dita index b54d3cf8b93..25af3b4f98b 100644 --- a/dita/RTC-NG/API/enum_videomoduleposition.dita +++ b/dita/RTC-NG/API/enum_videomoduleposition.dita @@ -10,15 +10,15 @@ - 1: 本地采集视频数据并且经过前处理之后的位置,对应 回调。此处观测到的视频具备视频前处理的效果,可通过开启美颜、虚拟背景或水印等方式验证。 + 1: 本地采集视频数据并且经过前处理之后的位置,对应 回调。此处观测到的视频具备视频前处理的效果,可通过开启美颜、虚拟背景或水印等方式验证。 - 2: 接收远端发送的视频在渲染前的位置,对应 回调。 + 2: 接收远端发送的视频在渲染前的位置,对应 回调 - 4: 本地视频编码前的位置,对应 回调。此处观测到的视频具备视频前处理和编码前处理的效果:
      + 4: 本地视频编码前的位置,对应 回调。此处观测到的视频具备视频前处理和编码前处理的效果:
      • 对于视频前处理效果,可通过开启美颜、虚拟背景或水印等方式验证。
      • 对于编码前处理效果,可通过设置一个较低的帧率(例如 5 fps)验证。
      diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index d52c798d28e..ed145e57c2e 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -264,7 +264,7 @@
    • -
    • +
    • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index cd1746edff4..dd1b70d70d0 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -550,7 +550,7 @@
    -
    +
    原始音频数据 diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index ba7dc031c23..3d4a7deb427 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -45,7 +45,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -171,7 +171,7 @@ - + @@ -195,9 +195,9 @@ - - - + + + @@ -332,7 +332,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 719ce6436df..496395ec769 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -247,7 +247,7 @@ - + create @@ -883,7 +883,7 @@ - + adjustUserPlaybackSignalVolume @@ -2466,7 +2466,7 @@ - + setDualStreamMode @@ -2744,8 +2744,8 @@ - - + + registerAudioFrameObserver @@ -4247,7 +4247,7 @@ - + @@ -4446,7 +4446,7 @@ - + @@ -7832,6 +7832,13 @@ + + + + ERR_INIT_NET_ENGINE + + + From 2f4a57396247f23b4354084b8ab61abfd287d3dc Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:43:29 +0800 Subject: [PATCH 032/354] 1 --- ...rtcengine_adjustrecordingsignalvolume.dita | 4 +- .../API/api_irtcengine_setaudioscenario.dita | 2 +- .../API/api_irtcengine_setdualstreammode.dita | 2 +- .../api_irtcengine_setdualstreammode2.dita | 4 +- ...tcengineex_setremotevideostreamtypeex.dita | 2 +- ...nthandler_onrtmpstreamingstatechanged.dita | 2 +- .../class_cameracapturerconfiguration.dita | 2 +- dita/RTC-NG/API/enum_audioscenariotype.dita | 2 +- .../enum_videoapplicationscenariotype.dita | 2 +- dita/RTC-NG/API/rtc_api_data_type.dita | 4 +- dita/RTC-NG/API/rtc_api_overview.dita | 6 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 25 ++++---- .../config/keys-rtc-ng-api-harmony.ditamap | 62 +++++++++---------- 13 files changed, 56 insertions(+), 63 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_adjustrecordingsignalvolume.dita b/dita/RTC-NG/API/api_irtcengine_adjustrecordingsignalvolume.dita index e288ce0ecd7..a56556e77ad 100644 --- a/dita/RTC-NG/API/api_irtcengine_adjustrecordingsignalvolume.dita +++ b/dita/RTC-NG/API/api_irtcengine_adjustrecordingsignalvolume.dita @@ -26,7 +26,7 @@

    -

    如果你只需将音频信号静音,建议你使用

    +

    如果你只需将音频信号静音,建议你使用

    调用时机 @@ -59,4 +59,4 @@
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita b/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita index edc5ad169fd..e6f6e46f05e 100644 --- a/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita @@ -44,7 +44,7 @@ scenario 音频场景。不同的音频场景下,设备的音量类型是不同的。 详见 -
      +
      • (0):(默认)自动场景,根据用户角色和音频路由自动匹配合适的音质。
      • (3): 高音质场景,适用于音乐为主的场景。
      • (5): 聊天室场景,适用于用户需要频繁上下麦的场景。
      • diff --git a/dita/RTC-NG/API/api_irtcengine_setdualstreammode.dita b/dita/RTC-NG/API/api_irtcengine_setdualstreammode.dita index 8e100e01766..d2ea7bff682 100644 --- a/dita/RTC-NG/API/api_irtcengine_setdualstreammode.dita +++ b/dita/RTC-NG/API/api_irtcengine_setdualstreammode.dita @@ -33,7 +33,7 @@

        SDK 默认在发送端开启小流自适应模式 (),即发送端不主动发送小流,主播身份的接收端可以调用 发起小流申请,发送端收到申请后开始自动发送小流。

        • 如果你想修改此行为,可以调用该方法并修改 mode(始终不发送小流)或 (始终发送小流)。
        • 如果你在进行修改后又想恢复该默认行为,可重新调用该方法,并将 mode 设置为

        - 该方法和 的区别与联系如下: + 该方法和 的区别与联系如下:
        • 调用该方法并设置 mode 时,跟 () 的效果相同。
        • 调用该方法并设置 mode 时,跟 () 的效果相同。
        • diff --git a/dita/RTC-NG/API/api_irtcengine_setdualstreammode2.dita b/dita/RTC-NG/API/api_irtcengine_setdualstreammode2.dita index cde8db511f1..2f35000f510 100644 --- a/dita/RTC-NG/API/api_irtcengine_setdualstreammode2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setdualstreammode2.dita @@ -44,8 +44,8 @@

          -

          该方法跟 的区别在于,该方法还可以进行视频小流的配置,SDK 会根据 streamConfig 中的配置发送小流。

          - 该方法和 的区别与联系如下: +

          该方法跟 的区别在于,该方法还可以进行视频小流的配置,SDK 会根据 streamConfig 中的配置发送小流。

          + 该方法和 的区别与联系如下:
          • 调用该方法并设置 mode 时,跟调用 并设置 enabled 的效果相同。
          • 调用该方法并设置 mode 时,跟调用 并设置 enabled 的效果相同。
          • diff --git a/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita b/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita index 6a2e7ecd8e3..c1d9d579615 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita @@ -49,7 +49,7 @@

              -
            • 如果发送端已调用 并将 mode 设置为 (始终不发送小流),则调用该方法不生效,你需要在发送端重新调用 修改设置。
            • +
            • 如果发送端已调用 并将 mode 设置为 (始终不发送小流),则调用该方法不生效,你需要在发送端重新调用 修改设置。
            • 观众角色的接收端调用该方法不生效。
    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita index 323ad7f34dd..df48a0e3e4c 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita @@ -96,7 +96,7 @@
  • (9):服务器未找到这个流。
  • (10):推流地址格式有错误。请检查推流地址格式是否正确。
  • (11):用户角色不是主播,该用户无法使用推流功能。请检查你的应用代码逻辑。
  • -
  • (13):非转码推流情况下,调用了 方法更新转码属性。请检查你的应用代码逻辑。
  • +
  • (13):非转码推流情况下,调用了 更新转码属性。请检查你的应用代码逻辑。
  • (14):主播的网络出错。
  • (16):你的项目没有使用声网推流服务的权限。请参考旁路推流中的前提条件开启推流服务。
  • (100):推流已正常结束。当你调用 结束推流后,SDK 会返回该值。
  • diff --git a/dita/RTC-NG/API/class_cameracapturerconfiguration.dita b/dita/RTC-NG/API/class_cameracapturerconfiguration.dita index 0b5833484e5..e21fa2dc3f7 100644 --- a/dita/RTC-NG/API/class_cameracapturerconfiguration.dita +++ b/dita/RTC-NG/API/class_cameracapturerconfiguration.dita @@ -340,7 +340,7 @@ class CameraCapturerConfiguration { followEncodeDimensionRatio (可选)是否跟随 中设置的视频宽高比:
      -
    • :(默认) 跟随。SDK 会将采集到的视频按照已设置的视频宽高比进行裁剪,会同步改变本地预览画面、 中的视频画面。
    • +
    • :(默认) 跟随。SDK 会将采集到的视频按照已设置的视频宽高比进行裁剪,会同步改变本地预览画面、 中的视频画面。
    • :不跟随。SDK不改变采集到的视频帧宽高比。
    diff --git a/dita/RTC-NG/API/enum_audioscenariotype.dita b/dita/RTC-NG/API/enum_audioscenariotype.dita index 5746fa3ad95..965578f3cae 100644 --- a/dita/RTC-NG/API/enum_audioscenariotype.dita +++ b/dita/RTC-NG/API/enum_audioscenariotype.dita @@ -22,7 +22,7 @@ 7: 合唱场景。适用于网络条件良好,要求极低延时的实时合唱场景。 - 使用该枚举前,你需要调用 获取音频设备是否支持极低延时采集和播放。只有在支持极低延时(isLowLatencyAudioSupported = )的音频设备上,才能够体验到极低延时。 + 使用该枚举前,你需要调用 获取音频设备是否支持极低延时采集和播放。只有在支持极低延时(isLowLatencyAudioSupported = )的音频设备上,才能够体验到极低延时。 diff --git a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita index 6cb0973510c..4c3e9f0b0a5 100644 --- a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita +++ b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita @@ -26,7 +26,7 @@

    - +

    2: 1v1 视频通话

    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index ed145e57c2e..8933f9da464 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -259,7 +259,7 @@
    • -
    • +
    • @@ -302,7 +302,7 @@
    • -
    • +
    • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index dd1b70d70d0..5706fe03ff8 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1546,7 +1546,7 @@
    -
    +
    媒体播放器

    更多有关媒体播放器的方法,详见内置媒体播放器

    更多有关媒体播放器的方法,详见

    @@ -2045,7 +2045,7 @@
    -
    +
    Metadata (SEI) @@ -2060,7 +2060,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 3d4a7deb427..c9e84a57428 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -27,13 +27,13 @@ - + - + @@ -80,9 +80,9 @@ - + - + @@ -250,7 +250,7 @@ - + @@ -328,10 +328,10 @@ - - + + - + @@ -352,7 +352,6 @@ - @@ -470,7 +469,7 @@ - + @@ -496,13 +495,13 @@ - + - + @@ -628,7 +627,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 496395ec769..42258caa56a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -90,7 +90,7 @@ - + IAudioFrameObserver @@ -104,7 +104,7 @@ - + IMediaPlayer @@ -125,7 +125,7 @@ - + IMediaPlayerVideoFrameObserver @@ -160,7 +160,7 @@ - + IMetadataObserver @@ -174,7 +174,7 @@ - + IVideoFrameObserver @@ -209,7 +209,7 @@ - + AudioParams @@ -615,7 +615,7 @@ - + registerPlayerObserver @@ -990,7 +990,7 @@ - + setVideoScenario @@ -1026,13 +1026,6 @@ - - - - setRemoteRenderMode [1/2] - - - @@ -2444,8 +2437,8 @@ - - + + enableDualStreamMode @@ -2459,13 +2452,7 @@ - - - - setDualStreamMode [1/2] - - - + @@ -2892,7 +2879,7 @@ - + @@ -3753,14 +3740,14 @@ - + onRequestToken - + onLocalUserRegistered @@ -3992,7 +3979,7 @@ - + onMetaData @@ -4231,7 +4218,7 @@ - + @@ -4384,7 +4371,7 @@ - + @@ -4471,7 +4458,7 @@ - + @@ -4479,7 +4466,7 @@ - + onTranscodedStreamLayoutInfo @@ -4540,7 +4527,7 @@ - + AdvancedAudioOptions @@ -4771,7 +4758,7 @@ - + AgoraFocalLengthInfo @@ -5030,6 +5017,13 @@ + + + + ScreenCaptureParameters + + + From 3bc30c79efe2e2a6151a55a7381b67eb29c9c6f9 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:25:48 +0800 Subject: [PATCH 033/354] add missing APIs and formatting --- .../api_irtcengine_createwithareacode.dita | 55 --- .../API/api_irtcengine_createwithconfig.dita | 50 --- dita/RTC-NG/API/rtc_api_sunset.dita | 394 ++++++++++-------- 3 files changed, 223 insertions(+), 276 deletions(-) delete mode 100644 dita/RTC-NG/API/api_irtcengine_createwithareacode.dita delete mode 100644 dita/RTC-NG/API/api_irtcengine_createwithconfig.dita diff --git a/dita/RTC-NG/API/api_irtcengine_createwithareacode.dita b/dita/RTC-NG/API/api_irtcengine_createwithareacode.dita deleted file mode 100644 index 4f4679a654c..00000000000 --- a/dita/RTC-NG/API/api_irtcengine_createwithareacode.dita +++ /dev/null @@ -1,55 +0,0 @@ - - - - <ph keyref="createWithAreaCode"/> - 创建 - 对象并返回指针。 - - - - - - - - -
    -

    - - - - - - - - -

    -
    -
    - 详情 -
    - -
    废弃:
    -
    请改用
    -
    -
    -
    -
    - 参数 - - - appId - 你的项目的 App ID。 - - - areaCode - 区域代码。详见 - -
    -
    - 返回值 -
      -
    • 方法调用成功,返回一个 对象。
    • -
    • 方法调用失败,返回错误码。
    • -
    -
    -
    diff --git a/dita/RTC-NG/API/api_irtcengine_createwithconfig.dita b/dita/RTC-NG/API/api_irtcengine_createwithconfig.dita deleted file mode 100644 index 14b1a76ef03..00000000000 --- a/dita/RTC-NG/API/api_irtcengine_createwithconfig.dita +++ /dev/null @@ -1,50 +0,0 @@ - - - - <ph keyref="createWithConfig"/> - 创建 对象 - - - - - - - - -
    -

    - - - - - - - - -

    -
    -
    - 详情 -
    - -
    废弃:
    -
    请改用
    -
    -
    -
    -
    - 参数 - - - - - -
    -
    - 返回值 -
      -
    • 方法调用成功,返回一个 对象。
    • -
    • 方法调用失败,返回错误码。
    • -
    -
    -
    diff --git a/dita/RTC-NG/API/rtc_api_sunset.dita b/dita/RTC-NG/API/rtc_api_sunset.dita index d424e5be1c3..a2f941f8582 100644 --- a/dita/RTC-NG/API/rtc_api_sunset.dita +++ b/dita/RTC-NG/API/rtc_api_sunset.dita @@ -9,6 +9,7 @@
    + @@ -84,12 +85,6 @@ - v4.0.0 - - - - 使用 中的 logConfig 参数 - v4.0.0 - @@ -126,10 +121,28 @@ v4.0.0 + + + + 使用 中的 contextconfig 参数 + v4.0.0 + - 使用 中的 logConfig 参数 + 使用 中的 contextconfig 参数 + v4.0.0 + + + + + 使用 中的 contextconfig 参数 + v4.0.0 + + + + + v4.0.0 @@ -186,181 +199,219 @@ - v4.0.0 - - -
    -
    -
    - - - - - - - - - - API - 描述 - 替代 API - 废弃版本 - - - - - - - - v4.4.0 - - - - - - v4.4.0 - - - - - - v4.4.0 - - - - - - v4.4.0 - - - - - - v4.3.1 - - - - - - v4.2.0 - - - - - - v4.2.0 - - - - - - v4.2.0 - - - - - - - v4.0.0 - - - - - 使用 中的 logConfig 参数 - v4.0.0 - - - - - - v4.0.0 - - - - - v4.0.0 - - - - - - v4.0.0 - - - - - - v4.0.0 - - - - - - v4.0.0 - - - - - - v4.0.0 - - - - - 使用 中的 logConfig 参数 - v4.0.0 - - - - + + + v4.0.0 - - - - v4.0.0 - - - - - - - v4.0.0 - - - - - - - v4.0.0 - - - - - - - v4.0.0 - - - - - - - v4.0.0 - - - - - - - v4.0.0 - - - - - - + + + v4.0.0
    +
    + + + + + + + + + + + API + 描述 + 替代 API + 废弃版本 + + + + + + + + v4.4.0 + + + + + + v4.4.0 + + + + + + v4.4.0 + + + + + + v4.4.0 + + + + + + v4.3.1 + + + + + + v4.2.0 + + + + + + v4.2.0 + + + + + + v4.2.0 + + + + + - + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + 使用 中的 contextconfig 参数 + v4.0.0 + + + + + 使用 中的 contextconfig 参数 + v4.0.0 + + + + + 使用 中的 contextconfig 参数 + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + - + v4.0.0 + + + + + - + v4.0.0 + + + + + - + v4.0.0 + + + + + - + v4.0.0 + + + + + - + v4.0.0 + + + + + - + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + +
    +
    已删除 API @@ -465,6 +516,7 @@ v4.4.0 + From 2b790ca787b09f0b798fda6b75c5eddb18340ab9 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:27:06 +0800 Subject: [PATCH 034/354] 1 --- dita/RTC-NG/API/rtc_api_sunset.dita | 1 - 1 file changed, 1 deletion(-) diff --git a/dita/RTC-NG/API/rtc_api_sunset.dita b/dita/RTC-NG/API/rtc_api_sunset.dita index a2f941f8582..7fbe32edd90 100644 --- a/dita/RTC-NG/API/rtc_api_sunset.dita +++ b/dita/RTC-NG/API/rtc_api_sunset.dita @@ -200,7 +200,6 @@ v4.0.0 - From a38a47b36d92787e0baaf51c3a6b9ed0340e4599 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:28:37 +0800 Subject: [PATCH 035/354] 1 --- dita/RTC-NG/API/rtc_api_sunset.dita | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_sunset.dita b/dita/RTC-NG/API/rtc_api_sunset.dita index 7fbe32edd90..26d4d660c81 100644 --- a/dita/RTC-NG/API/rtc_api_sunset.dita +++ b/dita/RTC-NG/API/rtc_api_sunset.dita @@ -514,8 +514,7 @@ 插件出错回调。 v4.4.0 - - + From 83e960fdd18269ac65f6c6f7335ca0930b878d98 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:58:16 +0800 Subject: [PATCH 036/354] fix mailto-link --- dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita | 2 +- dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita | 2 +- dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita | 2 +- dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita | 2 +- dita/RTC-NG/API/class_channelmediaoptions.dita | 2 +- dita/RTC-NG/API/class_livestreamadvancedfeature.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita b/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita index 62cc327ffe7..61481b56007 100644 --- a/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita +++ b/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita @@ -53,7 +53,7 @@
    详情 -

    声网提供自定义数据上报和分析服务。该服务当前处于免费内测期。内测期提供的能力为 6 秒内最多上报 10 条数据,每条自定义数据不能超过 256 字节,每个字符串不能超过 100 字节。如需试用该服务,请联系 开通并商定自定义数据格式。

    +

    声网提供自定义数据上报和分析服务。该服务当前处于免费内测期。内测期提供的能力为 6 秒内最多上报 10 条数据,每条自定义数据不能超过 256 字节,每个字符串不能超过 100 字节。如需试用该服务,请开通并商定自定义数据格式。

    \ No newline at end of file diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita b/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita index f45f4eb792a..16e115ec00b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita @@ -34,7 +34,7 @@
    调用限制 -

    该方法仅在部署声网混合云方案后生效。你可以联系 了解和部署声网混合云。

    +

    该方法仅在部署声网混合云方案后生效。你可以了解和部署声网混合云。

    参数 diff --git a/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita b/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita index 836b0b9000d..d58546a3e7a 100644 --- a/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita +++ b/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita @@ -27,7 +27,7 @@
    详情 -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    返回值 diff --git a/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita b/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita index 087f444795c..b5e98ee0093 100644 --- a/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita +++ b/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita @@ -27,7 +27,7 @@
    详情 -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    参数 diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index 7ed11cf98eb..7b38b4d4ebc 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -1759,7 +1759,7 @@ public:
  • :参与音强选流。如未开启音强选流功能,该参数不会生效。
  • :不参与音强选流。
  • - 如需启用该功能,请联系 + 如需启用该功能,请
    diff --git a/dita/RTC-NG/API/class_livestreamadvancedfeature.dita b/dita/RTC-NG/API/class_livestreamadvancedfeature.dita index 796e35350c9..9891652f2fd 100644 --- a/dita/RTC-NG/API/class_livestreamadvancedfeature.dita +++ b/dita/RTC-NG/API/class_livestreamadvancedfeature.dita @@ -85,7 +85,7 @@ public:

    -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 2d834eecf84..067d2f0cdc1 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -95,7 +95,7 @@ - sales@shengwang.cn + 联系销售 From bacbf6effba0027ae0afe46323243589408c510f Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:58:16 +0800 Subject: [PATCH 037/354] fix mailto-link --- dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita | 2 +- dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita | 2 +- dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita | 2 +- dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita | 2 +- dita/RTC-NG/API/class_channelmediaoptions.dita | 2 +- dita/RTC-NG/API/class_livestreamadvancedfeature.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita b/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita index 62cc327ffe7..61481b56007 100644 --- a/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita +++ b/dita/RTC-NG/API/api_irtcengine_sendcustomreportmessage.dita @@ -53,7 +53,7 @@
    详情 -

    声网提供自定义数据上报和分析服务。该服务当前处于免费内测期。内测期提供的能力为 6 秒内最多上报 10 条数据,每条自定义数据不能超过 256 字节,每个字符串不能超过 100 字节。如需试用该服务,请联系 开通并商定自定义数据格式。

    +

    声网提供自定义数据上报和分析服务。该服务当前处于免费内测期。内测期提供的能力为 6 秒内最多上报 10 条数据,每条自定义数据不能超过 256 字节,每个字符串不能超过 100 字节。如需试用该服务,请开通并商定自定义数据格式。

    \ No newline at end of file diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita b/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita index f45f4eb792a..16e115ec00b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalaccesspoint.dita @@ -34,7 +34,7 @@
    调用限制 -

    该方法仅在部署声网混合云方案后生效。你可以联系 了解和部署声网混合云。

    +

    该方法仅在部署声网混合云方案后生效。你可以了解和部署声网混合云。

    参数 diff --git a/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita b/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita index 836b0b9000d..d58546a3e7a 100644 --- a/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita +++ b/dita/RTC-NG/API/api_livetranscoding_getadvancedfeatures.dita @@ -27,7 +27,7 @@
    详情 -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    返回值 diff --git a/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita b/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita index 087f444795c..b5e98ee0093 100644 --- a/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita +++ b/dita/RTC-NG/API/api_livetranscoding_setadvancedfeatures.dita @@ -27,7 +27,7 @@
    详情 -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    参数 diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index 7ed11cf98eb..7b38b4d4ebc 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -1759,7 +1759,7 @@ public:
  • :参与音强选流。如未开启音强选流功能,该参数不会生效。
  • :不参与音强选流。
  • - 如需启用该功能,请联系 + 如需启用该功能,请
    diff --git a/dita/RTC-NG/API/class_livestreamadvancedfeature.dita b/dita/RTC-NG/API/class_livestreamadvancedfeature.dita index 796e35350c9..9891652f2fd 100644 --- a/dita/RTC-NG/API/class_livestreamadvancedfeature.dita +++ b/dita/RTC-NG/API/class_livestreamadvancedfeature.dita @@ -85,7 +85,7 @@ public:

    -

    如需使用转码推流高级功能,请联系

    +

    如需使用转码推流高级功能,请

    <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 2d834eecf84..067d2f0cdc1 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -95,7 +95,7 @@ - sales@shengwang.cn + 联系销售 From 509d68db6515366705ffb9aa9c5b9a072dbb898d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 29 Aug 2024 10:57:09 +0800 Subject: [PATCH 038/354] hh bugfix 0829 --- dita/RTC-NG/API/class_mediarecorderconfiguration.dita | 2 +- dita/RTC-NG/API/class_rtcsurfaceview.dita | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 035ff4be6cb..70a9a7b59f3 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -144,7 +144,7 @@ struct FMediaRecorderConfiguration storagePath - 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如: + 录制文件在本地保存的绝对路径,需精确到文件名及格式。例如:
    • Windows: C:\Users\<user_name>\AppData\Local\Agora\<process_name>\example.mp4
    • iOS: /App Sandbox/Library/Caches/example.mp4
    • diff --git a/dita/RTC-NG/API/class_rtcsurfaceview.dita b/dita/RTC-NG/API/class_rtcsurfaceview.dita index 22cf014a186..a1342be15fe 100644 --- a/dita/RTC-NG/API/class_rtcsurfaceview.dita +++ b/dita/RTC-NG/API/class_rtcsurfaceview.dita @@ -16,8 +16,8 @@

    为保证渲染出图,调用该组件前,根据当前是否加入频道进行对应操作:

      -
    • 不加入频道时:先调用 ,然后调用
    • -
    • 加入频道时:先开启采集,然后调用
    • +
    • 不加入频道时:先调用 ,然后调用
    • +
    • 加入频道时:先开启采集,然后调用
    From 532874d8c19dd2906617d76d07fc39192e0e34ac Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 30 Aug 2024 17:47:55 +0800 Subject: [PATCH 039/354] 1 --- dita/RTC-NG/API/rtc_api_overview.dita | 6 +-- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 40 +++++++++---------- .../config/keys-rtc-ng-api-harmony.ditamap | 16 ++++---- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 5706fe03ff8..1b773efad7a 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -849,7 +849,7 @@ - + @@ -1424,7 +1424,7 @@
    -
    +
    音效文件播放 @@ -2130,7 +2130,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index c9e84a57428..4cbd4441416 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -265,7 +265,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -419,25 +419,25 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + @@ -641,7 +641,7 @@ - + @@ -663,7 +663,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 42258caa56a..9f1b4421a35 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -636,7 +636,7 @@ - + selectAudioTrack @@ -3877,7 +3877,7 @@ - + onUserEnableVideo @@ -4110,7 +4110,7 @@ - + onAudioEffectFinished @@ -4185,7 +4185,7 @@ - + onAudioRouteChanged @@ -4394,22 +4394,22 @@ - + - onCameraFocusAreaChanged + onCameraFocusPointChanged - + onCameraExposureAreaChanged - + onCameraReady From c00475e27a6850b427ab59dc7b410b5597022d25 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:13:55 +0800 Subject: [PATCH 040/354] 1 --- .../RTC 4.x/release-notes/en-US/native/release_mac_ng.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md index 36ae446c02d..c08547b8885 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md @@ -2,6 +2,12 @@ This version was released on July x, 2024. +## Known issues and limitations + +**macOS 15 Sequoia Beta System Issue** + +When the app path (including the App name) contains non-English characters (such as Chinese characters), the compiled `Metal shader library` may not contain any methods, causing the app to crash. + #### Compatibility changes This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. From 256eadc6f0117cd3fbdf0d5da2b1c1a0814a148f Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 3 Sep 2024 15:18:02 +0800 Subject: [PATCH 041/354] remove empty details section --- dita/RTC-NG/API/api_irtcengine_getconnectionstate.dita | 1 + dita/RTC-NG/API/api_irtcengineex_getconnectionstateex.dita | 1 + 2 files changed, 2 insertions(+) diff --git a/dita/RTC-NG/API/api_irtcengine_getconnectionstate.dita b/dita/RTC-NG/API/api_irtcengine_getconnectionstate.dita index 12710150f4f..b3343b077eb 100644 --- a/dita/RTC-NG/API/api_irtcengine_getconnectionstate.dita +++ b/dita/RTC-NG/API/api_irtcengine_getconnectionstate.dita @@ -25,6 +25,7 @@ Future<ConnectionStateType> getConnectionState();

    +
    调用时机

    加入频道前后均可调用。

    diff --git a/dita/RTC-NG/API/api_irtcengineex_getconnectionstateex.dita b/dita/RTC-NG/API/api_irtcengineex_getconnectionstateex.dita index 88f2be6d7c4..c18c46e9909 100644 --- a/dita/RTC-NG/API/api_irtcengineex_getconnectionstateex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_getconnectionstateex.dita @@ -26,6 +26,7 @@ Future<ConnectionStateType> getConnectionStateEx(RtcConnection connection);

    +
    From 64f813e356002043293de33cda4422a1e41a092b Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 4 Sep 2024 17:31:58 +0800 Subject: [PATCH 042/354] bugfix --- .../RTC-NG/API/class_channelmediaoptions.dita | 373 +++++++++--------- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 4 +- 2 files changed, 187 insertions(+), 190 deletions(-) diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index 7b38b4d4ebc..f7220a95bd2 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -38,63 +38,63 @@ public Boolean isAudioFilterable; } export class ChannelMediaOptions { - + public publishCameraTrack?:boolean; - + public publishSecondaryCameraTrack?:boolean; - + public publishMicrophoneTrack?:boolean; - + public publishScreenCaptureVideo?:boolean; - + public publishScreenCaptureAudio?:boolean; - + public publishCustomAudioTrack?:boolean; - + public publishCustomAudioTrackId?:number; - + public publishCustomVideoTrack?:boolean; - + public publishEncodedVideoTrack?:boolean; - + public publishMediaPlayerAudioTrack?:boolean; - + public publishMediaPlayerVideoTrack?:boolean; - + public publishTranscodedVideoTrack?:boolean; - + public publishMixedAudioTrack?:boolean; - + public autoSubscribeAudio?:boolean; - + public autoSubscribeVideo?:boolean; - + public enableAudioRecordingOrPlayout?:boolean; - + public publishMediaPlayerId?:number; - + public clientRoleType?:number; - + public audienceLatencyLevel?:number; - + public defaultVideoStreamType?:number; - + public channelProfile?:number; - + public audioDelayMs?:number; - + public mediaPlayerAudioDelayMs?:number; - + public enableBuiltInMediaEncryption?:boolean; - + public publishRhythmPlayerTrack?:boolean; - + public isInteractiveAudience?:boolean; - + public customVideoTrackId?:number; - + public isAudioFilterable?:boolean; - + public startPreview?:boolean; public constructor() { } @@ -285,7 +285,7 @@ public: FChannelMediaOptions(){} FChannelMediaOptions(const agora::rtc::ChannelMediaOptions & AgoraData){ - + SET_UEBP_OPTIONAL_VAL_BOOL(this->publishCameraTrack, AgoraData.publishCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishSecondaryCameraTrack, AgoraData.publishSecondaryCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishThirdCameraTrack, AgoraData.publishThirdCameraTrack) @@ -314,15 +314,15 @@ public: SET_UEBP_OPTIONAL_VAL_BOOL(this->enableAudioRecordingOrPlayout, AgoraData.enableAudioRecordingOrPlayout) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->publishMediaPlayerId, AgoraData.publishMediaPlayerId) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->clientRoleType,AgoraData.clientRoleType,static_cast<ECLIENT_ROLE_TYPE>(AgoraData.clientRoleType.value())) - + SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->audienceLatencyLevel, AgoraData.audienceLatencyLevel, static_cast<EAUDIENCE_LATENCY_LEVEL_TYPE>(AgoraData.audienceLatencyLevel.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->defaultVideoStreamType, AgoraData.defaultVideoStreamType, static_cast<EVIDEO_STREAM_TYPE>(AgoraData.defaultVideoStreamType.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->channelProfile, AgoraData.channelProfile, static_cast<ECHANNEL_PROFILE_TYPE>(AgoraData.channelProfile.value())) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->audioDelayMs, AgoraData.audioDelayMs) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->mediaPlayerAudioDelayMs, AgoraData.mediaPlayerAudioDelayMs) - + SET_UEBP_OPTIONAL_VAL_FString(this->token,AgoraData.token) - + SET_UEBP_OPTIONAL_VAL_BOOL(this->enableBuiltInMediaEncryption, AgoraData.enableBuiltInMediaEncryption) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishRhythmPlayerTrack, AgoraData.publishRhythmPlayerTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->isInteractiveAudience, AgoraData.isInteractiveAudience) @@ -731,63 +731,63 @@ class ChannelMediaOptions { public Boolean isAudioFilterable; } export class ChannelMediaOptions { - + public publishCameraTrack?:boolean; - + public publishSecondaryCameraTrack?:boolean; - + public publishMicrophoneTrack?:boolean; - + public publishScreenCaptureVideo?:boolean; - + public publishScreenCaptureAudio?:boolean; - + public publishCustomAudioTrack?:boolean; - + public publishCustomAudioTrackId?:number; - + public publishCustomVideoTrack?:boolean; - + public publishEncodedVideoTrack?:boolean; - + public publishMediaPlayerAudioTrack?:boolean; - + public publishMediaPlayerVideoTrack?:boolean; - + public publishTranscodedVideoTrack?:boolean; - + public publishMixedAudioTrack?:boolean; - + public autoSubscribeAudio?:boolean; - + public autoSubscribeVideo?:boolean; - + public enableAudioRecordingOrPlayout?:boolean; - + public publishMediaPlayerId?:number; - + public clientRoleType?:number; - + public audienceLatencyLevel?:number; - + public defaultVideoStreamType?:number; - + public channelProfile?:number; - + public audioDelayMs?:number; - + public mediaPlayerAudioDelayMs?:number; - + public enableBuiltInMediaEncryption?:boolean; - + public publishRhythmPlayerTrack?:boolean; - + public isInteractiveAudience?:boolean; - + public customVideoTrackId?:number; - + public isAudioFilterable?:boolean; - + public startPreview?:boolean; public constructor() { } @@ -809,7 +809,7 @@ class ChannelMediaOptions { #endif @property(assign, nonatomic) BOOL publishCustomAudioTrack; @property(assign, nonatomic) NSInteger publishCustomAudioTrackId; - + @property(assign, nonatomic) BOOL publishCustomVideoTrack; @property(assign, nonatomic) BOOL publishEncodedVideoTrack; @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @@ -826,14 +826,14 @@ class ChannelMediaOptions { @property(assign, nonatomic) AgoraChannelProfile channelProfile; @property(copy, nonatomic) NSString * _Nullable token; @property(assign, nonatomic) BOOL enableBuiltInMediaEncryption; - + @property(assign, nonatomic) BOOL publishRhythmPlayerTrack; @property(assign, nonatomic) BOOL isInteractiveAudience; - + @property(assign, nonatomic) NSInteger customVideoTrackId; - + @property(assign, nonatomic) BOOL isAudioFilterable; - + @end struct ChannelMediaOptions { Optional<bool> publishCameraTrack; @@ -841,7 +841,7 @@ class ChannelMediaOptions { Optional<bool> publishThirdCameraTrack; Optional<bool> publishFourthCameraTrack; Optional<bool> publishMicrophoneTrack; - + #if defined(__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) Optional<bool> publishScreenCaptureVideo; Optional<bool> publishScreenCaptureAudio; @@ -851,7 +851,7 @@ class ChannelMediaOptions { Optional<bool> publishThirdScreenTrack; Optional<bool> publishFourthScreenTrack; #endif - + Optional<bool> publishCustomAudioTrack; Optional<int> publishCustomAudioTrackId; Optional<bool> publishCustomVideoTrack; @@ -872,11 +872,11 @@ class ChannelMediaOptions { Optional<bool> enableBuiltInMediaEncryption; Optional<bool> publishRhythmPlayerTrack; Optional<bool> isInteractiveAudience; - + Optional<video_track_id_t> customVideoTrackId; - + Optional<bool> isAudioFilterable; - + ChannelMediaOptions() {} ~ChannelMediaOptions() {} USTRUCT(BlueprintType) @@ -979,7 +979,7 @@ public: FChannelMediaOptions(){} FChannelMediaOptions(const agora::rtc::ChannelMediaOptions & AgoraData){ - + SET_UEBP_OPTIONAL_VAL_BOOL(this->publishCameraTrack, AgoraData.publishCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishSecondaryCameraTrack, AgoraData.publishSecondaryCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishThirdCameraTrack, AgoraData.publishThirdCameraTrack) @@ -1008,15 +1008,15 @@ public: SET_UEBP_OPTIONAL_VAL_BOOL(this->enableAudioRecordingOrPlayout, AgoraData.enableAudioRecordingOrPlayout) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->publishMediaPlayerId, AgoraData.publishMediaPlayerId) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->clientRoleType,AgoraData.clientRoleType,static_cast<ECLIENT_ROLE_TYPE>(AgoraData.clientRoleType.value())) - + SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->audienceLatencyLevel, AgoraData.audienceLatencyLevel, static_cast<EAUDIENCE_LATENCY_LEVEL_TYPE>(AgoraData.audienceLatencyLevel.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->defaultVideoStreamType, AgoraData.defaultVideoStreamType, static_cast<EVIDEO_STREAM_TYPE>(AgoraData.defaultVideoStreamType.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->channelProfile, AgoraData.channelProfile, static_cast<ECHANNEL_PROFILE_TYPE>(AgoraData.channelProfile.value())) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->audioDelayMs, AgoraData.audioDelayMs) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->mediaPlayerAudioDelayMs, AgoraData.mediaPlayerAudioDelayMs) - + SET_UEBP_OPTIONAL_VAL_FString(this->token,AgoraData.token) - + SET_UEBP_OPTIONAL_VAL_BOOL(this->enableBuiltInMediaEncryption, AgoraData.enableBuiltInMediaEncryption) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishRhythmPlayerTrack, AgoraData.publishRhythmPlayerTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->isInteractiveAudience, AgoraData.isInteractiveAudience) @@ -1074,7 +1074,7 @@ public: Optional<bool> publishCameraTrack; Optional<bool> publishSecondaryCameraTrack; Optional<bool> publishMicrophoneTrack; - + #if defined(__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) Optional<bool> publishScreenCaptureVideo; Optional<bool> publishScreenCaptureAudio; @@ -1082,7 +1082,7 @@ public: Optional<bool> publishScreenTrack; Optional<bool> publishSecondaryScreenTrack; #endif - + Optional<bool> publishCustomAudioTrack; Optional<int> publishCustomAudioTrackId; Optional<bool> publishCustomVideoTrack; @@ -1102,75 +1102,75 @@ public: Optional<bool> enableBuiltInMediaEncryption; Optional<bool> publishRhythmPlayerTrack; Optional<bool> isInteractiveAudience; - + Optional<video_track_id_t> customVideoTrackId; - + Optional<bool> isAudioFilterable; - + ChannelMediaOptions() {} ~ChannelMediaOptions() {} export class ChannelMediaOptions { - + publishCameraTrack?: boolean; - + publishSecondaryCameraTrack?: boolean; - + publishThirdCameraTrack?: boolean; - + publishFourthCameraTrack?: boolean; - + publishMicrophoneTrack?: boolean; - + publishScreenTrack?: boolean; - + publishSecondaryScreenTrack?: boolean; - + publishThirdScreenTrack?: boolean; - + publishFourthScreenTrack?: boolean; - + publishCustomAudioTrack?: boolean; - + publishCustomAudioTrackId?: number; - + publishCustomVideoTrack?: boolean; - + publishEncodedVideoTrack?: boolean; - + publishMediaPlayerAudioTrack?: boolean; - + publishMediaPlayerVideoTrack?: boolean; - + publishTranscodedVideoTrack?: boolean; - + publishLipSyncTrack?: boolean; - + autoSubscribeAudio?: boolean; - + autoSubscribeVideo?: boolean; - + enableAudioRecordingOrPlayout?: boolean; - + publishMediaPlayerId?: number; - + clientRoleType?: ClientRoleType; - + audienceLatencyLevel?: AudienceLatencyLevelType; - + defaultVideoStreamType?: VideoStreamType; - + channelProfile?: ChannelProfileType; - + token?: string; - + enableBuiltInMediaEncryption?: boolean; - + publishRhythmPlayerTrack?: boolean; - + isInteractiveAudience?: boolean; - + customVideoTrackId?: number; - + isAudioFilterable?: boolean; } public class ChannelMediaOptions : OptionalJsonParse @@ -1207,72 +1207,72 @@ public: public Optional<bool> isInteractiveAudience = new Optional<bool>(); public Optional<video_track_id_t> customVideoTrackId = new Optional<video_track_id_t>(); public Optional<bool> isAudioFilterable = new Optional<bool>(); - + } export class ChannelMediaOptions { - + publishCameraTrack?: boolean; - + publishSecondaryCameraTrack?: boolean; - + publishThirdCameraTrack?: boolean; - + publishFourthCameraTrack?: boolean; - + publishMicrophoneTrack?: boolean; - + publishScreenCaptureVideo?: boolean; - + publishScreenCaptureAudio?: boolean; - + publishSecondaryScreenTrack?: boolean; - + publishThirdScreenTrack?: boolean; - + publishFourthScreenTrack?: boolean; - + publishCustomAudioTrack?: boolean; - + publishCustomAudioTrackId?: number; - + publishCustomVideoTrack?: boolean; - + publishEncodedVideoTrack?: boolean; - + publishMediaPlayerAudioTrack?: boolean; - + publishMediaPlayerVideoTrack?: boolean; - + publishTranscodedVideoTrack?: boolean; - + publishLipSyncTrack?: boolean; - + autoSubscribeAudio?: boolean; - + autoSubscribeVideo?: boolean; - + enableAudioRecordingOrPlayout?: boolean; - + publishMediaPlayerId?: number; - + clientRoleType?: ClientRoleType; - + audienceLatencyLevel?: AudienceLatencyLevelType; - + defaultVideoStreamType?: VideoStreamType; - + channelProfile?: ChannelProfileType; - + token?: string; - + enableBuiltInMediaEncryption?: boolean; - + publishRhythmPlayerTrack?: boolean; - + isInteractiveAudience?: boolean; - + customVideoTrackId?: number; - + isAudioFilterable?: boolean; } @JsonSerializable(explicitToJson: true, includeIfNull: false) @@ -1315,121 +1315,121 @@ public: this.customVideoTrackId, this.isAudioFilterable, this.parameters}); - + @JsonKey(name: 'publishCameraTrack') final bool? publishCameraTrack; - + @JsonKey(name: 'publishSecondaryCameraTrack') final bool? publishSecondaryCameraTrack; - + @JsonKey(name: 'publishThirdCameraTrack') final bool? publishThirdCameraTrack; - + @JsonKey(name: 'publishFourthCameraTrack') final bool? publishFourthCameraTrack; - + @JsonKey(name: 'publishMicrophoneTrack') final bool? publishMicrophoneTrack; - + @JsonKey(name: 'publishScreenCaptureVideo') final bool? publishScreenCaptureVideo; - + @JsonKey(name: 'publishScreenCaptureAudio') final bool? publishScreenCaptureAudio; - + @JsonKey(name: 'publishScreenTrack') final bool? publishScreenTrack; - + @JsonKey(name: 'publishSecondaryScreenTrack') final bool? publishSecondaryScreenTrack; - + @JsonKey(name: 'publishThirdScreenTrack') final bool? publishThirdScreenTrack; - + @JsonKey(name: 'publishFourthScreenTrack') final bool? publishFourthScreenTrack; - + @JsonKey(name: 'publishCustomAudioTrack') final bool? publishCustomAudioTrack; - + @JsonKey(name: 'publishCustomAudioTrackId') final int? publishCustomAudioTrackId; - + @JsonKey(name: 'publishCustomVideoTrack') final bool? publishCustomVideoTrack; - + @JsonKey(name: 'publishEncodedVideoTrack') final bool? publishEncodedVideoTrack; - + @JsonKey(name: 'publishMediaPlayerAudioTrack') final bool? publishMediaPlayerAudioTrack; - + @JsonKey(name: 'publishMediaPlayerVideoTrack') final bool? publishMediaPlayerVideoTrack; - + @JsonKey(name: 'publishTranscodedVideoTrack') final bool? publishTranscodedVideoTrack; - + @JsonKey(name: 'publishMixedAudioTrack') final bool? publishMixedAudioTrack; - + @JsonKey(name: 'publishLipSyncTrack') final bool? publishLipSyncTrack; - + @JsonKey(name: 'autoSubscribeAudio') final bool? autoSubscribeAudio; - + @JsonKey(name: 'autoSubscribeVideo') final bool? autoSubscribeVideo; - + @JsonKey(name: 'enableAudioRecordingOrPlayout') final bool? enableAudioRecordingOrPlayout; - + @JsonKey(name: 'publishMediaPlayerId') final int? publishMediaPlayerId; - + @JsonKey(name: 'clientRoleType') final ClientRoleType? clientRoleType; - + @JsonKey(name: 'audienceLatencyLevel') final AudienceLatencyLevelType? audienceLatencyLevel; - + @JsonKey(name: 'defaultVideoStreamType') final VideoStreamType? defaultVideoStreamType; - + @JsonKey(name: 'channelProfile') final ChannelProfileType? channelProfile; - + @JsonKey(name: 'audioDelayMs') final int? audioDelayMs; - + @JsonKey(name: 'mediaPlayerAudioDelayMs') final int? mediaPlayerAudioDelayMs; - + @JsonKey(name: 'token') final String? token; - + @JsonKey(name: 'enableBuiltInMediaEncryption') final bool? enableBuiltInMediaEncryption; - + @JsonKey(name: 'publishRhythmPlayerTrack') final bool? publishRhythmPlayerTrack; - + @JsonKey(name: 'isInteractiveAudience') final bool? isInteractiveAudience; - + @JsonKey(name: 'customVideoTrackId') final int? customVideoTrackId; - + @JsonKey(name: 'isAudioFilterable') final bool? isAudioFilterable; - + @JsonKey(name: 'parameters') final String? parameters; - + factory ChannelMediaOptions.fromJson(Map<String, dynamic> json) => _$ChannelMediaOptionsFromJson(json); - + Map<String, dynamic> toJson() => _$ChannelMediaOptionsToJson(this); }

    @@ -1596,10 +1596,7 @@ public: publishCustomAudioTrackId - 待发布的自定义音频轨道的 ID。默认值为 0。 - -

    如果你已在 中设置了 sourceNumber 大于 1,SDK 会创建对应数量的自采集音频轨道,并从 0 开始为每一个音频轨道分配一个 ID。

    -
    + 待发布的自定义音频轨道的 ID,默认值为 0。你可以通过 方法来获取自定义音频轨道 ID。
    publishCustomVideoTrack diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 067d2f0cdc1..81cd7944327 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -54,10 +54,10 @@ - + - 使用 Token 鉴权 + 部署 Token 服务器 From b59356eeaa90950b670b07fb388e685013683f71 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:21:16 +0800 Subject: [PATCH 043/354] bugfix0905 --- .../API/api_irtcengine_enableinstantmediarendering.dita | 2 +- .../API/callback_ivideoframeobserver_oncapturevideoframe.dita | 4 ++-- .../callback_ivideoframeobserver_onpreencodevideoframe.dita | 1 + .../API/callback_ivideoframeobserver_onrendervideoframe.dita | 1 + dita/RTC-NG/API/class_externalvideoframe.dita | 4 ++-- dita/RTC-NG/API/class_videoframe.dita | 3 ++- dita/RTC-NG/API/rtc_api_overview.dita | 4 ++-- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 2 +- 8 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enableinstantmediarendering.dita b/dita/RTC-NG/API/api_irtcengine_enableinstantmediarendering.dita index f72f766a8ce..78d6cb4a776 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableinstantmediarendering.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableinstantmediarendering.dita @@ -39,7 +39,7 @@
    调用时机 -

    声网建议你在加入频道前调用该方法。

    +

    该方法需要在加入频道前调用。

    调用限制 diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita index 33a6824c336..435e8bee299 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita @@ -33,7 +33,7 @@

    你可以在回调中获取本地设备采集到的原始视频数据,并可根据需要进行前处理。完成前处理后,你可以在该回调中直接修改 videoFrame,并将返回值设置为 ,即可将修改后的视频数据发送给 SDK。

    -

    如果你需要将处理后的数据发送给 SDK,需要先调用 (0) 方法,将视频处理模式设置为读写模式。

    +

    如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。

    你可以在回调中获取本地设备采集到的原始视频数据。

    @@ -49,7 +49,7 @@
    使用限制
      -
    • 此处获取的视频数据为原始视频数据,即:未经过水印、裁剪和旋转等前处理的视频数据。
    • +
    • 此处获取的视频数据为原始视频数据,即:未经过水印、裁剪和旋转等前处理的视频数据。
    • 如果你获取到的视频数据类型为 RGBA,SDK 不支持对 Alpha 通道的值进行处理。
    • 建议你在修改 videoFrame 中的参数时,需确保修改后的参数跟视频帧缓冲区中的视频帧实际情况保持一致,否则可能导致本地预览画面和对端的视频画面出现非预期的旋转、失真等问题。
    • 建议你通过 C++ API 实现该回调。
    • diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita index 451ec81e26f..a95784a39d6 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita @@ -35,6 +35,7 @@

      完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。

        +
      • 如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。
      • 你需要通过 设置观测 (1 << 2) 后,才能使用该回调获取本地视频编码前的视频数据。
      • 你需要通过 position 参数设置观测 (1 << 2) 后,才能使用该回调获取本地视频编码前的视频数据。
      • 建议你通过 C++ API 实现该回调。
      • diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita index d70b8a27b31..19d1835d2b8 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita @@ -39,6 +39,7 @@

        成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的渲染前的视频数据,然后根据场景需要,对视频数据进行处理。

          +
        • 如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。
        • 如果你获取到的视频数据类型为 RGBA,SDK 不支持对 Alpha 通道的值进行处理。
        • 建议你通过 C++ API 实现该回调。
        • 由于框架的限制,该回调不支持将处理后的视频数据发送回 SDK。
        • diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 34f3c13b7d4..505c28c9634 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -20,7 +20,7 @@ public static final int BUFFER_TYPE_ARRAY = 2; public static final int BUFFER_TYPE_TEXTURE = 3; public AgoraVideoFrame() { - format = 10; + format = 10; timeStamp = 0; stride = 0; height = 0; @@ -46,7 +46,7 @@ public float[] transform; public javax.microedition.khronos.egl.EGLContext eglContext10; public android.opengl.EGLContext eglContext14; - + public byte[] buf; public int cropLeft; public int cropTop; diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index d1cf26dfd1d..b02124fd4ca 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -750,7 +750,8 @@ class VideoFrame {

          采用人像分割算法输出的 Alpha 通道数据。该数据跟视频帧的尺寸一致,每个像素点的取值范围为 [0,255],其中 0 代表背景;255 代表前景(人像)。

          你可以通过设置该参数,实现将视频背景自渲染为各种效果,例如:透明、纯色、图片、视频等。

          - 在自定义视频渲染场景下,需确保传入的视频帧和 alphaBuffer 均为 Full Range 类型;其他类型可能导致 Alpha 数据渲染不正常。 +
          • 在自定义视频渲染场景下,需确保传入的视频帧和 alphaBuffer 均为 Full Range 类型;其他类型可能导致 Alpha 数据渲染不正常。
          • +
          • 请务必确保 alphaBufferalphaBuf 跟视频帧的尺寸 (width × height) 完全一致,否则可能会导致 App 崩溃。
          diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 05d2755a4c8..57999b2a9dd 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -951,9 +951,9 @@ - + - (仅适用于 Windows 和 macOS) +
    diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 4c40d818993..2f2a04751c0 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2465,7 +2465,7 @@ - + From 29807411d7c99b76b581bccaca9816efff7388d9 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:23:49 +0800 Subject: [PATCH 044/354] 1 --- dita/RTC-NG/API/class_videoframe.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index b02124fd4ca..0e2de8f9661 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -750,7 +750,7 @@ class VideoFrame {

    采用人像分割算法输出的 Alpha 通道数据。该数据跟视频帧的尺寸一致,每个像素点的取值范围为 [0,255],其中 0 代表背景;255 代表前景(人像)。

    你可以通过设置该参数,实现将视频背景自渲染为各种效果,例如:透明、纯色、图片、视频等。

    -
    • 在自定义视频渲染场景下,需确保传入的视频帧和 alphaBuffer 均为 Full Range 类型;其他类型可能导致 Alpha 数据渲染不正常。
    • +
      • 在自定义视频渲染场景下,需确保传入的视频帧和 alphaBuffer 均为 Full Range 类型;其他类型可能导致 Alpha 数据渲染不正常。
      • 请务必确保 alphaBufferalphaBuf 跟视频帧的尺寸 (width × height) 完全一致,否则可能会导致 App 崩溃。
      From 9be5811da46a97797a1622eb8c38105d5981e7f2 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 29 Aug 2024 15:25:42 +0800 Subject: [PATCH 045/354] Create api_irtcengine_setlocalvideodatasourceposition.dita --- ...ngine_setlocalvideodatasourceposition.dita | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita diff --git a/dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita b/dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita new file mode 100644 index 00000000000..64923617b9e --- /dev/null +++ b/dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="SetLocalVideoDataSourcePosition"/> + + + + + + + + + +
      +

      + + + + + + + + +

      +
      +
      +
      + +
      自从
      +
      v
      +
      +
      +

      +

      +
      + 适用场景 +

      +

      +
      + 调用时机 +

      +

      +
      + 调用限制 +

      +

      + +
      + 参数 + + + + + +
      +
      + <ph keyref="return-section-title"/> +

      方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

      +
        +
      • 0: 方法调用成功。
      • +
      • < 0: 方法调用失败。详见了解详情和解决建议。
      • +
      +
      +
      From 202611608da652efce6a2ca2724e99c37d46a2af Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 29 Aug 2024 17:56:28 +0800 Subject: [PATCH 046/354] add --- ...ngine_setlocalvideodatasourceposition.dita | 36 ++++++------------- dita/RTC-NG/API/rtc_api_overview.dita | 4 +++ dita/RTC-NG/RTC_NG_API_Unity.ditamap | 1 + .../config/keys-rtc-ng-api-unity.ditamap | 7 ++++ .../config/relations-rtc-ng-api.ditamap | 1 + 5 files changed, 24 insertions(+), 25 deletions(-) rename dita/RTC-NG/{ => API}/api_irtcengine_setlocalvideodatasourceposition.dita (63%) diff --git a/dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita similarity index 63% rename from dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita rename to dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita index 64923617b9e..7696f2c501b 100644 --- a/dita/RTC-NG/api_irtcengine_setlocalvideodatasourceposition.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita @@ -1,12 +1,12 @@ - <ph keyref="SetLocalVideoDataSourcePosition"/> - + <ph keyref="setLocalVideoDataSourcePosition"/> + 设置视频帧的观测位置。 - + @@ -19,41 +19,27 @@ - + public abstract int SetLocalVideoDataSourcePosition(VIDEO_MODULE_POSITION position);

    -
    -
    - -
    自从
    -
    v
    -
    -
    -

    -

    -
    - 适用场景 -

    -

    调用时机 -

    +

    该方法需要在创建第一个 视图之前调用。

    调用限制 -

    -

    -
    参数 - - + position + 视频帧的观测位置,详见 。 + +
    • 该方法目前仅支持将观测位置设为
    • +
    • 处获取的视频帧未经裁剪且帧率较高, 位置获取的视频帧经过发送前的裁剪,帧率小于或等于摄像头采集的帧率。
    diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 57999b2a9dd..4774af050a7 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -968,6 +968,10 @@ + + + + diff --git a/dita/RTC-NG/RTC_NG_API_Unity.ditamap b/dita/RTC-NG/RTC_NG_API_Unity.ditamap index d49f50f0632..319cac84589 100644 --- a/dita/RTC-NG/RTC_NG_API_Unity.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unity.ditamap @@ -287,6 +287,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 4a5fde373e0..b6083d7ce2f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -1184,6 +1184,13 @@ + + + + SetLocalVideoDataSourcePosition + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 2f2a04751c0..d189da546bc 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2435,6 +2435,7 @@ + From 5585e4e1e1b1771f80f3ea3d41a858379e5f3cf4 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:57:01 +0800 Subject: [PATCH 047/354] fix --- .../API/callback_ivideoframeobserver_oncapturevideoframe.dita | 2 +- .../API/callback_ivideoframeobserver_onpreencodevideoframe.dita | 2 +- .../API/callback_ivideoframeobserver_onrendervideoframe.dita | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita index 435e8bee299..6fef85a9863 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita @@ -33,7 +33,7 @@

    你可以在回调中获取本地设备采集到的原始视频数据,并可根据需要进行前处理。完成前处理后,你可以在该回调中直接修改 videoFrame,并将返回值设置为 ,即可将修改后的视频数据发送给 SDK。

    -

    如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。

    +

    如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。

    你可以在回调中获取本地设备采集到的原始视频数据。

    diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita index a95784a39d6..3026c9d2c72 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onpreencodevideoframe.dita @@ -35,7 +35,7 @@

    完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。

      -
    • 如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。
    • +
    • 如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。
    • 你需要通过 设置观测 (1 << 2) 后,才能使用该回调获取本地视频编码前的视频数据。
    • 你需要通过 position 参数设置观测 (1 << 2) 后,才能使用该回调获取本地视频编码前的视频数据。
    • 建议你通过 C++ API 实现该回调。
    • diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita index 19d1835d2b8..7647ebb013e 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita @@ -39,7 +39,7 @@

      成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的渲染前的视频数据,然后根据场景需要,对视频数据进行处理。

        -
      • 如果你需要将处理后的数据发送给 SDK,需要先调用 (1) 方法,将视频处理模式设置为读写模式。
      • +
      • 如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。
      • 如果你获取到的视频数据类型为 RGBA,SDK 不支持对 Alpha 通道的值进行处理。
      • 建议你通过 C++ API 实现该回调。
      • 由于框架的限制,该回调不支持将处理后的视频数据发送回 SDK。
      • From 28b67c155ccf639f5521bb7f377cbca1ebbf127a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 5 Sep 2024 15:14:52 +0800 Subject: [PATCH 048/354] Update api_irtcengine_setlocalvideodatasourceposition.dita --- .../API/api_irtcengine_setlocalvideodatasourceposition.dita | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita index 7696f2c501b..f2f2dd39658 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita @@ -2,7 +2,7 @@ <ph keyref="setLocalVideoDataSourcePosition"/> - 设置视频帧的观测位置。 + 设置本地视频帧的观测位置。 @@ -23,10 +23,11 @@

    +
    调用时机

    该方法需要在创建第一个 视图之前调用。

    -
    +
    调用限制

    该方法仅支持观测通过 及其子类渲染的本地视频数据。

    From baf19a90f26ed893fc47543f02af4f9a6eee7e51 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 5 Sep 2024 15:16:42 +0800 Subject: [PATCH 049/354] Update api_irtcengine_setlocalvideodatasourceposition.dita --- .../API/api_irtcengine_setlocalvideodatasourceposition.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita index f2f2dd39658..681d5cf2bab 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalvideodatasourceposition.dita @@ -39,8 +39,8 @@ position 视频帧的观测位置,详见 -
    • 该方法目前仅支持将观测位置设为
    • -
    • 处获取的视频帧未经裁剪且帧率较高, 位置获取的视频帧经过发送前的裁剪,帧率小于或等于摄像头采集的帧率。
    +
    • 该方法目前仅支持将观测位置设为
    • +
    • 处获取的视频帧未经裁剪且帧率较高, 位置获取的视频帧经过发送前的裁剪,帧率小于或等于摄像头采集的帧率。
    From 8734300cff6f8bc177c9640991eff4c69ba00e97 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Thu, 5 Sep 2024 07:30:22 +0000 Subject: [PATCH 050/354] Sync cn prototype to en prototype --- .../RTC-NG/API/class_channelmediaoptions.dita | 368 +++++++++--------- .../RTC-NG/API/class_externalvideoframe.dita | 4 +- .../config/keys-rtc-ng-api-unity.ditamap | 7 + 3 files changed, 193 insertions(+), 186 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita index c8d41a0490a..832882cf544 100644 --- a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -38,63 +38,63 @@ public Boolean isAudioFilterable; } export class ChannelMediaOptions { - + public publishCameraTrack?:boolean; - + public publishSecondaryCameraTrack?:boolean; - + public publishMicrophoneTrack?:boolean; - + public publishScreenCaptureVideo?:boolean; - + public publishScreenCaptureAudio?:boolean; - + public publishCustomAudioTrack?:boolean; - + public publishCustomAudioTrackId?:number; - + public publishCustomVideoTrack?:boolean; - + public publishEncodedVideoTrack?:boolean; - + public publishMediaPlayerAudioTrack?:boolean; - + public publishMediaPlayerVideoTrack?:boolean; - + public publishTranscodedVideoTrack?:boolean; - + public publishMixedAudioTrack?:boolean; - + public autoSubscribeAudio?:boolean; - + public autoSubscribeVideo?:boolean; - + public enableAudioRecordingOrPlayout?:boolean; - + public publishMediaPlayerId?:number; - + public clientRoleType?:number; - + public audienceLatencyLevel?:number; - + public defaultVideoStreamType?:number; - + public channelProfile?:number; - + public audioDelayMs?:number; - + public mediaPlayerAudioDelayMs?:number; - + public enableBuiltInMediaEncryption?:boolean; - + public publishRhythmPlayerTrack?:boolean; - + public isInteractiveAudience?:boolean; - + public customVideoTrackId?:number; - + public isAudioFilterable?:boolean; - + public startPreview?:boolean; public constructor() { } @@ -285,7 +285,7 @@ public: FChannelMediaOptions(){} FChannelMediaOptions(const agora::rtc::ChannelMediaOptions & AgoraData){ - + SET_UEBP_OPTIONAL_VAL_BOOL(this->publishCameraTrack, AgoraData.publishCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishSecondaryCameraTrack, AgoraData.publishSecondaryCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishThirdCameraTrack, AgoraData.publishThirdCameraTrack) @@ -314,15 +314,15 @@ public: SET_UEBP_OPTIONAL_VAL_BOOL(this->enableAudioRecordingOrPlayout, AgoraData.enableAudioRecordingOrPlayout) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->publishMediaPlayerId, AgoraData.publishMediaPlayerId) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->clientRoleType,AgoraData.clientRoleType,static_cast<ECLIENT_ROLE_TYPE>(AgoraData.clientRoleType.value())) - + SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->audienceLatencyLevel, AgoraData.audienceLatencyLevel, static_cast<EAUDIENCE_LATENCY_LEVEL_TYPE>(AgoraData.audienceLatencyLevel.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->defaultVideoStreamType, AgoraData.defaultVideoStreamType, static_cast<EVIDEO_STREAM_TYPE>(AgoraData.defaultVideoStreamType.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->channelProfile, AgoraData.channelProfile, static_cast<ECHANNEL_PROFILE_TYPE>(AgoraData.channelProfile.value())) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->audioDelayMs, AgoraData.audioDelayMs) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->mediaPlayerAudioDelayMs, AgoraData.mediaPlayerAudioDelayMs) - + SET_UEBP_OPTIONAL_VAL_FString(this->token,AgoraData.token) - + SET_UEBP_OPTIONAL_VAL_BOOL(this->enableBuiltInMediaEncryption, AgoraData.enableBuiltInMediaEncryption) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishRhythmPlayerTrack, AgoraData.publishRhythmPlayerTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->isInteractiveAudience, AgoraData.isInteractiveAudience) @@ -731,63 +731,63 @@ class ChannelMediaOptions { public Boolean isAudioFilterable; } export class ChannelMediaOptions { - + public publishCameraTrack?:boolean; - + public publishSecondaryCameraTrack?:boolean; - + public publishMicrophoneTrack?:boolean; - + public publishScreenCaptureVideo?:boolean; - + public publishScreenCaptureAudio?:boolean; - + public publishCustomAudioTrack?:boolean; - + public publishCustomAudioTrackId?:number; - + public publishCustomVideoTrack?:boolean; - + public publishEncodedVideoTrack?:boolean; - + public publishMediaPlayerAudioTrack?:boolean; - + public publishMediaPlayerVideoTrack?:boolean; - + public publishTranscodedVideoTrack?:boolean; - + public publishMixedAudioTrack?:boolean; - + public autoSubscribeAudio?:boolean; - + public autoSubscribeVideo?:boolean; - + public enableAudioRecordingOrPlayout?:boolean; - + public publishMediaPlayerId?:number; - + public clientRoleType?:number; - + public audienceLatencyLevel?:number; - + public defaultVideoStreamType?:number; - + public channelProfile?:number; - + public audioDelayMs?:number; - + public mediaPlayerAudioDelayMs?:number; - + public enableBuiltInMediaEncryption?:boolean; - + public publishRhythmPlayerTrack?:boolean; - + public isInteractiveAudience?:boolean; - + public customVideoTrackId?:number; - + public isAudioFilterable?:boolean; - + public startPreview?:boolean; public constructor() { } @@ -809,7 +809,7 @@ class ChannelMediaOptions { #endif @property(assign, nonatomic) BOOL publishCustomAudioTrack; @property(assign, nonatomic) NSInteger publishCustomAudioTrackId; - + @property(assign, nonatomic) BOOL publishCustomVideoTrack; @property(assign, nonatomic) BOOL publishEncodedVideoTrack; @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @@ -826,14 +826,14 @@ class ChannelMediaOptions { @property(assign, nonatomic) AgoraChannelProfile channelProfile; @property(copy, nonatomic) NSString * _Nullable token; @property(assign, nonatomic) BOOL enableBuiltInMediaEncryption; - + @property(assign, nonatomic) BOOL publishRhythmPlayerTrack; @property(assign, nonatomic) BOOL isInteractiveAudience; - + @property(assign, nonatomic) NSInteger customVideoTrackId; - + @property(assign, nonatomic) BOOL isAudioFilterable; - + @end struct ChannelMediaOptions { Optional<bool> publishCameraTrack; @@ -841,7 +841,7 @@ class ChannelMediaOptions { Optional<bool> publishThirdCameraTrack; Optional<bool> publishFourthCameraTrack; Optional<bool> publishMicrophoneTrack; - + #if defined(__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) Optional<bool> publishScreenCaptureVideo; Optional<bool> publishScreenCaptureAudio; @@ -851,7 +851,7 @@ class ChannelMediaOptions { Optional<bool> publishThirdScreenTrack; Optional<bool> publishFourthScreenTrack; #endif - + Optional<bool> publishCustomAudioTrack; Optional<int> publishCustomAudioTrackId; Optional<bool> publishCustomVideoTrack; @@ -872,11 +872,11 @@ class ChannelMediaOptions { Optional<bool> enableBuiltInMediaEncryption; Optional<bool> publishRhythmPlayerTrack; Optional<bool> isInteractiveAudience; - + Optional<video_track_id_t> customVideoTrackId; - + Optional<bool> isAudioFilterable; - + ChannelMediaOptions() {} ~ChannelMediaOptions() {} USTRUCT(BlueprintType) @@ -979,7 +979,7 @@ public: FChannelMediaOptions(){} FChannelMediaOptions(const agora::rtc::ChannelMediaOptions & AgoraData){ - + SET_UEBP_OPTIONAL_VAL_BOOL(this->publishCameraTrack, AgoraData.publishCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishSecondaryCameraTrack, AgoraData.publishSecondaryCameraTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishThirdCameraTrack, AgoraData.publishThirdCameraTrack) @@ -1008,15 +1008,15 @@ public: SET_UEBP_OPTIONAL_VAL_BOOL(this->enableAudioRecordingOrPlayout, AgoraData.enableAudioRecordingOrPlayout) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->publishMediaPlayerId, AgoraData.publishMediaPlayerId) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->clientRoleType,AgoraData.clientRoleType,static_cast<ECLIENT_ROLE_TYPE>(AgoraData.clientRoleType.value())) - + SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->audienceLatencyLevel, AgoraData.audienceLatencyLevel, static_cast<EAUDIENCE_LATENCY_LEVEL_TYPE>(AgoraData.audienceLatencyLevel.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->defaultVideoStreamType, AgoraData.defaultVideoStreamType, static_cast<EVIDEO_STREAM_TYPE>(AgoraData.defaultVideoStreamType.value())) SET_UEBP_OPTIONAL_VAL_ASSIGN_VAL(this->channelProfile, AgoraData.channelProfile, static_cast<ECHANNEL_PROFILE_TYPE>(AgoraData.channelProfile.value())) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->audioDelayMs, AgoraData.audioDelayMs) SET_UEBP_OPTIONAL_VAL_DIR_ASSIGN(this->mediaPlayerAudioDelayMs, AgoraData.mediaPlayerAudioDelayMs) - + SET_UEBP_OPTIONAL_VAL_FString(this->token,AgoraData.token) - + SET_UEBP_OPTIONAL_VAL_BOOL(this->enableBuiltInMediaEncryption, AgoraData.enableBuiltInMediaEncryption) SET_UEBP_OPTIONAL_VAL_BOOL(this->publishRhythmPlayerTrack, AgoraData.publishRhythmPlayerTrack) SET_UEBP_OPTIONAL_VAL_BOOL(this->isInteractiveAudience, AgoraData.isInteractiveAudience) @@ -1074,7 +1074,7 @@ public: Optional<bool> publishCameraTrack; Optional<bool> publishSecondaryCameraTrack; Optional<bool> publishMicrophoneTrack; - + #if defined(__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) Optional<bool> publishScreenCaptureVideo; Optional<bool> publishScreenCaptureAudio; @@ -1082,7 +1082,7 @@ public: Optional<bool> publishScreenTrack; Optional<bool> publishSecondaryScreenTrack; #endif - + Optional<bool> publishCustomAudioTrack; Optional<int> publishCustomAudioTrackId; Optional<bool> publishCustomVideoTrack; @@ -1102,75 +1102,75 @@ public: Optional<bool> enableBuiltInMediaEncryption; Optional<bool> publishRhythmPlayerTrack; Optional<bool> isInteractiveAudience; - + Optional<video_track_id_t> customVideoTrackId; - + Optional<bool> isAudioFilterable; - + ChannelMediaOptions() {} ~ChannelMediaOptions() {} export class ChannelMediaOptions { - + publishCameraTrack?: boolean; - + publishSecondaryCameraTrack?: boolean; - + publishThirdCameraTrack?: boolean; - + publishFourthCameraTrack?: boolean; - + publishMicrophoneTrack?: boolean; - + publishScreenTrack?: boolean; - + publishSecondaryScreenTrack?: boolean; - + publishThirdScreenTrack?: boolean; - + publishFourthScreenTrack?: boolean; - + publishCustomAudioTrack?: boolean; - + publishCustomAudioTrackId?: number; - + publishCustomVideoTrack?: boolean; - + publishEncodedVideoTrack?: boolean; - + publishMediaPlayerAudioTrack?: boolean; - + publishMediaPlayerVideoTrack?: boolean; - + publishTranscodedVideoTrack?: boolean; - + publishLipSyncTrack?: boolean; - + autoSubscribeAudio?: boolean; - + autoSubscribeVideo?: boolean; - + enableAudioRecordingOrPlayout?: boolean; - + publishMediaPlayerId?: number; - + clientRoleType?: ClientRoleType; - + audienceLatencyLevel?: AudienceLatencyLevelType; - + defaultVideoStreamType?: VideoStreamType; - + channelProfile?: ChannelProfileType; - + token?: string; - + enableBuiltInMediaEncryption?: boolean; - + publishRhythmPlayerTrack?: boolean; - + isInteractiveAudience?: boolean; - + customVideoTrackId?: number; - + isAudioFilterable?: boolean; } public class ChannelMediaOptions : OptionalJsonParse @@ -1207,72 +1207,72 @@ public: public Optional<bool> isInteractiveAudience = new Optional<bool>(); public Optional<video_track_id_t> customVideoTrackId = new Optional<video_track_id_t>(); public Optional<bool> isAudioFilterable = new Optional<bool>(); - + } export class ChannelMediaOptions { - + publishCameraTrack?: boolean; - + publishSecondaryCameraTrack?: boolean; - + publishThirdCameraTrack?: boolean; - + publishFourthCameraTrack?: boolean; - + publishMicrophoneTrack?: boolean; - + publishScreenCaptureVideo?: boolean; - + publishScreenCaptureAudio?: boolean; - + publishSecondaryScreenTrack?: boolean; - + publishThirdScreenTrack?: boolean; - + publishFourthScreenTrack?: boolean; - + publishCustomAudioTrack?: boolean; - + publishCustomAudioTrackId?: number; - + publishCustomVideoTrack?: boolean; - + publishEncodedVideoTrack?: boolean; - + publishMediaPlayerAudioTrack?: boolean; - + publishMediaPlayerVideoTrack?: boolean; - + publishTranscodedVideoTrack?: boolean; - + publishLipSyncTrack?: boolean; - + autoSubscribeAudio?: boolean; - + autoSubscribeVideo?: boolean; - + enableAudioRecordingOrPlayout?: boolean; - + publishMediaPlayerId?: number; - + clientRoleType?: ClientRoleType; - + audienceLatencyLevel?: AudienceLatencyLevelType; - + defaultVideoStreamType?: VideoStreamType; - + channelProfile?: ChannelProfileType; - + token?: string; - + enableBuiltInMediaEncryption?: boolean; - + publishRhythmPlayerTrack?: boolean; - + isInteractiveAudience?: boolean; - + customVideoTrackId?: number; - + isAudioFilterable?: boolean; } @JsonSerializable(explicitToJson: true, includeIfNull: false) @@ -1315,121 +1315,121 @@ public: this.customVideoTrackId, this.isAudioFilterable, this.parameters}); - + @JsonKey(name: 'publishCameraTrack') final bool? publishCameraTrack; - + @JsonKey(name: 'publishSecondaryCameraTrack') final bool? publishSecondaryCameraTrack; - + @JsonKey(name: 'publishThirdCameraTrack') final bool? publishThirdCameraTrack; - + @JsonKey(name: 'publishFourthCameraTrack') final bool? publishFourthCameraTrack; - + @JsonKey(name: 'publishMicrophoneTrack') final bool? publishMicrophoneTrack; - + @JsonKey(name: 'publishScreenCaptureVideo') final bool? publishScreenCaptureVideo; - + @JsonKey(name: 'publishScreenCaptureAudio') final bool? publishScreenCaptureAudio; - + @JsonKey(name: 'publishScreenTrack') final bool? publishScreenTrack; - + @JsonKey(name: 'publishSecondaryScreenTrack') final bool? publishSecondaryScreenTrack; - + @JsonKey(name: 'publishThirdScreenTrack') final bool? publishThirdScreenTrack; - + @JsonKey(name: 'publishFourthScreenTrack') final bool? publishFourthScreenTrack; - + @JsonKey(name: 'publishCustomAudioTrack') final bool? publishCustomAudioTrack; - + @JsonKey(name: 'publishCustomAudioTrackId') final int? publishCustomAudioTrackId; - + @JsonKey(name: 'publishCustomVideoTrack') final bool? publishCustomVideoTrack; - + @JsonKey(name: 'publishEncodedVideoTrack') final bool? publishEncodedVideoTrack; - + @JsonKey(name: 'publishMediaPlayerAudioTrack') final bool? publishMediaPlayerAudioTrack; - + @JsonKey(name: 'publishMediaPlayerVideoTrack') final bool? publishMediaPlayerVideoTrack; - + @JsonKey(name: 'publishTranscodedVideoTrack') final bool? publishTranscodedVideoTrack; - + @JsonKey(name: 'publishMixedAudioTrack') final bool? publishMixedAudioTrack; - + @JsonKey(name: 'publishLipSyncTrack') final bool? publishLipSyncTrack; - + @JsonKey(name: 'autoSubscribeAudio') final bool? autoSubscribeAudio; - + @JsonKey(name: 'autoSubscribeVideo') final bool? autoSubscribeVideo; - + @JsonKey(name: 'enableAudioRecordingOrPlayout') final bool? enableAudioRecordingOrPlayout; - + @JsonKey(name: 'publishMediaPlayerId') final int? publishMediaPlayerId; - + @JsonKey(name: 'clientRoleType') final ClientRoleType? clientRoleType; - + @JsonKey(name: 'audienceLatencyLevel') final AudienceLatencyLevelType? audienceLatencyLevel; - + @JsonKey(name: 'defaultVideoStreamType') final VideoStreamType? defaultVideoStreamType; - + @JsonKey(name: 'channelProfile') final ChannelProfileType? channelProfile; - + @JsonKey(name: 'audioDelayMs') final int? audioDelayMs; - + @JsonKey(name: 'mediaPlayerAudioDelayMs') final int? mediaPlayerAudioDelayMs; - + @JsonKey(name: 'token') final String? token; - + @JsonKey(name: 'enableBuiltInMediaEncryption') final bool? enableBuiltInMediaEncryption; - + @JsonKey(name: 'publishRhythmPlayerTrack') final bool? publishRhythmPlayerTrack; - + @JsonKey(name: 'isInteractiveAudience') final bool? isInteractiveAudience; - + @JsonKey(name: 'customVideoTrackId') final int? customVideoTrackId; - + @JsonKey(name: 'isAudioFilterable') final bool? isAudioFilterable; - + @JsonKey(name: 'parameters') final String? parameters; - + factory ChannelMediaOptions.fromJson(Map<String, dynamic> json) => _$ChannelMediaOptionsFromJson(json); - + Map<String, dynamic> toJson() => _$ChannelMediaOptionsToJson(this); }

    diff --git a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita index 4808e686945..cede51769e3 100644 --- a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita @@ -20,7 +20,7 @@ public static final int BUFFER_TYPE_ARRAY = 2; public static final int BUFFER_TYPE_TEXTURE = 3; public AgoraVideoFrame() { - format = 10; + format = 10; timeStamp = 0; stride = 0; height = 0; @@ -46,7 +46,7 @@ public float[] transform; public javax.microedition.khronos.egl.EGLContext eglContext10; public android.opengl.EGLContext eglContext14; - + public byte[] buf; public int cropLeft; public int cropTop; diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 4a5fde373e0..b6083d7ce2f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -1184,6 +1184,13 @@ + + + + SetLocalVideoDataSourcePosition + + + From cbce12e439f8166cc3ff90eaa99fd883469f2395 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:07:55 +0800 Subject: [PATCH 051/354] format --- dita/RTC-NG/API/enum_videocodectype.dita | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/dita/RTC-NG/API/enum_videocodectype.dita b/dita/RTC-NG/API/enum_videocodectype.dita index b49a248a3e8..3896a62be3b 100644 --- a/dita/RTC-NG/API/enum_videocodectype.dita +++ b/dita/RTC-NG/API/enum_videocodectype.dita @@ -25,10 +25,7 @@ - -

    6:Generic。

    -

    本类型主要用于传输视频裸数据(比如用户已加密的视频帧),该类型视频帧以回调的形式返回给用户,需要用户自行解码与渲染。

    -
    + 6:Generic。本类型主要用于传输视频裸数据(比如用户已加密的视频帧),该类型视频帧以回调的形式返回给用户,需要用户自行解码与渲染。
    @@ -36,9 +33,7 @@ - 20:Generic JPEG。 -

    本类型所需的算力较小,可用于算力有限的 IoT 设备。

    -
    + 20:Generic JPEG。本类型所需的算力较小,可用于算力有限的 IoT 设备。
    From b6cc3bd0490f6c2b0cfe0c528e81c3b8cb4efdac Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:45:38 +0800 Subject: [PATCH 052/354] 1 --- dita/RTC-NG/API/api_ibasespatialaudioengine_setzones.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_ibasespatialaudioengine_setzones.dita b/dita/RTC-NG/API/api_ibasespatialaudioengine_setzones.dita index 4c04777f28c..8efdd6bddce 100644 --- a/dita/RTC-NG/API/api_ibasespatialaudioengine_setzones.dita +++ b/dita/RTC-NG/API/api_ibasespatialaudioengine_setzones.dita @@ -46,7 +46,7 @@ zones - 隔声区域的设置。详见 。当你将该参数设置为 时,表示清除所有隔声区域。 + 隔声区域的设置。详见 。当你将该参数设置为 时,表示清除所有隔声区域。 在 Windows 平台上,需确保 zones 数组中的成员个数与 zoneCount 的值相等,否则会导致崩溃。 From 26948d36b474306e40d6bb34671a936b9ba853f6 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:49:31 +0800 Subject: [PATCH 053/354] 1 --- dita/RTC-NG/API/api_irtcengine_statechanged.dita | 1 - 1 file changed, 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_statechanged.dita b/dita/RTC-NG/API/api_irtcengine_statechanged.dita index 1d2ee65ac53..a0dc38a11ad 100644 --- a/dita/RTC-NG/API/api_irtcengine_statechanged.dita +++ b/dita/RTC-NG/API/api_irtcengine_statechanged.dita @@ -50,7 +50,6 @@

    设备状态:

    • 0:设备就绪。
    • -
    • 1:设备正在使用。
    • 3:设备已插入。
    • 8:设备被拔出。

    From 5f4208dd3983338afb2f43b024ee20b073ae75c2 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:48:16 +0800 Subject: [PATCH 054/354] add missing APIs --- ...engine_adjustuserplaybacksignalvolume.dita | 2 +- .../api_irtcengine_enabledualstreammode2.dita | 4 +- ..._irtcengine_pauseallchannelmediarelay.dita | 2 +- ...irtcengine_resumeallchannelmediarelay.dita | 2 +- .../api_irtcengineex_setdualstreammodeex.dita | 2 +- ...neex_startorupdatechannelmediarelayex.dita | 2 +- ...ineeventhandler_onaudioeffectfinished.dita | 2 +- ...nthandler_oncameraexposureareachanged.dita | 6 +- ...eventhandler_oncamerafocusareachanged.dita | 17 ++++- ...nthandler_onlocalvideotranscodererror.dita | 8 +-- ...cengineeventhandler_onuserenablevideo.dita | 4 +- dita/RTC-NG/API/class_remoteaudiostats.dita | 2 + dita/RTC-NG/API/rtc_api_overview.dita | 14 ++-- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 12 ++-- .../config/keys-rtc-ng-api-harmony.ditamap | 72 ++++++++++++++++--- .../config/relations-rtc-ng-api.ditamap | 8 +-- 16 files changed, 114 insertions(+), 45 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita b/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita index 70fc80e1bb7..dbfeaea4931 100644 --- a/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita +++ b/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita @@ -14,7 +14,7 @@

    public abstract int adjustUserPlaybackSignalVolume(int uid, int volume); - + public abstract adjustUserPlaybackSignalVolume(uid:number,volume:number):number; - (int)adjustUserPlaybackSignalVolume:(NSUInteger)uid volume:(int)volume; virtual int adjustUserPlaybackSignalVolume(unsigned int uid, int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_enabledualstreammode2.dita b/dita/RTC-NG/API/api_irtcengine_enabledualstreammode2.dita index 99153cc7f08..cc552818811 100644 --- a/dita/RTC-NG/API/api_irtcengine_enabledualstreammode2.dita +++ b/dita/RTC-NG/API/api_irtcengine_enabledualstreammode2.dita @@ -48,7 +48,7 @@

    • 该方法适用于发送端发送的所有类型的流,包括且不限于来自摄像头采集的视频流、屏幕共享流、自定义采集的视频流。
    • -
    • 如果需要在多频道场景下开启视频双流,可以调用 方法。
    • +
    • 如果需要在多频道场景下开启视频双流,可以调用 方法。
    • 该方法可以在加入频道前后调用。
    @@ -78,4 +78,4 @@
  • < 0: 方法调用失败。 详见了解详情和解决建议。
  • - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita b/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita index 947c2a9067a..d7cf68a610b 100644 --- a/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita +++ b/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita @@ -14,7 +14,7 @@

    public abstract int pauseAllChannelMediaRelay(); - + public abstract pauseAllChannelMediaRelay():number; - (int)pauseAllChannelMediaRelay; virtual int pauseAllChannelMediaRelay() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita b/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita index ea292434cee..6d46033dea7 100644 --- a/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita +++ b/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita @@ -14,7 +14,7 @@

    public abstract int resumeAllChannelMediaRelay(); - + public abstract resumeAllChannelMediaRelay():number; - (int)resumeAllChannelMediaRelay; virtual int resumeAllChannelMediaRelay() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita b/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita index 30fa81f7cc5..8d5644fcff6 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita @@ -15,7 +15,7 @@

    public abstract int setDualStreamModeEx(Constants.SimulcastStreamMode mode, SimulcastStreamConfig streamConfig, RtcConnection connection); - + public abstract setDualStreamModeEx(mode:Constants.SimulcastStreamMode,streamConfig:SimulcastStreamConfig,connection:RtcConnection):number; - (int)setDualStreamModeEx:(AgoraSimulcastStreamMode)mode streamConfig:(AgoraSimulcastStreamConfig*)streamConfig connection:(AgoraRtcConnection* _Nonnull)connection; diff --git a/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita b/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita index a787f1acebf..1beecf3d4bd 100644 --- a/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita @@ -15,7 +15,7 @@

    public abstract int startOrUpdateChannelMediaRelayEx( ChannelMediaRelayConfiguration channelMediaRelayConfiguration, RtcConnection connection); - + public abstract startOrUpdateChannelMediaRelayEx(channelMediaRelayConfiguration:ChannelMediaRelayConfiguration,connection:RtcConnection):number; - (int)startOrUpdateChannelMediaRelayEx:(AgoraChannelMediaRelayConfiguration * _Nonnull)config connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(startOrUpdateChannelMediaRelayEx(_:connection:)); virtual int startOrUpdateChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|RtcEngineProxy") diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita index f231638de13..870195fece6 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita @@ -14,7 +14,7 @@

    public void onAudioEffectFinished(int soundId) {} - + onAudioEffectFinished?:(soundId:number) => void; - (void)rtcEngineDidAudioEffectFinish:(AgoraRtcEngineKit * _Nonnull)engine soundId:(int)soundId; virtual void onAudioEffectFinished(int soundId) { } diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita index e515569d6d2..97da7fc93b8 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita @@ -14,7 +14,7 @@

    public void onCameraExposureAreaChanged(Rect rect) {} - + onCameraExposureAreaChanged?:(rect:camera.Rect) => void; - (void)rtcEngine:(AgoraRtcEngineKit* _Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect; virtual void onCameraExposureAreaChanged(int x, int y, int width, int height) { (void)x; @@ -60,9 +60,9 @@ - + rect - 镜头内表示曝光的区域。详见 + 镜头内表示曝光的区域。详见

    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita index b36860a8b6b..b95629f39f8 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita @@ -14,7 +14,7 @@

    public void onCameraFocusAreaChanged(Rect rect) {} - + onCameraFocusPointChanged?:(point:camera.Point) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect; virtual void onCameraFocusAreaChanged(int x, int y, int width, int height) { (void)x; @@ -67,6 +67,17 @@ -

    + + + + point + 镜头内表示对焦的点。 + + + + + + +
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita index f0837907acc..03427bb2226 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita @@ -15,7 +15,7 @@

    public void onLocalVideoTranscoderError( LocalTranscoderConfiguration.TranscodingVideoStream stream, int error) {} - + onLocalVideoTranscoderError?:(stream:TranscodingVideoStream, error:Constants.VideoTranscoderError) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didLocalVideoTranscoderErrorWithStream:(AgoraTranscodingVideoStream * _Nonnull )stream errorCode:(AgoraVideoTranscoderError)errorCode NS_SWIFT_NAME(rtcEngine(_:didLocalVideoTranscoderErrorWithStream:errorCode:)); virtual void onLocalVideoTranscoderError(const TranscodingVideoStream& stream, VIDEO_TRANSCODER_ERROR error){ @@ -54,10 +54,10 @@ 合图失败的视频流。详见 - error + error errorCode - 本地合图出错原因。详见 - 本地合图出错原因: + 本地合图出错原因。详见 + 本地合图出错原因:

    • 1:指定的视频源未开始进行视频采集,你需要为其创建视频轨道并开始视频采集。
    • 2:视频源类型无效,你需要重新指定支持的视频源类型。
    • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita index d5a7a330725..12b1e7faedd 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita @@ -14,7 +14,7 @@

      public void onUserEnableVideo(int uid, boolean enabled) {} - + onUserEnableVideo?:(uid:number, enabled:boolean) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid @@ -79,4 +79,4 @@

      - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_remoteaudiostats.dita b/dita/RTC-NG/API/class_remoteaudiostats.dita index 3bd0b8e83dc..20fd35a4f3b 100644 --- a/dita/RTC-NG/API/class_remoteaudiostats.dita +++ b/dita/RTC-NG/API/class_remoteaudiostats.dita @@ -61,6 +61,8 @@ public qualityChangedReason:number = 0; public rxAudioBytes:number = 0; + + public e2eDelay:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcRemoteAudioStats : NSObject @property(assign, nonatomic) NSUInteger uid; diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 1b773efad7a..a5bfb7e84e1 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -290,7 +290,7 @@ 方法/回调 描述 - + @@ -1117,7 +1117,7 @@ - + @@ -1133,7 +1133,7 @@ - + @@ -1880,7 +1880,7 @@ - + @@ -1892,7 +1892,7 @@ - + @@ -1900,7 +1900,7 @@ - + @@ -2307,7 +2307,7 @@ (仅适用于 Android 和 iOS) - + (仅适用于 Android 和 iOS) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 4cbd4441416..36aef411395 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -27,7 +27,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -572,12 +572,12 @@ - + - + - + @@ -662,7 +662,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 9f1b4421a35..a78a7c8f753 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -104,7 +104,7 @@ - + IMediaPlayer @@ -223,7 +223,7 @@ - + IAgoraMusicPlayer @@ -615,7 +615,7 @@ - + registerPlayerObserver @@ -1449,7 +1449,7 @@ - + startOrUpdateChannelMediaRelayEx @@ -2272,14 +2272,14 @@ - + pauseAllChannelMediaRelay - + resumeAllChannelMediaRelay @@ -2460,7 +2460,7 @@ - + setDualStreamModeEx @@ -4402,7 +4402,7 @@ - + onCameraExposureAreaChanged @@ -11614,6 +11614,62 @@ + + + + VideoTranscoderError + + + + + + + OK + + + + + + + VIDEO_SOURCE_NOT_READY + + + + + + + INVALID_VIDEO_SOURCE_TYPE + + + + + + + INVALID_IMAGE_PATH + + + + + + + UNSUPPORT_IMAGE_FORMAT + + + + + + + INVALID_LAYOUT + + + + + + + INTERNAL + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index b5902edde4b..1a8beddc464 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2596,7 +2596,7 @@ - + @@ -2626,7 +2626,7 @@ - + @@ -2636,7 +2636,7 @@ - + @@ -2697,7 +2697,7 @@ - + From 76f22dbdd33601587f4cfb2f9fc018e46b4caa01 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:22:43 +0800 Subject: [PATCH 055/354] fix --- dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita | 2 +- .../RTC-NG/API/callback_irtcengineeventhandler_onerror.dita | 6 +++--- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita b/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita index 28166c81a62..b6acd855140 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita @@ -53,7 +53,7 @@
      • 如果你想修改此行为,可以调用该方法并修改 mode(始终不发送小流)或 (始终发送小流)。
      • 如果你在进行修改后又想恢复该默认行为,可重新调用该方法,并将 mode 设置为

      - 该方法和 的区别与联系如下: + 该方法和 的区别与联系如下:
      • 调用该方法并设置 mode 时,跟 () 的效果相同。
      • 调用该方法并设置 mode 时,跟 () 的效果相同。
      • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita index 5273182b19b..ac313549db0 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita @@ -65,14 +65,14 @@
        • 初始化失败。请重新初始化
        • 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
        • -
        • 调用 方法时用户尚未离开频道。请检查方法的调用逻辑。
        • +
        • 调用 方法时用户尚未离开频道。请检查方法的调用逻辑。
        • 请检查是否已开启音频模块。请检查程序集完整性。
      • (4): 当前状态不支持该操作。可能的原因有:
          -
        • Android 平台调用 方法时,如果设备版本低于 Android 5.0,会上报该错误码。请确认 Android 设备版本。
        • +
        • Android 平台调用 方法时,如果设备版本低于 Android 5.0,会上报该错误码。请确认 Android 设备版本。
        • 使用内置加密时,设置的加密模式不正确,或加载外部加密库失败。请检查加密的枚举值是否正确,或重新加载外部加密库。
      • (5):方法调用被拒绝。可能的原因有: @@ -93,7 +93,7 @@
        • 用户已经在频道中。建议通过 回调判断用户是否在频道中。除收到 (1) 状态外,不要再次调用该方法加入频道。
        • -
        • 用户在调用 进行通话测试后,未调用 结束当前测试就尝试加入频道。开始通话测试后,需要先调用 结束当前测试,再加入频道。
        • +
        • 用户在调用 进行通话测试后,未调用 结束当前测试就尝试加入频道。开始通话测试后,需要先调用 结束当前测试,再加入频道。
      • (18):离开频道失败。可能的原因有: diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 552f06b0d91..6dc57bcc115 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -951,7 +951,7 @@ - + From f62a4c38a428ad6875693bba966931328ba52274 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:35:14 +0800 Subject: [PATCH 056/354] 1 --- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 36aef411395..4d97c77eadb 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -19,7 +19,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index a78a7c8f753..8dc8e1783a7 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -83,7 +83,7 @@ - + IAudioEffectManager From 43b60c29b56db2aaac5dc3600b0116ecd298a596 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 12 Sep 2024 10:57:18 +0800 Subject: [PATCH 057/354] Update keys-rtc-ng-links.ditamap --- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 81cd7944327..5611004f6b7 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -19,21 +19,21 @@ - + 获取曲库所有歌曲列表 - + 获取增量歌曲列表 - + 在线 K 歌房文档 From d55689e44de7a61f4d85b503d485f3a644eb27cb Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:14:05 +0800 Subject: [PATCH 058/354] to audio_basic --- .../API/api_imediaengine_pushvideoframe.dita | 4 +- .../API/api_irtcengine_joinchannel2.dita | 2 +- .../api_irtcengine_muteremoteaudiostream.dita | 2 +- .../api_irtcengine_muteremotevideostream.dita | 4 +- .../API/api_irtcengine_pushvideoframe3.dita | 2 +- .../API/api_irtcengine_setaudioprofile.dita | 6 +- .../API/api_irtcengine_setaudioscenario.dita | 2 +- .../API/api_irtcengine_setclientrole2.dita | 2 +- .../api_irtcengine_setlocalrendermode.dita | 2 +- ..._irtcengine_updatechannelmediaoptions.dita | 2 +- .../api_irtcengineex_createdatastreamex.dita | 2 +- .../api_irtcengineex_createdatastreamex2.dita | 2 +- .../API/api_irtcengineex_joinchannelex.dita | 4 +- .../API/api_irtcengineex_leavechannelex2.dita | 2 +- ...cengineex_muteallremoteaudiostreamsex.dita | 3 +- ...cengineex_muteallremotevideostreamsex.dita | 2 +- ...i_irtcengineex_mutelocalaudiostreamex.dita | 2 +- ...i_irtcengineex_mutelocalvideostreamex.dita | 3 +- ...entereventhandler_onmusicchartsresult.dita | 4 +- ...enthandler_onaudiopublishstatechanged.dita | 4 +- ...thandler_onaudiosubscribestatechanged.dita | 12 +-- ...ngineeventhandler_onclientrolechanged.dita | 13 +-- ...eventhandler_onclientrolechangefailed.dita | 6 +- ...eventhandler_onconnectionstatechanged.dita | 23 ++--- ...cengineeventhandler_onencryptionerror.dita | 4 +- ...llback_irtcengineeventhandler_onerror.dita | 8 +- ...cengineeventhandler_onlastmilequality.dita | 2 +- ...irtcengineeventhandler_onleavechannel.dita | 4 +- ...eventhandler_onlocalaudiostatechanged.dita | 8 +- ...tcengineeventhandler_onnetworkquality.dita | 6 +- ...cengineeventhandler_onpermissionerror.dita | 4 +- ...venthandler_onremoteaudiostatechanged.dita | 8 +- ...irtcengineeventhandler_onrequesttoken.dita | 2 +- ...nthandler_onrtmpstreamingstatechanged.dita | 4 +- ...thandler_onvideosubscribestatechanged.dita | 10 +- dita/RTC-NG/API/enum_errorcodetype.dita | 2 +- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- dita/RTC-NG/RTC_NG_API_Android.ditamap | 4 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 24 +++-- .../config/keys-rtc-ng-api-harmony.ditamap | 96 +++++++++++-------- 40 files changed, 157 insertions(+), 141 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita b/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita index 79e1ab56064..5f40867b19b 100644 --- a/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita +++ b/dita/RTC-NG/API/api_imediaengine_pushvideoframe.dita @@ -14,7 +14,7 @@

        public abstract int pushExternalVideoFrameById(AgoraVideoFrame frame, int videoTrackId); - public abstract pushExternalVideoFrameById(frame: VideoFrame, videoTrackId: number): number; + - (BOOL)pushExternalVideoFrame:(AgoraVideoFrame * _Nonnull)frame videoTrackId:(NSUInteger)videoTrackId NS_SWIFT_NAME(pushExternalVideoFrame(_:videoTrackId:)); virtual int pushVideoFrame(base::ExternalVideoFrame* frame, unsigned int videoTrackId = 0) = 0; abstract pushVideoFrame( @@ -32,7 +32,7 @@

        详情 -
        +
        弃用:
        如果你需要推送 I422 格式的视频帧,请使用该方法。其他情况下,请改用
        diff --git a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita index 6a9346ab4b5..86115c52519 100644 --- a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita +++ b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita @@ -104,7 +104,7 @@ 用户 ID。该参数用于标识在实时音视频互动频道中的用户。你需要自行设置和管理用户 ID,并确保同一频道内的每个用户 ID 是唯一的。该参数为 32 位有符号整数。取值范围为:-231-1 到 231-1。该参数为 32 位无符号整数。建议设置范围:1 到 232-1。如果不指定(即设为 0),SDK 会自动分配一个,并在 回调中返回, 应用层必须记住该返回值并维护,SDK 不对该返回值进行维护。 - options + options mediaOptions 频道媒体设置选项。详见 diff --git a/dita/RTC-NG/API/api_irtcengine_muteremoteaudiostream.dita b/dita/RTC-NG/API/api_irtcengine_muteremoteaudiostream.dita index a86c4fef670..03e4d20306d 100644 --- a/dita/RTC-NG/API/api_irtcengine_muteremoteaudiostream.dita +++ b/dita/RTC-NG/API/api_irtcengine_muteremoteaudiostream.dita @@ -44,7 +44,7 @@ 参数 - uid + uid 指定用户的用户 ID。 diff --git a/dita/RTC-NG/API/api_irtcengine_muteremotevideostream.dita b/dita/RTC-NG/API/api_irtcengine_muteremotevideostream.dita index 57fcb80f217..4efa4518caa 100644 --- a/dita/RTC-NG/API/api_irtcengine_muteremotevideostream.dita +++ b/dita/RTC-NG/API/api_irtcengine_muteremotevideostream.dita @@ -45,7 +45,7 @@ userId - uid + uid 指定用户的用户 ID。 @@ -69,4 +69,4 @@
      • < 0:方法调用失败。详见了解详情和解决建议。
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita b/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita index 19f711af6cd..18649c82d4f 100644 --- a/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita +++ b/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita @@ -14,7 +14,7 @@

    public abstract int pushExternalVideoFrameById(VideoFrame frame, int videoTrackId); - + public abstract pushExternalVideoFrameById(frame: VideoFrame, videoTrackId: number): number; diff --git a/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita b/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita index c8f06e8b147..e958d1c8603 100644 --- a/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita +++ b/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita @@ -60,8 +60,8 @@ profile -

    音频编码属性,包含采样率、码率、编码模式和声道数。详见 -

      +

      音频编码属性,包含采样率、码率、编码模式和声道数。详见 +

      • (0):默认值。
        • @@ -87,4 +87,4 @@
        • < 0: 方法调用失败。详见了解详情和解决建议。
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita b/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita index da321868af2..01f7efbca47 100644 --- a/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setaudioscenario.dita @@ -43,7 +43,7 @@ scenario 音频场景。不同的音频场景下,设备的音量类型是不同的。 - 详见 + 详见
    • (0):(默认)自动场景,根据用户角色和音频路由自动匹配合适的音质。
    • (3): 高音质场景,适用于音乐为主的场景。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita b/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita index b60eb80942f..89c7370fd41 100644 --- a/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita @@ -34,7 +34,7 @@

    SDK 默认设置用户角色为观众,你可以调用该方法设置用户角色为主播。用户角色(role)确定用户在 SDK 层的权限,包含是否有发流权限等。

    -

    该方法与 的区别在于,该方法还支持设置观众端延时级别(audienceLatencyLevel)。audienceLatencyLevel 需与 role 结合使用,确定用户在其权限范围内可以享受到的服务。例如对于观众,选择接收低延时还是超低延时的视频流。不同的延时级别会影响计费,详见

    +

    该方法与 的区别在于,该方法还支持设置观众端延时级别(audienceLatencyLevel)。audienceLatencyLevel 需与 role 结合使用,确定用户在其权限范围内可以享受到的服务。例如对于观众,选择接收低延时还是超低延时的视频流。不同的延时级别会影响计费,详见

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita index 6fdc1f12dbc..d40be896816 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita @@ -14,7 +14,7 @@

    public abstract int setLocalRenderMode(int renderMode); - public abstract setLocalRenderMode(renderMode: number, mirrorMode: number): number; + - (int)setLocalRenderMode:(NSUInteger)uid mode:(AgoraVideoRenderMode) mode; virtual int setLocalRenderMode(media::base::RENDER_MODE_TYPE renderMode) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_updatechannelmediaoptions.dita b/dita/RTC-NG/API/api_irtcengine_updatechannelmediaoptions.dita index b2a23512d86..17c4e34f311 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatechannelmediaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatechannelmediaoptions.dita @@ -29,7 +29,7 @@ 参数 - options + options mediaOptions 频道媒体选项,详见 diff --git a/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita b/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita index 0863b99b7fb..2b9f845244a 100644 --- a/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita @@ -15,7 +15,7 @@

    public abstract int createDataStreamEx( boolean reliable, boolean ordered, RtcConnection connection); - public abstract createDataStreamEx(config:DataStreamConfig,connection:RtcConnection):number; + - (int)createDataStreamEx:(NSInteger * _Nonnull)streamId reliable:(BOOL)reliable ordered:(BOOL)ordered diff --git a/dita/RTC-NG/API/api_irtcengineex_createdatastreamex2.dita b/dita/RTC-NG/API/api_irtcengineex_createdatastreamex2.dita index c5e7ceb006b..b570817062d 100644 --- a/dita/RTC-NG/API/api_irtcengineex_createdatastreamex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_createdatastreamex2.dita @@ -35,7 +35,7 @@

    -

    相比 ,本方法不保证数据传输的可靠性。接收方会丢弃超出发送时间 5 秒后的数据包。

    +

    相比 ,本方法不保证数据传输的可靠性。接收方会丢弃超出发送时间 5 秒后的数据包。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengineex_joinchannelex.dita b/dita/RTC-NG/API/api_irtcengineex_joinchannelex.dita index d448abaa19e..c1a63acb2b7 100644 --- a/dita/RTC-NG/API/api_irtcengineex_joinchannelex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_joinchannelex.dita @@ -85,9 +85,9 @@ - eventHandler + eventHandler delegate - 的回调类,详见 。多频道相关的事件通知通过你在此参数中传递的 eventHandlerdelegate 对象回调。 + 的回调类,详见 。多频道相关的事件通知通过你在此参数中传递的 eventHandlerdelegate 对象回调。 diff --git a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita index 500df0f3a37..dd4a8b6eadc 100644 --- a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita @@ -42,7 +42,7 @@
    • 该方法是异步操作,调用返回时并没有真正退出频道。
    • 如果你调用了 后,会同时离开 加入的频道。
    • -
    • 如果你调用了 后,会同时离开 加入的频道。
    • +
    • 如果你调用了 后,会同时离开 加入的频道。
    diff --git a/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita b/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita index 5f179592ad6..fdf6825d757 100644 --- a/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita @@ -14,7 +14,8 @@

    public abstract int muteAllRemoteAudioStreamsEx(boolean muted, RtcConnection connection); - + public abstract muteAllRemoteAudioStreamsEx(muted:boolean,connection:RtcConnection):number; + - (int)muteAllRemoteAudioStreamsEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteAllRemoteAudioStreamsEx(_:connection:)); virtual int muteAllRemoteAudioStreamsEx(bool mute, const RtcConnection& connection) = 0; diff --git a/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita b/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita index c73e4cc5613..1cac40c3646 100644 --- a/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita @@ -14,7 +14,7 @@

    public abstract int muteAllRemoteVideoStreamsEx(boolean muted, RtcConnection connection); - + public abstract muteAllRemoteVideoStreamsEx(muted:boolean,connection:RtcConnection):number; - (int)muteAllRemoteVideoStreamsEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteAllRemoteVideoStreamsEx(_:connection:)); virtual int muteAllRemoteVideoStreamsEx(bool mute, const RtcConnection& connection) = 0; diff --git a/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita b/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita index 48ff9831a89..65d4ff13bc3 100644 --- a/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita @@ -14,7 +14,7 @@

    public abstract int muteLocalAudioStreamEx(boolean muted, RtcConnection connection); - + public abstract muteLocalAudioStreamEx(muted:boolean,connection:RtcConnection):number; - (int)muteLocalAudioStreamEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteLocalAudioStreamEx(_:connection:)); virtual int muteLocalAudioStreamEx(bool mute, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita b/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita index 7debee043cd..fab91341ea0 100644 --- a/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita @@ -14,7 +14,8 @@

    public abstract int muteLocalVideoStreamEx(boolean muted, RtcConnection connection); - + public abstract muteLocalVideoStreamEx(muted:boolean,connection:RtcConnection):number; + - (int)muteLocalVideoStreamEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteLocalVideoStreamEx(_:connection:)); virtual int muteLocalVideoStreamEx(bool mute, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita index b88bfd71d81..7966eacded2 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita @@ -51,8 +51,8 @@ reason -

    音乐内容中心的请求状态码,详见

    -

    音乐内容中心的请求状态码: +

    音乐内容中心的请求状态码,详见

    +

    音乐内容中心的请求状态码:

    • (0):请求成功。
    • (1):一般错误,无明确归因。
    • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita index a0399733ff3..c320e50e5e7 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita @@ -61,7 +61,7 @@ elapseSinceLastState:(int)elapseSinceLastState; - channel + channel channelId 频道名。 @@ -79,4 +79,4 @@ elapseSinceLastState:(int)elapseSinceLastState;
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita index 42a4922b6da..ae040d00967 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita @@ -67,7 +67,7 @@ elapseSinceLastState:(int)elapseSinceLastState; - channel + channel channelId 频道名。 @@ -77,8 +77,8 @@ elapseSinceLastState:(int)elapseSinceLastState; oldState - 之前的订阅状态,详见 - 之前的订阅状态。 + 之前的订阅状态,详见 + 之前的订阅状态。
    • (0): 加入频道后的初始订阅状态。
    • @@ -103,8 +103,8 @@ elapseSinceLastState:(int)elapseSinceLastState; newState - 当前的订阅状态,详见 - 当前的订阅状态。 + 当前的订阅状态,详见 + 当前的订阅状态。
      • (0): 加入频道后的初始订阅状态。
      • (1): 订阅失败。可能是因为: @@ -132,4 +132,4 @@ elapseSinceLastState:(int)elapseSinceLastState;
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita index 2d73b39e573..d26283456fe 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita @@ -44,13 +44,14 @@ NS_SWIFT_NAME(rtcEngine(_:didClientRoleChanged:newRole:newRoleOptions:));在以下任意一种情况时,会触发此回调:
    • 加入频道后调用 设置用户角色或观众端延时级别。
    • 加入频道前调用 并将用户角色设为 AUDIENCE

    -

    在以下任意一种情况时,会触发此回调:

      +

      在以下任意一种情况时,会触发此回调:

      • 加入频道后调用 设置用户角色或观众端延时级别。
      • 加入频道前调用 并将用户角色设为 AUDIENCE

    使用限制 -

    当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

    +

    当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

    +

    当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

    <ph keyref="callback-section-title"/> @@ -65,15 +66,15 @@ NS_SWIFT_NAME(rtcEngine(_:didClientRoleChanged:newRole:newRoleOptions:)); oldRole - 切换前的角色: -
      + 切换前的角色: +
      newRole - 切换后的角色: -
        + 切换后的角色: +
        diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita index 458a15f348d..914a813bd0f 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita @@ -45,7 +45,7 @@
        触发时机

        本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

        -

        本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

        +

        本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

        使用限制 @@ -78,8 +78,8 @@ currentRole - 当前用户角色。详见 - 当前用户角色。 + 当前用户角色。详见 + 当前用户角色。
        • (1): 主播。主播可以发流也可以收流。
        • (2): 观众。观众只能收流不能发流。
        • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita index b2cf0a21ba6..4cf8ccac9b3 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita @@ -56,25 +56,20 @@ state -

          当前网络连接状态。详见

          -
            -
          • - (1):网络连接断开。
          • -
          • - (2):建立网络连接中。
          • -
          • - (3):网络已连接。
          • -
          • - (4):重新建立网络连接中 。
          • -
          • - (5):网络连接失败 。
          • +

            当前网络连接状态。详见

            +
              +
            • (1):网络连接断开。
            • +
            • (2):建立网络连接中。
            • +
            • (3):网络已连接。
            • +
            • (4):重新建立网络连接中。
            • +
            • (5):网络连接失败。
            reason -

            引起当前网络连接状态改变的原因。详见

            -

            +

            引起当前网络连接状态改变的原因。详见

            +

            • (0):建立网络连接中。
            • (1):成功加入频道。
            • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onencryptionerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onencryptionerror.dita index 034451f763a..46b9d0e924a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onencryptionerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onencryptionerror.dita @@ -50,11 +50,11 @@ connection Connection 信息。详见 - + errorType 错误类型,详见 - + errorType 错误类型。
                diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita index ac313549db0..8ed5a00b668 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita @@ -41,7 +41,7 @@ - + errorCode err 错误码。详见 @@ -50,8 +50,8 @@ msg 错误描述。 - - err + + err error 错误码。 @@ -125,7 +125,7 @@
              • 在控制台中启用了 App 证书,但未使用 App ID + Token 鉴权。当项目启用了 App 证书,就必须使用 Token 鉴权。
              • 生成 Token 时填入的 uid 字段,和用户加入频道时填入的 uid 不匹配。
              -
              +
              弃用:
              该枚举已废弃。请改用 回调中的 (8)。
              diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita index b3312d0c314..00f7c54ed8d 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita @@ -40,7 +40,7 @@ quality - Last mile 网络质量。详见 + Last mile 网络质量。详见
              diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onleavechannel.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onleavechannel.dita index ab51cbdb25a..c4083649521 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onleavechannel.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onleavechannel.dita @@ -33,8 +33,8 @@
        触发时机 -

        当你成功调用 离开频道后,SDK 会触发该回调。

        -

        当你成功调用 离开频道后,SDK 会触发该回调。

        +

        当你成功调用 离开频道后,SDK 会触发该回调。

        +

        当你成功调用 离开频道后,SDK 会触发该回调。

        使用限制 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalaudiostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalaudiostatechanged.dita index 54ffe7d5dc3..db1421a5e57 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalaudiostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalaudiostatechanged.dita @@ -55,8 +55,8 @@ state - 当前的本地音频状态。详见 - 当前的本地音频状态。 + 当前的本地音频状态。详见 + 当前的本地音频状态。
        • (0): 本地音频默认初始状态。
        • (1): 本地音频采集设备启动成功。
        • @@ -66,8 +66,8 @@ reason - 本地音频状态改变原因。详见 - 本地音频状态改变原因。 + 本地音频状态改变原因。详见 + 本地音频状态改变原因。
          • (0): 本地音频状态正常。
          • (1): 本地音频出错原因不明确。建议提示用户尝试重新加入频道。
          • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita index 9c5fe53db17..79dfc18c90c 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita @@ -47,7 +47,7 @@

            该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到声网边缘服务器的网络状态。

            该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。

            该回调通过频道内的广播包反馈网络质量。过多的广播包可能引发广播风暴。为防止广播风暴导致频道内大量数据传输,该回调默认支持同时反馈最多 4 个远端主播的网络质量。

            - 用户不发流时,txQualityUNKNOWNUnknown;用户不收流时,rxQualityUNKNOWNUnknown
        + 用户不发流时,txQualityUNKNOWNUnknown;用户不收流时,rxQualityUNKNOWNUnknown
    <ph keyref="callback-section-title" /> @@ -68,14 +68,14 @@ txQuality - 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。 该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 720 的分辨率就会有困难。 详见 + 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。 该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 720 的分辨率就会有困难。 详见
    rxQuality - 该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算。详见 + 该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算。详见
    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onpermissionerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onpermissionerror.dita index cfdb203cc06..f776aae5bf7 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onpermissionerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onpermissionerror.dita @@ -41,8 +41,8 @@ permission type permissionType - 设备权限类型。详见 - 设备权限类型。 + 设备权限类型。详见 + 设备权限类型。
    • (0): 音频采集设备的权限。
    • (1): 摄像头权限。
    • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onremoteaudiostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onremoteaudiostatechanged.dita index 5595f699b20..c9e3a9ada5c 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onremoteaudiostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onremoteaudiostatechanged.dita @@ -72,8 +72,8 @@ state - 远端音频流状态,详见 - 远端音频流状态。 + 远端音频流状态,详见 + 远端音频流状态。
      • (0): 远端音频默认初始状态。在 的情况下,会报告该状态。
      • @@ -85,8 +85,8 @@ reason - 远端音频流状态改变的具体原因,详见 - 远端音频流状态改变的具体原因。 + 远端音频流状态改变的具体原因,详见 + 远端音频流状态改变的具体原因。
        • (0): 音频状态发生改变时,会报告该原因。
        • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita index d9ca3f136e8..534c1409eb9 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita @@ -14,7 +14,7 @@

          public void onRequestToken() {} - + onRequestToken?:() => void; - (void)rtcEngineRequestToken:(AgoraRtcEngineKit * _Nonnull)engine; virtual void onRequestToken() UFUNCTION(BlueprintNativeEvent, Category = "Agora|Event") diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita index 36466ad388b..11899ac3143 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita @@ -59,8 +59,8 @@ state - 当前的推流状态,详见 - 当前的推流状态: + 当前的推流状态,详见 + 当前的推流状态: diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita index 7a6d7766ac1..9e3d1226948 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita @@ -78,8 +78,8 @@ oldState - 之前的订阅状态,详见 - 之前的订阅状态。 + 之前的订阅状态,详见 + 之前的订阅状态。

          • (0): 加入频道后的初始订阅状态。
          • (1): 订阅失败。可能是因为: @@ -103,8 +103,8 @@ newState - 当前的订阅状态,详见 - 当前的订阅状态。 + 当前的订阅状态,详见 + 当前的订阅状态。
            • (0): 加入频道后的初始订阅状态。
            • (1): 订阅失败。可能是因为: @@ -135,4 +135,4 @@
          - \ No newline at end of file + diff --git a/dita/RTC-NG/API/enum_errorcodetype.dita b/dita/RTC-NG/API/enum_errorcodetype.dita index a5dbf151a83..340e5e4b06e 100644 --- a/dita/RTC-NG/API/enum_errorcodetype.dita +++ b/dita/RTC-NG/API/enum_errorcodetype.dita @@ -142,7 +142,7 @@
        • 在控制台中启用了 App 证书,但未使用 App ID + Token 鉴权。当项目启用了 App 证书,就必须使用 Token 鉴权。
        • 生成 Token 时填入的 uid 字段,和用户加入频道时填入的 uid 不匹配。
        -
        +
        弃用:
        该枚举已废弃。请改用 回调中的 (8)。
        diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 6dc57bcc115..5362e39beca 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1317,7 +1317,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index e9a29d7770e..d4ec4d99a54 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -623,9 +623,9 @@ - + - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 4d97c77eadb..bc45c365d46 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -61,16 +61,16 @@ - + - + - + @@ -149,7 +149,7 @@ - + @@ -349,7 +349,6 @@ - @@ -386,8 +385,8 @@ - - + + @@ -453,7 +452,6 @@ - @@ -534,23 +532,23 @@ - + - + - + - - + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 8dc8e1783a7..cb2c5f53f6d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -268,7 +268,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -553,13 +553,6 @@ - - - open [1/2] - - - - open @@ -1018,7 +1011,6 @@ - @@ -1217,7 +1209,7 @@ - + createDataStreamEx [1/2] @@ -1273,7 +1265,7 @@ - + @@ -2557,15 +2549,15 @@ - + + + - pushExternalVideoFrameById [1/2] + pushExternalVideoFrameById - - - + @@ -3227,14 +3219,14 @@ - + open - + open2 @@ -6860,6 +6852,13 @@ + + + + ConnectionChangedReason + + + @@ -8400,80 +8399,94 @@ + + + + LocalAudioStreamReason + + + - LOCAL_AUDIO_STREAM_REASON_OK + OK - LOCAL_AUDIO_STREAM_REASON_FAILURE + FAILURE - LOCAL_AUDIO_STREAM_REASON_DEVICE_NO_PERMISSION + DEVICE_NO_PERMISSION - LOCAL_AUDIO_STREAM_REASON_DEVICE_BUSY + DEVICE_BUSY - LOCAL_AUDIO_STREAM_REASON_CAPTURE_FAILURE + CAPTURE_FAILURE - LOCAL_AUDIO_STREAM_REASON_ENCODE_FAILURE + ENCODE_FAILURE - LOCAL_AUDIO_STREAM_REASON_INTERRUPTED + INTERRUPTED + + + + + + + LocalAudioStreamState - LOCAL_AUDIO_STREAM_STATE_STOPPED + STOPPED - LOCAL_AUDIO_STREAM_STATE_RECORDING + RECORDING - LOCAL_AUDIO_STREAM_STATE_ENCODING + ENCODING - LOCAL_AUDIO_STREAM_STATE_FAILED + FAILED @@ -9327,56 +9340,56 @@ - MUSIC_CONTENT_CENTER_STATE_REASON_OK + OK - MUSIC_CONTENT_CENTER_STATE_REASON_ERROR + ERROR - MUSIC_CONTENT_CENTER_STATE_REASON_GATEWAY + GATEWAY - MUSIC_CONTENT_CENTER_STATE_REASON_PERMISSION_AND_RESOURCE + PERMISSION_AND_RESOURCE - MUSIC_CONTENT_CENTER_STATE_REASON_INTERNAL_DATA_PARSE + INTERNAL_DATA_PARSE - MUSIC_CONTENT_CENTER_STATE_REASON_MUSIC_LOADING + MUSIC_LOADING - MUSIC_CONTENT_CENTER_STATE_REASON_MUSIC_DECRYPTION + MUSIC_DECRYPTION - MUSIC_CONTENT_CENTER_STATE_REASON_HTTP_INTERNAL + HTTP_INTERNAL @@ -9464,6 +9477,13 @@ + + + + PermissionType + + + From 1d1895764869d31a2bcda6bcee3ca5b24ecead9d Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 12 Sep 2024 11:20:26 +0800 Subject: [PATCH 059/354] Update callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita --- ...ngineeventhandler_onfirstlocalvideoframepublished.dita | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita index 31f76c4af58..67ef9372f78 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita @@ -35,8 +35,8 @@ connection: RtcConnection, elapsed: number ): void; - final void Function(RtcConnection connection, int elapsed)? - onFirstLocalVideoFramePublished; + final void Function(VideoSourceType source, int elapsed)? + onFirstLocalVideoFramePublished;

    @@ -55,11 +55,11 @@ - + connection Connection 信息。详见 - + From 78d3ee84e97a3db2c7f8b81d7291235fd5a0914d Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Thu, 12 Sep 2024 03:21:39 +0000 Subject: [PATCH 060/354] Sync cn prototype to en prototype --- ...rtcengineeventhandler_onfirstlocalvideoframepublished.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita index f7fd3e4198a..77923a9c262 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita @@ -35,8 +35,8 @@ connection: RtcConnection, elapsed: number ): void; - final void Function(RtcConnection connection, int elapsed)? - onFirstLocalVideoFramePublished; + final void Function(VideoSourceType source, int elapsed)? + onFirstLocalVideoFramePublished;

    From 13d56c91afdd0177ae558b6390c47754bff00231 Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 12 Sep 2024 14:27:03 +0800 Subject: [PATCH 061/354] Revert "Update callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita" This reverts commit 1d1895764869d31a2bcda6bcee3ca5b24ecead9d. --- ...ngineeventhandler_onfirstlocalvideoframepublished.dita | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita index 67ef9372f78..31f76c4af58 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita @@ -35,8 +35,8 @@ connection: RtcConnection, elapsed: number ): void; - final void Function(VideoSourceType source, int elapsed)? - onFirstLocalVideoFramePublished; + final void Function(RtcConnection connection, int elapsed)? + onFirstLocalVideoFramePublished;

    @@ -55,11 +55,11 @@ - + connection Connection 信息。详见 - + From e50730ce7ce4b02475638888f9d998ab6a10bbaa Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Thu, 12 Sep 2024 06:27:45 +0000 Subject: [PATCH 062/354] Sync cn prototype to en prototype --- ...rtcengineeventhandler_onfirstlocalvideoframepublished.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita index 77923a9c262..f7fd3e4198a 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframepublished.dita @@ -35,8 +35,8 @@ connection: RtcConnection, elapsed: number ): void; - final void Function(VideoSourceType source, int elapsed)? - onFirstLocalVideoFramePublished; + final void Function(RtcConnection connection, int elapsed)? + onFirstLocalVideoFramePublished;

    From 49e1704bdab17241aa9939c9919ad2af681c8a47 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 12 Sep 2024 18:20:07 +0800 Subject: [PATCH 063/354] Update RTC_NG_API_Unity.ditamap --- dita/RTC-NG/RTC_NG_API_Unity.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/RTC_NG_API_Unity.ditamap b/dita/RTC-NG/RTC_NG_API_Unity.ditamap index 319cac84589..1ef6abcd172 100644 --- a/dita/RTC-NG/RTC_NG_API_Unity.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unity.ditamap @@ -287,7 +287,6 @@ - @@ -350,6 +349,7 @@ + From d8b05b9ebbe646a049603a90261f586487763e93 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 13 Sep 2024 10:58:53 +0800 Subject: [PATCH 064/354] contentinspect: move notes --- dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita b/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita index 172e27898b8..7ca53965b14 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita @@ -41,7 +41,10 @@
    调用限制 -

    调用该方法前,请确保已开通本地截图上传服务。

    +
      +
    • 调用该方法前,请确保已开通本地截图上传服务。
    • +
    • 视频审核模块选择声网自研插件截图上传()时需集成本地截图上传动态库 ,如果删除该动态库会导致无法正常开启本地截图上传功能。
    • +
    参数 @@ -56,9 +59,7 @@ config - 本地截图上传配置。详见 - 视频审核模块选择声网自研插件截图上传()时需集成本地截图上传动态库 ,如果删除该动态库会导致无法正常开启本地截图上传功能。 - + 本地截图上传配置。详见
    From f7405f97a254022f179344a919148a2759d60128 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:14:53 +0800 Subject: [PATCH 065/354] change constants to enum --- dita/RTC-NG/API/class_videosubscriptionoptions.dita | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/dita/RTC-NG/API/class_videosubscriptionoptions.dita b/dita/RTC-NG/API/class_videosubscriptionoptions.dita index 02a8b7d2217..8ba4d7a54f4 100644 --- a/dita/RTC-NG/API/class_videosubscriptionoptions.dita +++ b/dita/RTC-NG/API/class_videosubscriptionoptions.dita @@ -119,13 +119,7 @@ public: streamType type - 订阅的视频流类型,默认值为 ,即订阅视频大流。详见 - 订阅的视频流类型: -
      -
    • (0): (默认)视频大流,即高分辨率、高码率视频流。
    • -
    • (1): 视频小流,即低分辨率、低码率视频流。
    • -
    -
    + 订阅的视频流类型,默认值为 ,即订阅视频大流。详见
    encodedFrameOnly From 34fee61a309229425cc9bbf2151215c3002ff15c Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 13 Sep 2024 12:16:20 +0800 Subject: [PATCH 066/354] Update callback_irtcengineeventhandler_onlocaluserregistered.dita --- .../callback_irtcengineeventhandler_onlocaluserregistered.dita | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita index 0c379b37bcf..81cca87cbaa 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita @@ -25,8 +25,7 @@ onLocalUserRegistered?(uid: number, userAccount: string): void; public virtual void OnLocalUserRegistered(uint uid, string userAccount) {} onLocalUserRegistered?(uid: number, userAccount: string): void; - final void Function(bool isFallbackOrRecover)? - onLocalPublishFallbackToAudioOnly; + final void Function(int uid, String userAccount)? onLocalUserRegistered;

    From 1b797b345d4d1297751a922e37cfada2f204f70f Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Fri, 13 Sep 2024 06:45:35 +0000 Subject: [PATCH 067/354] Sync cn prototype to en prototype --- .../callback_irtcengineeventhandler_onlocaluserregistered.dita | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita index 0586275c488..6d25a781a0f 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocaluserregistered.dita @@ -25,8 +25,7 @@ onLocalUserRegistered?(uid: number, userAccount: string): void; public virtual void OnLocalUserRegistered(uint uid, string userAccount) {} onLocalUserRegistered?(uid: number, userAccount: string): void; - final void Function(bool isFallbackOrRecover)? - onLocalPublishFallbackToAudioOnly; + final void Function(int uid, String userAccount)? onLocalUserRegistered;

    From 7f75cc533ac9062d427a3b790182c2905c584db0 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 13 Sep 2024 18:27:26 +0800 Subject: [PATCH 068/354] to screencapture --- ...api_irtcengine_enableinearmonitoring2.dita | 2 +- .../api_irtcengine_startcameracapture.dita | 2 +- .../api_irtcengine_startscreencapture.dita | 2 +- .../API/api_irtcengine_stopscreencapture.dita | 2 +- ...cengine_updatescreencaptureparameters.dita | 2 +- ...neeventhandler_onfirstlocalvideoframe.dita | 4 +- ...eeventhandler_onfirstremotevideoframe.dita | 6 +-- ...eventhandler_onlocalvideostatechanged.dita | 10 ++--- ...venthandler_onremotevideostatechanged.dita | 8 ++-- ...engineeventhandler_onvideosizechanged.dita | 4 +- .../API/class_screenaudioparameters.dita | 11 ++++-- .../API/class_screencaptureparameters2.dita | 11 +++++- .../API/class_screenvideoparameters.dita | 19 ++++++---- .../API/enum_localvideostreamreason.dita | 14 ++++++- .../config/keys-rtc-ng-api-harmony.ditamap | 38 ++++++++++++++++--- 15 files changed, 96 insertions(+), 39 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita b/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita index 84cada70fbb..3d7085ba607 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita @@ -58,7 +58,7 @@ includeAudioFilters 耳返 Audio filter 类型。详见 - 耳返 Audio filter 类型: + 耳返 Audio filter 类型:
    • (1 << 0):不在耳返中添加 Audio filter。
    • (1 << 1): 在耳返中添加人声效果 Audio filter。如果你实现了美声、音效等功能,用户可以在耳返中听到添加效果后的声音。该枚举值支持使用按位或运算符(|)进行组合。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_startcameracapture.dita b/dita/RTC-NG/API/api_irtcengine_startcameracapture.dita index b67352436e2..d5a2a78eafb 100644 --- a/dita/RTC-NG/API/api_irtcengine_startcameracapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_startcameracapture.dita @@ -53,7 +53,7 @@ sourceType

      视频源的类型。详见

      -
        +
        • iOS 设备最多支持 2 路摄像头采集的视频流(要求设备配备多摄像头或支持外接摄像头)。
        • Android 设备最多支持 4 路摄像头采集的视频流(要求设备配备多摄像头或支持外接摄像头)。
        • 桌面端最多支持 4 路摄像头采集的视频流。
        • diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita index 8c2602c4c9a..a7b159e4242 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita @@ -31,7 +31,7 @@
          • 该方法仅适用于 Android 和 iOS 平台。
          • -
          • 屏幕共享流的计费标准以 中的 dimensions 值为准:
              +
            • 屏幕共享流的计费标准以 中的 dimensions 值为准:
              • 当你未传值时,以 1280 × 720 计费。
              • 当你传值时,以你传入的值计费。
            diff --git a/dita/RTC-NG/API/api_irtcengine_stopscreencapture.dita b/dita/RTC-NG/API/api_irtcengine_stopscreencapture.dita index 1ce989db41e..5fd2becf53f 100644 --- a/dita/RTC-NG/API/api_irtcengine_stopscreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_stopscreencapture.dita @@ -34,7 +34,7 @@ 适用场景

            如果你调用了 开启屏幕采集,则停止屏幕采集时需要调用该方法。

            如果你调用了 开启屏幕采集,则停止屏幕采集时需要调用该方法。

            -

            如果你调用了 开启屏幕采集,则停止屏幕采集时需要调用该方法。

            +

            如果你调用了 开启屏幕采集,则停止屏幕采集时需要调用该方法。

            如果你调用了 开启屏幕采集,则停止屏幕采集时需要调用该方法。

          diff --git a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita index 187a45aaaa1..b49436ccf32 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita @@ -45,7 +45,7 @@ screenCaptureParameters captureParams - 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2073600 像素。该像素值为计费标准。详见 。 + 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2073600 像素。该像素值为计费标准。详见 屏幕共享流的视频属性只需通过该参数设置,与 无关。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita index 5fae662f0db..380adf0ca4a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita @@ -67,11 +67,11 @@ size 本地渲染视频的尺寸。 - + width 本地渲染视频的宽 (px) 。 - + height 本地渲染视频的高 (px)。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita index f406a63ad7d..526aa3d3904 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita @@ -55,7 +55,7 @@ - uid + uid remoteUid userId 用户 ID,指定是哪个用户的视频流。 @@ -68,11 +68,11 @@ connection Connection 信息。详见 - + width 视频流宽(px)。 - + height 视频流高(px)。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita index 80303ddd223..5f97ed34e2a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita @@ -71,14 +71,14 @@ sourceType - source + source 视频源的类型。详见 state -

          本地视频状态,详见

          -

          +

          本地视频状态,详见

          +

          • (0): 本地视频默认初始状态。
          • (1): 本地视频采集设备启动成功。
          • @@ -90,8 +90,8 @@ reason -

            本地视频状态改变原因,详见

            -

            +

            本地视频状态改变原因,详见

            +

            • (0): 本地视频状态正常。
            • (1): 出错原因不明确。
            • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onremotevideostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onremotevideostatechanged.dita index 4b87ee592dd..9883bee0aad 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onremotevideostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onremotevideostatechanged.dita @@ -72,8 +72,8 @@ state -

              远端视频流状态,详见

              -

              远端视频流状态: +

              远端视频流状态,详见

              +

              远端视频流状态:

              • (0):远端视频默认初始状态。在 (3)、 (5) 或 (7) 的情况下,会报告该状态。
              • (1):本地用户已接收远端视频首包。
              • @@ -86,8 +86,8 @@ reason -

                远端视频流状态改变的具体原因,详见

                -

                远端视频流状态改变的具体原因: +

                远端视频流状态改变的具体原因,详见

                +

                远端视频流状态改变的具体原因:

                • (0):内部原因。
                • (1):网络阻塞。
                • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosizechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosizechanged.dita index 2fb580f7722..cbe800eb042 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosizechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosizechanged.dita @@ -70,11 +70,11 @@ size 视频流的尺寸。 - + width 视频流的宽度(像素)。 - + height 视频流的高度(像素)。 diff --git a/dita/RTC-NG/API/class_screenaudioparameters.dita b/dita/RTC-NG/API/class_screenaudioparameters.dita index 35c81583ca5..f7830d5ef71 100644 --- a/dita/RTC-NG/API/class_screenaudioparameters.dita +++ b/dita/RTC-NG/API/class_screenaudioparameters.dita @@ -30,6 +30,11 @@ + captureSignalVolume + ", allowCaptureCurrentApp=" + allowCaptureCurrentApp + '}'; } } + export class ScreenAudioParameters { + public sampleRate: number = 16000; + public channels: number = 2; + public captureSignalVolume : number = 100; +} __attribute__((visibility("default"))) @interface AgoraScreenAudioParameters : NSObject @property(assign, nonatomic) NSInteger captureSignalVolume; @end @@ -123,11 +128,11 @@ public:
                  <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> - + sampleRate 音频采样率 (Hz)。默认值为 16000。 - + channels 声道数。默认值为 2,表示双声道。 @@ -135,7 +140,7 @@ public: captureSignalVolume 采集的系统音量。取值范围为 [0,100]。默认值为 100。 - + allowCaptureCurrentApp 是否采集当前 App 中的音频:
                    diff --git a/dita/RTC-NG/API/class_screencaptureparameters2.dita b/dita/RTC-NG/API/class_screencaptureparameters2.dita index 4eef59c881f..9b4e45c8b98 100644 --- a/dita/RTC-NG/API/class_screencaptureparameters2.dita +++ b/dita/RTC-NG/API/class_screencaptureparameters2.dita @@ -92,6 +92,13 @@ + '}'; } } + + export class ScreenCaptureParameters { + public captureAudio: boolean = false; + public audioParams: ScreenAudioParameters = new ScreenAudioParameters(); + public captureVideo: boolean = true; + public videoParams: ScreenVideoParameters = new ScreenVideoParameters(); +} __attribute__((visibility("default"))) @interface AgoraScreenCaptureParameters2 : NSObject @property(assign, nonatomic) BOOL captureAudio; @@ -214,7 +221,7 @@ public:
                  • 受系统限制,采集系统音频仅适用于 Android API 级别为 29 及以上,即 Android 10 及以上。
                  • 为提高屏幕共享时采集系统音频的成功率,请确保你已调用 方法并设置音频场景为
                  - + audioParams 共享屏幕流的音频配置。详见 该参数仅在 captureAudio 时生效。 @@ -228,7 +235,7 @@ public:
                受系统限制,采集屏幕仅适用于 Android API 级别为 21 及以上,即 Android 5 及以上。
                - + videoParams 共享屏幕流的视频编码配置。详见 该参数仅在 captureVideo 时生效。 diff --git a/dita/RTC-NG/API/class_screenvideoparameters.dita b/dita/RTC-NG/API/class_screenvideoparameters.dita index d12a2c06e44..c283a7a95c8 100644 --- a/dita/RTC-NG/API/class_screenvideoparameters.dita +++ b/dita/RTC-NG/API/class_screenvideoparameters.dita @@ -46,6 +46,11 @@ } } + export class ScreenVideoParameters { + public dimensions: VideoDimensions = new VideoDimensions(1280, 720); + public frameRate: number = 15; + public bitrate: number = 0; +} __attribute__((visibility("default"))) @interface AgoraScreenVideoParameters : NSObject @property(assign, nonatomic) CGSize dimensions; @@ -157,7 +162,7 @@ public:
                <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - + dimensions 视频编码的分辨率。默认值为 1280 × 720。 如果 dimensions 宽高比与屏幕像素值的宽高比不一致,SDK 会按照如下规则调节视频编码分辨率,以 dimensions 是 1280 × 720 为例: @@ -171,7 +176,7 @@ public:
              • 该值不代表最终视频输出的方向。详见 了解设置视频方向。
              • 视频能否达到 720P 的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720P 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。
              - 在共享文档的场景()下设置编码分辨率时,选择以下两种方式其中之一。 + 在共享文档的场景()下设置编码分辨率时,选择以下两种方式其中之一。
              • 如果你需要最优的画质,建议将编码分辨率设置为与采集分辨率相同。
              • 如果你希望在画质、带宽和系统性能之间达到相对平衡,则: @@ -182,7 +187,7 @@ public:
              - + width 视频编码分辨率中的宽 (px)。默认值为 1280。如果 width 和 height 的宽高比与屏幕像素值的宽高比不一致,SDK 会按照如下规则调节视频编码分辨率, 以 width × height 是 1280 × 720 为例:
                @@ -206,7 +211,7 @@ public:
              - + height 视频编码分辨率中的高 (px)。默认值为 720。如果 width 和 height 的宽高比与屏幕像素值的宽高比不一致,SDK 会按照如下规则调节视频编码分辨率,以 width × height 是 1280 × 720 为例:
                @@ -231,15 +236,15 @@ public: - framerate - frameRate + framerate + frameRate 视频编码帧率 (fps)。默认值为 15。 bitrate 视频编码码率 (Kbps)。 - + contentHint 屏幕共享视频的内容类型。详见
                  diff --git a/dita/RTC-NG/API/enum_localvideostreamreason.dita b/dita/RTC-NG/API/enum_localvideostreamreason.dita index a7cf6dd036d..4d048580cb2 100644 --- a/dita/RTC-NG/API/enum_localvideostreamreason.dita +++ b/dita/RTC-NG/API/enum_localvideostreamreason.dita @@ -47,7 +47,7 @@ 7:(仅适用于 iOS)当前 App 窗口处于侧拉、分屏、画中画模式,且其他 App 正占用摄像头。请提示用户当 App 窗口处于侧拉、分屏、画中画模式,且其他 App 正占用摄像头时,无法正常进行视频采集。 7:预留。 - + 8:找不到本地视频采集设备。需检查摄像头是否与设备正常连接、摄像头是否正常工作,或者尝试重新加入频道。 @@ -132,6 +132,18 @@ 30:(仅适用于 Windows 和 macOS)进行屏幕采集的显示器已断开连接。 + + + 31:用户已停止屏幕共享。 + + + + 32:屏幕共享进程已被其他屏幕共享进程打断。 + + + + 33:屏幕共享进程被系统来电打断。 + 101:由于系统压力过大,导致当前视频采集设备不可用。 diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index cb2c5f53f6d..21d7edb2730 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -8560,6 +8560,27 @@ + + + + SCREEN_CAPTURE_STOPPED_BY_USER + + + + + + + SCREEN_CAPTURE_INTERRUPTED_BY_OTHER + + + + + + + SCREEN_CAPTURE_STOPPED_BY_CALL + + + @@ -9771,38 +9792,45 @@ + + + + RemoteVideoStreamState + + + - REMOTE_VIDEO_STATE_STOPPED + STOPPED - REMOTE_VIDEO_STATE_STARTING + STARTING - REMOTE_VIDEO_STATE_DECODING + DECODING - REMOTE_VIDEO_STATE_FROZEN + FROZEN - REMOTE_VIDEO_STATE_FAILED + FAILED From 22079f343fb244f535a2976e3b0ad876c3605201 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:16:40 +0800 Subject: [PATCH 069/354] all APIs are done --- ...api_imediaplayer_setaudiodualmonomode.dita | 4 +- .../API/api_imediaplayer_setrendermode.dita | 2 +- ...ediarecorder_setmediarecorderobserver.dita | 2 +- ...imusiccontentcenter_createmusicplayer.dita | 2 +- .../API/api_irtcengine_createdatastream2.dita | 2 +- .../API/api_irtcengine_createmediaplayer.dita | 2 +- ...pi_irtcengine_destroycustomvideotrack.dita | 2 +- .../api_irtcengine_destroymediarecorder.dita | 3 +- .../api_irtcengine_enablefacedetection.dita | 2 +- .../api_irtcengine_geterrordescription.dita | 6 +- .../API/api_irtcengine_getnativehandle.dita | 2 +- .../API/api_irtcengine_pushvideoframe2.dita | 2 +- .../API/api_irtcengine_pushvideoframe3.dita | 2 +- .../API/api_irtcengine_pushvideoframe4.dita | 2 +- .../API/api_irtcengine_sendstreammessage.dita | 3 +- ...engine_setcameracapturerconfiguration.dita | 4 +- ..._irtcengine_setcameraexposureposition.dita | 4 +- ...ngine_setcamerafocuspositioninpreview.dita | 4 +- .../api_irtcengine_setcamerazoomfactor.dita | 2 +- .../api_irtcengine_setlocalrendermode2.dita | 4 +- .../API/api_irtcengine_setparameters.dita | 2 +- ...ngine_setremotedefaultvideostreamtype.dita | 4 +- .../api_irtcengine_setremoterendermode2.dita | 6 +- ...i_irtcengine_setremotevideostreamtype.dita | 4 +- .../API/api_irtcengine_setuplocalvideo.dita | 2 +- .../API/api_irtcengine_setupremotevideo.dita | 2 +- .../API/api_irtcengine_startaudiomixing.dita | 2 +- .../api_irtcengine_startaudiorecording.dita | 4 +- ...api_irtcengine_startlastmileprobetest.dita | 2 +- ...engine_startrtmpstreamwithtranscoding.dita | 2 +- .../RTC-NG/API/api_irtcengine_stopeffect.dita | 2 +- .../api_irtcengineex_setupremotevideoex.dita | 2 +- ...reventhandler_onmusiccollectionresult.dita | 5 +- ...ndler_onchannelmediarelaystatechanged.dita | 4 +- ...ineeventhandler_onfacepositionchanged.dita | 4 +- ...ineeventhandler_onlastmileproberesult.dita | 2 +- ...cengineeventhandler_onlastmilequality.dita | 2 +- ...tcengineeventhandler_onnetworkquality.dita | 2 +- ...gineeventhandler_onrtmpstreamingevent.dita | 4 +- ...nthandler_onrtmpstreamingstatechanged.dita | 4 +- ...rtcengineeventhandler_onstreammessage.dita | 2 +- ...gineeventhandler_onstreammessageerror.dita | 8 +- .../API/class_simulcaststreamconfig.dita | 2 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 8 +- .../config/keys-rtc-ng-api-harmony.ditamap | 112 ++++++++++-------- 45 files changed, 132 insertions(+), 117 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita b/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita index 370be1d2a19..56e49ff9999 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita @@ -38,8 +38,8 @@ mode - 声道模式。详见 -
                    + 声道模式。详见 +
                    • (0): 原始模式。
                    • (1): 左声道模式。该模式用左声道的音频替换右声道的音频,即用户只能听到左声道的音频。
                    • (2): 右声道模式。该模式用右声道的音频替换左声道的音频,即用户只能听到右声道的音频。
                    • diff --git a/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita b/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita index f95b8f3125e..9ff525e28ec 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita @@ -32,7 +32,7 @@ renderMode - mode + mode

                      播放器视图的渲染模式。详见

                      播放器视图的渲染模式: diff --git a/dita/RTC-NG/API/api_imediarecorder_setmediarecorderobserver.dita b/dita/RTC-NG/API/api_imediarecorder_setmediarecorderobserver.dita index 0165280cfe5..4b5808150d6 100644 --- a/dita/RTC-NG/API/api_imediarecorder_setmediarecorderobserver.dita +++ b/dita/RTC-NG/API/api_imediarecorder_setmediarecorderobserver.dita @@ -40,7 +40,7 @@ 参数 - callback + callback delegate 音视频流录制回调,详见 diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita b/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita index a5de257a6a9..c78f307adb5 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita @@ -44,7 +44,7 @@

                      返回值
                        -
                      • 方法调用成功:返回 对象。
                      • +
                      • 方法调用成功:返回 对象。
                      • 方法调用成功:返回 实例。
                      • 方法调用失败:返回空指针。
                      diff --git a/dita/RTC-NG/API/api_irtcengine_createdatastream2.dita b/dita/RTC-NG/API/api_irtcengine_createdatastream2.dita index a7d2f31c027..7c0171b03b0 100644 --- a/dita/RTC-NG/API/api_irtcengine_createdatastream2.dita +++ b/dita/RTC-NG/API/api_irtcengine_createdatastream2.dita @@ -27,7 +27,7 @@

          -

          相比 ,本方法不保证数据传输的可靠性。接收方会丢弃超出发送时间 5 秒后的数据包。

          +

          相比 ,本方法不保证数据传输的可靠性。接收方会丢弃超出发送时间 5 秒后的数据包。

          调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita b/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita index 4fc1705e054..205dd9990f9 100644 --- a/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita +++ b/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita @@ -2,7 +2,7 @@ <ph keyref="createMediaPlayer" /> - 创建媒体播放器对象。创建媒体播放器实例。 + 创建媒体播放器对象。创建媒体播放器实例。 diff --git a/dita/RTC-NG/API/api_irtcengine_destroycustomvideotrack.dita b/dita/RTC-NG/API/api_irtcengine_destroycustomvideotrack.dita index c218a3e2b8f..a5af4880740 100644 --- a/dita/RTC-NG/API/api_irtcengine_destroycustomvideotrack.dita +++ b/dita/RTC-NG/API/api_irtcengine_destroycustomvideotrack.dita @@ -30,7 +30,7 @@ video_track_id - videoTrackId + videoTrackId 调用 方法返回的视频轨道 ID。
          diff --git a/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita b/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita index e0928158e78..96cf774e356 100644 --- a/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita +++ b/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita @@ -38,7 +38,8 @@ 参数 - mediaRecorder + mediaRecorder + recorder 待销毁的音视频录制对象。
    diff --git a/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita b/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita index 7f604ec5a61..ba335de45e3 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita @@ -50,7 +50,7 @@ enable - enabled + enabled 是否开启人脸检测:
      diff --git a/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita b/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita index eae97a2b4b1..a64117e54a9 100644 --- a/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita +++ b/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita @@ -32,13 +32,13 @@ code - error - SDK 报告的错误码或警告码。 + error + SDK 报告的错误码。
    返回值 -

    具体的错误或警告描述。

    +

    具体的错误描述。

    \ No newline at end of file diff --git a/dita/RTC-NG/API/api_irtcengine_getnativehandle.dita b/dita/RTC-NG/API/api_irtcengine_getnativehandle.dita index 9cc2f2c1a2e..17eb43bfd4d 100644 --- a/dita/RTC-NG/API/api_irtcengine_getnativehandle.dita +++ b/dita/RTC-NG/API/api_irtcengine_getnativehandle.dita @@ -37,7 +37,7 @@
    返回值 -

    SDK 引擎的 Native 句柄。

    +

    SDK 引擎的 Native 句柄。

    • 0:方法调用成功。
    • < 0:方法调用失败。详见了解详情和解决建议。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_pushvideoframe2.dita b/dita/RTC-NG/API/api_irtcengine_pushvideoframe2.dita index d35ef01a90f..01a7f746f03 100644 --- a/dita/RTC-NG/API/api_irtcengine_pushvideoframe2.dita +++ b/dita/RTC-NG/API/api_irtcengine_pushvideoframe2.dita @@ -25,7 +25,7 @@
    详情 -
    +
    弃用:
    如果你需要推送 I422 格式的视频帧,请使用该方法。其他情况下,请改用
    diff --git a/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita b/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita index 18649c82d4f..bcfc861227e 100644 --- a/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita +++ b/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita @@ -27,7 +27,7 @@ 详情

    -

    调用该方法或 均能将视频帧数据传递给 SDK,区别为该方法支持 Texture 格式的视频数据。

    +

    调用该方法或 均能将视频帧数据传递给 SDK,区别为该方法支持 Texture 格式的视频数据。

    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_pushvideoframe4.dita b/dita/RTC-NG/API/api_irtcengine_pushvideoframe4.dita index 0fa00595273..3b0c796e209 100644 --- a/dita/RTC-NG/API/api_irtcengine_pushvideoframe4.dita +++ b/dita/RTC-NG/API/api_irtcengine_pushvideoframe4.dita @@ -26,7 +26,7 @@
    详情

    -

    调用该方法或 均能将视频帧数据传递给 SDK。区别为该方法支持 Texture 格式的视频数据。

    +

    调用该方法或 均能将视频帧数据传递给 SDK。区别为该方法支持 Texture 格式的视频数据。

    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita index a7eabfefe99..f5b4c67aab8 100644 --- a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita +++ b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita @@ -42,8 +42,7 @@
  • 每个数据通道每秒最多能发送 60 个包(每个包最大为 1 KB)。
  • 每个数据通道每秒最多能发送 30 KB 数据。
  • -

    成功调用该方法后,远端会触发 回调,远端用户可以在该回调中获取接收到的流消息; - 若调用失败,远端会触发 回调。

    +

    成功调用该方法后,远端会触发 回调,远端用户可以在该回调中获取接收到的流消息;若调用失败,远端会触发 回调。

    • 该方法需要在加入频道后、且调用 创建数据通道之后调用。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_setcameracapturerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_setcameracapturerconfiguration.dita index 82081bdb1f2..c7d641d256c 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameracapturerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameracapturerconfiguration.dita @@ -36,10 +36,10 @@

      该方法必须在开启本地摄像头采集前调用,如 前调用。

    - <ph>调用限制</ph> + 调用限制

    在调整摄像头的焦距配置前,建议先调用 查询设备支持的焦距能力,再根据查询结果进行配置。

    由于部分 Android 设备的限制,即使根据 的查询结果设置焦距类型,设置结果也可能不生效。

    -

    无。

    +

    无。

    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita b/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita index 52dc5928491..6efdd0619b2 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita @@ -44,11 +44,11 @@
    参数 - + positionXinView 触摸点相对于视图的横坐标。 - + positionYinView 触摸点相对于视图的纵坐标。 diff --git a/dita/RTC-NG/API/api_irtcengine_setcamerafocuspositioninpreview.dita b/dita/RTC-NG/API/api_irtcengine_setcamerafocuspositioninpreview.dita index 60b2b74a989..70a41a6a0e1 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcamerafocuspositioninpreview.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcamerafocuspositioninpreview.dita @@ -44,11 +44,11 @@
    参数 - + positionX 触摸点相对于视图的横坐标。 - + positionY 触摸点相对于视图的纵坐标。 diff --git a/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita b/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita index 58cf80f9887..3d39dc25410 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita @@ -38,7 +38,7 @@ 参数 - factor + factor zoomFactor 摄像头缩放比例。对不支持超广角的设备,取值范围从 1.0 到最大缩放比例;对支持超广角的设备,取值范围从 0.5 到最大缩放比例。你可以通过 方法获取设备支持的最大缩放比例。 diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendermode2.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendermode2.dita index 5fde4f6d6e9..4ad2ded3587 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendermode2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendermode2.dita @@ -53,7 +53,7 @@ 参数 - renderMode + renderMode mode

    本地视图显示模式。详见

    @@ -62,7 +62,7 @@
    • (1):优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,多出的视频将被截掉。
    • (2):优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频长宽与显示窗口不同,视窗上未被填满的区域将被涂黑。
    • -
    • (3):匹配模式。 +
    • (3):匹配模式。
      弃用:
      diff --git a/dita/RTC-NG/API/api_irtcengine_setparameters.dita b/dita/RTC-NG/API/api_irtcengine_setparameters.dita index 81c7ab78060..d09551b63a3 100644 --- a/dita/RTC-NG/API/api_irtcengine_setparameters.dita +++ b/dita/RTC-NG/API/api_irtcengine_setparameters.dita @@ -37,7 +37,7 @@ 参数 - parameters + parameters options JSON 字符串形式的参数。 diff --git a/dita/RTC-NG/API/api_irtcengine_setremotedefaultvideostreamtype.dita b/dita/RTC-NG/API/api_irtcengine_setremotedefaultvideostreamtype.dita index 3f8d387ebca..4961d62d5ff 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremotedefaultvideostreamtype.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremotedefaultvideostreamtype.dita @@ -49,8 +49,8 @@ streamType -

      默认订阅的视频流类型:

      -

      默认订阅的视频流类型: +

      默认订阅的视频流类型:

      +

      默认订阅的视频流类型:

      • (0):视频大流,即高分辨率、高码率视频流。
      • (1):视频小流,即低分辨率、低码率视频流。
      • diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendermode2.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendermode2.dita index f5e1dda352e..959603d3a68 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremoterendermode2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendermode2.dita @@ -51,11 +51,11 @@ userId - uid + uid 远端用户 ID。 - renderMode + renderMode mode

        远端用户视图的渲染模式,详见

        @@ -70,7 +70,7 @@
        - mirrorMode + mirrorMode mirror

        远端用户视图的镜像模式,详见

        diff --git a/dita/RTC-NG/API/api_irtcengine_setremotevideostreamtype.dita b/dita/RTC-NG/API/api_irtcengine_setremotevideostreamtype.dita index 15965b90c48..5d97fc5de1e 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremotevideostreamtype.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremotevideostreamtype.dita @@ -59,8 +59,8 @@ streamType -

        视频流类型:

        -

        视频流类型: +

        视频流类型:

        +

        视频流类型:

        • 0:视频大流。
        • 1:视频小流。
        • diff --git a/dita/RTC-NG/API/api_irtcengine_setuplocalvideo.dita b/dita/RTC-NG/API/api_irtcengine_setuplocalvideo.dita index 1bde9a3adc5..d87eccb09fb 100644 --- a/dita/RTC-NG/API/api_irtcengine_setuplocalvideo.dita +++ b/dita/RTC-NG/API/api_irtcengine_setuplocalvideo.dita @@ -26,7 +26,7 @@

    -

    该方法初始化本地视图并设置本地用户视频显示属性,只影响本地用户看到的视频画面,不影响本地视频的发布。调用该方法绑定本地视频流的显示视窗(view),并设置本地用户视图的渲染模式和镜像模式。

    +

    该方法初始化本地视图并设置本地用户视频显示属性,只影响本地用户看到的视频画面,不影响本地视频的发布。调用该方法绑定本地视频流的显示视窗 (view),并设置本地用户视图的渲染模式和镜像模式。

    退出频道后绑定仍然有效。如果需要停止渲染或解除绑定,可以调用该方法将参数 view 设为 ,以停止渲染并清理渲染缓存。

      diff --git a/dita/RTC-NG/API/api_irtcengine_setupremotevideo.dita b/dita/RTC-NG/API/api_irtcengine_setupremotevideo.dita index eae02628ca2..6d49f9fe2f6 100644 --- a/dita/RTC-NG/API/api_irtcengine_setupremotevideo.dita +++ b/dita/RTC-NG/API/api_irtcengine_setupremotevideo.dita @@ -44,7 +44,7 @@ 参数 - canvas + canvas remote

      远端视频显示属性。详见

      diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita b/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita index 3e57579b146..82a97e8a604 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita @@ -14,7 +14,7 @@

      public abstract int startAudioMixing(String filePath, boolean loopback, int cycle); - public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number): number; + - (int)startAudioMixing:(NSString * _Nonnull)filePath loopback:(BOOL)loopback cycle:(NSInteger)cycle NS_SWIFT_NAME(startAudioMixing(_:loopback:cycle:)); diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita index eb3f209ff98..f5353593415 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita @@ -45,8 +45,8 @@ quality - 录音质量。详见 -

        + 录音质量。详见 +
        • 0: 低音质。采样率为 32 kHz,录制 10 分钟的文件大小为 1.2 M 左右。
        • 1: 中音质。采样率为 32 kHz,录制 10 分钟的文件大小为 2 M 左右。
        • 2: 高音质。采样率为 32 kHz,录制 10 分钟的文件大小为 3.75 M 左右。
        • diff --git a/dita/RTC-NG/API/api_irtcengine_startlastmileprobetest.dita b/dita/RTC-NG/API/api_irtcengine_startlastmileprobetest.dita index d4644d1c0ba..f50e9ac4f63 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlastmileprobetest.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlastmileprobetest.dita @@ -38,7 +38,7 @@
      diff --git a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita index 89e5d73ec6c..3e2ce455c0a 100644 --- a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita +++ b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita @@ -32,7 +32,7 @@
    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    该方法需要在 之后调用。

    diff --git a/dita/RTC-NG/API/api_irtcengineex_setupremotevideoex.dita b/dita/RTC-NG/API/api_irtcengineex_setupremotevideoex.dita index adaf1417277..30909074de5 100644 --- a/dita/RTC-NG/API/api_irtcengineex_setupremotevideoex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_setupremotevideoex.dita @@ -51,7 +51,7 @@ remote - canvas + canvas

    视频画布信息。详见

    diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita index 14fc016e6b2..10724e1a0c7 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita @@ -40,7 +40,8 @@
    v4.1.0
    -

    当你调 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    +

    当你调用 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    +

    当你调用 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    参数 @@ -68,7 +69,7 @@ list result - 音乐资源列表的详细信息。详见 + 音乐资源列表的详细信息。详见
    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita index 5edbd44a1e0..0c80700184d 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita @@ -49,7 +49,7 @@ channelMediaRelayStateDidChange:(AgoraChannelMediaRelayState)state state -

    跨频道媒体流转发状态。详见

    +

    跨频道媒体流转发状态。详见

    跨频道媒体流转发状态:

      @@ -63,7 +63,7 @@ channelMediaRelayStateDidChange:(AgoraChannelMediaRelayState)state code -

      跨频道媒体流转发出错的错误码。详见

      +

      跨频道媒体流转发出错的错误码。详见

      跨频道媒体流转发出错的错误码: diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfacepositionchanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfacepositionchanged.dita index a73c5a4421c..9a9cce26d8c 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfacepositionchanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onfacepositionchanged.dita @@ -73,12 +73,12 @@ - imageWidth + imageWidth width 摄像头采集画面的宽度 (px)。 - imageHeight + imageHeight height 摄像头采集画面的高度 (px)。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmileproberesult.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmileproberesult.dita index 9002022c944..388f73c7906 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmileproberesult.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmileproberesult.dita @@ -42,7 +42,7 @@ result - 上下行 Last mile 质量探测结果。 详见: + 上下行 Last mile 质量探测结果。详见

    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita index 00f7c54ed8d..358d7f3d8d6 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlastmilequality.dita @@ -40,7 +40,7 @@ quality - Last mile 网络质量。详见 + Last mile 网络质量。详见
    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita index 79dfc18c90c..a2cc44d6b24 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita @@ -68,7 +68,7 @@
    txQuality - 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。 该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 720 的分辨率就会有困难。 详见 + 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。 该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 720 的分辨率就会有困难。详见
    diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingevent.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingevent.dita index e1dc9608361..e6c7a4488ea 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingevent.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingevent.dita @@ -39,8 +39,8 @@ eventCode event - 旁路推流事件码。详见 - 旁路推流事件码。 + 旁路推流事件码。详见 + 旁路推流事件码。
    • (1): 旁路推流时,添加背景图或水印出错。
    • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita index 11899ac3143..4b204135a3a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita @@ -82,8 +82,8 @@ reason - 推流状态改变的原因,详见 - 推流状态改变的原因。 + 推流状态改变的原因,详见 + 推流状态改变的原因。
      • (0):推流成功。
      • (1):参数无效。请检查输入参数是否正确。
      • diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita index e7a7f8dd295..61d958be74a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita @@ -59,7 +59,7 @@ - uid + uid userId remoteUid 发送消息的用户 ID。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessageerror.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessageerror.dita index 06256fe1811..81ab900c3be 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessageerror.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessageerror.dita @@ -65,10 +65,10 @@ connection - Connection 信息。详见 + Connection 信息。详见 - uid + uid userId remoteUid 发送消息的用户 ID。 @@ -79,8 +79,8 @@ code - error - 发生错误的错误码。详见 + error + 错误码。详见 missed diff --git a/dita/RTC-NG/API/class_simulcaststreamconfig.dita b/dita/RTC-NG/API/class_simulcaststreamconfig.dita index cda236b0a3a..f13d4bab7fc 100644 --- a/dita/RTC-NG/API/class_simulcaststreamconfig.dita +++ b/dita/RTC-NG/API/class_simulcaststreamconfig.dita @@ -118,7 +118,7 @@ public: 视频尺寸。详见 默认值为视频大流的 50%。 - bitrate + bitrate kBitrate 视频码率 (Kbps)。该参数无需设置,SDK 会根据你设定的视频分辨率和帧率自动匹配最合适的码率。 diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index bc45c365d46..22dfd24c308 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -411,7 +411,7 @@ - + @@ -448,7 +448,7 @@ - + @@ -616,9 +616,9 @@ - + - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 21d7edb2730..9a39f817eef 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -482,7 +482,7 @@ - + getMediaPlayerCacheManager @@ -1557,7 +1557,7 @@ - + @@ -3147,7 +3147,7 @@ - + @@ -4736,7 +4736,7 @@ - + AgoraVideoFrame @@ -6141,28 +6141,28 @@ - AUDIO_DUAL_MONO_STEREO + STEREO - AUDIO_DUAL_MONO_L + L - AUDIO_DUAL_MONO_R + R - AUDIO_DUAL_MONO_MIX + MIX @@ -7153,220 +7153,234 @@ + + + + ChannelMediaRelayError + + + - RELAY_OK + OK - RELAY_ERROR_SERVER_ERROR_RESPONSE + SERVER_ERROR_RESPONSE - RELAY_ERROR_SERVER_NO_RESPONSE + SERVER_NO_RESPONSE - RELAY_ERROR_NO_RESOURCE_AVAILABLE + NO_RESOURCE_AVAILABLE - RELAY_ERROR_FAILED_JOIN_SRC + FAILED_JOIN_SRC - RELAY_ERROR_FAILED_JOIN_DEST + FAILED_JOIN_DEST - RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC + FAILED_PACKET_RECEIVED_FROM_SRC - RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST + FAILED_PACKET_SENT_TO_DEST - RELAY_ERROR_SERVER_CONNECTION_LOST + SERVER_CONNECTION_LOST - RELAY_ERROR_INTERNAL_ERROR + INTERNAL_ERROR - RELAY_ERROR_SRC_TOKEN_EXPIRED + SRC_TOKEN_EXPIRED - RELAY_ERROR_DEST_TOKEN_EXPIRED + DEST_TOKEN_EXPIRED + + + + + + + ChannelMediaRelayState - RELAY_EVENT_NETWORK_DISCONNECTED + NETWORK_DISCONNECTED - RELAY_EVENT_NETWORK_CONNECTED + NETWORK_CONNECTED - RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL + PACKET_JOINED_SRC_CHANNEL - RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL + PACKET_JOINED_DEST_CHANNEL - RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL + PACKET_SENT_TO_DEST_CHANNEL - RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC + PACKET_RECEIVED_VIDEO_FROM_SRC - RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC + PACKET_RECEIVED_AUDIO_FROM_SRC - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL + PACKET_UPDATE_DEST_CHANNEL - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE + PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL + PACKET_UPDATE_DEST_CHANNEL_IS_NULL - RELAY_EVENT_VIDEO_PROFILE_UPDATE + VIDEO_PROFILE_UPDATE - RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS + PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS - RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED + PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED - RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS + RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS - RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED + RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED - RELAY_STATE_IDLE + IDLE - RELAY_STATE_CONNECTING + CONNECTING - RELAY_STATE_RUNNING + RUNNING - RELAY_STATE_FAILURE + FAILURE @@ -9102,70 +9116,70 @@ - PLAYER_STATE_UNKNOWN + UNKNOWN - PLAYER_STATE_IDLE + IDLE - PLAYER_STATE_OPENING + OPENING - PLAYER_STATE_OPEN_COMPLETED + OPEN_COMPLETED - PLAYER_STATE_PLAYING + PLAYING - PLAYER_STATE_PAUSED + PAUSED - PLAYER_STATE_PLAYBACK_COMPLETED + PLAYBACK_COMPLETED - PLAYER_STATE_PLAYBACK_ALL_LOOPS_COMPLETED + PLAYBACK_ALL_LOOPS_COMPLETED - PLAYER_STATE_STOPPED + STOPPED - PLAYER_STATE_FAILED + FAILED From e8a73918fef22383da6b69a4e2591c5ebd1939eb Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:23:13 +0800 Subject: [PATCH 070/354] that's all --- .../API/api_irtcengine_leavechannel2.dita | 4 +- ...pectrumobserver_onremoteaudiospectrum.dita | 8 +- ...eventhandler_onclientrolechangefailed.dita | 4 +- dita/RTC-NG/API/class_audioparams.dita | 7 +- dita/RTC-NG/API/class_audiospectrumdata.dita | 2 +- .../class_cameracapturerconfiguration.dita | 2 +- .../RTC-NG/API/class_channelmediaoptions.dita | 4 +- .../class_channelmediarelayconfiguration.dita | 14 +-- dita/RTC-NG/API/class_clientroleoptions.dita | 4 +- .../API/class_contentinspectconfig.dita | 6 +- .../API/class_contentinspectmodule.dita | 4 +- dita/RTC-NG/API/class_encryptionconfig.dita | 2 +- dita/RTC-NG/API/class_localvideostats.dita | 2 +- dita/RTC-NG/API/class_logconfig.dita | 2 +- dita/RTC-NG/API/class_mediasource.dita | 2 +- dita/RTC-NG/API/class_recorderinfo.dita | 4 +- dita/RTC-NG/API/class_rtcimage.dita | 10 +- dita/RTC-NG/API/class_transcodinguser.dita | 8 +- .../API/class_useraudiospectruminfo.dita | 6 +- dita/RTC-NG/API/class_videocanvas.dita | 10 +- .../API/class_videoencoderconfiguration.dita | 4 +- dita/RTC-NG/API/class_videoframe.dita | 27 +++-- .../API/class_virtualbackgroundsource.dita | 6 +- dita/RTC-NG/API/rtc_api_data_type.dita | 66 +++++------ dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 14 +-- .../config/keys-rtc-ng-api-harmony.ditamap | 111 +++++++++++++----- 26 files changed, 198 insertions(+), 135 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_leavechannel2.dita b/dita/RTC-NG/API/api_irtcengine_leavechannel2.dita index 6ac30b7c2d8..da910159ae4 100644 --- a/dita/RTC-NG/API/api_irtcengine_leavechannel2.dita +++ b/dita/RTC-NG/API/api_irtcengine_leavechannel2.dita @@ -28,8 +28,8 @@

    调用该方法后,SDK 会终止音视频互动、离开当前频道,并会释放会话相关的所有资源。

    -

    成功加入频道后,必须调用本方法或者 结束通话,否则无法开始下一次通话。如果你已调用 加入多个频道,调用本方法后会同时离开所有已加入的频道。

    -

    成功加入频道后,必须调用本方法结束通话,否则无法开始下一次通话。如果你已调用 加入多个频道,调用本方法后会同时离开所有已加入的频道。

    +

    成功加入频道后,必须调用本方法或者 结束通话,否则无法开始下一次通话。如果你已调用 加入多个频道,调用本方法后会同时离开所有已加入的频道。

    +

    成功加入频道后,必须调用本方法结束通话,否则无法开始下一次通话。如果你已调用 加入多个频道,调用本方法后会同时离开所有已加入的频道。

    该方法是异步操作,调用返回时并没有真正退出频道。
    diff --git a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita index db6d6fcd2cb..3f90dbce3fe 100644 --- a/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita +++ b/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita @@ -43,8 +43,12 @@
    参数 - - userAudioSpectrumInfos + + data + 远端用户的音频频谱信息,详见 。数组数量等于 SDK 监测到的远端用户数量,数组为空表示没有监测到远端用户的音频频谱。 + + + userAudioSpectrumInfos AudioSpectrumInfo spectrums 远端用户的音频频谱信息,详见 。 数组数量等于 SDK 监测到的远端用户数量,数组为空表示没有监测到远端用户的音频频谱。 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita index 914a813bd0f..41fe7647a8e 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechangefailed.dita @@ -44,7 +44,7 @@
    触发时机 -

    本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

    +

    本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

    本地用户加入频道后调用 设置用户角色失败时,SDK 会触发该回调。

    @@ -91,4 +91,4 @@
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_audioparams.dita b/dita/RTC-NG/API/class_audioparams.dita index 09f71cd5182..6a4e83ffbc1 100644 --- a/dita/RTC-NG/API/class_audioparams.dita +++ b/dita/RTC-NG/API/class_audioparams.dita @@ -20,7 +20,12 @@ this.samplesPerCall = samplesPerCall; } } - + export class AudioParams { + public sampleRate: number = 16000; + public channel: number = 1; + public mode: Constants.RawAudioFrameOpMode = Constants.RawAudioFrameOpMode.READ_ONLY; + public samplesPerCall: number = 1024; +} __attribute__((visibility("default"))) @interface AgoraAudioParams : NSObject @property (assign, nonatomic) NSInteger sampleRate; diff --git a/dita/RTC-NG/API/class_audiospectrumdata.dita b/dita/RTC-NG/API/class_audiospectrumdata.dita index da3718f45dd..021420a3e66 100644 --- a/dita/RTC-NG/API/class_audiospectrumdata.dita +++ b/dita/RTC-NG/API/class_audiospectrumdata.dita @@ -72,7 +72,7 @@ struct FAudioSpectrumData {

    音频频谱数据。声网将声音频率分为 256 个频域,通过该参数报告各频域的能量值,每个能量值的取值范围为 [-300,1],单位为 dBFS。

    - + dataLength 音频频谱数据长度为 256。 diff --git a/dita/RTC-NG/API/class_cameracapturerconfiguration.dita b/dita/RTC-NG/API/class_cameracapturerconfiguration.dita index 2e627a2ff24..d9c1edaefcf 100644 --- a/dita/RTC-NG/API/class_cameracapturerconfiguration.dita +++ b/dita/RTC-NG/API/class_cameracapturerconfiguration.dita @@ -341,7 +341,7 @@ class CameraCapturerConfiguration { <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - + cameraDirection (可选)摄像头方向。详见 该参数仅适用于 Android 和 iOS 平台。 diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index db74b395cf2..3542e5816ce 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -1501,7 +1501,7 @@ public: 该参数仅适用于 Windows 和 macOS 平台。 - + publishScreenCaptureVideo

    设置是否发布屏幕采集的视频: @@ -1512,7 +1512,7 @@ public: 该参数仅适用于 Android 和 iOS 平台。 自 v4.0.0 起,该参数名称由 publishScreenTrack 改为 publishScreenCaptureVideo - + publishScreenCaptureAudio

    设置是否发布屏幕采集的音频: diff --git a/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita b/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita index 5a60c85ae1b..eb5d3ac69cf 100644 --- a/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita +++ b/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita @@ -153,20 +153,20 @@ public: setSrcChannelInfo 设置源频道信息。详见 - + setDestChannelInfo 设置目标频道信息。详见 - - removeDestChannelInfo + + removeDestChannelInfo removeDestinationInfoForChannelName 删除目标频道信息。详见 - + getSrcChannelMediaInfo 获取源频道信息。详见 - + getDestChannelMediaInfos 获取目标频道信息。详见 @@ -176,7 +176,7 @@ public: <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - srcInfo + srcInfo sourceInfo

    源频道信息 ,包含如下成员: @@ -192,7 +192,7 @@ public: - destInfos + destInfos destinationInfos

    目标频道信息 ,包含如下成员: diff --git a/dita/RTC-NG/API/class_clientroleoptions.dita b/dita/RTC-NG/API/class_clientroleoptions.dita index 4cbae7da5c2..04b90c7613a 100644 --- a/dita/RTC-NG/API/class_clientroleoptions.dita +++ b/dita/RTC-NG/API/class_clientroleoptions.dita @@ -80,8 +80,8 @@ public: audienceLatencyLevel - 观众端延时级别。详见 -

      + 观众端延时级别。详见 +
      • (1): 低延时。
      • (2): (默认)超低延时。
      diff --git a/dita/RTC-NG/API/class_contentinspectconfig.dita b/dita/RTC-NG/API/class_contentinspectconfig.dita index 8d10bbe5f4b..9b697c79f8f 100644 --- a/dita/RTC-NG/API/class_contentinspectconfig.dita +++ b/dita/RTC-NG/API/class_contentinspectconfig.dita @@ -169,7 +169,7 @@ class ContentInspectConfig {
      参数 - + CONTENT_INSPECT_TYPE_INVALID 0:(默认)无实际功能。请不要将 type 设为该值。 @@ -177,11 +177,11 @@ class ContentInspectConfig { CONTENT_INSPECT_TYPE_MODERATION 1:视频鉴黄。SDK 会对本地用户发送的视频进行截图、鉴黄,并将截图和审核结果上传。 - + CONTENT_INSPECT_TYPE_SUPERVISE 2:使用声网自研插件截图上传。SDK 会对本地用户发送的视频进行截图并上传。 - + CONTENT_INSPECT_TYPE_IMAGE_MODERATION 3:使用云市场插件截图上传。SDK 会使用云市场视频审核插件对视频流进行截图并上传。 diff --git a/dita/RTC-NG/API/class_contentinspectmodule.dita b/dita/RTC-NG/API/class_contentinspectmodule.dita index d2bfc34e2d1..a79c6ff18fd 100644 --- a/dita/RTC-NG/API/class_contentinspectmodule.dita +++ b/dita/RTC-NG/API/class_contentinspectmodule.dita @@ -96,8 +96,8 @@ public: type - 功能模块的类型。详见 - + 功能模块的类型。详见 +

      功能模块的类型:

      • (0):(默认)该功能模块无实际功能。请不要设为该值。
      • diff --git a/dita/RTC-NG/API/class_encryptionconfig.dita b/dita/RTC-NG/API/class_encryptionconfig.dita index 3f507ce2e8c..a789b307b24 100644 --- a/dita/RTC-NG/API/class_encryptionconfig.dita +++ b/dita/RTC-NG/API/class_encryptionconfig.dita @@ -169,7 +169,7 @@ class EncryptionConfig { 只有在 加密模式下,该参数才生效。此时,需确保填入该参数的值不全为 0 - + datastreamEncryptionEnabled 是否开启数据流加密:
          diff --git a/dita/RTC-NG/API/class_localvideostats.dita b/dita/RTC-NG/API/class_localvideostats.dita index cf2d330c67f..b0a276bbe30 100644 --- a/dita/RTC-NG/API/class_localvideostats.dita +++ b/dita/RTC-NG/API/class_localvideostats.dita @@ -549,7 +549,7 @@ public: codecType - 视频的编码类型。详见 。 + 视频的编码类型。详见

          • (1):VP8。
          • diff --git a/dita/RTC-NG/API/class_logconfig.dita b/dita/RTC-NG/API/class_logconfig.dita index bffeaa37523..25786510791 100644 --- a/dita/RTC-NG/API/class_logconfig.dita +++ b/dita/RTC-NG/API/class_logconfig.dita @@ -127,7 +127,7 @@ public:
        • Windows:C:\Users\<user_name>\AppData\Local\Agora\<process_name>\agorasdk.log

        -

        默认路径为 /storage/emulated/0/Android/data/<packagename>/files/agorasdk.log

        +

        默认路径为 /storage/emulated/0/Android/data/<packagename>/files/agorasdk.log

        默认路径为 AppSandbox/Library/caches/agorasdk.log

        默认路径为: diff --git a/dita/RTC-NG/API/class_mediasource.dita b/dita/RTC-NG/API/class_mediasource.dita index 1b96d165165..4ef17912603 100644 --- a/dita/RTC-NG/API/class_mediasource.dita +++ b/dita/RTC-NG/API/class_mediasource.dita @@ -212,7 +212,7 @@ public: url

        需要播放的媒体资源的 URL。

        - +

        如果你打开的为普通媒体资源,请向 url 传值;如果你打开媒体资源为自定义媒体资源,请向 playerOnReadCallbackplayerOnSeekCallback 传值,同时传值会导致方法调用失败。

        如果你打开的为普通媒体资源,请向 url 传值;如果你打开媒体资源为自定义媒体资源,请向 provider 传值,同时传值会导致方法调用失败。

        diff --git a/dita/RTC-NG/API/class_recorderinfo.dita b/dita/RTC-NG/API/class_recorderinfo.dita index ad61164843b..7d49913948f 100644 --- a/dita/RTC-NG/API/class_recorderinfo.dita +++ b/dita/RTC-NG/API/class_recorderinfo.dita @@ -96,7 +96,7 @@ struct FRecorderInfo { <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> - fileName + fileName recorderFileName 录制文件的绝对存储路径。 @@ -110,4 +110,4 @@ struct FRecorderInfo {
      - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_rtcimage.dita b/dita/RTC-NG/API/class_rtcimage.dita index f59403ca47a..454fdde36ed 100644 --- a/dita/RTC-NG/API/class_rtcimage.dita +++ b/dita/RTC-NG/API/class_rtcimage.dita @@ -229,19 +229,19 @@ struct FRtcImage url 直播视频上图片的 HTTP/HTTPS 地址。字符长度不得超过 1024 字节。 - + x 图片在视频画面上的 x 坐标 (px),以输出视频画面的左上角为原点。 - + y 图片在视频画面上的 y 坐标 (px),以输出视频画面的左上角为原点。 - + width 图片在视频画面上的宽度 (px)。 - + height 图片在视频画面上的高度 (px)。 @@ -264,4 +264,4 @@ struct FRtcImage
    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_transcodinguser.dita b/dita/RTC-NG/API/class_transcodinguser.dita index 926cc5a718e..a3b58b42732 100644 --- a/dita/RTC-NG/API/class_transcodinguser.dita +++ b/dita/RTC-NG/API/class_transcodinguser.dita @@ -212,21 +212,21 @@ public:

    主播的用户 ID。

    - + x

    主播视频画面在输出视频画面的 x 坐标 (px),以输出视频画面的左上角为原点。取值范围为[0,width],width 为 中设置的 width

    - + y 主播视频画面在输出视频画面的 y 坐标 (px),以输出视频画面的左上角为原点。取值范围为[0,height],height 为 中设置的 height - + width 主播视频画面的宽 (px)。 - + height

    主播视频画面的高 (px)。

    diff --git a/dita/RTC-NG/API/class_useraudiospectruminfo.dita b/dita/RTC-NG/API/class_useraudiospectruminfo.dita index cfda2556d3c..d2318438266 100644 --- a/dita/RTC-NG/API/class_useraudiospectruminfo.dita +++ b/dita/RTC-NG/API/class_useraudiospectruminfo.dita @@ -11,7 +11,7 @@ private AudioSpectrumInfo audioSpectrumInfo; } - + __attribute__((visibility("default"))) @interface AgoraAudioSpectrumInfo : NSObject @property(nonatomic, assign) NSInteger uid; @@ -77,9 +77,9 @@ struct FUserAudioSpectrumInfo { audioSpectrumData spectrumData -

    远端用户的音频频谱数据。详见

    +

    远端用户的音频频谱数据。详见

    - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_videocanvas.dita b/dita/RTC-NG/API/class_videocanvas.dita index e81733e9948..3c03a71e988 100644 --- a/dita/RTC-NG/API/class_videocanvas.dita +++ b/dita/RTC-NG/API/class_videocanvas.dita @@ -335,7 +335,7 @@ class VideoCanvas { sourceType 视频源的类型,详见 - + setupMode 视图设置模式。详见 视图设置模式: @@ -350,7 +350,7 @@ class VideoCanvas { 媒体播放器 ID。可通过 获取。 sourceType 时,此参数为必填项。 - + rect (可选)视频帧的展示区域。详见 。其中,widthheight 表示该区域的视频像素宽度和高度。默认值为空值 (宽或高为 0),表示展示实际分辨率的视频帧。 @@ -362,11 +362,11 @@ class VideoCanvas { cropArea (可选)视频帧的展示区域,详见 。其中,widthheight 表示该区域的视频像素宽度和高度。默认值为空值 (宽或高为 0),表示展示实际分辨率的视频帧。 - + backgroundColor 视频画布的背景颜色,格式为 RGBA。默认值为 0x00000000,代表完全透明的黑色。 - + enableAlphaMask (可选)是否开启 Alpha 遮罩渲染:
      @@ -382,7 +382,7 @@ class VideoCanvas { 预留。 - + position 视频帧在视频链路中的位置。详见 diff --git a/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/dita/RTC-NG/API/class_videoencoderconfiguration.dita index c05e0a09590..9b027c942d9 100644 --- a/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -570,7 +570,7 @@ public: dimensions -

      视频编码的分辨率(px),详见 。该参数用于衡量编码质量,以长 × 宽表示,默认值为 960 × 540。用户可以自行设置分辨率。

      +

      视频编码的分辨率 (px),详见 。该参数用于衡量编码质量,以长 × 宽表示,默认值为 960 × 540。用户可以自行设置分辨率。

      用户可以自行设置分辨率,也可以在如下列表中直接选择想要的分辨率:

        @@ -641,7 +641,7 @@ public: degradationPreference - 带宽受限时,视频编码降级偏好。详见 。 + 带宽受限时,视频编码降级偏好。详见 当该参数设置为 (1) 或者 (2) 时,需要同时将 orientationMode 设置为 (0),否则设置不生效。 diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 0e2de8f9661..8a355275c8d 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -611,46 +611,51 @@ class VideoFrame {
        <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - - type - 像素格式。详见 + + type + 视频类型。详见 + + + format + type + 像素格式。详见 - + width 视频像素宽度。 - + height 视频像素高度。 - + yStride 对 YUV 数据,表示 Y 缓冲区的行跨度;对 RGBA 数据,表示总的数据长度。 在处理视频数据时,需根据该参数处理每行像素数据之间的偏移量,否则可能导致图像失真。 - + uStride 对 YUV 数据,表示 U 缓冲区的行跨度;对 RGBA 数据,值为 0。 在处理视频数据时,需根据该参数处理每行像素数据之间的偏移量,否则可能导致图像失真。 - + vStride 对 YUV 数据,表示 V 缓冲区的行跨度;对 RGBA 数据,值为 0。 在处理视频数据时,需根据该参数处理每行像素数据之间的偏移量,否则可能导致图像失真。 - + yBuffer 对 YUV 数据,表示 Y 缓冲区的指针;对 RGBA 数据,表示数据缓冲区。 - + uBuffer 对 YUV 数据,表示 U 缓冲区的指针;对 RGBA 数据,值为空。 - + vBuffer 对 YUV 数据,表示 V 缓冲区的指针;对 RGBA 数据,值为空。 diff --git a/dita/RTC-NG/API/class_virtualbackgroundsource.dita b/dita/RTC-NG/API/class_virtualbackgroundsource.dita index a110120c1b3..d2b16d43304 100644 --- a/dita/RTC-NG/API/class_virtualbackgroundsource.dita +++ b/dita/RTC-NG/API/class_virtualbackgroundsource.dita @@ -174,7 +174,7 @@ public: <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> - backgroundSourceType + backgroundSourceType background_source_type 自定义的背景。详见
          @@ -201,7 +201,7 @@ public: 该参数仅在自定义背景图类型为 时生效。 - blurDegree + blurDegree blur_degree 自定义背景图的模糊程度。详见
            @@ -213,4 +213,4 @@ public:
        - \ No newline at end of file + diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 8933f9da464..367403d9ef6 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -260,50 +260,50 @@
        • -
        • +
        • -
        • -
        • +
        • +
        • -
        • +
        • -
        • +
          • -
          • -
          • -
          • -
          • +
          • +
          • +
          • +
        • -
        • -
        • -
        • -
        • +
        • +
        • +
        • +
        • -
        • -
        • -
        • -
        • +
        • +
        • +
        • +
        • -
        • -
        • -
        • -
        • -
        • +
        • +
        • +
        • +
        • +
        • -
        • -
        • -
        • +
        • +
        • +
        • @@ -316,7 +316,7 @@
        • -
        • +
        • @@ -325,7 +325,7 @@
        • -
        • +
        • @@ -343,18 +343,18 @@
        • -
        • -
        • -
        • +
        • +
        • +
        • -
        • +
        • -
        • +
        • -
        • +
        diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 22dfd24c308..fc367347568 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -40,7 +40,7 @@ - + @@ -63,14 +63,14 @@ - + - + @@ -467,7 +467,7 @@ - + @@ -480,7 +480,7 @@ - + @@ -534,7 +534,7 @@ - + @@ -547,7 +547,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 9a39f817eef..85dcd2ba826 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -223,7 +223,7 @@ - + IAgoraMusicPlayer @@ -268,7 +268,7 @@ - + @@ -436,7 +436,7 @@ - getPlaySrc [1/2] + getPlaySrc @@ -1265,7 +1265,7 @@ - + @@ -1658,28 +1658,28 @@ - + getAudioEffectManager - + getEffectsVolume - + setEffectsVolume - + setVolumeOfEffect @@ -1708,70 +1708,70 @@ - + stopAllEffects - + preloadEffect - + unloadEffect - + pauseEffect - + pauseAllEffects - + resumeEffect - + resumeAllEffects - + setEffectPosition - + getEffectDuration - + getEffectCurrentPosition @@ -3219,7 +3219,7 @@ - + open @@ -5096,7 +5096,7 @@ - UserAudioSpectrumInfo + AudioSpectrumInfo @@ -5795,31 +5795,38 @@ + + + + ContentInspectType + + + - CONTENT_INSPECT_TYPE_INVALID + INVALID - CONTENT_INSPECT_TYPE_MODERATION + MODERATION - CONTENT_INSPECT_TYPE_SUPERVISE + SUPERVISE - CONTENT_INSPECT_TYPE_IMAGE_MODERATION + IMAGE_MODERATION @@ -6750,21 +6757,21 @@ - AUDIO_SAMPLE_RATE_32000 + TYPE_32000 - AUDIO_SAMPLE_RATE_44100 + TYPE_44100 - AUDIO_SAMPLE_RATE_48000 + TYPE_48000 @@ -10493,31 +10500,38 @@ + + + + StreamSubscribeState + + + - SUB_STATE_IDLE + IDLE - SUB_STATE_NO_SUBSCRIBED + NO_SUBSCRIBED - SUB_STATE_SUBSCRIBING + SUBSCRIBING - SUB_STATE_SUBSCRIBED + SUBSCRIBED @@ -10542,6 +10556,13 @@ + + + + VideoBufferType + + + @@ -10570,6 +10591,34 @@ + + + + VideoBufferType + + + + + + + VIDEO_BUFFER_RAW_DATA + + + + + + + VIDEO_BUFFER_ARRAY + + + + + + + VIDEO_BUFFER_TEXTURE + + + From 707ddc32ada9ecfe68e26e7e0094606972485adf Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:11:59 +0800 Subject: [PATCH 071/354] fix publish errors --- .../API/api_irtcengine_playeffect3.dita | 8 +++--- dita/RTC-NG/API/rtc_api_overview.dita | 28 +++++++++---------- .../config/keys-rtc-ng-api-harmony.ditamap | 16 +---------- 3 files changed, 19 insertions(+), 33 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita index 40f83347ced..6d77e9871eb 100644 --- a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita +++ b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita @@ -77,8 +77,8 @@

        该方法在加入频道前后均可调用。

    - 调用限制 -

    如果你需要播放在线音效文件,声网建议先将在线音效文件缓存到本地设备,调用 将缓存的音效文件预加载到内存中,然后再调用此方法播放音效。否则,可能出现因在线音效文件加载超时、加载失败而导致的播放失败和无声的问题。

    + <ph props="android cpp apple framework">调用限制</ph> +

    如果你需要播放在线音效文件,声网建议先将在线音效文件缓存到本地设备,调用 将缓存的音效文件预加载到内存中,然后再调用此方法播放音效。否则,可能出现因在线音效文件加载超时、加载失败而导致的播放失败和无声的问题。

    -

    调用该方法启用外部视频源后,你可以调用 向 SDK 推送外部视频数据。

    +

    调用该方法启用外部视频源后,你可以调用 向 SDK 推送外部视频数据。

    +

    调用该方法启用外部视频源后,你可以调用 向 SDK 推送外部视频数据。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_createcustomvideotrack.dita b/dita/RTC-NG/API/api_irtcengine_createcustomvideotrack.dita index 6b4e5a5f591..b7aebaaf27b 100644 --- a/dita/RTC-NG/API/api_irtcengine_createcustomvideotrack.dita +++ b/dita/RTC-NG/API/api_irtcengine_createcustomvideotrack.dita @@ -31,7 +31,7 @@
    1. 调用该方法创建视频轨道并获得视频轨道 ID。
    2. 调用 加入频道时,将 中的 customVideoTrackId 设置为你想要发布的视频轨道 ID,并将 publishCustomVideoTrack 设置为
    3. -
    4. 调用 videoTrackId 指定为步骤 2 中指定的视频轨道 ID,即可实现在频道内发布对应的自定义视频源。
    5. +
    6. 调用 videoTrackId 指定为步骤 2 中指定的视频轨道 ID,即可实现在频道内发布对应的自定义视频源。

    diff --git a/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita b/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita index 3d7085ba607..77c23131a83 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita @@ -14,7 +14,7 @@

    public abstract int enableInEarMonitoring(boolean enabled, int includeAudioFilters); - public abstract enableInEarMonitoring(enabled: boolean, includeAudioFilters: number): number; + public abstract enableInEarMonitoring(enabled: boolean, includeAudioFilters?: Constants.EarMontoringFilterType): number; - (int)enableInEarMonitoring:(BOOL)enabled includeAudioFilters:(AgoraEarMonitoringFilterType)includeAudioFilters; virtual int enableInEarMonitoring(bool enabled, int includeAudioFilters) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") @@ -57,8 +57,8 @@ includeAudioFilters - 耳返 Audio filter 类型。详见 - 耳返 Audio filter 类型: + 耳返 Audio filter 类型。详见 + 耳返 Audio filter 类型:

    • (1 << 0):不在耳返中添加 Audio filter。
    • (1 << 1): 在耳返中添加人声效果 Audio filter。如果你实现了美声、音效等功能,用户可以在耳返中听到添加效果后的声音。该枚举值支持使用按位或运算符(|)进行组合。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita index a73ba01793b..d00c4f1e1c5 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita @@ -29,7 +29,7 @@
      详情

      虚拟背景功能支持将本地用户原来的背景替换为静态图片、动态视频、将背景虚化,或者将人像与背景分割以实现人像画中画。成功开启虚拟背景功能后,频道内所有用户都能看到自定义的背景。

      -

      该方法和 均可用于开启/关闭虚拟背景,区别在于该方法支持在开启虚拟背景时指定应用虚拟背景的媒体源。

      +

      该方法和 均可用于开启/关闭虚拟背景,区别在于该方法支持在开启虚拟背景时指定应用虚拟背景的媒体源。

      请在 之后调用该方法。

      diff --git a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita index 6d77e9871eb..37066919aef 100644 --- a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita +++ b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita @@ -99,6 +99,7 @@

      播放文件的地址,支持在线文件的 URL 地址、播放文件的绝对路径,需精确到文件名及后缀。支持的音频格式包括 MP3、AAC、M4A、MP4、WAV、3GP 等。详见支持的媒体格式

      播放文件的地址,支持以 content:// 开头的 URI 地址、以 /assets/ 开头的路径、在线文件的 URL 地址、本地文件的绝对路径,需精确到文件名及后缀。支持的音频格式包括 MP3、AAC、M4A、MP4、WAV、3GP。详见支持的媒体格式

      播放文件的地址,支持以 ipod-library// 开头的文件路径、在线文件的 URL 地址、文件的绝对路径,需精确到文件名及后缀。支持的音频格式包括 MP3、AAC、M4A、MP4、WAV、3GP。详见支持的媒体格式

      +

      播放文件的地址。

      如果你已通过 将音效加载至内存,请确保该参数与 中设置的 filePath 相同。 diff --git a/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita b/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita index 89c7370fd41..57d8825412a 100644 --- a/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita @@ -34,7 +34,7 @@

    SDK 默认设置用户角色为观众,你可以调用该方法设置用户角色为主播。用户角色(role)确定用户在 SDK 层的权限,包含是否有发流权限等。

    -

    该方法与 的区别在于,该方法还支持设置观众端延时级别(audienceLatencyLevel)。audienceLatencyLevel 需与 role 结合使用,确定用户在其权限范围内可以享受到的服务。例如对于观众,选择接收低延时还是超低延时的视频流。不同的延时级别会影响计费,详见

    +

    该方法与 的区别在于,该方法还支持设置观众端延时级别(audienceLatencyLevel)。audienceLatencyLevel 需与 role 结合使用,确定用户在其权限范围内可以享受到的服务。例如对于观众,选择接收低延时还是超低延时的视频流。不同的延时级别会影响计费,详见

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita index f5353593415..e0bab685196 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita @@ -45,7 +45,7 @@ quality - 录音质量。详见 + 录音质量。详见
    • 0: 低音质。采样率为 32 kHz,录制 10 分钟的文件大小为 1.2 M 左右。
    • 1: 中音质。采样率为 32 kHz,录制 10 分钟的文件大小为 2 M 左右。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalvideotranscoder.dita b/dita/RTC-NG/API/api_irtcengine_startlocalvideotranscoder.dita index 997066632b2..88419566f70 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalvideotranscoder.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalvideotranscoder.dita @@ -38,15 +38,15 @@

      你可以在远程会议、直播、在线教育等场景下开启本地合图功能,可以让用户更加方便地查看和管理多个视频画面,同时支持人像画中画等功能。

      以下是一个实现人像画中画的典型场景:

        -
      1. 调用 ,并将自定义背景图设置为 ,即:在摄像头采集的视频中将人像和背景分割。
      2. -
      3. 调用 ,开始采集屏幕共享视频流。
      4. +
      5. 调用 ,并将自定义背景图设置为 ,即:在摄像头采集的视频中将人像和背景分割。
      6. +
      7. 调用 ,开始采集屏幕共享视频流。
      8. 调用该方法,并将采集人像的视频源设置为参与本地合图的视频源之一,即可在合图后的视频中实现人像画中画。

    调用时机
      -
    • 如果你需要对本地采集的视频流进行合图,需要在 之后调用该方法。
    • +
    • 如果你需要对本地采集的视频流进行合图,需要在 之后调用该方法。
    • 如果你要将合图后的视频流发布到频道中,需要在调用 时,将 中的 publishTranscodedVideoTrack 设置为
    @@ -59,6 +59,7 @@
  • 在 macOS 平台上,最多支持 4 路摄像头采集的视频流 + 1 路屏幕共享流合图。
  • 在 Android 和 iOS 平台上,最多支持 2 路摄像头采集的视频流(需要设备本身支持双摄或支持外接摄像头)+ 1 路屏幕共享合图。
  • 在 Android 平台上,最多支持 2 路摄像头采集的视频流(需要设备本身支持双摄或支持外接摄像头)+ 1 路屏幕共享合图。
  • +
  • 在 HarmonyOS 平台上,最多支持 2 路摄像头采集的视频流(需要设备本身支持双摄或支持外接摄像头)+ 1 路屏幕共享合图。
  • 在 iOS 平台上,最多支持 2 路摄像头采集的视频流(需要设备本身支持双摄或支持外接摄像头)+ 1 路屏幕共享合图。
  • 在进行合图配置时,需确保采集人像的摄像头视频流在合图中的图层编号大于屏幕共享流的图层编号,否则人像会被屏幕共享覆盖、无法显示在最终合图的视频流中。
  • diff --git a/dita/RTC-NG/API/api_irtcengine_startpreview.dita b/dita/RTC-NG/API/api_irtcengine_startpreview.dita index a67d13e9d80..4f75a86c559 100644 --- a/dita/RTC-NG/API/api_irtcengine_startpreview.dita +++ b/dita/RTC-NG/API/api_irtcengine_startpreview.dita @@ -34,7 +34,7 @@ 调用限制
    • 本地预览默认开启镜像功能。
    • -
    • 在离开频道后,本地预览依然处于开启状态。你需要调用 关闭本地预览。
    • +
    • 在离开频道后,本地预览依然处于开启状态。你需要调用 关闭本地预览。
    diff --git a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita index 3e2ce455c0a..0e74806bcd4 100644 --- a/dita/RTC-NG/API/api_irtcengine_stopeffect.dita +++ b/dita/RTC-NG/API/api_irtcengine_stopeffect.dita @@ -28,7 +28,7 @@

    -

    当你不需要再播放某一音效文件时,可以调用该方法停止播放。如果你仅需暂停播放,请调用

    +

    当你不需要再播放某一音效文件时,可以调用该方法停止播放。如果你仅需暂停播放,请调用

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita index d63c70f6c8b..9d17bb39593 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita @@ -61,6 +61,7 @@
  • iOS: /App Sandbox/Library/Caches/example.jpg
  • macOS: ~/Library/Logs/example.jpg
  • Android: /storage/emulated/0/Android/data/<package name>/files/example.jpg
  • +
  • HarmonyOS: /data/app/el2/100/base/PACKAGENAME/haps/ENTRYNAME/files/example.jpg
  • 请确保目录存在且可写。 diff --git a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita index dd4a8b6eadc..c82d5458061 100644 --- a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita @@ -36,12 +36,12 @@

    调用该方法后,SDK 会终止音视频互动、离开当前频道,并会释放会话相关的所有资源。

    -

    调用 成功加入频道后,必须调用本方法或 结束通话,否则无法开始下一次通话。

    -

    调用 成功加入频道后,必须调用本方法结束通话,否则无法开始下一次通话。

    +

    调用 成功加入频道后,必须调用本方法或 结束通话,否则无法开始下一次通话。

    +

    调用 成功加入频道后,必须调用本方法结束通话,否则无法开始下一次通话。

    • 该方法是异步操作,调用返回时并没有真正退出频道。
    • -
    • 如果你调用了 后,会同时离开 加入的频道。
    • +
    • 如果你调用了 后,会同时离开 加入的频道。
    • 如果你调用了 后,会同时离开 加入的频道。
    diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita index 8618ec6077d..fb1a8b9b2f9 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita @@ -15,7 +15,7 @@

    void onPlayBufferUpdated(long playCachedBuffer); - + onPlayBufferUpdated?:(playCachedBuffer:number) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didPlayBufferUpdated:(NSInteger)playCachedBuffer NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:didPlayBufferUpdated:)); virtual void onPlayBufferUpdated(int64_t playCachedBuffer) = 0; diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita index a19de0cc597..e96e83445bc 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita @@ -15,7 +15,7 @@

    void onPlayerEvent(Constants.MediaPlayerEvent eventCode, long elapsedTime, String message); - onPlayerEvent?:(eventCode:Constants.MediaPlayerEvent,elapsedTime:bigint,message:string) => void + onPlayerEvent?:(eventCode:Constants.MediaPlayerEvent,elapsedTime:number,message:string) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didOccurEvent:(AgoraMediaPlayerEvent)eventCode elapsedTime:(NSInteger)elapsedTime diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita index 3136ed52ea5..72aa61f043d 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita @@ -14,7 +14,7 @@

    void onPositionChanged(long positionMs, long timestampMs); - onPositionChanged?:(positionMs:bigint,timestampMs:bigint) => void + onPositionChanged?:(positionMs:number,timestampMs:number) => void - (void)AgoraMediaPlayer:(AgoraMediaPlayer *_Nonnull)playerKit didChangedToPosition:(NSInteger)positionMs atTimestamp:(NSTimeInterval)timestampMs NS_SWIFT_NAME(AgoraMediaPlayer(_:didChangedToPosition:atTimestamp:)); diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita index d26283456fe..1d8e321e3ed 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita @@ -41,7 +41,7 @@ NS_SWIFT_NAME(rtcEngine(_:didClientRoleChanged:newRole:newRoleOptions:));

    触发时机 -

    在以下任意一种情况时,会触发此回调:

      +

      在以下任意一种情况时,会触发此回调:

      • 加入频道后调用 设置用户角色或观众端延时级别。
      • 加入频道前调用 并将用户角色设为 AUDIENCE

      在以下任意一种情况时,会触发此回调:

        @@ -50,7 +50,7 @@ NS_SWIFT_NAME(rtcEngine(_:didClientRoleChanged:newRole:newRoleOptions:));
        使用限制 -

        当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

        +

        当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

        当你在加入频道前调用 并将用户角色设为 BROADCASTER 时,不会触发此回调。

        diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita index 4afdb9459e0..00531d2d469 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita @@ -14,7 +14,7 @@

        public void onJoinChannelSuccess(String channel, int uid, int elapsed) {} - onJoinChannelSuccess?:(cid:string, uid:number, elapsed:number) => void; + onJoinChannelSuccess?:(channel:string, uid:number, elapsed:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didJoinChannel:(NSString * _Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed; virtual void onJoinChannelSuccess(const char* channel, diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita index 5f97ed34e2a..860ba4fcdfb 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita @@ -15,7 +15,7 @@

        public void onLocalVideoStateChanged(Constants.VideoSourceType source, int state, int reason) {} - onLocalVideoStateChanged?:(source: Constants.VideoSourceType, state:Constants.LocalVideoStreamState,error:Constants.LocalVideoStreamReason) => void + onLocalVideoStateChanged?:(source: Constants.VideoSourceType, state:Constants.LocalVideoStreamState,reason:Constants.LocalVideoStreamReason) => void - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine localVideoStateChangedOfState:(AgoraVideoLocalState)state reason:(AgoraLocalVideoStreamReason)reason sourceType:(AgoraVideoSourceType)sourceType NS_SWIFT_NAME(rtcEngine(_:localVideoStateChangedOf:reason:sourceType:)); virtual void onLocalVideoStateChanged(VIDEO_SOURCE_TYPE source, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_REASON reason) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita index 1509afcddb4..0f36e832506 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita @@ -14,7 +14,7 @@

        public void onRejoinChannelSuccess(String channel, int uid, int elapsed) {} - onRejoinChannelSuccess?:(cid:string, uid:number, elapsed:number) => void; + onRejoinChannelSuccess?:(channel:string, uid:number, elapsed:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didRejoinChannel:(NSString * _Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed; virtual void onRejoinChannelSuccess(const char* channel, uid_t uid, int elapsed) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita index 4b204135a3a..4a301984bd2 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita @@ -14,7 +14,7 @@

        public void onRtmpStreamingStateChanged(String url, int state, int reason) {} - onRtmpStreamingStateChanged? : (url:string,state:Constants.RtmpStreamPublishState,errCode:Constants.RtmpStreamPublishReason) => void; + onRtmpStreamingStateChanged? : (url:string,state:Constants.RtmpStreamPublishState,reason:Constants.RtmpStreamPublishReason) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine rtmpStreamingChangedToState:(NSString * _Nonnull)url state:(AgoraRtmpStreamingState)state reason:(AgoraRtmpStreamingReason)reason NS_SWIFT_NAME(rtcEngine(_:rtmpStreamingChangedToState:state:reason:)); diff --git a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita index e50a88db3f0..66925b21623 100644 --- a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita +++ b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita @@ -31,7 +31,7 @@ public mccUid:number = 0 - public maxCacheSize:number = 0 + public maxCacheSize:number = 10 public eventHandler?:IMusicContentCenterEventHandler diff --git a/dita/RTC-NG/API/class_videocanvas.dita b/dita/RTC-NG/API/class_videocanvas.dita index 3c03a71e988..8ac957f7c5f 100644 --- a/dita/RTC-NG/API/class_videocanvas.dita +++ b/dita/RTC-NG/API/class_videocanvas.dita @@ -287,7 +287,7 @@ class VideoCanvas { 当视频源为合图视频流 () 时,该参数表示发布合图视频流的用户 ID。 - + subviewUid 发布某一路合图子视频流的用户 ID。 预留参数。 diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 8a355275c8d..9e9805da7e7 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -263,16 +263,16 @@ public yBuffer: ArrayBuffer | null = null; public uBuffer: ArrayBuffer | null = null; public vBuffer: ArrayBuffer | null = null; + public rotation:number = 0; public timestamp:number = 0; - public stride:number = 0; + public yStride:number = 0; public uStride:number = 0; public vStride:number = 0; public width:number = 0; public height:number = 0; - public type:VideoBufferType = VideoBufferType.VIDEO_BUFFER_RAW_DATA; + public type:VideoBufferType = VideoBufferType.RAW_DATA; public format:VideoPixelFormat = VideoPixelFormat.VIDEO_PIXEL_NV21; - public faceInfo:Array<FaceDetectionInfo> | undefined = undefined; constructor(type:VideoBufferType,format:VideoPixelFormat) { this.type = type; this.format = format; diff --git a/dita/RTC-NG/API/enum_connectionstatetype.dita b/dita/RTC-NG/API/enum_connectionstatetype.dita index 8374c4ed44f..5096cbbb726 100644 --- a/dita/RTC-NG/API/enum_connectionstatetype.dita +++ b/dita/RTC-NG/API/enum_connectionstatetype.dita @@ -50,7 +50,7 @@ -

        5: 网络连接失败。该状态表示 SDK 已不再尝试重新加入频道,需要调用 离开频道。 +

        5: 网络连接失败。该状态表示 SDK 已不再尝试重新加入频道,需要调用 离开频道。

        • 如果用户还想重新加入频道,则需要再次调用
        • 如果 SDK 因服务器端使用 RESTful API 禁止加入频道,则 App 会收到
        • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 9cc985b1d75..bfe45a2f921 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1447,7 +1447,7 @@ - + @@ -1698,7 +1698,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index fc367347568..41828e628cb 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -414,7 +414,6 @@ - @@ -501,7 +500,7 @@ - + @@ -708,9 +707,9 @@ - - - + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 3d91dce340d..c2db156168f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -440,7 +440,7 @@ - + getPlaySrc @@ -1665,21 +1665,21 @@ - + getEffectsVolume - + setEffectsVolume - + setVolumeOfEffect @@ -1708,7 +1708,7 @@ - + stopAllEffects @@ -1722,56 +1722,56 @@ - + unloadEffect - + pauseEffect - + pauseAllEffects - + resumeEffect - + resumeAllEffects - + setEffectPosition - + getEffectDuration - + getEffectCurrentPosition @@ -3575,7 +3575,7 @@ - + setLogFile @@ -3589,7 +3589,7 @@ - + setLogFilter @@ -4027,7 +4027,7 @@ - + onPlayBufferUpdated @@ -4088,13 +4088,6 @@ - - - - onAudioMixingFinished - - - @@ -6218,49 +6211,49 @@ - AUDIO_MIXING_REASON_CAN_NOT_OPEN + CAN_NOT_OPEN - AUDIO_MIXING_REASON_TOO_FREQUENT_CALL + TOO_FREQUENT_CALL - AUDIO_MIXING_REASON_INTERRUPTED_EOF + INTERRUPTED_EOF - AUDIO_MIXING_REASON_OK + OK - AUDIO_MIXING_REASON_ONE_LOOP_COMPLETED + ONE_LOOP_COMPLETED - AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED + ALL_LOOPS_COMPLETED - AUDIO_MIXING_REASON_STOPPED_BY_USER + STOPPED_BY_USER @@ -7664,31 +7657,38 @@ + + + + EarMontoringFilterType + + + - EAR_MONITORING_FILTER_NONE + NONE - EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS + BUILT_IN_AUDIO_FILTERS - EAR_MONITORING_FILTER_NOISE_SUPPRESSION + NOISE_SUPPRESSION - EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER + REUSE_POST_PROCESSING_FILTER @@ -10587,21 +10587,21 @@ - VIDEO_BUFFER_RAW_DATA + RAW_DATA - VIDEO_BUFFER_ARRAY + ARRAY - VIDEO_BUFFER_TEXTURE + TEXTURE diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap index 92270584b53..fc86a05ff6f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap @@ -17,14 +17,14 @@ - + 视频属性 - + 使用 Token 鉴权 @@ -66,7 +66,7 @@ - + 屏幕共享 diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 1fd558ede65..3da1b63ad2e 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2342,9 +2342,9 @@ - + - + @@ -2424,15 +2424,15 @@ - + - + - + @@ -2441,7 +2441,7 @@ - + @@ -2570,7 +2570,7 @@ - + From de1e575807bc670d3a7153cb035c081b32a34c47 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:08:46 +0800 Subject: [PATCH 075/354] 1 --- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 41828e628cb..cddbad57f3d 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -476,7 +476,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index c2db156168f..ccd8fbf9b52 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3233,7 +3233,7 @@ - + stop From f27a1a61e5220570045925d39d01c490f2d478f8 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:14:46 +0800 Subject: [PATCH 076/354] 1 --- .../API/callback_ivideoframeobserver_oncapturevideoframe.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita index 6fef85a9863..66729309792 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita @@ -61,7 +61,7 @@ sourceType - 视频源类型,可能的视频源包括:摄像头、屏幕或媒体播放器。详见 + 视频源类型,可能的视频源包括:摄像头、屏幕或媒体播放器。详见 videoFrame From 539ef332f39a2a1f940e295c426d2e525e84267b Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:53:59 +0800 Subject: [PATCH 077/354] 1 --- dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 8 +------- dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 10 ++-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index ad057d880da..1bdc38893e8 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -601,13 +601,7 @@ - - - - open [2/2] - - - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 19227d12a0a..1b4ef97a989 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -558,13 +558,7 @@ - - - - open [2/2] - - - + @@ -1546,7 +1540,7 @@ - stopScreenCapture [1/2] + stopScreenCapture From 8ad3b660bda509b6c1136afbc0cbb8f28e45d314 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:27:23 +0800 Subject: [PATCH 078/354] =?UTF-8?q?=E6=8A=93=E6=8D=95sunset=E6=BC=8F?= =?UTF-8?q?=E7=BD=91=E4=B9=8B=E9=B1=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dita/RTC-NG/API/rtc_api_sunset.dita | 154 +++++++++++++++++- ..._irtcengine_setlocalvoicereverbpreset.dita | 0 ...eventhandler_onchannelmediarelayevent.dita | 0 ...neeventhandler_onfirstlocalaudioframe.dita | 0 ...cengineeventhandler_onstreampublished.dita | 0 ...ngineeventhandler_onstreamunpublished.dita | 0 6 files changed, 152 insertions(+), 2 deletions(-) rename dita/RTC-NG/{API => archive}/api_irtcengine_setlocalvoicereverbpreset.dita (100%) rename dita/RTC-NG/{API => archive}/callback_irtcengineeventhandler_onchannelmediarelayevent.dita (100%) rename dita/RTC-NG/{API => archive}/callback_irtcengineeventhandler_onfirstlocalaudioframe.dita (100%) rename dita/RTC-NG/{API => archive}/callback_irtcengineeventhandler_onstreampublished.dita (100%) rename dita/RTC-NG/{API => archive}/callback_irtcengineeventhandler_onstreamunpublished.dita (100%) diff --git a/dita/RTC-NG/API/rtc_api_sunset.dita b/dita/RTC-NG/API/rtc_api_sunset.dita index 26d4d660c81..109ae3350f7 100644 --- a/dita/RTC-NG/API/rtc_api_sunset.dita +++ b/dita/RTC-NG/API/rtc_api_sunset.dita @@ -7,7 +7,7 @@ 已废弃 API

          废弃后的 API 预计会在 1 年左右正式下架。声网建议你尽快使用推荐的 API 进行替换,以免影响线上业务。

          -
          +
          @@ -103,6 +103,18 @@ v4.0.0 + + + + + v4.0.0 + + + + + + v4.0.0 + @@ -127,6 +139,12 @@ 使用 中的 contextconfig 参数 v4.0.0 + + + + 使用 中的 contextconfig 参数 + v4.0.0 + @@ -151,6 +169,12 @@ v4.0.0 + + + + + v4.0.0 + @@ -199,6 +223,48 @@ - v4.0.0 + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + @@ -211,6 +277,12 @@ v4.0.0 + + + + + v4.0.0 +
          @@ -305,6 +377,18 @@ v4.0.0 + + + + + v4.0.0 + + + + + + v4.0.0 + @@ -329,6 +413,12 @@ 使用 中的 contextconfig 参数 v4.0.0 + + + + 使用 中的 contextconfig 参数 + v4.0.0 + @@ -353,6 +443,18 @@ v4.0.0 + + + + + v4.0.0 + + + + + + v4.0.0 + @@ -395,18 +497,66 @@ - v4.0.0 + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + + + + + + v4.0.0 + v4.0.0 - + v4.0.0 + + + + + v4.0.0 + diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalvoicereverbpreset.dita b/dita/RTC-NG/archive/api_irtcengine_setlocalvoicereverbpreset.dita similarity index 100% rename from dita/RTC-NG/API/api_irtcengine_setlocalvoicereverbpreset.dita rename to dita/RTC-NG/archive/api_irtcengine_setlocalvoicereverbpreset.dita diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelayevent.dita b/dita/RTC-NG/archive/callback_irtcengineeventhandler_onchannelmediarelayevent.dita similarity index 100% rename from dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelayevent.dita rename to dita/RTC-NG/archive/callback_irtcengineeventhandler_onchannelmediarelayevent.dita diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalaudioframe.dita b/dita/RTC-NG/archive/callback_irtcengineeventhandler_onfirstlocalaudioframe.dita similarity index 100% rename from dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalaudioframe.dita rename to dita/RTC-NG/archive/callback_irtcengineeventhandler_onfirstlocalaudioframe.dita diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreampublished.dita b/dita/RTC-NG/archive/callback_irtcengineeventhandler_onstreampublished.dita similarity index 100% rename from dita/RTC-NG/API/callback_irtcengineeventhandler_onstreampublished.dita rename to dita/RTC-NG/archive/callback_irtcengineeventhandler_onstreampublished.dita diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreamunpublished.dita b/dita/RTC-NG/archive/callback_irtcengineeventhandler_onstreamunpublished.dita similarity index 100% rename from dita/RTC-NG/API/callback_irtcengineeventhandler_onstreamunpublished.dita rename to dita/RTC-NG/archive/callback_irtcengineeventhandler_onstreamunpublished.dita From 359bb4de0fe75b2d916412183c1eaa90a8b2a0c4 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:29:25 +0800 Subject: [PATCH 079/354] wording --- dita/RTC-NG/API/api_irtcengineex_leavechannelex.dita | 2 +- dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengineex_leavechannelex.dita b/dita/RTC-NG/API/api_irtcengineex_leavechannelex.dita index f5a0bdeb767..f59e06629fa 100644 --- a/dita/RTC-NG/API/api_irtcengineex_leavechannelex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_leavechannelex.dita @@ -33,7 +33,7 @@
          • 该方法是异步操作,调用返回时并没有真正退出频道。
          • -
          • 如果你调用了 后,会同时离开 加入的频道。
          • +
          • 如果你调用了 ,会同时离开 加入的频道。
        diff --git a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita index 500df0f3a37..133380648df 100644 --- a/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_leavechannelex2.dita @@ -41,8 +41,8 @@
        • 该方法是异步操作,调用返回时并没有真正退出频道。
        • -
        • 如果你调用了 后,会同时离开 加入的频道。
        • -
        • 如果你调用了 后,会同时离开 加入的频道。
        • +
        • 如果你调用了 ,会同时离开 加入的频道。
        • +
        • 如果你调用了 ,会同时离开 加入的频道。
        From d704d6e530313f7ee685a42867e925f831a9c7df Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 27 Sep 2024 11:07:55 +0800 Subject: [PATCH 080/354] bugfix --- dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita | 2 +- .../API/api_imusiccontentcenter_getinternalsongcode.dita | 4 ++-- dita/RTC-NG/API/api_imusicontentcenter_preload.dita | 2 +- dita/RTC-NG/API/api_irtcengine_renewtoken.dita | 7 ------- ...allback_irtcengineeventhandler_onclientrolechanged.dita | 2 ++ ...back_irtcengineeventhandler_onrejoinchannelsuccess.dita | 2 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 2 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 4 ++-- 9 files changed, 12 insertions(+), 15 deletions(-) diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index 29e218037a5..350f0452d35 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -30,7 +30,7 @@
        v4.2.0
        -

        调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。

        +

        调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。如果你需要设置可缓存的音乐资源数量,可通过 来设置。

        当你不再需要使用已缓存的音乐资源时,你需要及时释放内存以防止内存泄漏。

        diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita index eccbf636d0d..44f5f1cde96 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita @@ -23,10 +23,10 @@ Future<int> getInternalSongCode( {required int songCode, required String jsonOption});

        -
        +
        详情
        - +
        自从
        v4.2.2
        diff --git a/dita/RTC-NG/API/api_imusicontentcenter_preload.dita b/dita/RTC-NG/API/api_imusicontentcenter_preload.dita index 3faf1b751c0..22c384814f6 100644 --- a/dita/RTC-NG/API/api_imusicontentcenter_preload.dita +++ b/dita/RTC-NG/API/api_imusicontentcenter_preload.dita @@ -33,7 +33,7 @@

        你可以调用该方法预先加载需要播放的音乐资源。成功调用该方法后,SDK 会触发 回调报告预加载音乐资源的事件。

        在调用该方法来预加载音乐资源之前,你需要调用 方法来获取你需要播放的音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

        - 如需销毁 对象,请在收到 回调后,再调用 方法。 + 如需销毁 对象,请在收到 回调后,再调用 方法。
        参数 diff --git a/dita/RTC-NG/API/api_irtcengine_renewtoken.dita b/dita/RTC-NG/API/api_irtcengine_renewtoken.dita index 14d2b0a561e..d73d36817ce 100644 --- a/dita/RTC-NG/API/api_irtcengine_renewtoken.dita +++ b/dita/RTC-NG/API/api_irtcengine_renewtoken.dita @@ -40,13 +40,6 @@ 调用限制

        无。

        -
        参数 diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita index 2d73b39e573..79c74cfbb74 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onclientrolechanged.dita @@ -39,6 +39,8 @@ NS_SWIFT_NAME(rtcEngine(_:didClientRoleChanged:newRole:newRoleOptions:));

        +
        +
        触发时机

        在以下任意一种情况时,会触发此回调:

          diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita index 1509afcddb4..49acf37b7db 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita @@ -31,6 +31,8 @@ onRejoinChannelSuccess;

        +
        +
        触发时机

        有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法。

        diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index e9a29d7770e..5a823f671f4 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -481,7 +481,6 @@ - @@ -553,6 +552,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 89121d8e9b9..8e919efbb33 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -481,7 +481,6 @@ - @@ -550,6 +549,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index be3fcc2ed72..dd3da6e473e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -763,7 +763,7 @@ - stop + stop [1/2] @@ -3434,7 +3434,7 @@ - stop + stop [2/2] From 8a4d014f9b7e15aeb64edd9694940bd719398358 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 27 Sep 2024 11:31:54 +0800 Subject: [PATCH 081/354] update destroymediarecorder --- dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita b/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita index e0928158e78..58ba7dbba2f 100644 --- a/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita +++ b/dita/RTC-NG/API/api_irtcengine_destroymediarecorder.dita @@ -39,7 +39,7 @@ mediaRecorder - 待销毁的音视频录制对象。 + 待销毁的 对象。
        From 0a11bb32a3ce409fadfa471696f1c67c7aed1f72 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 27 Sep 2024 11:35:44 +0800 Subject: [PATCH 082/354] unify last mile --- dita/RTC-NG/API/class_lastmileproberesult.dita | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/class_lastmileproberesult.dita b/dita/RTC-NG/API/class_lastmileproberesult.dita index df0eb83b0d9..6859df0f4b3 100644 --- a/dita/RTC-NG/API/class_lastmileproberesult.dita +++ b/dita/RTC-NG/API/class_lastmileproberesult.dita @@ -144,13 +144,13 @@ public: state

        Last mile 质量探测结果的状态。详见:

        -

        Last-mile 质量探测结果的状态,有如下几种: +

        Last mile 质量探测结果的状态,有如下几种:

          -
        • (1):表示本次 Last-mile 质量探测是完整的。
        • -
        • (2):表示本次 Last-mile 质量探测未进行带宽预测,因此结果不完整。一个可能的原因是测试资源暂时受限。
        • -
        • (3):未进行 Last-mile 质量探测。一个可能的原因是网络连接中断。
        • +
        • (1):表示本次 Last mile 质量探测是完整的。
        • +
        • (2):表示本次 Last mile 质量探测未进行带宽预测,因此结果不完整。一个可能的原因是测试资源暂时受限。
        • +
        • (3):未进行 Last mile 质量探测。一个可能的原因是网络连接中断。

        From f0dba9019d35ac2d4b31e086392a34045d8cbbb9 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 27 Sep 2024 14:16:40 +0800 Subject: [PATCH 083/354] Update callback_imusiccontentcentereventhandler_onpreloadevent.dita --- ...lback_imusiccontentcentereventhandler_onpreloadevent.dita | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita index d589422cc0c..8d580877d09 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita @@ -51,12 +51,13 @@
        v4.1.0
        -

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        +

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        +

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        参数 - + From f917d7b2ed8de10ddf23588d00be4b618f3a657c Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:48:43 +0800 Subject: [PATCH 084/354] 1 --- ...llback_imusiccontentcentereventhandler_onpreloadevent.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita index 8d580877d09..e022dcafdf2 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita @@ -51,8 +51,8 @@
        v4.1.0
        -

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        -

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        +

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        +

        当你调用 方法预加载音乐资源后,SDK 会触发该回调。

        参数 From e44f94d3eebb9b2df389a7c534221d14214b7f43 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 27 Sep 2024 15:11:03 +0800 Subject: [PATCH 085/354] Update api_imusiccontentcenter_getinternalsongcode.dita --- .../API/api_imusiccontentcenter_getinternalsongcode.dita | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita index 44f5f1cde96..b6628c469e4 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita @@ -23,9 +23,8 @@ Future<int> getInternalSongCode( {required int songCode, required String jsonOption});

        -
        - 详情 -
        +
        +
        自从
        v4.2.2
        From 3cbb212142dcf5d7504a2c970dd1f07bb6c12655 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 27 Sep 2024 15:17:55 +0800 Subject: [PATCH 086/354] Update api_imusiccontentcenter_getcaches.dita --- dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index 350f0452d35..4abb151a5cf 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -30,7 +30,7 @@
        v4.2.0
        -

        调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。如果你需要设置可缓存的音乐资源数量,可通过 来设置。

        +

        调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。如果你需要设置可缓存的音乐资源数量,可通过 configurationconfig 来设置。

        当你不再需要使用已缓存的音乐资源时,你需要及时释放内存以防止内存泄漏。

        From e7de93572f55940bdd755a9d0407441f9585ebf0 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Fri, 27 Sep 2024 07:45:12 +0000 Subject: [PATCH 087/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 8 +------- en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 4 ++-- en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 10 ++-------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index ad057d880da..1bdc38893e8 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -601,13 +601,7 @@ - - - - open [2/2] - - - + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index be3fcc2ed72..dd3da6e473e 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -763,7 +763,7 @@ - stop + stop [1/2] @@ -3434,7 +3434,7 @@ - stop + stop [2/2] diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 19227d12a0a..1b4ef97a989 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -558,13 +558,7 @@ - - - - open [2/2] - - - + @@ -1546,7 +1540,7 @@ - stopScreenCapture [1/2] + stopScreenCapture From 12b9f7efcb3b20ec6f6466bb88aaed4f4835c8e0 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:35:41 +0800 Subject: [PATCH 088/354] 1 --- .../API/api_imediaplayer_getduration.dita | 2 +- dita/RTC-NG/API/api_imediaplayer_getmute.dita | 2 +- .../api_imediaplayer_getplayoutvolume.dita | 2 +- ...i_imediaplayer_getpublishsignalvolume.dita | 2 +- .../API/api_imediaplayer_getstreaminfo.dita | 2 +- ...iaplayer_registerplayersourceobserver.dita | 2 +- .../api_imusiccontentcenter_getcaches.dita | 6 ++-- .../RTC-NG/API/api_irtcengine_initialize.dita | 6 ++-- ...ne_setdefaultaudioroutetospeakerphone.dita | 4 +-- .../api_irtcengine_startaudiorecording.dita | 2 +- ...rsourceobserver_onplayerplaybackstats.dita | 2 +- dita/RTC-NG/API/rtc_api_data_type.dita | 2 +- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 4 +-- .../config/keys-rtc-ng-api-harmony.ditamap | 4 +-- .../config/relations-rtc-ng-api.ditamap | 30 +++++++++---------- 16 files changed, 37 insertions(+), 37 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_getduration.dita b/dita/RTC-NG/API/api_imediaplayer_getduration.dita index f2e51170786..fc4fd2824e9 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getduration.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getduration.dita @@ -40,7 +40,7 @@
      • < 0: 方法调用失败。详见了解详情和解决建议。

      媒体文件总时长(毫秒)。

      -
        +
        • 方法调用成功时,返回媒体资源的总时长,单位毫秒。
        • ≤ 0:方法调用失败。详见了解详情和解决建议。
    diff --git a/dita/RTC-NG/API/api_imediaplayer_getmute.dita b/dita/RTC-NG/API/api_imediaplayer_getmute.dita index 0ec48925974..53b46f2e439 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getmute.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getmute.dita @@ -44,7 +44,7 @@
  • 0: 方法调用成功。
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • -
      +
      • :当前播放的媒体文件为静音。
      • :当前播放的媒体文件没有静音。
    diff --git a/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita b/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita index 5440e1048af..6943719e1b7 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita @@ -45,7 +45,7 @@
  • 0: 方法调用成功。
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • -

    返回当前本地播放音量,取值范围从 0 到 100: +

    返回当前本地播放音量,取值范围从 0 到 100:

    • 0: 无声。
    • 100: (默认)媒体文件的原始播放音量。
    • diff --git a/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita b/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita index 6ca4e1cff36..0bf4e2dd8f5 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita @@ -39,7 +39,7 @@
    • 0: 方法调用成功。
    • < 0: 方法调用失败。详见了解详情和解决建议。
    -
      +
      • ≥ 0: 播放文件的远端播放音量。
      • < 0: 方法调用失败。详见了解详情和解决建议。
    diff --git a/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita b/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita index 26908348228..3c076a692d7 100644 --- a/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita +++ b/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita @@ -40,7 +40,7 @@ index 媒体流索引值。该参数需小于 count 参数。 - 媒体流索引值。该参数的值需小于 的返回值。 + 媒体流索引值。该参数的值需小于 的返回值。 info diff --git a/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita b/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita index deddbe440f3..e688298ebdd 100644 --- a/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita +++ b/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita @@ -51,7 +51,7 @@
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      +
      • 0: 方法调用成功。
      • < 0: 方法调用失败。详见了解详情和解决建议。
      diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index d24ecdf5d6d..776ec443c01 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -53,10 +53,10 @@
    • 0: 方法调用成功。
    • < 0: 方法调用失败。详见了解详情和解决建议。
    -
      -
    • 方法调用成功时,返回包含 对象的数组。
    • +
        +
      • 方法调用成功时,返回包含 对象的数组。
      • 方法调用成功时,返回 对象的列表。
      • -
      • 方法调用失败时,返回
      • +
      • 方法调用失败时,返回
      • 方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

      方法调用成功时,返回一个包含以下属性的对象: diff --git a/dita/RTC-NG/API/api_irtcengine_initialize.dita b/dita/RTC-NG/API/api_irtcengine_initialize.dita index 82ac79a6fcb..e47e88fbe15 100644 --- a/dita/RTC-NG/API/api_irtcengine_initialize.dita +++ b/dita/RTC-NG/API/api_irtcengine_initialize.dita @@ -2,7 +2,7 @@ <ph keyref="initialize"/> - 创建并初始化 初始化 + 创建并初始化 初始化 @@ -36,7 +36,7 @@

      调用时机

      请确保在调用其他 API 前先调用 创建并初始化

      -

      请确保在调用其他 API 前先调用该方法创建并初始化

      +

      请确保在调用其他 API 前先调用该方法创建并初始化

      调用限制 @@ -47,7 +47,7 @@ context - config + config

      实例的配置。详见

      diff --git a/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita b/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita index c8aff2e99c4..279942558e1 100644 --- a/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita +++ b/dita/RTC-NG/API/api_irtcengine_setdefaultaudioroutetospeakerphone.dita @@ -53,8 +53,8 @@

      无。

      参数 diff --git a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita index e0bab685196..d940fcb420c 100644 --- a/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita @@ -45,7 +45,7 @@ quality - 录音质量。详见 + 录音质量。详见
      • 0: 低音质。采样率为 32 kHz,录制 10 分钟的文件大小为 1.2 M 左右。
      • 1: 中音质。采样率为 32 kHz,录制 10 分钟的文件大小为 2 M 左右。
      • diff --git a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita index b7b937eb0c0..eeac90e1f1f 100644 --- a/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita +++ b/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita @@ -42,7 +42,7 @@ 参数 - stats + stats info 媒体资源的相关信息,详见 diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 367403d9ef6..412b302f670 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -319,7 +319,7 @@
      • -
      • +
      • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index bfe45a2f921..d17ddd554c6 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -2134,7 +2134,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index cddbad57f3d..db9d21b3e4f 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -492,7 +492,7 @@ - + @@ -638,7 +638,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index ccd8fbf9b52..a25fea00e75 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3971,7 +3971,7 @@ - + onMetaData @@ -4170,7 +4170,7 @@ - + onAudioRouteChanged diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 3da1b63ad2e..ed9d9bede9c 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2268,9 +2268,9 @@ - + - + @@ -2292,15 +2292,15 @@ - - - - - - - + + + + + + + - + @@ -2393,7 +2393,7 @@ - + @@ -2408,7 +2408,7 @@ - + @@ -2519,7 +2519,7 @@ - + @@ -2558,7 +2558,7 @@ - + @@ -2638,7 +2638,7 @@ - + From daeb2d3a3ffcb8a6d9e05265add531b09eac5835 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Sun, 29 Sep 2024 09:39:57 +0000 Subject: [PATCH 089/354] Sync cn prototype to en prototype --- ...ediaengine_registeraudioframeobserver.dita | 2 +- ...ediaengine_registervideoframeobserver.dita | 2 +- .../api_imediaplayer_adjustplayoutvolume.dita | 2 +- ...mediaplayer_adjustpublishsignalvolume.dita | 2 +- .../API/api_imediaplayer_getduration.dita | 2 +- .../api_imediaplayer_getmediaplayerid.dita | 2 +- .../RTC-NG/API/api_imediaplayer_getmute.dita | 2 +- .../api_imediaplayer_getplayoutvolume.dita | 2 +- .../API/api_imediaplayer_getplayposition.dita | 2 +- .../API/api_imediaplayer_getplaysrc.dita | 2 +- ...i_imediaplayer_getpublishsignalvolume.dita | 2 +- .../RTC-NG/API/api_imediaplayer_getstate.dita | 2 +- .../API/api_imediaplayer_getstreamcount.dita | 2 +- .../API/api_imediaplayer_getstreaminfo.dita | 2 +- .../RTC-NG/API/api_imediaplayer_mute.dita | 2 +- .../RTC-NG/API/api_imediaplayer_open.dita | 2 +- .../api_imediaplayer_openwithmediasource.dita | 2 +- .../RTC-NG/API/api_imediaplayer_pause.dita | 2 +- .../RTC-NG/API/api_imediaplayer_play.dita | 2 +- .../api_imediaplayer_playpreloadedsrc.dita | 2 +- .../API/api_imediaplayer_preloadsrc.dita | 2 +- ...diaplayer_registeraudioframeobserver2.dita | 2 +- ...iaplayer_registerplayersourceobserver.dita | 2 +- ...ediaplayer_registervideoframeobserver.dita | 2 +- .../RTC-NG/API/api_imediaplayer_resume.dita | 2 +- .../RTC-NG/API/api_imediaplayer_seek.dita | 2 +- .../api_imediaplayer_selectaudiotrack.dita | 2 +- ...pi_imediaplayer_selectmultiaudiotrack.dita | 2 +- ...api_imediaplayer_setaudiodualmonomode.dita | 2 +- .../API/api_imediaplayer_setaudiopitch.dita | 2 +- .../API/api_imediaplayer_setloopcount.dita | 2 +- .../api_imediaplayer_setplaybackspeed.dita | 2 +- .../API/api_imediaplayer_setplayeroption.dita | 2 +- .../api_imediaplayer_setplayeroption2.dita | 2 +- .../API/api_imediaplayer_setrendermode.dita | 2 +- .../RTC-NG/API/api_imediaplayer_setview.dita | 2 +- .../RTC-NG/API/api_imediaplayer_stop.dita | 2 +- .../API/api_imediaplayer_switchsrc.dita | 2 +- .../API/api_imediaplayer_unloadsrc.dita | 2 +- ...player_unregisterplayersourceobserver.dita | 2 +- ...imusiccontentcenter_createmusicplayer.dita | 2 +- .../API/api_imusiccontentcenter_destroy.dita | 5 +- .../api_imusiccontentcenter_getcaches.dita | 2 +- .../API/api_imusiccontentcenter_getlyric.dita | 2 +- ...pi_imusiccontentcenter_getmusiccharts.dita | 2 +- ...ter_getmusiccollectionbymusicchartid2.dita | 2 +- .../api_imusiccontentcenter_initialize.dita | 2 +- .../api_imusiccontentcenter_ispreloaded.dita | 2 +- ...siccontentcenter_registereventhandler.dita | 2 +- .../api_imusiccontentcenter_removecache.dita | 2 +- .../api_imusiccontentcenter_renewtoken.dita | 2 +- .../api_imusiccontentcenter_searchmusic2.dita | 2 +- ...ccontentcenter_unregistereventhandler.dita | 2 +- ...engine_adjustuserplaybacksignalvolume.dita | 2 +- .../api_irtcengine_clearvideowatermarks.dita | 2 +- .../API/api_irtcengine_createmediaplayer.dita | 2 +- .../api_irtcengine_destroymediaplayer.dita | 2 +- .../api_irtcengine_enablecontentinspect.dita | 2 +- .../API/api_irtcengine_enableextension.dita | 2 +- ...api_irtcengine_enableinearmonitoring2.dita | 2 +- ...rtcengine_getaudiomixingplayoutvolume.dita | 2 +- ...rtcengine_getaudiomixingpublishvolume.dita | 2 +- ...api_irtcengine_getcameramaxzoomfactor.dita | 2 +- .../api_irtcengine_geterrordescription.dita | 4 +- .../RTC-NG/API/api_irtcengine_getversion.dita | 4 +- .../RTC-NG/API/api_irtcengine_initialize.dita | 4 +- ...ne_iscameraautofocusfacemodesupported.dita | 2 +- ...ine_iscameraexposurepositionsupported.dita | 2 +- ..._irtcengine_iscameraexposuresupported.dita | 2 +- ...rtcengine_iscamerafacedetectsupported.dita | 2 +- .../api_irtcengine_iscamerazoomsupported.dita | 2 +- ..._irtcengine_pauseallchannelmediarelay.dita | 2 +- .../API/api_irtcengine_pushvideoframe3.dita | 2 +- ...irtcengine_resumeallchannelmediarelay.dita | 2 +- .../API/api_irtcengine_selectaudiotrack.dita | 2 +- ...rtcengine_setaudiomixingplaybackspeed.dita | 2 +- ...ine_setcameraautofocusfacemodeenabled.dita | 2 +- ...pi_irtcengine_setcameraexposurefactor.dita | 2 +- ..._irtcengine_setcameraexposureposition.dita | 2 +- .../API/api_irtcengine_setcameratorchon.dita | 2 +- .../api_irtcengine_setcamerazoomfactor.dita | 2 +- .../api_irtcengine_setenablespeakerphone.dita | 2 +- .../api_irtcengine_setlocalrendermode.dita | 2 +- ...ybackaudioframebeforemixingparameters.dita | 2 +- .../API/api_irtcengine_startaudiomixing.dita | 2 +- .../API/api_irtcengine_startaudiomixing2.dita | 2 +- .../api_irtcengine_startaudiorecording.dita | 2 +- ...ine_startrtmpstreamwithouttranscoding.dita | 2 +- .../api_irtcengine_startscreencapture.dita | 2 +- .../api_irtcengine_stopaudiorecording.dita | 2 +- .../RTC-NG/API/api_irtcengine_stopeffect.dita | 2 +- ...cengine_updatescreencaptureparameters.dita | 2 +- ...neex_adjustuserplaybacksignalvolumeex.dita | 2 +- .../api_irtcengineex_createdatastreamex.dita | 2 +- ...ngineex_enableaudiovolumeindicationex.dita | 2 +- ...cengineex_muteallremoteaudiostreamsex.dita | 3 +- ...cengineex_muteallremotevideostreamsex.dita | 2 +- ...i_irtcengineex_mutelocalaudiostreamex.dita | 2 +- ...i_irtcengineex_mutelocalvideostreamex.dita | 3 +- ..._irtcengineex_muteremoteaudiostreamex.dita | 2 +- ..._irtcengineex_muteremotevideostreamex.dita | 2 +- .../api_irtcengineex_sendstreammessageex.dita | 2 +- .../api_irtcengineex_setdualstreammodeex.dita | 2 +- ...pi_irtcengineex_setremoterendermodeex.dita | 2 +- ...tcengineex_setremotevideostreamtypeex.dita | 2 +- ...neex_startorupdatechannelmediarelayex.dita | 2 +- .../API/api_irtcengineex_takesnapshotex.dita | 2 +- ...cengineex_updatechannelmediaoptionsex.dita | 2 +- ...spectrumobserver_onlocalaudiospectrum.dita | 2 +- ...pectrumobserver_onremoteaudiospectrum.dita | 2 +- ...ourceobserver_onaudiovolumeindication.dita | 2 +- ...imediaplayersourceobserver_onmetadata.dita | 2 +- ...yersourceobserver_onplaybufferupdated.dita | 2 +- ...ayersourceobserver_onplayercachestats.dita | 2 +- ...diaplayersourceobserver_onplayerevent.dita | 2 +- ...yersourceobserver_onplayerinfoupdated.dita | 2 +- ...rsourceobserver_onplayerplaybackstats.dita | 2 +- ...ceobserver_onplayersourcestatechanged.dita | 2 +- ...sourceobserver_onplayersrcinfochanged.dita | 2 +- ...layersourceobserver_onpositionchanged.dita | 2 +- ...iaplayersourceobserver_onpreloadevent.dita | 2 +- ...ntentcentereventhandler_onlyricresult.dita | 2 +- ...entereventhandler_onmusicchartsresult.dita | 2 +- ...reventhandler_onmusiccollectionresult.dita | 2 +- ...tentcentereventhandler_onpreloadevent.dita | 2 +- ...ereventhandler_onsongsimpleinforesult.dita | 2 +- ...ineeventhandler_onaudioeffectfinished.dita | 2 +- ...venthandler_onaudiomixingstatechanged.dita | 2 +- ...enthandler_onaudiopublishstatechanged.dita | 2 +- ...thandler_onaudiosubscribestatechanged.dita | 2 +- ...nthandler_oncameraexposureareachanged.dita | 2 +- ...eventhandler_oncamerafocusareachanged.dita | 2 +- ...ndler_onchannelmediarelaystatechanged.dita | 2 +- ...llback_irtcengineeventhandler_onerror.dita | 2 +- ...neeventhandler_onfirstlocalvideoframe.dita | 2 +- ...eeventhandler_onfirstremotevideoframe.dita | 2 +- ...gineeventhandler_onjoinchannelsuccess.dita | 2 +- ...eventhandler_onlocalvideostatechanged.dita | 2 +- ...nthandler_onlocalvideotranscodererror.dita | 2 +- ...neeventhandler_onrejoinchannelsuccess.dita | 2 +- ...irtcengineeventhandler_onrequesttoken.dita | 2 +- ...nthandler_onrtmpstreamingstatechanged.dita | 2 +- ...enthandler_ontokenprivilegewillexpire.dita | 2 +- ...cengineeventhandler_onuserenablevideo.dita | 2 +- ...rtcengineeventhandler_onusermuteaudio.dita | 2 +- ...rtcengineeventhandler_onusermutevideo.dita | 2 +- ...thandler_onvideosubscribestatechanged.dita | 2 +- .../dita/RTC-NG/API/class_advanceoptions.dita | 10 +- en-US/dita/RTC-NG/API/class_audioparams.dita | 7 +- .../RTC-NG/API/class_audiospectrumdata.dita | 5 +- .../RTC-NG/API/class_cachestatistics.dita | 10 +- .../RTC-NG/API/class_channelmediaoptions.dita | 122 +-- .../dita/RTC-NG/API/class_climaxsegment.dita | 6 +- .../API/class_contentinspectconfig.dita | 12 +- .../API/class_contentinspectmodule.dita | 7 +- en-US/dita/RTC-NG/API/class_logconfig.dita | 9 +- en-US/dita/RTC-NG/API/class_mediasource.dita | 20 +- en-US/dita/RTC-NG/API/class_music.dita | 26 +- .../dita/RTC-NG/API/class_musiccacheinfo.dita | 8 +- ...class_musiccontentcenterconfiguration.dita | 16 +- .../RTC-NG/API/class_playerplaybackstats.dita | 12 +- .../RTC-NG/API/class_playerstreaminfo.dita | 17 +- .../RTC-NG/API/class_playerupdatedinfo.dita | 18 +- .../RTC-NG/API/class_remoteaudiostats.dita | 2 + .../RTC-NG/API/class_rtcengineconfig.dita | 1 + .../API/class_screenaudioparameters.dita | 5 + .../API/class_screencaptureparameters2.dita | 7 + .../API/class_screenvideoparameters.dita | 5 + .../API/class_segmentationproperty.dita | 4 +- en-US/dita/RTC-NG/API/class_srcinfo.dita | 8 +- .../API/class_useraudiospectruminfo.dita | 2 +- en-US/dita/RTC-NG/API/class_videocanvas.dita | 1 + en-US/dita/RTC-NG/API/class_videoframe.dita | 6 +- .../API/class_virtualbackgroundsource.dita | 22 +- .../config/keys-rtc-ng-api-harmony.ditamap | 697 +++++++++++------- 175 files changed, 863 insertions(+), 507 deletions(-) diff --git a/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita b/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita index 50ba2659373..6a6d28f28b3 100644 --- a/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita @@ -14,7 +14,7 @@

        public abstract int registerAudioFrameObserver(IAudioFrameObserver observer); - public abstract registerAudioFrameObserver(observer:IAudioFrameObserver):number; + - (BOOL)setAudioFrameDelegate:(id<AgoraAudioFrameDelegate> _Nullable)delegate; virtual int registerAudioFrameObserver(IAudioFrameObserver* observer) = 0; abstract registerAudioFrameObserver(observer: IAudioFrameObserver): number; diff --git a/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita b/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita index b1d8860bbcb..efbd6078eb9 100644 --- a/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita @@ -14,7 +14,7 @@

        public abstract int registerVideoFrameObserver(IVideoFrameObserver observer); - public abstract registerVideoFrameObserver(observer:IVideoFrameObserver):number; + - (BOOL)setVideoFrameDelegate:(id<AgoraVideoFrameDelegate> _Nullable)delegate; virtual int registerVideoFrameObserver(IVideoFrameObserver* observer) = 0; abstract registerVideoFrameObserver(observer: IVideoFrameObserver): number; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita index f1c93eea3a8..1a4e73114c1 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_adjustplayoutvolume.dita @@ -14,7 +14,7 @@

        int adjustPlayoutVolume(int volume); - + public abstract adjustPlayoutVolume(vol: number): number; - (int)adjustPlayoutVolume:(int)volume; virtual int adjustPlayoutVolume(int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita index 5a186d2b161..c1ef7522929 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_adjustpublishsignalvolume.dita @@ -14,7 +14,7 @@

        int adjustPublishSignalVolume(int volume); - + public abstract adjustPublishSignalVolume(volume:number):number; - (int)adjustPublishSignalVolume:(int)volume; virtual int adjustPublishSignalVolume(int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getduration.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getduration.dita index e96b18ff592..4a7eb0d32af 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getduration.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getduration.dita @@ -14,7 +14,7 @@

        long getDuration(); - + public abstract getDuration():number; - (NSInteger)getDuration; virtual int getDuration(int64_t& duration) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita index 2e46694ed6d..040b5e66daf 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getmediaplayerid.dita @@ -14,7 +14,7 @@

        int getMediaPlayerId(); - + public abstract getMediaPlayerId():number; - (int)getMediaPlayerId; virtual int getMediaPlayerId() const = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getmute.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getmute.dita index 4b50dae42a8..cd0ca31c739 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getmute.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getmute.dita @@ -14,7 +14,7 @@

        boolean getMute(); - + public abstract getMute(): boolean; - (bool)getMute; virtual int getMute(bool& mute) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita index 543ba8080f9..da9f3166e61 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getplayoutvolume.dita @@ -14,7 +14,7 @@

        int getPlayoutVolume(); - + public abstract getPlayoutVolume():number - (int)getPlayoutVolume; virtual int getPlayoutVolume(int& volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita index 1c5a05423d9..ee88b0cb3b9 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getplayposition.dita @@ -14,7 +14,7 @@

        long getPlayPosition(); - + public abstract getPlayPosition():number; - (NSInteger)getPosition; virtual int getPlayPosition(int64_t& pos) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita index f0d26bdbb22..73b55fc7767 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getplaysrc.dita @@ -14,7 +14,7 @@

        String getPlaySrc(); - + public abstract getPlaySrc():string; - (NSString *)getPlaySrc; virtual const char* getPlaySrc() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita index f33aa8f952d..cf325c8e755 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getpublishsignalvolume.dita @@ -14,7 +14,7 @@

        int getPublishSignalVolume(); - + public abstract getPublishSignalVolume():number; - (int)getPublishSignalVolume; virtual int getPublishSignalVolume(int& volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getstate.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getstate.dita index be2d8f69cb7..15c89442e03 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getstate.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getstate.dita @@ -14,7 +14,7 @@

        Constants.MediaPlayerState getState(); - + public abstract getState():Constants.MediaPlayerState; - (AgoraMediaPlayerState)getPlayerState; virtual media::base::MEDIA_PLAYER_STATE getState() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita index 34a3b96dc01..0e732095124 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getstreamcount.dita @@ -14,7 +14,7 @@

        int getStreamCount(); - + public abstract getStreamCount():number; - (NSInteger)getStreamCount; virtual int getStreamCount(int64_t& count) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita index 057f61bd2c2..fd576985bef 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_getstreaminfo.dita @@ -14,7 +14,7 @@

        MediaStreamInfo getStreamInfo(int index); - + public abstract getStreamInfo(index:number):MediaStreamInfo|undefined; - (AgoraMediaStreamInfo *_Nullable)getStreamByIndex:(int)index; virtual int getStreamInfo(int64_t index, media::base::PlayerStreamInfo* info) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita index 300e99453c5..3aa1d15a4e3 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita @@ -14,7 +14,7 @@

        int mute(boolean muted); - + public abstract mute(muted:boolean) : number; - (int)mute:(bool)isMute NS_SWIFT_NAME(mute(_:)); virtual int mute(bool muted) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_open.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_open.dita index 47a1e828ec3..2fd75613045 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_open.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_open.dita @@ -15,7 +15,7 @@

        int open(String url, long startPos); - + public abstract open(url:string, startPos:number):number; - (int)open:(NSString *)url startPos:(NSInteger)startPos; virtual int open(const char* url, int64_t startPos) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita index 5afe98595db..1faa659d767 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_openwithmediasource.dita @@ -14,7 +14,7 @@

        int openWithMediaSource(MediaPlayerSource source); - + public abstract openWithMediaSource(source: MediaPlayerSource) :number ; - (int)openWithMediaSource:(AgoraMediaSource *)source; virtual int openWithMediaSource(const media::base::MediaSource &source) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_pause.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_pause.dita index 77f451f49f3..685fb532187 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_pause.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_pause.dita @@ -15,7 +15,7 @@

        int pause(); - + public abstract pause(): number; - (int)pause; virtual int pause() = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_play.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_play.dita index aad566ba837..fa7764aa871 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_play.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_play.dita @@ -14,7 +14,7 @@

        int play(); - + public abstract play(): number; - (int)play; virtual int play() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita index 39c5f7f0930..84126f06452 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_playpreloadedsrc.dita @@ -15,7 +15,7 @@

        int playPreloadedSrc(String src); - + public abstract playPreloadedSrc(src:string):number; - (int)playPreloadedSrc:(NSString *)src; virtual int playPreloadedSrc(const char* src) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita index 45a7777dc88..520ee67f8c8 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita @@ -15,7 +15,7 @@

        int preloadSrc(String src, long startPos); - + public abstract preloadSrc(src:string, startPos:number):number; - (int)preloadSrc:(NSString *)src startPos:(int)startPos; virtual int preloadSrc(const char* src, int64_t startPos) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita index 2c62fbcddd3..2c8c3d4c237 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_registeraudioframeobserver2.dita @@ -15,7 +15,7 @@

        int registerAudioFrameObserver(IMediaPlayerAudioFrameObserver audioFrameObserver, int mode); - public abstract registerAudioFrameObserver(observer:IAudioFrameObserver):number; + virtual int registerAudioFrameObserver(media::IAudioPcmFrameSink* observer, RAW_AUDIO_FRAME_OP_MODE_TYPE mode) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita index f2a50b96f9a..643390a1ea8 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_registerplayersourceobserver.dita @@ -15,7 +15,7 @@

        int registerPlayerObserver(IMediaPlayerObserver playerObserver); - + public abstract registerPlayerObserver(playerObserver:IMediaPlayerObserver); virtual int registerPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0; UFUNCTION(BlueprintPure, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita index 3995bba98d9..32440e33a9f 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_registervideoframeobserver.dita @@ -14,7 +14,7 @@

        int registerVideoFrameObserver(IMediaPlayerVideoFrameObserver videoFrameObserver); - public abstract registerVideoFrameObserver(observer:IVideoFrameObserver):number; + virtual int registerVideoFrameObserver(media::base::IVideoFrameObserver* observer) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_resume.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_resume.dita index 545412ebd82..7ecc871b961 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_resume.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_resume.dita @@ -14,7 +14,7 @@

        int resume(); - + public abstract resume(): number; - (int)resume; virtual int resume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_seek.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_seek.dita index d1e4ff2afaa..41d7993ee25 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_seek.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_seek.dita @@ -15,7 +15,7 @@

        int seek(long newPos); - + public abstract seek(newPos: number): number; - (void)seekToPosition:(NSInteger)position; virtual int seek(int64_t newPos) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita index fde50ad5649..ed10f5d6df0 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita @@ -14,7 +14,7 @@

        int selectAudioTrack(int index); - + public abstract selectAudioTrack(index: number): number; - (int)selectAudioTrack:(int)index; virtual int selectAudioTrack(int index) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita index 8915f1b8e4e..6d638bebc51 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_selectmultiaudiotrack.dita @@ -14,7 +14,7 @@

        int selectMultiAudioTrack(int playoutTrackIndex, int publishTrackIndex); - + public abstract selectMultiAudioTrack(playoutTrackIndex:number, publishTrackIndex: number): number; - (int)selectMultiAudioTrack:(NSInteger)playoutTrackIndex publishTrackIndex:(NSInteger)publishTrackIndex NS_SWIFT_NAME(selectMultiAudioTrack(_:publishTrackIndex:)); virtual int selectMultiAudioTrack(int playoutTrackIndex, int publishTrackIndex) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita index cafb4c78afd..b7bc39d6be2 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita @@ -14,7 +14,7 @@

        int setAudioDualMonoMode(int mode); - + public abstract setAudioDualMonoMode(mode:Constants.AudioDualMonoMode):number; - (int)setAudioDualMonoMode:(AgoraAudioDualMonoMode)mode; virtual int setAudioDualMonoMode(agora::media::base::AUDIO_DUAL_MONO_MODE mode) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita index 252b47a2349..9aed3ef5661 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiopitch.dita @@ -14,7 +14,7 @@

        int setAudioPitch(int pitch); - + public abstract setAudioPitch(pitch:number): number; - (int)setAudioPitch:(NSInteger)pitch; virtual int setAudioPitch(int pitch) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita index f281bf20dfa..318a911e801 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setloopcount.dita @@ -15,7 +15,7 @@

        int setLoopCount(int loopCount); - + public abstract setLoopCount(loopCount:number):number; - (void)setLoopCount:(NSInteger)loopCount; virtual int setLoopCount(int loopCount) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita index de0a75ef2f1..f6e0465ea6e 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita @@ -14,7 +14,7 @@

        int setPlaybackSpeed(int speed); - + public abstract setPlaybackSpeed(speed: number) : number; - (int)setPlaybackSpeed:(int)speed; virtual int setPlaybackSpeed(int speed) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita index d941c2ab88b..5f555d6ee40 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption.dita @@ -14,7 +14,7 @@

        int setPlayerOption(String key, int value); - + public abstract setPlayerOption(key:string, value:number); - (int)setPlayerOption:(NSString *)key value:(NSInteger)value NS_SWIFT_NAME(setPlayerOption(_:value:)); virtual int setPlayerOption(const char* key, int64_t value) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita index 275fee09c2e..93109388547 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setplayeroption2.dita @@ -14,7 +14,7 @@

        int setPlayerOptionString(String key, String value); - + public abstract setPlayerOptionString(key:string, value:string): number; - (int)setPlayerOptionString:(NSString *)key value:(NSString *)value NS_SWIFT_NAME(setPlayerOptionString(_:value:)); virtual int setPlayerOption(const char* key, const char* value) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita index 54477fa0c1e..410d59b2b6e 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setrendermode.dita @@ -15,7 +15,7 @@

        int setRenderMode(int mode); - + public abstract setRenderMode(mode:number):number; - (void)setRenderMode:(AgoraMediaPlayerRenderMode)mode; virtual int setRenderMode(media::base::RENDER_MODE_TYPE renderMode) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setview.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setview.dita index 9c7ebcdf393..c1d212059b8 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setview.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setview.dita @@ -15,7 +15,7 @@

        int setView(View videoView); - + public abstract setView(view:string):number; - (void)setView:(View *_Nullable)view; virtual int setView(media::base::view_t view) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_stop.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_stop.dita index 0257a757cb3..930eae46b70 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_stop.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_stop.dita @@ -15,7 +15,7 @@

        int stop(); - + public abstract stop(): number; - (void)stop; virtual int stop() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita index 4d5698ee04b..5bf67c40f1d 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita @@ -15,7 +15,7 @@

        int switchSrc(String src, boolean syncPts); - + public abstract switchSrc(src:string, syncPts:boolean):number; - (int)switchSrc:(NSString *)src syncPts:(BOOL)sync; virtual int switchSrc(const char* src, bool syncPts) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita index bbe9f21d5a8..9c493a444ad 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_unloadsrc.dita @@ -15,7 +15,7 @@

        int unloadSrc(String src); - + public abstract unloadSrc(src:string):number; - (int)unloadSrc:(NSString *)src; virtual int unloadSrc(const char* src) = 0; diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita index ab17093aaf0..5381347c620 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_unregisterplayersourceobserver.dita @@ -14,7 +14,7 @@

        int unRegisterPlayerObserver(IMediaPlayerObserver playerObserver); - + public abstract unRegisterPlayerObserver(); virtual int unregisterPlayerSourceObserver(IMediaPlayerSourceObserver* observer) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita index 9b5bb73379e..c8a1826e2c7 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_createmusicplayer.dita @@ -14,7 +14,7 @@

        public abstract IAgoraMusicPlayer createMusicPlayer(); - + public abstract createMusicPlayer():IAgoraMusicPlayer (id<AgoraMusicPlayerProtocol> _Nullable)createMusicPlayerWithDelegate:(id<AgoraRtcMediaPlayerDelegate> _Nullable)delegate NS_SWIFT_NAME(createMusicPlayer(delegate:)); virtual agora_refptr<IMusicPlayer> createMusicPlayer() = 0; abstract createMusicPlayer(): IMusicPlayer; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita index 2c4241b039e..9b944770280 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_destroy.dita @@ -19,7 +19,10 @@ mInstance.release(); mInstance = null; } - + public static destroy():void +{ + RtcNapi.destroyMusicContentCenter() +} + (void)destroy; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index eefa4ced277..70b607fbea7 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -14,7 +14,7 @@

        public abstract MusicCacheInfo[] getCaches(); - + public abstract getCaches():MusicCacheInfo[] - (NSArray *)getCaches NS_SWIFT_NAME(getCaches()); virtual int getCaches(MusicCacheInfo *cacheInfo, int32_t* cacheInfoSize) = 0; abstract getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number }; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita index 2b96817082a..2ea8b2aea23 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getlyric.dita @@ -14,7 +14,7 @@

        public abstract String getLyric(long songCode, int lyricType); - + public abstract getLyric(songCode:bigint,lyricType:number):string - (NSString *)getLyricWithSongCode:(NSInteger)songCode lyricType:(NSInteger)lyricType NS_SWIFT_NAME(getLyric(songCode:lyricType:)); virtual int getLyric(agora::util::AString& requestId, int64_t songCode, int32_t LyricType = 0) = 0; abstract getLyric(songCode: number, lyricType?: number): string; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita index 37f3bbf0ebf..5183a0b8d9c 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccharts.dita @@ -14,7 +14,7 @@

        public abstract String getMusicCharts(); - + public abstract getMusicCharts():string - (NSString *)getMusicCharts; virtual int getMusicCharts(agora::util::AString& requestId) = 0; abstract getMusicCharts(): string; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita index 330aae2961c..8f81b8a45bc 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_getmusiccollectionbymusicchartid2.dita @@ -15,7 +15,7 @@

        public abstract String getMusicCollectionByMusicChartId( int musicChartId, int page, int pageSize, String jsonOption); - + public abstract getMusicCollectionByMusicChartId(musicChartId:number,page:number,pageSize:number,jsonOption?:string):string diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita index 39a11390276..bbee0de6908 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita @@ -14,7 +14,7 @@

        public abstract int initialize(MusicContentCenterConfiguration configuration); - + public abstract initialize(configuration:MusicContentCenterConfiguration):number + (instancetype)sharedContentCenterWithConfig:(AgoraMusicContentCenterConfig *)config NS_SWIFT_NAME(sharedContentCenter(config:)); virtual int initialize(const MusicContentCenterConfiguration & configuration) = 0; abstract initialize(configuration: MusicContentCenterConfiguration): number; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita index 2f46b96ce41..0797a220e56 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita @@ -14,7 +14,7 @@

        public abstract int isPreloaded(long songCode); - + public abstract isPreloaded(songCode:bigint):number - (NSInteger)isPreloadedWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(isPreloaded(songCode:)); virtual int isPreloaded(int64_t songCode) = 0; abstract isPreloaded(songCode: number): number; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita index 7b23415e97c..ee569c9b150 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_registereventhandler.dita @@ -14,7 +14,7 @@

        public abstract int registerEventHandler(IMusicContentCenterEventHandler eventHandler); - + public abstract registerEventHandler(eventHandler:IMusicContentCenterEventHandler):number - (NSInteger)registerEventDelegate:(id<AgoraMusicContentCenterEventDelegate> _Nullable)eventDelegate; virtual int registerEventHandler(IMusicContentCenterEventHandler* eventHandler) = 0; abstract registerEventHandler( diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita index 63db586172d..427eea660ef 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_removecache.dita @@ -14,7 +14,7 @@

        public abstract int removeCache(long songCode); - + public abstract removeCache(songCode:bigint):number - (NSInteger)removeCacheWithSongCode:(NSInteger)songCode NS_SWIFT_NAME(removeCache(songCode:)); virtual int removeCache(int64_t songCode) = 0; abstract removeCache(songCode: number): number; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita index 8080d8540a6..d6a41a4ce2e 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_renewtoken.dita @@ -14,7 +14,7 @@

        public abstract int renewToken(String token); - + public abstract renewToken(token:string):number - (NSInteger)renewToken:(NSString * _Nonnull)token; virtual int renewToken(const char* token) = 0; abstract renewToken(token: string): number; diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita index efae2ecadbb..1848ae77264 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_searchmusic2.dita @@ -14,7 +14,7 @@

        public abstract String searchMusic(String keyword, int page, int pageSize, String jsonOption); - + public abstract searchMusic(keyword:string,page:number,pageSize:number,jsonOption?:string):string diff --git a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita index 3c8cdf4a10b..9af5ddb839f 100644 --- a/en-US/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita +++ b/en-US/dita/RTC-NG/API/api_imusiccontentcenter_unregistereventhandler.dita @@ -14,7 +14,7 @@

        public abstract int unregisterEventHandler(); - + public abstract unregisterEventHandler():number virtual int unregisterEventHandler() = 0; abstract unregisterEventHandler(): number; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita b/en-US/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita index fa3634f69f8..1dd1e40cb40 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_adjustuserplaybacksignalvolume.dita @@ -14,7 +14,7 @@

        public abstract int adjustUserPlaybackSignalVolume(int uid, int volume); - + public abstract adjustUserPlaybackSignalVolume(uid:number,volume:number):number; - (int)adjustUserPlaybackSignalVolume:(NSUInteger)uid volume:(int)volume; virtual int adjustUserPlaybackSignalVolume(unsigned int uid, int volume) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita b/en-US/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita index e50940a13a3..78580300ac6 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_clearvideowatermarks.dita @@ -14,7 +14,7 @@

        public abstract int clearVideoWatermarks(); - public abstract clearVideoWatermarks(): number; + - (int)clearVideoWatermarks; virtual int clearVideoWatermarks() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita b/en-US/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita index 69fa4c62ebe..f11cab61897 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_createmediaplayer.dita @@ -14,7 +14,7 @@

        public abstract IMediaPlayer createMediaPlayer(); - + public abstract createMediaPlayer():IMediaPlayer|undefined; - (id<AgoraRtcMediaPlayerProtocol>_Nullable)createMediaPlayerWithDelegate: (id<AgoraRtcMediaPlayerDelegate>_Nullable)delegate; virtual agora_refptr <IMediaPlayer> createMediaPlayer() = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita b/en-US/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita index f3f6502c803..1b33cfa2d8e 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_destroymediaplayer.dita @@ -15,7 +15,7 @@

        int destroy(); - + public abstract destroy():number; - (int)destroyMediaPlayer:(id<AgoraRtcMediaPlayerProtocol>_Nullable)mediaPlayer; virtual int destroyMediaPlayer(agora_refptr<IMediaPlayer> media_player) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita index 75d90f09440..3bcee4df55c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enablecontentinspect.dita @@ -14,7 +14,7 @@

        public abstract int enableContentInspect(boolean enabled, ContentInspectConfig config); - + public abstract enableContentInspect(enabled:boolean,config:ContentInspectConfig):number; - (int)enableContentInspect:(BOOL)enabled config:(AgoraContentInspectConfig* _Nonnull)config; virtual int enableContentInspect(bool enabled, const media::ContentInspectConfig &config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita index 8fba4bd0bb1..1701e0720b5 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita @@ -15,7 +15,7 @@

        public abstract int enableExtension( String provider, String extension, boolean enable, Constants.MediaSourceType sourceType); - public abstract enableExtension(provider:string,extension:string,enable:boolean,extensionInfo:ExtensionInfo):number; + - (int)enableExtensionWithVendor:(NSString * __nonnull)provider extension:(NSString * __nonnull)extension enabled:(BOOL)enabled diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita index 1c8bc6ebf25..2d65ceaaf05 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enableinearmonitoring2.dita @@ -14,7 +14,7 @@

        public abstract int enableInEarMonitoring(boolean enabled, int includeAudioFilters); - public abstract enableInEarMonitoring(enabled: boolean, includeAudioFilters: number): number; + public abstract enableInEarMonitoring(enabled: boolean, includeAudioFilters?: Constants.EarMontoringFilterType): number; - (int)enableInEarMonitoring:(BOOL)enabled includeAudioFilters:(AgoraEarMonitoringFilterType)includeAudioFilters; virtual int enableInEarMonitoring(bool enabled, int includeAudioFilters) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita index 0abc78c7a07..a37a4d3845c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingplayoutvolume.dita @@ -14,7 +14,7 @@

        public abstract int getAudioMixingPlayoutVolume(); - + public abstract getAudioMixingPlayoutVolume():number; - (int)getAudioMixingPlayoutVolume; virtual int getAudioMixingPlayoutVolume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita index 448ff6b9937..546a6225443 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getaudiomixingpublishvolume.dita @@ -14,7 +14,7 @@

        public abstract int getAudioMixingPublishVolume(); - + public abstract getAudioMixingPublishVolume():number; - (int)getAudioMixingPublishVolume; virtual int getAudioMixingPublishVolume() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita index 6a54fb71181..738b8fb1026 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getcameramaxzoomfactor.dita @@ -14,7 +14,7 @@

        public abstract float getCameraMaxZoomFactor(); - public abstract getCameraMaxZoomFactor():number; + public abstract getCameraMaxZoomFactor(): number; - (CGFloat)cameraMaxZoomFactor; virtual float getCameraMaxZoomFactor() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita b/en-US/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita index d6be7080d09..a25725a6203 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_geterrordescription.dita @@ -14,7 +14,9 @@

        public static String getErrorDescription(int error) - + public static getErrorDescription(error: number): string { + return RtcEngineImpl.getErrorDescriptionInternal(error); +} + (NSString* _Nonnull)getErrorDescription: (NSInteger)error; virtual const char* getErrorDescription(int code) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getversion.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getversion.dita index 524e1984459..734171a2018 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getversion.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getversion.dita @@ -14,7 +14,9 @@

        public static String getSdkVersion() - + public static getSdkVersion(): string { + return RtcEngineImpl.getRtcSdkVersion(); +} + (NSString * _Nonnull)getSdkVersion; virtual const char* getVersion(int* build) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_initialize.dita b/en-US/dita/RTC-NG/API/api_irtcengine_initialize.dita index 6158786ca4d..e0e73c5fad0 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_initialize.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_initialize.dita @@ -15,7 +15,9 @@

        public static synchronized RtcEngine create(RtcEngineConfig config) throws Exception {} - + public static create(config: RtcEngineConfig): RtcEngine { + return RtcEngineImpl.createEngineImpl(config); + } + (instancetype _Nonnull)sharedEngineWithConfig:(AgoraRtcEngineConfig * _Nonnull)config delegate:(id<AgoraRtcEngineDelegate> _Nullable)delegate; virtual int initialize(const RtcEngineContext& context) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita index dc8d7fa7c4a..1a6f2705289 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraautofocusfacemodesupported.dita @@ -14,7 +14,7 @@

        public abstract boolean isCameraAutoFocusFaceModeSupported(); - + public abstract isCameraAutoFocusFaceModeSupported(): boolean; - (BOOL)isCameraAutoFocusFaceModeSupported; virtual bool isCameraAutoFocusFaceModeSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita index f8538e58767..c000d56690e 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposurepositionsupported.dita @@ -14,7 +14,7 @@

        public abstract boolean isCameraExposurePositionSupported(); - + public abstract isCameraExposurePositionSupported(): boolean; - (BOOL)isCameraExposurePositionSupported; virtual bool isCameraExposurePositionSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita index acf851bb8f7..e9e34c44a78 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita @@ -14,7 +14,7 @@

        public abstract boolean isCameraExposureSupported(); - + public abstract isCameraExposureSupported(): boolean; - (BOOL)isCameraExposureSupported NS_SWIFT_NAME(isCameraExposureSupported()); virtual bool isCameraExposureSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita b/en-US/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita index 1c03b0c5eca..6a5c609c500 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_iscamerafacedetectsupported.dita @@ -14,7 +14,7 @@

        public abstract boolean isCameraFaceDetectSupported(); - + public abstract isCameraFaceDetectSupported(): boolean; virtual bool isCameraFaceDetectSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita b/en-US/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita index f51be5d5d4c..d8491c274d3 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita @@ -14,7 +14,7 @@

        public abstract boolean isCameraZoomSupported(); - + public abstract isCameraZoomSupported(): boolean; - (BOOL)isCameraZoomSupported; virtual bool isCameraZoomSupported() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita b/en-US/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita index 20cc25a6e00..82568a4ae9e 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_pauseallchannelmediarelay.dita @@ -14,7 +14,7 @@

        public abstract int pauseAllChannelMediaRelay(); - + public abstract pauseAllChannelMediaRelay():number; - (int)pauseAllChannelMediaRelay; virtual int pauseAllChannelMediaRelay() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita b/en-US/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita index b0bddd39432..5fc7ca90b0c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_pushvideoframe3.dita @@ -14,7 +14,7 @@

        public abstract int pushExternalVideoFrameById(VideoFrame frame, int videoTrackId); - + public abstract pushExternalVideoFrameById(frame: VideoFrame, videoTrackId: number): number; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita b/en-US/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita index 7cb6f6d28db..fc75926bd52 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_resumeallchannelmediarelay.dita @@ -14,7 +14,7 @@

        public abstract int resumeAllChannelMediaRelay(); - + public abstract resumeAllChannelMediaRelay():number; - (int)resumeAllChannelMediaRelay; virtual int resumeAllChannelMediaRelay() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita b/en-US/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita index 96a75c3d481..1940e1fa9e9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_selectaudiotrack.dita @@ -14,7 +14,7 @@

        public abstract int selectAudioTrack(int audioIndex); - + public abstract selectAudioTrack(index: number): number; - (int)selectAudioTrack:(NSInteger)index; virtual int selectAudioTrack(int index) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita index 46bc64ba893..828086482e7 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setaudiomixingplaybackspeed.dita @@ -14,7 +14,7 @@

        public abstract int setAudioMixingPlaybackSpeed(int speed); - + public abstract setAudioMixingPlaybackSpeed(speed: number): number - (int)setAudioMixingPlaybackSpeed:(NSInteger)speed NS_SWIFT_NAME(setAudioMixingPlaybackSpeed(_:)); virtual int setAudioMixingPlaybackSpeed(int speed) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita index 3d202c15d3e..2b71401bb50 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraautofocusfacemodeenabled.dita @@ -14,7 +14,7 @@

        public abstract int setCameraAutoFocusFaceModeEnabled(boolean enabled); - + public abstract setCameraAutoFocusFaceModeEnabled(enabled: boolean): number; - (BOOL)setCameraAutoFocusFaceModeEnabled:(BOOL)enable; virtual int setCameraAutoFocusFaceModeEnabled(bool enabled) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita index ee0b5f0ba07..a66b7eb569e 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposurefactor.dita @@ -14,7 +14,7 @@

        public abstract int setCameraExposureFactor(int factor); - + public abstract setCameraExposureFactor(factor: number): number; - (CGFloat)setCameraExposureFactor:(CGFloat)exposureFactor NS_SWIFT_NAME(setCameraExposureFactor(_:)); virtual int setCameraExposureFactor(float factor) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita index ac30f02d4a2..ee3483e7717 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setcameraexposureposition.dita @@ -14,7 +14,7 @@

        public abstract int setCameraExposurePosition(float positionXinView, float positionYinView); - + public abstract setCameraExposurePosition(positionXinView: number, positionYinView: number): number; - (BOOL)setCameraExposurePosition:(CGPoint)positionInView; virtual int setCameraExposurePosition(float positionXinView, float positionYinView) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita index b62dd166b0b..76118e6c923 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setcameratorchon.dita @@ -14,7 +14,7 @@

        public abstract int setCameraTorchOn(boolean isOn); - public abstract setCameraTorchOn(isOn:boolean):number; + - (BOOL)setCameraTorchOn:(BOOL)isOn NS_SWIFT_NAME(setCameraTorchOn(_:)); virtual int setCameraTorchOn(bool isOn) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita index d208785c657..bd91939a0fd 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setcamerazoomfactor.dita @@ -14,7 +14,7 @@

        public abstract int setCameraZoomFactor(float factor); - public abstract setCameraZoomFactor(factor:number):number; + public abstract setCameraZoomFactor(factor: number): number; - (CGFloat)setCameraZoomFactor:(CGFloat)zoomFactor; virtual int setCameraZoomFactor(float factor) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita index 05eb51bff00..919ee6b18ff 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setenablespeakerphone.dita @@ -14,7 +14,7 @@

        public abstract int setEnableSpeakerphone(boolean enabled); - public abstract setEnableSpeakerphone(enabled: boolean): number; + - (int)setEnableSpeakerphone:(BOOL)enableSpeaker; virtual int setEnableSpeakerphone(bool speakerOn) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita index 6f21e6941ea..d051a310096 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendermode.dita @@ -14,7 +14,7 @@

        public abstract int setLocalRenderMode(int renderMode); - public abstract setLocalRenderMode(renderMode: number, mirrorMode: number): number; + - (int)setLocalRenderMode:(NSUInteger)uid mode:(AgoraVideoRenderMode) mode; virtual int setLocalRenderMode(media::base::RENDER_MODE_TYPE renderMode) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita index 16128db628a..eb91c8cdf16 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setplaybackaudioframebeforemixingparameters.dita @@ -14,7 +14,7 @@

        public abstract int setPlaybackAudioFrameBeforeMixingParameters(int sampleRate, int channel); - public abstract setPlaybackAudioFrameBeforeMixingParameters(sampleRate:number,channel:number):number; + public abstract setPlaybackAudioFrameBeforeMixingParameters(sampleRate:number,channel:number):number; - (int)setPlaybackAudioFrameBeforeMixingParametersWithSampleRate:(NSInteger)sampleRate channel:(NSInteger)channel; virtual int setPlaybackAudioFrameBeforeMixingParameters(int sampleRate, int channel) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita index 9ffa25cf184..bdd6d71d4a9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing.dita @@ -14,7 +14,7 @@

        public abstract int startAudioMixing(String filePath, boolean loopback, int cycle); - public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number): number; + - (int)startAudioMixing:(NSString * _Nonnull)filePath loopback:(BOOL)loopback cycle:(NSInteger)cycle NS_SWIFT_NAME(startAudioMixing(_:loopback:cycle:)); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita index dae0c085bcb..a9661f22c76 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiomixing2.dita @@ -14,7 +14,7 @@

        public abstract int startAudioMixing(String filePath, boolean loopback, int cycle, int startPos); - public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number): number; + public abstract startAudioMixing(filepath: string, loopback: boolean, cycle: number, startpos?:number): number; - (int)startAudioMixing:(NSString* _Nonnull)filePath loopback:(BOOL)loopback cycle:(NSInteger)cycle startPos:(NSInteger)startPos; virtual int startAudioMixing(const char* filePath, bool loopback, int cycle, int startPos) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita index c5a8c3e9ef5..d7566f68343 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startaudiorecording.dita @@ -14,7 +14,7 @@

        public abstract int startAudioRecording(String filePath, int quality); - public abstract startAudioRecording(filePath: string, quality: Constants.AudioRecordingQualityType): number; + public abstract startAudioRecording(filePath: string, quality: Constants.AudioRecordingQualityType): number;; - (int)startAudioRecording:(NSString * _Nonnull)filePath quality:(AgoraAudioRecordingQuality)quality; virtual int startAudioRecording(const char* filePath, AUDIO_RECORDING_QUALITY_TYPE quality) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita index bd301db535c..15f828bdc59 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startrtmpstreamwithouttranscoding.dita @@ -14,7 +14,7 @@

        public abstract int startRtmpStreamWithoutTranscoding(String url); - + public abstract startRtmpStreamWithoutTranscoding(url:string): number; - (int)startRtmpStreamWithoutTranscoding:(NSString* _Nonnull)url; virtual int startRtmpStreamWithoutTranscoding(const char* url) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita index f3546e99407..578306462f9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita @@ -15,7 +15,7 @@

        public abstract int startScreenCapture(ScreenCaptureParameters screenCaptureParameters); - public abstract startScreenCapture(parameter: ScreenCaptureParameters): number; + public abstract startScreenCapture(screenCaptureParameters: ScreenCaptureParameters): number; - (int)startScreenCapture:(AgoraScreenCaptureParameters2* _Nullable)parameters NS_SWIFT_NAME(startScreenCapture(_:)); #if defined(__ANDROID__) || (defined(__APPLE__) && TARGET_OS_IOS) virtual int startScreenCapture(const ScreenCaptureParameters2& captureParams) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita b/en-US/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita index 64086887c59..4cf22b40cf7 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_stopaudiorecording.dita @@ -14,7 +14,7 @@

        public abstract int stopAudioRecording(); - public abstract stopAudioRecording(): number; + public abstract stopAudioRecording(): number;; - (int)stopAudioRecording; virtual int stopAudioRecording() = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_stopeffect.dita b/en-US/dita/RTC-NG/API/api_irtcengine_stopeffect.dita index ee455b25258..518592aeeeb 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_stopeffect.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_stopeffect.dita @@ -15,7 +15,7 @@

        public abstract int stopEffect(int soundId); - + public abstract stopEffect(soundId:number):number; - (int)stopEffect:(int)soundId; virtual int stopEffect(int soundId) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita b/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita index 5006b7a96b3..75a54cd1617 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita @@ -16,7 +16,7 @@ public abstract int updateScreenCaptureParameters( ScreenCaptureParameters screenCaptureParameters); - + public abstract updateScreenCaptureParameters(screenCaptureParameters: ScreenCaptureParameters): number; - (int)updateScreenCaptureParameters:(AgoraScreenCaptureParameters * _Nonnull)captureParams; virtual int updateScreenCaptureParameters(const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita index 60c8c0c345e..5be14ba77bf 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_adjustuserplaybacksignalvolumeex.dita @@ -15,7 +15,7 @@

        public abstract int adjustUserPlaybackSignalVolumeEx( int uid, int volume, RtcConnection connection); - + public abstract adjustUserPlaybackSignalVolumeEx(uid:number,volume:number,connection:RtcConnection):number; - (int)adjustUserPlaybackSignalVolumeEx:(NSUInteger)uid volume:(NSInteger)volume connection:(AgoraRtcConnection* _Nonnull)connection; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita index 70f210def55..0a3722cf852 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_createdatastreamex.dita @@ -15,7 +15,7 @@

        public abstract int createDataStreamEx( boolean reliable, boolean ordered, RtcConnection connection); - public abstract createDataStreamEx(config:DataStreamConfig,connection:RtcConnection):number; + - (int)createDataStreamEx:(NSInteger * _Nonnull)streamId reliable:(BOOL)reliable ordered:(BOOL)ordered diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita index 813c4c432de..c1fbb651c77 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_enableaudiovolumeindicationex.dita @@ -15,7 +15,7 @@

        public abstract int enableAudioVolumeIndicationEx( int interval, int smooth, boolean reportVad, RtcConnection connection); - + public abstract enableAudioVolumeIndicationEx(interval:number,smooth:number,reportVad:boolean,connection:RtcConnection):number; - (int)enableAudioVolumeIndicationEx:(NSInteger)interval smooth:(NSInteger)smooth reportVad:(BOOL)reportVad diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita index e37793cf33a..94fb09abba2 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremoteaudiostreamsex.dita @@ -14,7 +14,8 @@

        public abstract int muteAllRemoteAudioStreamsEx(boolean muted, RtcConnection connection); - + public abstract muteAllRemoteAudioStreamsEx(muted:boolean,connection:RtcConnection):number; + - (int)muteAllRemoteAudioStreamsEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteAllRemoteAudioStreamsEx(_:connection:)); virtual int muteAllRemoteAudioStreamsEx(bool mute, const RtcConnection& connection) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita index 308cfc12ca8..be188984c4c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_muteallremotevideostreamsex.dita @@ -14,7 +14,7 @@

        public abstract int muteAllRemoteVideoStreamsEx(boolean muted, RtcConnection connection); - + public abstract muteAllRemoteVideoStreamsEx(muted:boolean,connection:RtcConnection):number; - (int)muteAllRemoteVideoStreamsEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteAllRemoteVideoStreamsEx(_:connection:)); virtual int muteAllRemoteVideoStreamsEx(bool mute, const RtcConnection& connection) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita index 8eac22aaec8..9313c999870 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalaudiostreamex.dita @@ -14,7 +14,7 @@

        public abstract int muteLocalAudioStreamEx(boolean muted, RtcConnection connection); - + public abstract muteLocalAudioStreamEx(muted:boolean,connection:RtcConnection):number; - (int)muteLocalAudioStreamEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteLocalAudioStreamEx(_:connection:)); virtual int muteLocalAudioStreamEx(bool mute, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita index eeb1f3054fe..e3b65e1624c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_mutelocalvideostreamex.dita @@ -14,7 +14,8 @@

        public abstract int muteLocalVideoStreamEx(boolean muted, RtcConnection connection); - + public abstract muteLocalVideoStreamEx(muted:boolean,connection:RtcConnection):number; + - (int)muteLocalVideoStreamEx:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(muteLocalVideoStreamEx(_:connection:)); virtual int muteLocalVideoStreamEx(bool mute, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita index 80a5f0b4c5d..d352053250b 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_muteremoteaudiostreamex.dita @@ -14,7 +14,7 @@

        public abstract int muteRemoteAudioStreamEx(int uid, boolean muted, RtcConnection connection); - + public abstract muteRemoteAudioStreamEx(uid:number,muted:boolean,connection:RtcConnection):number; - (int)muteRemoteAudioStreamEx:(NSUInteger)uid mute:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita index cce88870313..70ca8f88127 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_muteremotevideostreamex.dita @@ -14,7 +14,7 @@

        public abstract int muteRemoteVideoStreamEx(int uid, boolean muted, RtcConnection connection); - + public abstract muteRemoteVideoStreamEx(uid:number,muted:boolean,connection:RtcConnection):number; - (int)muteRemoteVideoStreamEx:(NSUInteger)uid mute:(BOOL)mute connection:(AgoraRtcConnection * _Nonnull)connection; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita index 6bd5b69a4b1..8f99bf9e33d 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_sendstreammessageex.dita @@ -14,7 +14,7 @@

        public abstract int sendStreamMessageEx(int streamId, byte[] message, RtcConnection connection); - + public abstract sendStreamMessageEx(streamId:number,message:ArrayBuffer,connection:RtcConnection):number; virtual int sendStreamMessageEx(int streamId, const char* data, size_t length, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita index 7402a9fe07b..4cb16c06c8c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_setdualstreammodeex.dita @@ -15,7 +15,7 @@

        public abstract int setDualStreamModeEx(Constants.SimulcastStreamMode mode, SimulcastStreamConfig streamConfig, RtcConnection connection); - + public abstract setDualStreamModeEx(mode:Constants.SimulcastStreamMode,streamConfig:SimulcastStreamConfig,connection:RtcConnection):number; - (int)setDualStreamModeEx:(AgoraSimulcastStreamMode)mode streamConfig:(AgoraSimulcastStreamConfig*)streamConfig connection:(AgoraRtcConnection* _Nonnull)connection; diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita index 8f0ad20a08a..d94d4cbf565 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_setremoterendermodeex.dita @@ -15,7 +15,7 @@

        public abstract int setRemoteRenderModeEx( int uid, int renderMode, int mirrorMode, RtcConnection connection); - + public abstract setRemoteRenderModeEx(uid:number,renderMode:number,mirrorMode:number,connection:RtcConnection):number; - (int)setRemoteRenderModeEx:(NSUInteger)uid mode:(AgoraVideoRenderMode)mode mirror:(AgoraVideoMirrorMode)mirror diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita index 75d3c6f124d..6e34c6d92db 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_setremotevideostreamtypeex.dita @@ -14,7 +14,7 @@

        public abstract int setRemoteVideoStreamTypeEx(int uid, int streamType, RtcConnection connection); - + public abstract setRemoteVideoStreamTypeEx(uid:number,streamType:number,connection:RtcConnection):number; - (int)setRemoteVideoStreamEx:(NSUInteger)uid type:(AgoraVideoStreamType)streamType connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(setRemoteVideoStreamEx(_:type:connection:)); diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita index 753248ce3ea..1ce68b688b2 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_startorupdatechannelmediarelayex.dita @@ -15,7 +15,7 @@

        public abstract int startOrUpdateChannelMediaRelayEx( ChannelMediaRelayConfiguration channelMediaRelayConfiguration, RtcConnection connection); - + public abstract startOrUpdateChannelMediaRelayEx(channelMediaRelayConfiguration:ChannelMediaRelayConfiguration,connection:RtcConnection):number; - (int)startOrUpdateChannelMediaRelayEx:(AgoraChannelMediaRelayConfiguration * _Nonnull)config connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(startOrUpdateChannelMediaRelayEx(_:connection:)); virtual int startOrUpdateChannelMediaRelayEx(const ChannelMediaRelayConfiguration& configuration, const RtcConnection& connection) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita index d68bf96bd89..fb275c08d64 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex.dita @@ -14,7 +14,7 @@

        public abstract int takeSnapshotEx(RtcConnection connection, int uid, String filePath); - + public abstract takeSnapshotEx(connection:RtcConnection,uid:number,filePath:string):number; - (NSInteger)takeSnapshotEx:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid filePath:(NSString* _Nonnull)filePath; virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const char* filePath) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita index cd5c768bfc8..d78d089850b 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_updatechannelmediaoptionsex.dita @@ -15,7 +15,7 @@

        public abstract int updateChannelMediaOptionsEx( ChannelMediaOptions options, RtcConnection connection); - + public abstract updateChannelMediaOptionsEx(options:ChannelMediaOptions,connection:RtcConnection):number; - (int)updateChannelExWithMediaOptions:(AgoraRtcChannelMediaOptions* _Nonnull)mediaOptions connection:(AgoraRtcConnection * _Nonnull)connection; virtual int updateChannelMediaOptionsEx(const ChannelMediaOptions& options, const RtcConnection& connection) = 0; diff --git a/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita b/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita index 53b4441e582..9a048f52678 100644 --- a/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita +++ b/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onlocalaudiospectrum.dita @@ -15,7 +15,7 @@

        boolean onLocalAudioSpectrum(AudioSpectrumInfo data); - + onLocalAudioSpectrum?:(data:AudioSpectrumData) => boolean ; - (BOOL)onLocalAudioSpectrum:(NSArray<NSNumber *> * _Nullable)audioSpectrumData; virtual bool onLocalAudioSpectrum(const AudioSpectrumData& data) = 0; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnLocalAudioSpectrum, const FAudioSpectrumData&, data); diff --git a/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita b/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita index d18fa029d42..254d849d920 100644 --- a/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita +++ b/en-US/dita/RTC-NG/API/callback_iaudiospectrumobserver_onremoteaudiospectrum.dita @@ -15,7 +15,7 @@

        boolean onRemoteAudioSpectrum(UserAudioSpectrumInfo[] userAudioSpectrumInfos, int spectrumNumber); - + onRemoteAudioSpectrum?:(data:Array<AudioSpectrumInfo>) => boolean ; - (BOOL)onRemoteAudioSpectrum:(NSArray<AgoraAudioSpectrumInfo *> * _Nullable)AudioSpectrumInfo; virtual bool onRemoteAudioSpectrum(const UserAudioSpectrumInfo * spectrums, unsigned int spectrumNumber) = 0; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita index 95b7be21b01..10175967fe0 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onaudiovolumeindication.dita @@ -14,7 +14,7 @@

        void onAudioVolumeIndication(int volume); - onAudioVolumeIndication?:( speakers:Array<AudioVolumeInfo>, totalVolume:number) => void + onAudioVolumeIndication?:(volume:number) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit volumeIndicationDidReceive:(NSInteger)volume; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita index 368dc306a7d..e60c3556a69 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onmetadata.dita @@ -15,7 +15,7 @@

        void onMetaData(Constants.MediaPlayerMetadataType type, byte[] data); - + onMetaData?:(type:Constants.MediaPlayerMetadataType,data:ArrayBuffer) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didReceiveData:(NSString *_Nullable)data length:(NSInteger)length; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita index ea3ec3afdc4..71dfb82f1d1 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplaybufferupdated.dita @@ -15,7 +15,7 @@

        void onPlayBufferUpdated(long playCachedBuffer); - + onPlayBufferUpdated?:(playCachedBuffer:number) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didPlayBufferUpdated:(NSInteger)playCachedBuffer NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:didPlayBufferUpdated:)); virtual void onPlayBufferUpdated(int64_t playCachedBuffer) = 0; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita index 16df2ae6063..f0d286d8f8d 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayercachestats.dita @@ -14,7 +14,7 @@

        void onPlayerCacheStats(CacheStatistics stats); - + onPlayerCacheStats?:(stats:CacheStatistics) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit cacheStats:(AgoraMediaPlayerCacheStatistics *_Nonnull)info NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:cacheStats:)); virtual void onPlayerCacheStats(const media::base::CacheStatistics& stats) { (void)stats; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita index 3f3b4ff990e..2f5fef7fa9f 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerevent.dita @@ -15,7 +15,7 @@

        void onPlayerEvent(Constants.MediaPlayerEvent eventCode, long elapsedTime, String message); - + onPlayerEvent?:(eventCode:Constants.MediaPlayerEvent,elapsedTime:number,message:string) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didOccurEvent:(AgoraMediaPlayerEvent)eventCode elapsedTime:(NSInteger)elapsedTime diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita index a361cf88893..55b91a31a6c 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerinfoupdated.dita @@ -15,7 +15,7 @@

        void onPlayerInfoUpdated(PlayerUpdatedInfo info); - + onPlayerInfoUpdated?:(info:PlayerUpdatedInfo) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit infoUpdated:(AgoraMediaPlayerUpdatedInfo *_Nonnull)info; virtual void onPlayerInfoUpdated(const media::base::PlayerUpdatedInfo& info) = 0; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita index a3eb3eb2f6b..5fbdc11337b 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayerplaybackstats.dita @@ -14,7 +14,7 @@

        void onPlayerPlaybackStats(PlayerPlaybackStats stats); - + onPlayerPlaybackStats?:(stats:PlayerPlaybackStats) => void (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit playbackStats:(AgoraMediaPlayerPlaybackStats *_Nonnull)info NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:playbackStats:)); virtual void onPlayerPlaybackStats(const media::base::PlayerPlaybackStats& stats) { (void)stats; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita index 7d792b559df..867f6b7121d 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersourcestatechanged.dita @@ -15,7 +15,7 @@

        void onPlayerStateChanged(Constants.MediaPlayerState state, Constants.MediaPlayerReason reason); - + onPlayerStateChanged?:(state:Constants.MediaPlayerState,reason:Constants.MediaPlayerReason) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didChangedToState:(AgoraMediaPlayerState)state reason:(AgoraMediaPlayerReason)reason NS_SWIFT_NAME(AgoraRtcMediaPlayer(_:didChangedTo:reason:)); diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita index 0c6b6606490..30dc0992bdf 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onplayersrcinfochanged.dita @@ -15,7 +15,7 @@

        void onPlayerSrcInfoChanged(SrcInfo from, SrcInfo to); - + onPlayerSrcInfoChanged?:(from:SrcInfo,to:SrcInfo) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit playerSrcInfoDidChange:(AgoraMediaPlayerSrcInfo *_Nonnull)to from:(AgoraMediaPlayerSrcInfo *_Nonnull)from; virtual void onPlayerSrcInfoChanged(const media::base::SrcInfo& from, const media::base::SrcInfo& to) = 0; diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita index b537415e827..59e26c62862 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpositionchanged.dita @@ -14,7 +14,7 @@

        void onPositionChanged(long positionMs, long timestampMs); - + onPositionChanged?:(positionMs:number,timestampMs:number) => void - (void)AgoraMediaPlayer:(AgoraMediaPlayer *_Nonnull)playerKit didChangedToPosition:(NSInteger)positionMs atTimestamp:(NSTimeInterval)timestampMs NS_SWIFT_NAME(AgoraMediaPlayer(_:didChangedToPosition:atTimestamp:)); diff --git a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita index 1c5f457ea7e..20427f7059e 100644 --- a/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita +++ b/en-US/dita/RTC-NG/API/callback_imediaplayersourceobserver_onpreloadevent.dita @@ -15,7 +15,7 @@

        void onPreloadEvent(String src, Constants.MediaPlayerPreloadEvent event); - + onPreloadEvent?:(src:string,event:Constants.MediaPlayerPreloadEvent) => void - (void)AgoraRtcMediaPlayer:(id<AgoraRtcMediaPlayerProtocol> _Nonnull)playerKit didPreloadEvent:(AgoraMediaPlayerPreloadEvent)event; diff --git a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita index 9f6de69cc94..8b446dee886 100644 --- a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita +++ b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onlyricresult.dita @@ -14,7 +14,7 @@

        void onLyricResult(String requestId, long songCode, String lyricUrl, int reason); - + onLyricResult?:(requestId:string,songCode:bigint,lyricUrl:string,reason:Constants.MusicContentCenterStateReason) => void - (void)onLyricResult:(NSString*)requestId songCode:(NSInteger)songCode lyricUrl:(NSString* _Nullable)lyricUrl reason:(AgoraMusicContentCenterStateReason)reason; virtual void onLyricResult(const char* requestId, int64_t songCode, const char* lyricUrl, MusicContentCenterStateReason reason) = 0; onLyricResult?( diff --git a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita index 2e621b16ee0..645c370dd9d 100644 --- a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita +++ b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita @@ -14,7 +14,7 @@

        void onMusicChartsResult(String requestId, MusicChartInfo[] list, int reason); - + onMusicChartsResult?:(requestId:string,list:MusicChartInfo[],reason:Constants.MusicContentCenterStateReason) => void - (void)onMusicChartsResult:(NSString *)requestId result:(NSArray<AgoraMusicChartInfo*> *)result reason:(AgoraMusicContentCenterStateReason)reason; virtual void onMusicChartsResult(const char* requestId, agora_refptr<MusicChartCollection> result, MusicContentCenterStateReason reason) = 0; onMusicChartsResult?( diff --git a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita index 4d0a505f73b..ed8ad261bf4 100644 --- a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita +++ b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita @@ -15,7 +15,7 @@

        void onMusicCollectionResult( String requestId, int page, int pageSize, int total, Music[] list, int reason); - + onMusicCollectionResult?:(requestId:string,page:number,pageSize:number,total:number,list:Music[],reason:Constants.MusicContentCenterStateReason) => void - (void)onMusicCollectionResult:(NSString *)requestId result:(AgoraMusicCollection *)result reason:(AgoraMusicContentCenterStateReason)reason; virtual void onMusicCollectionResult(const char* requestId, agora_refptr<MusicCollection> result, MusicContentCenterStateReason reason) = 0; onMusicCollectionResult?( diff --git a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita index 69683bbacbf..67e6cf127c9 100644 --- a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita +++ b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onpreloadevent.dita @@ -15,7 +15,7 @@

        void onPreLoadEvent( String requestId, long songCode, int percent, String lyricUrl, int state, int reason); - + onPreLoadEvent?:(requestId:string,songCode:bigint,percent:number,lyricUrl:string,state:number,reason:Constants.MusicContentCenterStateReason) => void - (void)onPreLoadEvent:(NSString*)requestId songCode:(NSInteger)songCode percent:(NSInteger)percent lyricUrl:(NSString * _Nullable)lyricUrl state:(AgoraMusicContentCenterPreloadState)state reason:(AgoraMusicContentCenterStateReason)reason; virtual void onPreLoadEvent(const char* requestId, int64_t songCode, int percent, const char* lyricUrl, PreloadState state, MusicContentCenterStateReason reason) = 0; onPreLoadEvent?( diff --git a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita index 2e5b1e6e6df..557286b13e3 100644 --- a/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita +++ b/en-US/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onsongsimpleinforesult.dita @@ -14,7 +14,7 @@

        void onSongSimpleInfoResult(String requestId, long songCode, String simpleInfo, int reason); - + onSongSimpleInfoResult?:(requestId:string,songCode:bigint,simpleInfo:string,reason:Constants.MusicContentCenterStateReason) => void - (void)onSongSimpleInfoResult:(NSString*)requestId songCode:(NSInteger)songCode simpleInfo:(NSString* _Nullable)simpleInfo reason:(AgoraMusicContentCenterStateReason)reason; virtual void onSongSimpleInfoResult(const char* requestId, int64_t songCode, const char* simpleInfo, MusicContentCenterStateReason reason) = 0; onSongSimpleInfoResult?( diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita index db323003c6a..cc73f8d204b 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioeffectfinished.dita @@ -14,7 +14,7 @@

        public void onAudioEffectFinished(int soundId) {} - + onAudioEffectFinished?:(soundId:number) => void; - (void)rtcEngineDidAudioEffectFinish:(AgoraRtcEngineKit * _Nonnull)engine soundId:(int)soundId; virtual void onAudioEffectFinished(int soundId) { } diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita index 7f9c83faef6..7232eac84fa 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita @@ -14,7 +14,7 @@

        public void onAudioMixingStateChanged(int state, int reasonCode); - onAudioMixingStateChanged?:(state:number,reason:number) => void + onAudioMixingStateChanged?:(state:Constants.AudioMixingState,reason:Constants.AudioMixingReason) => void - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioMixingStateChanged:(AgoraAudioMixingStateType)state reasonCode:(AgoraAudioMixingReasonCode)reasonCode; virtual void onAudioMixingStateChanged(AUDIO_MIXING_STATE_TYPE state, AUDIO_MIXING_REASON_TYPE reason) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita index 8faf49f2eef..fd3f929ab55 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiopublishstatechanged.dita @@ -15,7 +15,7 @@

        public void onAudioPublishStateChanged(String channel, STREAM_PUBLISH_STATE oldState, STREAM_PUBLISH_STATE newState, int elapseSinceLastState) {} - + onAudioPublishStateChanged?:(channel:string, oldState:Constants.StreamPublishState, newState:Constants.StreamPublishState, elapseSinceLastState:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioPublishStateChange:(NSString * _Nonnull)channelId oldState:(AgoraStreamPublishState)oldState diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita index bf9107cce63..0a5c505f859 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiosubscribestatechanged.dita @@ -15,7 +15,7 @@

        public void onAudioSubscribeStateChanged( String channel, int uid, int oldState, int newState, int elapseSinceLastState) {} - + onAudioSubscribeStateChanged?:(channel:string,uid:number,oldState:Constants.StreamSubscribeState,newState:Constants.StreamSubscribeState,elapseSinceLastState:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didAudioSubscribeStateChange:(NSString * _Nonnull)channelId uid:(unsigned int)uid diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita index e3a53bb435f..1fd0b5726f6 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncameraexposureareachanged.dita @@ -14,7 +14,7 @@

        public void onCameraExposureAreaChanged(Rect rect) {} - + onCameraExposureAreaChanged?:(rect:camera.Rect) => void; - (void)rtcEngine:(AgoraRtcEngineKit* _Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect; virtual void onCameraExposureAreaChanged(int x, int y, int width, int height) { (void)x; diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita index 2694e80421a..086d8a6698f 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_oncamerafocusareachanged.dita @@ -14,7 +14,7 @@

        public void onCameraFocusAreaChanged(Rect rect) {} - + onCameraFocusPointChanged?:(point:camera.Point) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect; virtual void onCameraFocusAreaChanged(int x, int y, int width, int height) { (void)x; diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita index f97242e8716..b252c3e710b 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onchannelmediarelaystatechanged.dita @@ -14,7 +14,7 @@

        public void onChannelMediaRelayStateChanged(int state, int code) {} - + onChannelMediaRelayStateChanged?:(state:Constants.ChannelMediaRelayState,code:Constants.ChannelMediaRelayError) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine channelMediaRelayStateDidChange:(AgoraChannelMediaRelayState)state error:(AgoraChannelMediaRelayError)error; diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita index 6013ed9ff4d..f1d8e5f8227 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onerror.dita @@ -15,7 +15,7 @@

        public void onError(int err) {} - onError?:(err:number,message:string) => void + onError?:(err:Constants.ErrorCode,message:string) => void - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didOccurError:(AgoraErrorCode)errorCode; virtual void onError(int err, const char* msg) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita index 2e5955bf138..e581920ead3 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstlocalvideoframe.dita @@ -16,7 +16,7 @@ public void onFirstLocalVideoFrame( Constants.VideoSourceType source, int width, int height, int elapsed) {} - + onFirstLocalVideoFrame?:(source:Constants.VideoSourceType,width:number,height:number,elapsed:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine firstLocalVideoFrameWithSize:(CGSize)size elapsed:(NSInteger)elapsed diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita index 5c2b9f24eb2..8e300a17286 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onfirstremotevideoframe.dita @@ -14,7 +14,7 @@

        public void onFirstRemoteVideoFrame(int uid, int width, int height, int elapsed) {} - + onFirstRemoteVideoFrame?:(uid:number,width:number,height:number,elapsed:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed; virtual void onFirstRemoteVideoFrame(uid_t userId, int width, int height, int elapsed) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita index 73a085b7928..02f438b90fe 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onjoinchannelsuccess.dita @@ -14,7 +14,7 @@

        public void onJoinChannelSuccess(String channel, int uid, int elapsed) {} - onJoinChannelSuccess?:(cid:string, uid:number, elapsed:number) => void; + onJoinChannelSuccess?:(channel:string, uid:number, elapsed:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didJoinChannel:(NSString * _Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed; virtual void onJoinChannelSuccess(const char* channel, diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita index cc0e31fbdc3..b956853d4cc 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita @@ -15,7 +15,7 @@

        public void onLocalVideoStateChanged(Constants.VideoSourceType source, int state, int reason) {} - onLocalVideoStateChanged?:(source: Constants.VideoSourceType, state:Constants.LocalVideoStreamState,error:Constants.LocalVideoStreamReason) => void + onLocalVideoStateChanged?:(source: Constants.VideoSourceType, state:Constants.LocalVideoStreamState,reason:Constants.LocalVideoStreamReason) => void - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine localVideoStateChangedOfState:(AgoraVideoLocalState)state reason:(AgoraLocalVideoStreamReason)reason sourceType:(AgoraVideoSourceType)sourceType NS_SWIFT_NAME(rtcEngine(_:localVideoStateChangedOf:reason:sourceType:)); virtual void onLocalVideoStateChanged(VIDEO_SOURCE_TYPE source, LOCAL_VIDEO_STREAM_STATE state, LOCAL_VIDEO_STREAM_REASON reason) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita index 8fcb75861a0..69f310c05f3 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita @@ -15,7 +15,7 @@

        public void onLocalVideoTranscoderError( LocalTranscoderConfiguration.TranscodingVideoStream stream, int error) {} - + onLocalVideoTranscoderError?:(stream:TranscodingVideoStream, error:Constants.VideoTranscoderError) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didLocalVideoTranscoderErrorWithStream:(AgoraTranscodingVideoStream * _Nonnull )stream errorCode:(AgoraVideoTranscoderError)errorCode NS_SWIFT_NAME(rtcEngine(_:didLocalVideoTranscoderErrorWithStream:errorCode:)); virtual void onLocalVideoTranscoderError(const TranscodingVideoStream& stream, VIDEO_TRANSCODER_ERROR error){ diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita index 3cd440b0c7a..077b54f5106 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrejoinchannelsuccess.dita @@ -14,7 +14,7 @@

        public void onRejoinChannelSuccess(String channel, int uid, int elapsed) {} - onRejoinChannelSuccess?:(cid:string, uid:number, elapsed:number) => void; + onRejoinChannelSuccess?:(channel:string, uid:number, elapsed:number) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didRejoinChannel:(NSString * _Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed; virtual void onRejoinChannelSuccess(const char* channel, uid_t uid, int elapsed) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita index ffdd51880e9..8e6dc3bc30b 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrequesttoken.dita @@ -14,7 +14,7 @@

        public void onRequestToken() {} - + onRequestToken?:() => void; - (void)rtcEngineRequestToken:(AgoraRtcEngineKit * _Nonnull)engine; virtual void onRequestToken() UFUNCTION(BlueprintNativeEvent, Category = "Agora|Event") diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita index 96f0ca6f0ff..a61fed7390f 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onrtmpstreamingstatechanged.dita @@ -14,7 +14,7 @@

        public void onRtmpStreamingStateChanged(String url, int state, int reason) {} - onRtmpStreamingStateChanged? : (url:string,state:Constants.RtmpStreamPublishState,errCode:Constants.RtmpStreamPublishReason) => void; + onRtmpStreamingStateChanged? : (url:string,state:Constants.RtmpStreamPublishState,reason:Constants.RtmpStreamPublishReason) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine rtmpStreamingChangedToState:(NSString * _Nonnull)url state:(AgoraRtmpStreamingState)state reason:(AgoraRtmpStreamingReason)reason NS_SWIFT_NAME(rtcEngine(_:rtmpStreamingChangedToState:state:reason:)); diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita index 5ac52ce57a5..d16dc7e4c38 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_ontokenprivilegewillexpire.dita @@ -14,7 +14,7 @@

        public void onTokenPrivilegeWillExpire(String token) {} - + onTokenPrivilegeWillExpire?: (token:string) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine tokenPrivilegeWillExpire:(NSString *_Nonnull)token; virtual void onTokenPrivilegeWillExpire(const char* token) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita index c1018791488..23d4bc90a20 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onuserenablevideo.dita @@ -14,7 +14,7 @@

        public void onUserEnableVideo(int uid, boolean enabled) {} - + onUserEnableVideo?:(uid:number, enabled:boolean) => void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didVideoEnabled:(BOOL)enabled byUid:(NSUInteger)uid diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita index f2923fdb16f..018f03521d7 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermuteaudio.dita @@ -14,7 +14,7 @@

        public void onUserMuteAudio(int uid, boolean muted) {} - + onUserMuteAudio?:(uid:number,muted:boolean) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didAudioMuted:(BOOL)muted byUid:(NSUInteger)uid; virtual void onUserMuteAudio(uid_t uid, bool muted) { (void)uid; diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita index 5f9ad181668..14a4b3165a0 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onusermutevideo.dita @@ -14,7 +14,7 @@

        public void onUserMuteVideo(int uid, boolean muted) {} - + onUserMuteVideo?:(uid:number,muted:boolean) =>void; - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid virtual void onUserMuteVideo(uid_t uid, bool muted) { (void)uid; diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita index 445feb751be..a1aac5fdf28 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onvideosubscribestatechanged.dita @@ -15,7 +15,7 @@

        public void onVideoSubscribeStateChanged( String channel, int uid, int oldState, int newState, int elapseSinceLastState) {} - + onVideoSubscribeStateChanged?:(channel:string,uid:number,oldState:Constants.StreamSubscribeState,newState:Constants.StreamSubscribeState,elapseSinceLastState:number) =>void; - (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoSubscribeStateChange:(NSString * _Nonnull)channelId uid:(unsigned int)uid diff --git a/en-US/dita/RTC-NG/API/class_advanceoptions.dita b/en-US/dita/RTC-NG/API/class_advanceoptions.dita index c2311788d56..dbf7bd0e25c 100644 --- a/en-US/dita/RTC-NG/API/class_advanceoptions.dita +++ b/en-US/dita/RTC-NG/API/class_advanceoptions.dita @@ -23,11 +23,11 @@ } } export class AdvanceOptions { - public encodingPreference:EncodingPrefence = EncodingPrefence.PREFER_AUTO; - public compressionPreference:CompressionPrefence = CompressionPrefence.PREFER_LOW_LATENCY; - constructor() { - } - } + public encodingPreference:EncodingPrefence = EncodingPrefence.PREFER_AUTO; + public compressionPreference:CompressionPrefence = CompressionPrefence.PREFER_LOW_LATENCY; + constructor() { + } +} __attribute__((visibility("default"))) @interface AgoraAdvancedVideoOptions : NSObject @property(assign, nonatomic) AgoraEncodingPreference encodingPreference; @property(assign, nonatomic) AgoraCompressionPreference compressionPreference; diff --git a/en-US/dita/RTC-NG/API/class_audioparams.dita b/en-US/dita/RTC-NG/API/class_audioparams.dita index 2a2610db9aa..44887c4bbb9 100644 --- a/en-US/dita/RTC-NG/API/class_audioparams.dita +++ b/en-US/dita/RTC-NG/API/class_audioparams.dita @@ -20,7 +20,12 @@ this.samplesPerCall = samplesPerCall; } } - + export class AudioParams { + public sampleRate: number = 16000; + public channel: number = 1; + public mode: Constants.RawAudioFrameOpMode = Constants.RawAudioFrameOpMode.READ_ONLY; + public samplesPerCall: number = 1024; +} __attribute__((visibility("default"))) @interface AgoraAudioParams : NSObject @property (assign, nonatomic) NSInteger sampleRate; diff --git a/en-US/dita/RTC-NG/API/class_audiospectrumdata.dita b/en-US/dita/RTC-NG/API/class_audiospectrumdata.dita index 36225f86763..ef6a755c5fe 100644 --- a/en-US/dita/RTC-NG/API/class_audiospectrumdata.dita +++ b/en-US/dita/RTC-NG/API/class_audiospectrumdata.dita @@ -10,7 +10,10 @@ private float[] audioSpectrumData; private int dataLength; } - + export class AudioSpectrumInfo { + public uid:number = 0 ; + public audioSpectrumData = new AudioSpectrumData(); +} struct AudioSpectrumData { const float *audioSpectrumData; diff --git a/en-US/dita/RTC-NG/API/class_cachestatistics.dita b/en-US/dita/RTC-NG/API/class_cachestatistics.dita index cbab42329af..a935b0fc071 100644 --- a/en-US/dita/RTC-NG/API/class_cachestatistics.dita +++ b/en-US/dita/RTC-NG/API/class_cachestatistics.dita @@ -17,7 +17,15 @@ private long cacheSize; private long downloadSize; } - + export class CacheStatistics +{ + + public fileSize:number = 0 + + public cacheSize:number = 0 + + public downloadSize:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerCacheStatistics : NSObject @property(assign, nonatomic) NSInteger fileSize; @property(assign, nonatomic) NSInteger cacheSize; diff --git a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita index 832882cf544..e7c94d1b382 100644 --- a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -731,67 +731,67 @@ class ChannelMediaOptions { public Boolean isAudioFilterable; } export class ChannelMediaOptions { - - public publishCameraTrack?:boolean; - - public publishSecondaryCameraTrack?:boolean; - - public publishMicrophoneTrack?:boolean; - - public publishScreenCaptureVideo?:boolean; - - public publishScreenCaptureAudio?:boolean; - - public publishCustomAudioTrack?:boolean; - - public publishCustomAudioTrackId?:number; - - public publishCustomVideoTrack?:boolean; - - public publishEncodedVideoTrack?:boolean; - - public publishMediaPlayerAudioTrack?:boolean; - - public publishMediaPlayerVideoTrack?:boolean; - - public publishTranscodedVideoTrack?:boolean; - - public publishMixedAudioTrack?:boolean; - - public autoSubscribeAudio?:boolean; - - public autoSubscribeVideo?:boolean; - - public enableAudioRecordingOrPlayout?:boolean; - - public publishMediaPlayerId?:number; - - public clientRoleType?:number; - - public audienceLatencyLevel?:number; - - public defaultVideoStreamType?:number; - - public channelProfile?:number; - - public audioDelayMs?:number; - - public mediaPlayerAudioDelayMs?:number; - - public enableBuiltInMediaEncryption?:boolean; - - public publishRhythmPlayerTrack?:boolean; - - public isInteractiveAudience?:boolean; - - public customVideoTrackId?:number; - - public isAudioFilterable?:boolean; - - public startPreview?:boolean; - public constructor() { - } - } + + public publishCameraTrack?:boolean; + + public publishSecondaryCameraTrack?:boolean; + + public publishMicrophoneTrack?:boolean; + + public publishScreenCaptureVideo?:boolean; + + public publishScreenCaptureAudio?:boolean; + + public publishCustomAudioTrack?:boolean; + + public publishCustomAudioTrackId?:number; + + public publishCustomVideoTrack?:boolean; + + public publishEncodedVideoTrack?:boolean; + + public publishMediaPlayerAudioTrack?:boolean; + + public publishMediaPlayerVideoTrack?:boolean; + + public publishTranscodedVideoTrack?:boolean; + + public publishMixedAudioTrack?:boolean; + + public autoSubscribeAudio?:boolean; + + public autoSubscribeVideo?:boolean; + + public enableAudioRecordingOrPlayout?:boolean; + + public publishMediaPlayerId?:number; + + public clientRoleType?:number; + + public audienceLatencyLevel?:number; + + public defaultVideoStreamType?:number; + + public channelProfile?:number; + + public audioDelayMs?:number; + + public mediaPlayerAudioDelayMs?:number; + + public enableBuiltInMediaEncryption?:boolean; + + public publishRhythmPlayerTrack?:boolean; + + public isInteractiveAudience?:boolean; + + public customVideoTrackId?:number; + + public isAudioFilterable?:boolean; + + public startPreview?:boolean; + public constructor() { + } +} __attribute__((visibility("default"))) @interface AgoraRtcChannelMediaOptions : NSObject @property(assign, nonatomic) BOOL publishCameraTrack; @property(assign, nonatomic) BOOL publishSecondaryCameraTrack; diff --git a/en-US/dita/RTC-NG/API/class_climaxsegment.dita b/en-US/dita/RTC-NG/API/class_climaxsegment.dita index 95963c6d407..5c7ff264eb7 100644 --- a/en-US/dita/RTC-NG/API/class_climaxsegment.dita +++ b/en-US/dita/RTC-NG/API/class_climaxsegment.dita @@ -26,7 +26,11 @@ return endTimeMs; } } - + export class ClimaxSegment +{ + public startTimeMs:number = 0 + public endTimeMs:number = 0 +} __attribute__((visibility("default"))) @interface AgoraClimaxSegment : NSObject @property(nonatomic, assign) NSInteger startTimeMs; @property(nonatomic, assign) NSInteger endTimeMs; diff --git a/en-US/dita/RTC-NG/API/class_contentinspectconfig.dita b/en-US/dita/RTC-NG/API/class_contentinspectconfig.dita index 67d968f15af..0a95abba97a 100644 --- a/en-US/dita/RTC-NG/API/class_contentinspectconfig.dita +++ b/en-US/dita/RTC-NG/API/class_contentinspectconfig.dita @@ -34,7 +34,17 @@ moduleCount = 0; } } - + export class ContentInspectConfig { + public static readonly MAX_CONTENT_INSPECT_MODULE_COUNT:number = 32; + + public extraInfo?:string; + + public serverConfig?:string; + + public modules? :Array<ContentInspectModule>; + + public moduleCount:number = 0; +} __attribute__((visibility("default"))) @interface AgoraContentInspectConfig: NSObject @property (nonatomic, copy) NSString* _Nullable extraInfo; @property (nonatomic, copy) NSString* _Nullable serverConfig; diff --git a/en-US/dita/RTC-NG/API/class_contentinspectmodule.dita b/en-US/dita/RTC-NG/API/class_contentinspectmodule.dita index 23604f684ca..26480a88cda 100644 --- a/en-US/dita/RTC-NG/API/class_contentinspectmodule.dita +++ b/en-US/dita/RTC-NG/API/class_contentinspectmodule.dita @@ -13,7 +13,12 @@ type = CONTENT_INSPECT_TYPE_INVALID; interval = 0; } - + export class ContentInspectModule { + + public type:Constants.ContentInspectType = Constants.ContentInspectType.INVALID; + + public interval:number = 0; +} __attribute__((visibility("default"))) @interface AgoraContentInspectModule: NSObject @property (assign, nonatomic) AgoraContentInspectType type; diff --git a/en-US/dita/RTC-NG/API/class_logconfig.dita b/en-US/dita/RTC-NG/API/class_logconfig.dita index d3ca4b6bcf4..767380e0a4d 100644 --- a/en-US/dita/RTC-NG/API/class_logconfig.dita +++ b/en-US/dita/RTC-NG/API/class_logconfig.dita @@ -11,7 +11,14 @@ public int fileSizeInKB; public int level = Constants.LogLevel.getValue(Constants.LogLevel.LOG_LEVEL_INFO); } - + export class LogConfig { + + public filePath:string = ''; + + public fileSizeInKB:number = 2048; + + public level: Constants.LogLevel = Constants.LogLevel.INFO; +} __attribute__((visibility("default"))) @interface AgoraLogConfig: NSObject @property (copy, nonatomic) NSString * _Nullable filePath; @property (assign, nonatomic) NSInteger fileSizeInKB; diff --git a/en-US/dita/RTC-NG/API/class_mediasource.dita b/en-US/dita/RTC-NG/API/class_mediasource.dita index 85084d5b4d2..e3027072a2f 100644 --- a/en-US/dita/RTC-NG/API/class_mediasource.dita +++ b/en-US/dita/RTC-NG/API/class_mediasource.dita @@ -17,7 +17,25 @@ boolean enableMultiAudioTrack; IMediaPlayerCustomDataProvider provider; } - + export class MediaPlayerSource +{ + + public url:string = "" + + public uri:string = "" + + public startPos:number = 0 + + public autoPlay:boolean = true ; + + public enableCache:boolean = false ; + + public enableMultiAudioTrack:boolean = false ; + + public isAgoraSource?:Boolean + + public isLiveSource?:Boolean +} __attribute__((visibility("default"))) @interface AgoraMediaSource : NSObject @property(copy, nonatomic) NSString *_Nullable url; @property(copy, nonatomic) NSString *_Nullable uri; diff --git a/en-US/dita/RTC-NG/API/class_music.dita b/en-US/dita/RTC-NG/API/class_music.dita index 35cc497ddc6..6455a8bc5c4 100644 --- a/en-US/dita/RTC-NG/API/class_music.dita +++ b/en-US/dita/RTC-NG/API/class_music.dita @@ -86,7 +86,31 @@ return climaxSegments; } } - + export class Music +{ + + public songCode:bigint = BigInt(0) + + public name:string = "" + + public singer:string = "" + + public poster:string = "" + + public releaseTime:string = "" + + public type:number = 0 + + public pitchType:number = 0 + + public durationS:number = 0 + + public lyricTypes?:number[] + + public mvProperties?:MvProperty[] + + public climaxSegments?:ClimaxSegment[] +} __attribute__((visibility("default"))) @interface AgoraMusic : NSObject @property(nonatomic, assign) NSInteger songCode; @property(nonatomic, assign) NSInteger type; diff --git a/en-US/dita/RTC-NG/API/class_musiccacheinfo.dita b/en-US/dita/RTC-NG/API/class_musiccacheinfo.dita index eb71c715c3c..0dd394ae316 100644 --- a/en-US/dita/RTC-NG/API/class_musiccacheinfo.dita +++ b/en-US/dita/RTC-NG/API/class_musiccacheinfo.dita @@ -12,7 +12,13 @@ public MusicCacheInfo() {} } - + export class MusicCacheInfo +{ + + public songCode:bigint = BigInt(0) + + public status:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMusicCacheInfo : NSObject @property(nonatomic, assign) NSInteger songCode; diff --git a/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita b/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita index 03e016f62c6..fe9b6ba6056 100644 --- a/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita @@ -22,7 +22,21 @@ eventHandler = null; } } - + export class MusicContentCenterConfiguration +{ + + public appId:string = "" + + public token:string = "" + + public mccUid:number = 0 + + public maxCacheSize:number = 10 + + public eventHandler?:IMusicContentCenterEventHandler + + public mccDomain:string = "" +} __attribute__((visibility("default"))) @interface AgoraMusicContentCenterConfig : NSObject @property(assign, nonatomic) AgoraRtcEngineKit* _Nullable rtcEngine; @property (nonatomic, copy) NSString *appId; diff --git a/en-US/dita/RTC-NG/API/class_playerplaybackstats.dita b/en-US/dita/RTC-NG/API/class_playerplaybackstats.dita index f9177d14e17..bfae51a8133 100644 --- a/en-US/dita/RTC-NG/API/class_playerplaybackstats.dita +++ b/en-US/dita/RTC-NG/API/class_playerplaybackstats.dita @@ -12,7 +12,17 @@ private long audioBitrateInKbps; private long totalBitrateInKbps; } - + export class PlayerPlaybackStats +{ + + public videoFps:number = 0 + + public videoBitrateInKbps:number = 0 + + public audioBitrateInKbps:number = 0 + + public totalBitrateInKbps:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerPlaybackStats : NSObject @property(assign, nonatomic) NSInteger videoFps; @property(assign, nonatomic) NSInteger videoBitrateInKbps; diff --git a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita index 184c77b360f..022d3b4c653 100644 --- a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita @@ -23,7 +23,22 @@ public MediaStreamInfo() {} } - + export class MediaStreamInfo +{ + public streamIndex:number = 0 + public mediaStreamType:number = 0 + public codecName:string = "" + public language:string = "" + public videoFrameRate:number = 0 + public videoBitRate:number = 0 + public videoWidth:number = 0 + public videoHeight:number = 0 + public videoRotation:number = 0 + public audioSampleRate:number = 0 + public audioChannels:number = 0 + public audioBytesPerSample:number = 0 + public duration:bigint = BigInt(0) +} __attribute__((visibility("default"))) @interface AgoraMediaStreamInfo : NSObject @property(nonatomic, assign) NSInteger streamIndex; diff --git a/en-US/dita/RTC-NG/API/class_playerupdatedinfo.dita b/en-US/dita/RTC-NG/API/class_playerupdatedinfo.dita index 750c29358b4..8e03f7c9e31 100644 --- a/en-US/dita/RTC-NG/API/class_playerupdatedinfo.dita +++ b/en-US/dita/RTC-NG/API/class_playerupdatedinfo.dita @@ -14,7 +14,23 @@ private long audioChannels; private long audioBitsPerSample; } - + export class PlayerUpdatedInfo +{ + + public internalPlayerUuid:string = "" + + public deviceId:string = "" + + public videoHeight:number = 0 + + public videoWidth:number = 0 + + public audioSampleRate:number = 0 + + public audioChannels:number = 0 + + public audioBitsPerSample:number = 0 +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerUpdatedInfo : NSObject @property(copy, nonatomic) NSString *_Nullable deviceId; @property(assign, nonatomic) NSInteger videoHeight; diff --git a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita index ac8803463eb..41b82ce25cf 100644 --- a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita +++ b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita @@ -61,6 +61,8 @@ public qualityChangedReason:number = 0; public rxAudioBytes:number = 0; + + public e2eDelay:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcRemoteAudioStats : NSObject @property(assign, nonatomic) NSUInteger uid; diff --git a/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita b/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita index b880199928d..ec03f659e1e 100644 --- a/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita +++ b/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita @@ -29,6 +29,7 @@ public mContext:Context | null = null; public mAppId:string | null = null; public mEventHandler: IRtcEngineEventHandler | null = null; + public mLogConfig?:LogConfig; } __attribute__((visibility("default"))) @interface AgoraRtcEngineConfig: NSObject diff --git a/en-US/dita/RTC-NG/API/class_screenaudioparameters.dita b/en-US/dita/RTC-NG/API/class_screenaudioparameters.dita index 2a371569fdc..5f55e6bd322 100644 --- a/en-US/dita/RTC-NG/API/class_screenaudioparameters.dita +++ b/en-US/dita/RTC-NG/API/class_screenaudioparameters.dita @@ -30,6 +30,11 @@ + captureSignalVolume + ", allowCaptureCurrentApp=" + allowCaptureCurrentApp + '}'; } } + export class ScreenAudioParameters { + public sampleRate: number = 16000; + public channels: number = 2; + public captureSignalVolume : number = 100; +} __attribute__((visibility("default"))) @interface AgoraScreenAudioParameters : NSObject @property(assign, nonatomic) NSInteger captureSignalVolume; @end diff --git a/en-US/dita/RTC-NG/API/class_screencaptureparameters2.dita b/en-US/dita/RTC-NG/API/class_screencaptureparameters2.dita index 0cde1347382..36db9fe66da 100644 --- a/en-US/dita/RTC-NG/API/class_screencaptureparameters2.dita +++ b/en-US/dita/RTC-NG/API/class_screencaptureparameters2.dita @@ -92,6 +92,13 @@ + '}'; } } + + export class ScreenCaptureParameters { + public captureAudio: boolean = false; + public audioParams: ScreenAudioParameters = new ScreenAudioParameters(); + public captureVideo: boolean = true; + public videoParams: ScreenVideoParameters = new ScreenVideoParameters(); +} __attribute__((visibility("default"))) @interface AgoraScreenCaptureParameters2 : NSObject @property(assign, nonatomic) BOOL captureAudio; diff --git a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita index 8f948b2ddca..4fb1e634d9d 100644 --- a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita +++ b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita @@ -46,6 +46,11 @@ } } + export class ScreenVideoParameters { + public dimensions: VideoDimensions = new VideoDimensions(1280, 720); + public frameRate: number = 15; + public bitrate: number = 0; +} __attribute__((visibility("default"))) @interface AgoraScreenVideoParameters : NSObject @property(assign, nonatomic) CGSize dimensions; diff --git a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita index c0c3a8b1ce5..9b49842ef25 100644 --- a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita +++ b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita @@ -22,8 +22,10 @@ } } export class SegmentationProperty { + public static readonly SEG_MODEL_AI:number = 1; + public static readonly SEG_MODEL_GREEN:number = 2; - public modelType:Constants.SegModelType = Constants.SegModelType.AI; + public modelType:number = SegmentationProperty.SEG_MODEL_AI; public greenCapacity:number = 0.5; } diff --git a/en-US/dita/RTC-NG/API/class_srcinfo.dita b/en-US/dita/RTC-NG/API/class_srcinfo.dita index c4096fbead0..9909b303c50 100644 --- a/en-US/dita/RTC-NG/API/class_srcinfo.dita +++ b/en-US/dita/RTC-NG/API/class_srcinfo.dita @@ -12,7 +12,13 @@ public SrcInfo() {} } - + export class SrcInfo +{ + + public bitrateInKbps:number = 0 + + public name:string = "" +} __attribute__((visibility("default"))) @interface AgoraMediaPlayerSrcInfo : NSObject @property(assign, nonatomic) int bitrateInKbps; @property(copy, nonatomic) NSString *_Nullable name; diff --git a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita index 8bbfcfc680e..54a90f2c303 100644 --- a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita +++ b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita @@ -11,7 +11,7 @@ private AudioSpectrumInfo audioSpectrumInfo; } - + __attribute__((visibility("default"))) @interface AgoraAudioSpectrumInfo : NSObject @property(nonatomic, assign) NSInteger uid; diff --git a/en-US/dita/RTC-NG/API/class_videocanvas.dita b/en-US/dita/RTC-NG/API/class_videocanvas.dita index 5df29363315..8c383b79867 100644 --- a/en-US/dita/RTC-NG/API/class_videocanvas.dita +++ b/en-US/dita/RTC-NG/API/class_videocanvas.dita @@ -58,6 +58,7 @@ public uid:number = 0; public renderMode:number = VideoCanvas.RENDER_MODE_HIDDEN; public mirrorMode:number = 0; + public sourceType:Constants.VideoSourceType = Constants.VideoSourceType.CAMERA_PRIMARY; constructor(componentId:string) { this.xcomponentId = componentId; } diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index a478bc371d9..c6bd6e4ee91 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -263,16 +263,16 @@ public yBuffer: ArrayBuffer | null = null; public uBuffer: ArrayBuffer | null = null; public vBuffer: ArrayBuffer | null = null; + public rotation:number = 0; public timestamp:number = 0; - public stride:number = 0; + public yStride:number = 0; public uStride:number = 0; public vStride:number = 0; public width:number = 0; public height:number = 0; - public type:VideoBufferType = VideoBufferType.VIDEO_BUFFER_RAW_DATA; + public type:VideoBufferType = VideoBufferType.RAW_DATA; public format:VideoPixelFormat = VideoPixelFormat.VIDEO_PIXEL_NV21; - public faceInfo:Array<FaceDetectionInfo> | undefined = undefined; constructor(type:VideoBufferType,format:VideoPixelFormat) { this.type = type; this.format = format; diff --git a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita index 9e844214984..c9c29ac31a1 100644 --- a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita +++ b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita @@ -36,13 +36,29 @@ export class VirtualBackgroundSource { - public backgroundSourceType: Constants.VirtualBackgroundType = Constants.VirtualBackgroundType.COLOR; + public static readonly BACKGROUND_NONE:number = 0; + + public static readonly BACKGROUND_COLOR:number = 1; + + public static readonly BACKGROUND_IMG:number = 2; + + public static readonly BACKGROUND_BLUR:number = 3; + + public static readonly BACKGROUND_VIDEO:number = 4; + + public static readonly BLUR_DEGREE_LOW:number = 1; + + public static readonly BLUR_DEGREE_MEDIUM:number = 2; + + public static readonly BLUR_DEGREE_HIGH:number = 3; + + public backgroundSourceType:number = VirtualBackgroundSource.BACKGROUND_COLOR; public color:number = 0xffffff; - public source:string | null = null; + public source?:string; - public blurDegree:Constants.VirtualBackgroundBlurDegree = Constants.VirtualBackgroundBlurDegree.HIGH; + public blurDegree:number = VirtualBackgroundSource.BLUR_DEGREE_HIGH; } __attribute__((visibility("default"))) @interface AgoraVirtualBackgroundSource : NSObject @property(nonatomic, assign) AgoraVirtualBackgroundSourceType backgroundSourceType NS_SWIFT_NAME(backgroundSourceType); diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index 8795eee2fe2..a25fea00e75 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -23,6 +23,14 @@ + + + + API 列表 + API List + + + @@ -75,14 +83,14 @@ - + IAudioEffectManager - + IAudioFrameObserver @@ -117,7 +125,7 @@ - + IMediaPlayerVideoFrameObserver @@ -152,7 +160,7 @@ - + IMetadataObserver @@ -166,7 +174,7 @@ - + IVideoFrameObserver @@ -187,7 +195,7 @@ - + IBaseSpatialAudioEngine @@ -201,28 +209,28 @@ - + AudioParams - + IMusicContentCenterEventHandler - + IAgoraMusicPlayer - + IAgoraMusicContentCenter @@ -239,7 +247,7 @@ - + create @@ -289,7 +297,7 @@ - + @@ -389,7 +397,7 @@ - + @@ -428,11 +436,11 @@ - getPlaySrc [1/2] + getPlaySrc - + getPlaySrc @@ -474,7 +482,7 @@ - + getMediaPlayerCacheManager @@ -545,13 +553,6 @@ - - - open [1/2] - - - - open @@ -593,14 +594,14 @@ - + registerAudioFrameObserver - + registerVideoFrameObserver @@ -628,7 +629,7 @@ - + selectAudioTrack @@ -740,13 +741,6 @@ - - - - openWithCustomSource - - - @@ -882,7 +876,7 @@ - + adjustUserPlaybackSignalVolume @@ -989,7 +983,7 @@ - + setVideoScenario @@ -1017,7 +1011,6 @@ - @@ -1025,13 +1018,6 @@ - - - - setRemoteRenderMode [1/2] - - - @@ -1209,7 +1195,7 @@ - + adjustUserPlaybackSignalVolumeEx @@ -1223,7 +1209,7 @@ - + createDataStreamEx [1/2] @@ -1237,7 +1223,7 @@ - + enableAudioVolumeIndicationEx @@ -1287,14 +1273,14 @@ - + muteRemoteAudioStreamEx - + muteRemoteVideoStreamEx @@ -1329,7 +1315,7 @@ - + setRemoteRenderModeEx @@ -1343,7 +1329,7 @@ - + setRemoteVideoStreamTypeEx @@ -1406,14 +1392,14 @@ - + takeSnapshotEx - + updateChannelMediaOptionsEx @@ -1427,84 +1413,84 @@ - + startRtmpStreamWithoutTranscodingEx - + startRtmpStreamWithTranscodingEx - + updateRtmpTranscodingEx - + stopRtmpStreamEx - + startOrUpdateChannelMediaRelayEx - + pauseAllChannelMediaRelayEx - + muteLocalAudioStreamEx - + muteLocalVideoStreamEx - + muteAllRemoteAudioStreamsEx - + muteAllRemoteVideoStreamsEx - + stopChannelMediaRelayEx - + resumeAllChannelMediaRelayEx @@ -1527,7 +1513,7 @@ - + updateScreenCaptureParameters @@ -1564,14 +1550,14 @@ - + setAudioMixingPlaybackSpeed - + @@ -1621,14 +1607,14 @@ - + getAudioMixingPlayoutVolume - + getAudioMixingPublishVolume @@ -1672,7 +1658,7 @@ - + getAudioEffectManager @@ -2045,7 +2031,7 @@ - + startRtmpStreamWithoutTranscoding @@ -2278,14 +2264,14 @@ - + pauseAllChannelMediaRelay - + resumeAllChannelMediaRelay @@ -2359,7 +2345,7 @@ - + isCameraFaceDetectSupported @@ -2375,7 +2361,7 @@ - + setEnableSpeakerphone @@ -2443,8 +2429,8 @@ - - + + enableDualStreamMode @@ -2458,21 +2444,15 @@ - - - - setDualStreamMode [1/2] - - - - + + setDualStreamMode - + setDualStreamModeEx @@ -2569,15 +2549,15 @@ - + + + - pushExternalVideoFrameById [1/2] + pushExternalVideoFrameById - - - + @@ -2727,7 +2707,7 @@ - + @@ -2743,7 +2723,7 @@ - + @@ -2789,7 +2769,7 @@ - + @@ -2891,7 +2871,7 @@ - + @@ -2945,20 +2925,6 @@ - - - - setEncryptionMode - - - - - - - setEncryptionSecret - - - @@ -3058,7 +3024,7 @@ - + isCameraZoomSupported @@ -3079,7 +3045,7 @@ - + isCameraExposurePositionSupported @@ -3093,7 +3059,7 @@ - + isCameraAutoFocusFaceModeSupported @@ -3121,21 +3087,21 @@ - + setCameraExposurePosition - + setCameraTorchOn - + setCameraAutoFocusFaceModeEnabled @@ -3181,7 +3147,7 @@ - + @@ -3252,7 +3218,7 @@ - + @@ -3260,14 +3226,14 @@ - + open2 - + stop @@ -3415,7 +3381,7 @@ - + @@ -3460,7 +3426,7 @@ - + enableContentInspect @@ -3546,7 +3512,7 @@ - + getErrorDescription @@ -3560,7 +3526,7 @@ - + getSdkVersion @@ -3609,7 +3575,7 @@ - + setLogFile @@ -3623,7 +3589,7 @@ - + setLogFilter @@ -3717,7 +3683,7 @@ - + onUserMuteAudio @@ -3759,21 +3725,21 @@ - + onTokenPrivilegeWillExpire - + onRequestToken - + onLocalUserRegistered @@ -3838,14 +3804,14 @@ - + onFirstLocalVideoFrame - + onAudioPublishStateChanged @@ -3861,7 +3827,7 @@ - + onAudioSubscribeStateChanged @@ -3875,7 +3841,7 @@ - + onFirstRemoteVideoFrame @@ -3903,14 +3869,14 @@ - + onUserEnableVideo - + onUserMuteVideo @@ -3924,7 +3890,7 @@ - + onVideoSubscribeStateChanged @@ -4005,42 +3971,42 @@ - + onMetaData - + onPlayerCacheStats - + onPlayerEvent - + onPlayerPlaybackStats - + onPlayerStateChanged - + onPositionChanged @@ -4061,14 +4027,14 @@ - + onPlayBufferUpdated - + onPreloadEvent @@ -4082,14 +4048,14 @@ - + onPlayerSrcInfoChanged - + onPlayerInfoUpdated @@ -4122,13 +4088,6 @@ - - - - onAudioMixingFinished - - - @@ -4136,7 +4095,7 @@ - + onAudioEffectFinished @@ -4177,7 +4136,7 @@ - + onChannelMediaRelayStateChanged @@ -4260,7 +4219,7 @@ - + @@ -4397,7 +4356,7 @@ - + @@ -4420,11 +4379,11 @@ - + - onCameraFocusAreaChanged + onCameraFocusPointChanged @@ -4435,7 +4394,7 @@ - + onCameraReady @@ -4459,7 +4418,7 @@ - + @@ -4484,7 +4443,7 @@ - + @@ -4492,7 +4451,7 @@ - + onTranscodedStreamLayoutInfo @@ -4553,7 +4512,7 @@ - + AdvancedAudioOptions @@ -4770,7 +4729,7 @@ - + AgoraVideoFrame @@ -4784,7 +4743,7 @@ - + AgoraFocalLengthInfo @@ -5043,6 +5002,13 @@ + + + + ScreenCaptureParameters + + + @@ -5123,7 +5089,7 @@ - UserAudioSpectrumInfo + AudioSpectrumInfo @@ -5822,31 +5788,38 @@ + + + + ContentInspectType + + + - CONTENT_INSPECT_TYPE_INVALID + INVALID - CONTENT_INSPECT_TYPE_MODERATION + MODERATION - CONTENT_INSPECT_TYPE_SUPERVISE + SUPERVISE - CONTENT_INSPECT_TYPE_IMAGE_MODERATION + IMAGE_MODERATION @@ -6168,28 +6141,28 @@ - AUDIO_DUAL_MONO_STEREO + STEREO - AUDIO_DUAL_MONO_L + L - AUDIO_DUAL_MONO_R + R - AUDIO_DUAL_MONO_MIX + MIX @@ -6228,94 +6201,108 @@ + + + + AudioMixingReason + + + - AUDIO_MIXING_REASON_CAN_NOT_OPEN + CAN_NOT_OPEN - AUDIO_MIXING_REASON_TOO_FREQUENT_CALL + TOO_FREQUENT_CALL - AUDIO_MIXING_REASON_INTERRUPTED_EOF + INTERRUPTED_EOF - AUDIO_MIXING_REASON_OK + OK - AUDIO_MIXING_REASON_ONE_LOOP_COMPLETED + ONE_LOOP_COMPLETED - AUDIO_MIXING_REASON_ALL_LOOPS_COMPLETED + ALL_LOOPS_COMPLETED - AUDIO_MIXING_REASON_STOPPED_BY_USER + STOPPED_BY_USER + + + + + + + AudioMixingState - AUDIO_MIXING_STATE_PLAYING + PLAYING - AUDIO_MIXING_STATE_PAUSED + PAUSED - AUDIO_MIXING_STATE_STOPPED + STOPPED - AUDIO_MIXING_STATE_FAILED + FAILED - AUDIO_MIXING_STATE_COMPLETED + COMPLETED - AUDIO_MIXING_STATE_ALL_LOOPS_COMPLETED + ALL_LOOPS_COMPLETED @@ -6763,21 +6750,21 @@ - AUDIO_SAMPLE_RATE_32000 + TYPE_32000 - AUDIO_SAMPLE_RATE_44100 + TYPE_44100 - AUDIO_SAMPLE_RATE_48000 + TYPE_48000 @@ -6865,6 +6852,13 @@ + + + + ConnectionChangedReason + + + @@ -7159,220 +7153,234 @@ + + + + ChannelMediaRelayError + + + - RELAY_OK + OK - RELAY_ERROR_SERVER_ERROR_RESPONSE + SERVER_ERROR_RESPONSE - RELAY_ERROR_SERVER_NO_RESPONSE + SERVER_NO_RESPONSE - RELAY_ERROR_NO_RESOURCE_AVAILABLE + NO_RESOURCE_AVAILABLE - RELAY_ERROR_FAILED_JOIN_SRC + FAILED_JOIN_SRC - RELAY_ERROR_FAILED_JOIN_DEST + FAILED_JOIN_DEST - RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC + FAILED_PACKET_RECEIVED_FROM_SRC - RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST + FAILED_PACKET_SENT_TO_DEST - RELAY_ERROR_SERVER_CONNECTION_LOST + SERVER_CONNECTION_LOST - RELAY_ERROR_INTERNAL_ERROR + INTERNAL_ERROR - RELAY_ERROR_SRC_TOKEN_EXPIRED + SRC_TOKEN_EXPIRED - RELAY_ERROR_DEST_TOKEN_EXPIRED + DEST_TOKEN_EXPIRED + + + + + + + ChannelMediaRelayState - RELAY_EVENT_NETWORK_DISCONNECTED + NETWORK_DISCONNECTED - RELAY_EVENT_NETWORK_CONNECTED + NETWORK_CONNECTED - RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL + PACKET_JOINED_SRC_CHANNEL - RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL + PACKET_JOINED_DEST_CHANNEL - RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL + PACKET_SENT_TO_DEST_CHANNEL - RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC + PACKET_RECEIVED_VIDEO_FROM_SRC - RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC + PACKET_RECEIVED_AUDIO_FROM_SRC - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL + PACKET_UPDATE_DEST_CHANNEL - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE + PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE - RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL + PACKET_UPDATE_DEST_CHANNEL_IS_NULL - RELAY_EVENT_VIDEO_PROFILE_UPDATE + VIDEO_PROFILE_UPDATE - RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS + PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS - RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED + PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED - RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS + RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS - RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED + RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED - RELAY_STATE_IDLE + IDLE - RELAY_STATE_CONNECTING + CONNECTING - RELAY_STATE_RUNNING + RUNNING - RELAY_STATE_FAILURE + FAILURE @@ -7649,31 +7657,38 @@ + + + + EarMontoringFilterType + + + - EAR_MONITORING_FILTER_NONE + NONE - EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS + BUILT_IN_AUDIO_FILTERS - EAR_MONITORING_FILTER_NOISE_SUPPRESSION + NOISE_SUPPRESSION - EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER + REUSE_POST_PROCESSING_FILTER @@ -7831,6 +7846,13 @@ + + + + ERR_INIT_NET_ENGINE + + + @@ -8398,80 +8420,94 @@ + + + + LocalAudioStreamReason + + + - LOCAL_AUDIO_STREAM_REASON_OK + OK - LOCAL_AUDIO_STREAM_REASON_FAILURE + FAILURE - LOCAL_AUDIO_STREAM_REASON_DEVICE_NO_PERMISSION + DEVICE_NO_PERMISSION - LOCAL_AUDIO_STREAM_REASON_DEVICE_BUSY + DEVICE_BUSY - LOCAL_AUDIO_STREAM_REASON_CAPTURE_FAILURE + CAPTURE_FAILURE - LOCAL_AUDIO_STREAM_REASON_ENCODE_FAILURE + ENCODE_FAILURE - LOCAL_AUDIO_STREAM_REASON_INTERRUPTED + INTERRUPTED + + + + + + + LocalAudioStreamState - LOCAL_AUDIO_STREAM_STATE_STOPPED + STOPPED - LOCAL_AUDIO_STREAM_STATE_RECORDING + RECORDING - LOCAL_AUDIO_STREAM_STATE_ENCODING + ENCODING - LOCAL_AUDIO_STREAM_STATE_FAILED + FAILED @@ -8545,6 +8581,27 @@ + + + + SCREEN_CAPTURE_STOPPED_BY_USER + + + + + + + SCREEN_CAPTURE_INTERRUPTED_BY_OTHER + + + + + + + SCREEN_CAPTURE_STOPPED_BY_CALL + + + @@ -9066,70 +9123,70 @@ - PLAYER_STATE_UNKNOWN + UNKNOWN - PLAYER_STATE_IDLE + IDLE - PLAYER_STATE_OPENING + OPENING - PLAYER_STATE_OPEN_COMPLETED + OPEN_COMPLETED - PLAYER_STATE_PLAYING + PLAYING - PLAYER_STATE_PAUSED + PAUSED - PLAYER_STATE_PLAYBACK_COMPLETED + PLAYBACK_COMPLETED - PLAYER_STATE_PLAYBACK_ALL_LOOPS_COMPLETED + PLAYBACK_ALL_LOOPS_COMPLETED - PLAYER_STATE_STOPPED + STOPPED - PLAYER_STATE_FAILED + FAILED @@ -9325,56 +9382,56 @@ - MUSIC_CONTENT_CENTER_STATE_REASON_OK + OK - MUSIC_CONTENT_CENTER_STATE_REASON_ERROR + ERROR - MUSIC_CONTENT_CENTER_STATE_REASON_GATEWAY + GATEWAY - MUSIC_CONTENT_CENTER_STATE_REASON_PERMISSION_AND_RESOURCE + PERMISSION_AND_RESOURCE - MUSIC_CONTENT_CENTER_STATE_REASON_INTERNAL_DATA_PARSE + INTERNAL_DATA_PARSE - MUSIC_CONTENT_CENTER_STATE_REASON_MUSIC_LOADING + MUSIC_LOADING - MUSIC_CONTENT_CENTER_STATE_REASON_MUSIC_DECRYPTION + MUSIC_DECRYPTION - MUSIC_CONTENT_CENTER_STATE_REASON_HTTP_INTERNAL + HTTP_INTERNAL @@ -9462,6 +9519,13 @@ + + + + PermissionType + + + @@ -9749,38 +9813,45 @@ + + + + RemoteVideoStreamState + + + - REMOTE_VIDEO_STATE_STOPPED + STOPPED - REMOTE_VIDEO_STATE_STARTING + STARTING - REMOTE_VIDEO_STATE_DECODING + DECODING - REMOTE_VIDEO_STATE_FROZEN + FROZEN - REMOTE_VIDEO_STATE_FAILED + FAILED @@ -10429,31 +10500,38 @@ + + + + StreamSubscribeState + + + - SUB_STATE_IDLE + IDLE - SUB_STATE_NO_SUBSCRIBED + NO_SUBSCRIBED - SUB_STATE_SUBSCRIBING + SUBSCRIBING - SUB_STATE_SUBSCRIBED + SUBSCRIBED @@ -10478,13 +10556,6 @@ - - - - VIDEO_BUFFER_RAW_DATA - - - @@ -10506,6 +10577,34 @@ + + + + VideoBufferType + + + + + + + RAW_DATA + + + + + + + ARRAY + + + + + + + TEXTURE + + + @@ -11612,6 +11711,62 @@ + + + + VideoTranscoderError + + + + + + + OK + + + + + + + VIDEO_SOURCE_NOT_READY + + + + + + + INVALID_VIDEO_SOURCE_TYPE + + + + + + + INVALID_IMAGE_PATH + + + + + + + UNSUPPORT_IMAGE_FORMAT + + + + + + + INVALID_LAYOUT + + + + + + + INTERNAL + + + From 842b1e1fa36315ef1001d07024d125e87c8405e3 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:52:59 +0800 Subject: [PATCH 090/354] 1 --- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 1 - dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap | 7 ------- 2 files changed, 8 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 32d4d892ba4..8b3a7bf9a74 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -544,7 +544,6 @@ - diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index a25fea00e75..b35d2f69ced 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3233,13 +3233,6 @@ - - - - stop - - - From c212e509bd69de773d96f43a33a93d44c2e518e9 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Sun, 29 Sep 2024 09:54:02 +0000 Subject: [PATCH 091/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap | 7 ------- 1 file changed, 7 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index a25fea00e75..b35d2f69ced 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -3233,13 +3233,6 @@ - - - - stop - - - From da6cb79c553ca3f40713b0503954e6913dc47fde Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:18:42 +0800 Subject: [PATCH 092/354] 1 --- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 8b3a7bf9a74..5a51baf417e 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -31,7 +31,7 @@ - + From 83780ff2be064c717638171943542cc92050fcbd Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:46:30 +0800 Subject: [PATCH 093/354] sync with guide --- ...ine_registervideoencodedframeobserver.dita | 20 +++-------------- ...ediaengine_registervideoframeobserver.dita | 3 +-- ...ine_setremotevideosubscriptionoptions.dita | 22 ++++++------------- ..._ivideoframeobserver_getmirrorapplied.dita | 5 ++++- ...videoframeobserver_getrotationapplied.dita | 6 +++-- .../config/keys-rtc-ng-links-android.ditamap | 7 ++++++ .../config/keys-rtc-ng-links-cpp.ditamap | 7 ++++++ .../config/keys-rtc-ng-links-ios.ditamap | 7 ++++++ .../config/keys-rtc-ng-links-macos.ditamap | 7 ++++++ 9 files changed, 47 insertions(+), 37 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita b/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita index 8f4452dbdef..137bd15e64a 100644 --- a/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita @@ -30,24 +30,10 @@

        详情 -

        如果你只想要观测编码后的视频帧 (如 h.264 格式),而不需要对视频进行解码和渲染,声网推荐你通过该方法注册一个 类。

        -

        如果你想获取一部分远端用户的原始视频数据 (简称为 A 组)、获取另一部分远端用户的编码后视频数据 (简称为 B 组),可参考以下步骤: - -

          -
        1. 在加入频道前调用 注册原始视频帧观测器。
        2. -
        3. 在加入频道前调用 注册编码后的视频帧观测器。
        4. -
        5. 加入频道后通过 获取 B 组用户的 ID,然后调用 设置该组用户的 encodedFrameOnly
        6. -
        7. 调用 (),开始接收所有远端用户的视频流。此时: - -
            -
          • 可通过 中的回调获取 A 组用户的原始视频数据,SDK 默认对该数据进行渲染。
          • -
          • 可通过 中的回调获取 B 组用户的已编码视频数据。
          • -
        8. -

        +

        如果你只想要观测编码后的视频帧 (如 h.264 格式),而不需要对视频进行解码和渲染,声网推荐你通过该方法注册一个 类。有关详细的实现步骤,详见

        -
          -
        • 该方法需要在加入频道前调用。
        • -
        +

        该方法需要在加入频道前调用。

        +
        参数 diff --git a/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita b/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita index a0b66e478f1..42b455816c3 100644 --- a/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita @@ -26,11 +26,10 @@

        如果你想要观测原始视频帧 (如 YUV 或 RGBA 格式),声网推荐你通过该方法注册一个 类。

        调用该方法注册视频观测器时,你可以根据需要注册 类中的回调。在成功注册视频观测器后,SDK 会在捕捉到每个视频帧时,触发你所注册的上述回调。

        -

        适用场景 -

        注册原始视频观测器后,你可以将获取到的原始视频数据应用于各种视频前处理场景,例如自行实现虚拟背景、美颜等场景。

        +

        注册原始视频观测器后,你可以将获取到的原始视频数据应用于各种视频前处理场景,例如自行实现虚拟背景、美颜等场景。有关详细的实现步骤,详见

        声网在 GitHub 上提供了开源的示例项目 供你参考。

        diff --git a/dita/RTC-NG/API/api_irtcengine_setremotevideosubscriptionoptions.dita b/dita/RTC-NG/API/api_irtcengine_setremotevideosubscriptionoptions.dita index 02eb4b323e5..bafc3665171 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremotevideosubscriptionoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremotevideosubscriptionoptions.dita @@ -35,21 +35,13 @@
        详情 -

        当远端发送双流时,可调用此方法来设置远端视频流的订阅选项。

        -

        -

          -
        • 如果你只注册了 对象,则默认订阅原始视频数据和编码后的视频数据 (效果等同于 encodedFrameOnly 设置为 )。
        • -
        • 如果你只注册了 对象,则默认只订阅编码后的视频数据 (效果等同于 encodedFrameOnly 设置为 )。
        • -
        • 如果你先后注册了 对象,则默认订阅原始视频数据和编码后的视频数据 (效果等同于 encodedFrameOnly 设置为 )。
        • -
        • 如果你先调用该方法设置了 options 参数、然后再注册 对象,则需要再次调用该方法并按照以上两项描述设置 options 参数,以获得预期的效果。
        • -

        - 声网推荐你按照以下步骤调用该方法: - -
          -
        1. 调用 加入频道时设置 autoSubscribeVideo
        2. -
        3. 在收到 回调后调用该方法,设置对指定远端用户视频流的订阅选项。
        4. -
        5. 调用 方法,开始恢复订阅指定远端用户的视频流。如果你在上一步中将 encodedFrameOnly 设置为 ,SDK 会在本地触发 回调,上报接收到的编码后视频帧信息。
        6. -
        +

        当远端发送双流时,可调用此方法来设置远端视频流的订阅选项。SDK 对远端视频流的默认订阅行为取决于注册的视频观测器类型:

          +
        • 如果注册的是 观测器,则默认订阅原始数据和编码后的数据。
        • +
        • 如果注册的是 观测器,则默认仅订阅编码后的数据。
        • +
        • 如果注册了两种观测器,则默认跟随后注册的视频观测器。举例来说,如果后注册的是 观测器,则默认订阅原始数据和编码后的数据。
        • +
        + 如果你想修改以上默认行为,或者想针对不同 uid 设置不同的订阅选项,可调用该方法设置。有关详细的实现步骤,详见

        +
        参数 diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_getmirrorapplied.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_getmirrorapplied.dita index 39e22c4a128..8633fa1804c 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_getmirrorapplied.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_getmirrorapplied.dita @@ -27,7 +27,10 @@

        如果你希望获取的视频数据为原始视频的镜像,需要在调用 方法时注册该回调。成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置是否对原始视频数据作镜像处理。

          -
        • 该功能仅支持 RGBA 和 YUV420 格式的视频数据。
        • +
        • 在 Android 平台上,该回调支持的视频数据格式有:I420、RGBA 和 Texture。
        • +
        • 在 Windows 平台上,该回调支持的视频数据格式有:I420、RGBA 和 TextureBuffer。
        • +
        • 在 iOS 平台上,该回调支持的视频数据格式有:I420、RGBA 和 CVPixelBuffer。
        • +
        • 在 macOS 平台上,该回调支持的视频数据格式有:I420 和 RGBA。
        • 该方法和 方法均支持设置镜像效果,声网建议你仅选择一种方法进行设置,同时使用两种方法会导致镜像效果叠加从而造成设置镜像失败。
        diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_getrotationapplied.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_getrotationapplied.dita index a2577ee8a64..2c0e6483b57 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_getrotationapplied.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_getrotationapplied.dita @@ -28,8 +28,10 @@

        如果你在采集端已经根据 中的旋转信息 rotation 进行旋转,就无需调用该方法设置视频数据旋转。

          -
        • 该功能仅支持视频处理模式为 的场景。
        • -
        • 该功能仅支持 RGBA 和 YUV420 格式的视频数据。
        • +
        • 在 Android 平台上,该回调支持的视频数据格式有:I420、RGBA 和 Texture。
        • +
        • 在 Windows 平台上,该回调支持的视频数据格式有:I420、RGBA 和 TextureBuffer。
        • +
        • 在 iOS 平台上,该回调支持的视频数据格式有:I420、RGBA 和 CVPixelBuffer。
        • +
        • 在 macOS 平台上,该回调支持的视频数据格式有:I420 和 RGBA。
        diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 38c5a447f70..dbe30d1c1e0 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -101,6 +101,13 @@ + + + + 自定义视频数据处理 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap index 28aaff82664..bf8ea4c0ead 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap @@ -88,6 +88,13 @@ + + + + 自定义视频数据处理 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap index 909e190e4fe..c51a8e5398f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap @@ -102,6 +102,13 @@ + + + + 自定义视频数据处理 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap index 5ea909f6766..865016c494b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap @@ -74,6 +74,13 @@ + + + + 自定义视频数据处理 + + + From 6c999df11535b16c91f9bd7c23f481424d7aa0cc Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 10 Oct 2024 11:43:34 +0800 Subject: [PATCH 094/354] Update callback_irtcengineeventhandler_onstreammessage.dita --- .../API/callback_irtcengineeventhandler_onstreammessage.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita index 61d958be74a..2f5d314c52a 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita @@ -59,7 +59,7 @@ - uid + uid userId remoteUid 发送消息的用户 ID。 From 8a9231aabc62b51a52c1fcf522196abd1dcf9ea1 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 11 Oct 2024 10:35:18 +0800 Subject: [PATCH 095/354] Electron/RN: update proto --- ...rtcengineeventhandler_onstreammessage.dita | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita index 2f5d314c52a..148d0c68d9b 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita @@ -28,16 +28,23 @@ } UFUNCTION(BlueprintNativeEvent, Category = "Agora|Event") void OnStreamMessage(int64 uid, int streamId, const FString& data, int length, int64 sentTs); - onStreamMessage?(connection: RtcConnection, remoteUid: number, streamId: number, data: Uint8Array, length: number, sentTs: number): void; + onStreamMessage?( + connection: RtcConnection, + remoteUid: number, + streamId: number, + data: Uint8Array, + length: number, + sentTs: number + ): void; public virtual void OnStreamMessage(RtcConnection connection, uint remoteUid, int streamId, byte[] data, uint length, UInt64 sentTs) { } onStreamMessage?( - connection: RtcConnection, - remoteUid: number, - streamId: number, - data: Uint8Array, - length: number, - sentTs: number -): void; + connection: RtcConnection, + remoteUid: number, + streamId: number, + data: Uint8Array, + length: number, + sentTs: number + ): void; final void Function(RtcConnection connection, int remoteUid, int streamId, Uint8List data, int length, int sentTs)? onStreamMessage;

        From f493ad6da2dd8975321bd8d9c64c96cd26e42228 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 11 Oct 2024 10:43:14 +0800 Subject: [PATCH 096/354] Electron: remove BackgroundNone --- dita/RTC-NG/API/enum_backgroundsourcetype.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/enum_backgroundsourcetype.dita b/dita/RTC-NG/API/enum_backgroundsourcetype.dita index 6ae3992dfe4..221959f5d00 100644 --- a/dita/RTC-NG/API/enum_backgroundsourcetype.dita +++ b/dita/RTC-NG/API/enum_backgroundsourcetype.dita @@ -7,7 +7,7 @@
        枚举值 - + 0: 将背景处理为 Alpha 数据,不作替换,仅分割人像和背景。设置后,你可以调用 ,实现人像画中画的效果。 From 33305c5f07bd2ea40a1e468b44e2e5dfd739141c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 11 Oct 2024 10:43:49 +0800 Subject: [PATCH 097/354] RN: hide background none --- dita/RTC-NG/API/enum_backgroundsourcetype.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/enum_backgroundsourcetype.dita b/dita/RTC-NG/API/enum_backgroundsourcetype.dita index 221959f5d00..c83bd84fe61 100644 --- a/dita/RTC-NG/API/enum_backgroundsourcetype.dita +++ b/dita/RTC-NG/API/enum_backgroundsourcetype.dita @@ -7,7 +7,7 @@
        枚举值 - + 0: 将背景处理为 Alpha 数据,不作替换,仅分割人像和背景。设置后,你可以调用 ,实现人像画中画的效果。 From e392ee887e4ab990e2e48751ae71bba1832433d5 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 11 Oct 2024 12:02:53 +0800 Subject: [PATCH 098/354] bugfix --- dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita | 2 +- dita/RTC-NG/API/api_irtcengine_joinchannel.dita | 2 +- dita/RTC-NG/API/api_irtcengine_joinchannel2.dita | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita b/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita index a05f7eec380..a48fd1f92ee 100644 --- a/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita +++ b/dita/RTC-NG/API/api_imediaplayer_selectaudiotrack.dita @@ -27,7 +27,7 @@ int SelectAudioTrack(int index);
        详情 -

        获取音频文件的音轨索引后,你可以调用该方法指定任一音轨进行播放。例如,如果一个多音轨文件的不同音轨存放了不同语言的歌曲,则你可以调用该方法设置播放语言。

        +

        获取音频文件的音轨索引后,你可以调用该方法指定任一音轨进行播放。如果一个多音轨文件的不同音轨存放了不同语言的歌曲,你可以调用该方法设置播放语言。

        你需要在调用 获取音频流索引值后调用该方法。
        参数 diff --git a/dita/RTC-NG/API/api_irtcengine_joinchannel.dita b/dita/RTC-NG/API/api_irtcengine_joinchannel.dita index b0b6fb7cc18..ca7efbbc519 100644 --- a/dita/RTC-NG/API/api_irtcengine_joinchannel.dita +++ b/dita/RTC-NG/API/api_irtcengine_joinchannel.dita @@ -72,7 +72,7 @@ uid - 用户 ID。该参数用于标识在实时音视频互动频道中的用户。你需要自行设置和管理用户 ID,并确保同一频道内的每个用户 ID 是唯一的。该参数为 32 位有符号整数。取值范围为:-231-1 到 231-1。该参数为 32 位无符号整数。建议设置范围:1 到 232-1。如果不指定(即设为 0),SDK 会自动分配一个,并在 回调中返回, 应用层必须记住该返回值并维护,SDK 不对该返回值进行维护。 + 用户 ID。该参数用于标识在实时音视频互动频道中的用户。你需要自行设置和管理用户 ID,并确保同一频道内的每个用户 ID 是唯一的。该参数为 32 位有符号整数。取值范围为:-231 到 231-1。该参数为 32 位无符号整数。建议设置范围:1 到 232-1。如果不指定(即设为 0),SDK 会自动分配一个,并在 回调中返回, 应用层必须记住该返回值并维护,SDK 不对该返回值进行维护。 diff --git a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita index 86115c52519..a99d76f6b0b 100644 --- a/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita +++ b/dita/RTC-NG/API/api_irtcengine_joinchannel2.dita @@ -101,7 +101,7 @@ uid - 用户 ID。该参数用于标识在实时音视频互动频道中的用户。你需要自行设置和管理用户 ID,并确保同一频道内的每个用户 ID 是唯一的。该参数为 32 位有符号整数。取值范围为:-231-1 到 231-1。该参数为 32 位无符号整数。建议设置范围:1 到 232-1。如果不指定(即设为 0),SDK 会自动分配一个,并在 回调中返回, 应用层必须记住该返回值并维护,SDK 不对该返回值进行维护。 + 用户 ID。该参数用于标识在实时音视频互动频道中的用户。你需要自行设置和管理用户 ID,并确保同一频道内的每个用户 ID 是唯一的。该参数为 32 位有符号整数。取值范围为:-231 到 231-1。该参数为 32 位无符号整数。建议设置范围:1 到 232-1。如果不指定(即设为 0),SDK 会自动分配一个,并在 回调中返回, 应用层必须记住该返回值并维护,SDK 不对该返回值进行维护。 options From 25cf7edbd8f2a07abf2e1d0b82691460b3ac06de Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 11 Oct 2024 15:01:13 +0800 Subject: [PATCH 099/354] update props --- dita/RTC-NG/API/enum_backgroundsourcetype.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/enum_backgroundsourcetype.dita b/dita/RTC-NG/API/enum_backgroundsourcetype.dita index c83bd84fe61..79cf1aa1b74 100644 --- a/dita/RTC-NG/API/enum_backgroundsourcetype.dita +++ b/dita/RTC-NG/API/enum_backgroundsourcetype.dita @@ -7,7 +7,7 @@
        枚举值 - + 0: 将背景处理为 Alpha 数据,不作替换,仅分割人像和背景。设置后,你可以调用 ,实现人像画中画的效果。 From 42a95530b8be6a38a81ecb16b21cdfbf45cf041e Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 11 Oct 2024 15:02:37 +0800 Subject: [PATCH 100/354] Revert "update props" This reverts commit 25cf7edbd8f2a07abf2e1d0b82691460b3ac06de. --- dita/RTC-NG/API/enum_backgroundsourcetype.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/enum_backgroundsourcetype.dita b/dita/RTC-NG/API/enum_backgroundsourcetype.dita index 79cf1aa1b74..c83bd84fe61 100644 --- a/dita/RTC-NG/API/enum_backgroundsourcetype.dita +++ b/dita/RTC-NG/API/enum_backgroundsourcetype.dita @@ -7,7 +7,7 @@
        枚举值 - + 0: 将背景处理为 Alpha 数据,不作替换,仅分割人像和背景。设置后,你可以调用 ,实现人像画中画的效果。 From 554411972da29f5585f2ad7674502b9752470190 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:08:48 +0800 Subject: [PATCH 101/354] temp1 --- ...pi_irtcengine_enableloopbackrecording.dita | 6 +- ...irtcengine_setexternalmediaprojection.dita | 68 ++++++++++ ...pi_irtcengine_setlocalrendertargetfps.dita | 69 ++++++++++ ...i_irtcengine_setremoterendertargetfps.dita | 63 +++++++++ .../api_irtcengine_startlocalaudiomixer.dita | 63 +++++++++ .../api_irtcengine_stoplocalaudiomixer.dita | 67 ++++++++++ ...ne_updatelocalaudiomixerconfiguration.dita | 67 ++++++++++ .../class_localaudiomixerconfiguration.dita | 92 +++++++++++++ dita/RTC-NG/API/class_mixedaudiostream.dita | 91 +++++++++++++ .../API/enum_localvideostreamreason.dita | 2 +- dita/RTC-NG/API/toc_audiomixer.dita | 7 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 8 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 123 +++++++++++++++++- .../config/keys-rtc-ng-links-cpp.ditamap | 7 + 14 files changed, 728 insertions(+), 5 deletions(-) create mode 100644 dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita create mode 100644 dita/RTC-NG/API/class_localaudiomixerconfiguration.dita create mode 100644 dita/RTC-NG/API/class_mixedaudiostream.dita create mode 100644 dita/RTC-NG/API/toc_audiomixer.dita diff --git a/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita b/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita index 54aafafdbf8..69a2b1f1894 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita @@ -38,7 +38,7 @@
        • 该方法仅适用于 macOS 和 Windows 平台。
        • -
        • macOS 系统默认声卡不支持采集功能,如果你需要使用该功能,请启用一个虚拟声卡,并将 deviceName 设为该虚拟声卡的设备名。声网推荐你使用声网自研的虚拟声卡 AgoraALD 进行采集。
        • +
        • macOS 系统默认声卡不支持采集功能。自 v4.5.0 起,SDK 支持自动安装虚拟声卡功能,当你第一次调用该方法时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时支持使用虚拟声卡进行采集。
        • 该方法在加入频道前后都能调用。
        • 如果你调用了 关闭音频模块,声卡采集功能也会被关闭。如果你需要再次启用声卡采集功能,需要调用 启用音频模块后再次调用
        @@ -49,8 +49,8 @@ enabled 是否开启声卡采集:
          -
        • : 开启声卡采集。
        • -
        • :(默认)关闭声卡采集。
        • +
        • : 开启声卡采集;系统声音 > 输出界面显示虚拟声卡名称。
        • +
        • :(默认)关闭声卡采集;系统声音 > 输出界面不显示虚拟声卡名称。
        diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita new file mode 100644 index 00000000000..38abf1d91a8 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -0,0 +1,68 @@ + + + + <ph keyref="setExternalMediaProjection"/> + 通过 Android 系统原生的 MediaProjection 采集屏幕视频流。 + + + + + + + + +
        +

        + public abstract int setExternalMediaProjection(MediaProjection mediaProjection); + + + virtual int setExternalMediaProjection(void* mediaProjection) = 0; + + + + +

        +
        +
        +
        + +
        自从
        +
        v4.5.0
        +
        +
        + 该方法仅适用于 Android。 +

        成功调用该方法后,SDK 会通过 Android 系统原生的 MediaProjection 采集屏幕共享流。

        +

        当停止屏幕共享时,SDK 会立即释放 MediaProjection 进程。

        +
        +
        + 适用场景 +

        在一些特定场景中,你可以通过该方法将 SDK 采集屏幕视频流切换为 MediaProjection 采集屏幕视频流。例如:定制设备,可

        +

        有关详细的实现步骤,详见

        +
        +
        + 调用时机 +

        该方法需要在 之前调用。

        +
        +
        + 调用限制 +

        在调用该方法前,必须先申请 MediaProjection 权限。

        +
        +
        + 参数 + + + mediaProjection + +

        对象,用于采集屏幕视频流。

        +
        +
        +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita new file mode 100644 index 00000000000..ed558bc2882 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -0,0 +1,69 @@ + + + + <ph keyref="setLocalRenderTargetFps"/> + 设置本地视频渲染的最大帧率。 + + + + + + + + +
        +

        + (int)setLocalRenderTargetFps:(AgoraVideoSourceType)sourceType +targetFps:(int)targetFps; + + public abstract int setLocalRenderTargetFps(Constants.VideoSourceType sourceType, int targetFps); + virtual int setLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps) = 0; + + + + +

        +
        +
        +
        + +
        自从
        +
        v4.5.0
        +
        +
        +

        +

        +
        + 适用场景 +

        在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)下,你可以调用该方法设置本地视频渲染的最大帧率,SDK 进行本地渲染的实际帧率会尽量接近该值,从而减小 CPU 消耗、提升系统性能。

        +
        +
        + 调用时机 +

        该方法在加入频道前后均可调用。

        +
        +
        + 调用限制 +

        无。

        +
        +
        + 参数 + + + + + + + targetFps + 最大渲染帧率。支持的参数值为:1、7、10、15、24、30、60。 + 建议设置比视频实际帧率低的渲染帧率,否则设置不会生效。 + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita new file mode 100644 index 00000000000..d5ac018f279 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="setRemoteRenderTargetFps"/> + 设置视频在远端渲染的最大帧率。 + + + + + + + + +
        +

        + + + + + + + + +

        +
        +
        +
        + +
        自从
        +
        v4.5.0
        +
        +
        +

        +

        +
        + 适用场景 +

        在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以调用该方法设置视频在远端渲染的最大帧率,SDK 进行远端视频渲染的实际帧率会尽量接近该值,从而减小 CPU 消耗、提升系统性能。

        +
        +
        + 调用时机 +

        该方法在加入频道前后均可调用。

        +
        +
        + 调用限制 +

        无。

        +
        +
        + 参数 + + + + + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita new file mode 100644 index 00000000000..625bd30b7c0 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="startLocalAudioMixer"/> + 开启本地音频合流。 + + + + + + + + +
        +

        + public abstract int startLocalAudioMixer(LocalAudioMixerConfiguration config); + + - (int)startLocalAudioMixer:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(startLocalAudioMixer(_:)); + virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; + + + + +

        +
        +
        +
        + +
        自从
        +
        v4.5.0
        +
        +
        +

        该方法支持在本地将多路音频流合并为一路音频流。例如:本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流、通过网络获取的远端音频流等。

        +
        +
        + 适用场景 +

        +

        +
        + 调用时机 +

        +

        +
        + 调用限制 +

        +

        +
        + 参数 + + + config + 本地音频合流的配置。详见 + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita new file mode 100644 index 00000000000..8486e6b105d --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="stopLocalAudioMixer"/> + + + + + + + + + +
        +

        + + + + + + + + +

        +
        +
        +
        + +
        自从
        +
        v
        +
        +
        +

        +

        +
        + 适用场景 +

        +

        +
        + 调用时机 +

        +

        +
        + 调用限制 +

        +

        + +
        + 参数 + + + + + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita new file mode 100644 index 00000000000..8046a50fba8 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="updateLocalAudioMixerConfiguration"/> + + + + + + + + + +
        +

        + + + + + + + + +

        +
        +
        +
        + +
        自从
        +
        v
        +
        +
        +

        +

        +
        + 适用场景 +

        +

        +
        + 调用时机 +

        +

        +
        + 调用限制 +

        +

        + +
        + 参数 + + + + + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita new file mode 100644 index 00000000000..4d441d89d10 --- /dev/null +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -0,0 +1,92 @@ + + + + <ph keyref="LocalAudioMixerConfiguration"/> + 本地音频合流配置。 + +
        +

        + public class LocalAudioMixerConfiguration { + public ArrayList<MixedAudioStream> mixedAudioStreams; + public boolean syncWithLocalMic; + public LocalAudioMixerConfiguration() { + mixedAudioStreams = new ArrayList<MixedAudioStream>(); + syncWithLocalMic = true; + } + public static class MixedAudioStream { + public int remoteUserUid; + public String channelId; + public Constants.AudioSourceType sourceType; + public int trackId; + public MixedAudioStream() { + this.sourceType = Constants.AudioSourceType.AUDIO_SOURCE_UNKNOWN; + this.remoteUserUid = 0; + this.channelId = ""; + this.trackId = 0; + } + }; +} + + __attribute__((visibility("default"))) @interface AgoraLocalAudioMixerConfiguration: NSObject +@property(copy, nonatomic) NSArray<AgoraMixedAudioStream *> *_Nullable audioInputStreams; +@property(assign, nonatomic) BOOL syncWithLocalMic; +@end + struct LocalAudioMixerConfiguration { + unsigned int streamCount; + MixedAudioStream* sourceStreams; + bool syncWithLocalMic; + LocalAudioMixerConfiguration() : streamCount(0), syncWithLocalMic(true) {} +}; + + + + +

        +
        +
        +
        + +
        自从
        +
        v4.5.0
        +
        +
        +

        +

        +
        + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> + + + streamCount + 在本地进行合流的音频流数量。 + + + sourceStreams + 在本地进行合流的音频源。详见 + + + syncWithLocalMic + 合流后的音频流是否使用本地麦克风采集的音频帧时间戳: +
          +
        • :(默认)使用本地麦克风采集的音频帧时间戳。如果要所有本地采集的音频流保持同步,你可以将参数设置为该值。
        • +
        • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流的音频帧被构建时的时间戳。如果你需要将接收到的远端合流
        • +
        +
        +
        +
        + + + + + + +
        +
        + 方法 + + + + + +
        +
        +
        diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita new file mode 100644 index 00000000000..388d589aa65 --- /dev/null +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -0,0 +1,91 @@ + + + + <ph keyref="MixedAudioStream"/> + + +
        +

        + public static class MixedAudioStream { + public int remoteUserUid; + public String channelId; + public Constants.AudioSourceType sourceType; + public int trackId; + public MixedAudioStream() { + this.sourceType = Constants.AudioSourceType.AUDIO_SOURCE_UNKNOWN; + this.remoteUserUid = 0; + this.channelId = ""; + this.trackId = 0; + } + }; + + __attribute__((visibility("default"))) @interface AgoraMixedAudioStream: NSObject +@property (assign, nonatomic) AgoraAudioSourceType sourceType; +@property (assign, nonatomic) NSUInteger remoteUserUid; +@property (copy, nonatomic) NSString * _Nullable channelId; +@property (assign, nonatomic) NSUInteger trackId; +@end + struct MixedAudioStream { + AUDIO_SOURCE_TYPE sourceType; + uid_t remoteUserUid; + const char* channelName; + track_id_t trackId; + MixedAudioStream(AUDIO_SOURCE_TYPE source) + : sourceType(source), + remoteUserUid(0), + channelName(NULL), + trackId(-1) {} + MixedAudioStream(AUDIO_SOURCE_TYPE source, track_id_t track) + : sourceType(source), + trackId(track) {} + MixedAudioStream(AUDIO_SOURCE_TYPE source, uid_t uid, const char* channel) + : sourceType(source), + remoteUserUid(uid), + channelName(channel) {} + MixedAudioStream(AUDIO_SOURCE_TYPE source, uid_t uid, const char* channel, track_id_t track) + : sourceType(source), + remoteUserUid(uid), + channelName(channel), + trackId(track) {} +}; + + + + +

        +
        +
        +
        + +
        自从
        +
        v
        +
        +
        +

        +

        +
        + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> + + + + + +
        +
        + + + + + + +
        +
        + 方法 + + + + + +
        +
        +
        diff --git a/dita/RTC-NG/API/enum_localvideostreamreason.dita b/dita/RTC-NG/API/enum_localvideostreamreason.dita index a7cf6dd036d..dfc6893f915 100644 --- a/dita/RTC-NG/API/enum_localvideostreamreason.dita +++ b/dita/RTC-NG/API/enum_localvideostreamreason.dita @@ -53,7 +53,7 @@
        - 9:(仅适用于 macOS)当前正在使用的视频采集设备已经断开连接(例如,被拔出)。 + 9:(仅适用于 macOS 和 Winodws)当前正在使用的视频采集设备已经断开连接(例如,被拔出)。 9:预留。 diff --git a/dita/RTC-NG/API/toc_audiomixer.dita b/dita/RTC-NG/API/toc_audiomixer.dita new file mode 100644 index 00000000000..ee7a4fb2bc5 --- /dev/null +++ b/dita/RTC-NG/API/toc_audiomixer.dita @@ -0,0 +1,7 @@ + + + + 本地音频合流 + + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index e7f27c551b8..28c4e9fd42b 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -198,6 +198,11 @@ + + + + + @@ -286,6 +291,7 @@ + @@ -365,9 +371,11 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index bf4073b8d0e..0ad30a70918 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1166,6 +1166,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1685,6 +1699,13 @@ + + + + setExternalMediaProjection + + + @@ -2684,7 +2705,30 @@ - + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + + @@ -5477,6 +5521,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -6242,6 +6300,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap index 28aaff82664..4a0bf825004 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap @@ -105,5 +105,12 @@ + + + + MediaProjection + + + From bbe960c81b4cdcb39c354f7fcf0a1fadc6cbb8a3 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:12:09 +0800 Subject: [PATCH 102/354] 1 --- .../API/api_imediaengine_registervideoencodedframeobserver.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita b/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita index 137bd15e64a..ee15a38c8c5 100644 --- a/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita +++ b/dita/RTC-NG/API/api_imediaengine_registervideoencodedframeobserver.dita @@ -30,7 +30,7 @@
        详情 -

        如果你只想要观测编码后的视频帧 (如 h.264 格式),而不需要对视频进行解码和渲染,声网推荐你通过该方法注册一个 类。有关详细的实现步骤,详见

        +

        如果你只想要观测编码后的视频帧 (如 H.264 格式),而不需要对视频进行解码和渲染,声网推荐你通过该方法注册一个 类。有关详细的实现步骤,详见

        该方法需要在加入频道前调用。

        From d20cc627d73247861240a7d09f0a4eba08c8e740 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 11 Oct 2024 15:17:33 +0800 Subject: [PATCH 103/354] Update callback_irtcengineeventhandler_onstreammessage.dita --- .../API/callback_irtcengineeventhandler_onstreammessage.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita index 148d0c68d9b..c9e6f7002a0 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita @@ -36,7 +36,7 @@ length: number, sentTs: number ): void; - public virtual void OnStreamMessage(RtcConnection connection, uint remoteUid, int streamId, byte[] data, uint length, UInt64 sentTs) { } + public virtual void OnStreamMessage(RtcConnection connection, uint remoteUid, int streamId, byte[] data, ulong length, ulong sentTs) { } onStreamMessage?( connection: RtcConnection, remoteUid: number, From 4a34de81bfaf286939430e969b702e35f6d42a60 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Fri, 11 Oct 2024 07:20:59 +0000 Subject: [PATCH 104/354] Sync cn prototype to en prototype --- ...rtcengineeventhandler_onstreammessage.dita | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita index 68fde6731c5..85de1c1d30e 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onstreammessage.dita @@ -28,16 +28,23 @@ } UFUNCTION(BlueprintNativeEvent, Category = "Agora|Event") void OnStreamMessage(int64 uid, int streamId, const FString& data, int length, int64 sentTs); - onStreamMessage?(connection: RtcConnection, remoteUid: number, streamId: number, data: Uint8Array, length: number, sentTs: number): void; - public virtual void OnStreamMessage(RtcConnection connection, uint remoteUid, int streamId, byte[] data, uint length, UInt64 sentTs) { } + onStreamMessage?( + connection: RtcConnection, + remoteUid: number, + streamId: number, + data: Uint8Array, + length: number, + sentTs: number + ): void; + public virtual void OnStreamMessage(RtcConnection connection, uint remoteUid, int streamId, byte[] data, ulong length, ulong sentTs) { } onStreamMessage?( - connection: RtcConnection, - remoteUid: number, - streamId: number, - data: Uint8Array, - length: number, - sentTs: number -): void; + connection: RtcConnection, + remoteUid: number, + streamId: number, + data: Uint8Array, + length: number, + sentTs: number + ): void; final void Function(RtcConnection connection, int remoteUid, int streamId, Uint8List data, int length, int sentTs)? onStreamMessage;

        From bd9ab6d6d8c7ce94e8a872051b9f5f297327f89d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Sat, 12 Oct 2024 11:36:02 +0800 Subject: [PATCH 105/354] CSD-65366 --- .../API/api_irtcengine_takesnapshot2.dita | 67 ++++++++++++++++ .../API/api_irtcengineex_takesnapshotex2.dita | 58 ++++++++++++++ dita/RTC-NG/API/class_snapshotconfig.dita | 78 ++++++------------- dita/RTC-NG/API/rtc_api_data_type.dita | 4 + dita/RTC-NG/API/rtc_api_overview.dita | 8 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 2 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 2 + dita/RTC-NG/RTC_NG_API_iOS.ditamap | 2 + dita/RTC-NG/RTC_NG_API_macOS.ditamap | 2 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 25 +++++- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 21 +++++ .../config/keys-rtc-ng-api-java.ditamap | 25 +++++- .../config/keys-rtc-ng-api-macos.ditamap | 21 +++++ .../config/relations-rtc-ng-api.ditamap | 2 + 14 files changed, 259 insertions(+), 58 deletions(-) create mode 100644 dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita create mode 100644 dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita new file mode 100644 index 00000000000..d73884c57f8 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="takeSnapshot2" /> + 获取指定观测位置的视频截图。 + + + + + + + + +
        +

        + public abstract int takeSnapshot(int uid, SnapshotConfig config); + + - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); + virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; + + + + + +

        +
        +
        +

        该方法用于对指定用户的视频流进行截图,生成一张 JPG 格式的图片,并保存至指定的路径。

        +
        +
        + 调用时机 +

        该方法需要在加入频道后调用。

        +
        +
        + 调用限制 +
          +
        • 该方法是异步操作,调用返回时 SDK 并没有真正获取截图。
        • +
        • 调用该方法返回时 SDK 并没有真正获取截图。
        • +
        • 该方法用于本地视频截图时,是对 中指定发布的视频流进行截图。
        • +
        • 如果用户的视频经过前处理,例如,添加了水印或美颜,生成的截图会包含前处理效果。
        • +
        +
        + +
        + 参数 + + + + + + + config + 截图设置,详见 + +
        +
        + <ph keyref="return-section-title"/> +

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        +
          +
        • 0: 方法调用成功。
        • +
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • +
        +
        +
        diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita new file mode 100644 index 00000000000..ee7dec4acbe --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -0,0 +1,58 @@ + + + + <ph keyref="takeSnapshotEx2"/> + 使用连接 ID 获取指定观测位置的视频截图。 + + + + + + + + +
        +

        + public abstract int takeSnapshotEx(RtcConnection connection, int uid, SnapshotConfig config); + + - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); + virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; + + + + + +

        +
        +
        +
        + 调用时机 +

        该方法需要在 后调用。

        +
        +
        +
        适用场景 -

        +

        你可以在如下场景中开启该功能: +

          +
        • 在语聊房、游戏直播场景下添加背景音乐。
        • +
        • 为视频在线实时配音。
        • +
        • 在在线教育场景下播放本地音频课件。
        • +
        • 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
        • +

        调用时机 -

        +

          +
        • 如果你要对本地采集的音频流进行合流,需要在音频流被采集并且发布后调用该方法。
        • +
        • 如果你要对远端音频流进行合流,需要在音频流被发布及订阅后调用该方法。
        • +
        • 调用该方法后,你需要在调用 时,将 中的 publishMixedAudioTrack 设置为 ,则可将合流后的音频流发布到频道中。
        • +
        调用限制 -

        +

        无。

        参数 - - config - 本地音频合流的配置。详见 - + + config + 本地音频合流的配置。详见 +
        <ph keyref="return-section-title"/>

        方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

        • 0: 方法调用成功。
        • -
        • < 0: 方法调用失败。详见了解详情和解决建议。
        • -
        +
      • < 0: 方法调用失败。详见了解详情和解决建议。
          +
        • -7: 对象尚未初始化。你需要在调用该方法前成功初始化 对象。
        • +
      diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index 8486e6b105d..33b53b5a721 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -2,7 +2,7 @@ <ph keyref="stopLocalAudioMixer"/> - + 停止本地音频合流。 @@ -13,10 +13,10 @@

      - + public abstract int stopLocalAudioMixer(); - - + - (int)stopLocalAudioMixer NS_SWIFT_NAME(stopLocalAudioMixer()); + virtual int stopLocalAudioMixer() = 0; @@ -27,41 +27,28 @@

      自从
      -
      v
      +
      v4.5.0
      -

      -

      -
      - 适用场景 -

      +

      调用 后,如果你希望停止本地音频合流,请调用该方法。

      调用时机 -

      +

      该方法需要在 之后调用。

      调用限制 -

      -

      - -
      - 参数 - - - - - -
      <ph keyref="return-section-title"/>

      方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

      • 0: 方法调用成功。
      • -
      • < 0: 方法调用失败。详见了解详情和解决建议。
      • -
      +
    • < 0: 方法调用失败。详见了解详情和解决建议。 +
        +
      • -7: 对象尚未初始化。你需要在调用该方法前成功初始化 对象。
      • +
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalvideotranscoder.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalvideotranscoder.dita index 3520cec3e9c..f217a6cb237 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalvideotranscoder.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalvideotranscoder.dita @@ -28,7 +28,7 @@
    详情 -

    调用 后, 如果你希望停止本地合图,请调用该方法。

    +

    调用 后,如果你希望停止本地合图,请调用该方法。

    <ph keyref="return-section-title"/> diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 8046a50fba8..34b7dbac45d 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -2,7 +2,7 @@ <ph keyref="updateLocalAudioMixerConfiguration"/> - + 更新本地音频合流的配置。 @@ -13,10 +13,10 @@

    - + public abstract int updateLocalAudioMixerConfiguration(LocalAudioMixerConfiguration config); - - + - (int)updateLocalAudioMixerConfiguration:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(updateLocalAudioMixerConfiguration(_:)); + virtual int updateLocalAudioMixerConfiguration(const LocalAudioMixerConfiguration& config) = 0; @@ -27,41 +27,36 @@

    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    调用 后,如果你希望更新本地音频合流的配置,请调用该方法。

    调用时机 -

    +

    该方法需要在 之后调用。

    调用限制 -

    -

    -
    参数 - - - - + + + +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +
  • < 0: 方法调用失败。详见了解详情和解决建议。 +
      +
    • -7: 对象尚未初始化。你需要在调用该方法前成功初始化 对象。
    • +
  • +
    diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index f7220a95bd2..816d45d3fd8 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -21,6 +21,7 @@ public Boolean publishMediaPlayerAudioTrack; public Boolean publishMediaPlayerVideoTrack; public Boolean publishTranscodedVideoTrack; + public Boolean publishMixedAudioTrack; public Boolean autoSubscribeAudio; public Boolean autoSubscribeVideo; public Boolean enableAudioRecordingOrPlayout; @@ -122,6 +123,7 @@ @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @property(assign, nonatomic) BOOL publishMediaPlayerVideoTrack; @property(assign, nonatomic) BOOL publishTranscodedVideoTrack; +@property(assign, nonatomic) BOOL publishMixedAudioTrack; @property(assign, nonatomic) BOOL autoSubscribeAudio; @property(assign, nonatomic) BOOL autoSubscribeVideo; @property(assign, nonatomic) BOOL enableAudioRecordingOrPlayout; @@ -165,6 +167,7 @@ Optional<bool> publishMediaPlayerAudioTrack; Optional<bool> publishMediaPlayerVideoTrack; Optional<bool> publishTranscodedVideoTrack; + Optional<bool> publishMixedAudioTrack; Optional<bool> autoSubscribeAudio; Optional<bool> autoSubscribeVideo; Optional<bool> enableAudioRecordingOrPlayout; @@ -713,6 +716,7 @@ class ChannelMediaOptions { public Boolean publishMediaPlayerAudioTrack; public Boolean publishMediaPlayerVideoTrack; public Boolean publishTranscodedVideoTrack; + public Boolean publishMixedAudioTrack; public Boolean publishLipSyncTrack; public Boolean autoSubscribeAudio; public Boolean autoSubscribeVideo; @@ -815,6 +819,7 @@ class ChannelMediaOptions { @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @property(assign, nonatomic) BOOL publishMediaPlayerVideoTrack; @property(assign, nonatomic) BOOL publishTranscodedVideoTrack; + @property(assign, nonatomic) BOOL publishMixedAudioTrack; @property(assign, nonatomic) BOOL publishLipSyncTrack; @property(assign, nonatomic) BOOL autoSubscribeAudio; @property(assign, nonatomic) BOOL autoSubscribeVideo; @@ -859,6 +864,7 @@ class ChannelMediaOptions { Optional<bool> publishMediaPlayerAudioTrack; Optional<bool> publishMediaPlayerVideoTrack; Optional<bool> publishTranscodedVideoTrack; + Optional<bool> publishMixedAudioTrack; Optional<bool> publishLipSyncTrack; Optional<bool> autoSubscribeAudio; Optional<bool> autoSubscribeVideo; @@ -1567,7 +1573,7 @@ public: 自 v4.2.0 起,该参数名称由 publishTrancodedVideoTrack 更正为 publishTranscodedVideoTrack - + publishMixedAudioTrack 设置是否发布本地混音音频:
      diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 4d441d89d10..6e942c630bb 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -60,7 +60,9 @@ 在本地进行合流的音频流数量。 - sourceStreams + mixedAudioStreams + audioInputStreams + sourceStreams 在本地进行合流的音频源。详见 diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index 388d589aa65..2a4865b01b3 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -2,7 +2,7 @@ <ph keyref="MixedAudioStream"/> - + 在本地进行合流的音频源。

      @@ -58,7 +58,7 @@

      自从
      -
      v
      +
      v4.5.0

      @@ -67,25 +67,28 @@ <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - - + sourceType + 音频源的类型。详见 -

      -
      - - - - - - -
      -
      - 方法 - - - - - -
      + + remoteUserUid + +

      远端用户 ID。

      + 请仅在参与本地音频合流的音频源类型为 时,使用该参数。
      +
      + + channelId + +

      + 请仅在参与本地音频合流的音频源类型为 时,使用该参数。 + + + trackId + +

      音频轨道 ID。将该参数设置为调用 方法返回的自定义音频轨道 ID。

      + 请仅在参与本地本地音频合流的音频源类型为 时,使用该参数。 +
      +
      +
    diff --git a/dita/RTC-NG/API/enum_audiosourcetype.dita b/dita/RTC-NG/API/enum_audiosourcetype.dita new file mode 100644 index 00000000000..4ea3a50f5ce --- /dev/null +++ b/dita/RTC-NG/API/enum_audiosourcetype.dita @@ -0,0 +1,53 @@ + + + + <ph keyref="AUDIO_SOURCE_TYPE"/> + 音频源类型。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + 0:(默认)麦克风。 + + + + 1:自定义采集到的音频流。 + + + + 2:媒体播放器。 + + + + 3:在屏幕共享时采集的系统音频流。 + + + + + 4:已进行过合流的音频流。 + + + + 5:指定远端用户的音频流。 + + + + 6:当前频道内所有音频流的合流。 + + + + 100:未知的音频源。 + + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index d52c798d28e..38713faac0b 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -53,6 +53,7 @@
  • +
  • @@ -63,6 +64,7 @@
  • +
  • @@ -408,6 +410,7 @@
  • +
  • @@ -416,6 +419,7 @@
  • +
  • @@ -512,6 +516,7 @@
  • +
  • @@ -520,6 +525,7 @@
  • +
  • @@ -1149,11 +1155,12 @@
  • -
  • +
  • +
  • @@ -1387,11 +1394,12 @@
  • -
  • +
  • +
  • @@ -1519,9 +1527,10 @@
  • -
  • +
  • +
  • diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index d189da546bc..10844b6751d 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2425,6 +2425,7 @@ + @@ -2435,6 +2436,7 @@ + @@ -2456,6 +2458,7 @@ + @@ -2496,6 +2499,9 @@ + + + From 52588c88367f66160176f37d82a2458715ac2db8 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:06:34 +0800 Subject: [PATCH 107/354] sync --- dita/RTC-NG/API/rtc_api_overview.dita | 24 ++++ dita/RTC-NG/RTC_NG_API_iOS.ditamap | 7 ++ dita/RTC-NG/RTC_NG_API_macOS.ditamap | 7 ++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 114 ++++++++++++++++++ .../config/keys-rtc-ng-api-macos.ditamap | 114 ++++++++++++++++++ 5 files changed, 266 insertions(+) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 4774af050a7..cde4add44f6 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -548,6 +548,18 @@ + + + + + + + + + + + +
    @@ -911,6 +923,10 @@ (仅适用于 Android 和 iOS) + + + (仅适用于 Android) + (仅适用于 Android 和 iOS) @@ -1174,6 +1190,14 @@ + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 07de44de4a0..df8c48eba86 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -196,6 +196,11 @@ + + + + + @@ -361,9 +366,11 @@ + + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index 6177cb9c259..1300565d1dd 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -192,6 +192,11 @@ + + + + + @@ -354,9 +359,11 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 1bdc38893e8..212a37a8f25 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1068,6 +1068,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -3345,6 +3359,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4932,6 +4969,20 @@ + + + + AgoraMixedAudioStream + + + + + + + AgoraLocalAudioMixerConfiguration + + + @@ -5767,6 +5818,69 @@ + + + + AgoraAudioSourceType + + + + + + + AgoraAudioSourceMicrophone + + + + + + + AgoraAudioSourceCustom + + + + + + + AgoraAudioSourceMediaPlayer + + + + + + + AgoraAudioSourceLoopbackRecording + + + + + + + AgoraAudioSourceMixedStream + + + + + + + AgoraAudioSourceRemoteUser + + + + + + + AgoraAudioSourceRemoteChannel + + + + + + + AgoraAudioSourceTypeUnknown + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 1b4ef97a989..e8d46dcf048 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1025,6 +1025,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -3098,6 +3112,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4606,6 +4643,20 @@ + + + + AgoraMixedAudioStream + + + + + + + AgoraLocalAudioMixerConfiguration + + + @@ -5385,6 +5436,69 @@ + + + + AgoraAudioSourceType + + + + + + + AgoraAudioSourceMicrophone + + + + + + + AgoraAudioSourceCustom + + + + + + + AgoraAudioSourceMediaPlayer + + + + + + + AgoraAudioSourceLoopbackRecording + + + + + + + AgoraAudioSourceMixedStream + + + + + + + AgoraAudioSourceRemoteUser + + + + + + + AgoraAudioSourceRemoteChannel + + + + + + + AgoraAudioSourceTypeUnknown + + + From 88bf0008a0201cdb74a11df8a4e8693b4b91b419 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Sat, 12 Oct 2024 16:00:20 +0800 Subject: [PATCH 108/354] CSD-65010 --- .../API/class_mediarecorderconfiguration.dita | 117 +++++++++++++++++- dita/RTC-NG/API/class_recorderstreaminfo.dita | 31 +++-- dita/RTC-NG/API/enum_recorderstreamtype.dita | 20 +++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 21 ++++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 21 ++++ .../config/keys-rtc-ng-api-macos.ditamap | 21 ++++ 6 files changed, 220 insertions(+), 11 deletions(-) create mode 100644 dita/RTC-NG/API/enum_recorderstreamtype.dita diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 70a9a7b59f3..22b51fdafb7 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -12,6 +12,12 @@ public int streamType = STREAM_TYPE_BOTH; public int maxDurationMs = 120000; public int recorderInfoUpdateInterval = 0; + public int width; + public int height; + public int fps; + public int sample_rate; + public int channel_num; + public int videoSourceType; public MediaRecorderConfiguration(String storagePath, int containerFormat, int streamType, int maxDurationMs, int recorderInfoUpdateInterval) { @@ -20,6 +26,28 @@ this.streamType = streamType; this.maxDurationMs = maxDurationMs; this.recorderInfoUpdateInterval = recorderInfoUpdateInterval; + this.width = 1280; + this.height = 720; + this.fps = 30; + this.sample_rate = 48000; + this.channel_num = 1; + this.videoSourceType = 0; + } + + public MediaRecorderConfiguration(String storagePath, int containerFormat, int streamType, + int maxDurationMs, int recorderInfoUpdateInterval, int width, int height, int fps, + int sample_rate, int channel_num, int videoSourceType) { + this.storagePath = storagePath; + this.containerFormat = containerFormat; + this.streamType = streamType; + this.maxDurationMs = maxDurationMs; + this.recorderInfoUpdateInterval = recorderInfoUpdateInterval; + this.width = width; + this.height = height; + this.fps = fps; + this.sample_rate = sample_rate; + this.channel_num = channel_num; + this.videoSourceType = videoSourceType; } } export class MediaRecorderConfiguration { @@ -47,17 +75,52 @@ @property(assign, nonatomic) AgoraMediaRecorderContainerFormat containerFormat; @property(assign, nonatomic) AgoraMediaRecorderStreamType streamType; @property(assign, nonatomic) NSUInteger maxDurationMs; -@property(assign, nonatomic) NSUInteger recorderInfoUpdateInterval; +@property(assign, nonatomic) NSUInteger recorderInfoUpdateInterval; +@property(assign, nonatomic) NSUInteger width; +@property(assign, nonatomic) NSUInteger height; +@property(assign, nonatomic) NSUInteger fps; +@property(assign, nonatomic) NSUInteger sample_rate; +@property(assign, nonatomic) NSUInteger channel_num; +@property(assign, nonatomic) AgoraVideoSourceType videoSourceType; +@end struct MediaRecorderConfiguration { const char* storagePath; MediaRecorderContainerFormat containerFormat; MediaRecorderStreamType streamType; int maxDurationMs; int recorderInfoUpdateInterval; + int width; + int height; + int fps; + int sample_rate; + int channel_num; + agora::rtc::VIDEO_SOURCE_TYPE videoSourceType; - MediaRecorderConfiguration() : storagePath(NULL), containerFormat(FORMAT_MP4), streamType(STREAM_TYPE_BOTH), maxDurationMs(120000), recorderInfoUpdateInterval(0) {} - MediaRecorderConfiguration(const char* path, MediaRecorderContainerFormat format, MediaRecorderStreamType type, int duration, int interval) : storagePath(path), containerFormat(format), streamType(type), maxDurationMs(duration), recorderInfoUpdateInterval(interval) {} -}; + MediaRecorderConfiguration() + : storagePath(NULL), + containerFormat(FORMAT_MP4), + streamType(STREAM_TYPE_BOTH), + maxDurationMs(120000), + recorderInfoUpdateInterval(0), + width(1280), + height(720), + fps(30), + sample_rate(48000), + channel_num(1), + videoSourceType(rtc::VIDEO_SOURCE_CAMERA_PRIMARY) {} + MediaRecorderConfiguration(const char* path, MediaRecorderContainerFormat format, + MediaRecorderStreamType type, int duration, int interval) + : storagePath(path), + containerFormat(format), + streamType(type), + maxDurationMs(duration), + recorderInfoUpdateInterval(interval), + width(1280), + height(720), + fps(30), + sample_rate(48000), + channel_num(1), + videoSourceType(rtc::VIDEO_SOURCE_CAMERA_PRIMARY) {}}; USTRUCT(BlueprintType) struct FMediaRecorderConfiguration { @@ -176,6 +239,52 @@ struct FMediaRecorderConfiguration recorderInfoUpdateInterval 录制信息更新间隔,单位为毫秒,取值范围为 [1000,10000]。SDK 会根据该值的设置触发 回调,报告更新后的录制信息。 + + width + 录制视频的宽度 (px),宽 × 高的最大值不超过 3840 × 2160。 + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 + + + + height + 录制视频的高度 (px),宽 × 高的最大值不超过 3840 × 2160。 + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 + + + + fps + 录制视频的帧率,最高值不超过 30,如: 5、10、15、24、30 等。 + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 + + + + sample_rate + 录制音频的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 + + + + channel_num + 录制音频的声道数: +
      +
    • 1: 单声道
    • +
    • 2: 双声道
    • +
    + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 +
    +
    + + videoSourceType + 录制视频的源类型,详见 。 + 该参数仅在 时需要传入。 + 该参数仅在 recorderStreamType 为 0 时需要传入。 + +
    diff --git a/dita/RTC-NG/API/class_recorderstreaminfo.dita b/dita/RTC-NG/API/class_recorderstreaminfo.dita index f20cb5e199c..d98b71c4503 100644 --- a/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -7,8 +7,9 @@

    public class RecorderStreamInfo { - public String channelId; public int uid; + public String channelId; + public int recorderStreamType; } export class RecorderStreamInfo { @@ -24,15 +25,19 @@ } } __attribute__((visibility("default"))) @interface AgoraRecorderStreamInfo: NSObject - -@property (nonatomic, copy) NSString *_Nonnull channelId; @property (nonatomic, nonatomic) NSUInteger uid; - +@property (nonatomic, copy) NSString *_Nonnull channelId; +@property (assign, nonatomic) AgoraRecorderStreamType type; @end struct RecorderStreamInfo { - const char* channelId; - uid_t uid; - RecorderStreamInfo() : channelId(NULL), uid(0) {} + const char* channelId; + uid_t uid; + RecorderStreamType type; + RecorderStreamInfo() : channelId(NULL), uid(0), type(RTC) {} + RecorderStreamInfo(const char* channelId, uid_t uid) + : channelId(channelId), uid(uid), type(RTC) {} + RecorderStreamInfo(const char* channelId, uid_t uid, RecorderStreamType) + : channelId(channelId), uid(uid), type(RTC) {} }; USTRUCT(BlueprintType) struct FRecorderStreamInfo { @@ -94,6 +99,18 @@ class RecorderStreamInfo { uid 需录制的用户 ID。 + + type + 需录制的视频流类型,详见 + + + recorderStreamType + 需要录制的视频流类型,可传入以下值: +

      +
    • 0: 频道内的 RTC 视频流。
    • +
    • 1: 频道外本地预览的视频流。
    • +
    +
    diff --git a/dita/RTC-NG/API/enum_recorderstreamtype.dita b/dita/RTC-NG/API/enum_recorderstreamtype.dita new file mode 100644 index 00000000000..5480c72e0d0 --- /dev/null +++ b/dita/RTC-NG/API/enum_recorderstreamtype.dita @@ -0,0 +1,20 @@ + + + + <ph keyref="RecorderStreamType"/> + 需录制的视频流类型。 + +
    + 枚举值 + + + + 频道内的 RTC 视频流。 + + + + 频道外本地预览的视频流。 + +
    +
    +
    diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 79e220fd630..5c5f2a1318d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -11128,6 +11128,27 @@ + + + + RecorderStreamType + + + + + + + RTC + + + + + + + PREVIEW + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index d0933a3216e..40201b515b3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -10254,6 +10254,27 @@ + + + + AgoraRecorderStreamType + + + + + + + AgoraRecorderStreamTypeRtc + + + + + + + AgoraRecorderStreamTypePreview + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 74462cb87f0..90aacdb2f24 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -9727,6 +9727,27 @@ + + + + AgoraRecorderStreamType + + + + + + + AgoraRecorderStreamTypeRtc + + + + + + + AgoraRecorderStreamTypePreview + + + From 942d23522eca800bcf11e794c0ed00d10739816a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 9 Oct 2024 16:50:34 +0800 Subject: [PATCH 109/354] rte methods --- dita/RTC-NG/API/api_rte_getfrombridge.dita | 62 +++++++++++++++++ dita/RTC-NG/API/api_rte_rte.dita | 60 +++++++++++++++++ dita/RTC-NG/API/class_rte.dita | 6 ++ dita/RTC-NG/API/toc_rte_basic.dita | 7 ++ dita/RTC-NG/API/toc_rte_player.dita | 6 ++ dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 16 +++++ .../config/relations-rtc-ng-api.ditamap | 9 +++ dita/api_rte_initmediaengine.dita | 67 +++++++++++++++++++ dita/api_rte_registerobserver.dita | 63 +++++++++++++++++ 10 files changed, 300 insertions(+) create mode 100644 dita/RTC-NG/API/api_rte_getfrombridge.dita create mode 100644 dita/RTC-NG/API/api_rte_rte.dita create mode 100644 dita/RTC-NG/API/class_rte.dita create mode 100644 dita/RTC-NG/API/toc_rte_basic.dita create mode 100644 dita/RTC-NG/API/toc_rte_player.dita create mode 100644 dita/api_rte_initmediaengine.dita create mode 100644 dita/api_rte_registerobserver.dita diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita new file mode 100644 index 00000000000..623185ff7c4 --- /dev/null +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -0,0 +1,62 @@ + + + + <ph keyref="GetFromBridge"/> + 从 RTC 引擎中桥接出一个 RTE 对象。 + + + + + + + + +
    +

    + public static synchronized Rte getFromBridge() throws RteException; + + + (instancetype _Nonnull)getFromBridge:(AgoraRteError * _Nullable)error; + static Rte GetFromBridge(Error* err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    此方法适用于已经初始化了 RTC 引擎的场景,可以省去 RTE 引擎的初始化步骤。//TODO 如果没有初始化 rtc 引擎,是否需要调用 RTE + InitMediaEngine?

    +
    +
    + 调用时机 +

    调用该方法前,请确保已调用 初始化 RTC 引擎。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + <ph props="apple cpp">参数</ph> + + + err + error + //TODO 原型里面 refer 的是 Error,跟 RteErrorCode 有什么关系吗?指向 对象的指针,用于接收状态及错误码。 + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    +
      +
    • 方法调用成功,返回一个 RTE 对象。
    • +
    • 方法调用失败,返回空指针。你可以根据 errerror 参数中返回的错误码了解详情。
    • +
    • 方法调用失败,抛出 RteException 异常,你需要捕获异常并进行处理。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_rte_rte.dita b/dita/RTC-NG/API/api_rte_rte.dita new file mode 100644 index 00000000000..76317fbda0d --- /dev/null +++ b/dita/RTC-NG/API/api_rte_rte.dita @@ -0,0 +1,60 @@ + + + + <ph keyref="RTE"/> + 构造一个 RTE 对象。 + + + + + + + + +
    +

    + public Rte(InitialConfig initialConfig); + + - (instancetype _Nonnull)initWithInitialConfig:(AgoraRteInitialConfig * _Nullable)config; + explicit Rte(InitialConfig *config = nullptr); + ~Rte()=default; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    RTE 对象用于初始化 RTE 模块,主要用于配置和管理 RTE 的相关功能。

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + initialConfig + config + 初始化设置,详见 + +
    +
    + <ph keyref="return-section-title"/> +
      +
    • 方法调用成功,返回一个 RTE 对象。
    • +
    • 方法调用失败,返回
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/class_rte.dita b/dita/RTC-NG/API/class_rte.dita new file mode 100644 index 00000000000..d0a1f93ef4e --- /dev/null +++ b/dita/RTC-NG/API/class_rte.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="RTE"/> + RTE API 的基础接口类,提供了实现实时是音视频的主要方法。//TODO 需review + diff --git a/dita/RTC-NG/API/toc_rte_basic.dita b/dita/RTC-NG/API/toc_rte_basic.dita new file mode 100644 index 00000000000..7df349927c6 --- /dev/null +++ b/dita/RTC-NG/API/toc_rte_basic.dita @@ -0,0 +1,7 @@ + + + + RTE 初始化相关//TODO + + + diff --git a/dita/RTC-NG/API/toc_rte_player.dita b/dita/RTC-NG/API/toc_rte_player.dita new file mode 100644 index 00000000000..cf60e2198e3 --- /dev/null +++ b/dita/RTC-NG/API/toc_rte_player.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="toc_rte_player"/>URL 拉流播放//TODO + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index e7f27c551b8..d7d260198fb 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -449,6 +449,10 @@ + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index bf4073b8d0e..364c3f3ce7d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -951,6 +951,22 @@
    + + + + + GetFromBridge + + + + + + + Rte + + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index d189da546bc..46f480055bc 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3291,5 +3291,14 @@ + + + + + + + + + diff --git a/dita/api_rte_initmediaengine.dita b/dita/api_rte_initmediaengine.dita new file mode 100644 index 00000000000..984d53e8dd3 --- /dev/null +++ b/dita/api_rte_initmediaengine.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="InitMediaEngine"/> + 初始化 RTE 引擎。 + + + + + + + + +
    +

    + public void initMediaEngine(AsyncCallback callBack) throws RteException; + + - (BOOL)initMediaEngine:(void (^ _Nullable)(AgoraRteError* _Nullable err) )cb error:(AgoraRteError * _Nullable)error; + bool InitMediaEngine(std::function<void(rte::Error *err)> cb, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/api_rte_registerobserver.dita b/dita/api_rte_registerobserver.dita new file mode 100644 index 00000000000..8d11cbb5b76 --- /dev/null +++ b/dita/api_rte_registerobserver.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="RegisterObserver_Rte"/> + 注册 RTE 事件观测器对象。 + + + + + + + + +
    +

    + public void registerObserver(Observer observer) throws RteException; + + - (BOOL)registerObserver:(AgoraRteObserver * _Nonnull)observer error:(AgoraRteError * _Nullable)error; + bool RegisterObserver(Observer *observer, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO rte Observer 回调类文档不暴露的话,这个接口暴露有意义么?

    +
    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    From 5e03f6a636c38c159065fc1bf02393cd48dd2c23 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 10 Oct 2024 15:09:47 +0800 Subject: [PATCH 110/354] InitMediaEngine --- dita/RTC-NG/API/api_rte_getfrombridge.dita | 2 +- .../API}/api_rte_initmediaengine.dita | 49 +++++++++++-------- .../API}/api_rte_registerobserver.dita | 0 dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 9 +++- .../config/relations-rtc-ng-api.ditamap | 1 + 6 files changed, 39 insertions(+), 23 deletions(-) rename dita/{ => RTC-NG/API}/api_rte_initmediaengine.dita (51%) rename dita/{ => RTC-NG/API}/api_rte_registerobserver.dita (100%) diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index 623185ff7c4..adb5f6d5c72 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -56,7 +56,7 @@
    • 方法调用成功,返回一个 RTE 对象。
    • 方法调用失败,返回空指针。你可以根据 errerror 参数中返回的错误码了解详情。
    • -
    • 方法调用失败,抛出 RteException 异常,你需要捕获异常并进行处理。
    • +
    • 方法调用失败,抛出 异常,你需要捕获异常并进行处理。
    diff --git a/dita/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita similarity index 51% rename from dita/api_rte_initmediaengine.dita rename to dita/RTC-NG/API/api_rte_initmediaengine.dita index 984d53e8dd3..2b4c8862b18 100644 --- a/dita/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -27,41 +27,48 @@
    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    此方法为异步方法,通过回调函数返回初始化结果。

    +

    如果初始化过程中出现错误,SDK 会抛出 异常,你需要捕获异常并进行处理。

    调用时机 -

    +

    //TODO

    调用限制 -

    -

    -
    参数 - - - + + cb + 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数,并向回调中的 err 传参。这个参数包含了引擎初始化的结果,详见 。//TODO 没找到原型 + + + callback + 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数并根据情况返回下列状态或错误码://TODO 是否直接链接到 Error 这个类?还是要写出来每个枚举值。 +
    • (0): 初始化成功。
    • +
    • (1): 初始化引擎失败。//TODO 错误信息通过 message 得知。这个方法应该也要写文档?
    • +
    -
    -
    + + err + error + 初始化过程中的错误信息,详见 。在调用 方法初始化时,如果过程遇到立即可检测的错误(如参数无效、资源不足等),SDK 会通过此参数同步返回错误信息。 + + +
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    异步操作是否成功加入队列:

      +
    • :成功加入队列。
    • +
    • :未成功加入队列。
    • +
    + 该返回值仅表示初始化操作是否成功地被安排在异步任务队列中,不表示初始化是否成功。

    diff --git a/dita/api_rte_registerobserver.dita b/dita/RTC-NG/API/api_rte_registerobserver.dita similarity index 100% rename from dita/api_rte_registerobserver.dita rename to dita/RTC-NG/API/api_rte_registerobserver.dita diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index d7d260198fb..019802d0ad4 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -452,6 +452,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 364c3f3ce7d..e21f1275dc2 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -965,7 +965,14 @@ Rte - + + + + + InitMediaEngine + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 46f480055bc..1a5db82155f 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3295,6 +3295,7 @@ + From 29b7dbc76a90b3be71ff54497a7e332741c1a726 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 11 Oct 2024 11:53:15 +0800 Subject: [PATCH 111/354] PreloadWithUrl to be finished --- dita/RTC-NG/API/api_config_getappid.dita | 59 ++++++++++++++++ dita/RTC-NG/API/api_config_setappid.dita | 57 ++++++++++++++++ .../RTC-NG/API/api_player_preloadwithurl.dita | 67 ++++++++++++++++++ .../API/api_player_registerobserver.dita | 67 ++++++++++++++++++ dita/RTC-NG/API/api_rte_getconfigs.dita | 65 ++++++++++++++++++ dita/RTC-NG/API/api_rte_initmediaengine.dita | 2 +- dita/RTC-NG/API/api_rte_registerobserver.dita | 30 +++++--- dita/RTC-NG/API/api_rte_setconfigs.dita | 66 ++++++++++++++++++ .../API/api_rte_unregisterobserver.dita | 65 ++++++++++++++++++ dita/RTC-NG/API/class_config.dita | 68 +++++++++++++++++++ dita/RTC-NG/API/class_player.dita | 6 ++ dita/RTC-NG/API/rtc_api_data_type.dita | 6 ++ dita/RTC-NG/RTC_NG_API_CPP.ditamap | 6 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 42 ++++++++++++ .../config/relations-rtc-ng-api.ditamap | 5 ++ 15 files changed, 599 insertions(+), 12 deletions(-) create mode 100644 dita/RTC-NG/API/api_config_getappid.dita create mode 100644 dita/RTC-NG/API/api_config_setappid.dita create mode 100644 dita/RTC-NG/API/api_player_preloadwithurl.dita create mode 100644 dita/RTC-NG/API/api_player_registerobserver.dita create mode 100644 dita/RTC-NG/API/api_rte_getconfigs.dita create mode 100644 dita/RTC-NG/API/api_rte_setconfigs.dita create mode 100644 dita/RTC-NG/API/api_rte_unregisterobserver.dita create mode 100644 dita/RTC-NG/API/class_config.dita create mode 100644 dita/RTC-NG/API/class_player.dita diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita new file mode 100644 index 00000000000..67a3f179ee9 --- /dev/null +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -0,0 +1,59 @@ + + + + <ph keyref="GetAppId"/> + 获取设置的 App ID。 + + + + + + + + +
    +

    + public String getAppId() throws RteException; + + - (NSString* _Nullable)appId:( AgoraRteError * _Nullable)error; + const char* GetAppId(Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 方法调用成功,返回设置的 App ID。
    • +
    • 方法调用失败,返回空字符串。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita new file mode 100644 index 00000000000..2e7edcb8e7a --- /dev/null +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="SetAppId"/> + 设置 App ID。 + + + + + + + + +
    +

    + public void setAppId(String appId) throws RteException; + + - (void)setAppId:(NSString * _Nullable)appId error:(AgoraRteError * _Nullable)error; + void SetAppId(const char *app_id, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    //TODO 该方法需要在 后调用。

    +

    +

    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + appId + 你的项目的 App ID,在声网控制台获取。一个 App ID 只能用于创建一个 RtcEngine。如需更换 App ID,必须先调用 destroy 销毁当前 RtcEngine 再重新创建。//TODO rtc 有这个限制,rte 是否有同样的限制? + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_preloadwithurl.dita b/dita/RTC-NG/API/api_player_preloadwithurl.dita new file mode 100644 index 00000000000..0a3e2989933 --- /dev/null +++ b/dita/RTC-NG/API/api_player_preloadwithurl.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="PreloadWithUrl"/> + 预加载 URL 资源。 + + + + + + + + +
    +

    + public void preloadWithUrl(String url) throws RteException; + + - (BOOL)preloadWithUrl:(NSString * _Nonnull)url error:(AgoraRteError * _Nullable)error; + bool PreloadWithUrl(const char* url, Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    成功预加载后,可以加快通过 打开 URL 资源的速度。当需要使用这些资源时,可以更加快速地访问,缩短等待加载的过程。//TODO 是缩短加载时间,还是可以立即访问,无需等待?

    +
    +
    + 适用场景 +

    在播放视频或音频之前,提前加载可以减少用户等待时间,提供更流畅的视听体验。

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    该方法目前仅对带 rte:// 前缀的 URL 生效,最多可以预加载 20 个 URL。如果超出限制,新预加载的 URL 将会替换最早的 URL。

    +
    +
    + 参数 + + + url + rte:// 前缀的 URL。

    各字段的详细说明详见

    +
    + + err + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita new file mode 100644 index 00000000000..21fdb5d8761 --- /dev/null +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="RegisterObserver_Player"/> + 注册 RTE 播放器事件对象。 + + + + + + + + +
    +

    + public void registerObserver(PlayerObserver observer) throws RteException; + + - (BOOL)registerObserver:(AgoraRtePlayerObserver *_Nonnull)observer error:(AgoraRteError * _Nullable)error; + bool RegisterObserver(PlayerObserver *observer, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_rte_getconfigs.dita b/dita/RTC-NG/API/api_rte_getconfigs.dita new file mode 100644 index 00000000000..1d97321bd2a --- /dev/null +++ b/dita/RTC-NG/API/api_rte_getconfigs.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="GetConfigs_Rte"/> + 获取 RTE 对象的配置信息。 + + + + + + + + +
    +

    + public void getConfigs(Config config) throws RteException; + + - (BOOL)getConfigs:(AgoraRteConfig *_Nonnull)config error:(AgoraRteError * _Nullable)error; + bool GetConfigs(Config *config, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO 如果没有调用 setconfig,用的是默认配置吗?

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    获取配置是否成功:

      +
    • :获取成功。
    • +
    • :获取失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index 2b4c8862b18..0e1c80aab2b 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -31,7 +31,7 @@

    此方法为异步方法,通过回调函数返回初始化结果。

    -

    如果初始化过程中出现错误,SDK 会抛出 异常,你需要捕获异常并进行处理。

    +

    如果初始化过程中出现错误,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    调用时机 diff --git a/dita/RTC-NG/API/api_rte_registerobserver.dita b/dita/RTC-NG/API/api_rte_registerobserver.dita index 8d11cbb5b76..55ab6ed7eb3 100644 --- a/dita/RTC-NG/API/api_rte_registerobserver.dita +++ b/dita/RTC-NG/API/api_rte_registerobserver.dita @@ -30,15 +30,17 @@
    v4.5.0
    -

    //TODO rte Observer 回调类文档不暴露的话,这个接口暴露有意义么?

    +

    //TODO rte Observer 回调类文档不暴露的话,只暴露这个接口是否有意义?

    +

    成功注册观测器对象后,你可以接收 类下的回调事件。

    +

    如果注册失败,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    调用时机 -

    +

    请在初始化 RTE 引擎后再调用该方法。//TODO

    调用限制 -

    +

    无。

    适用场景 @@ -47,21 +48,22 @@
    参数 - + url rte:// 前缀的 URL。

    各字段的详细说明详见

    - - err + +
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    预加载是否成功:

      +
    • :预加载成功。
    • +
    • :预加载失败。
    • +
    +

    diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index 0e1c80aab2b..8d67a47ec70 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -46,7 +46,7 @@ cb - 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数,并向回调中的 err 传参。这个参数包含了引擎初始化的结果,详见 。//TODO 没找到原型 + 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数,并向回调中的 err 传参。这个参数包含了引擎初始化的结果或错误码信息,详见 。//TODO 没找到原型 callback diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index c85e5bb7a17..23d7f160dce 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -450,6 +450,8 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 3a7cbbfefae..fda3868d889 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1015,6 +1015,20 @@ + + + + PreloadWithUrl + + + + + + + OpenWithUrl + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index de1480f1fc1..ecab3eb71c5 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3300,11 +3300,22 @@ - + + + + + + + + + + + + From 58f055b71440ef23b744bfe10f4e303daf9bd4f8 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 11 Oct 2024 15:28:28 +0800 Subject: [PATCH 113/354] 1 --- dita/RTC-NG/API/api_player_getstats.dita | 67 +++++++++++++++++++++ dita/RTC-NG/API/api_player_openwithurl.dita | 4 ++ 2 files changed, 71 insertions(+) create mode 100644 dita/RTC-NG/API/api_player_getstats.dita diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita new file mode 100644 index 00000000000..3dabf43310b --- /dev/null +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="GetStats"/> + + + + + + + + + +
    +

    + public void getStats(PlayerGetStatsCallback callback); + + - (void)getStats:(void (^_Nonnull)(AgoraRtePlayerStats* _Nonnull stats, AgoraRteError* _Nullable err))cb ; + void GetStats(std::function<void(rte::PlayerStats *stats, rte::Error *err)> cb) + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_openwithurl.dita b/dita/RTC-NG/API/api_player_openwithurl.dita index 90f359ebaa1..271d128978b 100644 --- a/dita/RTC-NG/API/api_player_openwithurl.dita +++ b/dita/RTC-NG/API/api_player_openwithurl.dita @@ -45,6 +45,10 @@ 调用限制

    该方法目前仅支持打开以 rte:// 开头的 URL。

    +
    参数 From 3fd3a276aeb6eec170b4a6d0f4de68d4cc69e2f0 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 11 Oct 2024 19:21:40 +0800 Subject: [PATCH 114/354] add methods --- dita/RTC-NG/API/api_canvas_addview.dita | 67 ++++++++++++++++ dita/RTC-NG/API/api_canvas_getconfigs.dita | 57 +++++++++++++ dita/RTC-NG/API/api_canvas_setconfigs.dita | 57 +++++++++++++ dita/RTC-NG/API/api_player_getstats.dita | 35 +++----- dita/RTC-NG/API/api_player_setcanvas.dita | 69 ++++++++++++++++ dita/RTC-NG/API/class_canvas.dita | 6 ++ dita/RTC-NG/API/class_rteplayerstats.dita | 79 +++++++++++++++++++ dita/RTC-NG/API/rtc_api_data_type.dita | 1 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 28 +++++++ .../config/relations-rtc-ng-api.ditamap | 13 ++- 11 files changed, 391 insertions(+), 25 deletions(-) create mode 100644 dita/RTC-NG/API/api_canvas_addview.dita create mode 100644 dita/RTC-NG/API/api_canvas_getconfigs.dita create mode 100644 dita/RTC-NG/API/api_canvas_setconfigs.dita create mode 100644 dita/RTC-NG/API/api_player_setcanvas.dita create mode 100644 dita/RTC-NG/API/class_canvas.dita create mode 100644 dita/RTC-NG/API/class_rteplayerstats.dita diff --git a/dita/RTC-NG/API/api_canvas_addview.dita b/dita/RTC-NG/API/api_canvas_addview.dita new file mode 100644 index 00000000000..c52c8110744 --- /dev/null +++ b/dita/RTC-NG/API/api_canvas_addview.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="AddView"/> + + + + + + + + + +
    +

    + + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_canvas_getconfigs.dita b/dita/RTC-NG/API/api_canvas_getconfigs.dita new file mode 100644 index 00000000000..7c866e1c86e --- /dev/null +++ b/dita/RTC-NG/API/api_canvas_getconfigs.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="GetConfigs_Canvas"/> + 获取当前的播放器视频渲染配置。 + + + + + + + + +
    +

    + public void getConfigs(CanvasConfig config) throws RteException; + + - (BOOL)getConfigs:(AgoraRteCanvasConfig* _Nonnull)config error:(AgoraRteError* _Nullable)error; + bool GetConfigs(CanvasConfig *config, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 调用时机 +

    //TODO 如果没有设置,调用这个方法会返回什么?默认设置?

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + +
    +
    + + diff --git a/dita/RTC-NG/API/api_canvas_setconfigs.dita b/dita/RTC-NG/API/api_canvas_setconfigs.dita new file mode 100644 index 00000000000..5c5cd6d5e17 --- /dev/null +++ b/dita/RTC-NG/API/api_canvas_setconfigs.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="SetConfigs_Canvas"/> + 设置播放器视频渲染配置。 + + + + + + + + +
    +

    + public void setConfigs(CanvasConfig config) throws RteException; + + - (BOOL)setConfigs:(AgoraRteCanvasConfig* _Nonnull)config error:(AgoraRteError* _Nullable)error; + bool SetConfigs(CanvasConfig *config, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    当你调用 指定一个 Canvas 对象来显示视频后,你可以调用该方法来设置渲染配置。//TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + config + Canvas 对象的设置,详见 + + + + + +
    +
    + + diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index 3dabf43310b..eece3ea304f 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -2,7 +2,7 @@ <ph keyref="GetStats"/> - + 获取播放器所播放的媒体资源的统计信息。 @@ -27,41 +27,30 @@
    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    该方法用于获取播放器的统计信息,包括解码、渲染帧率、音视频码率等,并通过回调函数异步返回结果。

    调用时机 -

    +

    //TODO

    调用限制 -

    -

    -
    参数 - - - + + cb + 一个异步回调函数,用于通知获取播放器媒体资源统计信息的结果和错误信息。你可以通过该回调的 stats 参数得知统计数据,详见 。如果获取信息失败,你可以通过该回调的 err 参数获取错误信息,详见 + + + callback + 回调接口,用于异步接收统计信息和可能的错误信息,详见 。//TODO 这个是否要写文档?
    -
    - <ph keyref="return-section-title"/> -

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    diff --git a/dita/RTC-NG/API/api_player_setcanvas.dita b/dita/RTC-NG/API/api_player_setcanvas.dita new file mode 100644 index 00000000000..9baadc22f77 --- /dev/null +++ b/dita/RTC-NG/API/api_player_setcanvas.dita @@ -0,0 +1,69 @@ + + + + <ph keyref="SetCanvas"/> + 设置 Canvas 以显示视频。 + + + + + + + + +
    +

    + public void setCanvas(Canvas canvas) throws RteException; + + - (BOOL)setCanvas:(AgoraRteCanvas *_Nonnull)canvas error:(AgoraRteError * _Nullable)error; + bool SetCanvas(Canvas *canvas, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    该方法用于指定一个 Canvas 对象来显示视频。当视频流成功加载后,视频画面会显示在这个指定的 Canvas 上。

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    + +
    + 参数 + + + canvas + 用于渲染视频帧的 Canvas 对象,详见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    设置是否成功:

      +
    • :设置成功。
    • +
    • :设置失败,可通过 errerror 参数返回的错误码了解详细信息。
    • +

    +
    +
    +
    diff --git a/dita/RTC-NG/API/class_canvas.dita b/dita/RTC-NG/API/class_canvas.dita new file mode 100644 index 00000000000..bc8740d8556 --- /dev/null +++ b/dita/RTC-NG/API/class_canvas.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="Canvas"/> + 该类提供设置播放器视频渲染的方法。 + diff --git a/dita/RTC-NG/API/class_rteplayerstats.dita b/dita/RTC-NG/API/class_rteplayerstats.dita new file mode 100644 index 00000000000..ef6560fd093 --- /dev/null +++ b/dita/RTC-NG/API/class_rteplayerstats.dita @@ -0,0 +1,79 @@ + + + + <ph keyref="RtePlayerStats"/> + 所播放的媒体资源的统计信息。 + +
    +

    + public class PlayerStats { + public int videoDecodeFrameRate() + public int videoRenderFrameRate() + public int videoBitrate() + public int audioBitrate() +} + + __attribute__((visibility("default"))) @interface AgoraRtePlayerStats : NSObject + +- (instancetype _Nonnull)init; +- (int)videoDecodeFrameRate; +- (int)videoRenderFrameRate; +- (int)videoBitrate; +- (int)audioBitrate; + +@end + typedef struct RtePlayerStats { + int video_decode_frame_rate; + int video_render_frame_rate; + int video_bitrate; + int audio_bitrate; +} RtePlayerStats; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> + + + videoDecodeFrameRate + video_decode_frame_rate + 视频解码帧率(fps)。 + + + videoRenderFrameRate + video_render_frame_rate + 视频渲染帧率(fps)。 + + + videoBitrate + video_bitrate + 视频码率(Kbps)。//TODO 待确认 + + + audioBitrate + audio_bitrate + 音频码率(Kbps)。//TODO 待确认 + +
    +
    + 方法 + + + //TODO oc 的init 是否需要写文档 + + +
    +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 1004e5e9b84..e4a4c968ae9 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -102,6 +102,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 23d7f160dce..ae3cc05df62 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -454,10 +454,14 @@ + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index fda3868d889..b492402bcf0 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -994,6 +994,13 @@ + + + + SetCanvas + + + @@ -1001,6 +1008,13 @@ + + + + GetStats + + + @@ -1008,6 +1022,13 @@ + + + + SetConfigs [2/2] + + + @@ -1015,6 +1036,13 @@ + + + + GetConfigs [2/2] + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index ecab3eb71c5..f95ae2c9bb2 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3305,12 +3305,21 @@ + + + + + + + + + - - + + From 43fdd85033b194eed6ee1d64c13dcd3d651130b6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Sat, 12 Oct 2024 17:54:07 +0800 Subject: [PATCH 115/354] pause to be finished --- dita/RTC-NG/API/api_canvas_addview.dita | 47 ++++--- dita/RTC-NG/API/api_canvas_removeview.dita | 68 ++++++++++ .../API/api_canvasconfig_getmirrormode.dita | 55 ++++++++ .../API/api_canvasconfig_getrendermode.dita | 56 ++++++++ .../API/api_canvasconfig_setmirrormode.dita | 56 ++++++++ .../API/api_canvasconfig_setrendermode.dita | 56 ++++++++ dita/RTC-NG/API/api_imediaplayer_pause.dita | 2 +- dita/RTC-NG/API/api_player_openwithurl.dita | 6 +- dita/RTC-NG/API/api_player_pause.dita | 67 +++++++++ dita/RTC-NG/API/api_player_play.dita | 65 +++++++++ dita/RTC-NG/API/class_canvasconfig.dita | 6 + dita/RTC-NG/API/enum_rtevideomirrormode.dita | 36 +++++ dita/RTC-NG/API/enum_rtevideorendermode.dita | 28 ++++ dita/RTC-NG/API/rtc_api_data_type.dita | 2 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 11 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 128 +++++++++++++++++- .../config/relations-rtc-ng-api.ditamap | 14 ++ 17 files changed, 678 insertions(+), 25 deletions(-) create mode 100644 dita/RTC-NG/API/api_canvas_removeview.dita create mode 100644 dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita create mode 100644 dita/RTC-NG/API/api_canvasconfig_getrendermode.dita create mode 100644 dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita create mode 100644 dita/RTC-NG/API/api_canvasconfig_setrendermode.dita create mode 100644 dita/RTC-NG/API/api_player_pause.dita create mode 100644 dita/RTC-NG/API/api_player_play.dita create mode 100644 dita/RTC-NG/API/class_canvasconfig.dita create mode 100644 dita/RTC-NG/API/enum_rtevideomirrormode.dita create mode 100644 dita/RTC-NG/API/enum_rtevideorendermode.dita diff --git a/dita/RTC-NG/API/api_canvas_addview.dita b/dita/RTC-NG/API/api_canvas_addview.dita index c52c8110744..94b6f6a8975 100644 --- a/dita/RTC-NG/API/api_canvas_addview.dita +++ b/dita/RTC-NG/API/api_canvas_addview.dita @@ -2,7 +2,7 @@ <ph keyref="AddView"/> - + 添加渲染视图。 @@ -13,10 +13,10 @@

    - + public void addView(View view, ViewConfig viewConfig) throws RteException; - - + - (BOOL)addView:(AgoraRteView * _Nonnull)view config:(AgoraRteViewConfig* _Nullable)config error:(AgoraRteError* _Nullable)error; + bool AddView(View *view, ViewConfig *config, rte::Error *err) @@ -27,41 +27,48 @@

    自从
    -
    v
    +
    v4.5.0
    -

    +

    适用场景 -

    +

    当你需要使用播放器播放视频,你可以调用该方法将一个视图(view)添加到视频渲染器中,以便显示视频内容。

    调用时机 -

    +

    //TODO

    调用限制 -

    -

    -
    参数 - - + view + HWND 窗口句柄值。 + SurfaceView 对象。 + UIView 对象。 + + + config + View 对象的设置,详见 。//TODO 目前可传空是什么意思?什么情况下可以传空? + + + +
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    添加视图是否成功:

      +
    • :添加视图成功。
    • +
    • :添加视图失败。
    • +
    +

    diff --git a/dita/RTC-NG/API/api_canvas_removeview.dita b/dita/RTC-NG/API/api_canvas_removeview.dita new file mode 100644 index 00000000000..0f6fdd6dcdd --- /dev/null +++ b/dita/RTC-NG/API/api_canvas_removeview.dita @@ -0,0 +1,68 @@ + + + + <ph keyref="RemoveView"/> + 移除渲染视图。 + + + + + + + + +
    +

    + public void removeView(View view, ViewConfig viewConfig) throws RteException; + + - (BOOL)removeView:(AgoraRteView * _Nonnull)view config:(AgoraRteViewConfig* _Nullable)config error:(AgoraRteError* _Nullable)error; + bool RemoveView(View *view, ViewConfig *config, rte::Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    当你调用 添加视图后,如果你需要移除渲染视图,可调用此方法。

    +
    +
    + 调用时机 +

    该方法需在 后调用。

    +
    +
    + 调用限制 +

    //TODO 一次只能移除一个视图?

    +
    +
    + 参数 + + + view + 需要移除的视图对象。 + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    移除视图是否成功:

      +
    • :移除视图成功。
    • +
    • :移除视图失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita new file mode 100644 index 00000000000..01aaed8354d --- /dev/null +++ b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita @@ -0,0 +1,55 @@ + + + + <ph keyref="GetMirrorMode"/> + 获取当前设置的镜像模式。 + + + + + + + + +
    +

    + public Constants.VideoMirrorMode getVideoMirrorMode() throws RteException ; + + - (AgoraRteVideoMirrorMode)videoMirrorMode:(AgoraRteError * _Nullable)error; + VideoMirrorMode GetMirrorMode(Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    当前设置的镜像模式,详见

    +
    +
    diff --git a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita new file mode 100644 index 00000000000..a1435df41d3 --- /dev/null +++ b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita @@ -0,0 +1,56 @@ + + + + <ph keyref="GetRenderMode"/> + 获取当前设置的视频渲染模式。 + + + + + + + + +
    +

    + public Constants.VideoRenderMode getVideoRenderMode() throws RteException ; + + - (AgoraRteVideoRenderMode)videoRenderMode:(AgoraRteError * _Nullable)error; + VideoRenderMode GetRenderMode(Error *err = nullptr) + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。//TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    当前的视频渲染模式,详见

    +
    +
    +
    diff --git a/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita new file mode 100644 index 00000000000..d82986b1807 --- /dev/null +++ b/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita @@ -0,0 +1,56 @@ + + + + <ph keyref="SetMirrorMode"/> + 设置视频的镜像模式。 + + + + + + + + +
    +

    + public void setVideoMirrorMode(Constants.VideoMirrorMode mode) throws RteException ; + + - (void)setVideoMirrorMode:(AgoraRteVideoMirrorMode)mode error:(AgoraRteError* _Nullable)error; + void SetMirrorMode(VideoMirrorMode mode, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + mode + 镜像模式,详见 。默认为 ,即由 SDK 决定镜像模式。默认关闭远端用户的镜像模式。//TODO review + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita new file mode 100644 index 00000000000..7611c736a7a --- /dev/null +++ b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita @@ -0,0 +1,56 @@ + + + + <ph keyref="SetRenderMode_CanvasConfig"/> + 设置视频的渲染模式。 + + + + + + + + +
    +

    + public void setVideoRenderMode(Constants.VideoRenderMode mode) throws RteException ; + + - (void)setVideoMirrorMode:(AgoraRteVideoMirrorMode)mode error:(AgoraRteError* _Nullable)error; + void SetRenderMode(VideoRenderMode mode, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + mode + 渲染模式,详见 。默认的渲染模式为 ,即视频尺寸等比缩放,优先保证视窗被填满。 + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_imediaplayer_pause.dita b/dita/RTC-NG/API/api_imediaplayer_pause.dita index d02b4ea84cd..d45d85fceb9 100644 --- a/dita/RTC-NG/API/api_imediaplayer_pause.dita +++ b/dita/RTC-NG/API/api_imediaplayer_pause.dita @@ -32,7 +32,7 @@
    调用时机

    该方法在加入频道前后均可调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_openwithurl.dita b/dita/RTC-NG/API/api_player_openwithurl.dita index 271d128978b..7216f788be9 100644 --- a/dita/RTC-NG/API/api_player_openwithurl.dita +++ b/dita/RTC-NG/API/api_player_openwithurl.dita @@ -30,8 +30,8 @@
    v4.5.0
    -

    如果你想要加快打开 URL 资源的速度,可以在调用该方法前,调用 预加载资源。

    -

    如果资源打开失败,你会收到 的回调报告状态为 。此时你需要先调用 然后再调用 重新打开 URL 资源。

    +

    该方法支持通过 URL 打开实时流媒体。如果你想要加快打开 URL 资源的速度,可以在调用该方法前,调用 预加载资源。

    +

    如果资源打开失败,你会收到 的回调报告状态为 。此时你需要先调用 然后再调用 重新打开 URL 资源。成功打开后,你可以调用 进行播放。

    适用场景 @@ -47,7 +47,7 @@
    参数 diff --git a/dita/RTC-NG/API/api_player_pause.dita b/dita/RTC-NG/API/api_player_pause.dita new file mode 100644 index 00000000000..23a546c526a --- /dev/null +++ b/dita/RTC-NG/API/api_player_pause.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="Pause_Player"/> + 暂停播放。 + + + + + + + + +
    +

    + public void pause() throws RteException; + + - (BOOL)pause:(AgoraRteError * _Nullable)error; + bool Pause(Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_play.dita b/dita/RTC-NG/API/api_player_play.dita new file mode 100644 index 00000000000..09c72763c00 --- /dev/null +++ b/dita/RTC-NG/API/api_player_play.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="Play_Player"/> + 播放 URL 资源。 + + + + + + + + +
    +

    + public void play() throws RteException; + + - (BOOL)play:(AgoraRteError * _Nullable)error; + bool Play(Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    当你调用 打开成功拉取实时流媒体后,你可以调用此方法进行播放。

    +

    +

    +
    + 调用时机 +

    //TODO 是否需要收到 player state 为 opencompleted 然后才能调用 play?

    +
    +
    + 调用限制 +

    该方法目前仅支持播放带 rte:// 前缀的 URL。//TODO

    +
    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    播放是否成功:

      +
    • :播放成功。
    • +
    • :播放失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/class_canvasconfig.dita b/dita/RTC-NG/API/class_canvasconfig.dita new file mode 100644 index 00000000000..db39eb9d579 --- /dev/null +++ b/dita/RTC-NG/API/class_canvasconfig.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="CanvasConfig"/> + 该类提供设置视频渲染的相关方法。 + diff --git a/dita/RTC-NG/API/enum_rtevideomirrormode.dita b/dita/RTC-NG/API/enum_rtevideomirrormode.dita new file mode 100644 index 00000000000..419dc84baf4 --- /dev/null +++ b/dita/RTC-NG/API/enum_rtevideomirrormode.dita @@ -0,0 +1,36 @@ + + + + <ph keyref="RteVideoMirrorMode"/> + 视频镜像模式。 + +
    +
    + +
    自从
    +
    v
    +
    +
    +
    +
    + 枚举值 + + + + 0:由 SDK 决定镜像模式。 +
      +
    • 本地视图镜像模式:如果你使用前置摄像头,默认启动本地视图镜像模式;如果你使用后置摄像头,默认关闭本地视图镜像模式。
    • +
    • 远端用户视图镜像模式:默认关闭远端用户的镜像模式。
    +
    + + + 1:启用镜像模式。 + + + + 2:关闭镜像模式。 + + +
    +
    +
    diff --git a/dita/RTC-NG/API/enum_rtevideorendermode.dita b/dita/RTC-NG/API/enum_rtevideorendermode.dita new file mode 100644 index 00000000000..9b111a58211 --- /dev/null +++ b/dita/RTC-NG/API/enum_rtevideorendermode.dita @@ -0,0 +1,28 @@ + + + + <ph keyref="RteVideoRenderMode"/> + 视频渲染模式。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + 0:视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。 + + + + 1:视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。//TODO rtc的这个描述是否适用 rte? + + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index e4a4c968ae9..a16725e2f2c 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1245,6 +1245,8 @@
  • +
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index ae3cc05df62..aabd405115c 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -47,6 +47,10 @@ + + + + @@ -450,17 +454,24 @@ + + + + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b492402bcf0..895f61a0692 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -301,6 +301,34 @@ + + + + Canvas + + + + + + + CanvasConfig + + + + + + + Rte + + + + + + + Player + + + @@ -951,7 +979,14 @@ - + + + + + AddView + + + @@ -1001,6 +1036,13 @@ + + + + SetRenderMode + + + @@ -1015,6 +1057,20 @@ + + + + GetMirrorMode + + + + + + + GetRenderMode + + + @@ -1029,6 +1085,13 @@ + + + + SetMirrorMode + + + @@ -1043,6 +1106,13 @@ + + + + Play + + + @@ -1050,6 +1120,13 @@ + + + + RemoveView + + + @@ -10913,6 +10990,34 @@ + + + + RteVideoMirrorMode + + + + + + + kRteVideoMirrorModeAuto + + + + + + + kRteVideoMirrorModeEnabled + + + + + + + kRteVideoMirrorModeDisabled + + + @@ -11067,6 +11172,27 @@ + + + + RteVideoRenderMode + + + + + + + kRteVideoRenderModeHidden + + + + + + + kRteVideoRenderModeFit + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index f95ae2c9bb2..fab455b5fde 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3307,8 +3307,10 @@ + + @@ -3316,6 +3318,18 @@ + + + + + + + + + + + + From 20cdf76181fccfcaefca523d2f9a845f790f4e9c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 14 Oct 2024 16:30:12 +0800 Subject: [PATCH 116/354] CSD-64354 --- ...api_irtcengine_setfiltereffectoptions.dita | 71 ++++++++++++++++++ ...pi_irtcengine_setfiltereffectoptions2.dita | 72 +++++++++++++++++++ .../RTC-NG/API/class_filtereffectoptions.dita | 62 ++++++++++++++++ dita/RTC-NG/API/rtc_api_data_type.dita | 4 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 2 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + dita/RTC-NG/RTC_NG_API_iOS.ditamap | 2 + dita/RTC-NG/RTC_NG_API_macOS.ditamap | 2 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 14 ++++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 23 +++++- .../config/keys-rtc-ng-api-java.ditamap | 21 ++++++ .../config/keys-rtc-ng-api-macos.ditamap | 21 ++++++ .../config/relations-rtc-ng-api.ditamap | 2 + 13 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita create mode 100644 dita/RTC-NG/API/class_filtereffectoptions.dita diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita new file mode 100644 index 00000000000..5f18231e764 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -0,0 +1,71 @@ + + + + <ph keyref="setFilterEffectOptions"/> + 设置滤镜效果选项。 + + + + + + + + +
    +

    + public abstract int setFilterEffectOptions(boolean enabled, FilterEffectOptions options); + + - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options NS_SWIFT_NAME(setFilterEffectOptions(_:options:)); + virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +
      +
    • 该方法仅适用于 Android 5.0 及以上版本。
    • +
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • +
    • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
    • +
    +
    +
    + 参数 + + + + + + + options + 滤镜选项,详细定义见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita new file mode 100644 index 00000000000..07419ccd695 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita @@ -0,0 +1,72 @@ + + + + <ph keyref="setFilterEffectOptions2"/> + 设置滤镜效果选项并指定媒体源。 + + + + + + + + +
    +

    + public abstract int setFilterEffectOptions( + boolean enabled, FilterEffectOptions options, Constants.MediaSourceType sourceType); + + - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +
      +
    • 该方法仅适用于 Android 5.0 及以上版本。
    • +
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • +
    • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
    • +
    +
    +
    + 参数 + + + + + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita new file mode 100644 index 00000000000..cb80f765d7e --- /dev/null +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -0,0 +1,62 @@ + + + + <ph keyref="FilterEffectOptions" /> + 滤镜效果选项。 + +
    +

    + public class FilterEffectOptions { + public String path = null; + public float strength; +} + + __attribute__((visibility("default"))) @interface AgoraFilterEffectOptions: NSObject +@property(nonatomic, copy) NSString* _Nullable path NS_SWIFT_NAME(path); +@property(nonatomic, assign) float strength; +@end + + struct FilterEffectOptions { + const char * path; + float strength; + + FilterEffectOptions(const char * lut3dPath, float filterStrength) : path(lut3dPath), strength(filterStrength) {} + FilterEffectOptions() : path(OPTIONAL_NULLPTR), strength(0.5) {} +}; + + + + +

    +
    +
    + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> + + + + path + +

    自定义滤镜效果的 3D 立方体贴图文件的本地绝对路径。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: + +LUT_3D_SIZE 32 +0.0039215689 0 0.0039215682 +0.0086021447 0.0037950677 0 +... +0.0728652592 0.0039215689 0 + + +

      +
    • 立方体贴图文件首行的 LUT_3D_SIZE 标识符表示三位查找表的尺寸,滤镜效果的 LUT 最大尺寸为 32。
    • +
    • SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,传入该文件的绝对路径可实现美白滤镜效果。
    • +
    + +

    +
    +
    + + strength + 滤镜效果强度,取值范围为 [0.0,1.0],其中 0.0 表示无滤镜效果,默认值为 0.5。取值越大,滤镜效果越强。 + +
    +
    +
    \ No newline at end of file diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index c2b1834414d..306de04dab2 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -42,6 +42,7 @@
  • +
  • @@ -174,6 +175,7 @@
  • +
  • @@ -395,6 +397,7 @@
  • +
  • @@ -499,6 +502,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index b4ede8d42ba..db6db09ab89 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -304,6 +304,8 @@ + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index db54450d0da..0bf75c48202 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -317,6 +317,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index bf00220d059..f090bdee9ba 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -311,6 +311,8 @@ + + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index ae5e06bd90f..f3a6fd16153 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -308,6 +308,8 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 5c5f2a1318d..f9b10a31d37 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1296,6 +1296,13 @@
    + + + + setFilterEffectOptions + + + @@ -5358,6 +5365,13 @@ + + + + FilterEffectOptions + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 40201b515b3..c0149bbc11a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1226,7 +1226,21 @@ - + + + + setFilterEffectOptions:options: + + + + + + + setFilterEffectOptions:options:sourceType: + + + + setFaceInfoDelegate: @@ -4833,6 +4847,13 @@ AgoraVideoFrame + + + + + AgoraFilterEffectOptions + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 31056fa6432..a3d969b29cc 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1216,6 +1216,20 @@ + + + + setFilterEffectOptions [1/2] + + + + + + + setFilterEffectOptions [2/2] + + + @@ -5027,6 +5041,13 @@ + + + + FilterEffectOptions + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 90aacdb2f24..52174ba08bb 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1176,6 +1176,20 @@ + + + + setFilterEffectOptions:options: + + + + + + + setFilterEffectOptions:options:sourceType: + + + @@ -4522,6 +4536,13 @@ + + + + AgoraFilterEffectOptions + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 37762a89a5f..1726dc05850 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2392,6 +2392,8 @@ + + From 2b96b2e4731ced47b2a70d907465f73e548b0c5d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 14 Oct 2024 16:31:02 +0800 Subject: [PATCH 117/354] fix wording --- dita/RTC-NG/API/class_filtereffectoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index cb80f765d7e..cc2208f6fef 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -36,7 +36,7 @@ path -

    自定义滤镜效果的 3D 立方体贴图文件的本地绝对路径。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: +

    3D 立方体贴图文件的本地绝对路径,用于自定义滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: LUT_3D_SIZE 32 0.0039215689 0 0.0039215682 From 30c3d3e6d2a138f4de43fb752e1ebad5b8634623 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 14 Oct 2024 16:39:08 +0800 Subject: [PATCH 118/354] fix enable --- .../API/api_irtcengine_setfiltereffectoptions.dita | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 5f18231e764..8059f97d507 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -47,9 +47,15 @@

    参数 - - - + + enabled + enable + 是否开启滤镜功能: + +
      +
    • : 开启滤镜功能。
    • +
    • :(默认)关闭滤镜功能。
    • +
    options From 0e3c3ccbc31d69713c1ac63f4aa477187bb93631 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 14 Oct 2024 16:42:14 +0800 Subject: [PATCH 119/354] fix Lut size note --- dita/RTC-NG/API/class_filtereffectoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index cc2208f6fef..e4027aec2ee 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -46,7 +46,7 @@ LUT_3D_SIZE 32
      -
    • 立方体贴图文件首行的 LUT_3D_SIZE 标识符表示三位查找表的尺寸,滤镜效果的 LUT 最大尺寸为 32。
    • +
    • 立方体贴图文件首行的 LUT_3D_SIZE 标识符表示三位查找表的尺寸,滤镜效果的 LUT 尺寸目前仅支持设为 32。
    • SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,传入该文件的绝对路径可实现美白滤镜效果。
    From 431edfc972659bc670dabbc961f318fd120f12e9 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 14 Oct 2024 16:43:53 +0800 Subject: [PATCH 120/354] fix --- dita/RTC-NG/API/class_filtereffectoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index e4027aec2ee..1b73a3a369f 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -36,7 +36,7 @@ path -

    3D 立方体贴图文件的本地绝对路径,用于自定义滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: +

    3D 立方体贴图文件的本地绝对路径,用于自定义的滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: LUT_3D_SIZE 32 0.0039215689 0 0.0039215682 From 4a082065facc2982172c9116889b48c18c085b63 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:23:19 +0800 Subject: [PATCH 121/354] api change --- dita/RTC-NG/API/class_channelmediaoptions.dita | 2 ++ dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_channelmediaoptions.dita b/dita/RTC-NG/API/class_channelmediaoptions.dita index 3542e5816ce..0dbd0941081 100644 --- a/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -84,6 +84,8 @@ public audioDelayMs?:number; public mediaPlayerAudioDelayMs?:number; + + public token?:string; public enableBuiltInMediaEncryption?:boolean; diff --git a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita index 66925b21623..3fbc4c0aeed 100644 --- a/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita +++ b/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita @@ -35,7 +35,7 @@ public eventHandler?:IMusicContentCenterEventHandler - public mccDomain:string = "" + public mccDomain?:string } __attribute__((visibility("default"))) @interface AgoraMusicContentCenterConfig : NSObject @property(assign, nonatomic) AgoraRtcEngineKit* _Nullable rtcEngine; From 40bb6c37f5e8ea2b21816504a03870f427baa48f Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 15 Oct 2024 15:37:45 +0800 Subject: [PATCH 122/354] RtePlayerState&onResolutionChanged tbd --- dita/RTC-NG/API/api_player_getconfigs.dita | 58 +++++++ dita/RTC-NG/API/api_player_getinfo.dita | 65 ++++++++ dita/RTC-NG/API/api_player_muteaudio.dita | 67 ++++++++ dita/RTC-NG/API/api_player_mutevideo.dita | 67 ++++++++ dita/RTC-NG/API/api_player_pause.dita | 28 ++-- .../API/api_player_registerobserver.dita | 38 +++-- dita/RTC-NG/API/api_player_setconfigs.dita | 65 ++++++++ dita/RTC-NG/API/api_player_stop.dita | 65 ++++++++ .../API/api_player_unregisterobserver.dita | 65 ++++++++ ...ck_playerobserver_onresolutionchanged.dita | 64 ++++++++ ...allback_playerobserver_onstatechanged.dita | 65 ++++++++ dita/RTC-NG/API/class_rteplayerinfo.dita | 146 ++++++++++++++++++ dita/RTC-NG/API/enum_rteplayerstate.dita | 24 +++ dita/RTC-NG/RTC_NG_API_CPP.ditamap | 10 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 80 +++++++++- .../config/relations-rtc-ng-api.ditamap | 18 ++- 16 files changed, 885 insertions(+), 40 deletions(-) create mode 100644 dita/RTC-NG/API/api_player_getconfigs.dita create mode 100644 dita/RTC-NG/API/api_player_getinfo.dita create mode 100644 dita/RTC-NG/API/api_player_muteaudio.dita create mode 100644 dita/RTC-NG/API/api_player_mutevideo.dita create mode 100644 dita/RTC-NG/API/api_player_setconfigs.dita create mode 100644 dita/RTC-NG/API/api_player_stop.dita create mode 100644 dita/RTC-NG/API/api_player_unregisterobserver.dita create mode 100644 dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita create mode 100644 dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita create mode 100644 dita/RTC-NG/API/class_rteplayerinfo.dita create mode 100644 dita/RTC-NG/API/enum_rteplayerstate.dita diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita new file mode 100644 index 00000000000..838bead0eea --- /dev/null +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -0,0 +1,58 @@ + + + + <ph keyref="GetConfigs_Player"/> + 获取当前的播放器设置。 + + + + + + + + +

    +

    + public void getConfigs(PlayerConfig config) throws RteException; + + - (BOOL)getConfigs:(AgoraRtePlayerConfig * _Nonnull)config error:(AgoraRteError * _Nullable)error; + bool GetConfigs(PlayerConfig* config, Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + +
    +
    +
    + + diff --git a/dita/RTC-NG/API/api_player_getinfo.dita b/dita/RTC-NG/API/api_player_getinfo.dita new file mode 100644 index 00000000000..c3588430f73 --- /dev/null +++ b/dita/RTC-NG/API/api_player_getinfo.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="GetInfo"/> + 获取播放器播放的媒体流的相关信息。 + + + + + + + + +
    +

    + public void getInfo(PlayerInfo info) throws RteException; + + - (BOOL)getInfo:(AgoraRtePlayerInfo * _Nonnull)info error:(AgoraRteError * _Nullable)error; + bool GetInfo(PlayerInfo *info, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    你可以通过该方法获取媒体流的相关信息,例如媒体流的数量、音频采样率、视频分辨率宽高等信息。

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + info + 媒体流的相关信息,详见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    获取媒体流信息是否成功:

      +
    • :获取信息成功。
    • +
    • :获取信息失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_player_muteaudio.dita b/dita/RTC-NG/API/api_player_muteaudio.dita new file mode 100644 index 00000000000..ac10f8b9ab1 --- /dev/null +++ b/dita/RTC-NG/API/api_player_muteaudio.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="MuteAudio"/> + //TODO + + + + + + + + +
    +

    + public void muteAudio(boolean mute) throws RteException; + + - (BOOL)muteAudio:(BOOL)mute error:(AgoraRteError * _Nullable)error; + bool MuteAudio(bool mute, Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_mutevideo.dita b/dita/RTC-NG/API/api_player_mutevideo.dita new file mode 100644 index 00000000000..4b9e65d7b7e --- /dev/null +++ b/dita/RTC-NG/API/api_player_mutevideo.dita @@ -0,0 +1,67 @@ + + + + <ph keyref="MuteVideo"/> + //TODO + + + + + + + + +
    +

    + public void muteVideo(boolean mute) throws RteException; + + - (BOOL)muteVideo:(BOOL)mute error:(AgoraRteError * _Nullable)error; + bool MuteVideo(bool mute, Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 调用时机 +

    +

    +
    + 调用限制 +

    +

    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_pause.dita b/dita/RTC-NG/API/api_player_pause.dita index 23a546c526a..a7c29847bed 100644 --- a/dita/RTC-NG/API/api_player_pause.dita +++ b/dita/RTC-NG/API/api_player_pause.dita @@ -30,38 +30,36 @@
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    当你调用 播放 URL 流后,如果你想暂停播放,可以调用此方法。如果你想要停止播放,请调用

    +

    调用时机 -

    +

    该方法需要在 之后调用。

    调用限制 -

    +

    无。

    -
    +
    参数 - +
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    暂停播放是否成功:

      +
    • :暂停播放成功。
    • +
    • :暂停播放失败。
    • +
    +

    diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita index 21fdb5d8761..61384f194ec 100644 --- a/dita/RTC-NG/API/api_player_registerobserver.dita +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -27,41 +27,39 @@
    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    你需要在该方法中实现一个 类,并根据场景需要,注册该类的回调。

    +

    调用时机 -

    +

    //TODO

    调用限制 -

    -

    -
    参数 - - - + + observer + 接口对象实例,详见 + + + +
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    注册是否成功:

      +
    • :注册成功。
    • +
    • :注册失败。
    • +
    +

    diff --git a/dita/RTC-NG/API/api_player_setconfigs.dita b/dita/RTC-NG/API/api_player_setconfigs.dita new file mode 100644 index 00000000000..5f8343e425a --- /dev/null +++ b/dita/RTC-NG/API/api_player_setconfigs.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="SetConfigs_Player"/> + 设置播放器配置。 + + + + + + + + +
    +

    + public void setConfigs(PlayerConfig config) throws RteException; + + - (BOOL)setConfigs:(AgoraRtePlayerConfig * _Nonnull)config error:(AgoraRteError * _Nullable)error; + bool SetConfigs(PlayerConfig* config, Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    你可以调用该方法来进行播放器设置,如开启自动播放、订阅不同分辨率和码率的视频流等。

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + config + 播放器设置的对象,详见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    播放器设置是否成功:

      +
    • :设置成功。
    • +
    • :设置失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_player_stop.dita b/dita/RTC-NG/API/api_player_stop.dita new file mode 100644 index 00000000000..fd4791de8b4 --- /dev/null +++ b/dita/RTC-NG/API/api_player_stop.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="Stop_Player"/> + 停止播放。 + + + + + + + + +
    +

    + public void pause() throws RteException; + + - (BOOL)pause:(AgoraRteError * _Nullable)error; + bool Stop(Error* err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    当你调用 播放 URL 流后,如果你想停止播放,可以调用此方法。如果你需要暂停播放,请调用

    +
    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    + +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    停止播放是否成功:

      +
    • :停止播放成功。
    • +
    • :停止播放失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_player_unregisterobserver.dita b/dita/RTC-NG/API/api_player_unregisterobserver.dita new file mode 100644 index 00000000000..ac8ac714d1c --- /dev/null +++ b/dita/RTC-NG/API/api_player_unregisterobserver.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="UnregisterObserver_Player"/> + 取消注册 RTE 播放器事件观测器。 + + + + + + + + +
    +

    + public void unregisterObserver(PlayerObserver observer) throws RteException; + + - (BOOL)unregisterObserver:(AgoraRtePlayerObserver * _Nullable)observer error:(AgoraRteError * _Nullable)error; + bool UnregisterObserver(PlayerObserver *observer, Error *err); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    调用 注册播放器事件观测器后,如果你需要取消注册,请调用该方法。

    +

    +

    +
    + 调用时机 +

    该方法需在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    取消注册是否成功:

      +
    • :取消注册成功。
    • +
    • :取消注册失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita new file mode 100644 index 00000000000..a98881a9b16 --- /dev/null +++ b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita @@ -0,0 +1,64 @@ + + + + <ph keyref="onResolutionChanged"/> + + + + + + + + + +
    +

    + + + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 触发时机 +

    +

    +
    + 使用限制 +

    +

    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita b/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita new file mode 100644 index 00000000000..c4049307bfe --- /dev/null +++ b/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="onStateChanged"/> + 播放器状态发生改变回调。 + + + + + + + + +
    +

    + public void onStateChanged(int old_state, int new_state, Error error){} + + - (void)onStateChanged:(AgoraRtePlayerState)oldState newState:(AgoraRtePlayerState)newState error:(AgoraRteError * _Nullable)error; + virtual void onStateChanged(PlayerState old_state, PlayerState new_state, + rte::Error *err) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    如果你需要监控播放器状态的变化,需要在调用 方法时注册该回调。

    +
    +
    + 触发时机 +

    当播放器状态发生变化时,SDK 会触发此回调报告当前和变化之前的状态。

    +
    +
    + 使用限制 +

    无。

    +
    +
    + 参数 + + + old_state + oldState + 播放器变化前的状态,详见 。 + + + + new_state + newState + 播放器当前的状态,详见 。如果当前状态为 ,你可以通过 errerror 参数获取详细错误信息。 + + + error + err + 状态或错误信息,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/class_rteplayerinfo.dita b/dita/RTC-NG/API/class_rteplayerinfo.dita new file mode 100644 index 00000000000..a78de61312b --- /dev/null +++ b/dita/RTC-NG/API/class_rteplayerinfo.dita @@ -0,0 +1,146 @@ + + + + <ph keyref="RtePlayerInfo"/> + 媒体流的相关信息。 + +
    +

    + public class PlayerInfo { + public int state(); + public long duration(); + public int streamCount(); + public boolean hasAudio(); + public boolean hasVideo(); + public boolean isAudioMuted(); + public boolean isVideoMuted(); + public int videoHeight(); + public int videoWidth(); + public Constants.AbrSubscriptionLayer abrSubscriptionLayer(); + public int audioSampleRate(); + public int audioChannels(); + public int audioBitsPerSample(); +} + + @interface AgoraRtePlayerInfo : NSObject +- (instancetype _Nonnull)init;//TODO +- (int)state; +- (long)duration; +- (int)streamCount; +- (BOOL)hasAudio; +- (BOOL)hasVideo; +- (BOOL)isAudioMuted; +- (BOOL)isVideoMuted; +- (int)videoHeight; +- (int)videoWidth; +- (AgoraRteAbrSubscriptionLayer)abrSubscriptionLayer; +- (int)audioSampleRate; +- (int)audioChannels; +- (int)audioBitsPerSample; +@end + typedef struct RtePlayerInfo { + RtePlayerState state; + size_t duration; + size_t stream_count; + bool has_audio; + bool has_video; + bool is_audio_muted; + bool is_video_muted; + int video_height; + int video_width; + RteAbrSubscriptionLayer abr_subscription_layer; + int audio_sample_rate; + int audio_channels; + int audio_bits_per_sample; +} RtePlayerInfo; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> + + + state + 播放器当前的状态,详见 + + + duration + 预留参数。 + + + stream_count + streamCount + 预留参数。 + + + has_audio + hasAudio + URL 媒体流中是否存在音频流。//TODO + + + has_video + hasVideo + URL 媒体流中是否存在视频流。//TODO + + + is_audio_muted + isAudioMuted + 音频流是否被静音。//TODO + + + is_video_muted + isVideoMuted + 视频流是否被静音。//TODO + + + video_height + videoHeight + 视频的高度(px)。 + + + video_width + videoWidth + 视频的宽度(px)。 + + + abr_subscription_layer + abrSubscriptionLayer + 订阅的视频流的质量级别。在自适应码率(ABR)视频流中,不同的质量级别对应不同的分辨率和码率,详见 + + + audio_sample_rate + audioSampleRate + 音频采样率(Hz)。 + + + audio_channels + audioChannels + 音频声道数。 + + + audio_bits_per_sample + audioBitsPerSample + 每个音频样本使用的位数(位深)。//TODO 16位、24位 还是 32位? + +
    +
    + 方法 + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/enum_rteplayerstate.dita b/dita/RTC-NG/API/enum_rteplayerstate.dita new file mode 100644 index 00000000000..c3eb0f1de8e --- /dev/null +++ b/dita/RTC-NG/API/enum_rteplayerstate.dita @@ -0,0 +1,24 @@ + + + + <ph keyref="RtePlayerState"/> + 播放器的状态。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + + + +
    +
    diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index aabd405115c..a7dcabaa095 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -455,27 +455,37 @@
    + + + + + + + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 895f61a0692..2e8bce5bf74 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1071,17 +1071,38 @@
    + + + + MuteAudio + + + + + + + MuteVideo + + + - SetConfigs [1/2] + SetConfigs [1/3] + + + + + + + SetConfigs [2/3] - SetConfigs [2/2] + SetConfigs [3/3] @@ -1095,14 +1116,35 @@ - GetConfigs [1/2] + GetConfigs [1/3] + + + + + + + GetConfigs [2/3] - GetConfigs [2/2] + GetConfigs [3/3] + + + + + + + GetInfo + + + + + + + Pause @@ -1127,6 +1169,20 @@
    + + + + RegisterObserver_Player + + + + + + + Stop + + + @@ -1134,6 +1190,22 @@ + + + + UnregisterObserver + + + +
    + + + + + onStateChanged + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index fab455b5fde..0aae2d7c5eb 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3329,16 +3329,32 @@ + + + + + - + + + + + + + + + + + + From d4fc1b5f316d0d6c8a1a77b615ad07a5a50d4495 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 15 Oct 2024 18:25:48 +0800 Subject: [PATCH 123/354] onevent tbd --- ...ck_playerobserver_onresolutionchanged.dita | 35 ++++------ dita/RTC-NG/API/enum_rteplayerstate.dita | 32 ++++++++- dita/RTC-NG/API/rtc_api_data_type.dita | 1 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + .../callback_playerobserver_onevent.dita | 64 +++++++++++++++++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 70 +++++++++++++++++++ .../config/relations-rtc-ng-api.ditamap | 1 + 7 files changed, 181 insertions(+), 23 deletions(-) create mode 100644 dita/RTC-NG/config/callback_playerobserver_onevent.dita diff --git a/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita index a98881a9b16..b181129b3b8 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita @@ -2,7 +2,7 @@ <ph keyref="onResolutionChanged"/> - + 视频分辨率发生改变回调。 @@ -13,10 +13,10 @@

    - + public void onResolutionChanged(int width, int height){} - - + - (void)onResolutionChanged:(int)width height:(int)height; + virtual void onResolutionChanged(int width, int height) = 0; @@ -28,37 +28,30 @@

    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    如果你需要监控播放器所播放视频流分辨率的变化,需要在调用 方法时注册该回调。

    触发时机 -

    +

    当视频流的分辨率发生变化时,SDK 会触发该回调报告当前视频的宽高。

    使用限制 -

    +

    无。

    参数 - - + width + 视频帧的宽度(px)。 + + + height + 视频帧的高度(px)。
    -
    - <ph keyref="return-section-title"/> -

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    diff --git a/dita/RTC-NG/API/enum_rteplayerstate.dita b/dita/RTC-NG/API/enum_rteplayerstate.dita index c3eb0f1de8e..c0f8c263517 100644 --- a/dita/RTC-NG/API/enum_rteplayerstate.dita +++ b/dita/RTC-NG/API/enum_rteplayerstate.dita @@ -16,8 +16,36 @@ 枚举值 - - + + 0:空闲状态。//TODO 播放器会在你打开 URL 之前和结束播放之后会报告该状态码。 + + + + 1:正在打开 URL 资源。当调用 后会报告该状态码。 + + + + 2:成功打开 URL 资源。当调用 成功打开 URL 资源后会报告该状态码。 + + + + 3:播放中。//TODO 当打开 rte url 时,订阅主播成功回调此状态。观众端调用 open 打开 url 并播放后会回调这个状态吗? + + + + 4:暂停播放。当成功调用 后会报告该状态码。 + + + + 5:播放完成。//TODO 当主播结束推流退出房间后,会报告该状态码。这个状态码是观众端和主播端都会报告吗? + + + + 6:停止播放。当成功调用 后会报告该状态码。 + + + + 7:失败状态。当内部发生错误时会报告该状态码。
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index a16725e2f2c..6435c5ccea5 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1245,6 +1245,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index a7dcabaa095..b5603c9b9d5 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -485,6 +485,7 @@ + diff --git a/dita/RTC-NG/config/callback_playerobserver_onevent.dita b/dita/RTC-NG/config/callback_playerobserver_onevent.dita new file mode 100644 index 00000000000..30d716bf1db --- /dev/null +++ b/dita/RTC-NG/config/callback_playerobserver_onevent.dita @@ -0,0 +1,64 @@ + + + + <ph keyref="onEvent"/> + + + + + + + + + +
    +

    + public void onEvent(int event){} + + - (void)onEvent:(AgoraRtePlayerEvent)event; + virtual void onEvent(PlayerEvent event) = 0; + + + + + +

    +
    +
    +
    + +
    自从
    +
    v
    +
    +
    +

    +

    +
    + 适用场景 +

    +

    +
    + 触发时机 +

    +

    +
    + 使用限制 +

    +

    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 2e8bce5bf74..274621f114c 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1199,6 +1199,13 @@ + + + + onResolutionChanged + + + @@ -11600,6 +11607,69 @@ RTMP_STREAM_PUBLISH_STATE_DISCONNECTING + + + + + RtePlayerState + + + + + + + kRtePlayerStateIdle + + + + + + + kRtePlayerStateOpening + + + + + + + kRtePlayerStateOpenCompleted + + + + + + + kRtePlayerStatePlaying + + + + + + + kRtePlayerStatePaused + + + + + + + kRtePlayerStatePlaybackCompleted + + + + + + + kRtePlayerStateStopped + + + + + + + kRtePlayerStateFailed + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 0aae2d7c5eb..33c2ff9bf75 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3350,6 +3350,7 @@ + From a1abdf1432058800dd28ba405402251fb8c91183 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 16 Oct 2024 18:30:22 +0800 Subject: [PATCH 124/354] update --- .../API/api_canvasconfig_getmirrormode.dita | 2 +- .../API/api_canvasconfig_getrendermode.dita | 6 +- .../API/api_canvasconfig_setrendermode.dita | 2 +- dita/RTC-NG/API/api_config_getappid.dita | 8 +- dita/RTC-NG/API/api_config_setappid.dita | 7 +- .../api_playerconfig_getabrfallbacklayer.dita | 56 ++++++++ ..._playerconfig_getabrsubscriptionlayer.dita | 56 ++++++++ .../API/api_playerconfig_getautoplay.dita | 61 +++++++++ .../api_playerconfig_setabrfallbacklayer.dita | 63 +++++++++ ..._playerconfig_setabrsubscriptionlayer.dita | 64 +++++++++ .../API/api_playerconfig_setautoplay.dita | 60 ++++++++ dita/RTC-NG/API/api_rte_getconfigs.dita | 4 +- dita/RTC-NG/API/api_rte_getfrombridge.dita | 4 +- dita/RTC-NG/API/api_rte_initmediaengine.dita | 6 +- dita/RTC-NG/API/api_rte_setconfigs.dita | 2 +- ...layerobserver_onaudiovolumeindication.dita | 57 ++++++++ .../callback_playerobserver_onevent.dita | 25 +--- .../callback_playerobserver_onmetadata.dita | 62 +++++++++ ...ck_playerobserver_onplayerinfoupdated.dita | 57 ++++++++ dita/RTC-NG/API/class_playerconfig.dita | 6 + dita/RTC-NG/API/class_playerobserver.dita | 6 + dita/RTC-NG/API/enum_rteabrfallbacklayer.dita | 24 ++++ .../API/enum_rteabrsubscriptionlayer.dita | 52 +++++++ dita/RTC-NG/API/enum_rteplayerevent.dita | 41 ++++++ dita/RTC-NG/API/rtc_api_data_type.dita | 4 +- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 11 ++ .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 129 +++++++++++++++++- .../config/relations-rtc-ng-api.ditamap | 16 +++ 28 files changed, 845 insertions(+), 46 deletions(-) create mode 100644 dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_getautoplay.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_setautoplay.dita create mode 100644 dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita rename dita/RTC-NG/{config => API}/callback_playerobserver_onevent.dita (64%) create mode 100644 dita/RTC-NG/API/callback_playerobserver_onmetadata.dita create mode 100644 dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita create mode 100644 dita/RTC-NG/API/class_playerconfig.dita create mode 100644 dita/RTC-NG/API/class_playerobserver.dita create mode 100644 dita/RTC-NG/API/enum_rteabrfallbacklayer.dita create mode 100644 dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita create mode 100644 dita/RTC-NG/API/enum_rteplayerevent.dita diff --git a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita index 01aaed8354d..174dfaf955d 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita @@ -34,7 +34,7 @@
    调用时机 -

    该方法需要在 之后调用。

    +

    在创建类对象之后调用。//TODO

    调用限制 diff --git a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita index a1435df41d3..13dab60fa7a 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita @@ -31,10 +31,6 @@

    -

    -
    - 调用时机 -

    该方法需要在 之后调用。//TODO

    调用限制 @@ -50,7 +46,7 @@
    <ph keyref="return-section-title"/> -

    当前的视频渲染模式,详见

    +

    当前设置的视频渲染模式,详见

    diff --git a/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita index 7611c736a7a..9d83551a935 100644 --- a/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita @@ -34,7 +34,7 @@
    调用时机 -

    //TODO

    +

    //TODO setconfig 之前调用

    调用限制 diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index 67a3f179ee9..521259fb801 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -30,11 +30,7 @@
    v4.5.0
    -

    -
    -
    - 调用时机 -

    该方法需要在 之后调用。

    +

    调用限制 @@ -53,7 +49,7 @@

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    • 方法调用成功,返回设置的 App ID。
    • -
    • 方法调用失败,返回空字符串。
    • +
    • 方法调用失败,返回空字符串。//TODO 失败是抛出异常,不是返回空字符串。
    diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index 2e7edcb8e7a..a76acc47775 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -30,12 +30,11 @@
    v4.5.0
    -

    +

    调用时机 -

    //TODO 该方法需要在 后调用。

    -

    +

    //TODO 该方法需要在初始化之前调用。

    调用限制 @@ -46,7 +45,7 @@ appId - 你的项目的 App ID,在声网控制台获取。一个 App ID 只能用于创建一个 RtcEngine。如需更换 App ID,必须先调用 destroy 销毁当前 RtcEngine 再重新创建。//TODO rtc 有这个限制,rte 是否有同样的限制? + 你的项目的 App ID,在声网控制台获取。建议一个 App ID 创建一个 RtcEngine。如需更换 App ID,必须先调用 destroy 销毁当前 RtcEngine 再重新创建。//TODO 还需要确认 diff --git a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita new file mode 100644 index 00000000000..c3e1c7444b5 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita @@ -0,0 +1,56 @@ + + + + <ph keyref="GetAbrFallbackLayer"/> + 获取设置的视频流回退选项。 + + + + + + + + +
    +

    + public Constants.AbrFallbackLayer getAbrFallbackLayer() throws RteException; + + - (AgoraRteAbrFallbackLayer)abrFallbackLayer:(AgoraRteError * _Nullable)error; + AbrFallbackLayer GetAbrFallbackLayer(Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO是否有默认值?

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    设置的视频流回退选项,详见

    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita new file mode 100644 index 00000000000..f6d3ab56640 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita @@ -0,0 +1,56 @@ + + + + <ph keyref="GetAbrSubscriptionLayer"/> + 获取所订阅的视频流的质量层级。 + + + + + + + + +
    +

    + public Constants.AbrSubscriptionLayer getAbrSubscriptionLayer() throws RteException; + + - (AgoraRteAbrSubscriptionLayer)abrSubscriptionLayer:(AgoraRteError * _Nullable)error; + AbrSubscriptionLayer GetAbrSubscriptionLayer(Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO

    +

    +

    +
    + 调用时机 +

    //rte engine 之后。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    当前设置的视频质量层级,详见

    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita new file mode 100644 index 00000000000..fe6bdbda985 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita @@ -0,0 +1,61 @@ + + + + <ph keyref="GetAutoPlay"/> + 获取自动播放设置。 + + + + + + + + +
    +

    + public boolean getAutoPlay() throws RteException; + + - (BOOL)autoPlay:(AgoraRteError * _Nullable)error; + bool GetAutoPlay(Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    你可以调用该方法来得知当前播放器是否开启了自动播放。

    +

    +

    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    获取自动播放设置是否成功:

      +
    • :获取成功。
    • +
    • :获取失败。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita new file mode 100644 index 00000000000..e88c5861870 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="SetAbrFallbackLayer"/> + 设置订阅的视频流的回退选项。 + + + + + + + + +
    +

    + public void setAbrFallbackLayer(Constants.AbrFallbackLayer fallbackLayer) throws RteException; + + - (void)setAbrFallbackLayer:(AgoraRteAbrFallbackLayer)layer error:(AgoraRteError * _Nullable)error; + void SetAbrFallbackLayer(AbrFallbackLayer abr_fallback_layer, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO 应该也需要开启 abr?如果没开,1-6 layer 不能切换。

    +

    +

    +
    + 适用场景 +

    你可以调用该方法来设置网络环境不稳定时,视频流的回退选项。以确保视听体验。你可以根据需求设置回退到不同质量层级的视频流,分别对应不同的视频分辨率和码率。//TODO 分两个场景讨论,普通场景(只能切 audio only 和low),如果有高的要求,开启abr。

    +
    +
    + 调用时机 +

    //engine 之后。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + fallbackLayer + abr_fallback_layer + layer + 视频流回退的质量层级,详见 + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita new file mode 100644 index 00000000000..406cdafa369 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita @@ -0,0 +1,64 @@ + + + + <ph keyref="SetAbrSubscriptionLayer"/> + 设置订阅的媒体流的质量层级。 + + + + + + + + +
    +

    + public void setAbrSubscriptionLayer(Constants.AbrSubscriptionLayer subscriptionLayer) throws RteException; + + - (void)setAbrSubscriptionLayer:(AgoraRteAbrSubscriptionLayer)layer error:(AgoraRteError * _Nullable)error; + void SetAbrSubscriptionLayer(AbrSubscriptionLayer abr_subscription_layer, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    //TODO 使用这个方法需要额外找销售开通 abr 功能吗?切换 layer1-6 需要开通。不同的视频质量层级对应不同的分辨率和码率。//TODO 链接到最佳实践:补充源频道和转码频道的差异。 +

    +

    +

    +
    + 适用场景 +

    在网络环境不稳定的情况下,观众端可以根据实际的网络状况来选择合适的视频质量级别,以保证流畅的观感体验。

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    //TODO

    +
    +
    + 参数 + + + subscriptionLayer + abr_subscription_layer + layer + 订阅的视频质量层级,详见 + + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setautoplay.dita b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita new file mode 100644 index 00000000000..5a21026c35b --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita @@ -0,0 +1,60 @@ + + + + <ph keyref="SetAutoPlay"/> + 设置是否自动播放。 + + + + + + + + +
    +

    + public void setAutoPlay(boolean autoPlay) throws RteException; + + - (void)setAutoPlay:(BOOL)autoPlay error:(AgoraRteError * _Nullable)error; + void SetAutoPlay(bool auto_play, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    当你调用 打开媒体流之后,你可以调用该方法设置是否自动播放。如不设置,默认会启用自动播放。

    +

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + autoPlay + auto_play + 是否自动播放: +
    • :(默认)开启自动播放。
    • +
    • :(默认)关闭自动播放。
    +
    + + + + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_rte_getconfigs.dita b/dita/RTC-NG/API/api_rte_getconfigs.dita index 1d97321bd2a..f724c22694a 100644 --- a/dita/RTC-NG/API/api_rte_getconfigs.dita +++ b/dita/RTC-NG/API/api_rte_getconfigs.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    //TODO 如果没有调用 setconfig,用的是默认配置吗?

    +

    调用时机 -

    //TODO

    +

    //TODO 创建 rte 对象之后。

    调用限制 diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index adb5f6d5c72..dd0f52d5962 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    此方法适用于已经初始化了 RTC 引擎的场景,可以省去 RTE 引擎的初始化步骤。//TODO 如果没有初始化 rtc 引擎,是否需要调用 RTE + InitMediaEngine?

    +

    此方法适用于已经初始化了 RTC 引擎的场景,可以省去 RTE 引擎的初始化步骤。//TODO 如果没有初始化 rtc 引擎,是否需要调用 RTE + InitMediaEngine。需要。两种初始化方法,一个是bridge,一个是rte+init。

    调用时机 @@ -55,7 +55,7 @@

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    • 方法调用成功,返回一个 RTE 对象。
    • -
    • 方法调用失败,返回空指针。你可以根据 errerror 参数中返回的错误码了解详情。
    • +
    • 方法调用失败也会返回对象,//TODO 会返回 invalidoperation。你可以根据 errerror 参数中返回的错误码了解详情。
    • 方法调用失败,抛出 异常,你需要捕获异常并进行处理。
    diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index 8d67a47ec70..3bb662af9d9 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -35,7 +35,7 @@
    调用时机 -

    //TODO

    +

    在创建对象和设置appid之后。

    调用限制 @@ -46,11 +46,11 @@ cb - 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数,并向回调中的 err 传参。这个参数包含了引擎初始化的结果或错误码信息,详见 。//TODO 没找到原型 + 一个异步回调函数,用于返回引擎初始化结果。并向回调中的 err 传参。这个参数包含了引擎初始化的结果或错误码信息,详见 。//TODO 改下描述,不是所有情况都会调用这个会调。 callback - 一个异步回调函数,用于返回引擎初始化结果。引擎初始化无论成功还是失败,SDK 都会调用该回调函数并根据情况返回下列状态或错误码://TODO 是否直接链接到 Error 这个类?还是要写出来每个枚举值。 + 一个异步回调函数,用于返回引擎初始化结果。根据情况返回下列状态或错误码://TODO 是否直接链接到 Error 这个类?还是要写出来每个枚举值。
    • (0): 初始化成功。
    • (1): 初始化引擎失败。//TODO 错误信息通过 message 得知。这个方法应该也要写文档?
    diff --git a/dita/RTC-NG/API/api_rte_setconfigs.dita b/dita/RTC-NG/API/api_rte_setconfigs.dita index 556d53d02f9..953b5706d39 100644 --- a/dita/RTC-NG/API/api_rte_setconfigs.dita +++ b/dita/RTC-NG/API/api_rte_setconfigs.dita @@ -35,7 +35,7 @@
    调用时机 -

    //TODO

    +

    //TODO设置 app id 必须在初始化之前,其他的选项可以按需随时更新。

    调用限制 diff --git a/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita b/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita new file mode 100644 index 00000000000..1c3e467eabd --- /dev/null +++ b/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="onAudioVolumeIndication_PlayerObserver"/> + //TODO 主播音量提示回调。这个不是播放器的音量? + + + + + + + + +
    +

    + public void onAudioVolumeIndication(int volume){} + + - (void)onAudioVolumeIndication:(int32_t)volume; + virtual void onAudioVolumeIndication(int32_t volume) = 0; + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 适用场景 +

    +

    +
    + 触发时机 +

    当主播的音量发生变化时,SDK 会触发该回调。//TODO 触发频率?主播静音后,会继续报告音量为 0 吗?

    +
    +
    + 使用限制 +

    无。

    +
    +
    + 参数 + + + volume + 主播当前的音量,取值范围为 [0,225]。 + +
    +
    +
    diff --git a/dita/RTC-NG/config/callback_playerobserver_onevent.dita b/dita/RTC-NG/API/callback_playerobserver_onevent.dita similarity index 64% rename from dita/RTC-NG/config/callback_playerobserver_onevent.dita rename to dita/RTC-NG/API/callback_playerobserver_onevent.dita index 30d716bf1db..68fe870d3b7 100644 --- a/dita/RTC-NG/config/callback_playerobserver_onevent.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onevent.dita @@ -2,7 +2,7 @@ <ph keyref="onEvent"/> - + 播放器事件回调。 @@ -28,37 +28,26 @@
    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    如果你需要监控播放器事件,需要在调用 方法时注册该回调。

    触发时机 -

    +

    //TODO 什么情况下会触发?

    使用限制 -

    +

    无。

    参数 - - + event + 播放器事件,详见
    -
    - <ph keyref="return-section-title"/> -

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    diff --git a/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita new file mode 100644 index 00000000000..f88c7f4798a --- /dev/null +++ b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita @@ -0,0 +1,62 @@ + + + + <ph keyref="onMetadata_PlayerObserver"/> + 已获取媒体附属信息回调。 + + + + + + + + +
    +

    + public void onMetadata(int type, byte[] data){} + + - (void)onMetadata:(AgoraRtePlayerMetadataType)type data:(NSData * _Nonnull)data; + virtual void onMetadata(PlayerMetadataType type, + const uint8_t *data, size_t length) = 0; + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    如果你需要获取媒体流的元数据,需要在调用 方法时注册该回调。

    +
    +
    + 触发时机 +

    在 SDK 解析播放器所播放的媒体流的元数据后,会触发该回调报告数据的类型及其具体内容。//TODO review

    +
    +
    + 使用限制 +

    无。

    +
    +
    + 参数 + + + type + 元数据类型,详见 + + + data + 解析的元数据。 + + + length + 数据的大小(字节)。 + +
    +
    +
    diff --git a/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita b/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita new file mode 100644 index 00000000000..4df44b4f01d --- /dev/null +++ b/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="onPlayerInfoUpdated_PlayerObserver"/> + 媒体流的相关信息发生变化回调。 + + + + + + + + +
    +

    + public void onPlayerInfoUpdated(PlayerInfo info){} + + - (void)onPlayerInfoUpdated:(AgoraRtePlayerInfo * _Nonnull)info; + virtual void onPlayerInfoUpdated(const PlayerInfo *info) = 0; + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    如果你需要获取媒体流的相关信息,可以在调用 方法时注册该回调,或者通过 方法来获取。

    +
    +
    + 适用场景 +

    +

    +
    + 触发时机 +

    当播放器播放的媒体流的相关信息发生变化时,SDK 会触发该回调。

    +
    +
    + 使用限制 +

    无。

    +
    +
    + 参数 + + + info + 媒体流的相关信息,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita new file mode 100644 index 00000000000..b54d8e44e56 --- /dev/null +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="PlayerConfig"/> + 播放器设置的接口类。 + diff --git a/dita/RTC-NG/API/class_playerobserver.dita b/dita/RTC-NG/API/class_playerobserver.dita new file mode 100644 index 00000000000..93d13f32ea4 --- /dev/null +++ b/dita/RTC-NG/API/class_playerobserver.dita @@ -0,0 +1,6 @@ + + + + <ph keyref="PlayerObserver"/> + 提供播放器回调的接口类。 + diff --git a/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita new file mode 100644 index 00000000000..68679d8fe3c --- /dev/null +++ b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita @@ -0,0 +1,24 @@ + + + + <ph keyref="RteAbrFallbackLayer"/> + 视频流回退的质量层级。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + + + +
    +
    diff --git a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita new file mode 100644 index 00000000000..58a3018d75d --- /dev/null +++ b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita @@ -0,0 +1,52 @@ + + + + <ph keyref="RteAbrSubscriptionLayer"/> + 订阅的视频流的质量层级。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + 0:高质量视频流。//TODO 每个层级能否明确对应的码率和分辨率是多少? + + + + 1:(默认)低质量的视频流。 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    diff --git a/dita/RTC-NG/API/enum_rteplayerevent.dita b/dita/RTC-NG/API/enum_rteplayerevent.dita new file mode 100644 index 00000000000..0cfebefe4ba --- /dev/null +++ b/dita/RTC-NG/API/enum_rteplayerevent.dita @@ -0,0 +1,41 @@ + + + + <ph keyref="RtePlayerEvent"/> + 播放器事件类型。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值//TODO 目前不可用的枚举文档不对外暴露。 + + + + 5:卡顿开始。//TODO 当音视频流出现卡顿时,会报告该事件。用户在什么场景下需要知道卡顿开始和结束的时间? + + + + 6:卡顿结束。 + + + + 8:Token 即将过期。在收到此事件后你需要重新生成一个新的 Token 并更新 URL。//TODO + + + + 9:由于网络问题,音视频流回退为音频流。 + 该参数需要开通自适应码率功能并需要设置允许流回退。详情请//TODO + + + + 10:网络状态恢复后,从仅接收音频流恢复到接收音视频流。该参数需要开通自适应码率功能并需要设置允许流回退。详情请 + + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 6435c5ccea5..a5a9dcc37fb 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -102,6 +102,7 @@
  • +
  • @@ -1241,10 +1242,10 @@
  • -
  • +
  • @@ -1278,6 +1279,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index b5603c9b9d5..fa54026f12b 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -50,6 +50,8 @@ + + @@ -465,15 +467,21 @@ + + + + + + @@ -485,6 +493,9 @@ + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 274621f114c..b75d111519a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -329,6 +329,20 @@ + + + + PlayerConfig + + + + + + + PlayerObserver + + + @@ -987,6 +1001,13 @@ + + + + GetAutoPlay + + + @@ -1022,6 +1043,13 @@ + + + + SetAutoPlay + + + @@ -1043,6 +1071,34 @@ + + + + SetAbrFallbackLayer + + + + + + + SetAbrSubscriptionLayer + + + + + + + GetAbrFallbackLayer + + + + + + + GetAbrSubscriptionLayer + + + @@ -1199,6 +1255,27 @@ + + + + onEvent + + + + + + + onMetadata [2/2] + + + + + + + onPlayerInfoUpdated [2/2] + + + @@ -4774,7 +4851,7 @@ - onMetaData + onMetaData [1/2] @@ -4858,7 +4935,7 @@ - onPlayerInfoUpdated + onPlayerInfoUpdated [1/2] @@ -5901,6 +5978,13 @@ + + + + RtePlayerInfo + + + @@ -11419,6 +11503,47 @@ + + + + RtePlayerEvent + + + + + + + kRtePlayerEventFreezeStart + + + + + + + kRtePlayerEventFreezeStop + + + + + + + kRtePlayerEventAuthenticationWillExpire + + + + + + + kRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + kRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 33c2ff9bf75..69df4a31d27 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3350,6 +3350,22 @@ + + + + + + + + + + + + + + + + From adcb942cabdc5106f5be3df60f59494dc87b72cf Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:21:01 +0800 Subject: [PATCH 125/354] 1 --- .../class_localaudiomixerconfiguration.dita | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 6e942c630bb..08190270add 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -70,25 +70,9 @@ 合流后的音频流是否使用本地麦克风采集的音频帧时间戳:
    • :(默认)使用本地麦克风采集的音频帧时间戳。如果要所有本地采集的音频流保持同步,你可以将参数设置为该值。
    • -
    • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流的音频帧被构建时的时间戳。如果你需要将接收到的远端合流
    • +
    • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流音频帧被构建时的时间戳。
    -
    - - - - - - -
    -
    - 方法 - - - - - -
    From 7f45c8112b95b1dff1fdf452bb152c902be716f6 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 17 Oct 2024 11:02:56 +0800 Subject: [PATCH 126/354] shift filter 1 & 2 --- ...api_irtcengine_setfiltereffectoptions.dita | 11 +++----- ...pi_irtcengine_setfiltereffectoptions2.dita | 27 +++++-------------- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 4 +-- .../config/keys-rtc-ng-api-macos.ditamap | 4 +-- 4 files changed, 14 insertions(+), 32 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 8059f97d507..aecdf5dbba2 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -13,9 +13,10 @@

    - public abstract int setFilterEffectOptions(boolean enabled, FilterEffectOptions options); + public abstract int setFilterEffectOptions( + boolean enabled, FilterEffectOptions options, Constants.MediaSourceType sourceType); - - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options NS_SWIFT_NAME(setFilterEffectOptions(_:options:)); + - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; @@ -30,7 +31,7 @@

    v4.5.0
    -

    +

    该方法和 均可用于设置滤镜效果选项,区别在于该方法支持在设置滤镜效果选项时指定应用滤镜的媒体源。

    调用时机 @@ -61,10 +62,6 @@ options 滤镜选项,详细定义见 - - - -
    <ph keyref="return-section-title"/> diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita index 07419ccd695..113941c5310 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions2.dita @@ -2,7 +2,7 @@ <ph keyref="setFilterEffectOptions2"/> - 设置滤镜效果选项并指定媒体源。 + 设置滤镜效果选项。 @@ -13,10 +13,9 @@

    - public abstract int setFilterEffectOptions( - boolean enabled, FilterEffectOptions options, Constants.MediaSourceType sourceType); + public abstract int setFilterEffectOptions(boolean enabled, FilterEffectOptions options); - - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); + - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options NS_SWIFT_NAME(setFilterEffectOptions(_:options:)); @@ -33,22 +32,12 @@

    -
    - 调用时机 -

    请在 之后调用该方法。

    -
    -
    - 调用限制 -
      -
    • 该方法仅适用于 Android 5.0 及以上版本。
    • -
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • -
    • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
    • -
    -
    +
    +
    参数 - + @@ -56,10 +45,6 @@ - - - -
    <ph keyref="return-section-title"/> diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index c0149bbc11a..6cdf1db234b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1229,14 +1229,14 @@ - setFilterEffectOptions:options: + setFilterEffectOptions:options:sourceType: - setFilterEffectOptions:options:sourceType: + setFilterEffectOptions:options: diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 52174ba08bb..59ab338a18f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1179,14 +1179,14 @@ - setFilterEffectOptions:options: + setFilterEffectOptions:options:sourceType: - setFilterEffectOptions:options:sourceType: + setFilterEffectOptions:options: From 03b98052b4a03f665484da2b5d602f818b4b7d98 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 17 Oct 2024 11:05:18 +0800 Subject: [PATCH 127/354] add type --- .../API/api_irtcengine_setfiltereffectoptions.dita | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index aecdf5dbba2..e702b9eaafc 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -62,6 +62,17 @@ options 滤镜选项,详细定义见 + + type + sourceType + 效果应用的媒体源类型。详见 。 + 在该方法中,该参数仅支持以下三种设置: +
      +
    • 默认值为
    • +
    • 如果要使用第二个摄像头采集视频,将该参数设置为
    • +
    • 如果要使用自定义采集的视频,将该参数设置为
    • +
    +
    <ph keyref="return-section-title"/> From e63fe17304db4c2c2b472191d9546560bafb086c Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 17 Oct 2024 11:44:17 +0800 Subject: [PATCH 128/354] Update api_irtcengine_sendstreammessage.dita --- dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita index f5b4c67aab8..58fab7580a6 100644 --- a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita +++ b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita @@ -38,9 +38,8 @@

    调用 后,你可以调用该方法向频道内所有用户发送数据流消息。

    SDK 对该方法的实现进行了如下限制:

      -
    • 频道内每人最多能同时有 5 个数据通道。
    • -
    • 每个数据通道每秒最多能发送 60 个包(每个包最大为 1 KB)。
    • -
    • 每个数据通道每秒最多能发送 30 KB 数据。
    • +
    • 频道内每人最多可以同时拥有 5 个数据通道,所有数据通道共用的总发包码率限制为 30 KB/s。
    • +
    • 每个数据通道每秒最多能发送 60 个包,每个包最大为 1 KB。

    成功调用该方法后,远端会触发 回调,远端用户可以在该回调中获取接收到的流消息;若调用失败,远端会触发 回调。

    From 6686fab3f7f111f6cdd79086ecfc8a2866269eda Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 17 Oct 2024 12:25:52 +0800 Subject: [PATCH 129/354] Update api_irtcengine_enablelocalaudio.dita --- dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita b/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita index 3e7060fde5a..72e1411cc1d 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita @@ -35,7 +35,7 @@
    适用场景 -

    该方法不影响接收远端音频流,() 适用于只听不发的用户场景。

    +

    该方法不影响远端音频流的接收和播放。() 适用于只接收远端音频而不发送本地采集音频的场景。

    调用时机 From 16620d7bc7f7927e77773fbeb61a2846fc097a25 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:24:36 +0800 Subject: [PATCH 130/354] bugfix --- ...allback_irtcengineeventhandler_onlocalvideostatechanged.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita index 860ba4fcdfb..e74a6924fdf 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita @@ -101,7 +101,7 @@
  • (8):找不到本地视频采集设备。需检查摄像头是否与设备正常连接、摄像头是否正常工作,或者尝试重新加入频道。
  • (14):视频采集中断。可能的原因是:
    • 摄像头被其他 App 占用。请提示用户检查摄像头是否被其他 App 占用。
    • -
    • 当前 App 已被切换到后台。可以使用前台服务通知操作系统,确保 App 在切换到后台时仍可采集视频。详见
    • +
    • 设备已锁屏,或当前 App 已被切换到后台。可以使用前台服务通知操作系统,确保 App 在切换到后台时仍可采集视频。详见
  • (15):视频采集设备出错。请提示用户关闭并重新启动摄像头以恢复功能,如果该操作不能解决问题,请检查摄像头是否出现硬件故障。
  • From 5da70c80b7d601a627f0af06d80694ddcb5944c0 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 17 Oct 2024 14:42:24 +0800 Subject: [PATCH 131/354] add quality_detecting for android --- dita/RTC-NG/API/class_remoteaudiostats.dita | 1 + dita/RTC-NG/API/enum_qualitytype.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_remoteaudiostats.dita b/dita/RTC-NG/API/class_remoteaudiostats.dita index ffe38c4385a..b2f8bf2c5bc 100644 --- a/dita/RTC-NG/API/class_remoteaudiostats.dita +++ b/dita/RTC-NG/API/class_remoteaudiostats.dita @@ -433,6 +433,7 @@ class RemoteAudioStats {
  • (4):勉强能沟通但不顺畅。
  • (5):网络质量非常差,基本不能沟通。
  • (6):网络连接断开,完全无法沟通。
  • +
  • (8):网络质量检测进行中。
  • diff --git a/dita/RTC-NG/API/enum_qualitytype.dita b/dita/RTC-NG/API/enum_qualitytype.dita index a63c2528926..49b94312fb9 100644 --- a/dita/RTC-NG/API/enum_qualitytype.dita +++ b/dita/RTC-NG/API/enum_qualitytype.dita @@ -41,7 +41,7 @@ - 8: 网络质量检测已开始还没完成。 + 8: 网络质量检测进行中。
    diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index dd3da6e473e..32493d241d6 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -9838,6 +9838,13 @@ + + + + QUALITY_DETECTING + + + From f9aa0271af42e384a8adc10357c40613790c664f Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:22:46 +0800 Subject: [PATCH 132/354] NMS-20533 temp --- ...tcengine_startscreencapturebywindowid.dita | 2 +- ...eventhandler_onlocalvideostatechanged.dita | 1 + .../API/class_screencaptureconfiguration.dita | 4 +-- .../API/class_screencapturesourceinfo.dita | 29 +++++++++-------- .../API/enum_localvideostreamreason.dita | 2 +- dita/RTC-NG/RTC_NG_API_iOS.ditamap | 32 +++++++++---------- .../config/keys-rtc-ng-api-java.ditamap | 7 ++++ 7 files changed, 43 insertions(+), 34 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita index 133e7274885..b4d09d894c4 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita @@ -18,7 +18,7 @@ - (int)startScreenCaptureByWindowId:(UInt32)windowId regionRect:(CGRect)regionRect captureParams:(AgoraScreenCaptureParameters *_Nonnull)captureParams; - virtual int startScreenCaptureByWindowId(view_t windowId, + virtual int startScreenCaptureByWindowId(int64_t windowId, const Rectangle& regionRect, const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita index 80303ddd223..2c69a47936d 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideostatechanged.dita @@ -104,6 +104,7 @@
  • 当前 App 已被切换到后台。可以使用前台服务通知操作系统,确保 App 在切换到后台时仍可采集视频。详见
  • (15):视频采集设备出错。请提示用户关闭并重新启动摄像头以恢复功能,如果该操作不能解决问题,请检查摄像头是否出现硬件故障。
  • +
  • (21):当前采集的窗口无数据。
  • diff --git a/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/dita/RTC-NG/API/class_screencaptureconfiguration.dita index a00b7899045..e61e9403b46 100644 --- a/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -26,9 +26,9 @@ __attribute__((visibility("default"))) @interface AgoraScreenCaptureConfiguratio #endif
    struct ScreenCaptureConfiguration { bool isCaptureWindow; - uint32_t displayId; + int64_t displayId; Rectangle screenRect; - view_t windowId; + int64_t windowId; ScreenCaptureParameters params; Rectangle regionRect; diff --git a/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/dita/RTC-NG/API/class_screencapturesourceinfo.dita index 78f0e8d5471..607faf82b32 100644 --- a/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -22,22 +22,23 @@ @end struct ScreenCaptureSourceInfo { - ScreenCaptureSourceType type; - view_t sourceId; - const char* sourceName; - ThumbImageBuffer thumbImage; - ThumbImageBuffer iconImage; - const char* processPath; - const char* sourceTitle; - bool primaryMonitor; + ScreenCaptureSourceType type; + int64_t sourceId; + const char* sourceName; + ThumbImageBuffer thumbImage; + ThumbImageBuffer iconImage; + const char* processPath; + const char* sourceTitle; + bool primaryMonitor; + bool isOccluded; + Rectangle position; #if defined(_WIN32) - Rectangle position; - bool minimizeWindow; - view_t sourceDisplayId; - ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(nullptr), sourceName(nullptr), - processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false), minimizeWindow(false), sourceDisplayId((view_t)-2) {} + bool minimizeWindow; + int64_t sourceDisplayId; + ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(0), sourceName(nullptr), + processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false), minimizeWindow(false), sourceDisplayId(-2) {} #else - ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(nullptr), sourceName(nullptr), processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false) {} + ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(0), sourceName(nullptr), processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false) {} #endif }; USTRUCT(BlueprintType) diff --git a/dita/RTC-NG/API/enum_localvideostreamreason.dita b/dita/RTC-NG/API/enum_localvideostreamreason.dita index dfc6893f915..0e1124ef6c6 100644 --- a/dita/RTC-NG/API/enum_localvideostreamreason.dita +++ b/dita/RTC-NG/API/enum_localvideostreamreason.dita @@ -98,7 +98,7 @@ - 21:(仅适用于 Windows)当前采集的窗口无数据。 + 21:(仅适用于 Windows 和 Android)当前采集的窗口无数据。 diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index df8c48eba86..7939ae02880 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -90,6 +90,10 @@ + + + + @@ -102,6 +106,12 @@ + + + + + + @@ -309,6 +319,12 @@ + + + + + + @@ -344,22 +360,6 @@ - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index dd3da6e473e..00e56230c0d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -8774,6 +8774,13 @@
    + + + + LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE + + + From 0a5fd2a39fa7e837e7bc2990ecb5390a3c2a8ac1 Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 17 Oct 2024 15:06:25 +0800 Subject: [PATCH 133/354] 1 --- dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita | 2 +- dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita b/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita index 72e1411cc1d..3d551d0fb8e 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablelocalaudio.dita @@ -35,7 +35,7 @@
    适用场景 -

    该方法不影响远端音频流的接收和播放。() 适用于只接收远端音频而不发送本地采集音频的场景。

    +

    该方法不影响远端音频流的接收和播放。() 适用于只接收远端音频而不发送本地采集音频的场景。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita index 58fab7580a6..51fb0e395cd 100644 --- a/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita +++ b/dita/RTC-NG/API/api_irtcengine_sendstreammessage.dita @@ -38,7 +38,7 @@

    调用 后,你可以调用该方法向频道内所有用户发送数据流消息。

    SDK 对该方法的实现进行了如下限制:

      -
    • 频道内每人最多可以同时拥有 5 个数据通道,所有数据通道共用的总发包码率限制为 30 KB/s。
    • +
    • 频道内每个客户端最多可以同时拥有 5 个数据通道,所有数据通道共用的总发包码率限制为 30 KB/s。
    • 每个数据通道每秒最多能发送 60 个包,每个包最大为 1 KB。

    成功调用该方法后,远端会触发 回调,远端用户可以在该回调中获取接收到的流消息;若调用失败,远端会触发 回调。

    From 09e015f9e9866f87e561ac26f6f5c6c56ed62902 Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Thu, 17 Oct 2024 07:26:39 +0000 Subject: [PATCH 134/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index dd3da6e473e..32493d241d6 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -9838,6 +9838,13 @@ + + + + QUALITY_DETECTING + + + From 664444bd6ad1c3a50e2132654885716c7acb7a4e Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 17 Oct 2024 15:28:40 +0800 Subject: [PATCH 135/354] 450 --- dita/RTC-NG/API/api_config_getappid.dita | 12 ++-- .../API/api_config_getjsonparameter.dita | 61 +++++++++++++++++ dita/RTC-NG/API/api_config_setappid.dita | 6 +- .../API/api_config_setjsonparameter.dita | 65 +++++++++++++++++++ .../api_playerconfig_getjsonparameter.dita | 53 +++++++++++++++ .../api_playerconfig_setjsonparameter.dita | 61 +++++++++++++++++ dita/RTC-NG/API/api_rte_setconfigs.dita | 10 +-- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 28 ++++++++ .../config/relations-rtc-ng-api.ditamap | 15 ++++- 10 files changed, 302 insertions(+), 13 deletions(-) create mode 100644 dita/RTC-NG/API/api_config_getjsonparameter.dita create mode 100644 dita/RTC-NG/API/api_config_setjsonparameter.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita create mode 100644 dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index 521259fb801..77442b0a69a 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    +

    调用限制 @@ -45,11 +45,13 @@
    - <ph keyref="return-section-title"/> + <ph keyref="return-section-title" props="cpp apple framework"/> + <ph props="android">异常</ph>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      +
      • 方法调用成功,返回设置的 App ID。
      • -
      • 方法调用失败,返回空字符串。//TODO 失败是抛出异常,不是返回空字符串。
      • -
    +
  • 方法调用失败,返回空字符串。
  • + +

    diff --git a/dita/RTC-NG/API/api_config_getjsonparameter.dita b/dita/RTC-NG/API/api_config_getjsonparameter.dita new file mode 100644 index 00000000000..a7c5c60649b --- /dev/null +++ b/dita/RTC-NG/API/api_config_getjsonparameter.dita @@ -0,0 +1,61 @@ + + + + <ph keyref="GetJsonParameter_Config"/> + 获取已设置的 SDK JSON 配置信息。 + + + + + + + + +
    +

    + public String getJsonParameter() throws RteException; + + - (NSString * _Nullable)jsonParameter:(AgoraRteError * _Nullable)error; + std::string GetJsonParameter(Error *err = nullptr) + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    当你调用 设置 JSON 配置信息后,你可以调用该方法获取已设置的配置信息。

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    + <ph keyref="return-section-title" props="cpp apple framework"/> + <ph props="android">异常</ph> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 方法调用成功,返回设置的 JSON 配置信息。
    • +
    • 方法调用失败,返回空字符串。
    • +
    +

    +
    +
    diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index a76acc47775..b223b00d102 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -30,11 +30,10 @@
    v4.5.0
    -

    调用时机 -

    //TODO 该方法需要在初始化之前调用。

    +

    该方法需要在 之前调用。

    调用限制 @@ -52,5 +51,8 @@
    +
    + <ph props="android">异常</ph> +

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    diff --git a/dita/RTC-NG/API/api_config_setjsonparameter.dita b/dita/RTC-NG/API/api_config_setjsonparameter.dita new file mode 100644 index 00000000000..38c1c72a20f --- /dev/null +++ b/dita/RTC-NG/API/api_config_setjsonparameter.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="SetJsonParameter_Config"/> + 设置 SDK 的 JSON 配置信息。 + + + + + + + + +
    +

    + public void setJsonParameter(String jsonParameter) throws RteException; + + - (void)setJsonParameter:(NSString * _Nullable)jsonParameter error:(AgoraRteError * _Nullable)error; + void SetJsonParameter(const char *json_parameter, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 适用场景 +

    当你需要设置私有参数或使用定制功能时,可以调用该方法。

    +
    +
    + 调用时机 +

    该方法需要在创建 对象之后调用。//TODO 这个config对象是在setconfig的时候创建的,所以可不可以说需要在 setconfig 之后调用?

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + jsonParameter + json_parameter + JSON 字符串形式的参数。 + + + + + +
    +
    + <ph>异常</ph> +

    +
    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita new file mode 100644 index 00000000000..56b85c04422 --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita @@ -0,0 +1,53 @@ + + + + <ph keyref="GetJsonParameter_PlayerConfig"/> + 获取设置的媒体播放器的 JSON 配置信息。 + + + + + + + + +
    +

    + public String getJsonParameter() throws RteException; + + - (NSString * _Nullable)jsonParameter:(AgoraRteError * _Nullable)error; + std::string GetJsonParameter(Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    + 当你调用 设置 JSON 配置信息后,你可以调用该方法获取已设置的配置信息。 +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + +
    +
    +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita new file mode 100644 index 00000000000..1b9b4492dcc --- /dev/null +++ b/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita @@ -0,0 +1,61 @@ + + + + <ph keyref="SetJsonParameter_PlayerConfig"/> + 设置播放器的 JSON 配置信息。 + + + + + + + + +
    +

    + public void setJsonParameter(String jsonParameter) throws RteException; + + - (void)setJsonParameter:(NSString * _Nonnull)jsonParameter error:(AgoraRteError * _Nullable)error; + void SetJsonParameter(const char *json_parameter, Error *err = nullptr); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 适用场景 +

    当你需要设置私有参数或使用定制功能时,可以调用该方法。

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + +
    +
    + + diff --git a/dita/RTC-NG/API/api_rte_setconfigs.dita b/dita/RTC-NG/API/api_rte_setconfigs.dita index 953b5706d39..d5ea7da9996 100644 --- a/dita/RTC-NG/API/api_rte_setconfigs.dita +++ b/dita/RTC-NG/API/api_rte_setconfigs.dita @@ -31,7 +31,7 @@

    你可以调用该方法来设置 App ID、SDK 日志文件、服务器的访问区域等信息。

    -

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    +
    调用时机 @@ -54,13 +54,15 @@ 状态或错误信息,详见
    -
    - <ph keyref="return-section-title"/> +
    + <ph keyref="return-section-title" props="cpp apple framework"/> + <ph props="android">异常</ph>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    配置是否成功:

    • :配置成功。
    • :配置失败。
    -

    +

    +

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index fa54026f12b..21f2f271e42 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -468,13 +468,15 @@ + - + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b75d111519a..2c878e68226 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1169,6 +1169,20 @@ + + + + SetJsonParameter [1/2] + + + + + + + SetJsonParameter [2/2] + + + @@ -1197,6 +1211,20 @@ + + + + GetJsonParameter [1/2] + + + + + + + GetJsonParameter [2/2] + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 69df4a31d27..0af40fce53c 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3302,7 +3302,18 @@ - + + + + + + + + + + + + @@ -3340,8 +3351,10 @@ + + From ea1cb069f82e94277e8c11b57e9d1d0b81efe73a Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 17 Oct 2024 15:52:12 +0800 Subject: [PATCH 136/354] Update relations-rtc-ng-api.ditamap --- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index ed9d9bede9c..03699c712aa 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2605,7 +2605,7 @@ - + From ed1e827ed34d9dfa9b4a4df15ba465fb749b0eef Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 18 Oct 2024 10:55:32 +0800 Subject: [PATCH 137/354] fix typo --- dita/RTC-NG/API/class_filtereffectoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index 1b73a3a369f..6b516c626e2 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -46,7 +46,7 @@ LUT_3D_SIZE 32
      -
    • 立方体贴图文件首行的 LUT_3D_SIZE 标识符表示三位查找表的尺寸,滤镜效果的 LUT 尺寸目前仅支持设为 32。
    • +
    • 立方体贴图文件首行的 LUT_3D_SIZE 标识符表示三维查找表的尺寸,滤镜效果的 LUT 尺寸目前仅支持设为 32。
    • SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,传入该文件的绝对路径可实现美白滤镜效果。
    From 122497f66c012da547f20ed93cf20c88c2cb0dc7 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 18 Oct 2024 11:03:25 +0800 Subject: [PATCH 138/354] NMS-22321 --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 92 +++++++++ ...i_irtcengine_getfaceshapeareaoptions2.dita | 63 ++++++ ..._irtcengine_getfaceshapebeautyoptions.dita | 69 +++++++ ...irtcengine_getfaceshapebeautyoptions2.dita | 69 +++++++ ...pi_irtcengine_setfaceshapeareaoptions.dita | 73 +++++++ ...i_irtcengine_setfaceshapeareaoptions2.dita | 72 +++++++ ..._irtcengine_setfaceshapebeautyoptions.dita | 89 +++++++++ ...irtcengine_setfaceshapebeautyoptions2.dita | 73 +++++++ .../API/class_faceshapeareaoptions.dita | 97 +++++++++ .../API/class_faceshapebeautyoptions.dita | 63 ++++++ dita/RTC-NG/API/enum_faceshapearea.dita | 72 +++++++ .../RTC-NG/API/enum_faceshapebeautystyle.dita | 28 +++ dita/RTC-NG/API/rtc_api_data_type.dita | 16 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 8 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 + dita/RTC-NG/RTC_NG_API_iOS.ditamap | 8 + dita/RTC-NG/RTC_NG_API_macOS.ditamap | 8 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 161 +++++++++++++++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 189 ++++++++++++++++++ .../config/keys-rtc-ng-api-java.ditamap | 175 ++++++++++++++++ .../config/keys-rtc-ng-api-macos.ditamap | 189 ++++++++++++++++++ .../config/relations-rtc-ng-api.ditamap | 8 + 22 files changed, 1626 insertions(+) create mode 100644 dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita create mode 100644 dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita create mode 100644 dita/RTC-NG/API/class_faceshapeareaoptions.dita create mode 100644 dita/RTC-NG/API/class_faceshapebeautyoptions.dita create mode 100644 dita/RTC-NG/API/enum_faceshapearea.dita create mode 100644 dita/RTC-NG/API/enum_faceshapebeautystyle.dita diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita new file mode 100644 index 00000000000..4bb497882e4 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -0,0 +1,92 @@ + + + + <ph keyref="getFaceShapeAreaOptions" /> + 获取美型区域选项。 + + + + + + + + +
    +

    + public abstract FaceShapeAreaOptions getFaceShapeAreaOptions( + int shapeArea, Constants.MediaSourceType sourceType); + + - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeAreaOptions(_:sourceType:)); + virtual int getFaceShapeAreaOptions(agora::rtc::FaceShapeAreaOptions::FACE_SHAPE_AREA shapeArea, FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 适用场景 +

    用户在 App 中打开调整美型区域和力度调整菜单时,可以调用该方法获取并刷新当前美型区域选项的值,从而记住用户上次调整的结果并更新 UI。

    +
    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + shapeArea + area + +

    美型区域,详见

    +

    美型区域: +

      +
    • (-1):(默认)无效区域,美型效果不生效。
    • +
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • +
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • +
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • +
    • (3):脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。
    • +
    • (4):脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • +
    • (5):颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • +
    • (6):脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • +
    • (7):下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。
    • +
    • (8):眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • +
    • (9):鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。
    • +
    • (10):鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。
    • +
    • (11):嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。
    • +
    +

    +
    +
    + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita new file mode 100644 index 00000000000..a343ea907bc --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="getFaceShapeAreaOptions2" /> + 获取美型区域选项。 + + + + + + + + +
    +

    + public abstract FaceShapeAreaOptions getFaceShapeAreaOptions( + int shapeArea, Constants.MediaSourceType sourceType); + + - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area NS_SWIFT_NAME(getFaceShapeAreaOptions(_:)); + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    +
    +
    +
    + 参数 + + + + + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    + + diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita new file mode 100644 index 00000000000..e736492a6f1 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -0,0 +1,69 @@ + + + + <ph keyref="getFaceShapeBeautyOptions" /> + 获取美型效果选项。 + + + + + + + + +
    +

    + public abstract FaceShapeBeautyOptions getFaceShapeBeautyOptions( + Constants.MediaSourceType sourceType); + + - (AgoraFaceShapeBeautyOptions * _Nullable)getFaceShapeBeautyOptions:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeBeautyOptions(_:)); + virtual int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 适用场景 +

    用户在 App 中打开调整美型风格和强度调整菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    +
    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita new file mode 100644 index 00000000000..e736492a6f1 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita @@ -0,0 +1,69 @@ + + + + <ph keyref="getFaceShapeBeautyOptions" /> + 获取美型效果选项。 + + + + + + + + +
    +

    + public abstract FaceShapeBeautyOptions getFaceShapeBeautyOptions( + Constants.MediaSourceType sourceType); + + - (AgoraFaceShapeBeautyOptions * _Nullable)getFaceShapeBeautyOptions:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeBeautyOptions(_:)); + virtual int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 适用场景 +

    用户在 App 中打开调整美型风格和强度调整菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    +
    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita new file mode 100644 index 00000000000..a206155f3dc --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -0,0 +1,73 @@ + + + + <ph keyref="setFaceShapeAreaOptions" /> + 设置美型区域选项。 + + + + + + + + +
    +

    + public abstract int setFaceShapeAreaOptions( + FaceShapeAreaOptions options, Constants.MediaSourceType sourceType); + + - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); + virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型区域选项,对人脸的各个区域微调,实现更加精细的美型效果,详见实现高级美颜。

    +

    该方法和 均可用于设置美型区域选项,区别在于该方法支持指定应用美型效果的媒体源。

    + 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +
    +
    + 调用时机 +

    请在调用 之后调用该方法。

    +
    +
    +
    +
    + 参数 + + + options + 美型区域选项,详见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。 +
        +
      • -4:当前设备不支持该功能,可能的原因有: +
          +
        • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
        • +
        • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
        • +
        +
      • +
      +
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita new file mode 100644 index 00000000000..ad5de2c23d9 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita @@ -0,0 +1,72 @@ + + + + <ph keyref="setFaceShapeAreaOptions" /> + 设置美型区域选项。 + + + + + + + + +
    +

    + public abstract int setFaceShapeAreaOptions( + FaceShapeAreaOptions options, Constants.MediaSourceType sourceType); + + - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); + virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型区域选项,对人脸的各个区域微调,实现更加精细的美型效果。

    + 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +
    +
    + 调用时机 +

    请在调用 之后调用该方法。

    +
    +
    +
    +
    + 参数 + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。 +
        +
      • -4:当前设备不支持该功能,可能的原因有: +
          +
        • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
        • +
        • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
        • +
        +
      • +
      +
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita new file mode 100644 index 00000000000..5e596714600 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -0,0 +1,89 @@ + + + + <ph keyref="setFaceShapeBeautyOptions" /> + 设置美型效果选项。 + + + + + + + + +
    +

    + public abstract int setFaceShapeBeautyOptions( + boolean enabled, FaceShapeBeautyOptions options, Constants.MediaSourceType sourceType); + + - (int)setFaceShapeBeautyOptions:(BOOL)enable options:(AgoraFaceShapeBeautyOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeBeautyOptions(_:options:sourceType:)); + virtual int setFaceShapeBeautyOptions(bool enabled, const FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    +

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    + 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +
    +
    + 调用时机 +

    请在 之后调用该方法。

    +
    +
    + 调用限制 +
      +
    • 该方法仅适用于 Android 4.4 及以上版本。
    • +
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • +
    • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
    • +
    +
    +
    + 参数 + + + enabled + enable + 是否开启美型功能: + +
      +
    • : 开启美型功能。
    • +
    • :(默认)关闭美型功能。
    • +
    +
    + + options + 美型效果选项,详细定义见 + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。 +
        +
      • -4:当前设备不支持该功能,可能的原因有: +
          +
        • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
        • +
        • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
        • +
        +
      • +
      +
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita new file mode 100644 index 00000000000..ad498d67e18 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita @@ -0,0 +1,73 @@ + + + + <ph keyref="setFaceShapeBeautyOptions2" /> + 设置美型效果选项。 + + + + + + + + +
    +

    + public abstract int setFaceShapeBeautyOptions(boolean enabled, FaceShapeBeautyOptions options); + + - (int)setFaceShapeBeautyOptions:(BOOL)enable options:(AgoraFaceShapeBeautyOptions* _Nullable)options NS_SWIFT_NAME(setFaceShapeBeautyOptions(_:options:)); + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    + 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +
    +
    +
    +
    +
    +
    + 参数 + + + + + + + + + + + + + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。 +
        +
      • -4:当前设备不支持该功能,可能的原因有: +
          +
        • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
        • +
        • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
        • +
        +
      • +
      +
    • +
    +
    +
    diff --git a/dita/RTC-NG/API/class_faceshapeareaoptions.dita b/dita/RTC-NG/API/class_faceshapeareaoptions.dita new file mode 100644 index 00000000000..92c34f1542f --- /dev/null +++ b/dita/RTC-NG/API/class_faceshapeareaoptions.dita @@ -0,0 +1,97 @@ + + + + <ph keyref="FaceShapeAreaOptions" /> + 滤镜效果选项。 + +
    +

    + public class FaceShapeAreaOptions { + public static final int FACE_SHAPE_AREA_NONE = -1; + public static final int FACE_SHAPE_AREA_HEADSCALE = 0; + public static final int FACE_SHAPE_AREA_FOREHEAD = 1; + public static final int FACE_SHAPE_AREA_FACECONTOUR = 2; + public static final int FACE_SHAPE_AREA_FACELENGTH = 3; + public static final int FACE_SHAPE_AREA_FACEWIDTH = 4; + public static final int FACE_SHAPE_AREA_CHEEKBONE = 5; + public static final int FACE_SHAPE_AREA_CHEEK = 6; + public static final int FACE_SHAPE_AREA_CHIN = 7; + public static final int FACE_SHAPE_AREA_EYESCALE = 8; + public static final int FACE_SHAPE_AREA_NOSELENGTH = 9; + public static final int FACE_SHAPE_AREA_NOSEWIDTH = 10; + public static final int FACE_SHAPE_AREA_MOUTHSCALE = 11; + + public int shapeArea; + public int shapeIntensity; + +} + + __attribute__((visibility("default"))) @interface AgoraFaceShapeAreaOptions : NSObject +@property(nonatomic, assign) AgoraFaceShapeArea shapeArea; +@property(nonatomic, assign) int shapeIntensity; +@end + struct FaceShapeAreaOptions { + enum FACE_SHAPE_AREA { + FACE_SHAPE_AREA_NONE = -1, + FACE_SHAPE_AREA_HEADSCALE = 0, + FACE_SHAPE_AREA_FOREHEAD = 1, + FACE_SHAPE_AREA_FACECONTOUR = 2, + FACE_SHAPE_AREA_FACELENGTH = 3, + FACE_SHAPE_AREA_FACEWIDTH = 4, + FACE_SHAPE_AREA_CHEEKBONE = 5, + FACE_SHAPE_AREA_CHEEK = 6, + FACE_SHAPE_AREA_CHIN = 7, + FACE_SHAPE_AREA_EYESCALE = 8, + FACE_SHAPE_AREA_NOSELENGTH = 9, + FACE_SHAPE_AREA_NOSEWIDTH = 10, + FACE_SHAPE_AREA_MOUTHSCALE = 11, + }; + + FACE_SHAPE_AREA shapeArea; + int shapeIntensity; + + FaceShapeAreaOptions(FACE_SHAPE_AREA shapeArea, int areaIntensity) : shapeArea(shapeArea), shapeIntensity(areaIntensity) {} + + FaceShapeAreaOptions() : shapeArea(FACE_SHAPE_AREA_NONE), shapeIntensity(0) {} +}; + + + + + +

    +
    +
    + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> + + + + shapeArea + +

    美型区域,详见

    +

    美型区域: +

      +
    • (-1):(默认)无效区域,美型效果不生效。
    • +
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • +
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • +
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • +
    • (3):脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。
    • +
    • (4):脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • +
    • (5):颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • +
    • (6):脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • +
    • (7):下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。
    • +
    • (8):眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • +
    • (9):鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。
    • +
    • (10):鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。
    • +
    • (11):嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。
    • +
    +

    +
    +
    + + shapeIntensity + 调整力度。各部位的调整力度定义(包括调整的方向、范围、预设值等)有所不同,详见 shapeArea 中的描述详见 + +
    +
    +
    \ No newline at end of file diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita new file mode 100644 index 00000000000..c9e9b64387d --- /dev/null +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -0,0 +1,63 @@ + + + + <ph keyref="FaceShapeBeautyOptions" /> + 美型效果选项。 + +
    +

    + public class FaceShapeBeautyOptions { + public static final int FACE_SHAPE_BEAUTY_STYLE_FEMALE = 0; + public static final int FACE_SHAPE_BEAUTY_STYLE_MALE = 1; + + public int shapeStyle; + public int styleIntensity; +} + + __attribute__((visibility("default"))) @interface AgoraFaceShapeBeautyOptions: NSObject +@property(nonatomic, assign) AgoraFaceShapeStyle shapeStyle; +@property(nonatomic, assign) int styleIntensity; +@end + struct FaceShapeBeautyOptions { + enum FACE_SHAPE_BEAUTY_STYLE { + FACE_SHAPE_BEAUTY_STYLE_FEMALE = 0, + FACE_SHAPE_BEAUTY_STYLE_MALE = 1, + }; + + FACE_SHAPE_BEAUTY_STYLE shapeStyle; + + int styleIntensity; + + FaceShapeBeautyOptions(FACE_SHAPE_BEAUTY_STYLE shapeStyle, int styleIntensity) : shapeStyle(shapeStyle), styleIntensity(styleIntensity) {} + + FaceShapeBeautyOptions() : shapeStyle(FACE_SHAPE_BEAUTY_STYLE_FEMALE), styleIntensity(50) {} +}; + + + + +

    +
    +
    + <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property" /> + + + + shapeStyle + +

    美型风格,详见

    +

    美型风格: +

      +
    • (0):女性风格。
    • +
    • (1):男性风格。
    • +
    +

    +
    +
    + + styleIntensity + 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0 表示无美型效果。取值越大,美型效果越强,脸部各部位改变的痕迹越明显。 + +
    +
    +
    \ No newline at end of file diff --git a/dita/RTC-NG/API/enum_faceshapearea.dita b/dita/RTC-NG/API/enum_faceshapearea.dita new file mode 100644 index 00000000000..c7eb717aaf8 --- /dev/null +++ b/dita/RTC-NG/API/enum_faceshapearea.dita @@ -0,0 +1,72 @@ + + + + <ph keyref="FACE_SHAPE_AREA" /> + 美型区域。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + -1: (默认)无效区域,美型效果不生效。 + + + + 0: 头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。 + + + + 1: 额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。 + + + + 2: 脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。 + + + + 3: 脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。 + + + + 4: 脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。 + + + + 5: 颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。 + + + + 6: 脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。 + + + + 7: 下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。 + + + + 8: 眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。 + + + + 9: 鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。 + + + + 10: 鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。 + + + + 11: 嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。 + + +
    +
    diff --git a/dita/RTC-NG/API/enum_faceshapebeautystyle.dita b/dita/RTC-NG/API/enum_faceshapebeautystyle.dita new file mode 100644 index 00000000000..1eb5229b747 --- /dev/null +++ b/dita/RTC-NG/API/enum_faceshapebeautystyle.dita @@ -0,0 +1,28 @@ + + + + <ph keyref="FACE_SHAPE_BEAUTY_STYLE" /> + 美型风格。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + 0: (默认)女性风格。 + + + + 1: 男性风格。 + + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 306de04dab2..0b66e9adb64 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -42,6 +42,8 @@
  • +
  • +
  • @@ -175,6 +177,8 @@
  • +
  • +
  • @@ -397,6 +401,8 @@
  • +
  • +
  • @@ -502,6 +508,8 @@
  • +
  • +
  • @@ -1192,6 +1200,8 @@
  • +
  • +
  • @@ -1304,6 +1314,8 @@
  • +
  • +
  • @@ -1428,6 +1440,8 @@
  • +
  • +
  • @@ -1558,6 +1572,8 @@
  • +
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index db6db09ab89..2e02b4e25ac 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -300,10 +300,18 @@ + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 0bf75c48202..e0f27b0c95d 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -315,8 +315,12 @@ + + + + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index f090bdee9ba..061c35299b7 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -307,10 +307,18 @@ + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index f3a6fd16153..2d7f39f8362 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -304,10 +304,18 @@ + + + + + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index f9b10a31d37..d0883046e01 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1261,6 +1261,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1296,6 +1310,20 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + @@ -5365,6 +5393,20 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + @@ -8965,6 +9007,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 6cdf1db234b..9f45fe6da2b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1156,6 +1156,34 @@ + + + + getFaceShapeAreaOptions: + + + + + + + getFaceShapeAreaOptions:sourceType: + + + + + + + getFaceShapeBeautyOptions + + + + + + + getFaceShapeBeautyOptions:sourceType: + + + @@ -1226,6 +1254,34 @@ + + + + setFaceShapeAreaOptions: + + + + + + + setFaceShapeAreaOptions:sourceType: + + + + + + + setFaceShapeBeautyOptions:options: + + + + + + + setFaceShapeBeautyOptions:options:sourceType: + + + @@ -4848,6 +4904,20 @@ + + + + AgoraFaceShapeAreaOptions + + + + + + + AgoraFaceShapeBeautyOptions + + + @@ -8420,6 +8490,125 @@ + + + + AgoraFaceShapeArea + + + + + + + AgoraFaceShapeAreaNone + + + + + + + AgoraFaceShapeAreaHeadScale + + + + + + + AgoraFaceShapeAreaForehead + + + + + + + AgoraFaceShapeAreaFaceContour + + + + + + + AgoraFaceShapeAreaFaceLength + + + + + + + AgoraFaceShapeAreaFaceWidth + + + + + + + AgoraFaceShapeAreaCheekbone + + + + + + + AgoraFaceShapeAreaCheek + + + + + + + AgoraFaceShapeAreaChin + + + + + + + AgoraFaceShapeAreaEyeScale + + + + + + + AgoraFaceShapeAreaNoseLength + + + + + + + AgoraFaceShapeAreaNoseWidth + + + + + + + AgoraFaceShapeAreaMouthScale + + + + + + + AgoraFaceShapeStyle + + + + + + + AgoraFaceShapeStyleFemale + + + + + + + AgoraFaceShapeStyleMale + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index a3d969b29cc..7ddcacc981b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1146,6 +1146,34 @@ + + + + getFaceShapeAreaOptions [1/2] + + + + + + + getFaceShapeAreaOptions [2/2] + + + + + + + getFaceShapeBeautyOptions [1/2] + + + + + + + getFaceShapeBeautyOptions [2/2] + + + @@ -1216,6 +1244,34 @@ + + + + setFaceShapeAreaOptions [1/2] + + + + + + + setFaceShapeAreaOptions [2/2] + + + + + + + setFaceShapeBeautyOptions [1/2] + + + + + + + setFaceShapeBeautyOptions [2/2] + + + @@ -5041,6 +5097,20 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + @@ -8424,6 +8494,111 @@ + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 59ab338a18f..93b34b24718 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1106,6 +1106,34 @@ + + + + getFaceShapeAreaOptions: + + + + + + + getFaceShapeAreaOptions:sourceType: + + + + + + + getFaceShapeBeautyOptions + + + + + + + getFaceShapeBeautyOptions:sourceType: + + + @@ -1176,6 +1204,34 @@ + + + + setFaceShapeAreaOptions: + + + + + + + setFaceShapeAreaOptions:sourceType: + + + + + + + setFaceShapeBeautyOptions:options: + + + + + + + setFaceShapeBeautyOptions:options:sourceType: + + + @@ -4536,6 +4592,20 @@ + + + + AgoraFaceShapeAreaOptions + + + + + + + AgoraFaceShapeBeautyOptions + + + @@ -7982,6 +8052,125 @@ + + + + AgoraFaceShapeArea + + + + + + + AgoraFaceShapeAreaNone + + + + + + + AgoraFaceShapeAreaHeadScale + + + + + + + AgoraFaceShapeAreaForehead + + + + + + + AgoraFaceShapeAreaFaceContour + + + + + + + AgoraFaceShapeAreaFaceLength + + + + + + + AgoraFaceShapeAreaFaceWidth + + + + + + + AgoraFaceShapeAreaCheekbone + + + + + + + AgoraFaceShapeAreaCheek + + + + + + + AgoraFaceShapeAreaChin + + + + + + + AgoraFaceShapeAreaEyeScale + + + + + + + AgoraFaceShapeAreaNoseLength + + + + + + + AgoraFaceShapeAreaNoseWidth + + + + + + + AgoraFaceShapeAreaMouthScale + + + + + + + AgoraFaceShapeStyle + + + + + + + AgoraFaceShapeStyleFemale + + + + + + + AgoraFaceShapeStyleMale + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 1726dc05850..38502c851af 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2392,6 +2392,10 @@ + + + + @@ -2570,6 +2574,10 @@ + + + + From eb5c5e90783bbe3664e248fd7b5394682718e43c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 18 Oct 2024 14:44:25 +0800 Subject: [PATCH 139/354] update position --- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 38502c851af..680902c7e87 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2279,6 +2279,10 @@ + + + + @@ -2574,10 +2578,6 @@ - - - - From 6a6756046e81604d5f3f04fc84301e26d1b86e3e Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 18 Oct 2024 15:06:46 +0800 Subject: [PATCH 140/354] update datatype --- dita/RTC-NG/API/rtc_api_data_type.dita | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 0b66e9adb64..18b8348b61e 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1248,6 +1248,7 @@
  • +
  • @@ -1481,6 +1482,7 @@
  • +
  • @@ -1611,6 +1613,7 @@
  • +
  • From cf87f348e2f207708cfd201eeb00eda6b1c06cc5 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 18 Oct 2024 18:11:00 +0800 Subject: [PATCH 141/354] 1 --- ...i_irtcengine_setremoterendertargetfps.dita | 6 +- ...cengine_startscreencapturebydisplayid.dita | 2 +- .../API/class_videoencoderconfiguration.dita | 55 ++++----- .../API/enum_compressionpreference.dita | 12 +- dita/RTC-NG/API/rtc_api_overview.dita | 113 ++++++++---------- dita/RTC-NG/RTC_NG_API_iOS.ditamap | 34 +++--- dita/RTC-NG/RTC_NG_API_macOS.ditamap | 36 +++--- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 ++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 ++ .../config/keys-rtc-ng-api-macos.ditamap | 7 ++ 10 files changed, 142 insertions(+), 137 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita index d5ac018f279..bf998b2d33b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -13,10 +13,10 @@

    - + public abstract int setRemoteRenderTargetFps(int targetFps); - - + - (int)setRemoteRenderTargetFps:(int)targetFps; + virtual int setRemoteRenderTargetFps(int targetFps) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita index a60de8c5707..a910e52c60f 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita @@ -19,7 +19,7 @@ regionRect:(CGRect)regionRect captureParams:(AgoraScreenCaptureParameters *_Nonnull)captureParams; - virtual int startScreenCaptureByDisplayId(uint32_t displayId, const Rectangle& regionRect, + virtual int startScreenCaptureByDisplayId(int64_t displayId, const Rectangle& regionRect, const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/dita/RTC-NG/API/class_videoencoderconfiguration.dita index c05e0a09590..b844d174ef4 100644 --- a/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -80,6 +80,7 @@ } } public enum COMPRESSION_PREFERENCE { + PREFER_COMPRESSION_AUTO(-1), PREFER_LOW_LATENCY(0), PREFER_QUALITY(1); private int value; @@ -102,11 +103,12 @@ } public AdvanceOptions() { this.encodingPreference = ENCODING_PREFERENCE.PREFER_AUTO; - this.compressionPreference = COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY; + this.compressionPreference = COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO; this.encodeAlpha = false; } } public enum DEGRADATION_PREFERENCE { + MAINTAIN_AUTO(-1), MAINTAIN_QUALITY(0), MAINTAIN_FRAMERATE(1), MAINTAIN_BALANCED(2), @@ -153,7 +155,6 @@ VIDEO_CODEC_H264(2), VIDEO_CODEC_H265(3), VIDEO_CODEC_GENERIC(6), - VIDEO_CODEC_GENERIC_H264(7), VIDEO_CODEC_AV1(12), VIDEO_CODEC_VP9(13), VIDEO_CODEC_GENERIC_JPEG(20); @@ -187,10 +188,10 @@ this.bitrate = STANDARD_BITRATE; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, @@ -201,10 +202,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, @@ -215,10 +216,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = mirrorMode; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration( @@ -229,10 +230,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(int width, int height, FRAME_RATE frameRate, int bitrate, @@ -243,10 +244,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = mirrorMode; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } } @@ -301,9 +302,9 @@ bitrate(b), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(m), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(mirror), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED) : codecType(VIDEO_CODEC_NONE), dimensions(width, height), @@ -311,19 +312,19 @@ bitrate(b), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(m), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(mirror), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration(const VideoEncoderConfiguration& config) - : codecType(config.codecType), - dimensions(config.dimensions), - frameRate(config.frameRate), - bitrate(config.bitrate), - minBitrate(config.minBitrate), - orientationMode(config.orientationMode), - degradationPreference(config.degradationPreference), - mirrorMode(config.mirrorMode), - advanceOptions(config.advanceOptions) {} + : codecType(config.codecType), + dimensions(config.dimensions), + frameRate(config.frameRate), + bitrate(config.bitrate), + minBitrate(config.minBitrate), + orientationMode(config.orientationMode), + degradationPreference(config.degradationPreference), + mirrorMode(config.mirrorMode), + advanceOptions(config.advanceOptions) {} VideoEncoderConfiguration() : codecType(VIDEO_CODEC_NONE), dimensions(FRAME_WIDTH_960, FRAME_HEIGHT_540), @@ -331,9 +332,9 @@ bitrate(STANDARD_BITRATE), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(ORIENTATION_MODE_ADAPTIVE), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(VIDEO_MIRROR_MODE_DISABLED), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration& operator=(const VideoEncoderConfiguration& rhs) { if (this == &rhs) return *this; codecType = rhs.codecType; diff --git a/dita/RTC-NG/API/enum_compressionpreference.dita b/dita/RTC-NG/API/enum_compressionpreference.dita index 8dc8df4cdaf..c9289ccea9d 100644 --- a/dita/RTC-NG/API/enum_compressionpreference.dita +++ b/dita/RTC-NG/API/enum_compressionpreference.dita @@ -15,17 +15,17 @@

    枚举值 - + + + -1:(默认)自动模式。SDK 会根据你设置的视频场景,自动选择 ;并在网络状态发生变化时,自动在 之间切换,以获得最佳的用户体验。 + + 0: 低延时偏好。SDK 会对视频帧进行压缩处理,以降低延时。该偏好适用于流畅性优先且允许画质降低的场景。 - - - 1:(默认)高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。 - - + 1:(默认)高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。
    diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index cde4add44f6..fd135501db8 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -269,6 +269,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1004,6 +1040,22 @@ + + + + + + + + + + + + + + + + @@ -1098,67 +1150,6 @@
    -
    - 视频编码功能 - - - 方法/回调 - 描述 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    视频渲染 diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 7939ae02880..5a1363dd248 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -358,10 +358,6 @@ - - - - @@ -523,21 +519,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index 1300565d1dd..01eca50c633 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -85,6 +85,10 @@ + + + + @@ -97,6 +101,12 @@ + + + + + + @@ -306,6 +316,12 @@ + + + + + + @@ -335,26 +351,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 0ad30a70918..a7f2b11dfcd 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -6657,6 +6657,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 212a37a8f25..035ac2c3476 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -7687,6 +7687,13 @@ + + + + AgoraCompressionAuto + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index e8d46dcf048..976b0166822 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -7249,6 +7249,13 @@ + + + + AgoraCompressionAuto + + + From 4dfe1382b8bbf30337e86a4ce48661e597a1b6fb Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 14:58:10 +0800 Subject: [PATCH 142/354] NMS-21559 --- ..._irtcengine_setlowlightenhanceoptions.dita | 37 +++++++++------ ...irtcengine_setlowlightenhanceoptions2.dita | 9 ++-- ...pi_irtcengine_setvideodenoiseroptions.dita | 46 +++++++++++++------ ...i_irtcengine_setvideodenoiseroptions2.dita | 6 ++- dita/RTC/API/enum_videodenoiserlevel.dita | 6 +-- 5 files changed, 66 insertions(+), 38 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index bfb20987759..4f98277e00d 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -38,23 +38,32 @@ MediaSourceType type = MediaSourceType.primaryCameraSource});

    -
    - 详情 -

    暗光增强功能可以在光线亮度偏低(如背光、阴天、暗场景)和亮度不均匀的环境下自适应调整视频画面的亮度值,恢复或凸显图像的细节信息,最终提升视频图像的整体视觉效果。

    +

    你可以调用该方法开启暗光增强功能并设置暗光增强的效果。

    -
      -
    • 请在 后调用该方法。
    • -
    • 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,建议你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
    • -
    • 该方法和 均可开启暗光增强功能: - +

      该方法和 均可开启视频降噪功能:

        -
      • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
      • -
      • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
      • -
    • -
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • -
    -
    +
  • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
  • +
  • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
  • + +

    +
    + 适用场景 +

    暗光增强功能可以在光线亮度偏低(如背光、阴天、暗场景)和亮度不均匀的环境下自适应调整视频画面的亮度值,恢复或凸显图像的细节信息,最终提升视频图像的整体视觉效果。

    +
    +
    + 调用时机 +

    请在 后调用该方法。

    +
    +
    + 调用限制 +
      +
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • +
    • 调用该方法前,你需要先调用 并将 中的 mode 设为 level 设为
    • +
    • 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,建议你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
    • +
    +
    +
    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index fdba412b2d3..6c1ec2301c0 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -25,13 +25,14 @@

    -
    - 详情 -

    暗光增强功能可以在光线亮度偏低(如背光、阴天、暗场景)和亮度不均匀的环境下自适应调整视频画面的亮度值,恢复或凸显图像的细节信息,最终提升视频图像的整体视觉效果。

    +

    该方法和 均可用于设置暗光增强功能,区别在于该方法支持在设置暗光增强功能时指定应用暗光增强的媒体源。

    -
    +
    +
    +
    +
    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index 3c0eb0eca9d..a530cd452c4 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -38,23 +38,31 @@ MediaSourceType type = MediaSourceType.primaryCameraSource});

    -
    - 详情 -

    采光不足的环境和低端视频采集设备会使视频图像含有明显的噪声,影响视频画质。在实时互动场景下,视频噪声还会在编码过程中占用码流资源并降低编码效率。

    +

    你可以调用该方法开启视频降噪功能并设置视频降噪的效果。

    -
      -
    • 请在 后调用该方法。
    • -
    • 视频降噪对设备性能有一定要求。开启视频降噪后,如果设备出现严重发烫等问题,建议你将视频降噪等级修改为消耗性能较少的等级或关闭视频降噪功能。
    • -
    • 该方法和 均可开启视频降噪功能: - +

      该方法和 均可开启视频降噪功能:

        -
      • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
      • -
      • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
      • -
    • -
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • -
    -
    +
  • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
  • +
  • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
  • + +

    +
    + 适用场景 +

    采光不足的环境和低端视频采集设备会使视频图像含有明显的噪声,影响视频画质。在实时互动场景下,视频噪声还会在编码过程中占用码流资源并降低编码效率。

    +
    +
    + 调用时机 +

    请在 后调用该方法。

    +
    +
    + 调用限制 +
      +
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • +
    • 视频降噪对设备性能有一定要求。开启视频降噪后,如果设备出现严重发烫等问题,建议你将视频降噪等级修改为消耗性能较少的等级或关闭视频降噪功能。
    • +
    +
    +
    参数 @@ -69,7 +77,15 @@ options - 视频降噪选项,用于设置视频降噪的效果。详见 + 视频降噪选项,用于设置视频降噪的效果。详见 。如果选项中提供的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下: +
      +
    • lighteningContrastLevel
    • +
    • lighteningLevel:0.0。
    • +
    • smoothnessLevel:0.5。
    • +
    • rednessLevel:0.0。
    • +
    • sharpnessLevel:0.1。
    • +
    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita index 8f098532fec..403a4918113 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita @@ -27,11 +27,13 @@
    详情 -

    采光不足的环境和低端视频采集设备会使视频图像含有明显的噪声,影响视频画质。在实时互动场景下,视频噪声还会在编码过程中占用码流资源并降低编码效率。

    该方法和 均可用于设置视频降噪功能,区别在于该方法支持在设置视频降噪功能时指定应用视频降噪功能的媒体源。

    -
    +
    +
    +
    +
    参数 diff --git a/dita/RTC/API/enum_videodenoiserlevel.dita b/dita/RTC/API/enum_videodenoiserlevel.dita index 67e6a970119..358e7994eb3 100644 --- a/dita/RTC/API/enum_videodenoiserlevel.dita +++ b/dita/RTC/API/enum_videodenoiserlevel.dita @@ -13,11 +13,11 @@ - 优先性能的视频降噪。 是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,声网推荐你在摄像头固定的情况下使用 + 1:优先性能的视频降噪。 是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,声网推荐你在摄像头固定的情况下使用 - + - 强效的视频降噪。 是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用 + 2:强效的视频降噪。 是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用
    From 058e1de0043bb6821ad08a6bb8b505a9b61bf9dd Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 15:08:10 +0800 Subject: [PATCH 143/354] TO review comments --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 12 ++++----- ...i_irtcengine_getfaceshapeareaoptions2.dita | 12 ++------- ..._irtcengine_getfaceshapebeautyoptions.dita | 2 +- ...irtcengine_getfaceshapebeautyoptions2.dita | 25 +++---------------- ...pi_irtcengine_setfaceshapeareaoptions.dita | 8 +++--- ...i_irtcengine_setfaceshapeareaoptions2.dita | 4 +-- .../API/class_faceshapeareaoptions.dita | 6 ++--- dita/RTC-NG/API/enum_faceshapearea.dita | 4 +-- 8 files changed, 24 insertions(+), 49 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 4bb497882e4..197d5fc605f 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -2,7 +2,7 @@ <ph keyref="getFaceShapeAreaOptions" /> - 获取美型区域选项。 + 获取美型部位选项。 @@ -31,11 +31,11 @@
    v4.5.0
    -

    +

    调用该方法可以获取美型部位当前设置的参数信息。

    适用场景 -

    用户在 App 中打开调整美型区域和力度调整菜单时,可以调用该方法获取并刷新当前美型区域选项的值,从而记住用户上次调整的结果并更新 UI。

    +

    用户在 App 中打开调整美型部位和力度调整菜单时,可以调用该方法获取并刷新当前美型部位选项的值,从而记住用户上次调整的结果并更新 UI。

    调用时机 @@ -52,10 +52,10 @@ shapeArea area -

    美型区域,详见

    -

    美型区域: +

    美型部位,详见

    +

    美型部位:

      -
    • (-1):(默认)无效区域,美型效果不生效。
    • +
    • (-1):(默认)无效部位,美型效果不生效。
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita index a343ea907bc..ab1bb9dd3a7 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita @@ -2,7 +2,7 @@ <ph keyref="getFaceShapeAreaOptions2" /> - 获取美型区域选项。 + 获取美型部位选项。 @@ -24,15 +24,7 @@

    -
    -
    - -
    自从
    -
    v4.5.0
    -
    -
    -

    -

    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index e736492a6f1..99e51bd7c9c 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    +

    调用该方法可以获取美型效果当前设置的参数信息。

    适用场景 diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita index e736492a6f1..6e11668be4f 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita @@ -24,27 +24,10 @@

    -
    -
    - -
    自从
    -
    v4.5.0
    -
    -
    -

    -
    -
    - 适用场景 -

    用户在 App 中打开调整美型风格和强度调整菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    -
    -
    - 调用时机 -

    请在 之后调用该方法。

    -
    -
    - 调用限制 -

    无。

    -
    +
    +
    +
    +
    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index a206155f3dc..a77c727a95b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -2,7 +2,7 @@ <ph keyref="setFaceShapeAreaOptions" /> - 设置美型区域选项。 + 设置美型部位选项。 @@ -31,8 +31,8 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型区域选项,对人脸的各个区域微调,实现更加精细的美型效果,详见实现高级美颜。

    -

    该方法和 均可用于设置美型区域选项,区别在于该方法支持指定应用美型效果的媒体源。

    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位微调,实现更加精细的美型效果,详见实现高级美颜。

    +

    该方法和 均可用于设置美型部位选项,区别在于该方法支持指定应用美型效果的媒体源。

    美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。
    @@ -46,7 +46,7 @@ options - 美型区域选项,详见 + 美型部位选项,详见 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita index ad5de2c23d9..0a6bd60a578 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita @@ -2,7 +2,7 @@ <ph keyref="setFaceShapeAreaOptions" /> - 设置美型区域选项。 + 设置美型部位选项。 @@ -31,7 +31,7 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型区域选项,对人脸的各个区域微调,实现更加精细的美型效果。

    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位微调,实现更加精细的美型效果。

    美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。
    diff --git a/dita/RTC-NG/API/class_faceshapeareaoptions.dita b/dita/RTC-NG/API/class_faceshapeareaoptions.dita index 92c34f1542f..d3e56b1103e 100644 --- a/dita/RTC-NG/API/class_faceshapeareaoptions.dita +++ b/dita/RTC-NG/API/class_faceshapeareaoptions.dita @@ -68,10 +68,10 @@ shapeArea -

    美型区域,详见

    -

    美型区域: +

    美型部位,详见

    +

    美型部位:

      -
    • (-1):(默认)无效区域,美型效果不生效。
    • +
    • (-1):(默认)无效部位,美型效果不生效。
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • diff --git a/dita/RTC-NG/API/enum_faceshapearea.dita b/dita/RTC-NG/API/enum_faceshapearea.dita index c7eb717aaf8..3d64eacb461 100644 --- a/dita/RTC-NG/API/enum_faceshapearea.dita +++ b/dita/RTC-NG/API/enum_faceshapearea.dita @@ -2,7 +2,7 @@ <ph keyref="FACE_SHAPE_AREA" /> - 美型区域。 + 美型部位。
      @@ -17,7 +17,7 @@ - -1: (默认)无效区域,美型效果不生效。 + -1: (默认)无效部位,美型效果不生效。 From a292c0447ac68c7314327959574f11b122b93750 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 15:28:26 +0800 Subject: [PATCH 144/354] update videodenoise --- .../API/api_irtcengine_setlowlightenhanceoptions.dita | 9 +++++++-- .../API/api_irtcengine_setvideodenoiseroptions.dita | 8 +------- .../API/api_irtcengine_setvideodenoiseroptions2.dita | 5 ++--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index 4f98277e00d..079145ef326 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -59,7 +59,6 @@ 调用限制
      • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
      • -
      • 调用该方法前,你需要先调用 并将 中的 mode 设为 level 设为
      • 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,建议你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
      @@ -77,7 +76,13 @@ options - 暗光增强选项,用于设置暗光增强的效果。详见 + 暗光增强选项,用于设置暗光增强的效果。详见 。根据你在 options 中的设置,需要进行以下操作: +
        +
      • levelmode 时:需要先调用 中的 level 设为 mode 设为
      • +
      • levelmode 时:需要先调用 中的 level 设为 mode 设为
      • +
      • 除以上两种情况外的情况:无需调用
      • +
      +
      type diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index a530cd452c4..8b8288d117f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -40,13 +40,7 @@

    你可以调用该方法开启视频降噪功能并设置视频降噪的效果。

    - -

    该方法和 均可开启视频降噪功能: -

      -
    • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
    • -
    • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
    • -
    -

    +
    适用场景

    采光不足的环境和低端视频采集设备会使视频图像含有明显的噪声,影响视频画质。在实时互动场景下,视频噪声还会在编码过程中占用码流资源并降低编码效率。

    diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita index 403a4918113..5c3658743c5 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita @@ -25,10 +25,9 @@

    -
    - 详情 +
    +

    你可以调用该方法开启视频降噪功能并设置视频降噪的效果。

    该方法和 均可用于设置视频降噪功能,区别在于该方法支持在设置视频降噪功能时指定应用视频降噪功能的媒体源。

    -
    From cac3e598dd3d8dc95d1b53ef3d6be718eb2eea75 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 15:35:32 +0800 Subject: [PATCH 145/354] fix publish errors --- dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita | 4 ++-- dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index 079145ef326..edf02a39f1d 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -79,8 +79,8 @@ 暗光增强选项,用于设置暗光增强的效果。详见 。根据你在 options 中的设置,需要进行以下操作:
    • levelmode 时:需要先调用 中的 level 设为 mode 设为
    • -
    • levelmode 时:需要先调用 中的 level 设为 mode 设为
    • -
    • 除以上两种情况外的情况:无需调用
    • +
    • levelmode 时:需要先调用 中的 level 设为 mode 设为
    • +
    • 除以上两种情况外的情况:无需调用
    diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index 8b8288d117f..289e286ba95 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -71,7 +71,7 @@ options - 视频降噪选项,用于设置视频降噪的效果。详见 。如果选项中提供的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下: + 视频降噪选项,用于设置视频降噪的效果。详见 。如果选项中提供的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下:
    • lighteningContrastLevel
    • lighteningLevel:0.0。
    • From ba1570268d41d263bcc0e982cb4c45a0cf379b68 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 15:43:37 +0800 Subject: [PATCH 146/354] fix --- dita/RTC-NG/API/enum_videodenoiserlevel.dita | 2 +- dita/RTC/API/enum_videodenoiserlevel.dita | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/enum_videodenoiserlevel.dita b/dita/RTC-NG/API/enum_videodenoiserlevel.dita index 2e53900c19a..f6e565773b8 100644 --- a/dita/RTC-NG/API/enum_videodenoiserlevel.dita +++ b/dita/RTC-NG/API/enum_videodenoiserlevel.dita @@ -15,7 +15,7 @@ 1:优先性能的视频降噪。是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,建议你在摄像头固定的情况下使用该设置。 - + 2:强效的视频降噪。是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用该设置。 diff --git a/dita/RTC/API/enum_videodenoiserlevel.dita b/dita/RTC/API/enum_videodenoiserlevel.dita index 358e7994eb3..d7e06a1210a 100644 --- a/dita/RTC/API/enum_videodenoiserlevel.dita +++ b/dita/RTC/API/enum_videodenoiserlevel.dita @@ -15,7 +15,7 @@ 1:优先性能的视频降噪。 是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,声网推荐你在摄像头固定的情况下使用 - + 2:强效的视频降噪。 是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用 From 175c8851fcaa949f836c6dda0253da3677c5308b Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 16:43:35 +0800 Subject: [PATCH 147/354] update wording update wording --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 26 +++++++++---------- ..._irtcengine_getfaceshapebeautyoptions.dita | 2 +- ...pi_irtcengine_setfaceshapeareaoptions.dita | 2 +- ..._irtcengine_setfaceshapebeautyoptions.dita | 2 +- .../API/class_faceshapeareaoptions.dita | 26 +++++++++---------- .../API/class_faceshapebeautyoptions.dita | 2 +- dita/RTC-NG/API/enum_faceshapearea.dita | 24 ++++++++--------- 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 197d5fc605f..12756d15358 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -35,7 +35,7 @@
    适用场景 -

    用户在 App 中打开调整美型部位和力度调整菜单时,可以调用该方法获取并刷新当前美型部位选项的值,从而记住用户上次调整的结果并更新 UI。

    +

    用户在 App 中打开美型部位和修饰力度菜单时,可以调用该方法获取并刷新当前美型部位选项的值,从而记住用户上次调整的结果并更新 UI。

    调用时机 @@ -56,18 +56,18 @@

    美型部位:

    • (-1):(默认)无效部位,美型效果不生效。
    • -
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • -
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • -
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • -
    • (3):脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。
    • -
    • (4):脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • -
    • (5):颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • -
    • (6):脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • -
    • (7):下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。
    • -
    • (8):眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • -
    • (9):鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。
    • -
    • (10):鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。
    • -
    • (11):嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。
    • +
    • (0):头部,用于实现小头效果。对应修饰力度范围为 [0,100],值越大头越小,预设值为 100。
    • +
    • (1):额头,修饰发际线高度。对应修饰力度范围为 [-100,100],正值为调高,负值为调低,绝对值越大修饰效果越强,预设值为 50。
    • +
    • (2):脸部轮廓,用于实现瘦脸效果。对应修饰力度范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • +
    • (3):脸部长度,用于实现长脸效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 0。
    • +
    • (4):脸部宽度,用于实现窄脸效果。对应修饰力度范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • +
    • (5):颧骨,修饰颧骨宽度。对应修饰力度范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • +
    • (6):脸颊,修饰脸颊宽度。对应修饰力度范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • +
    • (7):下巴,修饰下巴长度。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -20。
    • +
    • (8):眼睛,用于实现大眼效果。对应修饰力度范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • +
    • (9):鼻子长度,用于实现长鼻效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -10。
    • +
    • (10):鼻子宽度,用于实现瘦鼻效果。对应修饰力度范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大修饰效果越强,预设值为 72。
    • +
    • (11):嘴巴,修饰嘴巴尺寸。对应修饰力度范围为 [-100,100],正值为变大,负值为变小,绝对值越大修饰效果越强,预设值为 20。

    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 99e51bd7c9c..6041201be1d 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -35,7 +35,7 @@
    适用场景 -

    用户在 App 中打开调整美型风格和强度调整菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    +

    用户在 App 中打开美型风格和风格强度菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index a77c727a95b..cdd49a08aaf 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位微调,实现更加精细的美型效果,详见实现高级美颜。

    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见实现高级美颜。

    该方法和 均可用于设置美型部位选项,区别在于该方法支持指定应用美型效果的媒体源。

    美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 5e596714600..0e7a56acb41 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    +

    调用该方法可对人脸部各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。
    diff --git a/dita/RTC-NG/API/class_faceshapeareaoptions.dita b/dita/RTC-NG/API/class_faceshapeareaoptions.dita index d3e56b1103e..75bfc791642 100644 --- a/dita/RTC-NG/API/class_faceshapeareaoptions.dita +++ b/dita/RTC-NG/API/class_faceshapeareaoptions.dita @@ -72,25 +72,25 @@

    美型部位:

    • (-1):(默认)无效部位,美型效果不生效。
    • -
    • (0):头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。
    • -
    • (1):额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。
    • -
    • (2):脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • -
    • (3):脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。
    • -
    • (4):脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • -
    • (5):颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • -
    • (6):脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • -
    • (7):下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。
    • -
    • (8):眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • -
    • (9):鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。
    • -
    • (10):鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。
    • -
    • (11):嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。
    • +
    • (0):头部,用于实现小头效果。对应修饰力度范围为 [0,100],值越大头越小,预设值为 100。
    • +
    • (1):额头,修饰发际线高度。对应修饰力度范围为 [-100,100],正值为调高,负值为调低,绝对值越大修饰效果越强,预设值为 50。
    • +
    • (2):脸部轮廓,用于实现瘦脸效果。对应修饰力度范围为 [0,100],值越大瘦脸效果越强,预设值为 10。
    • +
    • (3):脸部长度,用于实现长脸效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 0。
    • +
    • (4):脸部宽度,用于实现窄脸效果。对应修饰力度范围为 [0,100],值越大窄脸效果越强,预设值为 10。
    • +
    • (5):颧骨,修饰颧骨宽度。对应修饰力度范围为 [0,100],值越大颧骨越窄,预设值为 43。
    • +
    • (6):脸颊,修饰脸颊宽度。对应修饰力度范围为 [0,100],值越大脸颊越窄,预设值为 50。
    • +
    • (7):下巴,修饰下巴长度。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -20。
    • +
    • (8):眼睛,用于实现大眼效果。对应修饰力度范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。
    • +
    • (9):鼻子长度,用于实现长鼻效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -10。
    • +
    • (10):鼻子宽度,用于实现瘦鼻效果。对应修饰力度范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大修饰效果越强,预设值为 72。
    • +
    • (11):嘴巴,修饰嘴巴尺寸。对应修饰力度范围为 [-100,100],正值为变大,负值为变小,绝对值越大修饰效果越强,预设值为 20。

    shapeIntensity - 调整力度。各部位的调整力度定义(包括调整的方向、范围、预设值等)有所不同,详见 shapeArea 中的描述详见 + 修饰力度。各部位的修饰力度定义(包括修饰的方向、范围、预设值等)有所不同,详见 shapeArea 中的描述详见
    diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita index c9e9b64387d..7dd447ee7ed 100644 --- a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -56,7 +56,7 @@ styleIntensity - 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0 表示无美型效果。取值越大,美型效果越强,脸部各部位改变的痕迹越明显。 + 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0 表示无美型效果。取值越大,美型效果越强,脸部各部位修饰的痕迹越明显。
    diff --git a/dita/RTC-NG/API/enum_faceshapearea.dita b/dita/RTC-NG/API/enum_faceshapearea.dita index 3d64eacb461..759015aa944 100644 --- a/dita/RTC-NG/API/enum_faceshapearea.dita +++ b/dita/RTC-NG/API/enum_faceshapearea.dita @@ -21,51 +21,51 @@ - 0: 头部,用于实现小头效果。对应力度调整范围为 [0,100],值越大头越小,预设值为 100。 + 0: 头部,用于实现小头效果。对应修饰力度范围为 [0,100],值越大头越小,预设值为 100。 - 1: 额头,调整发际线高度。对应力度调整范围为 [-100,100],正值为调高,负值为调低,绝对值越大调整效果越强,预设值为 50。 + 1: 额头,修饰发际线高度。对应修饰力度范围为 [-100,100],正值为调高,负值为调低,绝对值越大修饰效果越强,预设值为 50。 - 2: 脸部轮廓,用于实现瘦脸效果。对应力度调整范围为 [0,100],值越大瘦脸效果越强,预设值为 10。 + 2: 脸部轮廓,用于实现瘦脸效果。对应修饰力度范围为 [0,100],值越大瘦脸效果越强,预设值为 10。 - 3: 脸部长度,用于实现长脸效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 0。 + 3: 脸部长度,用于实现长脸效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 0。 - 4: 脸部宽度,用于实现窄脸效果。对应力度调整范围为 [0,100],值越大窄脸效果越强,预设值为 10。 + 4: 脸部宽度,用于实现窄脸效果。对应修饰力度范围为 [0,100],值越大窄脸效果越强,预设值为 10。 - 5: 颧骨,调整颧骨宽度。对应力度调整范围为 [0,100],值越大颧骨越窄,预设值为 43。 + 5: 颧骨,修饰颧骨宽度。对应修饰力度范围为 [0,100],值越大颧骨越窄,预设值为 43。 - 6: 脸颊,调整脸颊宽度。对应力度调整范围为 [0,100],值越大脸颊越窄,预设值为 50。 + 6: 脸颊,修饰脸颊宽度。对应修饰力度范围为 [0,100],值越大脸颊越窄,预设值为 50。 - 7: 下巴,调整下巴长度。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -20。 + 7: 下巴,修饰下巴长度。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -20。 - 8: 眼睛,用于实现大眼效果。对应力度调整范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。 + 8: 眼睛,用于实现大眼效果。对应修饰力度范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。 - 9: 鼻子长度,用于实现长鼻效果。对应力度调整范围为 [-100,100],正值为拉长,负值为变短,绝对值越大调整效果越强,预设值为 -10。 + 9: 鼻子长度,用于实现长鼻效果。对应修饰力度范围为 [-100,100],正值为拉长,负值为变短,绝对值越大修饰效果越强,预设值为 -10。 - 10: 鼻子宽度,用于实现瘦鼻效果。对应力度调整范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大调整效果越强,预设值为 72。 + 10: 鼻子宽度,用于实现瘦鼻效果。对应修饰力度范围为 [-100,100],正值为变胖/变宽,负值为变瘦/变窄,绝对值越大修饰效果越强,预设值为 72。 - 11: 嘴巴,调整嘴巴尺寸。对应力度调整范围为 [-100,100],正值为变大,负值为变小,绝对值越大调整效果越强,预设值为 20。 + 11: 嘴巴,修饰嘴巴尺寸。对应修饰力度范围为 [-100,100],正值为变大,负值为变小,绝对值越大修饰效果越强,预设值为 20。
    From b7ae6b1ef87033adbcbcd6368f1ff77c9bf1f44c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 21 Oct 2024 17:13:29 +0800 Subject: [PATCH 148/354] remove redundant word --- dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 0e7a56acb41..874647b2ab8 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    调用该方法可对人脸部各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    +

    调用该方法可对人脸各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。
    From 0807000e84349329743a8cbf98f8e8c002b52985 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 22 Oct 2024 10:52:12 +0800 Subject: [PATCH 149/354] remove period --- .../API/api_irtcengine_setvideodenoiseroptions.dita | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index 289e286ba95..f0b5011b622 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -73,11 +73,11 @@ options 视频降噪选项,用于设置视频降噪的效果。详见 。如果选项中提供的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下:
      -
    • lighteningContrastLevel
    • -
    • lighteningLevel:0.0。
    • -
    • smoothnessLevel:0.5。
    • -
    • rednessLevel:0.0。
    • -
    • sharpnessLevel:0.1。
    • +
    • lighteningContrastLevel
    • +
    • lighteningLevel:0.0
    • +
    • smoothnessLevel:0.5
    • +
    • rednessLevel:0.0
    • +
    • sharpnessLevel:0.1
    From 142e15062be51b607e1d87cf8c4cda3988f28837 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 22 Oct 2024 14:27:35 +0800 Subject: [PATCH 150/354] modification --- dita/RTC-NG/API/api_canvas_addview.dita | 13 +- dita/RTC-NG/API/api_canvas_canvas.dita | 57 +++++ dita/RTC-NG/API/api_canvas_getconfigs.dita | 10 +- dita/RTC-NG/API/api_canvas_removeview.dita | 3 +- dita/RTC-NG/API/api_canvas_setconfigs.dita | 10 +- .../API/api_canvasconfig_getmirrormode.dita | 8 +- .../API/api_canvasconfig_getrendermode.dita | 11 +- .../API/api_canvasconfig_setrendermode.dita | 9 +- dita/RTC-NG/API/api_config_getappid.dita | 6 +- dita/RTC-NG/API/api_config_setappid.dita | 6 +- .../API/api_config_setjsonparameter.dita | 8 +- dita/RTC-NG/API/api_player_getconfigs.dita | 10 +- dita/RTC-NG/API/api_player_getinfo.dita | 17 +- dita/RTC-NG/API/api_player_getstats.dita | 6 +- dita/RTC-NG/API/api_player_muteaudio.dita | 41 +-- dita/RTC-NG/API/api_player_mutevideo.dita | 41 +-- dita/RTC-NG/API/api_player_openwithurl.dita | 6 +- dita/RTC-NG/API/api_player_pause.dita | 4 +- dita/RTC-NG/API/api_player_play.dita | 13 +- dita/RTC-NG/API/api_player_player.dita | 58 +++++ .../RTC-NG/API/api_player_preloadwithurl.dita | 20 +- .../API/api_player_registerobserver.dita | 14 +- dita/RTC-NG/API/api_player_setcanvas.dita | 10 +- dita/RTC-NG/API/api_player_setconfigs.dita | 11 +- dita/RTC-NG/API/api_player_stop.dita | 11 +- .../API/api_player_unregisterobserver.dita | 9 +- .../api_playerconfig_getabrfallbacklayer.dita | 10 +- ..._playerconfig_getabrsubscriptionlayer.dita | 8 +- .../API/api_playerconfig_getautoplay.dita | 14 +- .../api_playerconfig_setabrfallbacklayer.dita | 23 +- ..._playerconfig_setabrsubscriptionlayer.dita | 48 +++- .../API/api_playerconfig_setautoplay.dita | 13 +- .../api_playerconfig_setjsonparameter.dita | 4 +- dita/RTC-NG/API/api_rte_getconfigs.dita | 9 +- dita/RTC-NG/API/api_rte_getfrombridge.dita | 4 +- dita/RTC-NG/API/api_rte_rte.dita | 6 +- dita/RTC-NG/API/api_rte_setconfigs.dita | 16 +- .../API/callback_playerobserver_onevent.dita | 4 +- .../callback_playerobserver_onmetadata.dita | 8 +- ...ck_playerobserver_onplayerinfoupdated.dita | 12 +- ...ck_playerobserver_onresolutionchanged.dita | 2 +- ...allback_playerobserver_onstatechanged.dita | 2 +- dita/RTC-NG/API/class_config.dita | 14 +- dita/RTC-NG/API/class_rte.dita | 4 +- dita/RTC-NG/API/class_rteplayerinfo.dita | 22 +- dita/RTC-NG/API/enum_rteabrfallbacklayer.dita | 41 ++- .../API/enum_rteabrsubscriptionlayer.dita | 18 +- dita/RTC-NG/API/enum_rteerrorcode.dita | 48 ++++ dita/RTC-NG/API/enum_rteplayerevent.dita | 13 +- .../API/enum_rteplayermetadatatype.dita | 24 ++ dita/RTC-NG/API/rtc_api_data_type.dita | 6 + dita/RTC-NG/API/toc_rte_player.dita | 2 +- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 233 +++++++++++++++++- .../config/relations-rtc-ng-api.ditamap | 3 +- dita/rtc_api.xpr | 80 +++--- 56 files changed, 838 insertions(+), 266 deletions(-) create mode 100644 dita/RTC-NG/API/api_canvas_canvas.dita create mode 100644 dita/RTC-NG/API/api_player_player.dita create mode 100644 dita/RTC-NG/API/enum_rteerrorcode.dita create mode 100644 dita/RTC-NG/API/enum_rteplayermetadatatype.dita diff --git a/dita/RTC-NG/API/api_canvas_addview.dita b/dita/RTC-NG/API/api_canvas_addview.dita index 94b6f6a8975..491df20a0c6 100644 --- a/dita/RTC-NG/API/api_canvas_addview.dita +++ b/dita/RTC-NG/API/api_canvas_addview.dita @@ -38,7 +38,7 @@
    调用时机 -

    //TODO

    +

    该方法需要在 之前调用。

    调用限制 @@ -51,11 +51,12 @@ view HWND 窗口句柄值。 SurfaceView 对象。 - UIView 对象。 + UIView 对象。 + NSView 对象。 config - View 对象的设置,详见 。//TODO 目前可传空是什么意思?什么情况下可以传空? + View 对象的设置,目前请传空。 @@ -70,5 +71,9 @@
  • :添加视图失败。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_canvas_canvas.dita b/dita/RTC-NG/API/api_canvas_canvas.dita new file mode 100644 index 00000000000..bb991c0516c --- /dev/null +++ b/dita/RTC-NG/API/api_canvas_canvas.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="Canvas_Canvas"/> + 构造一个 Canvas 对象。 + + + + + + + + +
    +

    + public Canvas(Rte rte, CanvasInitialConfig config); + + - (instancetype _Nonnull)initWithRte:(AgoraRte* _Nonnull)rte initialConfig:(AgoraRteCanvasInitialConfig * _Nullable)config; + Canvas(Rte *rte, CanvasInitialConfig *initial_config); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + + + + + initial_config + config + Canvas 的对象配置,目前可传空。 + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_canvas_getconfigs.dita b/dita/RTC-NG/API/api_canvas_getconfigs.dita index 7c866e1c86e..95d97bed153 100644 --- a/dita/RTC-NG/API/api_canvas_getconfigs.dita +++ b/dita/RTC-NG/API/api_canvas_getconfigs.dita @@ -30,11 +30,11 @@
    v4.5.0
    -

    +

    调用时机 -

    //TODO 如果没有设置,调用这个方法会返回什么?默认设置?

    +

    该方法需要在 之后调用。

    调用限制 @@ -53,5 +53,9 @@
    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_canvas_removeview.dita b/dita/RTC-NG/API/api_canvas_removeview.dita index 0f6fdd6dcdd..256d1fabca9 100644 --- a/dita/RTC-NG/API/api_canvas_removeview.dita +++ b/dita/RTC-NG/API/api_canvas_removeview.dita @@ -38,7 +38,7 @@
    调用限制 -

    //TODO 一次只能移除一个视图?

    +

    一次只能移除一个视图。

    参数 @@ -64,5 +64,6 @@
  • :移除视图失败。
  • +
    diff --git a/dita/RTC-NG/API/api_canvas_setconfigs.dita b/dita/RTC-NG/API/api_canvas_setconfigs.dita index 5c5cd6d5e17..65d2b4c80b2 100644 --- a/dita/RTC-NG/API/api_canvas_setconfigs.dita +++ b/dita/RTC-NG/API/api_canvas_setconfigs.dita @@ -30,11 +30,11 @@
    v4.5.0
    -

    +

    调用时机 -

    当你调用 指定一个 Canvas 对象来显示视频后,你可以调用该方法来设置渲染配置。//TODO

    +

    当你调用 指定一个 Canvas 对象来显示视频后,你可以调用该方法来设置渲染配置。

    调用限制 @@ -53,5 +53,9 @@
    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita index 174dfaf955d..4aff9950836 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita @@ -30,12 +30,9 @@
    v4.5.0
    -

    +

    -
    - 调用时机 -

    在创建类对象之后调用。//TODO

    -
    +
    调用限制

    无。

    @@ -51,5 +48,6 @@
    <ph keyref="return-section-title"/>

    当前设置的镜像模式,详见

    +
    diff --git a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita index 13dab60fa7a..2810e61845b 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita @@ -30,7 +30,10 @@
    v4.5.0
    -

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。

    调用限制 @@ -48,5 +51,9 @@ <ph keyref="return-section-title"/>

    当前设置的视频渲染模式,详见

    - +
    + 异常 +

    +
    + diff --git a/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita index 9d83551a935..4df9a6f1b20 100644 --- a/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_setrendermode.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    +

    调用时机 -

    //TODO setconfig 之前调用

    -
    +

    该方法需要在 之前调用。

    +
    调用限制

    无。

    @@ -52,5 +52,6 @@
    - +
    + diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index 77442b0a69a..c2d34195ced 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -31,7 +31,7 @@

    -

    +
    调用限制

    无。

    @@ -51,7 +51,7 @@
    • 方法调用成功,返回设置的 App ID。
    • 方法调用失败,返回空字符串。
    • -
    -

    + +

    //TODO

    diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index b223b00d102..0241df60185 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -51,8 +51,8 @@
    -
    - <ph props="android">异常</ph> -

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    +
    + 异常 +

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    diff --git a/dita/RTC-NG/API/api_config_setjsonparameter.dita b/dita/RTC-NG/API/api_config_setjsonparameter.dita index 38c1c72a20f..93d8895ddee 100644 --- a/dita/RTC-NG/API/api_config_setjsonparameter.dita +++ b/dita/RTC-NG/API/api_config_setjsonparameter.dita @@ -38,8 +38,8 @@
    调用时机 -

    该方法需要在创建 对象之后调用。//TODO 这个config对象是在setconfig的时候创建的,所以可不可以说需要在 setconfig 之后调用?

    -
    +

    该方法需要在 之前调用。

    +
    调用限制

    无。

    @@ -57,9 +57,7 @@
    -
    - <ph>异常</ph> -

    +
    diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita index 838bead0eea..f69e46b4633 100644 --- a/dita/RTC-NG/API/api_player_getconfigs.dita +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -30,11 +30,11 @@
    v4.5.0
    -

    +

    调用时机 -

    //TODO

    +

    该方法需要在 之前调用。

    调用限制 @@ -54,5 +54,9 @@
    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_getinfo.dita b/dita/RTC-NG/API/api_player_getinfo.dita index c3588430f73..783081f27b8 100644 --- a/dita/RTC-NG/API/api_player_getinfo.dita +++ b/dita/RTC-NG/API/api_player_getinfo.dita @@ -2,7 +2,7 @@ <ph keyref="GetInfo"/> - 获取播放器播放的媒体流的相关信息。 + 获取播放器播放及媒体流的相关信息。 @@ -30,12 +30,11 @@
    v4.5.0
    -

    你可以通过该方法获取媒体流的相关信息,例如媒体流的数量、音频采样率、视频分辨率宽高等信息。

    -

    +

    你可以通过该方法获取播放器及媒体流的相关信息,例如媒体流的数量、音频采样率、视频分辨率宽高等信息。

    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 @@ -46,7 +45,7 @@ info - 媒体流的相关信息,详见 + 播放器及媒体流的相关信息,详见 @@ -56,10 +55,14 @@
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -

    获取媒体流信息是否成功:

      +

      获取信息是否成功:

      • :获取信息成功。
      • :获取信息失败。

    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index eece3ea304f..e66b98fba35 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -34,11 +34,11 @@
    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 -

    //TODO

    +

    无。

    参数 @@ -49,7 +49,7 @@ callback - 回调接口,用于异步接收统计信息和可能的错误信息,详见 。//TODO 这个是否要写文档? + 回调接口,用于异步接收统计信息和可能的错误信息,详见
    diff --git a/dita/RTC-NG/API/api_player_muteaudio.dita b/dita/RTC-NG/API/api_player_muteaudio.dita index ac10f8b9ab1..0e0c5a736e8 100644 --- a/dita/RTC-NG/API/api_player_muteaudio.dita +++ b/dita/RTC-NG/API/api_player_muteaudio.dita @@ -2,7 +2,7 @@ <ph keyref="MuteAudio"/> - //TODO + 是否订阅主播的音频流。 @@ -30,38 +30,45 @@
    v4.5.0
    -

    -
    -
    - 适用场景 -

    +

    观众端可以调用该方法来设置是否订阅主播的音频流。

    调用时机 -

    +

    该方法需要在 之后调用。

    调用限制 -

    +

    无。

    参数 - - + mute + 是否订阅主播的音频流: +
    • :订阅主播的音频流。
    • +
    • :不订阅主播的音频流。
    +
    + + +
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    - +

    订阅或取消订阅操作是否成功:

      +
    • :操作成功。
    • +
    • :操作失败。
    • +
    +

    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_mutevideo.dita b/dita/RTC-NG/API/api_player_mutevideo.dita index 4b9e65d7b7e..f6732e24bbb 100644 --- a/dita/RTC-NG/API/api_player_mutevideo.dita +++ b/dita/RTC-NG/API/api_player_mutevideo.dita @@ -2,7 +2,7 @@ <ph keyref="MuteVideo"/> - //TODO + 是否订阅主播的视频流。 @@ -27,24 +27,20 @@
    自从
    -
    v
    +
    v4.5.0
    -

    -

    -
    - 适用场景 -

    +

    观众端可以调用该方法来设置是否订阅主播的视频流。

    -
    +
    调用时机

    调用限制 -

    +

    无。

    - -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +

    订阅或取消订阅操作是否成功:

      +
    • :操作成功。
    • +
    • :操作失败。
    • +
    +

    +
    + +

    +
    diff --git a/dita/RTC-NG/API/api_player_openwithurl.dita b/dita/RTC-NG/API/api_player_openwithurl.dita index 7216f788be9..fadec913074 100644 --- a/dita/RTC-NG/API/api_player_openwithurl.dita +++ b/dita/RTC-NG/API/api_player_openwithurl.dita @@ -31,11 +31,7 @@

    该方法支持通过 URL 打开实时流媒体。如果你想要加快打开 URL 资源的速度,可以在调用该方法前,调用 预加载资源。

    -

    如果资源打开失败,你会收到 的回调报告状态为 。此时你需要先调用 然后再调用 重新打开 URL 资源。成功打开后,你可以调用 进行播放。

    -
    -
    - 适用场景 -

    //TODO

    +

    如果资源打开失败,你会收到 的回调报告状态为 。此时你需要先调用 然后再调用 重新打开 URL 资源。如果你设置关闭了自动播放,打开资源后可以调用 进行播放。

    调用时机 diff --git a/dita/RTC-NG/API/api_player_pause.dita b/dita/RTC-NG/API/api_player_pause.dita index a7c29847bed..7f7e5096bf5 100644 --- a/dita/RTC-NG/API/api_player_pause.dita +++ b/dita/RTC-NG/API/api_player_pause.dita @@ -31,7 +31,6 @@

    当你调用 播放 URL 流后,如果你想暂停播放,可以调用此方法。如果你想要停止播放,请调用

    -

    调用时机 @@ -43,7 +42,7 @@
    参数 @@ -61,5 +60,6 @@
  • :暂停播放失败。
  • +
    diff --git a/dita/RTC-NG/API/api_player_play.dita b/dita/RTC-NG/API/api_player_play.dita index 09c72763c00..1610222139a 100644 --- a/dita/RTC-NG/API/api_player_play.dita +++ b/dita/RTC-NG/API/api_player_play.dita @@ -30,16 +30,15 @@
    v4.5.0
    -

    当你调用 打开成功拉取实时流媒体后,你可以调用此方法进行播放。

    -

    +

    如果你关闭了自动播放,当你调用 打开成功拉取实时流媒体,你可以调用此方法进行播放。

    调用时机 -

    //TODO 是否需要收到 player state 为 opencompleted 然后才能调用 play?

    +

    请在收到 会调报告状态为 后再调用该方法。

    调用限制 -

    该方法目前仅支持播放带 rte:// 前缀的 URL。//TODO

    +

    该方法目前仅支持播放带 rte:// 前缀的 URL。

    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_player.dita b/dita/RTC-NG/API/api_player_player.dita new file mode 100644 index 00000000000..989bace7b38 --- /dev/null +++ b/dita/RTC-NG/API/api_player_player.dita @@ -0,0 +1,58 @@ + + + + <ph keyref="Player_Player"/> + 构造一个播放器对象。 + + + + + + + + +
    +

    + public Player(Rte rte, PlayerInitialConfig initialConfig); + + - (instancetype _Nonnull)initWithRte:(AgoraRte * _Nonnull)rte initialConfig:(AgoraRtePlayerInitialConfig * _Nullable)config; + explicit Player(Rte *self, PlayerInitialConfig *config = nullptr) ; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 调用时机 +

    该方法需要在 之后调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + rte + Rte + 对象。 + + + config + initialConfig + 播放器对象设置,可传空指针。 + +
    +
    +
    diff --git a/dita/RTC-NG/API/api_player_preloadwithurl.dita b/dita/RTC-NG/API/api_player_preloadwithurl.dita index 4ae9172860a..06a4771e08f 100644 --- a/dita/RTC-NG/API/api_player_preloadwithurl.dita +++ b/dita/RTC-NG/API/api_player_preloadwithurl.dita @@ -13,10 +13,11 @@

    - public void preloadWithUrl(String url) throws RteException; + public static void preloadWithUrl(String url) throws RteException; - - (BOOL)preloadWithUrl:(NSString * _Nonnull)url error:(AgoraRteError * _Nullable)error; - bool PreloadWithUrl(const char* url, Error* err); + + (BOOL)preloadWithUrl:(NSString * _Nonnull)url error:(AgoraRteError * _Nullable)error; + static bool PreloadWithUrl(const char* url, Error *err = nullptr) { + return RtePlayerPreloadWithUrl(nullptr, url, err != nullptr ? err->get_underlying_impl() : nullptr); @@ -30,16 +31,15 @@

    v4.5.0
    -

    成功预加载后,可以加快通过 打开 URL 资源的速度。当需要使用这些资源时,可以更加快速地访问,缩短等待加载的过程。//TODO 是缩短加载时间,还是可以立即访问,无需等待?

    -

    +

    成功预加载后,可以加快通过 打开 URL 资源的速度。当需要使用这些资源时,可以更加快速地访问,缩短等待的过程。

    适用场景 -

    在播放视频或音频之前,提前加载可以减少用户等待时间,提供更流畅的视听体验。

    +

    在打开视频或音频之前,提前加载可以减少用户等待时间,提供更流畅的视听体验。

    调用时机 -

    //TODO

    +

    该方法需要在 之前调用。

    调用限制 @@ -65,5 +65,9 @@
  • :预加载失败。
  • -
    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita index 61384f194ec..f0f87352437 100644 --- a/dita/RTC-NG/API/api_player_registerobserver.dita +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -2,7 +2,7 @@ <ph keyref="RegisterObserver_Player"/> - 注册 RTE 播放器事件对象。 + 注册播放器观测器的对象。 @@ -30,12 +30,12 @@
    v4.5.0
    -

    你需要在该方法中实现一个 类,并根据场景需要,注册该类的回调。

    +

    你需要在该方法中实现一个 类。

    -
    +
    调用时机 -

    //TODO

    +

    调用限制 @@ -61,5 +61,9 @@
  • :注册失败。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_setcanvas.dita b/dita/RTC-NG/API/api_player_setcanvas.dita index 9baadc22f77..426df33b9a1 100644 --- a/dita/RTC-NG/API/api_player_setcanvas.dita +++ b/dita/RTC-NG/API/api_player_setcanvas.dita @@ -30,21 +30,16 @@
    v4.5.0
    -

    该方法用于指定一个 Canvas 对象来显示视频。当视频流成功加载后,视频画面会显示在这个指定的 Canvas 上。

    -

    +

    该方法用于指定一个 Canvas 对象来显示视频。当视频流成功播放后,视频画面会显示在这个指定的 Canvas 上。

    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制

    无。

    -
    参数 @@ -65,5 +60,6 @@
  • :设置失败,可通过 errerror 参数返回的错误码了解详细信息。
  • +
    diff --git a/dita/RTC-NG/API/api_player_setconfigs.dita b/dita/RTC-NG/API/api_player_setconfigs.dita index 5f8343e425a..362cb2826e7 100644 --- a/dita/RTC-NG/API/api_player_setconfigs.dita +++ b/dita/RTC-NG/API/api_player_setconfigs.dita @@ -2,7 +2,7 @@ <ph keyref="SetConfigs_Player"/> - 设置播放器配置。 + 播放器配置。 @@ -31,11 +31,10 @@

    你可以调用该方法来进行播放器设置,如开启自动播放、订阅不同分辨率和码率的视频流等。

    -

    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 @@ -61,5 +60,9 @@
  • :设置失败。
  • -
    +
    + + <p/> + </section> + </refbody> </reference> diff --git a/dita/RTC-NG/API/api_player_stop.dita b/dita/RTC-NG/API/api_player_stop.dita index fd4791de8b4..fc46a4f1635 100644 --- a/dita/RTC-NG/API/api_player_stop.dita +++ b/dita/RTC-NG/API/api_player_stop.dita @@ -30,12 +30,11 @@ <dd>v4.5.0</dd> </dlentry> </dl> - <p props="android" conkeyref="SetConfigs_Rte/exception"/> <p>当你调用 <xref keyref="Play_Player"/> 播放 URL 流后,如果你想停止播放,可以调用此方法。如果你需要暂停播放,请调用 <xref keyref="Pause_Player"/>。</p> </section> <section id="timing" deliveryTarget="details"> <title>调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    调用限制 @@ -43,7 +42,7 @@
    参数 @@ -61,5 +60,9 @@
  • :停止播放失败。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_player_unregisterobserver.dita b/dita/RTC-NG/API/api_player_unregisterobserver.dita index ac8ac714d1c..a8516fed24f 100644 --- a/dita/RTC-NG/API/api_player_unregisterobserver.dita +++ b/dita/RTC-NG/API/api_player_unregisterobserver.dita @@ -2,7 +2,7 @@ <ph keyref="UnregisterObserver_Player"/> - 取消注册 RTE 播放器事件观测器。 + 取消注册播放器事件观测器的对象。 @@ -31,7 +31,6 @@

    调用 注册播放器事件观测器后,如果你需要取消注册,请调用该方法。

    -

    调用时机 @@ -61,5 +60,9 @@
  • :取消注册失败。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita index c3e1c7444b5..3231c31746e 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita @@ -30,12 +30,11 @@
    v4.5.0
    -

    //TODO是否有默认值?

    -

    +

    -
    +
    调用时机 -

    //TODO

    +

    调用限制 @@ -51,6 +50,7 @@
    <ph keyref="return-section-title"/> -

    设置的视频流回退选项,详见

    +

    设置的视频流回退选项,详见

    +

    diff --git a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita index f6d3ab56640..048a22bd2c9 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita @@ -30,12 +30,11 @@
    v4.5.0
    -

    //TODO

    -

    +

    调用时机 -

    //rte engine 之后。

    +

    该方法需要在 之后调用。

    调用限制 @@ -51,6 +50,7 @@
    <ph keyref="return-section-title"/> -

    当前设置的视频质量层级,详见

    +

    设置的视频质量层级,详见

    +

    方法调用成功时,返回设置的视频质量层级,详见 。方法调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    diff --git a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita index fe6bdbda985..b3fb8261f3d 100644 --- a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    你可以调用该方法来得知当前播放器是否开启了自动播放。

    +

    你可以调用该方法来得知当前播放器的自动播放设置。

    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 @@ -49,13 +49,17 @@
    -
    +
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -

    获取自动播放设置是否成功:

      +

      获取自动播放设置是否成功:

      • :获取成功。
      • :获取失败。

    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita index e88c5861870..c99d263c9ca 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita @@ -30,20 +30,24 @@
    v4.5.0
    -

    //TODO 应该也需要开启 abr?如果没开,1-6 layer 不能切换。

    -

    +

    网络不理想的环境下,实时通信音视频的质量会下降。调用该方法后,SDK 会在网络情况差的时候将视频流的分辨率回退到你指定的视频质量层级。不同的视频质量层级对应不同的分辨率和码率。同时,SDK 会持续监控网络质量,并在网络质量改善时恢复至你所订阅的视频流质量层级。

    适用场景 -

    你可以调用该方法来设置网络环境不稳定时,视频流的回退选项。以确保视听体验。你可以根据需求设置回退到不同质量层级的视频流,分别对应不同的视频分辨率和码率。//TODO 分两个场景讨论,普通场景(只能切 audio only 和low),如果有高的要求,开启abr。

    +

    +

      +
    • 在一般场景下,你可以调用该方法并将回退的质量层级设为 ,SDK 会在网络情况差的时候将视频流回退为低质量的视频流、或是仅接收音频流。
    • +
    • 如果对视频流回退的分辨率要求较高,可以联系开通 ABR 功能。开通后,你可以自定义每个层级的分辨率。SDK 会以你指定的最低质量层级分辨率为下限,在此范围内根据网络状况动态调整分辨率。 + 详细功能实现详见 +

    -
    +
    调用时机 -

    //engine 之后。

    -
    +

    +

    调用限制 -

    无。

    +

    如果没有开通 ABR(自适应码率)功能,调用该方法后只能在源频道选择回退至 。开通 ABR 功能后,可以转码频道选择回退到所有质量层级的视频流,并支持自定义不同质量层级的视频流所对应的分辨率。

    参数 @@ -52,12 +56,15 @@ fallbackLayer abr_fallback_layer layer - 视频流回退的质量层级,详见 + 视频流回退的质量层级,详见 。 + +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita index 406cdafa369..6a928ea38f0 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita @@ -30,21 +30,20 @@
    v4.5.0
    -

    //TODO 使用这个方法需要额外找销售开通 abr 功能吗?切换 layer1-6 需要开通。不同的视频质量层级对应不同的分辨率和码率。//TODO 链接到最佳实践:补充源频道和转码频道的差异。 +

    你可以根据实际的网络情况切换订阅不同的视频流质量层级,对应不同的分辨率和码率。具体实现细节详见

    -

    适用场景 -

    在网络环境不稳定的情况下,观众端可以根据实际的网络状况来选择合适的视频质量级别,以保证流畅的观感体验。

    +

    在网络环境不稳定的情况下,观众端可以根据实际的网络状况来选择订阅合适的视频质量级别,以保证流畅的观感体验。

    调用时机 -

    //TODO

    -
    +

    该方法需要在 之前调用。

    +
    调用限制 -

    //TODO

    +

    如果没有开通 ABR(自适应码率)功能,调用该方法后观众只能在源频道切换视频大小流,即在 之间切换。开通 ABR 功能后,你可以自定义不同质量层级的视频流所对应的分辨率,观众可以在专门的转码频道根据需求切换所有质量层级的视频流。详细功能实现详见

    参数 @@ -53,12 +52,47 @@ subscriptionLayer abr_subscription_layer layer - 订阅的视频质量层级,详见 + 订阅的视频质量层级,详见 。 +

    在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: + + 视频质量层级 + 分辨率 + + + + +

    2160p(4K)

    + + + + + 1440p(2K) + + + + 1080p(HD) + + + + 720p(HD) + + + + 540p(SD) + + + + 480p(SD) + +

    + 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。 +
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_setautoplay.dita b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita index 5a21026c35b..fd3459b1768 100644 --- a/dita/RTC-NG/API/api_playerconfig_setautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita @@ -30,12 +30,11 @@
    v4.5.0
    -

    当你调用 打开媒体流之后,你可以调用该方法设置是否自动播放。如不设置,默认会启用自动播放。

    -

    +

    当你调用 打开媒体流之前,你可以调用该方法设置是否自动播放。如不设置,默认会启用自动播放。

    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之前调用。

    调用限制 @@ -49,12 +48,16 @@ auto_play 是否自动播放:
    • :(默认)开启自动播放。
    • -
    • :(默认)关闭自动播放。
    +
  • :关闭自动播放。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita index 1b9b4492dcc..4768f2fefb3 100644 --- a/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita +++ b/dita/RTC-NG/API/api_playerconfig_setjsonparameter.dita @@ -38,7 +38,7 @@
    调用时机 -

    //TODO

    +

    该方法需要在 之前调用。

    调用限制 @@ -56,6 +56,6 @@
    -
    +
    diff --git a/dita/RTC-NG/API/api_rte_getconfigs.dita b/dita/RTC-NG/API/api_rte_getconfigs.dita index f724c22694a..6fc0fe78a59 100644 --- a/dita/RTC-NG/API/api_rte_getconfigs.dita +++ b/dita/RTC-NG/API/api_rte_getconfigs.dita @@ -31,11 +31,10 @@

    -

    调用时机 -

    //TODO 创建 rte 对象之后。

    +

    该方法需要在 之后调用。

    调用限制 @@ -61,5 +60,9 @@
  • :获取失败。
  • - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index dd0f52d5962..225eb54bdbf 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    此方法适用于已经初始化了 RTC 引擎的场景,可以省去 RTE 引擎的初始化步骤。//TODO 如果没有初始化 rtc 引擎,是否需要调用 RTE + InitMediaEngine。需要。两种初始化方法,一个是bridge,一个是rte+init。

    +

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建并初始化 RTC 引擎,则需调用 创建一个 RTE 对象然后再调用 进行初始化。

    调用时机 @@ -46,7 +46,7 @@ err error - //TODO 原型里面 refer 的是 Error,跟 RteErrorCode 有什么关系吗?指向 对象的指针,用于接收状态及错误码。 + 指向 对象的指针,用于接收状态及错误码。
    diff --git a/dita/RTC-NG/API/api_rte_rte.dita b/dita/RTC-NG/API/api_rte_rte.dita index 76317fbda0d..f8c29c5216e 100644 --- a/dita/RTC-NG/API/api_rte_rte.dita +++ b/dita/RTC-NG/API/api_rte_rte.dita @@ -1,12 +1,12 @@ - <ph keyref="RTE"/> + <ph keyref="Rte"/> 构造一个 RTE 对象。 - + @@ -47,7 +47,7 @@ initialConfig config - 初始化设置,详见 + 初始化设置,当前可传空。
    diff --git a/dita/RTC-NG/API/api_rte_setconfigs.dita b/dita/RTC-NG/API/api_rte_setconfigs.dita index d5ea7da9996..ba937483103 100644 --- a/dita/RTC-NG/API/api_rte_setconfigs.dita +++ b/dita/RTC-NG/API/api_rte_setconfigs.dita @@ -35,7 +35,7 @@
    调用时机 -

    //TODO设置 app id 必须在初始化之前,其他的选项可以按需随时更新。

    +

    如果你需要通过该方法设置 App ID,请在 之前调用。如需更新其他配置,可随时调用该方法。

    调用限制 @@ -54,15 +54,19 @@ 状态或错误信息,详见
    -
    - <ph keyref="return-section-title" props="cpp apple framework"/> - <ph props="android">异常</ph> +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    配置是否成功:

    • :配置成功。
    • :配置失败。

    -

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    - +
    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/callback_playerobserver_onevent.dita b/dita/RTC-NG/API/callback_playerobserver_onevent.dita index 68fe870d3b7..afb3e50904a 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onevent.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onevent.dita @@ -31,11 +31,11 @@
    v4.5.0
    -

    如果你需要监控播放器事件,需要在调用 方法时注册该回调。

    +

    如果你需要监控播放器事件,需要先调用 注册播放器观测器的对象。

    触发时机 -

    //TODO 什么情况下会触发?

    +

    当播放器事件发生变化时,SDK 会触发该回调。

    使用限制 diff --git a/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita index f88c7f4798a..ceb88482a12 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita @@ -32,11 +32,11 @@
    v4.5.0
    -

    如果你需要获取媒体流的元数据,需要在调用 方法时注册该回调。

    +

    如果你需要获取媒体流的附属信息,需要先调用 注册播放器观测器的对象。

    触发时机 -

    在 SDK 解析播放器所播放的媒体流的元数据后,会触发该回调报告数据的类型及其具体内容。//TODO review

    +

    在 SDK 解析播放器所播放的媒体流的附属信息后,会触发该回调报告数据的类型及其具体内容。

    使用限制 @@ -47,11 +47,11 @@ type - 元数据类型,详见 + 附属信息类型,详见 data - 解析的元数据。 + 解析的附属信息。 length diff --git a/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita b/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita index 4df44b4f01d..c4c97b14e06 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onplayerinfoupdated.dita @@ -2,7 +2,7 @@ <ph keyref="onPlayerInfoUpdated_PlayerObserver"/> - 媒体流的相关信息发生变化回调。 + 播放器及媒体流的相关信息发生变化回调。 @@ -31,15 +31,11 @@
    v4.5.0
    -

    如果你需要获取媒体流的相关信息,可以在调用 方法时注册该回调,或者通过 方法来获取。

    -
    -
    - 适用场景 -

    +

    如果你需要获取播放器、媒体流的相关信息,需要先调用 注册播放器观测器的对象。你也可以直接通过 方法来获取。

    触发时机 -

    当播放器播放的媒体流的相关信息发生变化时,SDK 会触发该回调。

    +

    当播放器及媒体流的相关信息发生变化时,SDK 会触发该回调。

    使用限制 @@ -50,7 +46,7 @@ info - 媒体流的相关信息,详见 + 播放器及媒体流的相关信息,详见
    diff --git a/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita index b181129b3b8..4ef4af36d1b 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onresolutionchanged.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    如果你需要监控播放器所播放视频流分辨率的变化,需要在调用 方法时注册该回调。

    +

    如果你需要监控播放器所播放视频流分辨率的变化,需要先调用 注册播放器观测器的对象。

    触发时机 diff --git a/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita b/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita index c4049307bfe..7790c0a5db6 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onstatechanged.dita @@ -31,7 +31,7 @@
    v4.5.0
    -

    如果你需要监控播放器状态的变化,需要在调用 方法时注册该回调。

    +

    如果你需要监控播放器状态的变化,需要先调用 注册播放器观测器的对象。

    触发时机 diff --git a/dita/RTC-NG/API/class_config.dita b/dita/RTC-NG/API/class_config.dita index 2886fc22b54..96c0a29194b 100644 --- a/dita/RTC-NG/API/class_config.dita +++ b/dita/RTC-NG/API/class_config.dita @@ -27,7 +27,7 @@ void SetAppId(const char *app_id, Error *err); const char* GetAppId(Error *err); void SetJsonParameter(const char *json_parameter, Error *err = nullptr); - std::string GetJsonParameter(Error *err = nullptr)//TODO 这两个方法是否需要对外? + std::string GetJsonParameter(Error *err = nullptr) }; @@ -48,20 +48,20 @@ 方法 - SetAppId + 设置 App ID。详见 - GetAppId + 获取设置的 App ID。详见 - SetJsonParameter - //TODO 待确认是否需要写文档 + + 设置 SDK 的 JSON 配置信息。详见 - SetJsonParameter - // + + 获取设置 SDK 的 JSON 配置信息。详见
    diff --git a/dita/RTC-NG/API/class_rte.dita b/dita/RTC-NG/API/class_rte.dita index d0a1f93ef4e..9ffc1b25e4b 100644 --- a/dita/RTC-NG/API/class_rte.dita +++ b/dita/RTC-NG/API/class_rte.dita @@ -1,6 +1,6 @@ - <ph keyref="RTE"/> - RTE API 的基础接口类,提供了实现实时是音视频的主要方法。//TODO 需review + <ph keyref="Rte"/> + RTE API 的基础接口类,提供了实现实时音视频的主要方法。 diff --git a/dita/RTC-NG/API/class_rteplayerinfo.dita b/dita/RTC-NG/API/class_rteplayerinfo.dita index a78de61312b..46fefa6acd6 100644 --- a/dita/RTC-NG/API/class_rteplayerinfo.dita +++ b/dita/RTC-NG/API/class_rteplayerinfo.dita @@ -2,7 +2,7 @@ <ph keyref="RtePlayerInfo"/> - 媒体流的相关信息。 + 播放器及媒体流的相关信息。

    @@ -86,22 +86,26 @@ has_audio hasAudio - URL 媒体流中是否存在音频流。//TODO + URL 媒体流中是否存在音频流: +

    • :存在音频流。
    • +
    • :不存在音频流。
    has_video hasVideo - URL 媒体流中是否存在视频流。//TODO + URL 媒体流中是否存在视频流: +
    • :存在视频流。
    • +
    • :不存在视频流。
    is_audio_muted isAudioMuted - 音频流是否被静音。//TODO + 音频流是否在本地被静音。//TODO is_video_muted isVideoMuted - 视频流是否被静音。//TODO + 视频流是否在本地被静音。 video_height @@ -131,15 +135,15 @@ audio_bits_per_sample audioBitsPerSample - 每个音频样本使用的位数(位深)。//TODO 16位、24位 还是 32位? + 预留参数。
    -
    +
    方法 - - + init + //TODO
    diff --git a/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita index 68679d8fe3c..32db846f25c 100644 --- a/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita +++ b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita @@ -17,7 +17,46 @@ - + 0:0: 不对音视频流作回退处理,但不能保证音视频流的质量。 + + + + 1:(默认)回退至最低质量的视频流。该层级的分辨率和码率最低。 + 如果你开启了 ABR 功能,并将回退的质量层级设为 , 弱网情况下 SDK 的回退顺序是:
    • 层级 1 - 6(如有)
    • +
    • 最低质量层级
    +
    + + + 2:先尝试只接收最低质量的视频流;如果因网络环境太差无法显示视频,则再回退到只接收订阅的音频流。 + + + + 3:回退到视频质量层级 1。该层级的分辨率和码率仅低于所订阅的最高质量的视频流。 +
      +
    • 使用 开通 ABR 功能。开通后,你可以自定义每一个层级的分辨率,然后选择其中任意一个层级作为视频流回退的最低分辨率。在网络情况差时,SDK 会以此为下限,在此范围内根据网络状况动态调整分辨率。
    • +
    • 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。
    • +
    +
    +
    + + + 4:回退到视频质量层级 2。该层级的分辨率和码率仅低于层级 1。 + + + + 5:回退到视频质量层级 3。该层级的分辨率和码率仅低于层级 2。 + + + + 5:回退到视频质量层级 4。该层级的分辨率和码率仅低于层级 3。 + + + + 5:回退到视频质量层级 5。该层级的分辨率和码率仅低于层级 4。 + + + + 5:回退到视频质量层级 6。该层级的分辨率和码率仅低于层级 5。
    diff --git a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita index 58a3018d75d..7cb5e89c3ad 100644 --- a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita @@ -17,35 +17,37 @@ - 0:高质量视频流。//TODO 每个层级能否明确对应的码率和分辨率是多少? + 0:最高质量的视频流。该质量层级的分辨率和码率最高。 - 1:(默认)低质量的视频流。 + 1:(默认)最低质量的视频流。该质量层级的分辨率和码率最低。 - + 2:视频质量层级 1。该质量层级的分辨率和码率仅低于 。 +
    • 如果需要自定义 层级的视频分辨率并进行订阅,请开通 ABR 功能。
    • +
    • 开通 ABR 功能后,SDK 会以//TODO subscription 也会自适应调节吗?
    - + 3:视频质量层级 2。该质量层级的分辨率和码率低于 - + 4:视频质量层级 3。该质量层级的分辨率和码率低于 - + 5:视频质量层级 4。该质量层级的分辨率和码率低于 - + 6:视频质量层级 5。该质量层级的分辨率和码率低于 - + 7:视频质量层级 6。该质量层级的分辨率和码率低于
    diff --git a/dita/RTC-NG/API/enum_rteerrorcode.dita b/dita/RTC-NG/API/enum_rteerrorcode.dita new file mode 100644 index 00000000000..6910db1b83c --- /dev/null +++ b/dita/RTC-NG/API/enum_rteerrorcode.dita @@ -0,0 +1,48 @@ + + + + <ph keyref="RteErrorCode"/> + 状态及错误码。 + +
    +
    + +
    自从
    +
    v
    +
    +
    +
    +
    + 枚举值 + + + + 0:操作成功。 + + + + 1:一般性的错误(没有明确归类的错误原因)。 + + + + 2:方法中设置了无效的参数。例如参数中含有非法字符,或是传入的对象为空。请重新设置参数。 + + + + 3:当前状态不支持该操作,例如对象已经销毁或者无效。 + + + + 4:网络错误。请检查你的网络。 + + + + 5:Token 鉴权失败。可能的原因有 Token 无效或 Token 过期。请检查你的 Token。 + + + + 6:未找到该媒体流。例如,进入频道后,超过 10s 没有收到主播推送的媒体流。 + + +
    +
    diff --git a/dita/RTC-NG/API/enum_rteplayerevent.dita b/dita/RTC-NG/API/enum_rteplayerevent.dita index 0cfebefe4ba..1d05c405615 100644 --- a/dita/RTC-NG/API/enum_rteplayerevent.dita +++ b/dita/RTC-NG/API/enum_rteplayerevent.dita @@ -13,28 +13,27 @@
    - 枚举值//TODO 目前不可用的枚举文档不对外暴露。 + 枚举值 - 5:卡顿开始。//TODO 当音视频流出现卡顿时,会报告该事件。用户在什么场景下需要知道卡顿开始和结束的时间? + 5:音频或视频卡顿开始。 - 6:卡顿结束。 + 6:音频或视频卡顿结束。 - 8:Token 即将过期。在收到此事件后你需要重新生成一个新的 Token 并更新 URL。//TODO + 8:Token 即将过期。在收到此事件后你需要重新生成一个新的 Token 并通过 更新 URL。 - 9:由于网络问题,音视频流回退为音频流。 - 该参数需要开通自适应码率功能并需要设置允许流回退。详情请//TODO + 9:由于网络问题,从接收音视频流回退为仅接收音频流。 - 10:网络状态恢复后,从仅接收音频流恢复到接收音视频流。该参数需要开通自适应码率功能并需要设置允许流回退。详情请 + 10:网络状态恢复后,从仅接收音频流恢复到接收音视频流。
    diff --git a/dita/RTC-NG/API/enum_rteplayermetadatatype.dita b/dita/RTC-NG/API/enum_rteplayermetadatatype.dita new file mode 100644 index 00000000000..ec55df7b243 --- /dev/null +++ b/dita/RTC-NG/API/enum_rteplayermetadatatype.dita @@ -0,0 +1,24 @@ + + + + <ph keyref="RtePlayerMetadataType"/> + 媒体流附属信息的类型。 + +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 枚举值 + + + + 0:SEI (补充增强信息)类型。 + + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index a5a9dcc37fb..7b6c1bc1134 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -34,6 +34,8 @@
    • +
    • +
  • @@ -1245,6 +1247,10 @@
  • +
  • +
  • +
  • +
  • diff --git a/dita/RTC-NG/API/toc_rte_player.dita b/dita/RTC-NG/API/toc_rte_player.dita index cf60e2198e3..defb8cfe3b9 100644 --- a/dita/RTC-NG/API/toc_rte_player.dita +++ b/dita/RTC-NG/API/toc_rte_player.dita @@ -1,6 +1,6 @@ - <ph keyref="toc_rte_player"/>URL 拉流播放//TODO + URL 拉流播放//TODO diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 21f2f271e42..c1eb13e79fd 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -462,6 +462,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 2c878e68226..099de0e265a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1239,6 +1239,13 @@ + + + + Player + + + @@ -5565,6 +5572,13 @@ + + + + Canvas + + + @@ -5635,6 +5649,13 @@ + + + + Config + + + @@ -6013,6 +6034,13 @@ + + + + RtePlayerStats + + + @@ -11181,6 +11209,62 @@ + + + + RteErrorCode + + + + + + + kRteOk + + + + + + + kRteErrorDefault + + + + + + + kRteErrorInvalidArgument + + + + + + + kRteErrorInvalidOperation + + + + + + + kRteErrorNetworkError + + + + + + + kRteErrorAuthenticationFailed + + + + + + + kRteErrorStreamNotFound + + + @@ -11363,6 +11447,139 @@ + + + + RteAbrFallbackLayer + + + + + + + kRteAbrFallbackDisabled + + + + + + + kRteAbrFallbackLow + + + + + + + kRteAbrFallbackAudioOnly + + + + + + + kRteAbrFallbackLayer1 + + + + + + + kRteAbrFallbackLayer2 + + + + + + + kRteAbrFallbackLayer3 + + + + + + + kRteAbrFallbackLayer4 + + + + + + + kRteAbrFallbackLayer5 + + + + + + + kRteAbrFallbackLayer6 + + + + + + + RteAbrSubscriptionLayer + + + + + + + kRteAbrSubscriptionHigh + + + + + + + kRteAbrSubscriptionLow + + + + + + + kRteAbrSubscriptionLayer1 + + + + + + + kRteAbrSubscriptionLayer2 + + + + + + + kRteAbrSubscriptionLayer3 + + + + + + + kRteAbrSubscriptionLayer4 + + + + + + + kRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + @@ -11384,6 +11601,20 @@ + + + + RtePlayerMetadataType + + + + + + + kRtePlayerMetadataTypeSei + + + @@ -13693,4 +13924,4 @@ - \ No newline at end of file + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 0af40fce53c..df40bf79328 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3344,6 +3344,7 @@ + @@ -3364,7 +3365,7 @@ - + diff --git a/dita/rtc_api.xpr b/dita/rtc_api.xpr index 96b90771f7d..852dee7e6ca 100644 --- a/dita/rtc_api.xpr +++ b/dita/rtc_api.xpr @@ -200,6 +200,46 @@ scenario.associations + + + RTC-NG/RTC_NG_API_CPP.ditamap + + + + DITA Map HTML5 - NG CPP + + + + + DITAMAP + + + + + 2 + + + + + + RTC-NG/RTC_NG_API_Unity.ditamap + + + + DITA Map HTML5 - NG Unity + + + + + DITAMAP + + + + + 2 + + + RTC-NG/RTC_NG_API_Harmony.ditamap @@ -580,26 +620,6 @@ - - - RTC-NG/RTC_NG_API_Unity.ditamap - - - - DITA Map HTML5 - NG Unity - - - - - DITAMAP - - - - - 2 - - - RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -620,26 +640,6 @@ - - - RTC-NG/RTC_NG_API_CPP.ditamap - - - - DITA Map HTML5 - NG CPP - - - - - DITAMAP - - - - - 2 - - - RTC/RTC_API_CS.ditamap From 7f6fbe0bc559723fee61c72f57850e7b9a4f9e52 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:56:41 +0800 Subject: [PATCH 151/354] delete redundant desc --- dita/RTC-NG/API/api_irtcengine_startscreencapture.dita | 2 +- dita/RTC-NG/API/api_irtcengine_updatescreencapture.dita | 2 +- .../API/api_irtcengine_updatescreencaptureparameters.dita | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita index a7b159e4242..087b600df70 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapture.dita @@ -74,7 +74,7 @@ parameters screenCaptureParameters captureParams - 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2,073,600 像素。该像素值为计费标准。详见 + 屏幕共享的编码参数配置。详见
    diff --git a/dita/RTC-NG/API/api_irtcengine_updatescreencapture.dita b/dita/RTC-NG/API/api_irtcengine_updatescreencapture.dita index 793a52eb3df..597a2f20cf2 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatescreencapture.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatescreencapture.dita @@ -45,7 +45,7 @@ parameters captureParams - 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2073600 像素。该像素值为计费标准。详见 + 屏幕共享的编码参数配置。详见
    diff --git a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita index b49436ccf32..2e6ca6d4a9e 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatescreencaptureparameters.dita @@ -45,7 +45,7 @@ screenCaptureParameters captureParams - 屏幕共享的编码参数配置。默认的分辨率为 1920 x 1080,即 2073600 像素。该像素值为计费标准。详见 。 + 屏幕共享的编码参数配置。详见 屏幕共享流的视频属性只需通过该参数设置,与 无关。 From 9d305f330ca97b869c1e65c8d715c7a6e494f567 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 23 Oct 2024 10:53:26 +0800 Subject: [PATCH 152/354] update --- .../API/api_canvasconfig_setmirrormode.dita | 13 ++++--- dita/RTC-NG/API/api_config_getappid.dita | 8 ++-- .../API/api_config_getjsonparameter.dita | 2 +- dita/RTC-NG/API/api_config_setappid.dita | 2 +- .../api_imediaplayer_setplaybackspeed.dita | 6 +-- .../API/api_imediaplayer_switchsrc.dita | 14 +++---- dita/RTC-NG/API/api_player_muteaudio.dita | 4 +- dita/RTC-NG/API/api_player_openwithurl.dita | 2 +- .../api_playerconfig_getabrfallbacklayer.dita | 8 +++- .../api_playerconfig_getjsonparameter.dita | 2 +- dita/RTC-NG/API/api_rte_getfrombridge.dita | 9 ++--- dita/RTC-NG/API/api_rte_initmediaengine.dita | 9 ++--- dita/RTC-NG/API/api_rte_registerobserver.dita | 4 +- dita/RTC-NG/API/api_rte_rte.dita | 8 ++-- dita/RTC-NG/API/class_asynccallback.dita | 39 +++++++++++++++++++ dita/RTC-NG/API/class_rteplayerinfo.dita | 17 +++----- dita/RTC-NG/API/class_rteplayerstats.dita | 4 +- .../RTC-NG/API/enum_mediadevicestatetype.dita | 2 +- .../API/enum_rteabrsubscriptionlayer.dita | 4 +- dita/RTC-NG/API/enum_rteplayerstate.dita | 6 +-- dita/RTC-NG/API/enum_rtevideomirrormode.dita | 2 +- dita/RTC-NG/API/enum_rtevideorendermode.dita | 2 +- dita/RTC-NG/API/toc_rte_player.dita | 2 +- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 +- .../config/keys-rtc-ng-api-blueprint.ditamap | 2 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 8 ++-- .../config/keys-rtc-ng-api-unreal.ditamap | 2 +- .../config/relations-rtc-ng-api.ditamap | 2 +- 28 files changed, 111 insertions(+), 76 deletions(-) create mode 100644 dita/RTC-NG/API/class_asynccallback.dita diff --git a/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita index d82986b1807..14dde9d2b1b 100644 --- a/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_setmirrormode.dita @@ -30,11 +30,10 @@
    v4.5.0
    -

    -
    +
    调用时机 -

    //TODO

    +

    该方法需要在 之前调用。

    调用限制 @@ -45,12 +44,16 @@ mode - 镜像模式,详见 。默认为 ,即由 SDK 决定镜像模式。默认关闭远端用户的镜像模式。//TODO review + 镜像模式,详见 。默认为 ,即由 SDK 决定镜像模式。默认关闭远端用户的镜像模式。
    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index c2d34195ced..8388aaa3fce 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -44,14 +44,14 @@
    -
    - <ph keyref="return-section-title" props="cpp apple framework"/> + <section id="return_values" props="cpp apple framework"> + <title><ph keyref="return-section-title"/> <ph props="android">异常</ph>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    • 方法调用成功,返回设置的 App ID。
    • 方法调用失败,返回空字符串。
    • -
    -

    //TODO

    +
    +
    diff --git a/dita/RTC-NG/API/api_config_getjsonparameter.dita b/dita/RTC-NG/API/api_config_getjsonparameter.dita index a7c5c60649b..82391729f04 100644 --- a/dita/RTC-NG/API/api_config_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_config_getjsonparameter.dita @@ -34,7 +34,7 @@
    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index 0241df60185..bb6b8c0e8a4 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -44,7 +44,7 @@ appId - 你的项目的 App ID,在声网控制台获取。建议一个 App ID 创建一个 RtcEngine。如需更换 App ID,必须先调用 destroy 销毁当前 RtcEngine 再重新创建。//TODO 还需要确认 + 你的项目的 App ID,在声网控制台获取。 diff --git a/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita b/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita index ad733dc6497..a53bc5ed1c4 100644 --- a/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita +++ b/dita/RTC-NG/API/api_imediaplayer_setplaybackspeed.dita @@ -34,10 +34,10 @@ speed - 播放速度。推荐取值范围为 [50,400],其中: + 播放速度。推荐取值范围为 [30,400],其中:
      -
    • 50: 0.5 倍速。
    • +
    • 30: 0.3 倍速。
    • 100: 原始速度。
    • 400: 4 倍速。
    @@ -51,4 +51,4 @@
  • < 0: 方法调用失败。详见了解详情和解决建议。
  • - \ No newline at end of file + diff --git a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita index 8cd3674b14b..df6e6b0ef36 100644 --- a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita @@ -30,14 +30,12 @@
    详情 -

    你可以根据当前网络状态调用该方法切换播放的媒体资源的码率。例如: - - -

      -
    • 在网络较差时,将播放的媒体资源切换为较低码率的媒体资源地址。
    • -
    • 在网络较好时,将播放的媒体资源切换为较高码率的媒体资源地址。
    • -

    -

    调用该方法后,如果你收到 回调报告事件 ,则媒体资源切换成功;如果你收到 回调报告事件 ,则媒体资源切换失败。

    +

    你可以根据当前网络状态调用该方法切换播放的媒体资源的码率。例如: +

      +
    • 在网络较差时,将播放的媒体资源切换为较低码率的媒体资源地址。
    • +
    • 在网络较好时,将播放的媒体资源切换为较高码率的媒体资源地址。
    • +

    +

    调用该方法后,如果你收到 回调报告事件 ,则媒体资源切换成功。如果资源切换失败,SDK 会自动重试 3 次。如果仍然失败,你会收到 回调,报告 事件,表示媒体资源切换时发生错误。

    如果用户需要自定义播放线路,你可以调用 实现媒体资源切换。声网会通过自研调度中心支持调度线路,提升观看用户体验。如果用户不需要自定义播放线路,你可以调用 实现媒体资源切换。

      diff --git a/dita/RTC-NG/API/api_player_muteaudio.dita b/dita/RTC-NG/API/api_player_muteaudio.dita index 0e0c5a736e8..76e0f25d3b9 100644 --- a/dita/RTC-NG/API/api_player_muteaudio.dita +++ b/dita/RTC-NG/API/api_player_muteaudio.dita @@ -35,14 +35,14 @@
      调用时机

      该方法需要在 之后调用。

      -
      +
    调用限制

    无。

    参数 diff --git a/dita/RTC-NG/API/api_player_openwithurl.dita b/dita/RTC-NG/API/api_player_openwithurl.dita index fadec913074..81e4f93a2c6 100644 --- a/dita/RTC-NG/API/api_player_openwithurl.dita +++ b/dita/RTC-NG/API/api_player_openwithurl.dita @@ -35,7 +35,7 @@
    调用时机 -

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita index 3231c31746e..affaaf80394 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita @@ -51,6 +51,10 @@
    <ph keyref="return-section-title"/>

    设置的视频流回退选项,详见

    -

    - +
    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita index 56b85c04422..45d731102ff 100644 --- a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita @@ -34,7 +34,7 @@
    调用时机 -

    //TODO

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index 225eb54bdbf..ce496804e4b 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建并初始化 RTC 引擎,则需调用 创建一个 RTE 对象然后再调用 进行初始化。

    +

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建并初始化 RTC 引擎,则需调用 创建一个 RTE 对象然后再调用 进行初始化。

    调用时机 @@ -53,10 +53,7 @@
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。

    -
      -
    • 方法调用成功,返回一个 RTE 对象。
    • -
    • 方法调用失败也会返回对象,//TODO 会返回 invalidoperation。你可以根据 errerror 参数中返回的错误码了解详情。
    • -
    • 方法调用失败,抛出 异常,你需要捕获异常并进行处理。
    • -
    +

    一个 RTE 对象。

    +
    diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index 3bb662af9d9..c3a73b1f8b0 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -35,7 +35,7 @@
    调用时机 -

    在创建对象和设置appid之后。

    +

    该方法需要在创建 RTE 对象并设置 App ID 后调用。

    调用限制 @@ -46,14 +46,11 @@ cb - 一个异步回调函数,用于返回引擎初始化结果。并向回调中的 err 传参。这个参数包含了引擎初始化的结果或错误码信息,详见 。//TODO 改下描述,不是所有情况都会调用这个会调。 + 一个异步回调函数,用于返回引擎初始化结果。你可以通过该回调的 err 参数得知引擎初始化的结果或错误码信息,详见 callback - 一个异步回调函数,用于返回引擎初始化结果。根据情况返回下列状态或错误码://TODO 是否直接链接到 Error 这个类?还是要写出来每个枚举值。 -
    • (0): 初始化成功。
    • -
    • (1): 初始化引擎失败。//TODO 错误信息通过 message 得知。这个方法应该也要写文档?
    • -
    + 一个异步回调函数,用于返回引擎初始化结果。详见
    err diff --git a/dita/RTC-NG/API/api_rte_registerobserver.dita b/dita/RTC-NG/API/api_rte_registerobserver.dita index 55ab6ed7eb3..490e86745be 100644 --- a/dita/RTC-NG/API/api_rte_registerobserver.dita +++ b/dita/RTC-NG/API/api_rte_registerobserver.dita @@ -36,7 +36,7 @@
    调用时机 -

    请在初始化 RTE 引擎后再调用该方法。//TODO

    +

    请在初始化 RTE 引擎后再调用该方法。

    调用限制 @@ -51,7 +51,7 @@ observer - RTE 回调事件对象。详见//TODO + RTE 回调事件对象。 err diff --git a/dita/RTC-NG/API/api_rte_rte.dita b/dita/RTC-NG/API/api_rte_rte.dita index f8c29c5216e..a2741bb8358 100644 --- a/dita/RTC-NG/API/api_rte_rte.dita +++ b/dita/RTC-NG/API/api_rte_rte.dita @@ -1,12 +1,12 @@ - <ph keyref="Rte"/> + <ph keyref="Rte_Rte"/> 构造一个 RTE 对象。 - + @@ -35,8 +35,8 @@
    调用时机 -

    //TODO

    -
    +

    该方法需要在 后调用。

    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/class_asynccallback.dita b/dita/RTC-NG/API/class_asynccallback.dita new file mode 100644 index 00000000000..c23227166b6 --- /dev/null +++ b/dita/RTC-NG/API/class_asynccallback.dita @@ -0,0 +1,39 @@ + + + + <ph keyref="AsyncCallback"/> + 该类用于接收异步操作的执行结果。 + +
    +

    + public interface AsyncCallback { + @CalledByNative void onResult(Error error); +} + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 回调 + + + onResult + + +
    +
    +
    diff --git a/dita/RTC-NG/API/class_rteplayerinfo.dita b/dita/RTC-NG/API/class_rteplayerinfo.dita index 46fefa6acd6..96b89845206 100644 --- a/dita/RTC-NG/API/class_rteplayerinfo.dita +++ b/dita/RTC-NG/API/class_rteplayerinfo.dita @@ -23,7 +23,6 @@ } @interface AgoraRtePlayerInfo : NSObject -- (instancetype _Nonnull)init;//TODO - (int)state; - (long)duration; - (int)streamCount; @@ -100,12 +99,16 @@ is_audio_muted isAudioMuted - 音频流是否在本地被静音。//TODO + 本地用户是否订阅了音频流: +
    • :订阅了音频流。
    • +
    • :未订阅音频流。
    is_video_muted isVideoMuted - 视频流是否在本地被静音。 + 本地用户是否订阅了视频流: +
    • :订阅了视频流。
    • +
    • :未订阅视频流。
    video_height @@ -138,13 +141,5 @@ 预留参数。
    -
    - 方法 - - - init - //TODO - -
    diff --git a/dita/RTC-NG/API/class_rteplayerstats.dita b/dita/RTC-NG/API/class_rteplayerstats.dita index ef6560fd093..d2145369316 100644 --- a/dita/RTC-NG/API/class_rteplayerstats.dita +++ b/dita/RTC-NG/API/class_rteplayerstats.dita @@ -59,12 +59,12 @@ videoBitrate video_bitrate - 视频码率(Kbps)。//TODO 待确认 + 视频码率(Kbps)。 audioBitrate audio_bitrate - 音频码率(Kbps)。//TODO 待确认 + 音频码率(Kbps)。
    diff --git a/dita/RTC-NG/API/enum_mediadevicestatetype.dita b/dita/RTC-NG/API/enum_mediadevicestatetype.dita index f2d2538adc1..a19ee4cab45 100644 --- a/dita/RTC-NG/API/enum_mediadevicestatetype.dita +++ b/dita/RTC-NG/API/enum_mediadevicestatetype.dita @@ -19,7 +19,7 @@ 2: 设备被禁用。 - + 3: 设备已插入。 diff --git a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita index 7cb5e89c3ad..e834d72c540 100644 --- a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita @@ -26,8 +26,8 @@ 2:视频质量层级 1。该质量层级的分辨率和码率仅低于 。 -
    • 如果需要自定义 层级的视频分辨率并进行订阅,请开通 ABR 功能。
    • -
    • 开通 ABR 功能后,SDK 会以//TODO subscription 也会自适应调节吗?
    + 如果需要自定义 层级的视频分辨率并进行订阅,请开通 ABR 功能。 +
    diff --git a/dita/RTC-NG/API/enum_rteplayerstate.dita b/dita/RTC-NG/API/enum_rteplayerstate.dita index c0f8c263517..7787147fdfb 100644 --- a/dita/RTC-NG/API/enum_rteplayerstate.dita +++ b/dita/RTC-NG/API/enum_rteplayerstate.dita @@ -17,7 +17,7 @@ - 0:空闲状态。//TODO 播放器会在你打开 URL 之前和结束播放之后会报告该状态码。 + 0:空闲状态。 @@ -29,7 +29,7 @@ - 3:播放中。//TODO 当打开 rte url 时,订阅主播成功回调此状态。观众端调用 open 打开 url 并播放后会回调这个状态吗? + 3:播放中。 @@ -37,7 +37,7 @@ - 5:播放完成。//TODO 当主播结束推流退出房间后,会报告该状态码。这个状态码是观众端和主播端都会报告吗? + 5:播放完成。当主播结束推流退出房间后,会报告该状态码。 diff --git a/dita/RTC-NG/API/enum_rtevideomirrormode.dita b/dita/RTC-NG/API/enum_rtevideomirrormode.dita index 419dc84baf4..8fa549a6ccb 100644 --- a/dita/RTC-NG/API/enum_rtevideomirrormode.dita +++ b/dita/RTC-NG/API/enum_rtevideomirrormode.dita @@ -8,7 +8,7 @@
    自从
    -
    v
    +
    v4.5.0
    diff --git a/dita/RTC-NG/API/enum_rtevideorendermode.dita b/dita/RTC-NG/API/enum_rtevideorendermode.dita index 9b111a58211..a01a432e67f 100644 --- a/dita/RTC-NG/API/enum_rtevideorendermode.dita +++ b/dita/RTC-NG/API/enum_rtevideorendermode.dita @@ -21,7 +21,7 @@ - 1:视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。//TODO rtc的这个描述是否适用 rte? + 1:视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
    diff --git a/dita/RTC-NG/API/toc_rte_player.dita b/dita/RTC-NG/API/toc_rte_player.dita index defb8cfe3b9..d831e303f6b 100644 --- a/dita/RTC-NG/API/toc_rte_player.dita +++ b/dita/RTC-NG/API/toc_rte_player.dita @@ -1,6 +1,6 @@ - URL 拉流播放//TODO + URL 拉流播放 diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index c1eb13e79fd..43fcc521085 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -467,7 +467,7 @@ - + @@ -489,6 +489,8 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index f07dddd7182..ec9e6afed07 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -9637,7 +9637,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 099de0e265a..41d614a87d7 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1007,15 +1007,15 @@ GetAutoPlay - + GetFromBridge - - + + Rte @@ -10131,7 +10131,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index 7380987015b..e4216b8eb72 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -9714,7 +9714,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index df40bf79328..4e1b71c7e0a 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3331,7 +3331,7 @@ - + From 2f1c2bde61f95b311d1f5e1343c6366da0d6ab94 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 24 Oct 2024 14:04:04 +0800 Subject: [PATCH 153/354] update --- dita/RTC-NG/API/api_canvas_getconfigs.dita | 2 +- dita/RTC-NG/API/api_error_code.dita | 48 +++++++++++ dita/RTC-NG/API/api_error_message.dita | 48 +++++++++++ dita/RTC-NG/API/api_player_getconfigs.dita | 2 +- dita/RTC-NG/API/api_player_player.dita | 2 +- .../API/api_player_registerobserver.dita | 3 +- dita/RTC-NG/API/api_rte_getconfigs.dita | 2 +- dita/RTC-NG/API/api_rte_rte.dita | 6 +- .../API/callback_asynccallback_onresult.dita | 53 ++++++++++++ ...lback_playergetstatscallback_onresult.dita | 57 +++++++++++++ dita/RTC-NG/API/class_asynccallback.dita | 4 +- dita/RTC-NG/API/class_error.dita | 50 +++++++++++ .../API/class_playergetstatscallback.dita | 39 +++++++++ dita/RTC-NG/API/rtc_api_data_type.dita | 1 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 2 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 23 ++++- .../config/relations-rtc-ng-api.ditamap | 9 ++ dita/rtc_api.xpr | 84 +++++++++---------- 18 files changed, 381 insertions(+), 54 deletions(-) create mode 100644 dita/RTC-NG/API/api_error_code.dita create mode 100644 dita/RTC-NG/API/api_error_message.dita create mode 100644 dita/RTC-NG/API/callback_asynccallback_onresult.dita create mode 100644 dita/RTC-NG/API/callback_playergetstatscallback_onresult.dita create mode 100644 dita/RTC-NG/API/class_error.dita create mode 100644 dita/RTC-NG/API/class_playergetstatscallback.dita diff --git a/dita/RTC-NG/API/api_canvas_getconfigs.dita b/dita/RTC-NG/API/api_canvas_getconfigs.dita index 95d97bed153..4ecc8f09ba6 100644 --- a/dita/RTC-NG/API/api_canvas_getconfigs.dita +++ b/dita/RTC-NG/API/api_canvas_getconfigs.dita @@ -34,7 +34,7 @@
    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_error_code.dita b/dita/RTC-NG/API/api_error_code.dita new file mode 100644 index 00000000000..983e1142ac9 --- /dev/null +++ b/dita/RTC-NG/API/api_error_code.dita @@ -0,0 +1,48 @@ + + + + <ph keyref="Code"/> + 获取接口调用返回的错误码。 + + + + + + + + +
    +

    + public Constants.ErrorCode code(); + + - (AgoraRteErrorCode)code; + ErrorCode Code(); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 调用时机 +

    某一接口调用失败时调用此方法,以获取具体的错误码。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    错误码。详见

    +
    +
    diff --git a/dita/RTC-NG/API/api_error_message.dita b/dita/RTC-NG/API/api_error_message.dita new file mode 100644 index 00000000000..3bc66b1a84e --- /dev/null +++ b/dita/RTC-NG/API/api_error_message.dita @@ -0,0 +1,48 @@ + + + + <ph keyref="Message"/> + 获取详细的错误信息。 + + + + + + + + +
    +

    + public String message(); + + - (NSString * _Nullable)message; + const char *Message(); + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    当你调用 获取错误码后,可以调用该方法获取错误信息来帮助排查问题。

    +
    +
    + 调用时机 +

    +
    +
    + 调用限制 +

    无。

    +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +

    错误信息。

    +
    +
    diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita index f69e46b4633..82784d9144b 100644 --- a/dita/RTC-NG/API/api_player_getconfigs.dita +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -34,7 +34,7 @@
    调用时机 -

    该方法需要在 之前调用。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_player_player.dita b/dita/RTC-NG/API/api_player_player.dita index 989bace7b38..66339ac8894 100644 --- a/dita/RTC-NG/API/api_player_player.dita +++ b/dita/RTC-NG/API/api_player_player.dita @@ -51,7 +51,7 @@ config initialConfig - 播放器对象设置,可传空指针。 + 播放器对象初始化设置,可传空指针。
    diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita index f0f87352437..9d038eaebee 100644 --- a/dita/RTC-NG/API/api_player_registerobserver.dita +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -30,8 +30,7 @@
    v4.5.0
    -

    你需要在该方法中实现一个 类。

    -

    +

    你需要在调用该方法前,实现一个继承自 的接口类。

    调用时机 diff --git a/dita/RTC-NG/API/api_rte_getconfigs.dita b/dita/RTC-NG/API/api_rte_getconfigs.dita index 6fc0fe78a59..f92f5d5d3e9 100644 --- a/dita/RTC-NG/API/api_rte_getconfigs.dita +++ b/dita/RTC-NG/API/api_rte_getconfigs.dita @@ -34,7 +34,7 @@
    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_rte_rte.dita b/dita/RTC-NG/API/api_rte_rte.dita index a2741bb8358..2f7579d2c72 100644 --- a/dita/RTC-NG/API/api_rte_rte.dita +++ b/dita/RTC-NG/API/api_rte_rte.dita @@ -17,7 +17,7 @@ - (instancetype _Nonnull)initWithInitialConfig:(AgoraRteInitialConfig * _Nullable)config; explicit Rte(InitialConfig *config = nullptr); - ~Rte()=default; + @@ -31,11 +31,11 @@
    v4.5.0
    -

    RTE 对象用于初始化 RTE 模块,主要用于配置和管理 RTE 的相关功能。

    +

    RTE 对象用于组织和管理 Rte 内部相关资源。

    调用时机 -

    该方法需要在 后调用。

    +

    该方法需要在 前调用。

    调用限制 diff --git a/dita/RTC-NG/API/callback_asynccallback_onresult.dita b/dita/RTC-NG/API/callback_asynccallback_onresult.dita new file mode 100644 index 00000000000..886d27f6507 --- /dev/null +++ b/dita/RTC-NG/API/callback_asynccallback_onresult.dita @@ -0,0 +1,53 @@ + + + + <ph keyref="onResult_AsyncCallback"/> + 异步操作结果回调。 + + + + + + + + +
    +

    + @CalledByNative void onResult(Error error); + + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    + 触发时机 +

    当异步操作完成后,SDK 会触发该回调报告异步操作的结果。

    +
    +
    + 使用限制 +

    +

    +
    + 参数 + + + error + 状态或错误码,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/callback_playergetstatscallback_onresult.dita b/dita/RTC-NG/API/callback_playergetstatscallback_onresult.dita new file mode 100644 index 00000000000..723b11cb5ba --- /dev/null +++ b/dita/RTC-NG/API/callback_playergetstatscallback_onresult.dita @@ -0,0 +1,57 @@ + + + + <ph keyref="onResult_PlayerGetStatsCallback"/> + 该回调用于处理获取媒体资源统计信息的异步操作结果。 + + + + + + + + +
    +

    + @CalledByNative void onResult(PlayerStats playerStats, Error error); + + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 触发时机 +

    当获取媒体资源信息的异步操作完成后,SDK 会触发该回调报告异步操作的结果。

    +
    +
    + 使用限制 +

    无。

    +
    +
    + 参数 + + + playerStats + 媒体资源的统计信息,详见 + + + error + 状态及错误信息,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/class_asynccallback.dita b/dita/RTC-NG/API/class_asynccallback.dita index c23227166b6..86805cf1963 100644 --- a/dita/RTC-NG/API/class_asynccallback.dita +++ b/dita/RTC-NG/API/class_asynccallback.dita @@ -2,7 +2,7 @@ <ph keyref="AsyncCallback"/> - 该类用于接收异步操作的执行结果。 + 该类提供异步操作结果的回调。

    @@ -32,7 +32,7 @@ onResult - + 异步操作结果的回调,详见

    diff --git a/dita/RTC-NG/API/class_error.dita b/dita/RTC-NG/API/class_error.dita new file mode 100644 index 00000000000..a81653b1b9c --- /dev/null +++ b/dita/RTC-NG/API/class_error.dita @@ -0,0 +1,50 @@ + + + + <ph keyref="Error"/> + 该类提供了获取错误码和错误信息的方法。 + +
    +

    + + + __attribute__((visibility("default"))) @interface AgoraRteError : NSObject +- (AgoraRteErrorCode)code; +- (NSString * _Nullable)message; + +@end + + class Error { + public: + ErrorCode Code(); + const char *Message(); +}; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 方法 + + + + 获取接口调用返回的错误码,详见 + + + + 获取接口调用返回的具体错误信息,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/class_playergetstatscallback.dita b/dita/RTC-NG/API/class_playergetstatscallback.dita new file mode 100644 index 00000000000..c665bb0bbb0 --- /dev/null +++ b/dita/RTC-NG/API/class_playergetstatscallback.dita @@ -0,0 +1,39 @@ + + + + <ph keyref="PlayerGetStatsCallback"/> + 该类提供的回调用于获取媒体资源统计信息的异步操作结果。 + +
    +

    + public interface PlayerGetStatsCallback { + @CalledByNative void onResult(PlayerStats playerStats, Error error); +} + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 回调 + + + onResult + 获取媒体资源统计信息的结果,详见 + +
    +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 7b6c1bc1134..bbdac76f44a 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -48,6 +48,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 43fcc521085..d9ceeecb46b 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -457,7 +457,9 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 41d614a87d7..ca2caba40f3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1001,6 +1001,20 @@ + + + + Code + + + + + + + Message + + + @@ -1289,7 +1303,7 @@ - + @@ -5719,6 +5733,13 @@ + + + + Error + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 4e1b71c7e0a..e8262c691db 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3338,6 +3338,15 @@ + + + + + + + + + diff --git a/dita/rtc_api.xpr b/dita/rtc_api.xpr index 852dee7e6ca..11952bb119b 100644 --- a/dita/rtc_api.xpr +++ b/dita/rtc_api.xpr @@ -222,11 +222,11 @@ - RTC-NG/RTC_NG_API_Unity.ditamap + RTC-NG/RTC_NG_API_Flutter.ditamap - DITA Map HTML5 - NG Unity + DITA Map HTML5 - NG Flutter @@ -242,11 +242,11 @@ - RTC-NG/RTC_NG_API_Harmony.ditamap + RTC-NG/RTC_NG_API_Blueprint.ditamap - DITA Map HTML5 - NG Harmony + DITA Map HTML5 - NG Blueprint @@ -262,11 +262,11 @@ - RTC-NG/RTC_NG_API_iOS.ditamap + RTC-NG/RTC_NG_API_Harmony.ditamap - DITA Map HTML5 - NG iOS + DITA Map HTML5 - NG Harmony @@ -282,11 +282,11 @@ - RTC-NG/RTC_NG_API_CS.ditamap + RTC-NG/RTC_NG_API_Unity.ditamap - DITA Map HTML5 - NG CS + DITA Map HTML5 - NG Unity @@ -302,11 +302,11 @@ - RTC-NG/RTC_NG_Release_Unreal.ditamap + RTC-NG/RTC_NG_API_iOS.ditamap - Release Notes HTML5 - NG Unreal + DITA Map HTML5 - NG iOS @@ -322,11 +322,11 @@ - RTC-NG/RTC_NG_Release_Unity.ditamap + RTC-NG/RTC_NG_API_CS.ditamap - Release Notes HTML5 - NG Unity + DITA Map HTML5 - NG CS @@ -342,11 +342,11 @@ - RTC-NG/RTC_NG_Release_RN.ditamap + RTC-NG/RTC_NG_Release_Unreal.ditamap - Release Notes HTML5 - NG RN + Release Notes HTML5 - NG Unreal @@ -362,11 +362,11 @@ - RTC-NG/RTC_NG_Release_macOS.ditamap + RTC-NG/RTC_NG_Release_Unity.ditamap - Release Notes HTML5 - NG macOS + Release Notes HTML5 - NG Unity @@ -382,11 +382,11 @@ - RTC-NG/RTC_NG_Release_iOS.ditamap + RTC-NG/RTC_NG_Release_RN.ditamap - Release Notes HTML5 - NG iOS + Release Notes HTML5 - NG RN @@ -402,11 +402,11 @@ - RTC-NG/RTC_NG_Release_Flutter.ditamap + RTC-NG/RTC_NG_Release_macOS.ditamap - Release Notes HTML5 - NG Flutter + Release Notes HTML5 - NG macOS @@ -422,11 +422,11 @@ - RTC-NG/RTC_NG_Release_Electron.ditamap + RTC-NG/RTC_NG_Release_iOS.ditamap - Release Notes HTML5 - NG Electron + Release Notes HTML5 - NG iOS @@ -442,11 +442,11 @@ - RTC-NG/RTC_NG_Release_CS.ditamap + RTC-NG/RTC_NG_Release_Flutter.ditamap - Release Notes HTML5 - NG CS + Release Notes HTML5 - NG Flutter @@ -462,11 +462,11 @@ - RTC-NG/RTC_NG_Release_CPP.ditamap + RTC-NG/RTC_NG_Release_Electron.ditamap - Release Notes HTML5 - NG CPP + Release Notes HTML5 - NG Electron @@ -482,11 +482,11 @@ - RTC-NG/RTC_NG_Release_Android.ditamap + RTC-NG/RTC_NG_Release_CS.ditamap - Release Notes HTML5 - NG Android + Release Notes HTML5 - NG CS @@ -502,11 +502,11 @@ - RTC-NG/RTC_NG_API_RN.ditamap + RTC-NG/RTC_NG_Release_CPP.ditamap - DITA Map HTML5 - NG RN + Release Notes HTML5 - NG CPP @@ -522,11 +522,11 @@ - RTC-NG/RTC_NG_API_Unreal.ditamap + RTC-NG/RTC_NG_Release_Android.ditamap - DITA Map HTML5 - NG Unreal + Release Notes HTML5 - NG Android @@ -542,11 +542,11 @@ - RTC-NG/RTC_NG_API_Flutter.ditamap + RTC-NG/RTC_NG_API_RN.ditamap - DITA Map HTML5 - NG Flutter + DITA Map HTML5 - NG RN @@ -562,11 +562,11 @@ - RTC-NG/RTC_NG_API_macOS.ditamap + RTC-NG/RTC_NG_API_Unreal.ditamap - DITA Map HTML5 - NG macOS + DITA Map HTML5 - NG Unreal @@ -582,11 +582,11 @@ - RTC-NG/RTC_NG_API_Electron.ditamap + RTC-NG/RTC_NG_API_macOS.ditamap - DITA Map HTML5 - NG Electron + DITA Map HTML5 - NG macOS @@ -602,11 +602,11 @@ - RTC-NG/RTC_NG_API_Android.ditamap + RTC-NG/RTC_NG_API_Electron.ditamap - DITA Map HTML5 - NG Android + DITA Map HTML5 - NG Electron @@ -622,11 +622,11 @@ - RTC-NG/RTC_NG_API_Blueprint.ditamap + RTC-NG/RTC_NG_API_Android.ditamap - DITA Map HTML5 - NG Blueprint + DITA Map HTML5 - NG Android From 07a4d837e190a5f20b230fbaff2609271582551b Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 24 Oct 2024 14:42:46 +0800 Subject: [PATCH 154/354] Update api_imusiccontentcenter_getcaches.dita --- dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index 0d217b65f0a..82b9b7df9e5 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -55,7 +55,7 @@
    • 方法调用成功时,返回包含 对象的数组。
    • -
    • 方法调用成功时,返回 对象的列表。
    • +
    • 方法调用成功时,返回 对象的列表。
    • 方法调用失败时,返回
    • 方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。
    From b1183ed1f40e02a8b06ee8c3e746f25584917e78 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 24 Oct 2024 15:50:31 +0800 Subject: [PATCH 155/354] update desc --- dita/RTC-NG/API/class_filtereffectoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index 6b516c626e2..60d78017dc8 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -36,7 +36,7 @@ path -

    3D 立方体贴图文件的本地绝对路径,用于自定义的滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: +

    3D 立方体贴图文件的本地绝对路径,该文件用于实现自定义滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: LUT_3D_SIZE 32 0.0039215689 0 0.0039215682 From 022ab6f389b6776e8c161e407a44428035d5540c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 24 Oct 2024 15:58:58 +0800 Subject: [PATCH 156/354] add props for flutter --- .../API/callback_irtcengineeventhandler_onnetworkquality.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita index a2cc44d6b24..154c3fa3ed4 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita @@ -47,7 +47,7 @@

    该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到声网边缘服务器的网络状态。

    该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。

    该回调通过频道内的广播包反馈网络质量。过多的广播包可能引发广播风暴。为防止广播风暴导致频道内大量数据传输,该回调默认支持同时反馈最多 4 个远端主播的网络质量。

    - 用户不发流时,txQualityUNKNOWNUnknown;用户不收流时,rxQualityUNKNOWNUnknown
    + 用户不发流时,txQualityUNKNOWNUnknown;用户不收流时,rxQualityUNKNOWNUnknown
    <ph keyref="callback-section-title" /> From 29a17683dcc52c4bca272fe019b8d4840fd8ff08 Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 24 Oct 2024 16:51:00 +0800 Subject: [PATCH 157/354] Update class_rtcimage.dita --- dita/RTC-NG/API/class_rtcimage.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_rtcimage.dita b/dita/RTC-NG/API/class_rtcimage.dita index 454fdde36ed..dc27ebd2043 100644 --- a/dita/RTC-NG/API/class_rtcimage.dita +++ b/dita/RTC-NG/API/class_rtcimage.dita @@ -109,7 +109,7 @@ struct FRtcImage char* URLCharPtr = new char[url.Len() + 1]; FMemory::Memcpy(URLCharPtr, TCHAR_TO_UTF8(*url), url.Len()); - URLCharPtr[url.Len()] = '\0'; + URLCharPtr[url.Len()] = '\0'; AgoraData.url = URLCharPtr; AgoraData.x = x; AgoraData.y = y; From 735c59d9f5f45cec850b6783b45511af71709273 Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Thu, 24 Oct 2024 08:51:34 +0000 Subject: [PATCH 158/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_rtcimage.dita | Bin 8725 -> 8731 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_rtcimage.dita b/en-US/dita/RTC-NG/API/class_rtcimage.dita index 86c49af3738263d2acfa0aba13203870a4e6cd12..c7f7f54821855e94177383bbd3c0b196b11e98b1 100644 GIT binary patch delta 20 bcmbR0GTUXtMqYNcq~iP>YlF?3c#}l{Qf3EO delta 14 VcmbR3GSy|nMqWmS%{zFLMF1+y1s4DS From a46fb6ce9a39a819d4f8ace7d488b2b5b5c36dae Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 24 Oct 2024 16:58:00 +0800 Subject: [PATCH 159/354] Update class_rtcimage.dita --- dita/RTC-NG/API/class_rtcimage.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_rtcimage.dita b/dita/RTC-NG/API/class_rtcimage.dita index dc27ebd2043..fb03befc63b 100644 --- a/dita/RTC-NG/API/class_rtcimage.dita +++ b/dita/RTC-NG/API/class_rtcimage.dita @@ -109,7 +109,7 @@ struct FRtcImage char* URLCharPtr = new char[url.Len() + 1]; FMemory::Memcpy(URLCharPtr, TCHAR_TO_UTF8(*url), url.Len()); - URLCharPtr[url.Len()] = '\0'; + URLCharPtr[url.Len()] = '\0'; AgoraData.url = URLCharPtr; AgoraData.x = x; AgoraData.y = y; From 9b35f51824de68502e00c66117a626ce3c9c91dd Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Thu, 24 Oct 2024 08:58:30 +0000 Subject: [PATCH 160/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_rtcimage.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/API/class_rtcimage.dita b/en-US/dita/RTC-NG/API/class_rtcimage.dita index c7f7f548218..1f4748c23e1 100644 --- a/en-US/dita/RTC-NG/API/class_rtcimage.dita +++ b/en-US/dita/RTC-NG/API/class_rtcimage.dita @@ -109,7 +109,7 @@ struct FRtcImage char* URLCharPtr = new char[url.Len() + 1]; FMemory::Memcpy(URLCharPtr, TCHAR_TO_UTF8(*url), url.Len()); - URLCharPtr[url.Len()] = '\0'; + URLCharPtr[url.Len()] = '\0'; AgoraData.url = URLCharPtr; AgoraData.x = x; AgoraData.y = y; From 65d8f321a505af94f0f8a5fcb10a2f62a0edea2a Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 10:27:51 +0800 Subject: [PATCH 161/354] fix --- .../api_imusiccontentcenter_getcaches.dita | 2 +- ...usiccontentcenter_getinternalsongcode.dita | 3 +- ...imusiccontentcenter_getsongsimpleinfo.dita | 3 +- .../api_imusiccontentcenter_initialize.dita | 2 +- .../api_imusiccontentcenter_ispreloaded.dita | 2 +- .../API/api_imusicontentcenter_preload.dita | 3 +- .../API/api_imusicplayer_setplaymode.dita | 1 + .../API/api_irtcengine_playeffect3.dita | 3 +- ...yersourceobserver_onplaybufferupdated.dita | 4 +- ...entereventhandler_onmusicchartsresult.dita | 2 +- ...reventhandler_onmusiccollectionresult.dita | 2 +- dita/RTC-NG/API/rtc_api_data_type.dita | 9 +- dita/RTC-NG/API/rtc_api_overview.dita | 26 ++-- dita/RTC-NG/RTC_NG_API_Harmony.ditamap | 9 +- .../config/keys-rtc-ng-api-harmony.ditamap | 138 ++++++++++-------- .../config/relations-rtc-ng-api.ditamap | 32 ++-- 16 files changed, 134 insertions(+), 107 deletions(-) diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita index 0d217b65f0a..25ab118b86e 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getcaches.dita @@ -30,7 +30,7 @@
    v4.2.0
    -

    调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。如果你需要设置可缓存的音乐资源数量,可通过 configurationconfig 来设置。

    +

    调用该方法前,你需要预先分配一定大小的内存空间用来存储缓存音乐资源的信息。如果你需要设置可缓存的音乐资源数量,可通过 configurationconfig 来设置。

    当你不再需要使用已缓存的音乐资源时,你需要及时释放内存以防止内存泄漏。

    diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita index a8501eb994a..22f61004c6f 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getinternalsongcode.dita @@ -40,7 +40,8 @@ songCode - 音乐资源编号,用于标识音乐资源。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。 + 音乐资源编号,用于标识音乐资源。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。 + 音乐资源编号,用于标识音乐资源。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。 jsonOption diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita b/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita index 9582a53c431..4d39164e268 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_getsongsimpleinfo.dita @@ -30,7 +30,8 @@
    v4.2.2
    -

    在调用该方法前,你需要先获取到对应的音乐资源的编号。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

    +

    在调用该方法前,你需要先获取到对应的音乐资源的编号。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

    +

    在调用该方法前,你需要先获取到对应的音乐资源的编号。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

    当你调用该方法后,SDK 会触发 回调报告音乐资源的详细信息。

    diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita b/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita index 883926ea6c1..4d82437ea9b 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_initialize.dita @@ -37,7 +37,7 @@ 参数 - configuration + configuration config 的设置,详见 diff --git a/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita b/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita index e0392a9d840..53651d833f5 100644 --- a/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita +++ b/dita/RTC-NG/API/api_imusiccontentcenter_ispreloaded.dita @@ -31,7 +31,7 @@
    v4.1.0
    -

    该方法为同步调用。如需预加载新的音乐资源,可调用

    +

    该方法为同步调用。如需预加载新的音乐资源,可调用

    参数 diff --git a/dita/RTC-NG/API/api_imusicontentcenter_preload.dita b/dita/RTC-NG/API/api_imusicontentcenter_preload.dita index 22c384814f6..4dcce6f8e7e 100644 --- a/dita/RTC-NG/API/api_imusicontentcenter_preload.dita +++ b/dita/RTC-NG/API/api_imusicontentcenter_preload.dita @@ -32,7 +32,8 @@

    你可以调用该方法预先加载需要播放的音乐资源。成功调用该方法后,SDK 会触发 回调报告预加载音乐资源的事件。

    -

    在调用该方法来预加载音乐资源之前,你需要调用 方法来获取你需要播放的音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

    +

    在调用该方法来预加载音乐资源之前,你需要调用 方法来获取你需要播放的音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。 + 在调用该方法前,你需要先获取到对应的音乐资源的编号。你可以通过调用 方法来获取音乐资源,并通过由此触发的 回调获取音乐资源的编号(songCode)。

    如需销毁 对象,请在收到 回调后,再调用 方法。
    diff --git a/dita/RTC-NG/API/api_imusicplayer_setplaymode.dita b/dita/RTC-NG/API/api_imusicplayer_setplaymode.dita index 21c3e21caa5..455c38b8768 100644 --- a/dita/RTC-NG/API/api_imusicplayer_setplaymode.dita +++ b/dita/RTC-NG/API/api_imusicplayer_setplaymode.dita @@ -14,6 +14,7 @@

    int setPlayMode(MusicPlayMode mode); + abstract setPlayMode(mode:Constants.MusicPlayMode):number - (NSInteger)setPlayMode:(AgoraMusicPlayMode)mode NS_SWIFT_NAME(setPlayMode(mode:)); virtual int setPlayMode(MusicPlayMode mode) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita index 37066919aef..74dbcd8e916 100644 --- a/dita/RTC-NG/API/api_irtcengine_playeffect3.dita +++ b/dita/RTC-NG/API/api_irtcengine_playeffect3.dita @@ -77,8 +77,9 @@

    该方法在加入频道前后均可调用。

    - <ph props="android cpp apple framework">调用限制</ph> + 调用限制

    如果你需要播放在线音效文件,声网建议先将在线音效文件缓存到本地设备,调用 将缓存的音效文件预加载到内存中,然后再调用此方法播放音效。否则,可能出现因在线音效文件加载超时、加载失败而导致的播放失败和无声的问题。

    +

    无。

    diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita index 7966eacded2..3ae18402b0e 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusicchartsresult.dita @@ -73,7 +73,7 @@ list result - 当前可播放的音乐榜单列表。详见 + 当前可播放的音乐榜单列表。详见
    diff --git a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita index 10724e1a0c7..481f7f9148c 100644 --- a/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita +++ b/dita/RTC-NG/API/callback_imusiccontentcentereventhandler_onmusiccollectionresult.dita @@ -41,7 +41,7 @@

    当你调用 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    -

    当你调用 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    +

    当你调用 方法来获取指定榜单的音乐资源列表或调用 来搜索音乐资源时,SDK 会触发此回调报告榜单中音乐资源列表的详细信息。

    参数 diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 412b302f670..44a21308a77 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -283,10 +283,10 @@
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • @@ -1356,6 +1356,7 @@
  • +
  • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index d17ddd554c6..3f4ccea2af6 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1550,7 +1550,7 @@
    -
    +
    媒体播放器

    更多有关媒体播放器的方法,详见内置媒体播放器

    更多有关媒体播放器的方法,详见

    @@ -1559,9 +1559,9 @@ 方法/回调 描述 - + - + @@ -1575,11 +1575,11 @@ - + - + @@ -1658,7 +1658,7 @@
    -
    +
    <ph props="cn">版权音乐</ph>

    本组方法仅适用于 Android 和 iOS。

    @@ -1682,7 +1682,7 @@ - + @@ -1734,7 +1734,7 @@ - + @@ -1742,10 +1742,14 @@ - + + + + + @@ -1770,7 +1774,7 @@ - + @@ -1778,7 +1782,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap index 5a51baf417e..fee50b54fe3 100644 --- a/dita/RTC-NG/RTC_NG_API_Harmony.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Harmony.ditamap @@ -39,9 +39,9 @@ - + - + @@ -525,6 +525,7 @@ + @@ -544,6 +545,8 @@ + + @@ -643,7 +646,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index b35d2f69ced..42890708875 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -111,7 +111,7 @@ - + IMediaPlayerCacheManager @@ -443,7 +443,7 @@ - getPlaySrc + getPlaySrc [2/2] @@ -834,13 +834,6 @@ - - - - enableAudioQualityIndication - - - @@ -1032,20 +1025,6 @@ - - - - CreateRendererView - - - - - - - CreateTextureView - - - @@ -2484,24 +2463,10 @@ - - - - startEchoTest [1/3] - - - - - - - startEchoTest [2/3] - - - - startEchoTest [3/3] + startEchoTest @@ -2819,31 +2784,31 @@ - + - onEvent + onEventWithContext - + - onStarted + onStartedWithContext - + - onStopped + onStoppedWithContext - + - onError + onErrorWithContext @@ -3233,6 +3198,13 @@ + + + + stop [2/2] + + + @@ -3303,6 +3275,13 @@ + + + + destroyMusicPlayer + + + @@ -3373,6 +3352,13 @@ + + + + setPlayMode + + + @@ -8983,105 +8969,105 @@ - PLAYER_EVENT_UNKNOWN + UNKNOWN - PLAYER_EVENT_SEEK_BEGIN + SEEK_BEGIN - PLAYER_EVENT_SEEK_COMPLETE + SEEK_COMPLETE - PLAYER_EVENT_SEEK_ERROR + SEEK_ERROR - PLAYER_EVENT_AUDIO_TRACK_CHANGED + AUDIO_TRACK_CHANGED - PLAYER_EVENT_BUFFER_LOW + BUFFER_LOW - PLAYER_EVENT_BUFFER_RECOVER + BUFFER_RECOVER - PLAYER_EVENT_FREEZE_START + FREEZE_START - PLAYER_EVENT_FREEZE_STOP + FREEZE_STOP - PLAYER_EVENT_SWITCH_BEGIN + SWITCH_BEGIN - PLAYER_EVENT_SWITCH_COMPLETE + SWITCH_COMPLETE - PLAYER_EVENT_SWITCH_ERROR + SWITCH_ERROR - PLAYER_EVENT_FIRST_DISPLAYED + FIRST_DISPLAYED - PLAYER_EVENT_REACH_CACHE_FILE_MAX_COUNT + REACH_CACHE_FILE_MAX_COUNT - PLAYER_EVENT_REACH_CACHE_FILE_MAX_SIZE + REACH_CACHE_FILE_MAX_SIZE @@ -9428,7 +9414,35 @@ - + + + + MusicPlayMode + + + + + + + ORIGINAL + + + + + + + ACCOMPANY + + + + + + + LEAD_SING + + + + PreloadState diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index ed9d9bede9c..f0054c86a68 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3201,41 +3201,41 @@ - + - + - + - + - - - - - - - + + + + + + + - + - + - - - + + + From ccd1ac16819d40a341d7f985d391bd201ecacfd6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 25 Oct 2024 10:38:18 +0800 Subject: [PATCH 162/354] update --- dita/RTC-NG/API/api_irtcengine_statechanged.dita | 2 +- dita/RTC-NG/API/api_rte_getfrombridge.dita | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_statechanged.dita b/dita/RTC-NG/API/api_irtcengine_statechanged.dita index a0dc38a11ad..a40fae653b5 100644 --- a/dita/RTC-NG/API/api_irtcengine_statechanged.dita +++ b/dita/RTC-NG/API/api_irtcengine_statechanged.dita @@ -50,7 +50,7 @@

    设备状态:

    • 0:设备就绪。
    • -
    • 3:设备已插入。
    • +
    • 3:设备已插入。
    • 8:设备被拔出。

    diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index ce496804e4b..3aaeedcd381 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -30,11 +30,11 @@
    v4.5.0
    -

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建并初始化 RTC 引擎,则需调用 创建一个 RTE 对象然后再调用 进行初始化。

    +

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建 RTC 引擎,可直接调用 创建一个 RTE 对象,然后再调用 进行初始化。

    调用时机 -

    调用该方法前,请确保已调用 初始化 RTC 引擎。

    +

    调用该方法前,请确保已创建并初始化 RTC 引擎。

    调用限制 From 544a17dc7c643fa55447344aa6cf6622dec982b8 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 25 Oct 2024 10:59:20 +0800 Subject: [PATCH 163/354] bugfix --- dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita | 3 ++- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita index b275a6f636b..9c5c80c7373 100644 --- a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita @@ -34,7 +34,8 @@

    调用该方法后,如果收到 回调报告事件 ,则预加载成功;如果你收到 回调报告事件 ,则预加载失败。

    预加载成功后,如果你想播放媒体资源,请调用 ;如果你想清空播放列表,请调用

    -

    SDK 不支持你预加载重复的媒体资源到播放列表,但支持你将正在播放的媒体资源再次预加载到播放列表。

    +

    • 调用该方法前,请确保你已经调用 成功打开媒体资源。
    • +
    • SDK 不支持你预加载重复的媒体资源到播放列表,但支持你将正在播放的媒体资源再次预加载到播放列表。

    参数 diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 5611004f6b7..0958f67bfc8 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -106,7 +106,7 @@ - + 计费说明 From 5aedf6510c8b60ba4baa8d978858efaaa4912a2c Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Fri, 25 Oct 2024 03:19:28 +0000 Subject: [PATCH 164/354] Sync cn prototype to en prototype --- .../RTC-NG/API/class_channelmediaoptions.dita | 2 + ...class_musiccontentcenterconfiguration.dita | 2 +- .../config/keys-rtc-ng-api-harmony.ditamap | 138 ++++++++++-------- 3 files changed, 79 insertions(+), 63 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita index 2490141ca87..b9ab3cbb782 100644 --- a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -84,6 +84,8 @@ public audioDelayMs?:number; public mediaPlayerAudioDelayMs?:number; + + public token?:string; public enableBuiltInMediaEncryption?:boolean; diff --git a/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita b/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita index fe9b6ba6056..b44354be4da 100644 --- a/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_musiccontentcenterconfiguration.dita @@ -35,7 +35,7 @@ public eventHandler?:IMusicContentCenterEventHandler - public mccDomain:string = "" + public mccDomain?:string } __attribute__((visibility("default"))) @interface AgoraMusicContentCenterConfig : NSObject @property(assign, nonatomic) AgoraRtcEngineKit* _Nullable rtcEngine; diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap index b35d2f69ced..42890708875 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-harmony.ditamap @@ -111,7 +111,7 @@ - + IMediaPlayerCacheManager @@ -443,7 +443,7 @@ - getPlaySrc + getPlaySrc [2/2] @@ -834,13 +834,6 @@ - - - - enableAudioQualityIndication - - - @@ -1032,20 +1025,6 @@ - - - - CreateRendererView - - - - - - - CreateTextureView - - - @@ -2484,24 +2463,10 @@ - - - - startEchoTest [1/3] - - - - - - - startEchoTest [2/3] - - - - startEchoTest [3/3] + startEchoTest @@ -2819,31 +2784,31 @@ - + - onEvent + onEventWithContext - + - onStarted + onStartedWithContext - + - onStopped + onStoppedWithContext - + - onError + onErrorWithContext @@ -3233,6 +3198,13 @@ + + + + stop [2/2] + + + @@ -3303,6 +3275,13 @@ + + + + destroyMusicPlayer + + + @@ -3373,6 +3352,13 @@ + + + + setPlayMode + + + @@ -8983,105 +8969,105 @@ - PLAYER_EVENT_UNKNOWN + UNKNOWN - PLAYER_EVENT_SEEK_BEGIN + SEEK_BEGIN - PLAYER_EVENT_SEEK_COMPLETE + SEEK_COMPLETE - PLAYER_EVENT_SEEK_ERROR + SEEK_ERROR - PLAYER_EVENT_AUDIO_TRACK_CHANGED + AUDIO_TRACK_CHANGED - PLAYER_EVENT_BUFFER_LOW + BUFFER_LOW - PLAYER_EVENT_BUFFER_RECOVER + BUFFER_RECOVER - PLAYER_EVENT_FREEZE_START + FREEZE_START - PLAYER_EVENT_FREEZE_STOP + FREEZE_STOP - PLAYER_EVENT_SWITCH_BEGIN + SWITCH_BEGIN - PLAYER_EVENT_SWITCH_COMPLETE + SWITCH_COMPLETE - PLAYER_EVENT_SWITCH_ERROR + SWITCH_ERROR - PLAYER_EVENT_FIRST_DISPLAYED + FIRST_DISPLAYED - PLAYER_EVENT_REACH_CACHE_FILE_MAX_COUNT + REACH_CACHE_FILE_MAX_COUNT - PLAYER_EVENT_REACH_CACHE_FILE_MAX_SIZE + REACH_CACHE_FILE_MAX_SIZE @@ -9428,7 +9414,35 @@ - + + + + MusicPlayMode + + + + + + + ORIGINAL + + + + + + + ACCOMPANY + + + + + + + LEAD_SING + + + + PreloadState From 373e9d87a0252bf07acca728ed47eba6bd687d98 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 25 Oct 2024 11:54:07 +0800 Subject: [PATCH 165/354] Update api_imediaplayer_preloadsrc.dita --- dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita index 9c5c80c7373..f8400c81cb9 100644 --- a/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_preloadsrc.dita @@ -34,8 +34,8 @@

    调用该方法后,如果收到 回调报告事件 ,则预加载成功;如果你收到 回调报告事件 ,则预加载失败。

    预加载成功后,如果你想播放媒体资源,请调用 ;如果你想清空播放列表,请调用

    -

    • 调用该方法前,请确保你已经调用 成功打开媒体资源。
    • -
    • SDK 不支持你预加载重复的媒体资源到播放列表,但支持你将正在播放的媒体资源再次预加载到播放列表。

    +
    • 调用该方法前,请确保你已经调用 成功打开媒体资源。
    • +
    • SDK 不支持你预加载重复的媒体资源到播放列表,但支持你将正在播放的媒体资源再次预加载到播放列表。
    参数 From 9bbff5e551dbbc0dfb5d2cc6c57cefdec487e778 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:28:54 +0800 Subject: [PATCH 166/354] fix --- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 3f4ccea2af6..7d15e93dc00 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1658,7 +1658,7 @@
    -
    +
    <ph props="cn">版权音乐</ph>

    本组方法仅适用于 Android 和 iOS。

    From f6e10b167b018388849467e2568dea7986378a3e Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:57:56 +0800 Subject: [PATCH 167/354] review comments --- ...irtcengine_setexternalmediaprojection.dita | 11 +++++++---- ...pi_irtcengine_setlocalrendertargetfps.dita | 2 +- .../api_irtcengine_startlocalaudiomixer.dita | 19 +++++++++---------- ...ne_updatelocalaudiomixerconfiguration.dita | 3 +-- .../class_localaudiomixerconfiguration.dita | 2 +- dita/RTC-NG/API/class_mixedaudiostream.dita | 6 +++--- .../API/enum_compressionpreference.dita | 2 +- 7 files changed, 23 insertions(+), 22 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index 38abf1d91a8..a15ec28d2b6 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -2,7 +2,7 @@ <ph keyref="setExternalMediaProjection"/> - 通过 Android 系统原生的 MediaProjection 采集屏幕视频流。 + 设置 SDK 外部的 MediaProjection 采集屏幕视频流。 @@ -31,12 +31,15 @@ 该方法仅适用于 Android。 -

    成功调用该方法后,SDK 会通过 Android 系统原生的 MediaProjection 采集屏幕共享流。

    -

    当停止屏幕共享时,SDK 会立即释放 MediaProjection 进程。

    +

    成功调用该方法后,你设置的外部 MediaProjection 会替换掉 SDK 申请的 MediaProjection 采集屏幕视频流。

    +

    当停止屏幕共享或销毁 时,SDK 会自动释放 MediaProjection。

    适用场景 -

    在一些特定场景中,你可以通过该方法将 SDK 采集屏幕视频流切换为 MediaProjection 采集屏幕视频流。例如:定制设备,可

    +

    如果你具备自行申请 MediaProjection 的开发能力,可以直接使用该 MediaProjection 取代 SDK 申请的 MediaProjection 。以下列出两种使用场景:

      +
    • 在定制系统的设备上,可避免系统弹窗(即需要用户授予屏幕采集权限),直接开始采集屏幕视频流。
    • +
    • 一个屏幕共享进程中存在一个或多个子进程,避免在子进程中自行创建对象的过程出错而导致采集失败。
    • +

    有关详细的实现步骤,详见

    diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index ed558bc2882..fbb5d2c0903 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -55,7 +55,7 @@ targetFps:(int)targetFps; targetFps 最大渲染帧率。支持的参数值为:1、7、10、15、24、30、60。 - 建议设置比视频实际帧率低的渲染帧率,否则设置不会生效。 + 请将此参数设置为低于视频实际帧率的渲染帧率,否则设置将不会生效。
    diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 19bf19c555c..0c8fbefd1b3 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -30,29 +30,28 @@
    v4.5.0
    -

    该方法支持在本地将多路音频流合并为一路音频流。例如:将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流、通过网络获取的远端音频流等合并为一路音频流,然后将合流后的音频流发布到频道中。

    +

    该方法支持在本地将多路音频流合并为一路音频流。例如:将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流、通过网络获取的远端音频流等合并为一路音频流,然后将合流后的音频流发布到频道中。

      +
    • 如果你要对本地采集的音频流进行合流,可以将 中的 publishMixedAudioTrack 设置为 true,则可将合流后的音频流发布到频道中。
    • +
    • 如果你要对远端音频流进行合流,需确保远端音频流已在频道内发布并且已被订阅。
    • +

    适用场景

    你可以在如下场景中开启该功能:

      -
    • 在语聊房、游戏直播场景下添加背景音乐。
    • -
    • 为视频在线实时配音。
    • -
    • 在在线教育场景下播放本地音频课件。
    • 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
    • +
    • 在语聊房、游戏直播场景下,添加来自媒体播放器的音频源作为背景音乐。
    • +
    • 在线教育场景下,添加来自媒体播放器中的音频源作为音频课件。
    • +
    • 为视频在线实时配音。

    调用时机 -
      -
    • 如果你要对本地采集的音频流进行合流,需要在音频流被采集并且发布后调用该方法。
    • -
    • 如果你要对远端音频流进行合流,需要在音频流被发布及订阅后调用该方法。
    • -
    • 调用该方法后,你需要在调用 时,将 中的 publishMixedAudioTrack 设置为 ,则可将合流后的音频流发布到频道中。
    • -
    +

    该方法在加入频道前后均可调用。

    调用限制 -

    无。

    +

    为了保证音频质量,建议参与本地合流的音频流数量不超过 10 个。

    参数 diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 34b7dbac45d..93a02ece0e0 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -36,9 +36,8 @@ 调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制 -

    无。

    参数 diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 08190270add..52f65a93fd2 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -70,7 +70,7 @@ 合流后的音频流是否使用本地麦克风采集的音频帧时间戳:
    • :(默认)使用本地麦克风采集的音频帧时间戳。如果要所有本地采集的音频流保持同步,你可以将参数设置为该值。
    • -
    • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流音频帧被构建时的时间戳。
    • +
    • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流的音频帧被构建时的时间戳。
    diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index 2a4865b01b3..d868c2174d8 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -74,19 +74,19 @@ remoteUserUid

    远端用户 ID。

    - 请仅在参与本地音频合流的音频源类型为 时,使用该参数。
    + 当参与本地音频合流的音频源类型为 时,需要设置该参数。 channelId

    - 请仅在参与本地音频合流的音频源类型为 时,使用该参数。 + 当参与本地音频合流的音频源类型为 时,需要设置该参数。 trackId

    音频轨道 ID。将该参数设置为调用 方法返回的自定义音频轨道 ID。

    - 请仅在参与本地本地音频合流的音频源类型为 时,使用该参数。 + 当参与本地本地音频合流的音频源类型为 时,需要设置该参数。
    diff --git a/dita/RTC-NG/API/enum_compressionpreference.dita b/dita/RTC-NG/API/enum_compressionpreference.dita index c9289ccea9d..470d1db031d 100644 --- a/dita/RTC-NG/API/enum_compressionpreference.dita +++ b/dita/RTC-NG/API/enum_compressionpreference.dita @@ -25,7 +25,7 @@ - 1:(默认)高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。 + 1:高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。
    From 169dd854256890292d9bdd183f21c53dc397e4a0 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:58:40 +0800 Subject: [PATCH 168/354] 1 --- dita/RTC-NG/API/enum_compressionpreference.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/enum_compressionpreference.dita b/dita/RTC-NG/API/enum_compressionpreference.dita index 470d1db031d..7df2c9d2f06 100644 --- a/dita/RTC-NG/API/enum_compressionpreference.dita +++ b/dita/RTC-NG/API/enum_compressionpreference.dita @@ -25,7 +25,7 @@ - 1:高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。 + 1:高质量偏好。SDK 会对视频帧进行压缩处理,同时保持视频质量。该偏好适用于画质优先的场景。
    From 578f21b29f13db7868594918f3bd133f0334e53c Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:10:02 +0800 Subject: [PATCH 169/354] sync with NMS-23793 --- dita/RTC-NG/API/api_imediaplayer_mute.dita | 2 +- dita/RTC-NG/API/api_irtcengine_enableencryption.dita | 2 +- dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita | 2 +- dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita | 2 +- dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita | 2 +- dita/RTC-NG/API/class_videosubscriptionoptions.dita | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dita/RTC-NG/API/api_imediaplayer_mute.dita b/dita/RTC-NG/API/api_imediaplayer_mute.dita index 3b6531dde04..de15264ee68 100644 --- a/dita/RTC-NG/API/api_imediaplayer_mute.dita +++ b/dita/RTC-NG/API/api_imediaplayer_mute.dita @@ -15,7 +15,7 @@

    int mute(boolean muted); - - (int)mute:(bool)isMute NS_SWIFT_NAME(mute(_:)); + - (int)mute:(BOOL)isMute NS_SWIFT_NAME(mute(_:)); virtual int mute(bool muted) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") int Mute(bool muted); diff --git a/dita/RTC-NG/API/api_irtcengine_enableencryption.dita b/dita/RTC-NG/API/api_irtcengine_enableencryption.dita index 95559597d73..cba3e40c401 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableencryption.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableencryption.dita @@ -15,7 +15,7 @@

    public abstract int enableEncryption(boolean enabled, EncryptionConfig config); public abstract enableEncryption(enabled: boolean, config: EncryptionConfig): number; - - (int)enableEncryption:(bool)enabled encryptionConfig:(AgoraEncryptionConfig * _Nonnull)config; + - (int)enableEncryption:(BOOL)enabled encryptionConfig:(AgoraEncryptionConfig * _Nonnull)config; virtual int enableEncryption(bool enabled, const EncryptionConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableEncryption(bool enabled, const FEncryptionConfig& config); diff --git a/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita b/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita index 7f604ec5a61..7e6ce83aeb7 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita @@ -15,7 +15,7 @@

    public abstract int enableFaceDetection(boolean enabled); public abstract enableFaceDetection(enabled: boolean): number; - - (int)enableFaceDetection:(bool)enable NS_SWIFT_NAME(enableFaceDetection(_:)); + - (int)enableFaceDetection:(BOOL)enable NS_SWIFT_NAME(enableFaceDetection(_:)); virtual int enableFaceDetection(bool enabled) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableFaceDetection(bool enabled); diff --git a/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita b/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita index 413bf6d2fc5..fcd3b07b167 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita @@ -14,7 +14,7 @@

    public abstract int enableVoiceAITuner(boolean enabled, Constants.VOICE_AI_TUNER_TYPE type); - - (int)enableVoiceAITuner:(bool)enabled type:(AgoraVoiceAITunerType)type NS_SWIFT_NAME(enableVoiceAITuner(_:type:)); + - (int)enableVoiceAITuner:(BOOL)enabled type:(AgoraVoiceAITunerType)type NS_SWIFT_NAME(enableVoiceAITuner(_:type:)); virtual int enableVoiceAITuner(bool enabled, VOICE_AI_TUNER_TYPE type) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableVoiceAITuner(bool enabled, EVOICE_AI_TUNER_TYPE type); diff --git a/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita b/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita index 82643d3e641..fbcfd0920c1 100644 --- a/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita +++ b/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita @@ -16,7 +16,7 @@ public abstract int enableEncryptionEx( boolean enabled, EncryptionConfig config, RtcConnection connection); - - (int)enableEncryptionEx:(bool)enabled encryptionConfig:(AgoraEncryptionConfig *_Nonnull)config connection:(AgoraRtcConnection* _Nonnull)connection NS_SWIFT_NAME(enableEncryptionEx(_:encryptionConfig:connection:)); + - (int)enableEncryptionEx:(BOOL)enabled encryptionConfig:(AgoraEncryptionConfig *_Nonnull)config connection:(AgoraRtcConnection* _Nonnull)connection NS_SWIFT_NAME(enableEncryptionEx(_:encryptionConfig:connection:)); virtual int enableEncryptionEx(const RtcConnection& connection, bool enabled, const EncryptionConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableEncryptionEx(const FRtcConnection& connection, bool enabled, const FEncryptionConfig& config); diff --git a/dita/RTC-NG/API/class_videosubscriptionoptions.dita b/dita/RTC-NG/API/class_videosubscriptionoptions.dita index 8ba4d7a54f4..6b85ae01e36 100644 --- a/dita/RTC-NG/API/class_videosubscriptionoptions.dita +++ b/dita/RTC-NG/API/class_videosubscriptionoptions.dita @@ -45,7 +45,7 @@ __attribute__((visibility("default"))) @interface AgoraVideoSubscriptionOptions: NSObject @property (nonatomic, assign) AgoraVideoStreamType type; -@property (nonatomic, assign) bool encodedFrameOnly; +@property (nonatomic, assign) BOOL encodedFrameOnly; @end struct VideoSubscriptionOptions { From 2855ed6cf99635c5a37a6bb5edac840052f34878 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Fri, 25 Oct 2024 17:32:10 +0800 Subject: [PATCH 170/354] sync with NMS-23842 --- dita/RTC-NG/API/api_irtcengine_enableextension.dita | 4 ++-- dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita | 6 +++--- dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita | 6 +++--- .../api_irtcengine_querycamerafocallengthcapability.dita | 2 +- dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita | 2 +- dita/RTC-NG/API/api_irtcengine_registerextension.dita | 4 ++-- dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita | 2 +- .../API/api_irtcengine_setextensionproviderproperty.dita | 2 +- ..._irtcengineeventhandler_onextensionerrorwithcontext.dita | 2 +- ..._irtcengineeventhandler_onextensioneventwithcontext.dita | 2 +- ...rtcengineeventhandler_onextensionstartedwithcontext.dita | 2 +- ...rtcengineeventhandler_onextensionstoppedwithcontext.dita | 2 +- dita/RTC-NG/API/class_audiopcmframe.dita | 2 +- dita/RTC-NG/API/class_imediafilterextensiondelegate.dita | 2 +- 14 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enableextension.dita b/dita/RTC-NG/API/api_irtcengine_enableextension.dita index 4c6dff8cd0d..5ece6e8d0ca 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableextension.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableextension.dita @@ -16,8 +16,8 @@ public abstract int enableExtension( String provider, String extension, boolean enable, Constants.MediaSourceType sourceType); public abstract enableExtension(provider:string,extension:string,enable:boolean,extensionInfo:ExtensionInfo):number; - - (int)enableExtensionWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension + - (int)enableExtensionWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension enabled:(BOOL)enabled sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(enableExtension(withVendor:extension:enabled:sourceType:)); virtual int enableExtension(const char* provider, const char* extension, bool enable=true, agora::media::MEDIA_SOURCE_TYPE type = agora::media::UNKNOWN_MEDIA_SOURCE) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita b/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita index 3ade1028cf7..b36b03b411d 100644 --- a/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita +++ b/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita @@ -16,9 +16,9 @@ public abstract String getExtensionProperty(String provider, String extension, String key); - - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension - key:(NSString * __nonnull)key; + - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension + key:(NSString * _Nonnull)key; diff --git a/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita b/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita index 1624297ac80..4e72f2088b7 100644 --- a/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita @@ -17,9 +17,9 @@ String provider, String extension, String key, Constants.MediaSourceType sourceType); - - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension - key:(NSString * __nonnull)key + - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension + key:(NSString * _Nonnull)key sourceType:(AgoraMediaSourceType)sourceType; virtual int getExtensionProperty( diff --git a/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita b/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita index 9d8f545981e..9afe84579f9 100644 --- a/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita +++ b/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita @@ -15,7 +15,7 @@

    public AgoraFocalLengthInfo[] queryCameraFocalLengthCapability(); - - (NSArray<AgoraFocalLengthInfo *>* __nullable)queryCameraFocalLengthCapability NS_SWIFT_NAME(queryCameraFocalLengthCapability()); + - (NSArray<AgoraFocalLengthInfo *>* _Nullable)queryCameraFocalLengthCapability NS_SWIFT_NAME(queryCameraFocalLengthCapability()); virtual int queryCameraFocalLengthCapability(agora::rtc::FocalLengthInfo* focalLengthInfos, int& size) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int QueryCameraFocalLengthCapability(const TArray<FFocalLengthInfo> & focalLengthInfos); diff --git a/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita b/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita index 4cf769bd79b..e8cc8fa00d6 100644 --- a/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita +++ b/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita @@ -15,7 +15,7 @@

    public abstract CodecCapInfo[] queryCodecCapability(); - - (NSArray <AgoraVideoCodecCapInfo *> *__nullable)queryCodecCapability; + - (NSArray <AgoraVideoCodecCapInfo *> *_Nullable)queryCodecCapability; virtual int queryCodecCapability(CodecCapInfo* codecInfo, int& size) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/dita/RTC-NG/API/api_irtcengine_registerextension.dita b/dita/RTC-NG/API/api_irtcengine_registerextension.dita index c7b7cd4e971..1b9cb96a234 100644 --- a/dita/RTC-NG/API/api_irtcengine_registerextension.dita +++ b/dita/RTC-NG/API/api_irtcengine_registerextension.dita @@ -16,8 +16,8 @@ public abstract int registerExtension( String provider, String extension, Constants.MediaSourceType sourceType); - - (int)registerExtensionWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension + - (int)registerExtensionWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(registerExtension(withVendor:extension:sourceType:)); virtual int registerExtension(const char* provider, const char* extension, agora::media::MEDIA_SOURCE_TYPE type = agora::media::UNKNOWN_MEDIA_SOURCE) = 0; diff --git a/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita b/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita index fc9fe130b03..cf278c9a910 100644 --- a/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita +++ b/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita @@ -17,7 +17,7 @@ String provider, String extension, String key, String value); - - (int)setExtensionPropertyWithVendor:(NSString * __nonnull)provider extension:(NSString * __nonnull)extension key:(NSString * __nonnull)key value:(NSString * __nonnull)value; + - (int)setExtensionPropertyWithVendor:(NSString * _Nonnull)provider extension:(NSString * _Nonnull)extension key:(NSString * _Nonnull)key value:(NSString * _Nonnull)value; virtual int setExtensionProperty( const char* provider, const char* extension, diff --git a/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita b/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita index 054f643fd3a..6814e7f83fc 100644 --- a/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita +++ b/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita @@ -16,7 +16,7 @@ public abstract int setExtensionProviderProperty(String provider, String key, String value); - - (int) setExtensionProviderPropertyWithVendor:(NSString * __nonnull)provider key:(NSString * __nonnull)key value:(NSString * __nonnull)value; + - (int) setExtensionProviderPropertyWithVendor:(NSString * _Nonnull)provider key:(NSString * _Nonnull)key value:(NSString * _Nonnull)value; virtual int setExtensionProviderProperty( const char* provider, const char* key, const char* value) = 0; diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita index c42887ddcb5..61ffbb07393 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita @@ -15,7 +15,7 @@

    void onErrorWithContext(ExtensionContext extContext, int error, String message){}; onError?:(err:number,message:string) => void - - (void)onExtensionErrorWithContext:(AgoraExtensionContext * __nonnull)context + - (void)onExtensionErrorWithContext:(AgoraExtensionContext * _Nonnull)context error:(int)error message:(NSString * __nullable)message NS_SWIFT_NAME(onExtensionErrorWithContext(_:error:message:)); virtual void onExtensionErrorWithContext(const ExtensionContext &context, int error, const char* message) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita index 2f4a21c50c8..4c06c619acc 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita @@ -15,7 +15,7 @@

    void onEventWithContext(ExtensionContext extContext, String key, String value){}; - - (void)onEventWithContext:(AgoraExtensionContext * __nonnull)context + - (void)onEventWithContext:(AgoraExtensionContext * _Nonnull)context key:(NSString * __nullable)key value:(NSString * __nullable)value NS_SWIFT_NAME(onEventWithContext(_:key:value:)); virtual void onExtensionEventWithContext(const ExtensionContext &context, const char* key, const char* value) { diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita index 9f9b609866c..9d64d7d082c 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita @@ -15,7 +15,7 @@

    void onStartedWithContext(ExtensionContext extContext){}; - - (void)onExtensionStartedWithContext:(AgoraExtensionContext * __nonnull)context NS_SWIFT_NAME(onExtensionStartedWithContext(_:)); + - (void)onExtensionStartedWithContext:(AgoraExtensionContext * _Nonnull)context NS_SWIFT_NAME(onExtensionStartedWithContext(_:)); virtual void onExtensionStartedWithContext(const ExtensionContext &context) { (void)context; } diff --git a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita index 3bdaec83dba..f33cd4a97c7 100644 --- a/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita +++ b/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita @@ -15,7 +15,7 @@

    void onStoppedWithContext(ExtensionContext extContext){}; - - (void)onExtensionStoppedWithContext:(AgoraExtensionContext * __nonnull)context NS_SWIFT_NAME(onExtensionStoppedWithContext(_:)); + - (void)onExtensionStoppedWithContext:(AgoraExtensionContext * _Nonnull)context NS_SWIFT_NAME(onExtensionStoppedWithContext(_:)); virtual void onExtensionStoppedWithContext(const ExtensionContext &context) { (void)context; } diff --git a/dita/RTC-NG/API/class_audiopcmframe.dita b/dita/RTC-NG/API/class_audiopcmframe.dita index 1a6baddd3fb..e03b197b65c 100644 --- a/dita/RTC-NG/API/class_audiopcmframe.dita +++ b/dita/RTC-NG/API/class_audiopcmframe.dita @@ -13,7 +13,7 @@ @property (assign, nonatomic) size_t samplesPerChannel; @property (assign, nonatomic) int sampleRateHz; @property (assign, nonatomic) size_t channelNumbers; - @property (strong, nonatomic) NSData* __nonnull pcmBuffer; + @property (strong, nonatomic) NSData* _Nonnull pcmBuffer; @property (assign, nonatomic) BytesPerSampleType bytesPerSample; @end diff --git a/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita b/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita index 8ee650b0645..9de358b8a61 100644 --- a/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita +++ b/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita @@ -9,7 +9,7 @@ @protocol AgoraMediaFilterExtensionDelegate <NSObject> -- (NSString * __nonnull)vendor; +- (NSString * _Nonnull)vendor; @end From 440e5bf0b1cdfb505978dd0cf80b4f63a4937991 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 28 Oct 2024 11:40:33 +0800 Subject: [PATCH 171/354] RESOLVE COMMENTS --- dita/RTC-NG/API/api_canvas_getconfigs.dita | 2 +- dita/RTC-NG/API/api_canvas_setconfigs.dita | 2 +- .../API/api_canvasconfig_getrendermode.dita | 4 +-- .../API/api_imediaplayer_switchsrc.dita | 2 -- dita/RTC-NG/API/api_player_getconfigs.dita | 4 +-- dita/RTC-NG/API/api_player_muteaudio.dita | 4 +-- dita/RTC-NG/API/api_player_mutevideo.dita | 4 +-- dita/RTC-NG/API/api_player_play.dita | 2 +- .../API/api_player_registerobserver.dita | 2 +- dita/RTC-NG/API/api_player_stop.dita | 3 ++- ..._playerconfig_getabrsubscriptionlayer.dita | 10 ++++--- .../api_playerconfig_setabrfallbacklayer.dita | 10 ++++--- ..._playerconfig_setabrsubscriptionlayer.dita | 9 ++++--- dita/RTC-NG/API/api_rte_getconfigs.dita | 4 +-- dita/RTC-NG/API/api_rte_getfrombridge.dita | 4 +-- dita/RTC-NG/API/api_rte_initmediaengine.dita | 7 +++-- dita/RTC-NG/API/api_rte_setconfigs.dita | 4 +-- dita/RTC-NG/API/class_rteplayerinfo.dita | 8 +++--- dita/RTC-NG/API/enum_rteabrfallbacklayer.dita | 26 +++++++++---------- .../API/enum_rteabrsubscriptionlayer.dita | 20 +++++++------- dita/RTC-NG/API/enum_rteplayerevent.dita | 4 +-- dita/RTC-NG/API/enum_rteplayerstate.dita | 2 +- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 +-- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 11 ++++---- 24 files changed, 81 insertions(+), 71 deletions(-) diff --git a/dita/RTC-NG/API/api_canvas_getconfigs.dita b/dita/RTC-NG/API/api_canvas_getconfigs.dita index 4ecc8f09ba6..95d97bed153 100644 --- a/dita/RTC-NG/API/api_canvas_getconfigs.dita +++ b/dita/RTC-NG/API/api_canvas_getconfigs.dita @@ -34,7 +34,7 @@

    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_canvas_setconfigs.dita b/dita/RTC-NG/API/api_canvas_setconfigs.dita index 65d2b4c80b2..42b6d3a26a3 100644 --- a/dita/RTC-NG/API/api_canvas_setconfigs.dita +++ b/dita/RTC-NG/API/api_canvas_setconfigs.dita @@ -34,7 +34,7 @@
    调用时机 -

    当你调用 指定一个 Canvas 对象来显示视频后,你可以调用该方法来设置渲染配置。

    +

    该方法需要在 之前调用。

    调用限制 diff --git a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita index 2810e61845b..b78d8600121 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita @@ -51,8 +51,8 @@ <ph keyref="return-section-title"/>

    当前设置的视频渲染模式,详见

    -
    - 异常 +
    +

    diff --git a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita index df6e6b0ef36..3bc2097bbda 100644 --- a/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita +++ b/dita/RTC-NG/API/api_imediaplayer_switchsrc.dita @@ -59,12 +59,10 @@ syncPts 是否同步切换前后的起始播放位置: -
    • :同步。
    • :(默认) 不同步。
    -

    如果媒体资源为直播流,你只能将该参数设置为 ,否则 SDK 切换媒体资源会失败。如果媒体资源为点播流,你可以根据场景需求对该参数赋值。

    diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita index 82784d9144b..f261039f061 100644 --- a/dita/RTC-NG/API/api_player_getconfigs.dita +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -32,9 +32,9 @@

    -
    +
    调用时机 -

    该方法需要在 之后调用。

    +

    调用限制 diff --git a/dita/RTC-NG/API/api_player_muteaudio.dita b/dita/RTC-NG/API/api_player_muteaudio.dita index 76e0f25d3b9..57abf1d14cb 100644 --- a/dita/RTC-NG/API/api_player_muteaudio.dita +++ b/dita/RTC-NG/API/api_player_muteaudio.dita @@ -50,8 +50,8 @@ mute 是否订阅主播的音频流: -
    • :订阅主播的音频流。
    • -
    • :不订阅主播的音频流。
    +
    • :不订阅主播的音频流。
    • +
    • :订阅主播的音频流。
    diff --git a/dita/RTC-NG/API/api_player_mutevideo.dita b/dita/RTC-NG/API/api_player_mutevideo.dita index f6732e24bbb..a926bd32496 100644 --- a/dita/RTC-NG/API/api_player_mutevideo.dita +++ b/dita/RTC-NG/API/api_player_mutevideo.dita @@ -50,8 +50,8 @@ mute 是否订阅主播的视频流: -
    • :订阅主播的视频流。
    • -
    • :不订阅主播的视频流。
    +
    • :不订阅主播的视频流。
    • +
    • :订阅主播的视频流。
    diff --git a/dita/RTC-NG/API/api_player_play.dita b/dita/RTC-NG/API/api_player_play.dita index 1610222139a..9bf3d194c94 100644 --- a/dita/RTC-NG/API/api_player_play.dita +++ b/dita/RTC-NG/API/api_player_play.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    如果你关闭了自动播放,当你调用 打开成功拉取实时流媒体,你可以调用此方法进行播放。

    +

    如果你关闭了自动播放,当你调用 成功打开实时流媒体,你可以调用此方法进行播放。

    调用时机 diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita index 9d038eaebee..21a0eda8d9a 100644 --- a/dita/RTC-NG/API/api_player_registerobserver.dita +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -30,7 +30,7 @@
    v4.5.0
    -

    你需要在调用该方法前,实现一个继承自 的接口类。

    +

    调用该方法前,你需要实现一个继承自 的接口类。

    调用时机 diff --git a/dita/RTC-NG/API/api_player_stop.dita b/dita/RTC-NG/API/api_player_stop.dita index fc46a4f1635..4237364adcd 100644 --- a/dita/RTC-NG/API/api_player_stop.dita +++ b/dita/RTC-NG/API/api_player_stop.dita @@ -30,7 +30,8 @@
    v4.5.0
    -

    当你调用 播放 URL 流后,如果你想停止播放,可以调用此方法。如果你需要暂停播放,请调用

    +

    如果你调用 打开 URL 流失败,需要先调用此方法,然后再调用 重新打开 URL。

    +

    当你成功打开 URL 流并调用 播放后,如果你想停止播放,可以调用此方法。如果你需要暂停播放,请调用

    调用时机 diff --git a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita index 048a22bd2c9..cbbddf0d5d0 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita @@ -50,7 +50,11 @@
    <ph keyref="return-section-title"/> -

    设置的视频质量层级,详见

    -

    方法调用成功时,返回设置的视频质量层级,详见 。方法调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    - +

    设置的视频质量层级,详见

    +
    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita index c99d263c9ca..9976a6d4d42 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita @@ -31,6 +31,7 @@

    网络不理想的环境下,实时通信音视频的质量会下降。调用该方法后,SDK 会在网络情况差的时候将视频流的分辨率回退到你指定的视频质量层级。不同的视频质量层级对应不同的分辨率和码率。同时,SDK 会持续监控网络质量,并在网络质量改善时恢复至你所订阅的视频流质量层级。

    +

    默认情况下,调用该方法后只能在源频道选择回退至 。如果你对视频体验有更高要求,你可以开通 ABR 功能。启用该功能后,可以在转码频道选择回退到所有质量层级的视频流,并支持自定义不同质量层级的视频流所对应的分辨率。

    适用场景 @@ -47,7 +48,7 @@
    调用限制 -

    如果没有开通 ABR(自适应码率)功能,调用该方法后只能在源频道选择回退至 。开通 ABR 功能后,可以转码频道选择回退到所有质量层级的视频流,并支持自定义不同质量层级的视频流所对应的分辨率。

    +

    调用该方法时如果你未开通 ABR 功能,视频流回退的质量层级只能选择

    参数 @@ -56,9 +57,10 @@ fallbackLayer abr_fallback_layer layer - 视频流回退的质量层级,详见 。 - - + 视频流回退的质量层级,详见 。在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: + + + diff --git a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita index 6a928ea38f0..aa0ff2b18db 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita @@ -30,7 +30,8 @@
    v4.5.0
    -

    你可以根据实际的网络情况切换订阅不同的视频流质量层级,对应不同的分辨率和码率。具体实现细节详见 +

    你可以根据实际的网络情况切换订阅不同的视频流质量层级,对应不同的分辨率。 + 默认情况下,调用该方法后观众只能在源频道切换订阅视频的大小流,即在 之间切换。如对视频分辨率切换有更高要求,你可以开通 ABR(自适应码率)功能。启用该功能后,你可以自定义不同质量层级的视频流所对应的分辨率,观众可以在专门的转码频道根据需求切换所有质量层级的视频流。详细功能实现详见

    @@ -43,7 +44,7 @@
    调用限制 -

    如果没有开通 ABR(自适应码率)功能,调用该方法后观众只能在源频道切换视频大小流,即在 之间切换。开通 ABR 功能后,你可以自定义不同质量层级的视频流所对应的分辨率,观众可以在专门的转码频道根据需求切换所有质量层级的视频流。详细功能实现详见

    +

    调用该方法时如果你未开通 ABR 功能,订阅的视频质量层级只能选择

    参数 @@ -53,7 +54,7 @@ abr_subscription_layer layer 订阅的视频质量层级,详见 。 -

    在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: +

    在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: 视频质量层级 分辨率 @@ -85,7 +86,7 @@ 480p(SD)

    - 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。 + 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。
    diff --git a/dita/RTC-NG/API/api_rte_getconfigs.dita b/dita/RTC-NG/API/api_rte_getconfigs.dita index f92f5d5d3e9..4561e656e24 100644 --- a/dita/RTC-NG/API/api_rte_getconfigs.dita +++ b/dita/RTC-NG/API/api_rte_getconfigs.dita @@ -32,9 +32,9 @@

    -
    +
    调用时机 -

    该方法需要在 之后调用。

    +

    调用限制 diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index 3aaeedcd381..5ffc88a613e 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -30,11 +30,11 @@
    v4.5.0
    -

    调用该方法后无需再额外初始化 RTE 引擎。如果你未创建 RTC 引擎,可直接调用 创建一个 RTE 对象,然后再调用 进行初始化。

    +

    调用该方法创建的 RTE 对象,无需再通过 进行初始化。如果你之前未创建并初始化 RTC 引擎, 可以先调用 创建一个 RTE对象,然后再调用 进行初始化。

    调用时机 -

    调用该方法前,请确保已创建并初始化 RTC 引擎。

    +

    调用该方法前,请确保已调用 初始化 RTC 引擎。

    调用限制 diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index c3a73b1f8b0..6a725942390 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -31,7 +31,6 @@

    此方法为异步方法,通过回调函数返回初始化结果。

    -

    如果初始化过程中出现错误,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    调用时机 @@ -67,5 +66,9 @@
  • :未成功加入队列。
  • 该返回值仅表示初始化操作是否成功地被安排在异步任务队列中,不表示初始化是否成功。

    - +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_rte_setconfigs.dita b/dita/RTC-NG/API/api_rte_setconfigs.dita index ba937483103..4824750510b 100644 --- a/dita/RTC-NG/API/api_rte_setconfigs.dita +++ b/dita/RTC-NG/API/api_rte_setconfigs.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    你可以调用该方法来设置 App ID、SDK 日志文件、服务器的访问区域等信息。

    +

    你可以调用该方法来设置 App ID 等信息。

    调用时机 -

    如果你需要通过该方法设置 App ID,请在 之前调用。如需更新其他配置,可随时调用该方法。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/class_rteplayerinfo.dita b/dita/RTC-NG/API/class_rteplayerinfo.dita index 96b89845206..45e2d7c0bb7 100644 --- a/dita/RTC-NG/API/class_rteplayerinfo.dita +++ b/dita/RTC-NG/API/class_rteplayerinfo.dita @@ -100,15 +100,15 @@ is_audio_muted isAudioMuted 本地用户是否订阅了音频流: -
    • :订阅了音频流。
    • -
    • :未订阅音频流。
    +
    • :未订阅音频流。
    • +
    • :订阅了音频流。
    is_video_muted isVideoMuted 本地用户是否订阅了视频流: -
    • :订阅了视频流。
    • -
    • :未订阅视频流。
    +
    • :未订阅视频流。
    • +
    • :订阅了视频流。
    video_height diff --git a/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita index 32db846f25c..e88de4c75df 100644 --- a/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita +++ b/dita/RTC-NG/API/enum_rteabrfallbacklayer.dita @@ -11,6 +11,11 @@
    v4.5.0
    +
      +
    • 使用 开通 ABR 功能。开通后,你可以自定义每一个层级的分辨率,然后选择其中任意一个层级作为视频流回退的最低分辨率。在网络情况差时,SDK 会以此为下限,在此范围内根据网络状况动态调整分辨率。
    • +
    • 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。
    • +
    +
    枚举值 @@ -21,9 +26,8 @@ - 1:(默认)回退至最低质量的视频流。该层级的分辨率和码率最低。 - 如果你开启了 ABR 功能,并将回退的质量层级设为 , 弱网情况下 SDK 的回退顺序是:
    • 层级 1 - 6(如有)
    • -
    • 最低质量层级
    + 1:(默认)回退至最低质量的视频流。该层级的分辨率最低。 +
    @@ -32,31 +36,27 @@ 3:回退到视频质量层级 1。该层级的分辨率和码率仅低于所订阅的最高质量的视频流。 -
      -
    • 使用 开通 ABR 功能。开通后,你可以自定义每一个层级的分辨率,然后选择其中任意一个层级作为视频流回退的最低分辨率。在网络情况差时,SDK 会以此为下限,在此范围内根据网络状况动态调整分辨率。
    • -
    • 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。
    • -
    -
    +
    - 4:回退到视频质量层级 2。该层级的分辨率和码率仅低于层级 1。 + 4:回退到视频质量层级 2。该层级的分辨率仅低于层级 1。 - 5:回退到视频质量层级 3。该层级的分辨率和码率仅低于层级 2。 + 5:回退到视频质量层级 3。该层级的分辨率仅低于层级 2。 - 5:回退到视频质量层级 4。该层级的分辨率和码率仅低于层级 3。 + 5:回退到视频质量层级 4。该层级的分辨率仅低于层级 3。 - 5:回退到视频质量层级 5。该层级的分辨率和码率仅低于层级 4。 + 5:回退到视频质量层级 5。该层级的分辨率仅低于层级 4。 - 5:回退到视频质量层级 6。该层级的分辨率和码率仅低于层级 5。 + 5:回退到视频质量层级 6。该层级的分辨率仅低于层级 5。
    diff --git a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita index e834d72c540..d27e239d8bf 100644 --- a/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/enum_rteabrsubscriptionlayer.dita @@ -11,43 +11,43 @@
    v4.5.0
    + 如果需要自定义 层级的视频分辨率并进行订阅,请开通 ABR 功能。
    枚举值 - 0:最高质量的视频流。该质量层级的分辨率和码率最高。 + 0:最高质量的视频流。该质量层级的分辨率最高。 - 1:(默认)最低质量的视频流。该质量层级的分辨率和码率最低。 + 1:(默认)最低质量的视频流。该质量层级的分辨率最低。 - 2:视频质量层级 1。该质量层级的分辨率和码率仅低于 。 - 如果需要自定义 层级的视频分辨率并进行订阅,请开通 ABR 功能。 - + 2:视频质量层级 1。该质量层级的分辨率仅低于 。 + - 3:视频质量层级 2。该质量层级的分辨率和码率低于 + 3:视频质量层级 2。该质量层级的分辨率低于 - 4:视频质量层级 3。该质量层级的分辨率和码率低于 + 4:视频质量层级 3。该质量层级的分辨率低于 - 5:视频质量层级 4。该质量层级的分辨率和码率低于 + 5:视频质量层级 4。该质量层级的分辨率低于 - 6:视频质量层级 5。该质量层级的分辨率和码率低于 + 6:视频质量层级 5。该质量层级的分辨率低于 - 7:视频质量层级 6。该质量层级的分辨率和码率低于 + 7:视频质量层级 6。该质量层级的分辨率低于
    diff --git a/dita/RTC-NG/API/enum_rteplayerevent.dita b/dita/RTC-NG/API/enum_rteplayerevent.dita index 1d05c405615..57e6910e28d 100644 --- a/dita/RTC-NG/API/enum_rteplayerevent.dita +++ b/dita/RTC-NG/API/enum_rteplayerevent.dita @@ -17,11 +17,11 @@ - 5:音频或视频卡顿开始。 + 5:音频或视频出现卡顿。 - 6:音频或视频卡顿结束。 + 6:音频和视频均停止卡顿。 diff --git a/dita/RTC-NG/API/enum_rteplayerstate.dita b/dita/RTC-NG/API/enum_rteplayerstate.dita index 7787147fdfb..cee5d2ea572 100644 --- a/dita/RTC-NG/API/enum_rteplayerstate.dita +++ b/dita/RTC-NG/API/enum_rteplayerstate.dita @@ -45,7 +45,7 @@ - 7:失败状态。当内部发生错误时会报告该状态码。 + 7:失败状态。当内部发生错误时会报告该状态码。如果你收到该状态,需要先调用 然后再调用 重新打开该资源。
    diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index d9ceeecb46b..1180a72823f 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -479,7 +479,7 @@ - + @@ -492,7 +492,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index ca2caba40f3..591e44ce929 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1186,11 +1186,11 @@ - SetJsonParameter [1/2] + SetJsonParameter - + SetJsonParameter [2/2] @@ -1228,11 +1228,11 @@ - GetJsonParameter [1/2] + GetJsonParameter - + GetJsonParameter [2/2] @@ -1241,6 +1241,7 @@ + Pause @@ -1277,7 +1278,7 @@ - RegisterObserver_Player + RegisterObserver From e17b93b3743d2d49afb7d245525470af87b83b0d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 28 Oct 2024 15:04:28 +0800 Subject: [PATCH 172/354] fix type/sourcetype --- .../api_irtcengine_enablevirtualbackground.dita | 11 +++-------- .../api_irtcengine_enablevirtualbackground2.dita | 7 ++++++- .../api_irtcengine_setbeautyeffectoptions.dita | 6 +++--- .../api_irtcengine_setcolorenhanceoptions.dita | 5 ----- .../api_irtcengine_setfiltereffectoptions.dita | 3 +-- .../api_irtcengine_setlowlightenhanceoptions.dita | 15 +++++++-------- ...api_irtcengine_setlowlightenhanceoptions2.dita | 1 - 7 files changed, 20 insertions(+), 28 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground.dita b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground.dita index 912f118bbe9..9bab340bf81 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground.dita @@ -94,14 +94,9 @@ segData 背景图像的处理属性。详见 - - type - 视频源类型。详见 。 - 在该方法中,该参数仅支持以下两种设置: -
      -
    • 默认值为
    • -
    • 如果要使用第二个摄像头采集视频,将该参数设置为
    • -
    + + +
    diff --git a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita index a73ba01793b..0976c5daa29 100644 --- a/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita +++ b/dita/RTC-NG/API/api_irtcengine_enablevirtualbackground2.dita @@ -54,7 +54,12 @@ sourceType - 应用效果的媒体源。详见 + 效果应用的媒体源类型。详见 。 + 在该方法中,该参数仅支持以下两种设置: +
      +
    • 默认值为
    • +
    • 如果要使用自定义采集的视频,将该参数设置为
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setbeautyeffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setbeautyeffectoptions.dita index 76bdac391ba..7ad598169f8 100644 --- a/dita/RTC-NG/API/api_irtcengine_setbeautyeffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setbeautyeffectoptions.dita @@ -68,9 +68,9 @@ options 美颜选项,详细定义见 - - - + + +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setcolorenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setcolorenhanceoptions.dita index d55afb5061d..1e8a2a760ff 100644 --- a/dita/RTC-NG/API/api_irtcengine_setcolorenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setcolorenhanceoptions.dita @@ -46,11 +46,6 @@
    • 请在 后调用该方法。
    • 色彩增强对设备性能有一定要求。开启色彩增强后,如果设备出现严重发烫等问题,建议你将色彩增强等级修改为消耗性能较少的等级或关闭色彩增强功能。
    • -
    • 该方法和 均可开启色彩增强功能: -
        -
      • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
      • -
      • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
      • -
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index e702b9eaafc..0ba3e6f1738 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -66,10 +66,9 @@ type sourceType 效果应用的媒体源类型。详见 。 - 在该方法中,该参数仅支持以下三种设置: + 在该方法中,该参数仅支持以下两种设置:
    • 默认值为
    • -
    • 如果要使用第二个摄像头采集视频,将该参数设置为
    • 如果要使用自定义采集的视频,将该参数设置为
    diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index edf02a39f1d..ae2a22c1853 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -40,13 +40,7 @@

    你可以调用该方法开启暗光增强功能并设置暗光增强的效果。

    - -

    该方法和 均可开启视频降噪功能: -

      -
    • 当你使用 SDK 采集视频时,建议使用该方法(该方法只可对 SDK 采集的视频起作用)。
    • -
    • 当你使用外部的视频源实现自定义视频采集,或者将外部视频源发送给 SDK 时,建议使用 方法。
    • -
    -

    +
    适用场景

    暗光增强功能可以在光线亮度偏低(如背光、阴天、暗场景)和亮度不均匀的环境下自适应调整视频画面的亮度值,恢复或凸显图像的细节信息,最终提升视频图像的整体视觉效果。

    @@ -86,7 +80,12 @@ type - 媒体源类型,详见 + 效果应用的媒体源类型。详见 。 + 在该方法中,该参数仅支持以下两种设置: +
      +
    • 默认值为
    • +
    • 如果要使用自定义采集的视频,将该参数设置为
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index 6c1ec2301c0..db2ac1fcb35 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -27,7 +27,6 @@

    该方法和 均可用于设置暗光增强功能,区别在于该方法支持在设置暗光增强功能时指定应用暗光增强的媒体源。

    -
    From b6ec2c526671a384c2bd0245705ebdbcfe0890dd Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 28 Oct 2024 15:20:33 +0800 Subject: [PATCH 173/354] update links --- .../RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita | 4 ++-- .../API/api_irtcengine_setfaceshapeareaoptions2.dita | 4 ++-- .../API/api_irtcengine_setfaceshapebeautyoptions.dita | 4 ++-- .../API/api_irtcengine_setfaceshapebeautyoptions2.dita | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ 9 files changed, 43 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index cdd49a08aaf..b1fcac99540 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -31,9 +31,9 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见实现高级美颜。

    +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    该方法和 均可用于设置美型部位选项,区别在于该方法支持指定应用美型效果的媒体源。

    - 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +
    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita index 0a6bd60a578..69d61310399 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita @@ -31,8 +31,8 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位微调,实现更加精细的美型效果。

    - 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    +
    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 874647b2ab8..b67887b8748 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -31,9 +31,9 @@
    v4.5.0
    -

    调用该方法可对人脸各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    +

    调用该方法可对人脸各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    - 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 + 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见
    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita index ad498d67e18..ea42e983883 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita @@ -30,8 +30,8 @@
    v4.5.0
    -

    调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见实现高级美颜。

    - 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见增值服务费用。 +

    调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见

    +
    diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 38c5a447f70..ef1d66d9d8b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -101,6 +101,13 @@ + + + + 实现高级美颜 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap index 28aaff82664..d2584ab5b8e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap @@ -88,6 +88,13 @@ + + + + 实现高级美颜 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap index 909e190e4fe..cda68fe5c97 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap @@ -102,6 +102,13 @@ + + + + 实现高级美颜 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap index 5ea909f6766..fcfa44aa420 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap @@ -74,6 +74,13 @@ + + + + 实现高级美颜 + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 5611004f6b7..617a29012fe 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -120,6 +120,13 @@ + + + + 增值服务费用 + + + From 5d0831365beeda11eac2075da0d8ab6ab8554c8e Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 28 Oct 2024 15:27:30 +0800 Subject: [PATCH 174/354] peer review fixes --- dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita | 2 +- dita/RTC-NG/API/enum_faceshapearea.dita | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index b67887b8748..f32401d96db 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -33,7 +33,7 @@

    调用该方法可对人脸各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    - 美型属于高级美颜效果,调用该方法将产生费用,计费方式详见 + 不同于 实现的美白、磨皮等基础美颜效果,美型属于高级美颜效果,调用该方法将产生费用,计费方式详见
    调用时机 diff --git a/dita/RTC-NG/API/enum_faceshapearea.dita b/dita/RTC-NG/API/enum_faceshapearea.dita index 759015aa944..25bdc7194e9 100644 --- a/dita/RTC-NG/API/enum_faceshapearea.dita +++ b/dita/RTC-NG/API/enum_faceshapearea.dita @@ -25,7 +25,7 @@ - 1: 额头,修饰发际线高度。对应修饰力度范围为 [-100,100],正值为调高,负值为调低,绝对值越大修饰效果越强,预设值为 50。 + 1: 额头,修饰发际线高度。对应修饰力度范围为 [-100,100],正值为调高发际线(额头更窄),负值为调低发际线(额头更宽),绝对值越大修饰效果越强,预设值为 50。 @@ -53,7 +53,7 @@ - 8: 眼睛,用于实现大眼效果。对应修饰力度范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53,。 + 8: 眼睛,用于实现大眼效果。对应修饰力度范围为 [0,100],值越大,眼睛尺寸越大,预设值为 53。 From b1b70a4a425e56e284aaa4e8cda04ab9296fde46 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 28 Oct 2024 15:31:40 +0800 Subject: [PATCH 175/354] update keys links --- dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index ef1d66d9d8b..3cfce97ca3c 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -101,7 +101,7 @@ - + 实现高级美颜 diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap index d2584ab5b8e..03f7aa8f503 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap @@ -88,7 +88,7 @@ - + 实现高级美颜 diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap index cda68fe5c97..110c8ac798c 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-ios.ditamap @@ -102,7 +102,7 @@ - + 实现高级美颜 diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap index fcfa44aa420..200296cbcb9 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-macos.ditamap @@ -74,7 +74,7 @@ - + 实现高级美颜 From d6bf99dad1e2df31031f46c4d398c414558c59cb Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 28 Oct 2024 15:39:57 +0800 Subject: [PATCH 176/354] revert unnec changes --- dita/RTC/API/enum_videodenoiserlevel.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC/API/enum_videodenoiserlevel.dita b/dita/RTC/API/enum_videodenoiserlevel.dita index d7e06a1210a..67e6a970119 100644 --- a/dita/RTC/API/enum_videodenoiserlevel.dita +++ b/dita/RTC/API/enum_videodenoiserlevel.dita @@ -13,11 +13,11 @@ - 1:优先性能的视频降噪。 是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,声网推荐你在摄像头固定的情况下使用 + 优先性能的视频降噪。 是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,声网推荐你在摄像头固定的情况下使用 - 2:强效的视频降噪。 是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用 + 强效的视频降噪。 是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用
    From fa453fd1731a2d1a51152a141713e21ba4696b30 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 28 Oct 2024 16:37:58 +0800 Subject: [PATCH 177/354] class-method relation --- .../API/api_canvasconfig_canvasconfig.dita | 44 +++++++++++ dita/RTC-NG/API/class_canvas.dita | 67 ++++++++++++++++ dita/RTC-NG/API/class_canvasconfig.dita | 65 ++++++++++++++++ dita/RTC-NG/API/class_config.dita | 8 +- dita/RTC-NG/API/class_playerconfig.dita | 78 ++++++++++++++++++- dita/RTC-NG/API/rtc_api_data_type.dita | 2 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 3 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 ++ .../config/relations-rtc-ng-api.ditamap | 17 ++++ 9 files changed, 284 insertions(+), 7 deletions(-) create mode 100644 dita/RTC-NG/API/api_canvasconfig_canvasconfig.dita diff --git a/dita/RTC-NG/API/api_canvasconfig_canvasconfig.dita b/dita/RTC-NG/API/api_canvasconfig_canvasconfig.dita new file mode 100644 index 00000000000..c27c6054591 --- /dev/null +++ b/dita/RTC-NG/API/api_canvasconfig_canvasconfig.dita @@ -0,0 +1,44 @@ + + + + <ph keyref="CanvasConfig_CanvasConfig"/> + 构造一个 CanvasConfig 对象。 + + + + + + + + +
    +

    + + + + CanvasConfig() {RteCanvasConfigInit(&c_canvas_config, nullptr);} + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    在进行视频渲染设置之前,你需要调用该方法构造一个 CanvasConfig 对象并进行初始化。//TODO

    +
    +
    + 调用时机 +

    //TODO

    +
    +
    + 调用限制 +

    无。

    +
    +
    +
    diff --git a/dita/RTC-NG/API/class_canvas.dita b/dita/RTC-NG/API/class_canvas.dita index bc8740d8556..45ffee473ec 100644 --- a/dita/RTC-NG/API/class_canvas.dita +++ b/dita/RTC-NG/API/class_canvas.dita @@ -3,4 +3,71 @@ <ph keyref="Canvas"/> 该类提供设置播放器视频渲染的方法。 + +
    +

    + public class Canvas { + public Canvas(Rte rte, CanvasInitialConfig config); + public void addView(View view, ViewConfig viewConfig) throws RteException; + public void removeView(View view, ViewConfig viewConfig) throws RteException; + public void getConfigs(CanvasConfig config) throws RteException; + public void setConfigs(CanvasConfig config) throws RteException; +} + + @interface AgoraRteCanvas : NSObject +- (instancetype _Nonnull)initWithRte:(AgoraRte* _Nonnull)rte initialConfig:(AgoraRteCanvasInitialConfig * _Nullable)config; +- (BOOL)getConfigs:(AgoraRteCanvasConfig* _Nonnull)config error:(AgoraRteError* _Nullable)error; +- (BOOL)setConfigs:(AgoraRteCanvasConfig* _Nonnull)config error:(AgoraRteError* _Nullable)error; +- (BOOL)addView:(AgoraRteView * _Nonnull)view config:(AgoraRteViewConfig* _Nullable)config error:(AgoraRteError* _Nullable)error; +- (BOOL)removeView:(AgoraRteView * _Nonnull)view config:(AgoraRteViewConfig* _Nullable)config error:(AgoraRteError* _Nullable)error; +@end + class Canvas { + public: + Canvas(Rte *rte, CanvasInitialConfig *initial_config); + bool GetConfigs(CanvasConfig *config, Error *err); + bool SetConfigs(CanvasConfig *config, Error *err); + bool AddView(View *view, ViewConfig *config, rte::Error *err) + bool RemoveView(View *view, ViewConfig *config, rte::Error *err); + +}; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 方法 + + + + 构造一个 Canvas 对象。详见 + + + + 设置视频的渲染模式。详见 + + + + 获取当前设置的视频渲染模式。详见 + + + + 添加一个视图。详见 + + + + 移除一个视图。详见 + +
    +
    diff --git a/dita/RTC-NG/API/class_canvasconfig.dita b/dita/RTC-NG/API/class_canvasconfig.dita index db39eb9d579..1380e0dd022 100644 --- a/dita/RTC-NG/API/class_canvasconfig.dita +++ b/dita/RTC-NG/API/class_canvasconfig.dita @@ -3,4 +3,69 @@ <ph keyref="CanvasConfig"/> 该类提供设置视频渲染的相关方法。 + +
    +

    + public class CanvasConfig { + public void setVideoRenderMode(Constants.VideoRenderMode mode) throws RteException ; + public Constants.VideoRenderMode getVideoRenderMode() throws RteException ; + public void setVideoMirrorMode(Constants.VideoMirrorMode mode) throws RteException ; + public Constants.VideoMirrorMode getVideoMirrorMode() throws RteException ; +} + + @interface AgoraRteCanvasConfig : NSObject +- (void)setVideoRenderMode:(AgoraRteVideoRenderMode)mode error:(AgoraRteError * _Nullable)error; +- (AgoraRteVideoRenderMode)videoRenderMode:(AgoraRteError * _Nullable)error; +- (void)setVideoMirrorMode:(AgoraRteVideoMirrorMode)mode error:(AgoraRteError* _Nullable)error; +- (AgoraRteVideoMirrorMode)videoMirrorMode:(AgoraRteError * _Nullable)error; +@end + class CanvasConfig { + public: + CanvasConfig() {RteCanvasConfigInit(&c_canvas_config, nullptr);} + void SetRenderMode(VideoRenderMode mode, Error *err = nullptr); + VideoRenderMode GetRenderMode(Error *err = nullptr); + void SetMirrorMode(VideoMirrorMode mode, Error *err = nullptr); + VideoMirrorMode GetMirrorMode(Error *err = nullptr); +}; + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 方法 + + + + 构造一个 CanvasConfig 对象。详见 + + + + 设置视频的渲染模式。详见 + + + + 获取当前设置视频的渲染模式。详见 + + + + 设置视频的镜像模式。详见 + + + + 获取当前设置的视频镜像模式。详见 + +
    +
    diff --git a/dita/RTC-NG/API/class_config.dita b/dita/RTC-NG/API/class_config.dita index 96c0a29194b..2f86160193e 100644 --- a/dita/RTC-NG/API/class_config.dita +++ b/dita/RTC-NG/API/class_config.dita @@ -48,19 +48,19 @@ 方法 - + 设置 App ID。详见 - + 获取设置的 App ID。详见 - + 设置 SDK 的 JSON 配置信息。详见 - + 获取设置 SDK 的 JSON 配置信息。详见
    diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index b54d8e44e56..7b5c7969c68 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -2,5 +2,81 @@ <ph keyref="PlayerConfig"/> - 播放器设置的接口类。 + 该类提供播放器设置的相关方法。 + +
    +

    + public class PlayerConfig { + + public PlayerConfig(); + public void setAutoPlay(boolean autoPlay) throws RteException; + public boolean getAutoPlay() throws RteException; + public void setAbrSubscriptionLayer(Constants.AbrSubscriptionLayer subscriptionLayer) throws RteException; + public Constants.AbrSubscriptionLayer getAbrSubscriptionLayer() throws RteException; + public void setAbrFallbackLayer(Constants.AbrFallbackLayer fallbackLayer) throws RteException; + public Constants.AbrFallbackLayer getAbrFallbackLayer() throws RteException; +} + + @interface AgoraRtePlayerConfig : NSObject +- (void)setAutoPlay:(BOOL)autoPlay error:(AgoraRteError * _Nullable)error; +- (BOOL)autoPlay:(AgoraRteError * _Nullable)error; +- (void)setAbrSubscriptionLayer:(AgoraRteAbrSubscriptionLayer)layer error:(AgoraRteError * _Nullable)error; +- (AgoraRteAbrSubscriptionLayer)abrSubscriptionLayer:(AgoraRteError * _Nullable)error; +- (void)setAbrFallbackLayer:(AgoraRteAbrFallbackLayer)layer error:(AgoraRteError * _Nullable)error; +- (AgoraRteAbrFallbackLayer)abrFallbackLayer:(AgoraRteError * _Nullable)error; +@end + class PlayerConfig { + public: + PlayerConfig();//TODO + void SetAutoPlay(bool auto_play, Error *err = nullptr); + bool GetAutoPlay(Error *err = nullptr); + void SetAbrSubscriptionLayer(AbrSubscriptionLayer abr_subscription_layer, Error *err = nullptr); + AbrSubscriptionLayer GetAbrSubscriptionLayer(Error *err = nullptr); + void SetAbrFallbackLayer(AbrFallbackLayer abr_fallback_layer, Error *err = nullptr); + AbrFallbackLayer GetAbrFallbackLayer(Error *err = nullptr); +}; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +

    +
    + 方法 + + + + 设置是否自动播放。详见 + + + + 获取自动播放设置。详见 + + + + 设置订阅的媒体流的质量层级。详见 + + + + 获取所订阅的视频流的质量层级。详见 + + + + 设置订阅的视频流的回退选项。详见 + + + + 获取设置的视频流回退选项。详见 + +
    +
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index bbdac76f44a..204e6f3ced1 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -22,6 +22,8 @@
  • +
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 1180a72823f..a43021af37f 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -47,8 +47,6 @@ - - @@ -457,6 +455,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 591e44ce929..37c815bb0f1 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1001,6 +1001,13 @@ + + + + CanvasConfig + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index e8262c691db..27bcf10a089 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3329,6 +3329,7 @@ + @@ -3396,5 +3397,21 @@ + + + + + + + + + + + + + + + + From 723b79a3c1378d669ed90484ffd545451c80dd50 Mon Sep 17 00:00:00 2001 From: jinyu Date: Tue, 15 Oct 2024 17:57:04 +0800 Subject: [PATCH 178/354] liveshow --- dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita | 1 + dita/RTC-NG/API/enum_videoapplicationscenariotype.dita | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ 7 files changed, 43 insertions(+) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita index 5142f5585d6..daa5908075f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita @@ -78,6 +78,7 @@

    (2) 适用于视频 1v1 通话场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

    +

    (3) 适用于场景。针对该场景对画质清晰度和首帧出图时间的高要求,SDK 进行了策略调优,重点提升了画质表现和首帧出图体验,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    diff --git a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita index a2092fd8af5..6d3aa5285a9 100644 --- a/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita +++ b/dita/RTC-NG/API/enum_videoapplicationscenariotype.dita @@ -33,6 +33,13 @@

    + + + +

    3: 秀场直播

    +

    + +

    diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index bf4073b8d0e..47598a914a3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -11807,6 +11807,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 1bdc38893e8..fac4aadfa53 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -10912,6 +10912,13 @@ + + + + AgoraApplicationLiveShowScenario + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index dd3da6e473e..f909d3ac6bc 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -10672,6 +10672,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 1b4ef97a989..251e3519f5a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -10357,6 +10357,13 @@ + + + + AgoraApplicationLiveShowScenario + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 5611004f6b7..4ef860372ad 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -90,6 +90,13 @@ + + + + 秀场直播 + + + From 306aaf767eecdd60c3f85a3a574eccc8f923b2c6 Mon Sep 17 00:00:00 2001 From: jinyu Date: Tue, 15 Oct 2024 18:03:38 +0800 Subject: [PATCH 179/354] resolve comments --- dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita index daa5908075f..8928324f7c3 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita @@ -78,7 +78,7 @@

    (2) 适用于视频 1v1 通话场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

    -

    (3) 适用于场景。针对该场景对画质清晰度和首帧出图时间的高要求,SDK 进行了策略调优,重点提升了画质表现和首帧出图体验,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    +

    (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    From d3e640ac8e6d4246515d78348767af8596f84396 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 16 Oct 2024 15:13:13 +0800 Subject: [PATCH 180/354] eglcontext --- ...rtcengine_setexternalremoteeglcontext.dita | 65 +++++++++++++++++++ dita/RTC-NG/API/rtc_api_overview.dita | 4 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 1 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 ++ .../config/keys-rtc-ng-api-java.ditamap | 7 ++ .../config/relations-rtc-ng-api.ditamap | 2 + 7 files changed, 87 insertions(+) create mode 100644 dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita new file mode 100644 index 00000000000..4dce1069d21 --- /dev/null +++ b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -0,0 +1,65 @@ + + + + <ph keyref="setExternalRemoteEglContext"/> + 设置远端视频流渲染的 EGL 环境上下文。 + + + + + + + + +
    +

    + public abstract int setExternalRemoteEglContext(Object eglContext); + + + virtual int setExternalRemoteEglContext(void* eglContext) = 0; + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    通过设置该方法,开发者可以替换 SDK 内部默认的远端 EGL 环境上下文,便于实现统一的 EGL 上下文管理。

    +

    引擎销毁时,SDK 会自动释放 EGL 环境上下文。

    + 该方法仅适用于 Android。 +
    +
    + 适用场景 +

    该方法适用于远端视频流输出为纹理格式,且需要进行后处理的场景,例如:硬件解码、自定义远端视频渲染。

    +
    +
    + 调用时机 +

    该方法需要在加入频道前调用。

    +
    +
    + 调用限制 +

    无。

    +
    +
    + 参数 + + + eglContext + 用于远端视频流渲染的 EGL 环境上下文对象。 + +
    +
    + <ph keyref="return-section-title"/> +

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
    +
    \ No newline at end of file diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 4774af050a7..2432cba24ad 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1313,6 +1313,10 @@ + + + (仅适用于 Android) + diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 5a823f671f4..66a5d3e3884 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -392,6 +392,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index e7f27c551b8..046d9cfa99b 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -399,6 +399,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 47598a914a3..4500cb04a5b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -2611,6 +2611,13 @@
    + + + + setExternalRemoteEglContext + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index f909d3ac6bc..c8ba05b81db 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -2715,6 +2715,13 @@ + + + + setExternalRemoteEglContext + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index d189da546bc..edfc05448dd 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2425,6 +2425,8 @@ + + From ab134d5ba7e252fa18b246b057c6001ddb5e5d12 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 16 Oct 2024 16:28:23 +0800 Subject: [PATCH 181/354] resolve comments --- dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index 4dce1069d21..ec09c09163f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -36,7 +36,7 @@
    适用场景 -

    该方法适用于远端视频流输出为纹理格式,且需要进行后处理的场景,例如:硬件解码、自定义远端视频渲染。

    +

    该方法适用于下行视频后处理,且视频数据为纹理格式的场景,例如:硬件解码、自定义远端视频渲染。

    调用时机 From a483386c74f090d2f0dad1e7f47c3c615d536f2a Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 18 Oct 2024 17:01:24 +0800 Subject: [PATCH 182/354] colorspace --- dita/RTC-NG/API/class_externalvideoframe.dita | 129 +++++++-- dita/RTC-NG/API/class_videoframe.dita | 253 ++++++++++++++---- 2 files changed, 302 insertions(+), 80 deletions(-) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 505c28c9634..53d5a2e5209 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -7,20 +7,32 @@

    public class AgoraVideoFrame { + public static final int FORMAT_NONE = -1; + public static final int FORMAT_TEXTURE_2D = 10; + public static final int FORMAT_TEXTURE_OES = 11; + public static final int FORMAT_I420 = 1; + public static final int FORMAT_BGRA = 2; + public static final int FORMAT_NV21 = 3; + public static final int FORMAT_RGBA = 4; + public static final int FORMAT_I422 = 16; + public static final int BUFFER_TYPE_NONE = -1; + public static final int BUFFER_TYPE_BUFFER = 1; + public static final int BUFFER_TYPE_ARRAY = 2; + public static final int BUFFER_TYPE_TEXTURE = 3; public AgoraVideoFrame() { - format = 10; + format = 10; timeStamp = 0; stride = 0; height = 0; @@ -37,53 +49,78 @@ rotation = 0; alphaStitchMode = 0; } + public int format; + public long timeStamp; + public int stride; + public int height; + public int textureID; + public boolean syncMode; + public float[] transform; + public javax.microedition.khronos.egl.EGLContext eglContext10; - public android.opengl.EGLContext eglContext14; + public android.opengl.EGLContext eglContext14; + public byte[] buf; + public int cropLeft; + public int cropTop; + public int cropRight; + public int cropBottom; + public int rotation; + public int alphaStitchMode; @Override public String toString() { - return "AgoraVideoFrame{" - + "format=" + format + ", timeStamp=" + timeStamp + ", stride=" + stride - + ", height=" + height + ", textureID=" + textureID - + ", buf.length=" + (buf != null ? buf.length : 0) + ", cropLeft=" + cropLeft - + ", cropTop=" + cropTop + ", cropRight=" + cropRight + ", cropBottom=" + cropBottom - + ", rotation=" + rotation + ", alphaStitchMode=" + alphaStitchMode + '}'; + return "AgoraVideoFrame{" + + "format=" + format + ", timeStamp=" + timeStamp + ", stride=" + stride + + ", height=" + height + ", textureID=" + textureID + + ", buf.length=" + (buf != null ? buf.length : 0) + ", cropLeft=" + cropLeft + + ", cropTop=" + cropTop + ", cropRight=" + cropRight + ", cropBottom=" + cropBottom + + ", rotation=" + rotation + ", alphaStitchMode=" + alphaStitchMode + '}'; } + } - __attribute__((visibility("default"))) @interface AgoraVideoFrame : NSObject + +__attribute__((visibility("default"))) @interface AgoraVideoFrame : NSObject @property(assign, nonatomic) NSInteger format; -@property(assign, nonatomic) CMTime time; -@property(assign, nonatomic) int stride DEPRECATED_MSG_ATTRIBUTE("use strideInPixels instead"); -@property(assign, nonatomic) int strideInPixels; -@property(assign, nonatomic) int height; + +@property(assign, nonatomic) CMTime time; +@property(assign, nonatomic) int stride DEPRECATED_MSG_ATTRIBUTE("use strideInPixels instead"); + +@property(assign, nonatomic) int strideInPixels; +@property(assign, nonatomic) int height; @property(assign, nonatomic) CVPixelBufferRef _Nullable textureBuf; + @property(strong, nonatomic) IMAGE_CLASS * _Nullable image; -@property(strong, nonatomic) NSData *_Nullable dataBuf; + +@property(strong, nonatomic) NSData *_Nullable dataBuf; @property(strong, nonatomic) NSData *_Nullable alphaBuf; @property(assign, nonatomic) AgoraAlphaStitchMode alphaStitchMode; -@property(assign, nonatomic) int cropLeft; -@property(assign, nonatomic) int cropTop; -@property(assign, nonatomic) int cropRight; -@property(assign, nonatomic) int cropBottom; -@property(assign, nonatomic) int rotation; + +@property(assign, nonatomic) int cropLeft; +@property(assign, nonatomic) int cropTop; +@property(assign, nonatomic) int cropRight; +@property(assign, nonatomic) int cropBottom; +@property(assign, nonatomic) int rotation; +@property(strong, nonatomic) AgoraColorSpace *_Nullable colorSpace; + - (void)fillAlphaData; @end - struct ExternalVideoFrame { + +struct ExternalVideoFrame { ExternalVideoFrame() : type(VIDEO_BUFFER_RAW_DATA), format(VIDEO_PIXEL_DEFAULT), @@ -99,44 +136,78 @@ eglContext(NULL), eglType(EGL_CONTEXT10), textureId(0), + fenceObject(0), metadataBuffer(NULL), metadataSize(0), alphaBuffer(NULL), fillAlphaBuffer(false), - alphaStitchMode(0), + alphaStitchMode(NO_ALPHA_STITCH), d3d11Texture2d(NULL), textureSliceIndex(0){} + enum EGL_CONTEXT_TYPE { + EGL_CONTEXT10 = 0, + EGL_CONTEXT14 = 1, }; + enum VIDEO_BUFFER_TYPE { + VIDEO_BUFFER_RAW_DATA = 1, + VIDEO_BUFFER_ARRAY = 2, + VIDEO_BUFFER_TEXTURE = 3, }; + VIDEO_BUFFER_TYPE type; + VIDEO_PIXEL_FORMAT format; + void* buffer; + int stride; + int height; + int cropLeft; + int cropTop; + int cropRight; + int cropBottom; + int rotation; + long long timestamp; - void *eglContext; + + void* eglContext; + EGL_CONTEXT_TYPE eglType; + int textureId; + + long long fenceObject; + float matrix[16]; + uint8_t* metadataBuffer; + int metadataSize; + uint8_t* alphaBuffer; + bool fillAlphaBuffer; - int alphaStitchMode; + + ALPHA_STITCH_MODE alphaStitchMode; + void *d3d11Texture2d; + int textureSliceIndex; + + ColorSpace colorSpace; }; export class ExternalVideoFrame { type?: VideoBufferType; @@ -403,8 +474,8 @@ class ExternalVideoFrame { Texture 帧额外的转换。该参数仅适用于 Texture 格式的视频数据。 - eglContext11 - EGLContext11。该参数仅适用于 Texture 格式的视频数据。 + eglContext10 + EGLContext10。该参数仅适用于 Texture 格式的视频数据。 eglContext14 @@ -414,8 +485,8 @@ class ExternalVideoFrame { eglContext 该参数仅适用于 Texture 格式的视频数据。

      -
    • 当使用 Khronos 定义的 OpenGL 接口 (javax.microedition.khronos.egl.*)时,需要将 eglContext 设置给这个字段。
    • -
    • 当使用 Android 定义的 OpenGL 接口 (android.opengl.*)时,需要将 eglContext 设置给这个字段。
    • +
    • 当使用 Khronos 定义的 OpenGL 接口 (javax.microedition.khronos.egl.*) 时,需要将 eglContext 设置给这个字段。
    • +
    • 当使用 Android 定义的 OpenGL 接口 (android.opengl.*) 时,需要将 eglContext 设置给这个字段。
    @@ -506,6 +577,10 @@ class ExternalVideoFrame { time 传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步。 + + + +
    diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 0e2de8f9661..6583607bdf2 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -7,42 +7,61 @@

    public class VideoFrame implements RefCounted { + public interface Buffer extends RefCounted { - @CalledByNative("Buffer") int getWidth(); - @CalledByNative("Buffer") int getHeight(); - @CalledByNative("Buffer") I420Buffer toI420(); - @Override @CalledByNative("Buffer") void release(); - @Override @CalledByNative("Buffer") void retain(); - @CalledByNative("Buffer") + + @CalledByNative("Buffer") int getWidth(); + + @CalledByNative("Buffer") int getHeight(); + + @CalledByNative("Buffer") I420Buffer toI420(); + + @Override @CalledByNative("Buffer") void release(); + + @Override @CalledByNative("Buffer") void retain(); + + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - @CalledByNative("Buffer") + + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); + + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); + + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } + public interface I420Buffer extends Buffer { - @CalledByNative("I420Buffer") ByteBuffer getDataY(); - @CalledByNative("I420Buffer") ByteBuffer getDataU(); - @CalledByNative("I420Buffer") ByteBuffer getDataV(); - @CalledByNative("I420Buffer") int getStrideY(); - @CalledByNative("I420Buffer") int getStrideU(); - @CalledByNative("I420Buffer") int getStrideV(); + + @CalledByNative("I420Buffer") ByteBuffer getDataY(); + + @CalledByNative("I420Buffer") ByteBuffer getDataU(); + + @CalledByNative("I420Buffer") ByteBuffer getDataV(); + @CalledByNative("I420Buffer") int getStrideY(); + @CalledByNative("I420Buffer") int getStrideU(); + @CalledByNative("I420Buffer") int getStrideV(); } + public interface I422Buffer extends Buffer { - @CalledByNative("I422Buffer") ByteBuffer getDataY(); - @CalledByNative("I422Buffer") ByteBuffer getDataU(); - @CalledByNative("I422Buffer") ByteBuffer getDataV(); - @CalledByNative("I422Buffer") int getStrideY(); - @CalledByNative("I422Buffer") int getStrideU(); - @CalledByNative("I422Buffer") int getStrideV(); - } - public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } + @CalledByNative("I422Buffer") ByteBuffer getDataY(); + @CalledByNative("I422Buffer") ByteBuffer getDataU(); + @CalledByNative("I422Buffer") ByteBuffer getDataV(); + @CalledByNative("I422Buffer") int getStrideY(); + @CalledByNative("I422Buffer") int getStrideU(); + @CalledByNative("I422Buffer") int getStrideV(); + } + public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } + public interface TextureBuffer extends Buffer { + enum Type { + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -57,22 +76,26 @@ EGL_CONTEXT_14; } Type getType(); - @CalledByNative("TextureBuffer") int getTextureId(); + + @CalledByNative("TextureBuffer") int getTextureId(); + Matrix getTransformMatrix(); - @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); - @CalledByNative("TextureBuffer") Object getSourceTexturePool(); - @CalledByNative("TextureBuffer") long getNativeEglContext(); - @CalledByNative("TextureBuffer") int getEglContextType(); - @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - @CalledByNative("TextureBuffer") int getSequence(); - @CalledByNative("TextureBuffer") boolean is10BitTexture(); + + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); + @CalledByNative("TextureBuffer") Object getSourceTexturePool(); + @CalledByNative("TextureBuffer") long getNativeEglContext(); + @CalledByNative("TextureBuffer") int getEglContextType(); + @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); + + @CalledByNative("TextureBuffer") int getSequence(); + @CalledByNative("TextureBuffer") long getFenceObject(); + @CalledByNative("TextureBuffer") boolean is10BitTexture(); } public interface ColorSpace { enum Range { Invalid(0), Limited(1), - Full(2), - Derived(3); + Full(2); private final int range; private Range(int range) { this.range = range; @@ -161,32 +184,55 @@ kBackCamera, kUnspecified, } + public enum AlphaStitchMode { + ALPHA_NO_STITCH(0), + ALPHA_STITCH_UP(1), + ALPHA_STITCH_BELOW(2), + ALPHA_STITCH_LEFT(3), + ALPHA_STITCH_RIGHT(4); + private final int stitchMode; + private AlphaStitchMode(int stitchMode) { + this.stitchMode = stitchMode; + } + public int value() { + return stitchMode; + } + } + private Buffer buffer; + private int rotation; + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; + + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); + private @Nullable ByteBuffer alphaBuffer; - private int alphaStitchMode; + private long nativeAlphaBuffer; + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { - this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); + this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, + SourceType.kUnspecified.ordinal()); } @CalledByNative public VideoFrame(Buffer buffer, int rotation, long timestampNs, ColorSpace colorSpace, - ByteBuffer alphaBuffer, float sampleAspectRatio, int sourceType) { + ByteBuffer alphaBuffer, long nativeAlphaBuffer, float sampleAspectRatio, int sourceType) { if (buffer == null) { - throw new IllegalArgumentException("buffer not allowed to be null"); + throw new IllegalArgumentException("buffer not allowed to be null"); } if (rotation % 90 != 0) { - throw new IllegalArgumentException("rotation must be a multiple of 90"); + throw new IllegalArgumentException("rotation must be a multiple of 90"); } this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; this.colorSpace = colorSpace; this.alphaBuffer = alphaBuffer; + this.nativeAlphaBuffer = nativeAlphaBuffer; this.sampleAspectRatio = sampleAspectRatio; this.sourceType = SourceType.values()[sourceType]; } @@ -197,18 +243,25 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } + @CalledByNative public Buffer getBuffer() { return buffer; } + @CalledByNative public int getRotation() { return rotation; } @CalledByNative public int getAlphaStitchMode() { - return alphaStitchMode; + return alphaStitchMode.value(); } + @CalledByNative + public void setAlphaStitchMode(int stitchMode) { + alphaStitchMode = AlphaStitchMode.values()[stitchMode]; + } + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -217,41 +270,93 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } + public int getRotatedWidth() { if (rotation % 180 == 0) { - return buffer.getWidth(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_RIGHT) + ? buffer.getWidth() / 2 + : buffer.getWidth(); } - return buffer.getHeight(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_BELOW) + ? buffer.getHeight() / 2 + : buffer.getHeight(); } + public int getRotatedHeight() { if (rotation % 180 == 0) { - return buffer.getHeight(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_BELOW) + ? buffer.getHeight() / 2 + : buffer.getHeight(); } - return buffer.getWidth(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_RIGHT) + ? buffer.getWidth() / 2 + : buffer.getWidth(); } + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; } + @CalledByNative public ColorSpace getColorSpace() { return colorSpace; } + public void setColorSpace(ColorSpace colorSpace) { + this.colorSpace = colorSpace; + } + @CalledByNative + private int getColorSpaceRange() { + if (colorSpace == null) { + return ColorSpace.Range.Invalid.getRange(); + } + return colorSpace.getRange().getRange(); + } + @CalledByNative + private int getColorSpaceMatrix() { + if (colorSpace == null) { + return ColorSpace.Matrix.Unspecified.getMatrix(); + } + return colorSpace.getMatrix().getMatrix(); + } + @CalledByNative + private int getColorSpaceTransfer() { + if (colorSpace == null) { + return ColorSpace.Transfer.Unspecified.getTransfer(); + } + return colorSpace.getTransfer().getTransfer(); + } + @CalledByNative + private int getColorSpacePrimary() { + if (colorSpace == null) { + return ColorSpace.Primary.Unspecified.getPrimary(); + } + return colorSpace.getPrimary().getPrimary(); + } @CalledByNative public ByteBuffer getAlphaBuffer() { return alphaBuffer; } + public void retainAlphaBuffer() { + JniCommon.nativeAddRef(nativeAlphaBuffer); + } + public void releaseAlphaBuffer() { + JniCommon.nativeReleaseRef(nativeAlphaBuffer); + } public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - public void setAlphaStitchMode(int mode) { - this.alphaStitchMode = mode; - } + @Override public void retain() { buffer.retain(); } + @Override @CalledByNative public void release() { @@ -278,7 +383,8 @@ this.format = format; } } - __attribute__((visibility("default"))) @interface AgoraOutputVideoFrame : NSObject + __attribute__((visibility("default"))) @interface AgoraOutputVideoFrame : NSObject + @property (nonatomic, assign) NSInteger type; @property (nonatomic, assign) int width; @property (nonatomic, assign) int height; @@ -291,12 +397,16 @@ @property (nonatomic, assign) int rotation; @property (nonatomic, assign) int64_t renderTimeMs; @property (nonatomic, assign) int avSyncType; + @property(assign, nonatomic) CVPixelBufferRef _Nullable pixelBuffer; @property (nonatomic, assign) uint8_t* _Nullable alphaBuffer; @property (nonatomic, assign) AgoraAlphaStitchMode alphaStitchMode; + @property(nonatomic, strong) NSDictionary *_Nonnull metaInfo; +@property(nonatomic, strong) AgoraColorSpace* _Nullable colorSpace; @end - struct VideoFrame { + +struct VideoFrame { VideoFrame(): type(VIDEO_PIXEL_DEFAULT), width(0), @@ -316,33 +426,57 @@ textureId(0), d3d11Texture2d(NULL), alphaBuffer(NULL), - alphaStitchMode(0), + alphaStitchMode(NO_ALPHA_STITCH), pixelBuffer(NULL), metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } + VIDEO_PIXEL_FORMAT type; + int width; + int height; + int yStride; + int uStride; + int vStride; + uint8_t* yBuffer; + uint8_t* uBuffer; + uint8_t* vBuffer; + int rotation; + int64_t renderTimeMs; + int avsync_type; + uint8_t* metadata_buffer; + int metadata_size; + void* sharedContext; + int textureId; + void* d3d11Texture2d; + float matrix[16]; + uint8_t* alphaBuffer; - int alphaStitchMode; + + ALPHA_STITCH_MODE alphaStitchMode; + void* pixelBuffer; + IVideoFrameMetaInfo* metaInfo; + + ColorSpace colorSpace; }; USTRUCT(BlueprintType) struct FVideoFrame { @@ -608,6 +742,19 @@ class VideoFrame {

    缓冲区给出的是指向指针的指针,该接口不能修改缓冲区的指针,只能修改缓冲区的内容。

    +
    + 方法 + + + getColorSpace + 获取视频帧的色彩空间属性。 + + + setColorSpace + 设置视频帧的色彩空间属性。 + + +
    <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> @@ -727,9 +874,9 @@ class VideoFrame { pixelBuffer 将数据填充到 CVPixelBuffer。 - - colorSpace - 表示视频帧的色彩空间。详见 + + colorSpace + 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自采集、自渲染的业务需求进行自定义设置,详见 sourceType From 0452b39abfb33367dc10aa3c4368f3a61d6f8a4b Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 18 Oct 2024 17:03:17 +0800 Subject: [PATCH 183/354] encoding -> capturing --- dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita | 2 +- dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita b/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita index c49d159269e..f9fdf8f143e 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscameraexposuresupported.dita @@ -36,7 +36,7 @@
    • 该方法仅适用于 Android 和 iOS。
    • -
    • 该方法必须在 SDK 触发 回调,返回本地视频状态为 (2) 之后调用。
    • +
    • 该方法必须在 SDK 触发 回调,返回本地视频状态为 (1) 之后调用。
    • 建议你在调用 调节曝光系数前,先调用该方法查询当前摄像头是否支持曝光调节。
    • 当你调用该方法时,查询的是当前正在使用的摄像头是否支持曝光调节,即调用 时指定的摄像头。
    diff --git a/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita b/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita index 68e714401b7..e4625c76f02 100644 --- a/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita +++ b/dita/RTC-NG/API/api_irtcengine_iscamerazoomsupported.dita @@ -30,7 +30,7 @@
    调用时机 -

    该方法必须在 SDK 触发 回调,返回本地视频状态为 (2) 之后调用。

    +

    该方法必须在 SDK 触发 回调,返回本地视频状态为 (1) 之后调用。

    调用限制 From ad7bbc2e06ded6ed0f52df5c0be5a23e7b0b25f1 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 21 Oct 2024 11:54:09 +0800 Subject: [PATCH 184/354] resolve comments --- dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap | 7 ------- dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap | 7 ------- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 38c5a447f70..6cb00aa1ebc 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -125,13 +125,6 @@ - - - - VideoColorSpace - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap index 7306c00e8b4..c9366a30a9f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-harmony.ditamap @@ -104,13 +104,6 @@ - - - - VideoColorSpace - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 4ef860372ad..dd5a74c036e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -98,6 +98,13 @@ + + + + VideoColorSpace + + + From 8cf53af0a0b1a0b3f4d507eabe83cdfe3e5f3073 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 21 Oct 2024 15:13:48 +0800 Subject: [PATCH 185/354] audiotrack --- dita/RTC-NG/API/class_audiotrackconfig.dita | 36 +++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/class_audiotrackconfig.dita b/dita/RTC-NG/API/class_audiotrackconfig.dita index 95e46f8b937..abf31b9133c 100644 --- a/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -7,27 +7,35 @@

    public class AudioTrackConfig { + public boolean enableLocalPlayback; - - + + public boolean enableAudioProcessing; public AudioTrackConfig() { this.enableLocalPlayback = true; + this.enableAudioProcessing = false; + } + @Override + public String toString() { + return "AudioTrackConfig{" + + "enableLocalPlayback=" + enableLocalPlayback + "enableAudioProcessing" + + enableAudioProcessing + '}'; } - } +} export class AudioTrackConfig { public enableLocalPlayback: boolean = true; } - NS_SWIFT_NAME(AgoraAudioTrackConfig) __attribute__((visibility("default"))) @interface AgoraAudioTrackConfig : NSObject + NS_SWIFT_NAME(AgoraAudioTrackConfig) __attribute__((visibility("default"))) @interface AgoraAudioTrackConfig : NSObject @property (assign, nonatomic) BOOL enableLocalPlayback NS_SWIFT_NAME(enableLocalPlayback); - +@property (assign, nonatomic) BOOL enableAudioProcessing NS_SWIFT_NAME(enableAudioProcessing); @end struct AudioTrackConfig { + bool enableLocalPlayback; - - - AudioTrackConfig() - : enableLocalPlayback(true) {} + + bool enableAudioProcessing; + AudioTrackConfig() : enableLocalPlayback(true),enableAudioProcessing(false) {} }; USTRUCT(BlueprintType) struct FAudioTrackConfig @@ -84,6 +92,16 @@ class AudioTrackConfig { + + enableAudioProcessing + 是否启用音频处理模块: +

      +
    • :启用音频处理模块,应用回声消除 (AEC)、降噪 (ANS) 和自动增益控制 (AGC)。
    • +
    • :(默认)不启用音频处理模块。
    • +
    + 该参数设置仅对 类型的自定义音频采集轨道生效。 + +
    \ No newline at end of file From 5450d788b408b57c9166d8dbc6667f6176e14b5c Mon Sep 17 00:00:00 2001 From: jinyu Date: Tue, 22 Oct 2024 11:15:27 +0800 Subject: [PATCH 186/354] minor fix --- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 2432cba24ad..439aa1d3aee 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1315,7 +1315,7 @@ - (仅适用于 Android) + (仅适用于 Android) From 92e8efbb3cfd473f56431685e2dcb43d89b29519 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 28 Oct 2024 11:43:17 +0800 Subject: [PATCH 187/354] resolve comments --- dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index ec09c09163f..5a01a581576 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -36,7 +36,7 @@
    适用场景 -

    该方法适用于下行视频后处理,且视频数据为纹理格式的场景,例如:硬件解码、自定义远端视频渲染。

    +

    该方法适用于使用 Texture 格式的视频数据进行远端视频自渲染的场景。

    调用时机 From e1a1cfdae368554eaf9ecf5fbad80c595972ffd5 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 28 Oct 2024 15:31:19 +0800 Subject: [PATCH 188/354] =?UTF-8?q?=E5=90=88=E5=9B=BE=20&=20=E5=8F=8C?= =?UTF-8?q?=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dita/RTC-NG/RTC_NG_API_Android.ditamap | 42 +++++++++++------------- dita/RTC-NG/RTC_NG_API_Blueprint.ditamap | 36 +++++++++----------- dita/RTC-NG/RTC_NG_API_Flutter.ditamap | 36 +++++++++----------- dita/RTC-NG/RTC_NG_API_Unreal.ditamap | 36 +++++++++----------- 4 files changed, 67 insertions(+), 83 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 66a5d3e3884..5d2ad3088ac 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -91,6 +91,10 @@ + + + + @@ -103,6 +107,15 @@ + + + + + + + + + @@ -297,6 +310,12 @@ + + + + + + @@ -326,29 +345,6 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap index ee09bb5749b..b17e8eae2d6 100644 --- a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -97,6 +97,10 @@ + + + + @@ -109,6 +113,12 @@ + + + + + + @@ -317,6 +327,12 @@ + + + + + + @@ -346,26 +362,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap index 45aa0e30ca7..78a07c2fbcc 100644 --- a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap @@ -97,6 +97,10 @@ + + + + @@ -109,6 +113,12 @@ + + + + + + @@ -305,6 +315,12 @@ + + + + + + @@ -334,26 +350,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap index af24969b303..4c2072f2e07 100644 --- a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap @@ -93,6 +93,10 @@ + + + + @@ -105,6 +109,12 @@ + + + + + + @@ -313,6 +323,12 @@ + + + + + + @@ -342,26 +358,6 @@ - - - - - - - - - - - - - - - - - - - - From 4a64c30b3dc21bfe1eb426ae40538b02a6b427f3 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 28 Oct 2024 15:44:19 +0800 Subject: [PATCH 189/354] =?UTF-8?q?=E5=AA=92=E4=BD=93=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=99=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dita/RTC-NG/RTC_NG_API_Android.ditamap | 28 ++++++++++++------------ dita/RTC-NG/RTC_NG_API_Blueprint.ditamap | 28 ++++++++++++------------ dita/RTC-NG/RTC_NG_API_Flutter.ditamap | 28 ++++++++++++------------ dita/RTC-NG/RTC_NG_API_Unreal.ditamap | 28 ++++++++++++------------ 4 files changed, 56 insertions(+), 56 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 5d2ad3088ac..90062c23bb9 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -510,20 +510,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap index b17e8eae2d6..9885a2e2e6d 100644 --- a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -527,20 +527,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap index 78a07c2fbcc..6a7db2377bf 100644 --- a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap @@ -502,20 +502,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap index 4c2072f2e07..2f4cb93f10e 100644 --- a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap @@ -521,20 +521,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + From 11f4fb75f30e681c0f62554612c133d63e262ce3 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 28 Oct 2024 16:38:08 +0800 Subject: [PATCH 190/354] check --- dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita | 2 +- dita/RTC-NG/API/class_audiotrackconfig.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita index 8928324f7c3..d929855a308 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita @@ -77,7 +77,7 @@

    -

    (2) 适用于视频 1v1 通话场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

    +

    (2) 适用于场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

    (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    diff --git a/dita/RTC-NG/API/class_audiotrackconfig.dita b/dita/RTC-NG/API/class_audiotrackconfig.dita index abf31b9133c..7c425f5025d 100644 --- a/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -96,7 +96,7 @@ class AudioTrackConfig { enableAudioProcessing 是否启用音频处理模块:
      -
    • :启用音频处理模块,应用回声消除 (AEC)、降噪 (ANS) 和自动增益控制 (AGC)。
    • +
    • :启用音频处理模块,应用回声消除 (AEC)、降噪 (ANS) 和自动增益控制 (AGC) 效果。
    • :(默认)不启用音频处理模块。
    该参数设置仅对 类型的自定义音频采集轨道生效。 diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index dd5a74c036e..5af8acfb662 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -90,6 +90,13 @@ + + + + 视频 1v1 通话 + + + From 9ae1a381408df337628227795e0bbf3790bcafa8 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 28 Oct 2024 17:36:33 +0800 Subject: [PATCH 191/354] 1 --- dita/RTC-NG/API/rtc_api_data_type.dita | 2 + dita/RTC-NG/RTC_NG_API_Android.ditamap | 8 ++ .../config/keys-rtc-ng-api-java.ditamap | 128 ++++++++++++++++++ 3 files changed, 138 insertions(+) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index d52c798d28e..a9e804ce1bb 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -206,6 +206,7 @@
  • +
  • @@ -216,6 +217,7 @@
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 90062c23bb9..3bf9d6636ff 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -208,6 +208,11 @@ + + + + + @@ -291,6 +296,7 @@ + @@ -349,9 +355,11 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index c8ba05b81db..ebc1f750a67 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1057,6 +1057,20 @@ setRemoteRenderMode
    +
    + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + @@ -1556,6 +1570,13 @@ + + + + setExternalMediaProjection + + + @@ -2507,6 +2528,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4831,6 +4875,69 @@ + + + + AudioSourceType + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -5097,6 +5204,13 @@ + + + + LocalAudioMixerConfiguration + + + @@ -5160,6 +5274,13 @@ + + + + MixedAudioStream + + + @@ -6023,6 +6144,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + From 47c6f767479eec94760ac9488ec96468d3520686 Mon Sep 17 00:00:00 2001 From: jinyu Date: Tue, 29 Oct 2024 10:38:52 +0800 Subject: [PATCH 192/354] fix --- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 439aa1d3aee..eed098a3334 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1315,7 +1315,7 @@ - (仅适用于 Android) + (仅适用于 Android) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index ebc1f750a67..7354e4a2325 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1057,7 +1057,7 @@ setRemoteRenderMode - diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 5af8acfb662..71fa82634d0 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -104,14 +104,14 @@ + + + + VideoColorSpace + + + - - - - VideoColorSpace - - - From 57e191dc0ccde36c82b6d33ca40af3fc30edd974 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 29 Oct 2024 15:16:32 +0800 Subject: [PATCH 193/354] update takesnapshot --- dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita | 1 - 1 file changed, 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index d73884c57f8..8d46d125c6f 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -37,7 +37,6 @@
  • 该方法是异步操作,调用返回时 SDK 并没有真正获取截图。
  • 调用该方法返回时 SDK 并没有真正获取截图。
  • 该方法用于本地视频截图时,是对 中指定发布的视频流进行截图。
  • -
  • 如果用户的视频经过前处理,例如,添加了水印或美颜,生成的截图会包含前处理效果。
  • diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita index ab1bb9dd3a7..5b8a434f3ef 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions2.dita @@ -13,8 +13,7 @@

    - public abstract FaceShapeAreaOptions getFaceShapeAreaOptions( - int shapeArea, Constants.MediaSourceType sourceType); + public abstract FaceShapeAreaOptions getFaceShapeAreaOptions(int shapeArea); - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area NS_SWIFT_NAME(getFaceShapeAreaOptions(_:)); @@ -47,9 +46,13 @@

    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
      +
    • 方法调用成功,返回 对象。
    • +
    • 方法调用失败,返回
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 6041201be1d..c1d40f4f2a2 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -61,9 +61,13 @@
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
      +
    • 方法调用成功,返回 对象。
    • +
    • 方法调用失败,返回
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita index 6e11668be4f..d39f25d4d31 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions2.dita @@ -44,9 +44,13 @@
    <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    -
      -
    • 0: 方法调用成功。
    • -
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • -
    +
      +
    • 0: 方法调用成功。
    • +
    • < 0: 方法调用失败。详见了解详情和解决建议。
    • +
    +
      +
    • 方法调用成功,返回 对象。
    • +
    • 方法调用失败,返回
    • +
    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index b1fcac99540..ce79afa1326 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -2,7 +2,7 @@ <ph keyref="setFaceShapeAreaOptions" /> - 设置美型部位选项。 + 设置美型部位选项并指定媒体源。 @@ -31,13 +31,13 @@
    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    +

    如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    该方法和 均可用于设置美型部位选项,区别在于该方法支持指定应用美型效果的媒体源。

    调用时机 -

    请在调用 之后调用该方法。

    +

    请在 之后调用该方法。

    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita index 69d61310399..ec77b500e40 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita @@ -13,8 +13,7 @@

    - public abstract int setFaceShapeAreaOptions( - FaceShapeAreaOptions options, Constants.MediaSourceType sourceType); + public abstract int setFaceShapeAreaOptions(FaceShapeAreaOptions options); - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; @@ -31,7 +30,7 @@

    v4.5.0
    -

    如果预设的美型效果不能满足你的需求,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    +

    如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

    diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index f32401d96db..b1a48a8e85c 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -2,7 +2,7 @@ <ph keyref="setFaceShapeBeautyOptions" /> - 设置美型效果选项。 + 设置美型效果选项并指定媒体源。 @@ -31,9 +31,9 @@
    v4.5.0
    -

    调用该方法可对人脸各部位进行修饰,你可以自定义整体的修饰力度和风格喜好,使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,详见

    +

    调用该方法可对人脸各部位进行修饰,使用预设的参数一次性实现瘦脸、大眼、瘦鼻等微整形效果,支持微调整体的修饰力度,详见

    该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

    - 不同于 实现的美白、磨皮等基础美颜效果,美型属于高级美颜效果,调用该方法将产生费用,计费方式详见 + 美型属于增值服务,计费方式详见
    调用时机 @@ -42,7 +42,7 @@
    调用限制
      -
    • 该方法仅适用于 Android 4.4 及以上版本。
    • +
    • 该方法仅适用于 Android 4.4 及以上版本。
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
    @@ -53,7 +53,7 @@ enabled enable - 是否开启美型功能: + 是否开启美型效果:
    • : 开启美型功能。
    • @@ -62,7 +62,7 @@ options - 美型效果选项,详细定义见 + 美型风格选项,详见 diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 0ba3e6f1738..c624cf9ef76 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -51,7 +51,7 @@ enabled enable - 是否开启滤镜功能: + 是否开启滤镜效果:
      • : 开启滤镜功能。
      • @@ -60,7 +60,7 @@ options - 滤镜选项,详细定义见 + 滤镜选项,详见 type @@ -68,7 +68,7 @@ 效果应用的媒体源类型。详见 在该方法中,该参数仅支持以下两种设置:
          -
        • 默认值为
        • +
        • (默认)
        • 如果要使用自定义采集的视频,将该参数设置为
        diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index ae2a22c1853..cdf3fbbd5d2 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -72,9 +72,9 @@ options 暗光增强选项,用于设置暗光增强的效果。详见 。根据你在 options 中的设置,需要进行以下操作:
          -
        • levelmode 时:需要先调用 中的 level 设为 mode 设为
        • -
        • levelmode 时:需要先调用 中的 level 设为 mode 设为
        • -
        • 除以上两种情况外的情况:无需调用
        • +
        • levelmode 均为默认设置时:需要先调用 启用视频降噪,其中 采用默认设置。
        • +
        • level 为默认值,mode 时:需要先调用 启用视频降噪,并将 中的 level 设为默认值,mode 设为
        • +
        • 除以上两种情况外的情况:无需调用
        diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index f0b5011b622..ceb120c42c0 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -40,6 +40,14 @@

    你可以调用该方法开启视频降噪功能并设置视频降噪的效果。

    + 如果该方法实现的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下: +
      +
    • lighteningContrastLevel
    • +
    • lighteningLevel:0.0
    • +
    • smoothnessLevel:0.5
    • +
    • rednessLevel:0.0
    • +
    • sharpnessLevel:0.1
    • +
    适用场景 @@ -71,14 +79,7 @@ options - 视频降噪选项,用于设置视频降噪的效果。详见 。如果选项中提供的降噪强度无法满足你的需求,声网推荐你调用 方法启用美颜磨皮功能,以获得更好的视频降噪效果。强效降噪效果的 推荐设置如下: -
      -
    • lighteningContrastLevel
    • -
    • lighteningLevel:0.0
    • -
    • smoothnessLevel:0.5
    • -
    • rednessLevel:0.0
    • -
    • sharpnessLevel:0.1
    • -
    + 视频降噪选项,用于设置视频降噪的效果。详见
    diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita index 5c3658743c5..5679567d32d 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita @@ -28,6 +28,7 @@

    你可以调用该方法开启视频降噪功能并设置视频降噪的效果。

    该方法和 均可用于设置视频降噪功能,区别在于该方法支持在设置视频降噪功能时指定应用视频降噪功能的媒体源。

    +
    diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita index d63c70f6c8b..71a32039064 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot.dita @@ -2,7 +2,7 @@ <ph keyref="takeSnapshot" /> - 获取视频截图。 + 对视频截图。 diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index 8d46d125c6f..e03d688bb42 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -2,7 +2,7 @@ <ph keyref="takeSnapshot2" /> - 获取指定观测位置的视频截图。 + 在指定观测位置进行视频截图。 diff --git a/dita/RTC-NG/API/class_faceshapeareaoptions.dita b/dita/RTC-NG/API/class_faceshapeareaoptions.dita index 75bfc791642..08daedaeacf 100644 --- a/dita/RTC-NG/API/class_faceshapeareaoptions.dita +++ b/dita/RTC-NG/API/class_faceshapeareaoptions.dita @@ -90,7 +90,7 @@ shapeIntensity - 修饰力度。各部位的修饰力度定义(包括修饰的方向、范围、预设值等)有所不同,详见 shapeArea 中的描述详见 + 修饰力度。各部位的修饰力度定义(包括修饰的方向、范围、预设值等)有所不同,详见 shapeArea 中的描述。详见
    diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita index 7dd447ee7ed..83a49163ecf 100644 --- a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -2,7 +2,7 @@ <ph keyref="FaceShapeBeautyOptions" /> - 美型效果选项。 + 美型风格选项。

    @@ -48,7 +48,7 @@

    美型风格,详见

    美型风格:

      -
    • (0):女性风格。
    • +
    • (0):(默认)女性风格。
    • (1):男性风格。

    @@ -56,7 +56,7 @@ styleIntensity - 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0 表示无美型效果。取值越大,美型效果越强,脸部各部位修饰的痕迹越明显。 + 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0,表示无美型效果。取值越大,美型效果越强,脸部各部位修饰的痕迹越明显。
    diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index 60d78017dc8..83e3c8ec375 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -36,7 +36,7 @@ path -

    3D 立方体贴图文件的本地绝对路径,该文件用于实现自定义滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果将被关闭。以下为 .cube 文件的示例: +

    3D 立方体贴图文件的本地绝对路径,该文件用于实现自定义滤镜效果。引用的 .cube 文件必须严格遵循立方体查找表(Cube LUT)规范,否则滤镜效果无法生效。以下为 .cube 文件的示例: LUT_3D_SIZE 32 0.0039215689 0 0.0039215682 diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 22b51fdafb7..54e4e00b952 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -241,47 +241,47 @@ struct FMediaRecorderConfiguration width - 录制视频的宽度 (px),宽 × 高的最大值不超过 3840 × 2160。 - 该参数仅在 时需要传入。 + 录制视频的宽度 (px),宽 × 高的最大值不应超过 3840 × 2160。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。 height 录制视频的高度 (px),宽 × 高的最大值不超过 3840 × 2160。 - 该参数仅在 时需要传入。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。 fps 录制视频的帧率,最高值不超过 30,如: 5、10、15、24、30 等。 - 该参数仅在 时需要传入。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。 sample_rate 录制音频的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 - 该参数仅在 时需要传入。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。 channel_num - 录制音频的声道数: + 录制音频的声道数:

    • 1: 单声道
    • 2: 双声道
    - 该参数仅在 时需要传入。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。
    videoSourceType - 录制视频的源类型,详见 。 - 该参数仅在 时需要传入。 + 录制视频源的类型。详见 。 + 该参数仅在 时需要传入。 该参数仅在 recorderStreamType 为 0 时需要传入。 diff --git a/dita/RTC-NG/API/class_recorderstreaminfo.dita b/dita/RTC-NG/API/class_recorderstreaminfo.dita index d98b71c4503..5438c358061 100644 --- a/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -105,10 +105,10 @@ class RecorderStreamInfo { recorderStreamType - 需要录制的视频流类型,可传入以下值: + 需要录制的视频流类型:
      -
    • 0: 频道内的 RTC 视频流。
    • -
    • 1: 频道外本地预览的视频流。
    • +
    • 0: 频道内的视频流。
    • +
    • 1: 加入频道前,在本地预览的视频流。
    diff --git a/dita/RTC-NG/API/enum_recorderstreamtype.dita b/dita/RTC-NG/API/enum_recorderstreamtype.dita index 5480c72e0d0..b8ab625b22b 100644 --- a/dita/RTC-NG/API/enum_recorderstreamtype.dita +++ b/dita/RTC-NG/API/enum_recorderstreamtype.dita @@ -9,11 +9,11 @@ - 频道内的 RTC 视频流。 + 0: (默认)频道内的视频流。 - 频道外本地预览的视频流。 + 1: 加入频道前,在本地预览的视频流。
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 18b8348b61e..ab4d6364c08 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1315,8 +1315,6 @@
  • -
  • -
  • diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index cf87244d98d..43e45d63bf6 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1032,6 +1032,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 617a29012fe..56aaca9c8ab 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -120,10 +120,10 @@ - + - 增值服务费用 + 计费策略 From 01e8bf5aa4f844a03a4a6ee65688764a6516c27b Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 30 Oct 2024 16:05:35 +0800 Subject: [PATCH 198/354] resolve comments --- dita/RTC-NG/API/class_externalvideoframe.dita | 56 ------------------- dita/RTC-NG/API/class_videoframe.dita | 2 +- 2 files changed, 1 insertion(+), 57 deletions(-) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 4d84556d96d..b2de1d3b9ae 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -7,29 +7,17 @@

    public class AgoraVideoFrame { - public static final int FORMAT_NONE = -1; - public static final int FORMAT_TEXTURE_2D = 10; - public static final int FORMAT_TEXTURE_OES = 11; - public static final int FORMAT_I420 = 1; - public static final int FORMAT_BGRA = 2; - public static final int FORMAT_NV21 = 3; - public static final int FORMAT_RGBA = 4; - public static final int FORMAT_I422 = 16; - public static final int BUFFER_TYPE_NONE = -1; - public static final int BUFFER_TYPE_BUFFER = 1; - public static final int BUFFER_TYPE_ARRAY = 2; - public static final int BUFFER_TYPE_TEXTURE = 3; public AgoraVideoFrame() { format = 10; @@ -51,35 +39,20 @@ } public int format; - public long timeStamp; - public int stride; - public int height; - public int textureID; - public boolean syncMode; - public float[] transform; - public javax.microedition.khronos.egl.EGLContext eglContext10; - public android.opengl.EGLContext eglContext14; - public byte[] buf; - public int cropLeft; - public int cropTop; - public int cropRight; - public int cropBottom; - public int rotation; - public int alphaStitchMode; @Override public String toString() { @@ -90,7 +63,6 @@ + ", cropTop=" + cropTop + ", cropRight=" + cropRight + ", cropBottom=" + cropBottom + ", rotation=" + rotation + ", alphaStitchMode=" + alphaStitchMode + '}'; } - } @@ -146,67 +118,39 @@ struct ExternalVideoFrame { textureSliceIndex(0){} enum EGL_CONTEXT_TYPE { - EGL_CONTEXT10 = 0, - EGL_CONTEXT14 = 1, }; enum VIDEO_BUFFER_TYPE { - VIDEO_BUFFER_RAW_DATA = 1, - VIDEO_BUFFER_ARRAY = 2, - VIDEO_BUFFER_TEXTURE = 3, }; VIDEO_BUFFER_TYPE type; - VIDEO_PIXEL_FORMAT format; - void* buffer; - int stride; - int height; - int cropLeft; - int cropTop; - int cropRight; - int cropBottom; - int rotation; - long long timestamp; - void* eglContext; - EGL_CONTEXT_TYPE eglType; - int textureId; - long long fenceObject; - float matrix[16]; - uint8_t* metadataBuffer; - int metadataSize; - uint8_t* alphaBuffer; - bool fillAlphaBuffer; - ALPHA_STITCH_MODE alphaStitchMode; - void *d3d11Texture2d; - int textureSliceIndex; - ColorSpace colorSpace; }; export class ExternalVideoFrame { diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 6583607bdf2..d2aca9e6441 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -876,7 +876,7 @@ class VideoFrame { colorSpace - 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自采集、自渲染的业务需求进行自定义设置,详见 + 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自定义采集、自定义渲染的业务需求进行自定义设置,详见 sourceType From 52d7c551dac51a58694aff1429c5beeb009a3a1a Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 30 Oct 2024 16:54:16 +0800 Subject: [PATCH 199/354] 1 --- dita/RTC-NG/API/rtc_api_data_type.dita | 1 + dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index a9e804ce1bb..6fe27c9c5d9 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1278,6 +1278,7 @@

    • +
    • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 7354e4a2325..03c6f2e7eeb 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -5822,38 +5822,45 @@ + + + + AlphaStitchMode + + + - VIDEO_NO_ALPHA_STITCH + ALPHA_NO_STITCH - VIDEO_ALPHA_STITCH_UP + ALPHA_STITCH_UP - VIDEO_ALPHA_STITCH_BELOW + ALPHA_STITCH_BELOW - VIDEO_ALPHA_STITCH_LEFT + ALPHA_STITCH_LEFT - VIDEO_ALPHA_STITCH_RIGHT + ALPHA_STITCH_RIGHT From d471cca113854bb4179701331f236d5f70646387 Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Wed, 30 Oct 2024 08:55:34 +0000 Subject: [PATCH 200/354] Sync cn prototype to en prototype --- .../RTC-NG/API/class_audiotrackconfig.dita | 26 +- .../RTC-NG/API/class_externalvideoframe.dita | 61 +++-- en-US/dita/RTC-NG/API/class_videoframe.dita | 234 ++++++++++++++---- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 14 ++ .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 + .../config/keys-rtc-ng-api-java.ditamap | 159 +++++++++++- .../config/keys-rtc-ng-api-macos.ditamap | 7 + 7 files changed, 421 insertions(+), 87 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita b/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita index 165bd8139fd..b7591ff0e36 100644 --- a/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -7,27 +7,35 @@

      public class AudioTrackConfig { + public boolean enableLocalPlayback; - - + + public boolean enableAudioProcessing; public AudioTrackConfig() { this.enableLocalPlayback = true; + this.enableAudioProcessing = false; + } + @Override + public String toString() { + return "AudioTrackConfig{" + + "enableLocalPlayback=" + enableLocalPlayback + "enableAudioProcessing" + + enableAudioProcessing + '}'; } - } +} export class AudioTrackConfig { public enableLocalPlayback: boolean = true; } - NS_SWIFT_NAME(AgoraAudioTrackConfig) __attribute__((visibility("default"))) @interface AgoraAudioTrackConfig : NSObject + NS_SWIFT_NAME(AgoraAudioTrackConfig) __attribute__((visibility("default"))) @interface AgoraAudioTrackConfig : NSObject @property (assign, nonatomic) BOOL enableLocalPlayback NS_SWIFT_NAME(enableLocalPlayback); - +@property (assign, nonatomic) BOOL enableAudioProcessing NS_SWIFT_NAME(enableAudioProcessing); @end struct AudioTrackConfig { + bool enableLocalPlayback; - - - AudioTrackConfig() - : enableLocalPlayback(true) {} + + bool enableAudioProcessing; + AudioTrackConfig() : enableLocalPlayback(true),enableAudioProcessing(false) {} }; USTRUCT(BlueprintType) struct FAudioTrackConfig diff --git a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita index cede51769e3..541d031a3a5 100644 --- a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita @@ -20,7 +20,7 @@ public static final int BUFFER_TYPE_ARRAY = 2; public static final int BUFFER_TYPE_TEXTURE = 3; public AgoraVideoFrame() { - format = 10; + format = 10; timeStamp = 0; stride = 0; height = 0; @@ -37,6 +37,7 @@ rotation = 0; alphaStitchMode = 0; } + public int format; public long timeStamp; public int stride; @@ -46,7 +47,6 @@ public float[] transform; public javax.microedition.khronos.egl.EGLContext eglContext10; public android.opengl.EGLContext eglContext14; - public byte[] buf; public int cropLeft; public int cropTop; @@ -56,34 +56,43 @@ public int alphaStitchMode; @Override public String toString() { - return "AgoraVideoFrame{" - + "format=" + format + ", timeStamp=" + timeStamp + ", stride=" + stride - + ", height=" + height + ", textureID=" + textureID - + ", buf.length=" + (buf != null ? buf.length : 0) + ", cropLeft=" + cropLeft - + ", cropTop=" + cropTop + ", cropRight=" + cropRight + ", cropBottom=" + cropBottom - + ", rotation=" + rotation + ", alphaStitchMode=" + alphaStitchMode + '}'; + return "AgoraVideoFrame{" + + "format=" + format + ", timeStamp=" + timeStamp + ", stride=" + stride + + ", height=" + height + ", textureID=" + textureID + + ", buf.length=" + (buf != null ? buf.length : 0) + ", cropLeft=" + cropLeft + + ", cropTop=" + cropTop + ", cropRight=" + cropRight + ", cropBottom=" + cropBottom + + ", rotation=" + rotation + ", alphaStitchMode=" + alphaStitchMode + '}'; } } - __attribute__((visibility("default"))) @interface AgoraVideoFrame : NSObject + +__attribute__((visibility("default"))) @interface AgoraVideoFrame : NSObject @property(assign, nonatomic) NSInteger format; -@property(assign, nonatomic) CMTime time; -@property(assign, nonatomic) int stride DEPRECATED_MSG_ATTRIBUTE("use strideInPixels instead"); -@property(assign, nonatomic) int strideInPixels; -@property(assign, nonatomic) int height; + +@property(assign, nonatomic) CMTime time; +@property(assign, nonatomic) int stride DEPRECATED_MSG_ATTRIBUTE("use strideInPixels instead"); + +@property(assign, nonatomic) int strideInPixels; +@property(assign, nonatomic) int height; @property(assign, nonatomic) CVPixelBufferRef _Nullable textureBuf; + @property(strong, nonatomic) IMAGE_CLASS * _Nullable image; -@property(strong, nonatomic) NSData *_Nullable dataBuf; + +@property(strong, nonatomic) NSData *_Nullable dataBuf; @property(strong, nonatomic) NSData *_Nullable alphaBuf; @property(assign, nonatomic) AgoraAlphaStitchMode alphaStitchMode; -@property(assign, nonatomic) int cropLeft; -@property(assign, nonatomic) int cropTop; -@property(assign, nonatomic) int cropRight; -@property(assign, nonatomic) int cropBottom; -@property(assign, nonatomic) int rotation; + +@property(assign, nonatomic) int cropLeft; +@property(assign, nonatomic) int cropTop; +@property(assign, nonatomic) int cropRight; +@property(assign, nonatomic) int cropBottom; +@property(assign, nonatomic) int rotation; +@property(strong, nonatomic) AgoraColorSpace *_Nullable colorSpace; + - (void)fillAlphaData; @end - struct ExternalVideoFrame { + +struct ExternalVideoFrame { ExternalVideoFrame() : type(VIDEO_BUFFER_RAW_DATA), format(VIDEO_PIXEL_DEFAULT), @@ -99,22 +108,26 @@ eglContext(NULL), eglType(EGL_CONTEXT10), textureId(0), + fenceObject(0), metadataBuffer(NULL), metadataSize(0), alphaBuffer(NULL), fillAlphaBuffer(false), - alphaStitchMode(0), + alphaStitchMode(NO_ALPHA_STITCH), d3d11Texture2d(NULL), textureSliceIndex(0){} + enum EGL_CONTEXT_TYPE { EGL_CONTEXT10 = 0, EGL_CONTEXT14 = 1, }; + enum VIDEO_BUFFER_TYPE { VIDEO_BUFFER_RAW_DATA = 1, VIDEO_BUFFER_ARRAY = 2, VIDEO_BUFFER_TEXTURE = 3, }; + VIDEO_BUFFER_TYPE type; VIDEO_PIXEL_FORMAT format; void* buffer; @@ -126,17 +139,19 @@ int cropBottom; int rotation; long long timestamp; - void *eglContext; + void* eglContext; EGL_CONTEXT_TYPE eglType; int textureId; + long long fenceObject; float matrix[16]; uint8_t* metadataBuffer; int metadataSize; uint8_t* alphaBuffer; bool fillAlphaBuffer; - int alphaStitchMode; + ALPHA_STITCH_MODE alphaStitchMode; void *d3d11Texture2d; int textureSliceIndex; + ColorSpace colorSpace; }; export class ExternalVideoFrame { type?: VideoBufferType; diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index a478bc371d9..62f94f3605c 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -7,42 +7,61 @@

      public class VideoFrame implements RefCounted { + public interface Buffer extends RefCounted { - @CalledByNative("Buffer") int getWidth(); - @CalledByNative("Buffer") int getHeight(); - @CalledByNative("Buffer") I420Buffer toI420(); - @Override @CalledByNative("Buffer") void release(); - @Override @CalledByNative("Buffer") void retain(); - @CalledByNative("Buffer") + + @CalledByNative("Buffer") int getWidth(); + + @CalledByNative("Buffer") int getHeight(); + + @CalledByNative("Buffer") I420Buffer toI420(); + + @Override @CalledByNative("Buffer") void release(); + + @Override @CalledByNative("Buffer") void retain(); + + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - @CalledByNative("Buffer") + + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); + + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); + + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } + public interface I420Buffer extends Buffer { - @CalledByNative("I420Buffer") ByteBuffer getDataY(); - @CalledByNative("I420Buffer") ByteBuffer getDataU(); - @CalledByNative("I420Buffer") ByteBuffer getDataV(); - @CalledByNative("I420Buffer") int getStrideY(); - @CalledByNative("I420Buffer") int getStrideU(); - @CalledByNative("I420Buffer") int getStrideV(); + + @CalledByNative("I420Buffer") ByteBuffer getDataY(); + + @CalledByNative("I420Buffer") ByteBuffer getDataU(); + + @CalledByNative("I420Buffer") ByteBuffer getDataV(); + @CalledByNative("I420Buffer") int getStrideY(); + @CalledByNative("I420Buffer") int getStrideU(); + @CalledByNative("I420Buffer") int getStrideV(); } + public interface I422Buffer extends Buffer { - @CalledByNative("I422Buffer") ByteBuffer getDataY(); - @CalledByNative("I422Buffer") ByteBuffer getDataU(); - @CalledByNative("I422Buffer") ByteBuffer getDataV(); - @CalledByNative("I422Buffer") int getStrideY(); - @CalledByNative("I422Buffer") int getStrideU(); - @CalledByNative("I422Buffer") int getStrideV(); - } - public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } + @CalledByNative("I422Buffer") ByteBuffer getDataY(); + @CalledByNative("I422Buffer") ByteBuffer getDataU(); + @CalledByNative("I422Buffer") ByteBuffer getDataV(); + @CalledByNative("I422Buffer") int getStrideY(); + @CalledByNative("I422Buffer") int getStrideU(); + @CalledByNative("I422Buffer") int getStrideV(); + } + public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } + public interface TextureBuffer extends Buffer { + enum Type { + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -57,22 +76,26 @@ EGL_CONTEXT_14; } Type getType(); - @CalledByNative("TextureBuffer") int getTextureId(); + + @CalledByNative("TextureBuffer") int getTextureId(); + Matrix getTransformMatrix(); - @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); - @CalledByNative("TextureBuffer") Object getSourceTexturePool(); - @CalledByNative("TextureBuffer") long getNativeEglContext(); - @CalledByNative("TextureBuffer") int getEglContextType(); - @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - @CalledByNative("TextureBuffer") int getSequence(); - @CalledByNative("TextureBuffer") boolean is10BitTexture(); + + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); + @CalledByNative("TextureBuffer") Object getSourceTexturePool(); + @CalledByNative("TextureBuffer") long getNativeEglContext(); + @CalledByNative("TextureBuffer") int getEglContextType(); + @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); + + @CalledByNative("TextureBuffer") int getSequence(); + @CalledByNative("TextureBuffer") long getFenceObject(); + @CalledByNative("TextureBuffer") boolean is10BitTexture(); } public interface ColorSpace { enum Range { Invalid(0), Limited(1), - Full(2), - Derived(3); + Full(2); private final int range; private Range(int range) { this.range = range; @@ -161,32 +184,55 @@ kBackCamera, kUnspecified, } + public enum AlphaStitchMode { + ALPHA_NO_STITCH(0), + ALPHA_STITCH_UP(1), + ALPHA_STITCH_BELOW(2), + ALPHA_STITCH_LEFT(3), + ALPHA_STITCH_RIGHT(4); + private final int stitchMode; + private AlphaStitchMode(int stitchMode) { + this.stitchMode = stitchMode; + } + public int value() { + return stitchMode; + } + } + private Buffer buffer; + private int rotation; + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; + + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); + private @Nullable ByteBuffer alphaBuffer; - private int alphaStitchMode; + private long nativeAlphaBuffer; + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { - this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); + this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, + SourceType.kUnspecified.ordinal()); } @CalledByNative public VideoFrame(Buffer buffer, int rotation, long timestampNs, ColorSpace colorSpace, - ByteBuffer alphaBuffer, float sampleAspectRatio, int sourceType) { + ByteBuffer alphaBuffer, long nativeAlphaBuffer, float sampleAspectRatio, int sourceType) { if (buffer == null) { - throw new IllegalArgumentException("buffer not allowed to be null"); + throw new IllegalArgumentException("buffer not allowed to be null"); } if (rotation % 90 != 0) { - throw new IllegalArgumentException("rotation must be a multiple of 90"); + throw new IllegalArgumentException("rotation must be a multiple of 90"); } this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; this.colorSpace = colorSpace; this.alphaBuffer = alphaBuffer; + this.nativeAlphaBuffer = nativeAlphaBuffer; this.sampleAspectRatio = sampleAspectRatio; this.sourceType = SourceType.values()[sourceType]; } @@ -197,18 +243,25 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } + @CalledByNative public Buffer getBuffer() { return buffer; } + @CalledByNative public int getRotation() { return rotation; } @CalledByNative public int getAlphaStitchMode() { - return alphaStitchMode; + return alphaStitchMode.value(); } + @CalledByNative + public void setAlphaStitchMode(int stitchMode) { + alphaStitchMode = AlphaStitchMode.values()[stitchMode]; + } + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -217,41 +270,93 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } + public int getRotatedWidth() { if (rotation % 180 == 0) { - return buffer.getWidth(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_RIGHT) + ? buffer.getWidth() / 2 + : buffer.getWidth(); } - return buffer.getHeight(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_BELOW) + ? buffer.getHeight() / 2 + : buffer.getHeight(); } + public int getRotatedHeight() { if (rotation % 180 == 0) { - return buffer.getHeight(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_BELOW) + ? buffer.getHeight() / 2 + : buffer.getHeight(); } - return buffer.getWidth(); + return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT + || alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_RIGHT) + ? buffer.getWidth() / 2 + : buffer.getWidth(); } + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; this.rotation = rotation; this.timestampNs = timestampNs; } + @CalledByNative public ColorSpace getColorSpace() { return colorSpace; } + public void setColorSpace(ColorSpace colorSpace) { + this.colorSpace = colorSpace; + } + @CalledByNative + private int getColorSpaceRange() { + if (colorSpace == null) { + return ColorSpace.Range.Invalid.getRange(); + } + return colorSpace.getRange().getRange(); + } + @CalledByNative + private int getColorSpaceMatrix() { + if (colorSpace == null) { + return ColorSpace.Matrix.Unspecified.getMatrix(); + } + return colorSpace.getMatrix().getMatrix(); + } + @CalledByNative + private int getColorSpaceTransfer() { + if (colorSpace == null) { + return ColorSpace.Transfer.Unspecified.getTransfer(); + } + return colorSpace.getTransfer().getTransfer(); + } + @CalledByNative + private int getColorSpacePrimary() { + if (colorSpace == null) { + return ColorSpace.Primary.Unspecified.getPrimary(); + } + return colorSpace.getPrimary().getPrimary(); + } @CalledByNative public ByteBuffer getAlphaBuffer() { return alphaBuffer; } + public void retainAlphaBuffer() { + JniCommon.nativeAddRef(nativeAlphaBuffer); + } + public void releaseAlphaBuffer() { + JniCommon.nativeReleaseRef(nativeAlphaBuffer); + } public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - public void setAlphaStitchMode(int mode) { - this.alphaStitchMode = mode; - } + @Override public void retain() { buffer.retain(); } + @Override @CalledByNative public void release() { @@ -278,7 +383,8 @@ this.format = format; } } - __attribute__((visibility("default"))) @interface AgoraOutputVideoFrame : NSObject + __attribute__((visibility("default"))) @interface AgoraOutputVideoFrame : NSObject + @property (nonatomic, assign) NSInteger type; @property (nonatomic, assign) int width; @property (nonatomic, assign) int height; @@ -291,12 +397,16 @@ @property (nonatomic, assign) int rotation; @property (nonatomic, assign) int64_t renderTimeMs; @property (nonatomic, assign) int avSyncType; + @property(assign, nonatomic) CVPixelBufferRef _Nullable pixelBuffer; @property (nonatomic, assign) uint8_t* _Nullable alphaBuffer; @property (nonatomic, assign) AgoraAlphaStitchMode alphaStitchMode; + @property(nonatomic, strong) NSDictionary *_Nonnull metaInfo; +@property(nonatomic, strong) AgoraColorSpace* _Nullable colorSpace; @end - struct VideoFrame { + +struct VideoFrame { VideoFrame(): type(VIDEO_PIXEL_DEFAULT), width(0), @@ -316,33 +426,57 @@ textureId(0), d3d11Texture2d(NULL), alphaBuffer(NULL), - alphaStitchMode(0), + alphaStitchMode(NO_ALPHA_STITCH), pixelBuffer(NULL), metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } + VIDEO_PIXEL_FORMAT type; + int width; + int height; + int yStride; + int uStride; + int vStride; + uint8_t* yBuffer; + uint8_t* uBuffer; + uint8_t* vBuffer; + int rotation; + int64_t renderTimeMs; + int avsync_type; + uint8_t* metadata_buffer; + int metadata_size; + void* sharedContext; + int textureId; + void* d3d11Texture2d; + float matrix[16]; + uint8_t* alphaBuffer; - int alphaStitchMode; + + ALPHA_STITCH_MODE alphaStitchMode; + void* pixelBuffer; + IVideoFrameMetaInfo* metaInfo; + + ColorSpace colorSpace; }; USTRUCT(BlueprintType) struct FVideoFrame { diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index bf4073b8d0e..4500cb04a5b 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -2611,6 +2611,13 @@ + + + + setExternalRemoteEglContext + + + @@ -11807,6 +11814,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 1bdc38893e8..fac4aadfa53 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -10912,6 +10912,13 @@ + + + + AgoraApplicationLiveShowScenario + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index dd3da6e473e..03c6f2e7eeb 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1058,6 +1058,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1556,6 +1570,13 @@ + + + + setExternalMediaProjection + + + @@ -2507,6 +2528,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -2715,6 +2759,13 @@ + + + + setExternalRemoteEglContext + + + @@ -4824,6 +4875,69 @@ + + + + AudioSourceType + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -5090,6 +5204,13 @@ + + + + LocalAudioMixerConfiguration + + + @@ -5153,6 +5274,13 @@ + + + + MixedAudioStream + + + @@ -5694,38 +5822,45 @@ + + + + AlphaStitchMode + + + - VIDEO_NO_ALPHA_STITCH + ALPHA_NO_STITCH - VIDEO_ALPHA_STITCH_UP + ALPHA_STITCH_UP - VIDEO_ALPHA_STITCH_BELOW + ALPHA_STITCH_BELOW - VIDEO_ALPHA_STITCH_LEFT + ALPHA_STITCH_LEFT - VIDEO_ALPHA_STITCH_RIGHT + ALPHA_STITCH_RIGHT @@ -6016,6 +6151,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -10672,6 +10814,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 1b4ef97a989..251e3519f5a 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -10357,6 +10357,13 @@ + + + + AgoraApplicationLiveShowScenario + + + From 40423bde8b1a916dd7340257c8c9b20d0b1f53d4 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:14:39 +0800 Subject: [PATCH 201/354] review cooments --- .../API/api_irtcengine_enableloopbackrecording.dita | 2 +- .../api_irtcengine_setexternalmediaprojection.dita | 4 +--- .../API/api_irtcengine_setlocalrendertargetfps.dita | 2 +- .../API/api_irtcengine_startlocalaudiomixer.dita | 9 ++++----- .../API/api_irtcengine_stoplocalaudiomixer.dita | 2 +- .../API/class_localaudiomixerconfiguration.dita | 12 +++++------- dita/RTC-NG/API/class_mixedaudiostream.dita | 8 ++++---- dita/RTC-NG/API/enum_compressionpreference.dita | 2 +- dita/RTC-NG/API/enum_localvideostreamreason.dita | 8 ++++---- dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap | 7 ------- dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ 11 files changed, 29 insertions(+), 34 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita b/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita index 69a2b1f1894..2401f70442c 100644 --- a/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita +++ b/dita/RTC-NG/API/api_irtcengine_enableloopbackrecording.dita @@ -38,7 +38,7 @@

      • 该方法仅适用于 macOS 和 Windows 平台。
      • -
      • macOS 系统默认声卡不支持采集功能。自 v4.5.0 起,SDK 支持自动安装虚拟声卡功能,当你第一次调用该方法时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时支持使用虚拟声卡进行采集。
      • +
      • macOS 系统默认声卡不支持采集功能。自 v4.5.0 起,SDK 支持自动安装虚拟声卡功能,当你第一次调用该方法时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。
      • 该方法在加入频道前后都能调用。
      • 如果你调用了 关闭音频模块,声卡采集功能也会被关闭。如果你需要再次启用声卡采集功能,需要调用 启用音频模块后再次调用
      diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index a15ec28d2b6..05fc79f09bc 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -55,9 +55,7 @@ mediaProjection - -

      对象,用于采集屏幕视频流。

      -
      + 一个 对象,用于采集屏幕视频流。
      diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index fbb5d2c0903..1bc5b8e42fa 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -54,7 +54,7 @@ targetFps:(int)targetFps; targetFps - 最大渲染帧率。支持的参数值为:1、7、10、15、24、30、60。 + 最大渲染帧率 (fps)。支持的参数值为:1、7、10、15、24、30、60。 请将此参数设置为低于视频实际帧率的渲染帧率,否则设置将不会生效。
      diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 0c8fbefd1b3..5e935eb83a3 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -30,8 +30,8 @@
      v4.5.0
      -

      该方法支持在本地将多路音频流合并为一路音频流。例如:将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流、通过网络获取的远端音频流等合并为一路音频流,然后将合流后的音频流发布到频道中。

        -
      • 如果你要对本地采集的音频流进行合流,可以将 中的 publishMixedAudioTrack 设置为 true,则可将合流后的音频流发布到频道中。
      • +

        该方法支持在本地将多路音频流合并为一路音频流。例如:将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,然后将合流后的音频流发布到频道中。

          +
        • 如果你要对本地采集的音频流进行合流,可以将 中的 publishMixedAudioTrack 设置为 ,则可将合流后的音频流发布到频道中。
        • 如果你要对远端音频流进行合流,需确保远端音频流已在频道内发布并且已被订阅。

    @@ -40,9 +40,8 @@

    你可以在如下场景中开启该功能:

    • 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
    • -
    • 在语聊房、游戏直播场景下,添加来自媒体播放器的音频源作为背景音乐。
    • -
    • 在线教育场景下,添加来自媒体播放器中的音频源作为音频课件。
    • -
    • 为视频在线实时配音。
    • +
    • 在直播场景下,用户接收频道内的音频流,在本地进行多路音频流合流后转发到其他频道。
    • +
    • 在教育场景下,老师可将跟学生连麦互动的音频在本地进行合流,然后将合并的音频流转发到其他频道。

    diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index 33b53b5a721..30fb53839f4 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -34,7 +34,7 @@
    调用时机 -

    该方法需要在 之后调用。

    +

    该方法需要在 之后调用。

    调用限制 diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 52f65a93fd2..6f8f514341d 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -7,10 +7,10 @@

    public class LocalAudioMixerConfiguration { - public ArrayList<MixedAudioStream> mixedAudioStreams; + public ArrayList<MixedAudioStream> audioInputStreams; public boolean syncWithLocalMic; public LocalAudioMixerConfiguration() { - mixedAudioStreams = new ArrayList<MixedAudioStream>(); + audioInputStreams = new ArrayList<MixedAudioStream>(); syncWithLocalMic = true; } public static class MixedAudioStream { @@ -33,7 +33,7 @@ @end struct LocalAudioMixerConfiguration { unsigned int streamCount; - MixedAudioStream* sourceStreams; + MixedAudioStream* audioInputStreams; bool syncWithLocalMic; LocalAudioMixerConfiguration() : streamCount(0), syncWithLocalMic(true) {} }; @@ -60,12 +60,10 @@ 在本地进行合流的音频流数量。 - mixedAudioStreams - audioInputStreams - sourceStreams + audioInputStreams 在本地进行合流的音频源。详见 - + syncWithLocalMic 合流后的音频流是否使用本地麦克风采集的音频帧时间戳:

      diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index d868c2174d8..4fba9c0c8e8 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -28,12 +28,12 @@ struct MixedAudioStream { AUDIO_SOURCE_TYPE sourceType; uid_t remoteUserUid; - const char* channelName; + const char* channelId; track_id_t trackId; MixedAudioStream(AUDIO_SOURCE_TYPE source) : sourceType(source), remoteUserUid(0), - channelName(NULL), + channelId(NULL), trackId(-1) {} MixedAudioStream(AUDIO_SOURCE_TYPE source, track_id_t track) : sourceType(source), @@ -41,11 +41,11 @@ MixedAudioStream(AUDIO_SOURCE_TYPE source, uid_t uid, const char* channel) : sourceType(source), remoteUserUid(uid), - channelName(channel) {} + channelId(channel) {} MixedAudioStream(AUDIO_SOURCE_TYPE source, uid_t uid, const char* channel, track_id_t track) : sourceType(source), remoteUserUid(uid), - channelName(channel), + channelId(channel), trackId(track) {} }; diff --git a/dita/RTC-NG/API/enum_compressionpreference.dita b/dita/RTC-NG/API/enum_compressionpreference.dita index 7df2c9d2f06..c3796805adf 100644 --- a/dita/RTC-NG/API/enum_compressionpreference.dita +++ b/dita/RTC-NG/API/enum_compressionpreference.dita @@ -17,7 +17,7 @@ - -1:(默认)自动模式。SDK 会根据你设置的视频场景,自动选择 ;并在网络状态发生变化时,自动在 之间切换,以获得最佳的用户体验。 + -1:(默认)自动模式。SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。 diff --git a/dita/RTC-NG/API/enum_localvideostreamreason.dita b/dita/RTC-NG/API/enum_localvideostreamreason.dita index 0e1124ef6c6..44ee4aa2540 100644 --- a/dita/RTC-NG/API/enum_localvideostreamreason.dita +++ b/dita/RTC-NG/API/enum_localvideostreamreason.dita @@ -53,22 +53,22 @@ - 9:(仅适用于 macOS 和 Winodws)当前正在使用的视频采集设备已经断开连接(例如,被拔出)。 + 9:(仅适用于 macOS 和 Windows)当前正在使用的视频采集设备已经断开连接(例如,被拔出)。 9:预留。 - 10:(仅适用于 macOS 和 Windows)SDK 无法在视频设备列表中找到该视频设备。请检查视频设备 ID 是否有效。 + 10:(仅适用于 macOS 和 Windows)SDK 无法在视频设备列表中找到该视频设备。请检查视频设备 ID 是否有效。 - 11:(仅适用于 macOS 和 Windows)调用 方法共享窗口时,共享窗口处于最小化的状态。SDK 无法共享被最小化的窗口。请提示用户将共享窗口取消最小化。 + 11:(仅适用于 macOS 和 Windows)调用 方法共享窗口时,共享窗口处于最小化的状态。SDK 无法共享被最小化的窗口。请提示用户将共享窗口取消最小化。 11:预留。 -

      12:(仅适用于 macOS 和 Windows)通过窗口 ID 共享的窗口已关闭,或通过窗口 ID 共享的全屏窗口已退出全屏。退出全屏模式后,远端用户将无法看到共享的窗口。为避免远端用户看到黑屏,建议你立即结束本次共享。

      +

      12:(仅适用于 macOS 和 Windows)通过窗口 ID 共享的窗口已关闭,或通过窗口 ID 共享的全屏窗口已退出全屏。退出全屏模式后,远端用户将无法看到共享的窗口。为避免远端用户看到黑屏,建议你立即结束本次共享。

      报告该错误码的常见场景:

      • 本地用户关闭共享的窗口。
      • diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap index 4a0bf825004..28aaff82664 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-cpp.ditamap @@ -105,12 +105,5 @@ - - - - MediaProjection - - - diff --git a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 5611004f6b7..e0ac6fe8368 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -134,5 +134,12 @@ + + + + MediaProjection + + + From 0397df8e3f2b36b86ea9ae51b0175a7ed22704ff Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Wed, 30 Oct 2024 10:12:14 +0000 Subject: [PATCH 202/354] Sync cn prototype to en prototype --- .../RTC-NG/API/api_imediaplayer_mute.dita | 2 +- .../API/api_irtcengine_enableencryption.dita | 2 +- .../API/api_irtcengine_enableextension.dita | 4 +- .../api_irtcengine_enablefacedetection.dita | 2 +- .../api_irtcengine_enablevoiceaituner.dita | 2 +- .../api_irtcengine_getextensionproperty.dita | 6 +- .../api_irtcengine_getextensionproperty2.dita | 6 +- ...gine_querycamerafocallengthcapability.dita | 2 +- .../api_irtcengine_querycodeccapability.dita | 2 +- .../API/api_irtcengine_registerextension.dita | 4 +- .../api_irtcengine_setextensionproperty.dita | 2 +- ...tcengine_setextensionproviderproperty.dita | 2 +- ...cengine_startscreencapturebydisplayid.dita | 2 +- ...tcengine_startscreencapturebywindowid.dita | 2 +- .../api_irtcengineex_enableencryptionex.dita | 2 +- ...nthandler_onextensionerrorwithcontext.dita | 2 +- ...nthandler_onextensioneventwithcontext.dita | 2 +- ...handler_onextensionstartedwithcontext.dita | 2 +- ...handler_onextensionstoppedwithcontext.dita | 2 +- .../dita/RTC-NG/API/class_audiopcmframe.dita | 2 +- .../RTC-NG/API/class_channelmediaoptions.dita | 6 + .../class_imediafilterextensiondelegate.dita | 2 +- .../API/class_screencaptureconfiguration.dita | 4 +- .../API/class_screencapturesourceinfo.dita | 29 ++-- .../API/class_videoencoderconfiguration.dita | 55 ++++---- .../API/class_videosubscriptionoptions.dita | 2 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 130 +++++++++++++++++- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 121 ++++++++++++++++ .../config/keys-rtc-ng-api-java.ditamap | 7 + .../config/keys-rtc-ng-api-macos.ditamap | 121 ++++++++++++++++ 30 files changed, 457 insertions(+), 72 deletions(-) diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita index 300e99453c5..a0f6e75f7e5 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita @@ -15,7 +15,7 @@

        int mute(boolean muted); - - (int)mute:(bool)isMute NS_SWIFT_NAME(mute(_:)); + - (int)mute:(BOOL)isMute NS_SWIFT_NAME(mute(_:)); virtual int mute(bool muted) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") int Mute(bool muted); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enableencryption.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enableencryption.dita index 6dc9a24f304..62a58acc581 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enableencryption.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enableencryption.dita @@ -15,7 +15,7 @@

        public abstract int enableEncryption(boolean enabled, EncryptionConfig config); public abstract enableEncryption(enabled: boolean, config: EncryptionConfig): number; - - (int)enableEncryption:(bool)enabled encryptionConfig:(AgoraEncryptionConfig * _Nonnull)config; + - (int)enableEncryption:(BOOL)enabled encryptionConfig:(AgoraEncryptionConfig * _Nonnull)config; virtual int enableEncryption(bool enabled, const EncryptionConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableEncryption(bool enabled, const FEncryptionConfig& config); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita index 8fba4bd0bb1..08c48be3cbd 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enableextension.dita @@ -16,8 +16,8 @@ public abstract int enableExtension( String provider, String extension, boolean enable, Constants.MediaSourceType sourceType); public abstract enableExtension(provider:string,extension:string,enable:boolean,extensionInfo:ExtensionInfo):number; - - (int)enableExtensionWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension + - (int)enableExtensionWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension enabled:(BOOL)enabled sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(enableExtension(withVendor:extension:enabled:sourceType:)); virtual int enableExtension(const char* provider, const char* extension, bool enable=true, agora::media::MEDIA_SOURCE_TYPE type = agora::media::UNKNOWN_MEDIA_SOURCE) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita index 488d0cdbdad..a609d187c39 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enablefacedetection.dita @@ -15,7 +15,7 @@

        public abstract int enableFaceDetection(boolean enabled); public abstract enableFaceDetection(enabled: boolean): number; - - (int)enableFaceDetection:(bool)enable NS_SWIFT_NAME(enableFaceDetection(_:)); + - (int)enableFaceDetection:(BOOL)enable NS_SWIFT_NAME(enableFaceDetection(_:)); virtual int enableFaceDetection(bool enabled) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableFaceDetection(bool enabled); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita b/en-US/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita index f67dc4358d8..64e12a5483b 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_enablevoiceaituner.dita @@ -14,7 +14,7 @@

        public abstract int enableVoiceAITuner(boolean enabled, Constants.VOICE_AI_TUNER_TYPE type); - - (int)enableVoiceAITuner:(bool)enabled type:(AgoraVoiceAITunerType)type NS_SWIFT_NAME(enableVoiceAITuner(_:type:)); + - (int)enableVoiceAITuner:(BOOL)enabled type:(AgoraVoiceAITunerType)type NS_SWIFT_NAME(enableVoiceAITuner(_:type:)); virtual int enableVoiceAITuner(bool enabled, VOICE_AI_TUNER_TYPE type) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableVoiceAITuner(bool enabled, EVOICE_AI_TUNER_TYPE type); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita index 27f01aee09b..6d3c08659ac 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty.dita @@ -16,9 +16,9 @@ public abstract String getExtensionProperty(String provider, String extension, String key); - - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension - key:(NSString * __nonnull)key; + - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension + key:(NSString * _Nonnull)key; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita index 4f2cb6fd689..8c5ca3c2a6d 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getextensionproperty2.dita @@ -17,9 +17,9 @@ String provider, String extension, String key, Constants.MediaSourceType sourceType); - - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension - key:(NSString * __nonnull)key + - (NSString * _Nullable)getExtensionPropertyWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension + key:(NSString * _Nonnull)key sourceType:(AgoraMediaSourceType)sourceType; virtual int getExtensionProperty( diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita b/en-US/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita index b7e3ecb1dc1..dc91e8eef54 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_querycamerafocallengthcapability.dita @@ -15,7 +15,7 @@

        public AgoraFocalLengthInfo[] queryCameraFocalLengthCapability(); - - (NSArray<AgoraFocalLengthInfo *>* __nullable)queryCameraFocalLengthCapability NS_SWIFT_NAME(queryCameraFocalLengthCapability()); + - (NSArray<AgoraFocalLengthInfo *>* _Nullable)queryCameraFocalLengthCapability NS_SWIFT_NAME(queryCameraFocalLengthCapability()); virtual int queryCameraFocalLengthCapability(agora::rtc::FocalLengthInfo* focalLengthInfos, int& size) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int QueryCameraFocalLengthCapability(const TArray<FFocalLengthInfo> & focalLengthInfos); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita b/en-US/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita index 5bf687305f0..bd171738807 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_querycodeccapability.dita @@ -15,7 +15,7 @@

        public abstract CodecCapInfo[] queryCodecCapability(); - - (NSArray <AgoraVideoCodecCapInfo *> *__nullable)queryCodecCapability; + - (NSArray <AgoraVideoCodecCapInfo *> *_Nullable)queryCodecCapability; virtual int queryCodecCapability(CodecCapInfo* codecInfo, int& size) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_registerextension.dita b/en-US/dita/RTC-NG/API/api_irtcengine_registerextension.dita index 84400d5e451..beeace6b14e 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_registerextension.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_registerextension.dita @@ -16,8 +16,8 @@ public abstract int registerExtension( String provider, String extension, Constants.MediaSourceType sourceType); - - (int)registerExtensionWithVendor:(NSString * __nonnull)provider - extension:(NSString * __nonnull)extension + - (int)registerExtensionWithVendor:(NSString * _Nonnull)provider + extension:(NSString * _Nonnull)extension sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(registerExtension(withVendor:extension:sourceType:)); virtual int registerExtension(const char* provider, const char* extension, agora::media::MEDIA_SOURCE_TYPE type = agora::media::UNKNOWN_MEDIA_SOURCE) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita index 436bb84eda6..a6a99bce482 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproperty.dita @@ -17,7 +17,7 @@ String provider, String extension, String key, String value); - - (int)setExtensionPropertyWithVendor:(NSString * __nonnull)provider extension:(NSString * __nonnull)extension key:(NSString * __nonnull)key value:(NSString * __nonnull)value; + - (int)setExtensionPropertyWithVendor:(NSString * _Nonnull)provider extension:(NSString * _Nonnull)extension key:(NSString * _Nonnull)key value:(NSString * _Nonnull)value; virtual int setExtensionProperty( const char* provider, const char* extension, diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita index a6ee17180cb..07a5a0faaee 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setextensionproviderproperty.dita @@ -16,7 +16,7 @@ public abstract int setExtensionProviderProperty(String provider, String key, String value); - - (int) setExtensionProviderPropertyWithVendor:(NSString * __nonnull)provider key:(NSString * __nonnull)key value:(NSString * __nonnull)value; + - (int) setExtensionProviderPropertyWithVendor:(NSString * _Nonnull)provider key:(NSString * _Nonnull)key value:(NSString * _Nonnull)value; virtual int setExtensionProviderProperty( const char* provider, const char* key, const char* value) = 0; diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita index b9837834fe9..6e89b7b61c2 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita @@ -19,7 +19,7 @@ regionRect:(CGRect)regionRect captureParams:(AgoraScreenCaptureParameters *_Nonnull)captureParams; - virtual int startScreenCaptureByDisplayId(uint32_t displayId, const Rectangle& regionRect, + virtual int startScreenCaptureByDisplayId(int64_t displayId, const Rectangle& regionRect, const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita index a2a1ddece8d..692ec0a30ab 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita @@ -18,7 +18,7 @@ - (int)startScreenCaptureByWindowId:(UInt32)windowId regionRect:(CGRect)regionRect captureParams:(AgoraScreenCaptureParameters *_Nonnull)captureParams; - virtual int startScreenCaptureByWindowId(view_t windowId, + virtual int startScreenCaptureByWindowId(int64_t windowId, const Rectangle& regionRect, const ScreenCaptureParameters& captureParams) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita index eb14192d29e..0bb3c321cef 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_enableencryptionex.dita @@ -16,7 +16,7 @@ public abstract int enableEncryptionEx( boolean enabled, EncryptionConfig config, RtcConnection connection); - - (int)enableEncryptionEx:(bool)enabled encryptionConfig:(AgoraEncryptionConfig *_Nonnull)config connection:(AgoraRtcConnection* _Nonnull)connection NS_SWIFT_NAME(enableEncryptionEx(_:encryptionConfig:connection:)); + - (int)enableEncryptionEx:(BOOL)enabled encryptionConfig:(AgoraEncryptionConfig *_Nonnull)config connection:(AgoraRtcConnection* _Nonnull)connection NS_SWIFT_NAME(enableEncryptionEx(_:encryptionConfig:connection:)); virtual int enableEncryptionEx(const RtcConnection& connection, bool enabled, const EncryptionConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") int EnableEncryptionEx(const FRtcConnection& connection, bool enabled, const FEncryptionConfig& config); diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita index 67f1d262cbd..5a58f680220 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionerrorwithcontext.dita @@ -15,7 +15,7 @@

        void onErrorWithContext(ExtensionContext extContext, int error, String message){}; onError?:(err:number,message:string) => void - - (void)onExtensionErrorWithContext:(AgoraExtensionContext * __nonnull)context + - (void)onExtensionErrorWithContext:(AgoraExtensionContext * _Nonnull)context error:(int)error message:(NSString * __nullable)message NS_SWIFT_NAME(onExtensionErrorWithContext(_:error:message:)); virtual void onExtensionErrorWithContext(const ExtensionContext &context, int error, const char* message) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita index 1b634b83a13..8557f0cdcab 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensioneventwithcontext.dita @@ -15,7 +15,7 @@

        void onEventWithContext(ExtensionContext extContext, String key, String value){}; - - (void)onEventWithContext:(AgoraExtensionContext * __nonnull)context + - (void)onEventWithContext:(AgoraExtensionContext * _Nonnull)context key:(NSString * __nullable)key value:(NSString * __nullable)value NS_SWIFT_NAME(onEventWithContext(_:key:value:)); virtual void onExtensionEventWithContext(const ExtensionContext &context, const char* key, const char* value) { diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita index 4594f496b8d..ea1ae1613bd 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstartedwithcontext.dita @@ -15,7 +15,7 @@

        void onStartedWithContext(ExtensionContext extContext){}; - - (void)onExtensionStartedWithContext:(AgoraExtensionContext * __nonnull)context NS_SWIFT_NAME(onExtensionStartedWithContext(_:)); + - (void)onExtensionStartedWithContext:(AgoraExtensionContext * _Nonnull)context NS_SWIFT_NAME(onExtensionStartedWithContext(_:)); virtual void onExtensionStartedWithContext(const ExtensionContext &context) { (void)context; } diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita index 6df2298aeed..5ab971bbdd9 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onextensionstoppedwithcontext.dita @@ -15,7 +15,7 @@

        void onStoppedWithContext(ExtensionContext extContext){}; - - (void)onExtensionStoppedWithContext:(AgoraExtensionContext * __nonnull)context NS_SWIFT_NAME(onExtensionStoppedWithContext(_:)); + - (void)onExtensionStoppedWithContext:(AgoraExtensionContext * _Nonnull)context NS_SWIFT_NAME(onExtensionStoppedWithContext(_:)); virtual void onExtensionStoppedWithContext(const ExtensionContext &context) { (void)context; } diff --git a/en-US/dita/RTC-NG/API/class_audiopcmframe.dita b/en-US/dita/RTC-NG/API/class_audiopcmframe.dita index b61f4c1f6fa..0879ae10af9 100644 --- a/en-US/dita/RTC-NG/API/class_audiopcmframe.dita +++ b/en-US/dita/RTC-NG/API/class_audiopcmframe.dita @@ -13,7 +13,7 @@ @property (assign, nonatomic) size_t samplesPerChannel; @property (assign, nonatomic) int sampleRateHz; @property (assign, nonatomic) size_t channelNumbers; - @property (strong, nonatomic) NSData* __nonnull pcmBuffer; + @property (strong, nonatomic) NSData* _Nonnull pcmBuffer; @property (assign, nonatomic) BytesPerSampleType bytesPerSample; @end diff --git a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita index 832882cf544..9f558b1866c 100644 --- a/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita +++ b/en-US/dita/RTC-NG/API/class_channelmediaoptions.dita @@ -21,6 +21,7 @@ public Boolean publishMediaPlayerAudioTrack; public Boolean publishMediaPlayerVideoTrack; public Boolean publishTranscodedVideoTrack; + public Boolean publishMixedAudioTrack; public Boolean autoSubscribeAudio; public Boolean autoSubscribeVideo; public Boolean enableAudioRecordingOrPlayout; @@ -122,6 +123,7 @@ @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @property(assign, nonatomic) BOOL publishMediaPlayerVideoTrack; @property(assign, nonatomic) BOOL publishTranscodedVideoTrack; +@property(assign, nonatomic) BOOL publishMixedAudioTrack; @property(assign, nonatomic) BOOL autoSubscribeAudio; @property(assign, nonatomic) BOOL autoSubscribeVideo; @property(assign, nonatomic) BOOL enableAudioRecordingOrPlayout; @@ -165,6 +167,7 @@ Optional<bool> publishMediaPlayerAudioTrack; Optional<bool> publishMediaPlayerVideoTrack; Optional<bool> publishTranscodedVideoTrack; + Optional<bool> publishMixedAudioTrack; Optional<bool> autoSubscribeAudio; Optional<bool> autoSubscribeVideo; Optional<bool> enableAudioRecordingOrPlayout; @@ -713,6 +716,7 @@ class ChannelMediaOptions { public Boolean publishMediaPlayerAudioTrack; public Boolean publishMediaPlayerVideoTrack; public Boolean publishTranscodedVideoTrack; + public Boolean publishMixedAudioTrack; public Boolean publishLipSyncTrack; public Boolean autoSubscribeAudio; public Boolean autoSubscribeVideo; @@ -815,6 +819,7 @@ class ChannelMediaOptions { @property(assign, nonatomic) BOOL publishMediaPlayerAudioTrack; @property(assign, nonatomic) BOOL publishMediaPlayerVideoTrack; @property(assign, nonatomic) BOOL publishTranscodedVideoTrack; + @property(assign, nonatomic) BOOL publishMixedAudioTrack; @property(assign, nonatomic) BOOL publishLipSyncTrack; @property(assign, nonatomic) BOOL autoSubscribeAudio; @property(assign, nonatomic) BOOL autoSubscribeVideo; @@ -859,6 +864,7 @@ class ChannelMediaOptions { Optional<bool> publishMediaPlayerAudioTrack; Optional<bool> publishMediaPlayerVideoTrack; Optional<bool> publishTranscodedVideoTrack; + Optional<bool> publishMixedAudioTrack; Optional<bool> publishLipSyncTrack; Optional<bool> autoSubscribeAudio; Optional<bool> autoSubscribeVideo; diff --git a/en-US/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita b/en-US/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita index 029a7c59007..8a3beb3ee6e 100644 --- a/en-US/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita +++ b/en-US/dita/RTC-NG/API/class_imediafilterextensiondelegate.dita @@ -9,7 +9,7 @@ @protocol AgoraMediaFilterExtensionDelegate <NSObject> -- (NSString * __nonnull)vendor; +- (NSString * _Nonnull)vendor; @end diff --git a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita index ec8a09b97ba..88f57384eb8 100644 --- a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -26,9 +26,9 @@ __attribute__((visibility("default"))) @interface AgoraScreenCaptureConfiguratio #endif struct ScreenCaptureConfiguration { bool isCaptureWindow; - uint32_t displayId; + int64_t displayId; Rectangle screenRect; - view_t windowId; + int64_t windowId; ScreenCaptureParameters params; Rectangle regionRect; diff --git a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita index e575ae0bf25..854a71595af 100644 --- a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -22,22 +22,23 @@ @end struct ScreenCaptureSourceInfo { - ScreenCaptureSourceType type; - view_t sourceId; - const char* sourceName; - ThumbImageBuffer thumbImage; - ThumbImageBuffer iconImage; - const char* processPath; - const char* sourceTitle; - bool primaryMonitor; + ScreenCaptureSourceType type; + int64_t sourceId; + const char* sourceName; + ThumbImageBuffer thumbImage; + ThumbImageBuffer iconImage; + const char* processPath; + const char* sourceTitle; + bool primaryMonitor; + bool isOccluded; + Rectangle position; #if defined(_WIN32) - Rectangle position; - bool minimizeWindow; - view_t sourceDisplayId; - ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(nullptr), sourceName(nullptr), - processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false), minimizeWindow(false), sourceDisplayId((view_t)-2) {} + bool minimizeWindow; + int64_t sourceDisplayId; + ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(0), sourceName(nullptr), + processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false), minimizeWindow(false), sourceDisplayId(-2) {} #else - ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(nullptr), sourceName(nullptr), processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false) {} + ScreenCaptureSourceInfo() : type(ScreenCaptureSourceType_Unknown), sourceId(0), sourceName(nullptr), processPath(nullptr), sourceTitle(nullptr), primaryMonitor(false), isOccluded(false) {} #endif }; USTRUCT(BlueprintType) diff --git a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita index 73c787d8153..8102bd56897 100644 --- a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -80,6 +80,7 @@ } } public enum COMPRESSION_PREFERENCE { + PREFER_COMPRESSION_AUTO(-1), PREFER_LOW_LATENCY(0), PREFER_QUALITY(1); private int value; @@ -102,11 +103,12 @@ } public AdvanceOptions() { this.encodingPreference = ENCODING_PREFERENCE.PREFER_AUTO; - this.compressionPreference = COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY; + this.compressionPreference = COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO; this.encodeAlpha = false; } } public enum DEGRADATION_PREFERENCE { + MAINTAIN_AUTO(-1), MAINTAIN_QUALITY(0), MAINTAIN_FRAMERATE(1), MAINTAIN_BALANCED(2), @@ -153,7 +155,6 @@ VIDEO_CODEC_H264(2), VIDEO_CODEC_H265(3), VIDEO_CODEC_GENERIC(6), - VIDEO_CODEC_GENERIC_H264(7), VIDEO_CODEC_AV1(12), VIDEO_CODEC_VP9(13), VIDEO_CODEC_GENERIC_JPEG(20); @@ -187,10 +188,10 @@ this.bitrate = STANDARD_BITRATE; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = ORIENTATION_MODE.ORIENTATION_MODE_ADAPTIVE; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, @@ -201,10 +202,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(VideoDimensions dimensions, FRAME_RATE frameRate, int bitrate, @@ -215,10 +216,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = mirrorMode; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration( @@ -229,10 +230,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = MIRROR_MODE_TYPE.MIRROR_MODE_DISABLED; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } public VideoEncoderConfiguration(int width, int height, FRAME_RATE frameRate, int bitrate, @@ -243,10 +244,10 @@ this.bitrate = bitrate; this.minBitrate = DEFAULT_MIN_BITRATE; this.orientationMode = orientationMode; - this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_QUALITY; + this.degradationPrefer = DEGRADATION_PREFERENCE.MAINTAIN_AUTO; this.mirrorMode = mirrorMode; this.advanceOptions = new AdvanceOptions( - ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_LOW_LATENCY, false); + ENCODING_PREFERENCE.PREFER_AUTO, COMPRESSION_PREFERENCE.PREFER_COMPRESSION_AUTO, false); this.codecType = VIDEO_CODEC_TYPE.VIDEO_CODEC_NONE; } } @@ -301,9 +302,9 @@ bitrate(b), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(m), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(mirror), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration(int width, int height, int f, int b, ORIENTATION_MODE m, VIDEO_MIRROR_MODE_TYPE mirror = VIDEO_MIRROR_MODE_DISABLED) : codecType(VIDEO_CODEC_NONE), dimensions(width, height), @@ -311,19 +312,19 @@ bitrate(b), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(m), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(mirror), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration(const VideoEncoderConfiguration& config) - : codecType(config.codecType), - dimensions(config.dimensions), - frameRate(config.frameRate), - bitrate(config.bitrate), - minBitrate(config.minBitrate), - orientationMode(config.orientationMode), - degradationPreference(config.degradationPreference), - mirrorMode(config.mirrorMode), - advanceOptions(config.advanceOptions) {} + : codecType(config.codecType), + dimensions(config.dimensions), + frameRate(config.frameRate), + bitrate(config.bitrate), + minBitrate(config.minBitrate), + orientationMode(config.orientationMode), + degradationPreference(config.degradationPreference), + mirrorMode(config.mirrorMode), + advanceOptions(config.advanceOptions) {} VideoEncoderConfiguration() : codecType(VIDEO_CODEC_NONE), dimensions(FRAME_WIDTH_960, FRAME_HEIGHT_540), @@ -331,9 +332,9 @@ bitrate(STANDARD_BITRATE), minBitrate(DEFAULT_MIN_BITRATE), orientationMode(ORIENTATION_MODE_ADAPTIVE), - degradationPreference(MAINTAIN_QUALITY), + degradationPreference(MAINTAIN_AUTO), mirrorMode(VIDEO_MIRROR_MODE_DISABLED), - advanceOptions(PREFER_AUTO, PREFER_LOW_LATENCY, false) {} + advanceOptions(PREFER_AUTO, PREFER_COMPRESSION_AUTO, false) {} VideoEncoderConfiguration& operator=(const VideoEncoderConfiguration& rhs) { if (this == &rhs) return *this; codecType = rhs.codecType; diff --git a/en-US/dita/RTC-NG/API/class_videosubscriptionoptions.dita b/en-US/dita/RTC-NG/API/class_videosubscriptionoptions.dita index b7b7cdf42e4..246f0e85bcd 100644 --- a/en-US/dita/RTC-NG/API/class_videosubscriptionoptions.dita +++ b/en-US/dita/RTC-NG/API/class_videosubscriptionoptions.dita @@ -45,7 +45,7 @@ __attribute__((visibility("default"))) @interface AgoraVideoSubscriptionOptions: NSObject @property (nonatomic, assign) AgoraVideoStreamType type; -@property (nonatomic, assign) bool encodedFrameOnly; +@property (nonatomic, assign) BOOL encodedFrameOnly; @end struct VideoSubscriptionOptions { diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 4500cb04a5b..35d908bd426 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1166,6 +1166,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1685,6 +1699,13 @@ + + + + setExternalMediaProjection + + + @@ -2691,7 +2712,30 @@ - + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + + @@ -5484,6 +5528,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -6249,6 +6307,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -6543,6 +6664,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index fac4aadfa53..543ef96b72e 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1068,6 +1068,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -3345,6 +3359,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4932,6 +4969,20 @@ + + + + AgoraMixedAudioStream + + + + + + + AgoraLocalAudioMixerConfiguration + + + @@ -5767,6 +5818,69 @@ + + + + AgoraAudioSourceType + + + + + + + AgoraAudioSourceMicrophone + + + + + + + AgoraAudioSourceCustom + + + + + + + AgoraAudioSourceMediaPlayer + + + + + + + AgoraAudioSourceLoopbackRecording + + + + + + + AgoraAudioSourceMixedStream + + + + + + + AgoraAudioSourceRemoteUser + + + + + + + AgoraAudioSourceRemoteChannel + + + + + + + AgoraAudioSourceTypeUnknown + + + @@ -7573,6 +7687,13 @@ + + + + AgoraCompressionAuto + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 03c6f2e7eeb..e7b792d8790 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -8916,6 +8916,13 @@ + + + + LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_FAILURE + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 251e3519f5a..144a4d2226c 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1025,6 +1025,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -3098,6 +3112,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4606,6 +4643,20 @@ + + + + AgoraMixedAudioStream + + + + + + + AgoraLocalAudioMixerConfiguration + + + @@ -5385,6 +5436,69 @@ + + + + AgoraAudioSourceType + + + + + + + AgoraAudioSourceMicrophone + + + + + + + AgoraAudioSourceCustom + + + + + + + AgoraAudioSourceMediaPlayer + + + + + + + AgoraAudioSourceLoopbackRecording + + + + + + + AgoraAudioSourceMixedStream + + + + + + + AgoraAudioSourceRemoteUser + + + + + + + AgoraAudioSourceRemoteChannel + + + + + + + AgoraAudioSourceTypeUnknown + + + @@ -7135,6 +7249,13 @@ + + + + AgoraCompressionAuto + + + From 2d3af0484de09d48227b765b753364d5d7f25a85 Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:42:52 +0800 Subject: [PATCH 203/354] NMS-22814 --- dita/RTC-NG/API/enum_degradationpreference.dita | 14 +++++++++++--- dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 7 +++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/enum_degradationpreference.dita b/dita/RTC-NG/API/enum_degradationpreference.dita index cb831445af9..ed04dfa2cfd 100644 --- a/dita/RTC-NG/API/enum_degradationpreference.dita +++ b/dita/RTC-NG/API/enum_degradationpreference.dita @@ -7,11 +7,19 @@

        枚举值 + + + -1:(默认)自动模式。SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。 + - -

        0:(默认)带宽受限时,视频编码时优先降低视频帧率,维持分辨率不变。该降级偏好适用于画质优先的场景。

        -
        + 0:带宽受限时,视频编码时优先降低视频帧率,维持分辨率不变。该降级偏好适用于画质优先的场景。 +
        + +
        弃用:
        +
        该枚举已废弃。请改用其他枚举。
        +
        +
        diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 35d908bd426..6910eeb4708 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -8435,6 +8435,13 @@ + + + + MAINTAIN_AUTO + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 543ef96b72e..dbab1a2b1d4 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -7813,6 +7813,13 @@ + + + + AgoraDegradationMaintainAuto + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 144a4d2226c..4b546ead49b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -7375,6 +7375,13 @@ + + + + AgoraDegradationMaintainAuto + + + From 0310a301520dc25b17bccd9dec1234d7ca6074cd Mon Sep 17 00:00:00 2001 From: Cilla-luodan <85477033+Cilla-luodan@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:37:49 +0800 Subject: [PATCH 204/354] add 450 release notes --- dita/RTC-NG/release/release_notes.dita | 228 +++++++++++-------- dita/RTC-NG/release/release_notes_4.4.0.dita | 137 +++++++++++ 2 files changed, 275 insertions(+), 90 deletions(-) create mode 100644 dita/RTC-NG/release/release_notes_4.4.0.dita diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 60ded574d12..6125bec4ec4 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -1,52 +1,82 @@ - v4.4.0 + v4.5.6 -

        该版本于 2024 年 7 月 x 日发布。

        +

        该版本于 2034 年 11 月 x 日发布。

        <topic id="compatibility"> <title>升级必看 -

        该版本对部分功能的实现方式进行了优化,包括 SDK 的行为变更、API 的改名或删除,为确保项目的正常运行,你需要在升级到该版本后更新 App 中的代码。 - 自 v4.4.0 起,RTC SDK 提供 API 下架说明,包含各版本废弃及删除的 API 信息。详见 API 下架说明API 下架说明API 下架说明API 下架说明

        +

        该版本对部分功能的实现方式进行了优化,涉及 SDK 的行为变更、API 的改名或删除,为确保项目的正常运行,你需要在升级到该版本后更新 App 中的代码。

          -
        1. 为区分不同插件回调中的上下文信息,该版本将原有的插件相关回调删除并新增可标识插件上下文信息的对应回调(见下表),你可以通过各回调中的 了解插件的名称、使用该插件的用户 ID、和提供插件的服务商名等信息。 - - - 原有回调 - 现有回调 - - - onExtensionEventonEvent - - - - onExtensionStartedonStarted - - - - onExtensionStoppedonStopped - - - - onExtensionErroronError - - - -
        2. -
        3. 在 v4.4.0 之前,当你的用户角色为观众时,调用 将音频场景设为聊天室场景()会收到申请麦克风权限的弹窗提示。自 v4.4.0 起,SDK 通过 iOS 原生的 API 控制麦克风开关,因此观众角色在聊天室场景下不会再收到申请麦克风权限的弹窗。
        4. -
        5. 该版本将 receiveMetadata 回调改名为 ,并删除了回调中的 datatimeStamp 参数,你可以通过新增的 metadata 参数来获取 Metadata 的相关信息,包括 timeStamp(发送数据的时间戳)、uid(用户 ID)、channelId(源频道名称)等。
        6. -
        7. 该版本删除了 回调中的 bufferuidtimeStampMs 参数,你可以通过新增的 metadata 参数来获取 Metadata 的相关信息,包括 timeStampMs(发送数据的时间戳)、uid(用户 ID)、channelId(源频道名称)等。
        8. -
        9. 该版本修改了 中的以下成员名称: +
        10. 成员参数类型变更 +

          为提升各框架对 Native SDK 的适配性,该版本对一些 API 中的成员或参数做了如下修改: + + + + + + + API + 成员/参数 + 变更 + + + + + + displayId + 由 uint32_t 型变更为 int64_t 型 + + + + windowId + 由 view_t 型变更为 int64_t 型 + + + + displayId + 由 uint32_t 型变更为 int64_t 型 + + + windowId + 由 view_t 型变更为 int64_t 型 + + + + sourceDisplayId + 由 view_t 型变更为 int64_t 型 + + + sourceId + 默认值由 nullptr 变更为 0 + + + +

          +
        11. +
        12. 自动安装虚拟声卡 +

          自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

          +
        13. +
        14. 强效视频降噪实现变更 +

          +
        15. +
        16. 摄像头插拔状态变更 (macOS, Windows) +

          +
        17. +
        18. 视频编码偏好变更 +

          为提升用户的视频互动体验,该版本优化了视频编码时的默认偏好:

            -
          • d3d11_texture_2d 更名为 d3d11Texture2d
          • -
          • texture_slice_index 更名为 textureSliceIndex
          • -
          • metadata_buffer 更名为 metadataBuffer
          • -
          • metadata_size 更名为 metadataSize
          • -
        19. +
        20. 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。
        21. +
        22. 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。
        23. +

      + +
    • 16 KB 内存页大小 (Android) +

      +
    • @@ -54,39 +84,50 @@ 新增特性
        -
      1. Lite SDK -

        自该版本起,声网推出 Lite 版 SDK,该 SDK 中仅包含音视频基础能力、对高阶音视频处理的功能进行部分裁剪,可有效减少集成 SDK 后的 App 体积。

        +
      2. 高级美颜
          -
        • Lite SDK 支持手动集成或三方仓库集成,详见
        • -
        • Lite SDK 包含的动态库信息详见
        • -
        • Lite SDK 支持的 API 清单详见 Lite SDK API 列表Lite SDK API 列表
        • -
        • 使用 Lite SDK 播放媒体文件时的限制和注意事项详见 RTC SDK 支持播放哪些格式的音频文件?
        • +
        • +
      3. -
      4. Alpha 透明特效 -

        该版本新增 Alpha 透明特效功能,支持在 SDK 采集和自定义采集视频的场景下,在发送端发布视频帧的 Alpha 通道、在接收端对 Alpha 通道进行渲染处理,实现透明礼物特效、接收端自定义主播背景等:

        -
          -
        • 中新增 alphaBuffer:设置 Alpha 通道数据。
        • -
        • 中新增 fillAlphaBuffer:对于 BGRA 或 RGBA 格式的视频数据,设置是否自动提取 Alpha 通道数据并填入到 alphaBuffer 中。
        • -
        • 中新增 alphaStitchMode:设置 alphaBuffer 和视频帧拼接的相对位置。
        • -
        -

        另外, 中新增成员 encodeAlpha,用于设置是否将 Alpha 信息编码并发送到远端。SDK 默认不对 Alpha 信息进行编码发送;如果需要对 Alpha 信息编码发送至远端(例如开启了虚拟背景功能),请显式调用 设置视频编码属性,并将 encodeAlpha 设置为 。 - -

        如需了解在各场景下实现 Alpha 特效的最佳实践,详见

        -

        -
      5. -
      6. AI 调音器 -

        该版本新增 AI 调音器功能,可以实现类似物理声卡对音质和音色的提升。你可以通过调用 方法并传入 枚举中支持的音效类型来启用 AI 调音器功能,实现大叔音、萝莉音、烟嗓歌声等声音效果。

        -
      7. -
      8. 版权音乐优化 +
      9. 秀场直播场景 +

        +
      10. +
      11. 限制视频渲染帧率 +

        该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

        +

        在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

        +
      12. +
      13. URL 拉流播放 +

        +
      14. +
      15. 滤镜效果 +

        +
      16. +
      17. 本地音频合流 +

        该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

        +

        该功能的使用场景示例如下:

          -
        • 该版本在 类下新增 方法,用于设置音乐资源的播放模式。在在线 K 歌房等场景下,你可以根据需求启用伴唱、原唱或导唱模式。
        • -
        • 该版本在 类下新增 方法,用于销毁音乐播放器并释放相应的资源。
        • -
        • 该版本废弃了 类下的 方法。如需销毁音乐播放器,请改用 类下新增 方法。
        • -
        +
      18. 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
      19. +
      20. 在直播场景下,用户接收频道内的音频流,在本地进行多路音频流合流后转发到其他频道。
      21. +
      22. 在教育场景下,老师可将跟学生连麦互动的音频在本地进行合流,然后将合并的音频流转发到其他频道。
      23. +

    + +
  • 外部 MediaProjection (Android) +

    该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

    +

    如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

    +
  • +
  • EGL 环境上下文 (Android) +

  • -
  • 1v1 视频通话场景 -

    该版本在 类下新增枚举 (1v1 视频通话)。你可以调用 将视频业务场景设置为 1v1 视频通话,针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

    +
  • 色彩空间设置 +

  • +
  • +

    +
  • +
  • 其他 +
      +
    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
    • +
  • @@ -94,30 +135,34 @@ 改进
      -
    1. 自适应硬解支持 (Android, Windows) -

      该版本新增自适应硬解支持,改进了低端机的渲染流畅性,有效降低系统负载。

      -
    2. -
    3. 渲染能力提升 (Windows) -

      Windows 设备上默认启用 DirectX 11 渲染器,可提供高性能、高质量的图形渲染能力。

      -
    4. -
    5. 人脸区域美颜 -

      为了避免磨皮美颜程度较高时丢失非脸部区域的细节,该版本改进了磨皮美颜效果的实现算法。磨皮美颜现在会识别人脸的各个部位,应用在除嘴巴、眼睛和眉毛之外的人脸皮肤区域,且支持最多同时对两张人脸磨皮。

      +
    6. 虚拟背景算法优化 +
        +
      • +
      • +
    7. +
    8. 录制本地预览视频 +
        +
      • +
      • +
    9. +
    10. 指定视频观测位置截图 +
        +
      • +
      • +
    11. +
    12. +
        +
      • +
      • +
    13. +
    14. 自定义音频采集改进 +

    15. 其他改进 -

      该版本还进行了如下改进:

        -
      • 优化了传输策略,调用 不再对传输链路的安全性产生影响。
      • -
      • 回调中新增 枚举,表示进行屏幕采集的显示器已断开连接。(Windows, macOS)
      • -
      • 优化了共享窗口的视频链路,降低了 CPU 占用率。(macOS)
      • -
      • 优化了屏幕共享场景下的回声消除。
      • -
      • 该版本在 中新增 channelId 参数,用于获取发送 Metadata 的源频道名称。
      • -
      • 废弃了 中的冗余枚举值
      • -
      • 废弃了冗余枚举值
      • -
      • 优化了以下 API 的参数类型。此改进有助于提升代码的可读性,减少潜在的错误,并便于后续维护。
          -
        • 废弃了 option 参数为 int 类型的 ,新增了 option 参数为 类型的重载函数
        • -
        • 废弃了 streamType 参数为 int 类型的 ,新增了 streamType 参数为 类型的重载函数
      • -

      -
    16. +
    17. 通过拼接视频帧和 Alpha 数据实现 Alpha 透明特效的应用场景下,提升了接收端的渲染性能,有效减少卡顿和延迟。(Android, iOS)
    18. +
    19. +
    @@ -126,10 +171,13 @@

    该版本修复了以下问题:

      -
    • 在实时互动过程中,当多个远端同时加入频道时 App 偶现崩溃。(iOS)
    • -
    • App 切后台一段时间、然后返回前台时,远端视频画面偶现卡住或花屏。(iOS)
    • -
    • 发送端调用 开始直接向 CDN 推流后,频繁开关或切换网络,偶现接收端黑屏但发送端未收到推流失败回调。(iOS)
    • -
    • 调用 推送外部音频数据,外部音频渲染的采样率如果不是 SDK 推荐的值时,比如 22050 Hz 和 11025 Hz,声音播放失败。
    • +
    • 调用 共享屏幕时,通过 regionRect 指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows)
    • +
    • 当发送端视频源类型为 JPEG 格式时,偶现接收端帧率低于预期。(Android、iOS)
    • +
    • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
    • +
    • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
    • +
    • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
    • +
    • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
    • +
    diff --git a/dita/RTC-NG/release/release_notes_4.4.0.dita b/dita/RTC-NG/release/release_notes_4.4.0.dita new file mode 100644 index 00000000000..60ded574d12 --- /dev/null +++ b/dita/RTC-NG/release/release_notes_4.4.0.dita @@ -0,0 +1,137 @@ + + + + v4.4.0 + +

    该版本于 2024 年 7 月 x 日发布。

    + + + + <topic id="compatibility"> + <title>升级必看 + +

    该版本对部分功能的实现方式进行了优化,包括 SDK 的行为变更、API 的改名或删除,为确保项目的正常运行,你需要在升级到该版本后更新 App 中的代码。 + 自 v4.4.0 起,RTC SDK 提供 API 下架说明,包含各版本废弃及删除的 API 信息。详见 API 下架说明API 下架说明API 下架说明API 下架说明

    +
      +
    1. 为区分不同插件回调中的上下文信息,该版本将原有的插件相关回调删除并新增可标识插件上下文信息的对应回调(见下表),你可以通过各回调中的 了解插件的名称、使用该插件的用户 ID、和提供插件的服务商名等信息。 + + + 原有回调 + 现有回调 + + + onExtensionEventonEvent + + + + onExtensionStartedonStarted + + + + onExtensionStoppedonStopped + + + + onExtensionErroronError + + + +
    2. +
    3. 在 v4.4.0 之前,当你的用户角色为观众时,调用 将音频场景设为聊天室场景()会收到申请麦克风权限的弹窗提示。自 v4.4.0 起,SDK 通过 iOS 原生的 API 控制麦克风开关,因此观众角色在聊天室场景下不会再收到申请麦克风权限的弹窗。
    4. +
    5. 该版本将 receiveMetadata 回调改名为 ,并删除了回调中的 datatimeStamp 参数,你可以通过新增的 metadata 参数来获取 Metadata 的相关信息,包括 timeStamp(发送数据的时间戳)、uid(用户 ID)、channelId(源频道名称)等。
    6. +
    7. 该版本删除了 回调中的 bufferuidtimeStampMs 参数,你可以通过新增的 metadata 参数来获取 Metadata 的相关信息,包括 timeStampMs(发送数据的时间戳)、uid(用户 ID)、channelId(源频道名称)等。
    8. +
    9. 该版本修改了 中的以下成员名称: +
        +
      • d3d11_texture_2d 更名为 d3d11Texture2d
      • +
      • texture_slice_index 更名为 textureSliceIndex
      • +
      • metadata_buffer 更名为 metadataBuffer
      • +
      • metadata_size 更名为 metadataSize
      • +
    10. +
    + +
    + + 新增特性 + +
      +
    1. Lite SDK +

      自该版本起,声网推出 Lite 版 SDK,该 SDK 中仅包含音视频基础能力、对高阶音视频处理的功能进行部分裁剪,可有效减少集成 SDK 后的 App 体积。

      +
        +
      • Lite SDK 支持手动集成或三方仓库集成,详见
      • +
      • Lite SDK 包含的动态库信息详见
      • +
      • Lite SDK 支持的 API 清单详见 Lite SDK API 列表Lite SDK API 列表
      • +
      • 使用 Lite SDK 播放媒体文件时的限制和注意事项详见 RTC SDK 支持播放哪些格式的音频文件?
      • +
    2. +
    3. Alpha 透明特效 +

      该版本新增 Alpha 透明特效功能,支持在 SDK 采集和自定义采集视频的场景下,在发送端发布视频帧的 Alpha 通道、在接收端对 Alpha 通道进行渲染处理,实现透明礼物特效、接收端自定义主播背景等:

      +
        +
      • 中新增 alphaBuffer:设置 Alpha 通道数据。
      • +
      • 中新增 fillAlphaBuffer:对于 BGRA 或 RGBA 格式的视频数据,设置是否自动提取 Alpha 通道数据并填入到 alphaBuffer 中。
      • +
      • 中新增 alphaStitchMode:设置 alphaBuffer 和视频帧拼接的相对位置。
      • +
      +

      另外, 中新增成员 encodeAlpha,用于设置是否将 Alpha 信息编码并发送到远端。SDK 默认不对 Alpha 信息进行编码发送;如果需要对 Alpha 信息编码发送至远端(例如开启了虚拟背景功能),请显式调用 设置视频编码属性,并将 encodeAlpha 设置为 。 + +

      如需了解在各场景下实现 Alpha 特效的最佳实践,详见

      +

      +
    4. +
    5. AI 调音器 +

      该版本新增 AI 调音器功能,可以实现类似物理声卡对音质和音色的提升。你可以通过调用 方法并传入 枚举中支持的音效类型来启用 AI 调音器功能,实现大叔音、萝莉音、烟嗓歌声等声音效果。

      +
    6. +
    7. 版权音乐优化 +
        +
      • 该版本在 类下新增 方法,用于设置音乐资源的播放模式。在在线 K 歌房等场景下,你可以根据需求启用伴唱、原唱或导唱模式。
      • +
      • 该版本在 类下新增 方法,用于销毁音乐播放器并释放相应的资源。
      • +
      • 该版本废弃了 类下的 方法。如需销毁音乐播放器,请改用 类下新增 方法。
      • +
      +
    8. +
    9. 1v1 视频通话场景 +

      该版本在 类下新增枚举 (1v1 视频通话)。你可以调用 将视频业务场景设置为 1v1 视频通话,针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

      +
    10. +
    + +
    + + 改进 + +
      +
    1. 自适应硬解支持 (Android, Windows) +

      该版本新增自适应硬解支持,改进了低端机的渲染流畅性,有效降低系统负载。

      +
    2. +
    3. 渲染能力提升 (Windows) +

      Windows 设备上默认启用 DirectX 11 渲染器,可提供高性能、高质量的图形渲染能力。

      +
    4. +
    5. 人脸区域美颜 +

      为了避免磨皮美颜程度较高时丢失非脸部区域的细节,该版本改进了磨皮美颜效果的实现算法。磨皮美颜现在会识别人脸的各个部位,应用在除嘴巴、眼睛和眉毛之外的人脸皮肤区域,且支持最多同时对两张人脸磨皮。

      +
    6. +
    7. 其他改进 +

      该版本还进行了如下改进: +

        +
      • 优化了传输策略,调用 不再对传输链路的安全性产生影响。
      • +
      • 回调中新增 枚举,表示进行屏幕采集的显示器已断开连接。(Windows, macOS)
      • +
      • 优化了共享窗口的视频链路,降低了 CPU 占用率。(macOS)
      • +
      • 优化了屏幕共享场景下的回声消除。
      • +
      • 该版本在 中新增 channelId 参数,用于获取发送 Metadata 的源频道名称。
      • +
      • 废弃了 中的冗余枚举值
      • +
      • 废弃了冗余枚举值
      • +
      • 优化了以下 API 的参数类型。此改进有助于提升代码的可读性,减少潜在的错误,并便于后续维护。
          +
        • 废弃了 option 参数为 int 类型的 ,新增了 option 参数为 类型的重载函数
        • +
        • 废弃了 streamType 参数为 int 类型的 ,新增了 streamType 参数为 类型的重载函数
      • +

      +
    8. +
    + +
    + + 问题修复 + +

    该版本修复了以下问题:

    +
      +
    • 在实时互动过程中,当多个远端同时加入频道时 App 偶现崩溃。(iOS)
    • +
    • App 切后台一段时间、然后返回前台时,远端视频画面偶现卡住或花屏。(iOS)
    • +
    • 发送端调用 开始直接向 CDN 推流后,频繁开关或切换网络,偶现接收端黑屏但发送端未收到推流失败回调。(iOS)
    • +
    • 调用 推送外部音频数据,外部音频渲染的采样率如果不是 SDK 推荐的值时,比如 22050 Hz 和 11025 Hz,声音播放失败。
    • +
    + +
    +
    + From ec24f3451e5ed695f4a69fa863db808eeebd25e7 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 31 Oct 2024 14:22:46 +0800 Subject: [PATCH 205/354] peer review fixes --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 2 +- ..._irtcengine_getfaceshapebeautyoptions.dita | 2 +- ...api_irtcengine_setfiltereffectoptions.dita | 2 +- ..._irtcengine_setlowlightenhanceoptions.dita | 16 ++++++------- .../API/class_faceshapebeautyoptions.dita | 2 +- .../API/class_mediarecorderconfiguration.dita | 24 +++++++++---------- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 9ce52998c6f..676a696e2af 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -35,7 +35,7 @@
    适用场景 -

    用户在 App 中打开美型部位和修饰力度菜单时,可以调用该方法获取并刷新当前美型部位选项的值,从而记住用户上次调整的结果并更新 UI。

    +

    用户在 App 中打开美型部位和修饰力度菜单时,你可以调用该方法获取当前的美型部位选项,然后根据结果刷新用户界面中的菜单,并更新 UI。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index c1d40f4f2a2..80c14bce42d 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -35,7 +35,7 @@
    适用场景 -

    用户在 App 中打开美型风格和风格强度菜单时,可以调用该方法获取并刷新当前美型效果选项的值,从而记住用户上次调整的结果并更新 UI。

    +

    用户在 App 中打开美型风格和风格强度菜单时,你可以调用该方法获取当前的美型效果选项,然后根据结果刷新用户界面中的菜单,并更新 UI。

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index c624cf9ef76..0d0a70c820f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -68,7 +68,7 @@ 效果应用的媒体源类型。详见 在该方法中,该参数仅支持以下两种设置:
      -
    • (默认)
    • +
    • 使用摄像头采集本地视频时,请保持默认值
    • 如果要使用自定义采集的视频,将该参数设置为
    diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index cdf3fbbd5d2..f00c47f8182 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -54,6 +54,12 @@
    • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
    • 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,建议你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
    • +
    • 如果要实现优先画质 () 的暗光增强,需要先调用 实现视频降噪,具体对应关系如下: +
        +
      • 暗光增强为自动模式 () 时,视频降噪需设置为优先画质 ()、自动模式 ()。
      • +
      • 暗光增强为手动模式 () 时,视频降噪需设置为优先画质 ()、手动模式 ()。
      • +
      +
    @@ -70,20 +76,14 @@ options - 暗光增强选项,用于设置暗光增强的效果。详见 。根据你在 options 中的设置,需要进行以下操作: -
      -
    • levelmode 均为默认设置时:需要先调用 启用视频降噪,其中 采用默认设置。
    • -
    • level 为默认值,mode 时:需要先调用 启用视频降噪,并将 中的 level 设为默认值,mode 设为
    • -
    • 除以上两种情况外的情况:无需调用
    • -
    -
    + 暗光增强选项,用于设置暗光增强的效果。详见
    type 效果应用的媒体源类型。详见 在该方法中,该参数仅支持以下两种设置:
      -
    • 默认值为
    • +
    • 使用摄像头采集本地视频时,请保持默认值
    • 如果要使用自定义采集的视频,将该参数设置为
    diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita index 83a49163ecf..0d4c4250e0b 100644 --- a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -56,7 +56,7 @@ styleIntensity - 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0,表示无美型效果。取值越大,美型效果越强,脸部各部位修饰的痕迹越明显。 + 美型风格强度,取值范围为 [0.0,1.0],其中默认值为 0.0,表示无美型效果。取值越大,修饰部位的改变越明显。
    diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 54e4e00b952..09476438c5d 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -242,29 +242,29 @@ struct FMediaRecorderConfiguration width 录制视频的宽度 (px),宽 × 高的最大值不应超过 3840 × 2160。 - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 height 录制视频的高度 (px),宽 × 高的最大值不超过 3840 × 2160。 - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 fps 录制视频的帧率,最高值不超过 30,如: 5、10、15、24、30 等。 - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 sample_rate 录制音频的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 @@ -274,15 +274,15 @@ struct FMediaRecorderConfiguration
  • 1: 单声道
  • 2: 双声道
  • - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。
    videoSourceType 录制视频源的类型。详见 。 - 该参数仅在 时需要传入。 - 该参数仅在 recorderStreamType 为 0 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。
    From 5588f56150742d386e25fd1dd2db591c1f17b9b9 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 31 Oct 2024 14:24:48 +0800 Subject: [PATCH 206/354] add cn props --- dita/RTC-NG/API/rtc_api_data_type.dita | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index ab4d6364c08..36ac81afd37 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1248,7 +1248,7 @@
  • -
  • +
  • @@ -1480,7 +1480,7 @@
  • -
  • +
  • @@ -1611,7 +1611,7 @@
  • -
  • +
  • From b130daaf5ecd50e6cedde0776ac16e3396fb3110 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 31 Oct 2024 06:29:04 +0000 Subject: [PATCH 207/354] Sync cn prototype to en prototype --- .../API/class_mediarecorderconfiguration.dita | 73 ++++- .../RTC-NG/API/class_recorderstreaminfo.dita | 19 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 221 ++++++++++++++- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 254 +++++++++++++++++- .../config/keys-rtc-ng-api-java.ditamap | 221 ++++++++++++++- .../config/keys-rtc-ng-api-macos.ditamap | 252 +++++++++++++++++ 6 files changed, 1023 insertions(+), 17 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 35a777a85f4..b238eca1137 100644 --- a/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -12,6 +12,12 @@ public int streamType = STREAM_TYPE_BOTH; public int maxDurationMs = 120000; public int recorderInfoUpdateInterval = 0; + public int width; + public int height; + public int fps; + public int sample_rate; + public int channel_num; + public int videoSourceType; public MediaRecorderConfiguration(String storagePath, int containerFormat, int streamType, int maxDurationMs, int recorderInfoUpdateInterval) { @@ -20,6 +26,28 @@ this.streamType = streamType; this.maxDurationMs = maxDurationMs; this.recorderInfoUpdateInterval = recorderInfoUpdateInterval; + this.width = 1280; + this.height = 720; + this.fps = 30; + this.sample_rate = 48000; + this.channel_num = 1; + this.videoSourceType = 0; + } + + public MediaRecorderConfiguration(String storagePath, int containerFormat, int streamType, + int maxDurationMs, int recorderInfoUpdateInterval, int width, int height, int fps, + int sample_rate, int channel_num, int videoSourceType) { + this.storagePath = storagePath; + this.containerFormat = containerFormat; + this.streamType = streamType; + this.maxDurationMs = maxDurationMs; + this.recorderInfoUpdateInterval = recorderInfoUpdateInterval; + this.width = width; + this.height = height; + this.fps = fps; + this.sample_rate = sample_rate; + this.channel_num = channel_num; + this.videoSourceType = videoSourceType; } } export class MediaRecorderConfiguration { @@ -47,17 +75,52 @@ @property(assign, nonatomic) AgoraMediaRecorderContainerFormat containerFormat; @property(assign, nonatomic) AgoraMediaRecorderStreamType streamType; @property(assign, nonatomic) NSUInteger maxDurationMs; -@property(assign, nonatomic) NSUInteger recorderInfoUpdateInterval; +@property(assign, nonatomic) NSUInteger recorderInfoUpdateInterval; +@property(assign, nonatomic) NSUInteger width; +@property(assign, nonatomic) NSUInteger height; +@property(assign, nonatomic) NSUInteger fps; +@property(assign, nonatomic) NSUInteger sample_rate; +@property(assign, nonatomic) NSUInteger channel_num; +@property(assign, nonatomic) AgoraVideoSourceType videoSourceType; +@end struct MediaRecorderConfiguration { const char* storagePath; MediaRecorderContainerFormat containerFormat; MediaRecorderStreamType streamType; int maxDurationMs; int recorderInfoUpdateInterval; - - MediaRecorderConfiguration() : storagePath(NULL), containerFormat(FORMAT_MP4), streamType(STREAM_TYPE_BOTH), maxDurationMs(120000), recorderInfoUpdateInterval(0) {} - MediaRecorderConfiguration(const char* path, MediaRecorderContainerFormat format, MediaRecorderStreamType type, int duration, int interval) : storagePath(path), containerFormat(format), streamType(type), maxDurationMs(duration), recorderInfoUpdateInterval(interval) {} -}; + int width; + int height; + int fps; + int sample_rate; + int channel_num; + agora::rtc::VIDEO_SOURCE_TYPE videoSourceType; + + MediaRecorderConfiguration() + : storagePath(NULL), + containerFormat(FORMAT_MP4), + streamType(STREAM_TYPE_BOTH), + maxDurationMs(120000), + recorderInfoUpdateInterval(0), + width(1280), + height(720), + fps(30), + sample_rate(48000), + channel_num(1), + videoSourceType(rtc::VIDEO_SOURCE_CAMERA_PRIMARY) {} + MediaRecorderConfiguration(const char* path, MediaRecorderContainerFormat format, + MediaRecorderStreamType type, int duration, int interval) + : storagePath(path), + containerFormat(format), + streamType(type), + maxDurationMs(duration), + recorderInfoUpdateInterval(interval), + width(1280), + height(720), + fps(30), + sample_rate(48000), + channel_num(1), + videoSourceType(rtc::VIDEO_SOURCE_CAMERA_PRIMARY) {}}; USTRUCT(BlueprintType) struct FMediaRecorderConfiguration { diff --git a/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita b/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita index cd691274d8c..784722659b0 100644 --- a/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -7,8 +7,9 @@

    public class RecorderStreamInfo { - public String channelId; public int uid; + public String channelId; + public int recorderStreamType; } export class RecorderStreamInfo { @@ -24,15 +25,19 @@ } } __attribute__((visibility("default"))) @interface AgoraRecorderStreamInfo: NSObject - -@property (nonatomic, copy) NSString *_Nonnull channelId; @property (nonatomic, nonatomic) NSUInteger uid; - +@property (nonatomic, copy) NSString *_Nonnull channelId; +@property (assign, nonatomic) AgoraRecorderStreamType type; @end struct RecorderStreamInfo { - const char* channelId; - uid_t uid; - RecorderStreamInfo() : channelId(NULL), uid(0) {} + const char* channelId; + uid_t uid; + RecorderStreamType type; + RecorderStreamInfo() : channelId(NULL), uid(0), type(RTC) {} + RecorderStreamInfo(const char* channelId, uid_t uid) + : channelId(channelId), uid(uid), type(RTC) {} + RecorderStreamInfo(const char* channelId, uid_t uid, RecorderStreamType) + : channelId(channelId), uid(uid), type(RTC) {} }; USTRUCT(BlueprintType) struct FRecorderStreamInfo { diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 35d908bd426..4674891c57b 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1275,6 +1275,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1310,6 +1324,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1553,7 +1588,14 @@ - takeSnapshotEx + takeSnapshotEx [1/2] + + + + + + + takeSnapshotEx [2/2] @@ -4002,7 +4044,14 @@ - takeSnapshot + takeSnapshot [1/2] + + + + + + + takeSnapshot [2/2] @@ -5395,6 +5444,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5773,6 +5843,13 @@ + + + + SnapshotConfig + + + @@ -9065,6 +9142,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -11242,6 +11438,27 @@ + + + + RecorderStreamType + + + + + + + RTC + + + + + + + PREVIEW + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 543ef96b72e..8993137464f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1170,6 +1170,34 @@ + + + + getFaceShapeAreaOptions: + + + + + + + getFaceShapeAreaOptions:sourceType: + + + + + + + getFaceShapeBeautyOptions + + + + + + + getFaceShapeBeautyOptions:sourceType: + + + @@ -1240,7 +1268,49 @@ - + + + + setFaceShapeAreaOptions: + + + + + + + setFaceShapeAreaOptions:sourceType: + + + + + + + setFaceShapeBeautyOptions:options: + + + + + + + setFaceShapeBeautyOptions:options:sourceType: + + + + + + + setFilterEffectOptions:options:sourceType: + + + + + + + setFilterEffectOptions:options: + + + + setFaceInfoDelegate: @@ -1431,6 +1501,13 @@ + + + + takeSnapshotExWithConfig:uid:config: + + + @@ -3459,6 +3536,13 @@ + + + + takeSnapshotWithConfig:config: + + + @@ -4856,6 +4940,27 @@ AgoraVideoFrame + + + + + AgoraFaceShapeAreaOptions + + + + + + + AgoraFaceShapeBeautyOptions + + + + + + + AgoraFilterEffectOptions + + @@ -5179,6 +5284,13 @@ + + + + AgoraSnapshotConfig + + + @@ -8499,6 +8611,125 @@ + + + + AgoraFaceShapeArea + + + + + + + AgoraFaceShapeAreaNone + + + + + + + AgoraFaceShapeAreaHeadScale + + + + + + + AgoraFaceShapeAreaForehead + + + + + + + AgoraFaceShapeAreaFaceContour + + + + + + + AgoraFaceShapeAreaFaceLength + + + + + + + AgoraFaceShapeAreaFaceWidth + + + + + + + AgoraFaceShapeAreaCheekbone + + + + + + + AgoraFaceShapeAreaCheek + + + + + + + AgoraFaceShapeAreaChin + + + + + + + AgoraFaceShapeAreaEyeScale + + + + + + + AgoraFaceShapeAreaNoseLength + + + + + + + AgoraFaceShapeAreaNoseWidth + + + + + + + AgoraFaceShapeAreaMouthScale + + + + + + + AgoraFaceShapeStyle + + + + + + + AgoraFaceShapeStyleFemale + + + + + + + AgoraFaceShapeStyleMale + + + @@ -10354,6 +10585,27 @@ + + + + AgoraRecorderStreamType + + + + + + + AgoraRecorderStreamTypeRtc + + + + + + + AgoraRecorderStreamTypePreview + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index e7b792d8790..6975748c140 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1160,6 +1160,34 @@ + + + + getFaceShapeAreaOptions [1/2] + + + + + + + getFaceShapeAreaOptions [2/2] + + + + + + + getFaceShapeBeautyOptions [1/2] + + + + + + + getFaceShapeBeautyOptions [2/2] + + + @@ -1230,6 +1258,48 @@ + + + + setFaceShapeAreaOptions [1/2] + + + + + + + setFaceShapeAreaOptions [2/2] + + + + + + + setFaceShapeBeautyOptions [1/2] + + + + + + + setFaceShapeBeautyOptions [2/2] + + + + + + + setFilterEffectOptions [1/2] + + + + + + + setFilterEffectOptions [2/2] + + + @@ -1459,7 +1529,14 @@ - takeSnapshotEx + takeSnapshotEx [1/2] + + + + + + + takeSnapshotEx [2/2] @@ -3692,7 +3769,14 @@ - takeSnapshot + takeSnapshot [1/2] + + + + + + + takeSnapshot [2/2] @@ -5127,6 +5211,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5456,6 +5561,13 @@ + + + + SnapshotConfig + + + @@ -8524,6 +8636,111 @@ + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 144a4d2226c..5e837a149fd 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1120,6 +1120,34 @@ + + + + getFaceShapeAreaOptions: + + + + + + + getFaceShapeAreaOptions:sourceType: + + + + + + + getFaceShapeBeautyOptions + + + + + + + getFaceShapeBeautyOptions:sourceType: + + + @@ -1190,6 +1218,48 @@ + + + + setFaceShapeAreaOptions: + + + + + + + setFaceShapeAreaOptions:sourceType: + + + + + + + setFaceShapeBeautyOptions:options: + + + + + + + setFaceShapeBeautyOptions:options:sourceType: + + + + + + + setFilterEffectOptions:options:sourceType: + + + + + + + setFilterEffectOptions:options: + + + @@ -1395,6 +1465,13 @@ + + + + takeSnapshotExWithConfig:uid:config: + + + @@ -3198,6 +3275,13 @@ + + + + takeSnapshotWithConfig:config: + + + @@ -4545,6 +4629,27 @@ + + + + AgoraFaceShapeAreaOptions + + + + + + + AgoraFaceShapeBeautyOptions + + + + + + + AgoraFilterEffectOptions + + + @@ -4804,6 +4909,13 @@ + + + + AgoraSnapshotConfig + + + @@ -8061,6 +8173,125 @@ + + + + AgoraFaceShapeArea + + + + + + + AgoraFaceShapeAreaNone + + + + + + + AgoraFaceShapeAreaHeadScale + + + + + + + AgoraFaceShapeAreaForehead + + + + + + + AgoraFaceShapeAreaFaceContour + + + + + + + AgoraFaceShapeAreaFaceLength + + + + + + + AgoraFaceShapeAreaFaceWidth + + + + + + + AgoraFaceShapeAreaCheekbone + + + + + + + AgoraFaceShapeAreaCheek + + + + + + + AgoraFaceShapeAreaChin + + + + + + + AgoraFaceShapeAreaEyeScale + + + + + + + AgoraFaceShapeAreaNoseLength + + + + + + + AgoraFaceShapeAreaNoseWidth + + + + + + + AgoraFaceShapeAreaMouthScale + + + + + + + AgoraFaceShapeStyle + + + + + + + AgoraFaceShapeStyleFemale + + + + + + + AgoraFaceShapeStyleMale + + + @@ -9827,6 +10058,27 @@ + + + + AgoraRecorderStreamType + + + + + + + AgoraRecorderStreamTypeRtc + + + + + + + AgoraRecorderStreamTypePreview + + + From b965ac089b48d4982fda6090b0834e911d3705e6 Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 31 Oct 2024 16:54:07 +0800 Subject: [PATCH 208/354] Update keys-rtc-ng-api-java.ditamap --- dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 6975748c140..9189ab7876a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -8006,6 +8006,13 @@ + + + + MAINTAIN_AUTO + + + From 16257dae9a15dceedfcf673bc124d3d514689727 Mon Sep 17 00:00:00 2001 From: jinyuagora Date: Thu, 31 Oct 2024 08:54:41 +0000 Subject: [PATCH 209/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 6975748c140..9189ab7876a 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -8006,6 +8006,13 @@ + + + + MAINTAIN_AUTO + + + From 5cdc1a443d9ddf71527f2f0312e981bcdf10f3ec Mon Sep 17 00:00:00 2001 From: Cilla-luodan Date: Thu, 31 Oct 2024 10:17:47 +0000 Subject: [PATCH 210/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++++++ en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 +++++++ en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 4674891c57b..7fbed80ed0f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -8512,6 +8512,13 @@ + + + + MAINTAIN_AUTO + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 8993137464f..bb1ac3db55d 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -7925,6 +7925,13 @@ + + + + AgoraDegradationMaintainAuto + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 5e837a149fd..aeadc1b5a26 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -7487,6 +7487,13 @@ + + + + AgoraDegradationMaintainAuto + + + From 2878b50d254b5e613483b0477505052939ecd498 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 4 Nov 2024 14:32:06 +0800 Subject: [PATCH 211/354] resolve comments --- dita/RTC-NG/API/api_canvas_canvas.dita | 3 +-- dita/RTC-NG/API/api_config_getappid.dita | 3 +-- dita/RTC-NG/API/api_config_setappid.dita | 6 +++--- dita/RTC-NG/API/api_config_setjsonparameter.dita | 2 +- dita/RTC-NG/API/api_error_code.dita | 4 ++-- dita/RTC-NG/API/api_player_getinfo.dita | 4 ++-- dita/RTC-NG/API/api_player_getstats.dita | 9 ++++++--- dita/RTC-NG/API/api_player_muteaudio.dita | 4 ++-- dita/RTC-NG/API/api_player_mutevideo.dita | 4 ++-- dita/RTC-NG/API/api_player_pause.dita | 4 ++-- dita/RTC-NG/API/api_player_play.dita | 4 ++-- dita/RTC-NG/API/api_player_player.dita | 4 ++-- dita/RTC-NG/API/api_player_preloadwithurl.dita | 6 +++--- dita/RTC-NG/API/api_player_registerobserver.dita | 3 +-- dita/RTC-NG/API/api_player_setcanvas.dita | 4 ++-- dita/RTC-NG/API/api_player_stop.dita | 6 +++--- .../api_playerconfig_getabrfallbacklayer.dita | 4 ++-- ...api_playerconfig_getabrsubscriptionlayer.dita | 6 +++--- .../API/api_playerconfig_getjsonparameter.dita | 4 ++-- .../api_playerconfig_setabrfallbacklayer.dita | 7 +++---- ...api_playerconfig_setabrsubscriptionlayer.dita | 8 +++++--- .../RTC-NG/API/api_playerconfig_setautoplay.dita | 2 +- dita/RTC-NG/API/api_rte_getfrombridge.dita | 6 +++--- dita/RTC-NG/API/api_rte_initmediaengine.dita | 2 +- dita/RTC-NG/API/class_canvasconfig.dita | 2 +- dita/RTC-NG/API/class_error.dita | 8 ++++---- dita/RTC-NG/API/class_rteplayerinfo.dita | 16 ++++++++-------- dita/RTC-NG/API/class_rteplayerstats.dita | 14 +++----------- 28 files changed, 71 insertions(+), 78 deletions(-) diff --git a/dita/RTC-NG/API/api_canvas_canvas.dita b/dita/RTC-NG/API/api_canvas_canvas.dita index bb991c0516c..7505de86e38 100644 --- a/dita/RTC-NG/API/api_canvas_canvas.dita +++ b/dita/RTC-NG/API/api_canvas_canvas.dita @@ -30,12 +30,11 @@

    v4.5.0
    -

    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index 8388aaa3fce..5ecc0d50250 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -45,8 +45,7 @@
    - <ph keyref="return-section-title"/> - <ph props="android">异常</ph> + <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    • 方法调用成功,返回设置的 App ID。
    • diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index bb6b8c0e8a4..f78d01bfb38 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -33,8 +33,8 @@
    调用时机 -

    该方法需要在 之前调用。

    -
    +

    该方法需要在 之前调用。

    +
    调用限制

    无。

    @@ -53,6 +53,6 @@
    异常 -

    调用失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    +

    调用该方法失败时,SDK 会抛出 异常,并返回相应的错误信息。你需要捕获异常并进行处理。

    diff --git a/dita/RTC-NG/API/api_config_setjsonparameter.dita b/dita/RTC-NG/API/api_config_setjsonparameter.dita index 93d8895ddee..4118976314f 100644 --- a/dita/RTC-NG/API/api_config_setjsonparameter.dita +++ b/dita/RTC-NG/API/api_config_setjsonparameter.dita @@ -2,7 +2,7 @@ <ph keyref="SetJsonParameter_Config"/> - 设置 SDK 的 JSON 配置信息。 + 通过 JSON 配置 SDK 提供技术预览或特别定制功能。 diff --git a/dita/RTC-NG/API/api_error_code.dita b/dita/RTC-NG/API/api_error_code.dita index 983e1142ac9..dbf95033efb 100644 --- a/dita/RTC-NG/API/api_error_code.dita +++ b/dita/RTC-NG/API/api_error_code.dita @@ -34,8 +34,8 @@
    调用时机 -

    某一接口调用失败时调用此方法,以获取具体的错误码。

    -
    +

    当调用 API 失败时,可调用此方法以获取错误码。

    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_getinfo.dita b/dita/RTC-NG/API/api_player_getinfo.dita index 783081f27b8..91d7466c032 100644 --- a/dita/RTC-NG/API/api_player_getinfo.dita +++ b/dita/RTC-NG/API/api_player_getinfo.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    你可以通过该方法获取播放器及媒体流的相关信息,例如媒体流的数量、音频采样率、视频分辨率宽高等信息。

    +

    你可以通过该方法获取播放器及媒体流的相关信息,例如音频采样率、视频帧的尺寸等信息。

    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index e66b98fba35..e2de94c3bdd 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -2,7 +2,7 @@ <ph keyref="GetStats"/> - 获取播放器所播放的媒体资源的统计信息。 + 获取播放器当前播放的媒体资源的统计信息。 @@ -35,7 +35,7 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    @@ -45,7 +45,10 @@ cb - 一个异步回调函数,用于通知获取播放器媒体资源统计信息的结果和错误信息。你可以通过该回调的 stats 参数得知统计数据,详见 。如果获取信息失败,你可以通过该回调的 err 参数获取错误信息,详见 + 一个异步回调函数,用于通知获取播放器媒体资源统计信息的结果和错误信息。该函数包含以下参数: +
      +
    • stats: 播放器当前播放的媒体资源的统计数据,详见
    • +
    • err: 参数获取错误信息,详见
    callback diff --git a/dita/RTC-NG/API/api_player_muteaudio.dita b/dita/RTC-NG/API/api_player_muteaudio.dita index 57abf1d14cb..601dfa0c155 100644 --- a/dita/RTC-NG/API/api_player_muteaudio.dita +++ b/dita/RTC-NG/API/api_player_muteaudio.dita @@ -2,7 +2,7 @@ <ph keyref="MuteAudio"/> - 是否订阅主播的音频流。 + 订阅或取消订阅主播的音频流。 @@ -42,7 +42,7 @@
    参数 diff --git a/dita/RTC-NG/API/api_player_mutevideo.dita b/dita/RTC-NG/API/api_player_mutevideo.dita index a926bd32496..6d4a2f94219 100644 --- a/dita/RTC-NG/API/api_player_mutevideo.dita +++ b/dita/RTC-NG/API/api_player_mutevideo.dita @@ -2,7 +2,7 @@ <ph keyref="MuteVideo"/> - 是否订阅主播的视频流。 + 订阅或取消订阅主播的视频流。 @@ -35,7 +35,7 @@
    调用时机

    -

    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_pause.dita b/dita/RTC-NG/API/api_player_pause.dita index 7f7e5096bf5..deebae33574 100644 --- a/dita/RTC-NG/API/api_player_pause.dita +++ b/dita/RTC-NG/API/api_player_pause.dita @@ -30,12 +30,12 @@
    v4.5.0
    -

    当你调用 播放 URL 流后,如果你想暂停播放,可以调用此方法。如果你想要停止播放,请调用

    +

    当你调用 播放 URL 资源后,如果你想暂停播放,可以调用此方法。如果你想要停止播放,请调用

    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_play.dita b/dita/RTC-NG/API/api_player_play.dita index 9bf3d194c94..707ca6135da 100644 --- a/dita/RTC-NG/API/api_player_play.dita +++ b/dita/RTC-NG/API/api_player_play.dita @@ -34,8 +34,8 @@
    调用时机 -

    请在收到 会调报告状态为 后再调用该方法。

    -
    +

    请在收到 回调报告状态为 后再调用该方法。

    +
    调用限制

    该方法目前仅支持播放带 rte:// 前缀的 URL。

    diff --git a/dita/RTC-NG/API/api_player_player.dita b/dita/RTC-NG/API/api_player_player.dita index 66339ac8894..e934480e051 100644 --- a/dita/RTC-NG/API/api_player_player.dita +++ b/dita/RTC-NG/API/api_player_player.dita @@ -35,7 +35,7 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    @@ -46,7 +46,7 @@ rte Rte - 对象。 + 一个 对象。 config diff --git a/dita/RTC-NG/API/api_player_preloadwithurl.dita b/dita/RTC-NG/API/api_player_preloadwithurl.dita index 06a4771e08f..1e8c594282a 100644 --- a/dita/RTC-NG/API/api_player_preloadwithurl.dita +++ b/dita/RTC-NG/API/api_player_preloadwithurl.dita @@ -35,12 +35,12 @@
    适用场景 -

    在打开视频或音频之前,提前加载可以减少用户等待时间,提供更流畅的视听体验。

    +

    在打开媒体资源之前,提前加载可以减少用户等待时间,提供更流畅的视听体验。

    调用时机

    该方法需要在 之前调用。

    -
    +
    调用限制

    该方法目前仅对带 rte:// 前缀的 URL 生效,最多可以预加载 20 个 URL。如果超出限制,新预加载的 URL 将会替换最早的 URL。

    @@ -52,7 +52,7 @@ url rte:// 前缀的 URL。

    各字段的详细说明详见

    - + diff --git a/dita/RTC-NG/API/api_player_registerobserver.dita b/dita/RTC-NG/API/api_player_registerobserver.dita index 21a0eda8d9a..155b2f26920 100644 --- a/dita/RTC-NG/API/api_player_registerobserver.dita +++ b/dita/RTC-NG/API/api_player_registerobserver.dita @@ -34,8 +34,7 @@
    调用时机 -

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_setcanvas.dita b/dita/RTC-NG/API/api_player_setcanvas.dita index 426df33b9a1..44a0a9edc59 100644 --- a/dita/RTC-NG/API/api_player_setcanvas.dita +++ b/dita/RTC-NG/API/api_player_setcanvas.dita @@ -2,7 +2,7 @@ <ph keyref="SetCanvas"/> - 设置 Canvas 以显示视频。 + 设置视图窗口以显示视频。 @@ -35,7 +35,7 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_stop.dita b/dita/RTC-NG/API/api_player_stop.dita index 4237364adcd..59d8f8a67e4 100644 --- a/dita/RTC-NG/API/api_player_stop.dita +++ b/dita/RTC-NG/API/api_player_stop.dita @@ -2,7 +2,7 @@ <ph keyref="Stop_Player"/> - 停止播放。 + 停止播放媒体资源。 @@ -30,13 +30,13 @@
    v4.5.0
    -

    如果你调用 打开 URL 流失败,需要先调用此方法,然后再调用 重新打开 URL。

    当你成功打开 URL 流并调用 播放后,如果你想停止播放,可以调用此方法。如果你需要暂停播放,请调用

    +

    如果你调用 打开 URL 流失败,需要先调用此方法,然后再调用 重新打开 URL。

    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita index affaaf80394..55f46eaec20 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita @@ -2,7 +2,7 @@ <ph keyref="GetAbrFallbackLayer"/> - 获取设置的视频流回退选项。 + 获取已设置的视频流回退选项。 @@ -35,7 +35,7 @@
    调用时机

    -

    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita index cbbddf0d5d0..611439c1c4a 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita @@ -2,7 +2,7 @@ <ph keyref="GetAbrSubscriptionLayer"/> - 获取所订阅的视频流的质量层级。 + 获取所订阅的视频流的质量层级。 @@ -35,7 +35,7 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    @@ -50,7 +50,7 @@
    <ph keyref="return-section-title"/> -

    设置的视频质量层级,详见

    +

    当前设置的视频质量层级,详见

    diff --git a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita index 45d731102ff..ab75e1cdbd5 100644 --- a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita @@ -30,12 +30,12 @@
    v4.5.0
    - 当你调用 设置 JSON 配置信息后,你可以调用该方法获取已设置的配置信息。 +

    当你调用 设置 JSON 配置信息后,你可以调用该方法获取已设置的配置信息。

    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita index 9976a6d4d42..015be2e5d4c 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrfallbacklayer.dita @@ -2,7 +2,7 @@ <ph keyref="SetAbrFallbackLayer"/> - 设置订阅的视频流的回退选项。 + 设置已订阅的视频流的回退选项。 @@ -35,12 +35,11 @@
    适用场景 -

    • 在一般场景下,你可以调用该方法并将回退的质量层级设为 ,SDK 会在网络情况差的时候将视频流回退为低质量的视频流、或是仅接收音频流。
    • -
    • 如果对视频流回退的分辨率要求较高,可以联系开通 ABR 功能。开通后,你可以自定义每个层级的分辨率。SDK 会以你指定的最低质量层级分辨率为下限,在此范围内根据网络状况动态调整分辨率。 +
    • 如果对视频流回退的分辨率要求较高,可以联系开通 ABR 功能。开通后,你可以自定义每个层级的分辨率。SDK 会以你指定的最低质量层级分辨率为下限,在此范围内根据网络状况动态调整分辨率。 详细功能实现详见 -

    +
    调用时机 diff --git a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita index aa0ff2b18db..89147333fd4 100644 --- a/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_setabrsubscriptionlayer.dita @@ -54,7 +54,10 @@ abr_subscription_layer layer 订阅的视频质量层级,详见 。 -

    在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: +

    在自定义 的分辨率时,可以参考下表进行设置,你也可以根据实际需求自行设置: + 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。 + + 视频质量层级 分辨率 @@ -86,8 +89,7 @@ 480p(SD)

    - 自定义分辨率时请务必将视频质量层级(Layer)按分辨率从大到小进行排序,分辨率相同时需按帧率从大到小进行排序。 -
    + diff --git a/dita/RTC-NG/API/api_playerconfig_setautoplay.dita b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita index fd3459b1768..5398607962c 100644 --- a/dita/RTC-NG/API/api_playerconfig_setautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_setautoplay.dita @@ -35,7 +35,7 @@
    调用时机

    该方法需要在 之前调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_rte_getfrombridge.dita b/dita/RTC-NG/API/api_rte_getfrombridge.dita index 5ffc88a613e..e600428bdb4 100644 --- a/dita/RTC-NG/API/api_rte_getfrombridge.dita +++ b/dita/RTC-NG/API/api_rte_getfrombridge.dita @@ -2,7 +2,7 @@ <ph keyref="GetFromBridge"/> - 从 RTC 引擎中桥接出一个 RTE 对象。 + 中桥接出一个 RTE 对象。 @@ -30,12 +30,12 @@
    v4.5.0
    -

    调用该方法创建的 RTE 对象,无需再通过 进行初始化。如果你之前未创建并初始化 RTC 引擎, 可以先调用 创建一个 RTE对象,然后再调用 进行初始化。

    +

    调用该方法创建的 RTE 对象,无需再通过 进行初始化。如果你之前未创建并初始化 RTC 引擎,可以先调用 创建一个 RTE 对象,然后再调用 进行初始化。

    调用时机

    调用该方法前,请确保已调用 初始化 RTC 引擎。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_rte_initmediaengine.dita b/dita/RTC-NG/API/api_rte_initmediaengine.dita index 6a725942390..71b888fe43f 100644 --- a/dita/RTC-NG/API/api_rte_initmediaengine.dita +++ b/dita/RTC-NG/API/api_rte_initmediaengine.dita @@ -35,7 +35,7 @@
    调用时机

    该方法需要在创建 RTE 对象并设置 App ID 后调用。

    -
    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/class_canvasconfig.dita b/dita/RTC-NG/API/class_canvasconfig.dita index 1380e0dd022..2c036a23f4b 100644 --- a/dita/RTC-NG/API/class_canvasconfig.dita +++ b/dita/RTC-NG/API/class_canvasconfig.dita @@ -2,7 +2,7 @@ <ph keyref="CanvasConfig"/> - 该类提供设置视频渲染的相关方法。 + 该类提供设置播放器视频渲染的相关方法。

    diff --git a/dita/RTC-NG/API/class_error.dita b/dita/RTC-NG/API/class_error.dita index a81653b1b9c..446fd70646f 100644 --- a/dita/RTC-NG/API/class_error.dita +++ b/dita/RTC-NG/API/class_error.dita @@ -38,12 +38,12 @@ 方法 - - 获取接口调用返回的错误码,详见 + + 获取 API 调用返回的错误码,详见 - - 获取接口调用返回的具体错误信息,详见 + + 获取 API 调用返回的具体错误信息,详见

    diff --git a/dita/RTC-NG/API/class_rteplayerinfo.dita b/dita/RTC-NG/API/class_rteplayerinfo.dita index 45e2d7c0bb7..2cd9a5d2fe2 100644 --- a/dita/RTC-NG/API/class_rteplayerinfo.dita +++ b/dita/RTC-NG/API/class_rteplayerinfo.dita @@ -8,10 +8,10 @@

    public class PlayerInfo { public int state(); - public long duration(); + public long duration(); public int streamCount(); public boolean hasAudio(); - public boolean hasVideo(); + public boolean hasVideo(); public boolean isAudioMuted(); public boolean isVideoMuted(); public int videoHeight(); @@ -23,8 +23,8 @@ } @interface AgoraRtePlayerInfo : NSObject -- (int)state; -- (long)duration; +- (int)state; +- (long)duration; - (int)streamCount; - (BOOL)hasAudio; - (BOOL)hasVideo; @@ -38,8 +38,8 @@ - (int)audioBitsPerSample; @end typedef struct RtePlayerInfo { - RtePlayerState state; - size_t duration; + RtePlayerState state; + size_t duration; size_t stream_count; bool has_audio; bool has_video; @@ -113,12 +113,12 @@ video_height videoHeight - 视频的高度(px)。 + 视频帧的高度(px)。 video_width videoWidth - 视频的宽度(px)。 + 视频帧的宽度(px)。 abr_subscription_layer diff --git a/dita/RTC-NG/API/class_rteplayerstats.dita b/dita/RTC-NG/API/class_rteplayerstats.dita index d2145369316..6bf335986b4 100644 --- a/dita/RTC-NG/API/class_rteplayerstats.dita +++ b/dita/RTC-NG/API/class_rteplayerstats.dita @@ -8,9 +8,9 @@

    public class PlayerStats { public int videoDecodeFrameRate() - public int videoRenderFrameRate() - public int videoBitrate() - public int audioBitrate() + public int videoRenderFrameRate() + public int videoBitrate() + public int audioBitrate() } __attribute__((visibility("default"))) @interface AgoraRtePlayerStats : NSObject @@ -67,13 +67,5 @@ 音频码率(Kbps)。

    -
    - 方法 - - - //TODO oc 的init 是否需要写文档 - - -
    From a9b8d152e093d50eddc2d342816ea44efa448e0b Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 4 Nov 2024 15:15:50 +0800 Subject: [PATCH 212/354] add release HH --- dita/RTC-NG/release/release_notes.dita | 42 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 6125bec4ec4..1fbf0c30a0e 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -1,7 +1,7 @@ - v4.5.6 + v4.5.0

    该版本于 2034 年 11 月 x 日发布。

    @@ -62,7 +62,8 @@

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

  • 强效视频降噪实现变更 -

    +

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    +

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

  • 摄像头插拔状态变更 (macOS, Windows)

    @@ -92,6 +93,16 @@
  • 秀场直播场景

  • +
  • 高级美颜 +

    该版本新增以下两种高级美颜功能: +

      +
    • 美型:调用 方法,可对人脸各部位进行修饰,你可以使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,并微调整体的修饰力度。如果预设的美型效果不能满足你的需求,你可以调用 方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。
    • +
    • 美妆:调用 方法,传入指定参数,可实现眼影、美瞳、眼线、美眉、唇彩、腮红等美妆特效。
    • +
    + 有关美型和美妆的实现步骤,详见 + 目前,高级美颜功能为限时免费,详见 +

    +
  • 限制视频渲染帧率

    该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

    在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

    @@ -136,20 +147,14 @@
    1. 虚拟背景算法优化 -
        -
      • -
      • -
    2. +

      该版本升级了虚拟背景的算法,分割人像主体部分与背景时更加准确,背景无露出,人像身体轮廓无缺块,手指细节辨识显著提高。同时,人像与背景的边缘更加稳定,减少了连续视频帧中人像边缘的跳变和闪烁现象。

      +
    3. 录制本地预览视频 -
        -
      • -
      • -
    4. +

      该版本在 中新增 type 成员。当调用 时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 即可开始录制本地预览的视频。

      +
    5. 指定视频观测位置截图 -
        -
      • -
      • -
    6. +

      该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

      +
      • @@ -161,6 +166,7 @@
      • 其他改进
        • 通过拼接视频帧和 Alpha 数据实现 Alpha 透明特效的应用场景下,提升了接收端的渲染性能,有效减少卡顿和延迟。(Android, iOS)
        • +
        • 优化了调用 获取设备评分等级的设计逻辑,提升了等级评分结果的准确性。
    @@ -177,6 +183,14 @@
  • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
  • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
  • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
  • +
  • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
  • +
  • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
  • +
  • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
  • +
  • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
  • +
  • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
  • +
  • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
  • +
  • 调用 后,立即调用 暂停播放音乐文件不生效。
  • +
  • From eccead2957b6ef4e71520bb45a6c3014a852de8a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 4 Nov 2024 15:50:28 +0800 Subject: [PATCH 213/354] update --- dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita | 6 +++--- dita/RTC-NG/API/api_canvasconfig_getrendermode.dita | 8 ++++---- dita/RTC-NG/API/api_config_getappid.dita | 6 +++--- dita/RTC-NG/API/api_config_getjsonparameter.dita | 10 +++++----- dita/RTC-NG/API/api_error_message.dita | 7 +++---- dita/RTC-NG/API/api_player_getstats.dita | 2 +- dita/RTC-NG/API/api_player_pause.dita | 6 +++--- dita/RTC-NG/API/api_player_play.dita | 6 +++--- dita/RTC-NG/API/api_player_stop.dita | 6 +++--- .../API/api_playerconfig_getabrfallbacklayer.dita | 6 +++--- .../API/api_playerconfig_getabrsubscriptionlayer.dita | 6 +++--- dita/RTC-NG/API/api_playerconfig_getautoplay.dita | 8 ++++---- .../RTC-NG/API/api_playerconfig_getjsonparameter.dita | 6 +++--- ...llback_playerobserver_onaudiovolumeindication.dita | 11 +++-------- dita/RTC-NG/API/class_canvasconfig.dita | 4 ---- dita/RTC-NG/API/class_error.dita | 1 - dita/RTC-NG/API/class_playerconfig.dita | 5 ++--- dita/RTC-NG/API/rtc_api_data_type.dita | 1 - dita/RTC-NG/API/toc_rte_basic.dita | 7 ------- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 10 ++++++---- 21 files changed, 53 insertions(+), 70 deletions(-) delete mode 100644 dita/RTC-NG/API/toc_rte_basic.dita diff --git a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita index 4aff9950836..c1c8ccc2652 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getmirrormode.dita @@ -37,9 +37,9 @@ 调用限制

    无。

  • -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita index b78d8600121..94819569129 100644 --- a/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita +++ b/dita/RTC-NG/API/api_canvasconfig_getrendermode.dita @@ -34,14 +34,14 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_config_getappid.dita b/dita/RTC-NG/API/api_config_getappid.dita index 5ecc0d50250..a31420f4b07 100644 --- a/dita/RTC-NG/API/api_config_getappid.dita +++ b/dita/RTC-NG/API/api_config_getappid.dita @@ -36,9 +36,9 @@ 调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_config_getjsonparameter.dita b/dita/RTC-NG/API/api_config_getjsonparameter.dita index 82391729f04..4b59767c05b 100644 --- a/dita/RTC-NG/API/api_config_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_config_getjsonparameter.dita @@ -35,14 +35,14 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + @@ -55,7 +55,7 @@
    • 方法调用成功,返回设置的 JSON 配置信息。
    • 方法调用失败,返回空字符串。
    • -
    +

    diff --git a/dita/RTC-NG/API/api_error_message.dita b/dita/RTC-NG/API/api_error_message.dita index 3bc66b1a84e..77a44f4df06 100644 --- a/dita/RTC-NG/API/api_error_message.dita +++ b/dita/RTC-NG/API/api_error_message.dita @@ -30,12 +30,11 @@
    v4.5.0
    -

    当你调用 获取错误码后,可以调用该方法获取错误信息来帮助排查问题。

    -
    +
    调用时机 -

    -
    +

    当 API 调用失败后,你可以调用该方法获取错误信息来帮助排查问题。

    +
    调用限制

    无。

    diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index e2de94c3bdd..2aced220929 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -48,7 +48,7 @@ 一个异步回调函数,用于通知获取播放器媒体资源统计信息的结果和错误信息。该函数包含以下参数:
    • stats: 播放器当前播放的媒体资源的统计数据,详见
    • -
    • err: 参数获取错误信息,详见
    +
  • err: 参数获取错误信息,详见
  • callback diff --git a/dita/RTC-NG/API/api_player_pause.dita b/dita/RTC-NG/API/api_player_pause.dita index deebae33574..4ed5d9b3709 100644 --- a/dita/RTC-NG/API/api_player_pause.dita +++ b/dita/RTC-NG/API/api_player_pause.dita @@ -44,9 +44,9 @@ 相关回调

    成功调用该方法后会触发 回调,报告播放器状态为

    -
    - 参数 - +
    + <ph props="cpp apple">参数</ph> + diff --git a/dita/RTC-NG/API/api_player_play.dita b/dita/RTC-NG/API/api_player_play.dita index 707ca6135da..214ec8d86a3 100644 --- a/dita/RTC-NG/API/api_player_play.dita +++ b/dita/RTC-NG/API/api_player_play.dita @@ -44,9 +44,9 @@ 相关回调

    成功调用该方法后,会触发 回调来报告播放器状态。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_player_stop.dita b/dita/RTC-NG/API/api_player_stop.dita index 59d8f8a67e4..dc63ec58966 100644 --- a/dita/RTC-NG/API/api_player_stop.dita +++ b/dita/RTC-NG/API/api_player_stop.dita @@ -45,9 +45,9 @@ 相关回调

    成功调用该方法后会触发 回调,并报告播放器状态为

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita index 55f46eaec20..aa8806cb2a7 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrfallbacklayer.dita @@ -40,9 +40,9 @@ 调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple">参数</ph> + diff --git a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita index 611439c1c4a..e219a320286 100644 --- a/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita +++ b/dita/RTC-NG/API/api_playerconfig_getabrsubscriptionlayer.dita @@ -40,9 +40,9 @@ 调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita index b3fb8261f3d..639b2b810bb 100644 --- a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita @@ -36,14 +36,14 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita index ab75e1cdbd5..795ba97bf3d 100644 --- a/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_playerconfig_getjsonparameter.dita @@ -40,9 +40,9 @@ 调用限制

    无。

    -
    - 参数 - +
    + <ph props="cpp apple framework">参数</ph> + diff --git a/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita b/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita index 1c3e467eabd..191796adfa3 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onaudiovolumeindication.dita @@ -2,7 +2,7 @@ <ph keyref="onAudioVolumeIndication_PlayerObserver"/> - //TODO 主播音量提示回调。这个不是播放器的音量? + 主播音量提示回调。 @@ -31,16 +31,11 @@
    v4.5.0
    -

    -
    -
    - 适用场景 -

    触发时机 -

    当主播的音量发生变化时,SDK 会触发该回调。//TODO 触发频率?主播静音后,会继续报告音量为 0 吗?

    -
    +

    当主播的音量发生变化时,SDK 会触发该回调。

    +
    使用限制

    无。

    diff --git a/dita/RTC-NG/API/class_canvasconfig.dita b/dita/RTC-NG/API/class_canvasconfig.dita index 2c036a23f4b..4ba4f34256d 100644 --- a/dita/RTC-NG/API/class_canvasconfig.dita +++ b/dita/RTC-NG/API/class_canvasconfig.dita @@ -46,10 +46,6 @@
    方法 - - - 构造一个 CanvasConfig 对象。详见 - 设置视频的渲染模式。详见 diff --git a/dita/RTC-NG/API/class_error.dita b/dita/RTC-NG/API/class_error.dita index 446fd70646f..dae341c7188 100644 --- a/dita/RTC-NG/API/class_error.dita +++ b/dita/RTC-NG/API/class_error.dita @@ -32,7 +32,6 @@
    v4.5.0
    -

    方法 diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index 7b5c7969c68..457f5d9eeb1 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -7,7 +7,7 @@

    public class PlayerConfig { - + public PlayerConfig(); public void setAutoPlay(boolean autoPlay) throws RteException; public boolean getAutoPlay() throws RteException; @@ -27,7 +27,6 @@ @end class PlayerConfig { public: - PlayerConfig();//TODO void SetAutoPlay(bool auto_play, Error *err = nullptr); bool GetAutoPlay(Error *err = nullptr); void SetAbrSubscriptionLayer(AbrSubscriptionLayer abr_subscription_layer, Error *err = nullptr); @@ -76,7 +75,7 @@ 获取设置的视频流回退选项。详见 - +

    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 204e6f3ced1..fe27455c0e5 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -22,7 +22,6 @@
  • -
  • diff --git a/dita/RTC-NG/API/toc_rte_basic.dita b/dita/RTC-NG/API/toc_rte_basic.dita deleted file mode 100644 index 7df349927c6..00000000000 --- a/dita/RTC-NG/API/toc_rte_basic.dita +++ /dev/null @@ -1,7 +0,0 @@ - - - - RTE 初始化相关//TODO - - - diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index bf52f60854b..7dddd2899d6 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -16,6 +16,7 @@ + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 4ad37405e76..c97528fff27 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3294,7 +3294,7 @@ - + @@ -3305,7 +3305,7 @@ - + @@ -3318,6 +3318,7 @@ + @@ -3327,7 +3328,7 @@ - + @@ -3338,7 +3339,7 @@ - + @@ -3391,6 +3392,7 @@ + From e3726626831c24d2a2e667967b09513b488e9735 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 4 Nov 2024 07:57:51 +0000 Subject: [PATCH 214/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-blueprint.ditamap | 2 +- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 794 +++++++++++++++++- .../config/keys-rtc-ng-api-unreal.ditamap | 2 +- 3 files changed, 788 insertions(+), 10 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index f07dddd7182..ec9e6afed07 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -9637,7 +9637,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 7fbed80ed0f..1f6c9eed926 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -301,6 +301,48 @@ + + + + Canvas + + + + + + + CanvasConfig + + + + + + + Rte + + + + + + + Player + + + + + + + PlayerConfig + + + + + + + PlayerObserver + + + @@ -951,6 +993,354 @@ + + + + + AddView + + + + + + + Code + + + + + + + Message + + + + + + + GetAutoPlay + + + + + + + GetFromBridge + + + + + + + Rte + + + + + + + InitMediaEngine + + + + + + + RegisterObserver [1/2] + + + + + + + UnregisterObserver [1/2] + + + + + + + SetAutoPlay + + + + + + + SetAppId + + + + + + + SetCanvas + + + + + + + SetRenderMode + + + + + + + SetAbrFallbackLayer + + + + + + + SetAbrSubscriptionLayer + + + + + + + GetAbrFallbackLayer + + + + + + + GetAbrSubscriptionLayer + + + + + + + GetAppId + + + + + + + GetStats + + + + + + + GetMirrorMode + + + + + + + GetRenderMode + + + + + + + MuteAudio + + + + + + + MuteVideo + + + + + + + SetConfigs [1/3] + + + + + + + SetConfigs [2/3] + + + + + + + SetConfigs [3/3] + + + + + + + SetMirrorMode + + + + + + + SetJsonParameter + + + + + + + SetJsonParameter [2/2] + + + + + + + GetConfigs [1/3] + + + + + + + GetConfigs [2/3] + + + + + + + GetConfigs [3/3] + + + + + + + GetInfo + + + + + + + GetJsonParameter + + + + + + + GetJsonParameter [2/2] + + + + + + + + Pause + + + + + + + Play + + + + + + + Player + + + + + + + PreloadWithUrl + + + + + + + RemoveView + + + + + + + RegisterObserver + + + + + + + Stop + + + + + + + OpenWithUrl + + + + + + + UnregisterObserver + + + + + + + + + onEvent + + + + + + + onMetadata [2/2] + + + + + + + onPlayerInfoUpdated [2/2] + + + + + + + onResolutionChanged + + + + + + + onStateChanged + + + + @@ -4611,7 +5001,7 @@ - onMetaData + onMetaData [1/2] @@ -4695,7 +5085,7 @@ - onPlayerInfoUpdated + onPlayerInfoUpdated [1/2] @@ -5297,6 +5687,13 @@ + + + + Canvas + + + @@ -5367,6 +5764,13 @@ + + + + Config + + + @@ -5430,6 +5834,13 @@ + + + + Error + + + @@ -5759,17 +6170,31 @@ - + + + + RtcEngineContext + + + + + + + RtcImage + + + + - RtcEngineContext + RtePlayerInfo - + - RtcImage + RtePlayerStats @@ -10066,7 +10491,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN @@ -11144,6 +11569,90 @@ + + + + RteErrorCode + + + + + + + kRteOk + + + + + + + kRteErrorDefault + + + + + + + kRteErrorInvalidArgument + + + + + + + kRteErrorInvalidOperation + + + + + + + kRteErrorNetworkError + + + + + + + kRteErrorAuthenticationFailed + + + + + + + kRteErrorStreamNotFound + + + + + + + RteVideoMirrorMode + + + + + + + kRteVideoMirrorModeAuto + + + + + + + kRteVideoMirrorModeEnabled + + + + + + + kRteVideoMirrorModeDisabled + + + @@ -11298,6 +11807,174 @@ + + + + RteAbrFallbackLayer + + + + + + + kRteAbrFallbackDisabled + + + + + + + kRteAbrFallbackLow + + + + + + + kRteAbrFallbackAudioOnly + + + + + + + kRteAbrFallbackLayer1 + + + + + + + kRteAbrFallbackLayer2 + + + + + + + kRteAbrFallbackLayer3 + + + + + + + kRteAbrFallbackLayer4 + + + + + + + kRteAbrFallbackLayer5 + + + + + + + kRteAbrFallbackLayer6 + + + + + + + RteAbrSubscriptionLayer + + + + + + + kRteAbrSubscriptionHigh + + + + + + + kRteAbrSubscriptionLow + + + + + + + kRteAbrSubscriptionLayer1 + + + + + + + kRteAbrSubscriptionLayer2 + + + + + + + kRteAbrSubscriptionLayer3 + + + + + + + kRteAbrSubscriptionLayer4 + + + + + + + kRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + RteVideoRenderMode + + + + + + + kRteVideoRenderModeHidden + + + + + + + kRteVideoRenderModeFit + + + + + + + RtePlayerMetadataType + + + + + + + kRtePlayerMetadataTypeSei + + + @@ -11463,6 +12140,44 @@ PREVIEW + + + + RtePlayerEvent + + + + + + + kRtePlayerEventFreezeStart + + + + + + + kRtePlayerEventFreezeStop + + + + + + + kRtePlayerEventAuthenticationWillExpire + + + + + + + kRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + kRtePlayerEventAbrRecoverFromAudioOnlyLayer @@ -11654,6 +12369,69 @@ RTMP_STREAM_PUBLISH_STATE_DISCONNECTING + + + + + RtePlayerState + + + + + + + kRtePlayerStateIdle + + + + + + + kRtePlayerStateOpening + + + + + + + kRtePlayerStateOpenCompleted + + + + + + + kRtePlayerStatePlaying + + + + + + + kRtePlayerStatePaused + + + + + + + kRtePlayerStatePlaybackCompleted + + + + + + + kRtePlayerStateStopped + + + + + + + kRtePlayerStateFailed + + @@ -13531,4 +14309,4 @@ - \ No newline at end of file + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index 7380987015b..e4216b8eb72 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -9714,7 +9714,7 @@ - + MEDIA_DEVICE_STATE_PLUGGED_IN From a75422fc356a4f457cd7bf78de2266449b832c67 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 4 Nov 2024 18:10:28 +0800 Subject: [PATCH 215/354] update release notes and add android only methods --- .../config/keys-rtc-ng-links-android.ditamap | 14 +++++ dita/RTC-NG/release/release_notes.dita | 52 +++++++++---------- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 15eab2386c8..8449ddbc3a5 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -108,6 +108,13 @@ + + + + 秀场直播 + + + @@ -167,5 +174,12 @@ + + + + Support 16 KB page sizes + + + diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 1fbf0c30a0e..ddb19b0e60c 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -3,7 +3,7 @@ v4.5.0 -

    该版本于 2034 年 11 月 x 日发布。

    +

    该版本于 2024 年 11 月 x 日发布。

    @@ -58,15 +58,16 @@ </tgroup> </table></p> </li> - <li props="mac"><ph><b>自动安装虚拟声卡</b></ph> + <li props="mac"><ph><b>自动安装虚拟声卡 (macOS)</b></ph> <p>自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 <apiname keyref="enableLoopbackRecording"/> 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。</p> </li> <li><ph><b>强效视频降噪实现变更</b></ph> <p>该版本调整了强效视频降噪的实现方式,在 <apiname keyref="VIDEO_DENOISER_LEVEL"/> 中删除了 <apiname keyref="VIDEO_DENOISER_LEVEL_STRENGTH"/>,改为调用 <apiname keyref="setVideoDenoiserOptions"/> 启用视频降噪后,调用 <apiname keyref="aasetBeautyEffectOptionsa"/> 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见 <apiname keyref="setVideoDenoiserOptions。"/></p> <p>此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见 <apiname keyref="setLowlightEnhanceOptions。"/></p> </li> - <li><ph><b> 摄像头插拔状态变更 (macOS, Windows)</b></ph> - <p><?oxy-placeholder content="用段落描述"?></p> + <li props="mac cpp"><ph><b> 摄像头插拔状态变更 (macOS, Windows)</b></ph> + <p props="cpp">在之前版本中,当摄像头拔出并重新插入时,<apiname keyref="onVideoDeviceStateChanged"/> 回调会将设备状态报告为 <apiname keyref="MEDIA_DEVICE_STATE_ACTIVE"/>(1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 <apiname keyref="MEDIA_DEVICE_STATE_IDLE"/>(0)(设备就绪)。</p> + <p props="mac">在之前版本中,摄像头拔出并重新插入后不会自动恢复采集。该版本起,摄像头重新插入后将自动恢复采集。</p> </li> <li><ph><b>视频编码偏好变更</b></ph> <p>为提升用户的视频互动体验,该版本优化了视频编码时的默认偏好: @@ -76,7 +77,7 @@ </ul></p> </li> <li><ph><b>16 KB 内存页大小 (Android)</b></ph> - <p><?oxy-placeholder content="用段落描述"?></p> + <p>自 Android 15 起,系统新增了对 16 KB 内存页大小的支持,详见 <xref keyref="page-size"/>。为了保证 App 的稳定性和性能表现,自该版本起,SDK 支持 16 KB 内存页大小,确保可以在使用 4 KB 和 16 KB 内存页大小的设备上无缝运行,提升兼容性并避免崩溃。</p> </li> </ol> </body> @@ -85,14 +86,6 @@ <title>新增特性
      -
    1. 高级美颜 -
        -
      • -
      • -
    2. -
    3. 秀场直播场景 -

      -
    4. 高级美颜

      该版本新增以下两种高级美颜功能:

        @@ -103,12 +96,17 @@ 目前,高级美颜功能为限时免费,详见

        +
      • 秀场直播场景 +

        该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

        +
      • 限制视频渲染帧率

        该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

        在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

      • URL 拉流播放 -

        +

        URL 拉流播放功能主要用于直播场景,观众端可以直接通过 OpenWithUrl 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。 + 在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。 + 当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。有关该功能的实现步骤,详见

      • 滤镜效果

        @@ -127,17 +125,16 @@

        如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

      • EGL 环境上下文 (Android) -

        +

        该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

      • 色彩空间设置 -

        -
      • -
      • -

        +

        该版本在 中新增了 ,你可以通过 获取视频帧的色彩空间属性,并通过 对其进行自定义设置。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,开发者可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

        +

        该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

      • 其他
        • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
        • +
        • 新增 枚举,表示设备已插入。
    @@ -155,19 +152,17 @@
  • 指定视频观测位置截图

    该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

  • -
  • -
      -
    • -
    • -
  • 自定义音频采集改进 -

    +

    该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

  • 其他改进
    • 通过拼接视频帧和 Alpha 数据实现 Alpha 透明特效的应用场景下,提升了接收端的渲染性能,有效减少卡顿和延迟。(Android, iOS)
    • 优化了调用 获取设备评分等级的设计逻辑,提升了等级评分结果的准确性。
    • -
    • +
    • 支持使用 YV 12 格式的虚拟摄像头作为视频采集设备。(Windows)
    • +
    • 频道内调用 关闭本地采集后,支持通过手机静音侧键把 App 播放的背景音效设置为静音状态。(iOS)
    • +
    • 调用 切换不同分辨率的直播流或点播流时,可以实现平滑且无感知的切换效果,并在切换失败时新增自动重试机制。SDK 会在切换失败后自动重试 3 次,如果依旧失败,会通过 回调报告 事件,表示媒体资源切换时发生错误。
    • +
    • 调用 设置音频文件的播放速度时,最低支持 0.3 倍速播放。
  • @@ -185,12 +180,13 @@
  • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
  • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
  • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
  • -
  • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
  • +
  • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
  • +
  • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
  • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
  • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
  • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
  • 调用 后,立即调用 暂停播放音乐文件不生效。
  • -
  • +
  • 音视频互动过程中偶现崩溃。(Android)
  • From 672c01aa255b178c1501a026882ff7d6c225f3b0 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 10:43:08 +0800 Subject: [PATCH 216/354] class to interface class --- dita/RTC-NG/API/api_player_getstats.dita | 2 +- dita/RTC-NG/API/api_player_openwithurl.dita | 4 +-- dita/RTC-NG/API/class_asynccallback.dita | 33 ------------------- .../API/class_playergetstatscallback.dita | 33 ------------------- 4 files changed, 3 insertions(+), 69 deletions(-) diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index 2aced220929..f9d244998c2 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -52,7 +52,7 @@ callback - 回调接口,用于异步接收统计信息和可能的错误信息,详见 + 回调接口,用于异步接收统计信息和可能的错误信息,详见 接口类下的 回调。
  • diff --git a/dita/RTC-NG/API/api_player_openwithurl.dita b/dita/RTC-NG/API/api_player_openwithurl.dita index 81e4f93a2c6..9144afa867a 100644 --- a/dita/RTC-NG/API/api_player_openwithurl.dita +++ b/dita/RTC-NG/API/api_player_openwithurl.dita @@ -36,7 +36,7 @@
    调用时机

    该方法需要在 之后调用。

    -
    +
    调用限制

    该方法目前仅支持打开以 rte:// 开头的 URL。

    @@ -63,7 +63,7 @@ callback - 一个异步回调函数,用于通知打开 URL 资源的结果。如果打开过程中出错,你可以通过 得知具体错误信息。 + 一个异步回调函数,用于通知打开 URL 资源的结果。如果打开过程中出错,你可以通过 下的 回调得知具体错误信息。
    diff --git a/dita/RTC-NG/API/class_asynccallback.dita b/dita/RTC-NG/API/class_asynccallback.dita index 86805cf1963..7c7b1ef7461 100644 --- a/dita/RTC-NG/API/class_asynccallback.dita +++ b/dita/RTC-NG/API/class_asynccallback.dita @@ -3,37 +3,4 @@ <ph keyref="AsyncCallback"/> 该类提供异步操作结果的回调。 - -
    -

    - public interface AsyncCallback { - @CalledByNative void onResult(Error error); -} - - - - - - - -

    -
    -
    -
    - -
    自从
    -
    v4.5.0
    -
    -
    -

    -

    -
    - 回调 - - - onResult - 异步操作结果的回调,详见 - -
    -
    diff --git a/dita/RTC-NG/API/class_playergetstatscallback.dita b/dita/RTC-NG/API/class_playergetstatscallback.dita index c665bb0bbb0..51b02c7b662 100644 --- a/dita/RTC-NG/API/class_playergetstatscallback.dita +++ b/dita/RTC-NG/API/class_playergetstatscallback.dita @@ -3,37 +3,4 @@ <ph keyref="PlayerGetStatsCallback"/> 该类提供的回调用于获取媒体资源统计信息的异步操作结果。 - -
    -

    - public interface PlayerGetStatsCallback { - @CalledByNative void onResult(PlayerStats playerStats, Error error); -} - - - - - - - -

    -
    -
    -
    - -
    自从
    -
    v4.5.0
    -
    -
    -

    -

    -
    - 回调 - - - onResult - 获取媒体资源统计信息的结果,详见 - -
    -
    From c71df1693164decbd9e223df09aefe6d1268f9e2 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 10:55:47 +0800 Subject: [PATCH 217/354] add methods in ditamaps --- dita/RTC-NG/RTC_NG_API_Android.ditamap | 60 +++++++++++++++++++ dita/RTC-NG/RTC_NG_API_iOS.ditamap | 58 +++++++++++++++++- dita/RTC-NG/RTC_NG_API_macOS.ditamap | 56 +++++++++++++++++ .../config/keys-rtc-ng-links-android.ditamap | 2 +- 4 files changed, 174 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 84c99bf0cf3..580c3a91086 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -16,6 +16,8 @@ + + @@ -42,6 +44,11 @@ + + + + + @@ -458,6 +465,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 1670d86557d..6d2a6690564 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -19,6 +19,7 @@ + @@ -42,6 +43,10 @@ + + + + @@ -459,6 +464,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -545,7 +601,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index 9e91c54b625..730d71d1b6e 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -18,6 +18,7 @@ + @@ -38,6 +39,10 @@ + + + + @@ -451,6 +456,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 8449ddbc3a5..71d49c5e49d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -174,7 +174,7 @@ - + Support 16 KB page sizes From 018e125b6dd12c33793cca33bd3791b93b45e3d6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 11:08:59 +0800 Subject: [PATCH 218/354] update maps --- dita/RTC-NG/API/class_playerconfig.dita | 2 -- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index 457f5d9eeb1..5c549d4e6eb 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -7,8 +7,6 @@

    public class PlayerConfig { - - public PlayerConfig(); public void setAutoPlay(boolean autoPlay) throws RteException; public boolean getAutoPlay() throws RteException; public void setAbrSubscriptionLayer(Constants.AbrSubscriptionLayer subscriptionLayer) throws RteException; diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 1f6c9eed926..ce8cc9b9638 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -308,13 +308,6 @@ - - - - CanvasConfig - - - @@ -1001,6 +994,13 @@ + + + + Canvas + + + @@ -1304,7 +1304,7 @@ - + @@ -5687,10 +5687,10 @@ - + - Canvas + CanvasConfig From 96381013693701dd2aa23e7a0c68e110a90595cd Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 03:09:31 +0000 Subject: [PATCH 219/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 1f6c9eed926..ce8cc9b9638 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -308,13 +308,6 @@ - - - - CanvasConfig - - - @@ -1001,6 +994,13 @@ + + + + Canvas + + + @@ -1304,7 +1304,7 @@ - + @@ -5687,10 +5687,10 @@ - + - Canvas + CanvasConfig From 38c230049a11473798e7d635a5d619383a693d47 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 11:48:39 +0800 Subject: [PATCH 220/354] update data type --- dita/RTC-NG/API/rtc_api_data_type.dita | 48 +++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 9398a324c84..03346e5527f 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -31,14 +31,7 @@

  • -
  • -
      -
    • -
    • -
    • -
    • -
    -
  • +
  • @@ -161,6 +154,7 @@
  • +
  • @@ -182,6 +176,7 @@
  • +
  • @@ -189,6 +184,7 @@
  • +
  • @@ -256,6 +252,8 @@
  • +
  • +
  • @@ -398,6 +396,7 @@
  • +
  • @@ -406,6 +405,7 @@
  • +
  • @@ -415,6 +415,7 @@
  • +
  • @@ -465,6 +466,8 @@
  • +
  • +
  • @@ -508,6 +511,7 @@
  • +
  • @@ -515,6 +519,7 @@
  • +
  • @@ -524,6 +529,7 @@
  • +
  • @@ -569,6 +575,8 @@
  • +
  • +
  • @@ -1361,6 +1369,14 @@
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • @@ -1520,6 +1536,14 @@
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • @@ -1652,6 +1676,14 @@
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • From 4bfe064d90df0e37f92f7ca37fa087727ccecae1 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 12:07:10 +0800 Subject: [PATCH 221/354] fix transformation error --- dita/RTC-NG/API/api_player_getstats.dita | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index f9d244998c2..15fe2041d83 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -52,7 +52,7 @@ callback - 回调接口,用于异步接收统计信息和可能的错误信息,详见 接口类下的 回调。 + 回调接口,用于异步接收统计信息和可能的错误信息,详见 接口类下的 回调。
    diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index ce8cc9b9638..4f58346090e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -12140,6 +12140,9 @@ PREVIEW + + +
    From 31b6e9abd87eb2382d841de11b8cdecc297ec31d Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 04:07:44 +0000 Subject: [PATCH 222/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 3 +++ 1 file changed, 3 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index ce8cc9b9638..4f58346090e 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -12140,6 +12140,9 @@ PREVIEW + + + From beb6f9a41c0248fb64a9defa81f82f7d9a7fe079 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 5 Nov 2024 14:21:24 +0800 Subject: [PATCH 223/354] Update keys-rtc-ng-api-java.ditamap --- .../config/keys-rtc-ng-api-java.ditamap | 403 ++++++++++++++++++ 1 file changed, 403 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 9189ab7876a..b1f82fb0c61 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -251,6 +251,41 @@ + + + + Canvas + + + + + + + Rte + + + + + + + Player + + + + + + + PlayerConfig + + + + + + + PlayerObserver + + +
    @@ -859,6 +894,360 @@ + + + + + AddView + + + + + + + Canvas + + + + + + + Code + + + + + + + Message + + + + + + + GetAutoPlay + + + + + + + GetFromBridge + + + + + + + Rte + + + + + + + InitMediaEngine + + + + + + + RegisterObserver [1/2] + + + + + + + UnregisterObserver [1/2] + + + + + + + SetAutoPlay + + + + + + + SetAppId + + + + + + + SetCanvas + + + + + + + SetRenderMode + + + + + + + SetAbrFallbackLayer + + + + + + + SetAbrSubscriptionLayer + + + + + + + GetAbrFallbackLayer + + + + + + + GetAbrSubscriptionLayer + + + + + + + GetAppId + + + + + + + GetStats + + + + + + + GetMirrorMode + + + + + + + GetRenderMode + + + + + + + MuteAudio + + + + + + + MuteVideo + + + + + + + SetConfigs [1/3] + + + + + + + SetConfigs [2/3] + + + + + + + SetConfigs [3/3] + + + + + + + SetMirrorMode + + + + + + + SetJsonParameter + + + + + + + SetJsonParameter [2/2] + + + + + + + GetConfigs [1/3] + + + + + + + GetConfigs [2/3] + + + + + + + GetConfigs [3/3] + + + + + + + GetInfo + + + + + + + GetJsonParameter + + + + + + + GetJsonParameter [2/2] + + + + + + + Pause + + + + + + + Play + + + + + + + Player + + + + + + + PreloadWithUrl + + + + + + + RemoveView + + + + + + + RegisterObserver + + + + + + + Stop + + + + + + + OpenWithUrl + + + + + + + UnregisterObserver + + + + + + + + + onEvent + + + + + + + onMetadata [2/2] + + + + + + + onPlayerInfoUpdated [2/2] + + + + + + + onResolutionChanged + + + + + + + onStateChanged + + + + @@ -5512,6 +5901,20 @@ + + + + RtePlayerInfo + + + + + + + RtePlayerStats + + + From 9e2e6e02bc370367c2885629bed14669238e17d6 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Tue, 5 Nov 2024 06:21:57 +0000 Subject: [PATCH 224/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-java.ditamap | 403 ++++++++++++++++++ 1 file changed, 403 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 9189ab7876a..b1f82fb0c61 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -251,6 +251,41 @@ + + + + Canvas + + + + + + + Rte + + + + + + + Player + + + + + + + PlayerConfig + + + + + + + PlayerObserver + + + @@ -859,6 +894,360 @@ + + + + + AddView + + + + + + + Canvas + + + + + + + Code + + + + + + + Message + + + + + + + GetAutoPlay + + + + + + + GetFromBridge + + + + + + + Rte + + + + + + + InitMediaEngine + + + + + + + RegisterObserver [1/2] + + + + + + + UnregisterObserver [1/2] + + + + + + + SetAutoPlay + + + + + + + SetAppId + + + + + + + SetCanvas + + + + + + + SetRenderMode + + + + + + + SetAbrFallbackLayer + + + + + + + SetAbrSubscriptionLayer + + + + + + + GetAbrFallbackLayer + + + + + + + GetAbrSubscriptionLayer + + + + + + + GetAppId + + + + + + + GetStats + + + + + + + GetMirrorMode + + + + + + + GetRenderMode + + + + + + + MuteAudio + + + + + + + MuteVideo + + + + + + + SetConfigs [1/3] + + + + + + + SetConfigs [2/3] + + + + + + + SetConfigs [3/3] + + + + + + + SetMirrorMode + + + + + + + SetJsonParameter + + + + + + + SetJsonParameter [2/2] + + + + + + + GetConfigs [1/3] + + + + + + + GetConfigs [2/3] + + + + + + + GetConfigs [3/3] + + + + + + + GetInfo + + + + + + + GetJsonParameter + + + + + + + GetJsonParameter [2/2] + + + + + + + Pause + + + + + + + Play + + + + + + + Player + + + + + + + PreloadWithUrl + + + + + + + RemoveView + + + + + + + RegisterObserver + + + + + + + Stop + + + + + + + OpenWithUrl + + + + + + + UnregisterObserver + + + + + + + + + onEvent + + + + + + + onMetadata [2/2] + + + + + + + onPlayerInfoUpdated [2/2] + + + + + + + onResolutionChanged + + + + + + + onStateChanged + + + + @@ -5512,6 +5901,20 @@ + + + + RtePlayerInfo + + + + + + + RtePlayerStats + + + From c4c7bc057b920953557930d08d689b76deab670a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 15:28:56 +0800 Subject: [PATCH 225/354] Update release_notes.dita --- dita/RTC-NG/release/release_notes.dita | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index ddb19b0e60c..92edc297a4e 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -62,8 +62,8 @@

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

  • 强效视频降噪实现变更 -

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    -

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

    +

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    +

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

  • 摄像头插拔状态变更 (macOS, Windows)

    在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

    @@ -76,7 +76,7 @@
  • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。
  • -
  • 16 KB 内存页大小 (Android) +
  • 16 KB 内存页大小 (Android)

    自 Android 15 起,系统新增了对 16 KB 内存页大小的支持,详见 。为了保证 App 的稳定性和性能表现,自该版本起,SDK 支持 16 KB 内存页大小,确保可以在使用 4 KB 和 16 KB 内存页大小的设备上无缝运行,提升兼容性并避免崩溃。

  • @@ -104,9 +104,9 @@

    在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

  • URL 拉流播放 -

    URL 拉流播放功能主要用于直播场景,观众端可以直接通过 OpenWithUrl 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。 - 在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。 - 当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。有关该功能的实现步骤,详见

    +

    URL 拉流播放功能主要用于直播场景,观众端可以直接通过 OpenWithUrl 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

    +

    在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

    +

    当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

    有关该功能的实现步骤,详见

  • 滤镜效果

    @@ -124,7 +124,7 @@

    该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

    如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

  • -
  • EGL 环境上下文 (Android) +
  • EGL 环境上下文 (Android)

    该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

  • 色彩空间设置 @@ -187,7 +187,6 @@
  • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
  • 调用 后,立即调用 暂停播放音乐文件不生效。
  • 音视频互动过程中偶现崩溃。(Android)
  • -
  • From 65977f79e9c5e384889d4fa86300b388099ad3f9 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 15:33:06 +0800 Subject: [PATCH 226/354] IOS/MAC: update keysmap --- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 785 +++++++++++++++++- .../config/keys-rtc-ng-api-macos.ditamap | 785 +++++++++++++++++- 2 files changed, 1566 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index bb1ac3db55d..5c15eb60018 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -274,6 +274,41 @@ + + + + AgoraRteCanvas + + + + + + + AgoraRte + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerObserver + + + @@ -848,6 +883,361 @@ + + + + + addView:config:error: + + + + + + + initWithRte:initialConfig: + + + + + + + code + + + + + + + message + + + + + + + autoPlay: + + + + + + + getFromBridge: + + + + + + + initWithInitialConfig: + + + + + + + initMediaEngine:error: + + + + + + + registerObserver:error: + + + + + + + unregisterObserver:error: + + + + + + + setAutoPlay:error: + + + + + + + setAppId:error: + + + + + + + setCanvas:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setAbrFallbackLayer:error: + + + + + + + setAbrSubscriptionLayer:error: + + + + + + + abrFallbackLayer: + + + + + + + abrSubscriptionLayer: + + + + + + + appId: + + + + + + + getStats: + + + + + + + videoMirrorMode: + + + + + + + videoRenderMode: + + + + + + + muteAudio: + + + + + + + muteVideo: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setJsonParameter:error: + + + + + + + setJsonParameter:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getInfo:error: + + + + + + + jsonParameter: + + + + + + + jsonParameter: + + + + + + + + pause: + + + + + + + play: + + + + + + + initWithRte:initialConfig: + + + + + + + preloadWithUrl:error: + + + + + + + removeView:config:error: + + + + + + + registerObserver:error: + + + + + + + pause: + + + + + + + openWithUrl:startTime:cb: + + + + + + + unregisterObserver:error: + + + + + + + + + onEvent: + + + + + + + onMetadata:data: + + + + + + + onPlayerInfoUpdated: + + + + + + + onResolutionChanged: + + + + + + + onStateChanged:newState:error: + + + + @@ -4801,6 +5191,13 @@ + + + + AgoraRteCanvasConfig + + + @@ -4871,6 +5268,13 @@ + + + + AgoraRteConfig + + + @@ -4927,6 +5331,13 @@ + + + + AgoraRteError + + + @@ -5228,10 +5639,24 @@ - + + + + AgoraImage + + + + + + + AgoraRtePlayerInfo + + + + - AgoraImage + AgoraRtePlayerStats @@ -10277,6 +10702,160 @@ + + + + AgoraRteAbrFallbackLayer + + + + + + + AgoraRteAbrFallbackDisabled + + + + + + + AgoraRteAbrFallbackLow + + + + + + + AgoraRteAbrFallbackAudioOnly + + + + + + + AgoraRteAbrFallbackLayer1 + + + + + + + AgoraRteAbrFallbackLayer2 + + + + + + + AgoraRteAbrFallbackLayer3 + + + + + + + AgoraRteAbrFallbackLayer4 + + + + + + + AgoraRteAbrFallbackLayer5 + + + + + + + AgoraRteAbrFallbackLayer6 + + + + + + + AgoraRteErrorCode + + + + + + + AgoraRteOk + + + + + + + AgoraRteErrorDefault + + + + + + + AgoraRteErrorInvalidArgument + + + + + + + AgoraRteErrorInvalidOperation + + + + + + + AgoraRteErrorNetworkError + + + + + + + AgoraRteErrorAuthenticationFailed + + + + + + + AgoraRteErrorStreamNotFound + + + + + + + AgoraRteVideoMirrorMode + + + + + + + AgoraRteVideoMirrorModeAuto + + + + + + + AgoraRteVideoMirrorModeEnabled + + + + + + + AgoraRteVideoMirrorModeDisabled + + + @@ -10431,6 +11010,104 @@ + + + + AgoraRteAbrSubscriptionLayer + + + + + + + AgoraRteAbrSubscriptionHigh + + + + + + + AgoraRteAbrSubscriptionLow + + + + + + + AgoraRteAbrSubscriptionLayer1 + + + + + + + AgoraRteAbrSubscriptionLayer2 + + + + + + + AgoraRteAbrSubscriptionLayer3 + + + + + + + AgoraRteAbrSubscriptionLayer4 + + + + + + + AgoraRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + AgoraRteVideoRenderMode + + + + + + + AgoraRteVideoRenderModeHidden + + + + + + + AgoraRteVideoRenderModeFit + + + + + + + AgoraRtePlayerMetadataType + + + + + + + AgoraRtePlayerMetadataTypeSei + + + @@ -10613,6 +11290,47 @@ + + + + AgoraRtePlayerEvent + + + + + + + AgoraRtePlayerEventFreezeStart + + + + + + + AgoraRtePlayerEventFreezeStop + + + + + + + AgoraRtePlayerEventAuthenticationWillExpire + + + + + + + AgoraRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + AgoraRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + @@ -10801,6 +11519,69 @@ AgoraRtmpStreamingStateDisconnecting + + + + + AgoraRtePlayerState + + + + + + + AgoraRtePlayerStateIdle + + + + + + + AgoraRtePlayerStateOpening + + + + + + + AgoraRtePlayerStateOpenCompleted + + + + + + + AgoraRtePlayerStatePlaying + + + + + + + AgoraRtePlayerStatePaused + + + + + + + AgoraRtePlayerStatePlaybackCompleted + + + + + + + AgoraRtePlayerStateStopped + + + + + + + AgoraRtePlayerStateFailed + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index aeadc1b5a26..39dba662c1a 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -231,6 +231,41 @@ + + + + AgoraRteCanvas + + + + + + + AgoraRte + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerObserver + + + @@ -805,6 +840,361 @@ + + + + + addView:config:error: + + + + + + + initWithRte:initialConfig: + + + + + + + code + + + + + + + message + + + + + + + autoPlay: + + + + + + + getFromBridge: + + + + + + + initWithInitialConfig: + + + + + + + initMediaEngine:error: + + + + + + + registerObserver:error: + + + + + + + unregisterObserver:error: + + + + + + + setAutoPlay:error: + + + + + + + setAppId:error: + + + + + + + setCanvas:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setAbrFallbackLayer:error: + + + + + + + setAbrSubscriptionLayer:error: + + + + + + + abrFallbackLayer: + + + + + + + abrSubscriptionLayer: + + + + + + + appId: + + + + + + + getStats: + + + + + + + videoMirrorMode: + + + + + + + videoRenderMode: + + + + + + + muteAudio: + + + + + + + muteVideo: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setJsonParameter:error: + + + + + + + setJsonParameter:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getInfo:error: + + + + + + + jsonParameter: + + + + + + + jsonParameter: + + + + + + + + pause: + + + + + + + play: + + + + + + + initWithRte:initialConfig: + + + + + + + preloadWithUrl:error: + + + + + + + removeView:config:error: + + + + + + + registerObserver:error: + + + + + + + pause: + + + + + + + openWithUrl:startTime:cb: + + + + + + + unregisterObserver:error: + + + + + + + + + onEvent: + + + + + + + onMetadata:data: + + + + + + + onPlayerInfoUpdated: + + + + + + + onResolutionChanged: + + + + + + + onStateChanged:newState:error: + + + + @@ -4496,6 +4886,13 @@ + + + + AgoraRteCanvasConfig + + + @@ -4559,6 +4956,13 @@ + + + + AgoraRteConfig + + + @@ -4615,6 +5019,13 @@ + + + + AgoraRteError + + + @@ -4860,10 +5271,24 @@ - + + + + AgoraImage + + + + + + + AgoraRtePlayerInfo + + + + - AgoraImage + AgoraRtePlayerStats @@ -9750,6 +10175,160 @@ + + + + AgoraRteAbrFallbackLayer + + + + + + + AgoraRteAbrFallbackDisabled + + + + + + + AgoraRteAbrFallbackLow + + + + + + + AgoraRteAbrFallbackAudioOnly + + + + + + + AgoraRteAbrFallbackLayer1 + + + + + + + AgoraRteAbrFallbackLayer2 + + + + + + + AgoraRteAbrFallbackLayer3 + + + + + + + AgoraRteAbrFallbackLayer4 + + + + + + + AgoraRteAbrFallbackLayer5 + + + + + + + AgoraRteAbrFallbackLayer6 + + + + + + + AgoraRteErrorCode + + + + + + + AgoraRteOk + + + + + + + AgoraRteErrorDefault + + + + + + + AgoraRteErrorInvalidArgument + + + + + + + AgoraRteErrorInvalidOperation + + + + + + + AgoraRteErrorNetworkError + + + + + + + AgoraRteErrorAuthenticationFailed + + + + + + + AgoraRteErrorStreamNotFound + + + + + + + AgoraRteVideoMirrorMode + + + + + + + AgoraRteVideoMirrorModeAuto + + + + + + + AgoraRteVideoMirrorModeEnabled + + + + + + + AgoraRteVideoMirrorModeDisabled + + + @@ -9904,6 +10483,104 @@ + + + + AgoraRteAbrSubscriptionLayer + + + + + + + AgoraRteAbrSubscriptionHigh + + + + + + + AgoraRteAbrSubscriptionLow + + + + + + + AgoraRteAbrSubscriptionLayer1 + + + + + + + AgoraRteAbrSubscriptionLayer2 + + + + + + + AgoraRteAbrSubscriptionLayer3 + + + + + + + AgoraRteAbrSubscriptionLayer4 + + + + + + + AgoraRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + AgoraRteVideoRenderMode + + + + + + + AgoraRteVideoRenderModeHidden + + + + + + + AgoraRteVideoRenderModeFit + + + + + + + AgoraRtePlayerMetadataType + + + + + + + AgoraRtePlayerMetadataTypeSei + + + @@ -10086,6 +10763,47 @@ + + + + AgoraRtePlayerEvent + + + + + + + AgoraRtePlayerEventFreezeStart + + + + + + + AgoraRtePlayerEventFreezeStop + + + + + + + AgoraRtePlayerEventAuthenticationWillExpire + + + + + + + AgoraRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + AgoraRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + @@ -10274,6 +10992,69 @@ AgoraRtmpStreamingStateDisconnecting + + + + + AgoraRtePlayerState + + + + + + + AgoraRtePlayerStateIdle + + + + + + + AgoraRtePlayerStateOpening + + + + + + + AgoraRtePlayerStateOpenCompleted + + + + + + + AgoraRtePlayerStatePlaying + + + + + + + AgoraRtePlayerStatePaused + + + + + + + AgoraRtePlayerStatePlaybackCompleted + + + + + + + AgoraRtePlayerStateStopped + + + + + + + AgoraRtePlayerStateFailed + + From 3ab24124d2120140e71273596312a4397919a0db Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 07:33:38 +0000 Subject: [PATCH 227/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 785 +++++++++++++++++- .../config/keys-rtc-ng-api-macos.ditamap | 785 +++++++++++++++++- 2 files changed, 1566 insertions(+), 4 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index bb1ac3db55d..5c15eb60018 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -274,6 +274,41 @@ + + + + AgoraRteCanvas + + + + + + + AgoraRte + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerObserver + + + @@ -848,6 +883,361 @@ + + + + + addView:config:error: + + + + + + + initWithRte:initialConfig: + + + + + + + code + + + + + + + message + + + + + + + autoPlay: + + + + + + + getFromBridge: + + + + + + + initWithInitialConfig: + + + + + + + initMediaEngine:error: + + + + + + + registerObserver:error: + + + + + + + unregisterObserver:error: + + + + + + + setAutoPlay:error: + + + + + + + setAppId:error: + + + + + + + setCanvas:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setAbrFallbackLayer:error: + + + + + + + setAbrSubscriptionLayer:error: + + + + + + + abrFallbackLayer: + + + + + + + abrSubscriptionLayer: + + + + + + + appId: + + + + + + + getStats: + + + + + + + videoMirrorMode: + + + + + + + videoRenderMode: + + + + + + + muteAudio: + + + + + + + muteVideo: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setJsonParameter:error: + + + + + + + setJsonParameter:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getInfo:error: + + + + + + + jsonParameter: + + + + + + + jsonParameter: + + + + + + + + pause: + + + + + + + play: + + + + + + + initWithRte:initialConfig: + + + + + + + preloadWithUrl:error: + + + + + + + removeView:config:error: + + + + + + + registerObserver:error: + + + + + + + pause: + + + + + + + openWithUrl:startTime:cb: + + + + + + + unregisterObserver:error: + + + + + + + + + onEvent: + + + + + + + onMetadata:data: + + + + + + + onPlayerInfoUpdated: + + + + + + + onResolutionChanged: + + + + + + + onStateChanged:newState:error: + + + + @@ -4801,6 +5191,13 @@ + + + + AgoraRteCanvasConfig + + + @@ -4871,6 +5268,13 @@ + + + + AgoraRteConfig + + + @@ -4927,6 +5331,13 @@ + + + + AgoraRteError + + + @@ -5228,10 +5639,24 @@ - + + + + AgoraImage + + + + + + + AgoraRtePlayerInfo + + + + - AgoraImage + AgoraRtePlayerStats @@ -10277,6 +10702,160 @@ + + + + AgoraRteAbrFallbackLayer + + + + + + + AgoraRteAbrFallbackDisabled + + + + + + + AgoraRteAbrFallbackLow + + + + + + + AgoraRteAbrFallbackAudioOnly + + + + + + + AgoraRteAbrFallbackLayer1 + + + + + + + AgoraRteAbrFallbackLayer2 + + + + + + + AgoraRteAbrFallbackLayer3 + + + + + + + AgoraRteAbrFallbackLayer4 + + + + + + + AgoraRteAbrFallbackLayer5 + + + + + + + AgoraRteAbrFallbackLayer6 + + + + + + + AgoraRteErrorCode + + + + + + + AgoraRteOk + + + + + + + AgoraRteErrorDefault + + + + + + + AgoraRteErrorInvalidArgument + + + + + + + AgoraRteErrorInvalidOperation + + + + + + + AgoraRteErrorNetworkError + + + + + + + AgoraRteErrorAuthenticationFailed + + + + + + + AgoraRteErrorStreamNotFound + + + + + + + AgoraRteVideoMirrorMode + + + + + + + AgoraRteVideoMirrorModeAuto + + + + + + + AgoraRteVideoMirrorModeEnabled + + + + + + + AgoraRteVideoMirrorModeDisabled + + + @@ -10431,6 +11010,104 @@ + + + + AgoraRteAbrSubscriptionLayer + + + + + + + AgoraRteAbrSubscriptionHigh + + + + + + + AgoraRteAbrSubscriptionLow + + + + + + + AgoraRteAbrSubscriptionLayer1 + + + + + + + AgoraRteAbrSubscriptionLayer2 + + + + + + + AgoraRteAbrSubscriptionLayer3 + + + + + + + AgoraRteAbrSubscriptionLayer4 + + + + + + + AgoraRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + AgoraRteVideoRenderMode + + + + + + + AgoraRteVideoRenderModeHidden + + + + + + + AgoraRteVideoRenderModeFit + + + + + + + AgoraRtePlayerMetadataType + + + + + + + AgoraRtePlayerMetadataTypeSei + + + @@ -10613,6 +11290,47 @@ + + + + AgoraRtePlayerEvent + + + + + + + AgoraRtePlayerEventFreezeStart + + + + + + + AgoraRtePlayerEventFreezeStop + + + + + + + AgoraRtePlayerEventAuthenticationWillExpire + + + + + + + AgoraRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + AgoraRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + @@ -10801,6 +11519,69 @@ AgoraRtmpStreamingStateDisconnecting + + + + + AgoraRtePlayerState + + + + + + + AgoraRtePlayerStateIdle + + + + + + + AgoraRtePlayerStateOpening + + + + + + + AgoraRtePlayerStateOpenCompleted + + + + + + + AgoraRtePlayerStatePlaying + + + + + + + AgoraRtePlayerStatePaused + + + + + + + AgoraRtePlayerStatePlaybackCompleted + + + + + + + AgoraRtePlayerStateStopped + + + + + + + AgoraRtePlayerStateFailed + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index aeadc1b5a26..39dba662c1a 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -231,6 +231,41 @@ + + + + AgoraRteCanvas + + + + + + + AgoraRte + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerConfig + + + + + + + AgoraRtePlayerObserver + + + @@ -805,6 +840,361 @@ + + + + + addView:config:error: + + + + + + + initWithRte:initialConfig: + + + + + + + code + + + + + + + message + + + + + + + autoPlay: + + + + + + + getFromBridge: + + + + + + + initWithInitialConfig: + + + + + + + initMediaEngine:error: + + + + + + + registerObserver:error: + + + + + + + unregisterObserver:error: + + + + + + + setAutoPlay:error: + + + + + + + setAppId:error: + + + + + + + setCanvas:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setAbrFallbackLayer:error: + + + + + + + setAbrSubscriptionLayer:error: + + + + + + + abrFallbackLayer: + + + + + + + abrSubscriptionLayer: + + + + + + + appId: + + + + + + + getStats: + + + + + + + videoMirrorMode: + + + + + + + videoRenderMode: + + + + + + + muteAudio: + + + + + + + muteVideo: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setConfigs:error: + + + + + + + setVideoMirrorMode:error: + + + + + + + setJsonParameter:error: + + + + + + + setJsonParameter:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getConfigs:error: + + + + + + + getInfo:error: + + + + + + + jsonParameter: + + + + + + + jsonParameter: + + + + + + + + pause: + + + + + + + play: + + + + + + + initWithRte:initialConfig: + + + + + + + preloadWithUrl:error: + + + + + + + removeView:config:error: + + + + + + + registerObserver:error: + + + + + + + pause: + + + + + + + openWithUrl:startTime:cb: + + + + + + + unregisterObserver:error: + + + + + + + + + onEvent: + + + + + + + onMetadata:data: + + + + + + + onPlayerInfoUpdated: + + + + + + + onResolutionChanged: + + + + + + + onStateChanged:newState:error: + + + + @@ -4496,6 +4886,13 @@ + + + + AgoraRteCanvasConfig + + + @@ -4559,6 +4956,13 @@ + + + + AgoraRteConfig + + + @@ -4615,6 +5019,13 @@ + + + + AgoraRteError + + + @@ -4860,10 +5271,24 @@ - + + + + AgoraImage + + + + + + + AgoraRtePlayerInfo + + + + - AgoraImage + AgoraRtePlayerStats @@ -9750,6 +10175,160 @@ + + + + AgoraRteAbrFallbackLayer + + + + + + + AgoraRteAbrFallbackDisabled + + + + + + + AgoraRteAbrFallbackLow + + + + + + + AgoraRteAbrFallbackAudioOnly + + + + + + + AgoraRteAbrFallbackLayer1 + + + + + + + AgoraRteAbrFallbackLayer2 + + + + + + + AgoraRteAbrFallbackLayer3 + + + + + + + AgoraRteAbrFallbackLayer4 + + + + + + + AgoraRteAbrFallbackLayer5 + + + + + + + AgoraRteAbrFallbackLayer6 + + + + + + + AgoraRteErrorCode + + + + + + + AgoraRteOk + + + + + + + AgoraRteErrorDefault + + + + + + + AgoraRteErrorInvalidArgument + + + + + + + AgoraRteErrorInvalidOperation + + + + + + + AgoraRteErrorNetworkError + + + + + + + AgoraRteErrorAuthenticationFailed + + + + + + + AgoraRteErrorStreamNotFound + + + + + + + AgoraRteVideoMirrorMode + + + + + + + AgoraRteVideoMirrorModeAuto + + + + + + + AgoraRteVideoMirrorModeEnabled + + + + + + + AgoraRteVideoMirrorModeDisabled + + + @@ -9904,6 +10483,104 @@ + + + + AgoraRteAbrSubscriptionLayer + + + + + + + AgoraRteAbrSubscriptionHigh + + + + + + + AgoraRteAbrSubscriptionLow + + + + + + + AgoraRteAbrSubscriptionLayer1 + + + + + + + AgoraRteAbrSubscriptionLayer2 + + + + + + + AgoraRteAbrSubscriptionLayer3 + + + + + + + AgoraRteAbrSubscriptionLayer4 + + + + + + + AgoraRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + AgoraRteVideoRenderMode + + + + + + + AgoraRteVideoRenderModeHidden + + + + + + + AgoraRteVideoRenderModeFit + + + + + + + AgoraRtePlayerMetadataType + + + + + + + AgoraRtePlayerMetadataTypeSei + + + @@ -10086,6 +10763,47 @@ + + + + AgoraRtePlayerEvent + + + + + + + AgoraRtePlayerEventFreezeStart + + + + + + + AgoraRtePlayerEventFreezeStop + + + + + + + AgoraRtePlayerEventAuthenticationWillExpire + + + + + + + AgoraRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + AgoraRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + @@ -10274,6 +10992,69 @@ AgoraRtmpStreamingStateDisconnecting + + + + + AgoraRtePlayerState + + + + + + + AgoraRtePlayerStateIdle + + + + + + + AgoraRtePlayerStateOpening + + + + + + + AgoraRtePlayerStateOpenCompleted + + + + + + + AgoraRtePlayerStatePlaying + + + + + + + AgoraRtePlayerStatePaused + + + + + + + AgoraRtePlayerStatePlaybackCompleted + + + + + + + AgoraRtePlayerStateStopped + + + + + + + AgoraRtePlayerStateFailed + + From 89c5b2b80de4d3602a199b48ce8dd6614a311ddd Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 15:38:36 +0800 Subject: [PATCH 228/354] add filterEffect in release notes --- dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 92edc297a4e..ee85570d1e0 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -109,7 +109,7 @@

    当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

    有关该功能的实现步骤,详见

  • 滤镜效果 -

    +

    该版本新增 方法,你可以在 config 参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,用于快速实现美白滤镜效果。

  • 本地音频合流

    该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

    From ed79e9bf2657b0337a7fbd74618ca9316d7c97a4 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 15:56:56 +0800 Subject: [PATCH 229/354] fix errors --- dita/RTC-NG/RTC_NG_API_Android.ditamap | 1 + dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + dita/RTC-NG/RTC_NG_API_iOS.ditamap | 1 + dita/RTC-NG/RTC_NG_API_macOS.ditamap | 1 + dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 9 ++++++++- dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 9 ++++++++- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 4 ++-- 9 files changed, 36 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 580c3a91086..e24da405c7a 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -510,6 +510,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 6260384bc19..70ee89fc9e7 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -515,6 +515,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 6d2a6690564..5eb06789fcb 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -509,6 +509,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index 730d71d1b6e..cb3bb93d0a1 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -501,6 +501,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 4f58346090e..b84045ded19 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1305,6 +1305,13 @@ + + + + onAudioVolumeIndication + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 5c15eb60018..b1ff510784d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1202,6 +1202,13 @@ + + + + onAudioVolumeIndication:volume: + + + @@ -13261,4 +13268,4 @@ - \ No newline at end of file + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index b1f82fb0c61..ee08cf40a7c 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1212,6 +1212,13 @@ + + + + onAudioVolumeIndication + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 39dba662c1a..bd2dfa51c09 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1159,6 +1159,13 @@ + + + + onAudioVolumeIndication:volume: + + + @@ -12721,4 +12728,4 @@ - \ No newline at end of file + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 522c715321d..c61f48464a2 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3381,10 +3381,10 @@ - + - + From e9eef7a5f8d91240abdccd223a06ceb9dc30fad1 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 07:57:37 +0000 Subject: [PATCH 230/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++++++ en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 9 ++++++++- en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 7 +++++++ en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 9 ++++++++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 4f58346090e..b84045ded19 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1305,6 +1305,13 @@ + + + + onAudioVolumeIndication + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 5c15eb60018..b1ff510784d 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -1202,6 +1202,13 @@ + + + + onAudioVolumeIndication:volume: + + + @@ -13261,4 +13268,4 @@ - \ No newline at end of file + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index b1f82fb0c61..ee08cf40a7c 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1212,6 +1212,13 @@ + + + + onAudioVolumeIndication + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 39dba662c1a..bd2dfa51c09 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -1159,6 +1159,13 @@ + + + + onAudioVolumeIndication:volume: + + + @@ -12721,4 +12728,4 @@ - \ No newline at end of file + From f837f1a710f42648065a4780bc79121286d02f4e Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 5 Nov 2024 16:01:47 +0800 Subject: [PATCH 231/354] Update keys-rtc-ng-api-java.ditamap --- .../config/keys-rtc-ng-api-java.ditamap | 370 ++++++++++++++++++ 1 file changed, 370 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index b1f82fb0c61..e2df1c66c52 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -10614,6 +10614,20 @@ + + + + QUALITY_UNSUPPORTED + + + + + + + QUALITY_DETECTING + + + @@ -10909,6 +10923,362 @@ + + + + RteErrorCode + + + + + + + kRteOk + + + + + + + kRteErrorDefault + + + + + + + kRteErrorInvalidArgument + + + + + + + kRteErrorInvalidOperation + + + + + + + kRteErrorNetworkError + + + + + + + kRteErrorAuthenticationFailed + + + + + + + kRteErrorStreamNotFound + + + + + + + RteVideoMirrorMode + + + + + + + kRteVideoMirrorModeAuto + + + + + + + kRteVideoMirrorModeEnabled + + + + + + + kRteVideoMirrorModeDisabled + + + + + + + RteAbrFallbackLayer + + + + + + + kRteAbrFallbackDisabled + + + + + + + kRteAbrFallbackLow + + + + + + + kRteAbrFallbackAudioOnly + + + + + + + kRteAbrFallbackLayer1 + + + + + + + kRteAbrFallbackLayer2 + + + + + + + kRteAbrFallbackLayer3 + + + + + + + kRteAbrFallbackLayer4 + + + + + + + kRteAbrFallbackLayer5 + + + + + + + kRteAbrFallbackLayer6 + + + + + + + RteAbrSubscriptionLayer + + + + + + + kRteAbrSubscriptionHigh + + + + + + + kRteAbrSubscriptionLow + + + + + + + kRteAbrSubscriptionLayer1 + + + + + + + kRteAbrSubscriptionLayer2 + + + + + + + kRteAbrSubscriptionLayer3 + + + + + + + kRteAbrSubscriptionLayer4 + + + + + + + kRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + RteVideoRenderMode + + + + + + + kRteVideoRenderModeHidden + + + + + + + kRteVideoRenderModeFit + + + + + + + RtePlayerMetadataType + + + + + + + kRtePlayerMetadataTypeSei + + + + + + + PlayerEvent + + + + + + + FREEZE_START + + + + + + + kRtePlayerEventFreezeStop + + + + + + + kRtePlayerEventAuthenticationWillExpire + + + + + + + kRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + + kRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + + + + + PlayerState + + + + + + + IDLE + + + + + + + OPENING + + + + + + + OPEN_COMPLETED + + + + + + + PLAYING + + + + + + + PAUSED + + + + + + + PLAYBACK_COMPLETED + + + + + + + STOPPED + + + + + + + FAILED + + From 57a7b819b8049f3f8e8f6be8cffe5a093a06f2a7 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Tue, 5 Nov 2024 08:02:42 +0000 Subject: [PATCH 232/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-java.ditamap | 370 ++++++++++++++++++ 1 file changed, 370 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index ee08cf40a7c..47b294e2c9f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -10621,6 +10621,20 @@ + + + + QUALITY_UNSUPPORTED + + + + + + + QUALITY_DETECTING + + + @@ -10916,6 +10930,362 @@ + + + + RteErrorCode + + + + + + + kRteOk + + + + + + + kRteErrorDefault + + + + + + + kRteErrorInvalidArgument + + + + + + + kRteErrorInvalidOperation + + + + + + + kRteErrorNetworkError + + + + + + + kRteErrorAuthenticationFailed + + + + + + + kRteErrorStreamNotFound + + + + + + + RteVideoMirrorMode + + + + + + + kRteVideoMirrorModeAuto + + + + + + + kRteVideoMirrorModeEnabled + + + + + + + kRteVideoMirrorModeDisabled + + + + + + + RteAbrFallbackLayer + + + + + + + kRteAbrFallbackDisabled + + + + + + + kRteAbrFallbackLow + + + + + + + kRteAbrFallbackAudioOnly + + + + + + + kRteAbrFallbackLayer1 + + + + + + + kRteAbrFallbackLayer2 + + + + + + + kRteAbrFallbackLayer3 + + + + + + + kRteAbrFallbackLayer4 + + + + + + + kRteAbrFallbackLayer5 + + + + + + + kRteAbrFallbackLayer6 + + + + + + + RteAbrSubscriptionLayer + + + + + + + kRteAbrSubscriptionHigh + + + + + + + kRteAbrSubscriptionLow + + + + + + + kRteAbrSubscriptionLayer1 + + + + + + + kRteAbrSubscriptionLayer2 + + + + + + + kRteAbrSubscriptionLayer3 + + + + + + + kRteAbrSubscriptionLayer4 + + + + + + + kRteAbrSubscriptionLayer5 + + + + + + + kRteAbrSubscriptionLayer6 + + + + + + + RteVideoRenderMode + + + + + + + kRteVideoRenderModeHidden + + + + + + + kRteVideoRenderModeFit + + + + + + + RtePlayerMetadataType + + + + + + + kRtePlayerMetadataTypeSei + + + + + + + PlayerEvent + + + + + + + FREEZE_START + + + + + + + kRtePlayerEventFreezeStop + + + + + + + kRtePlayerEventAuthenticationWillExpire + + + + + + + kRtePlayerEventAbrFallbackToAudioOnlyLayer + + + + + + + kRtePlayerEventAbrRecoverFromAudioOnlyLayer + + + + + + + PlayerState + + + + + + + IDLE + + + + + + + OPENING + + + + + + + OPEN_COMPLETED + + + + + + + PLAYING + + + + + + + PAUSED + + + + + + + PLAYBACK_COMPLETED + + + + + + + STOPPED + + + + + + + FAILED + + From 011239191b9b10c1c6d4f1afb7e375b3f5eccb3d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 16:15:27 +0800 Subject: [PATCH 233/354] fix release notes --- dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index ee85570d1e0..49f16ef4618 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -62,7 +62,7 @@

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

  • 强效视频降噪实现变更 -

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    +

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

  • 摄像头插拔状态变更 (macOS, Windows) From 974c1a1b8e3a4210aa46c98d6a566eeb97351a23 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 5 Nov 2024 16:42:17 +0800 Subject: [PATCH 234/354] Update keys-rtc-ng-api-java.ditamap --- .../config/keys-rtc-ng-api-java.ditamap | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 47b294e2c9f..1609a138fa2 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -975,77 +975,77 @@ - SetAppId + setAppId - SetCanvas + setCanvas - SetRenderMode + setRenderMode - SetAbrFallbackLayer + setAbrFallbackLayer - SetAbrSubscriptionLayer + setAbrSubscriptionLayer - GetAbrFallbackLayer + getAbrFallbackLayer - GetAbrSubscriptionLayer + getAbrSubscriptionLayer - GetAppId + getAppId - GetStats + getStats - GetMirrorMode + getMirrorMode - GetRenderMode + getRenderMode @@ -1059,105 +1059,105 @@ - MuteVideo + muteVideo - SetConfigs [1/3] + setConfigs [1/3] - SetConfigs [2/3] + setConfigs [2/3] - SetConfigs [3/3] + setConfigs [3/3] - SetMirrorMode + setMirrorMode - SetJsonParameter + setJsonParameter - SetJsonParameter [2/2] + setJsonParameter [2/2] - GetConfigs [1/3] + getConfigs [1/3] - GetConfigs [2/3] + getConfigs [2/3] - GetConfigs [3/3] + getConfigs [3/3] - GetInfo + getInfo - GetJsonParameter + getJsonParameter - GetJsonParameter [2/2] + getJsonParameter [2/2] - Pause + pause - Play + play @@ -1171,42 +1171,42 @@ - PreloadWithUrl + preloadWithUrl - RemoveView + removeView - RegisterObserver + registerObserver - Stop + stop - OpenWithUrl + openWithUrl - UnregisterObserver + unregisterObserver @@ -5911,14 +5911,14 @@ - RtePlayerInfo + PlayerInfo - RtePlayerStats + PlayerStats @@ -10933,238 +10933,238 @@ - RteErrorCode + ErrorCode - kRteOk + OK - kRteErrorDefault + DEFAULT - kRteErrorInvalidArgument + INVALID_ARGUMENT - kRteErrorInvalidOperation + INVALID_OPERATION - kRteErrorNetworkError + NETWORK_ERROR - kRteErrorAuthenticationFailed + AUTHENTICATION_FAILED - kRteErrorStreamNotFound + STREAM_NOT_FOUND - RteVideoMirrorMode + VideoMirrorMode - kRteVideoMirrorModeAuto + AUTO - kRteVideoMirrorModeEnabled + ENABLED - kRteVideoMirrorModeDisabled + DISABLED - RteAbrFallbackLayer + AbrFallbackLayer - kRteAbrFallbackDisabled + DISABLED - kRteAbrFallbackLow + LOW - kRteAbrFallbackAudioOnly + AUDIO_ONLY - kRteAbrFallbackLayer1 + LAYER1 - kRteAbrFallbackLayer2 + LAYER2 - kRteAbrFallbackLayer3 + LAYER3 - kRteAbrFallbackLayer4 + LAYER4 - kRteAbrFallbackLayer5 + LAYER5 - kRteAbrFallbackLayer6 + LAYER6 - RteAbrSubscriptionLayer + AbrSubscriptionLayer - kRteAbrSubscriptionHigh + HIGH - kRteAbrSubscriptionLow + LOW - kRteAbrSubscriptionLayer1 + LAYER1 - kRteAbrSubscriptionLayer2 + LAYER2 - kRteAbrSubscriptionLayer3 + LAYER3 - kRteAbrSubscriptionLayer4 + LAYER4 - kRteAbrSubscriptionLayer5 + LAYER5 - kRteAbrSubscriptionLayer6 + LAYER6 - RteVideoRenderMode + VideoRenderMode - kRteVideoRenderModeHidden + HIDDEN - kRteVideoRenderModeFit + FIT @@ -11199,28 +11199,28 @@ - kRtePlayerEventFreezeStop + FREEZE_STOP - kRtePlayerEventAuthenticationWillExpire + AUTHENTICATION_WILL_EXPIRE - kRtePlayerEventAbrFallbackToAudioOnlyLayer + ABR_FALLBACK_TO_AUDIO_ONLY_LAYER - kRtePlayerEventAbrRecoverFromAudioOnlyLayer + ABR_RECOVER_FROM_AUDIO_ONLY_LAYER From 2b70e0d87093638f2c3453cccc5b58fe137c7c4e Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Tue, 5 Nov 2024 08:43:18 +0000 Subject: [PATCH 235/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-java.ditamap | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 47b294e2c9f..1609a138fa2 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -975,77 +975,77 @@ - SetAppId + setAppId - SetCanvas + setCanvas - SetRenderMode + setRenderMode - SetAbrFallbackLayer + setAbrFallbackLayer - SetAbrSubscriptionLayer + setAbrSubscriptionLayer - GetAbrFallbackLayer + getAbrFallbackLayer - GetAbrSubscriptionLayer + getAbrSubscriptionLayer - GetAppId + getAppId - GetStats + getStats - GetMirrorMode + getMirrorMode - GetRenderMode + getRenderMode @@ -1059,105 +1059,105 @@ - MuteVideo + muteVideo - SetConfigs [1/3] + setConfigs [1/3] - SetConfigs [2/3] + setConfigs [2/3] - SetConfigs [3/3] + setConfigs [3/3] - SetMirrorMode + setMirrorMode - SetJsonParameter + setJsonParameter - SetJsonParameter [2/2] + setJsonParameter [2/2] - GetConfigs [1/3] + getConfigs [1/3] - GetConfigs [2/3] + getConfigs [2/3] - GetConfigs [3/3] + getConfigs [3/3] - GetInfo + getInfo - GetJsonParameter + getJsonParameter - GetJsonParameter [2/2] + getJsonParameter [2/2] - Pause + pause - Play + play @@ -1171,42 +1171,42 @@ - PreloadWithUrl + preloadWithUrl - RemoveView + removeView - RegisterObserver + registerObserver - Stop + stop - OpenWithUrl + openWithUrl - UnregisterObserver + unregisterObserver @@ -5911,14 +5911,14 @@ - RtePlayerInfo + PlayerInfo - RtePlayerStats + PlayerStats @@ -10933,238 +10933,238 @@ - RteErrorCode + ErrorCode - kRteOk + OK - kRteErrorDefault + DEFAULT - kRteErrorInvalidArgument + INVALID_ARGUMENT - kRteErrorInvalidOperation + INVALID_OPERATION - kRteErrorNetworkError + NETWORK_ERROR - kRteErrorAuthenticationFailed + AUTHENTICATION_FAILED - kRteErrorStreamNotFound + STREAM_NOT_FOUND - RteVideoMirrorMode + VideoMirrorMode - kRteVideoMirrorModeAuto + AUTO - kRteVideoMirrorModeEnabled + ENABLED - kRteVideoMirrorModeDisabled + DISABLED - RteAbrFallbackLayer + AbrFallbackLayer - kRteAbrFallbackDisabled + DISABLED - kRteAbrFallbackLow + LOW - kRteAbrFallbackAudioOnly + AUDIO_ONLY - kRteAbrFallbackLayer1 + LAYER1 - kRteAbrFallbackLayer2 + LAYER2 - kRteAbrFallbackLayer3 + LAYER3 - kRteAbrFallbackLayer4 + LAYER4 - kRteAbrFallbackLayer5 + LAYER5 - kRteAbrFallbackLayer6 + LAYER6 - RteAbrSubscriptionLayer + AbrSubscriptionLayer - kRteAbrSubscriptionHigh + HIGH - kRteAbrSubscriptionLow + LOW - kRteAbrSubscriptionLayer1 + LAYER1 - kRteAbrSubscriptionLayer2 + LAYER2 - kRteAbrSubscriptionLayer3 + LAYER3 - kRteAbrSubscriptionLayer4 + LAYER4 - kRteAbrSubscriptionLayer5 + LAYER5 - kRteAbrSubscriptionLayer6 + LAYER6 - RteVideoRenderMode + VideoRenderMode - kRteVideoRenderModeHidden + HIDDEN - kRteVideoRenderModeFit + FIT @@ -11199,28 +11199,28 @@ - kRtePlayerEventFreezeStop + FREEZE_STOP - kRtePlayerEventAuthenticationWillExpire + AUTHENTICATION_WILL_EXPIRE - kRtePlayerEventAbrFallbackToAudioOnlyLayer + ABR_FALLBACK_TO_AUDIO_ONLY_LAYER - kRtePlayerEventAbrRecoverFromAudioOnlyLayer + ABR_RECOVER_FROM_AUDIO_ONLY_LAYER From 2e3639c1eeefb2b89ba400a58880fc87cdfc8f0c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 16:46:57 +0800 Subject: [PATCH 236/354] add codeph in release notes --- dita/RTC-NG/release/release_notes.dita | 74 +++++++++++++------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 49f16ef4618..221735b5a57 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -27,17 +27,17 @@ - + displayId 由 uint32_t 型变更为 int64_t 型 - + windowId 由 view_t 型变更为 int64_t 型 - + displayId 由 uint32_t 型变更为 int64_t 型 @@ -46,7 +46,7 @@ 由 view_t 型变更为 int64_t 型 - + sourceDisplayId 由 view_t 型变更为 int64_t 型 @@ -59,21 +59,21 @@

  • 自动安装虚拟声卡 (macOS) -

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

    +

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

  • 强效视频降噪实现变更 -

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    -

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

    +

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    +

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

  • 摄像头插拔状态变更 (macOS, Windows) -

    在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

    +

    在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

    在之前版本中,摄像头拔出并重新插入后不会自动恢复采集。该版本起,摄像头重新插入后将自动恢复采集。

  • 视频编码偏好变更

    为提升用户的视频互动体验,该版本优化了视频编码时的默认偏好:

      -
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。
    • -
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。
    • +
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。
    • +
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。

  • 16 KB 内存页大小 (Android) @@ -89,30 +89,30 @@
  • 高级美颜

    该版本新增以下两种高级美颜功能:

      -
    • 美型:调用 方法,可对人脸各部位进行修饰,你可以使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,并微调整体的修饰力度。如果预设的美型效果不能满足你的需求,你可以调用 方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。
    • -
    • 美妆:调用 方法,传入指定参数,可实现眼影、美瞳、眼线、美眉、唇彩、腮红等美妆特效。
    • +
    • 美型:调用 方法,可对人脸各部位进行修饰,你可以使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,并微调整体的修饰力度。如果预设的美型效果不能满足你的需求,你可以调用 方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。
    • +
    • 美妆:调用 方法,传入指定参数,可实现眼影、美瞳、眼线、美眉、唇彩、腮红等美妆特效。
    有关美型和美妆的实现步骤,详见 目前,高级美颜功能为限时免费,详见

  • 秀场直播场景 -

    该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    +

    该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

  • 限制视频渲染帧率 -

    该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

    +

    该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

    在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

  • URL 拉流播放

    URL 拉流播放功能主要用于直播场景,观众端可以直接通过 OpenWithUrl 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

    -

    在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

    -

    当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

    有关该功能的实现步骤,详见

    +

    在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

    +

    当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

    有关该功能的实现步骤,详见

  • 滤镜效果 -

    该版本新增 方法,你可以在 config 参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,用于快速实现美白滤镜效果。

    +

    该版本新增 方法,你可以在 config 参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,用于快速实现美白滤镜效果。

  • 本地音频合流 -

    该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

    +

    该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

    该功能的使用场景示例如下:

    • 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
    • @@ -121,20 +121,20 @@

  • 外部 MediaProjection (Android) -

    该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

    +

    该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

    如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

  • EGL 环境上下文 (Android) -

    该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

    +

    该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

  • 色彩空间设置 -

    该版本在 中新增了 ,你可以通过 获取视频帧的色彩空间属性,并通过 对其进行自定义设置。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,开发者可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

    -

    该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

    +

    该版本在 中新增了 ,你可以通过 获取视频帧的色彩空间属性,并通过 对其进行自定义设置。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,开发者可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

    +

    该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

  • 其他
      -
    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
    • -
    • 新增 枚举,表示设备已插入。
    • +
    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
    • +
    • 新增 枚举,表示设备已插入。
  • @@ -147,22 +147,22 @@

    该版本升级了虚拟背景的算法,分割人像主体部分与背景时更加准确,背景无露出,人像身体轮廓无缺块,手指细节辨识显著提高。同时,人像与背景的边缘更加稳定,减少了连续视频帧中人像边缘的跳变和闪烁现象。

  • 录制本地预览视频 -

    该版本在 中新增 type 成员。当调用 时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 即可开始录制本地预览的视频。

    +

    该版本在 中新增 type 成员。当调用 时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 即可开始录制本地预览的视频。

  • 指定视频观测位置截图 -

    该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

    +

    该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

  • 自定义音频采集改进 -

    该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

    +

    该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

  • 其他改进
    • 通过拼接视频帧和 Alpha 数据实现 Alpha 透明特效的应用场景下,提升了接收端的渲染性能,有效减少卡顿和延迟。(Android, iOS)
    • -
    • 优化了调用 获取设备评分等级的设计逻辑,提升了等级评分结果的准确性。
    • +
    • 优化了调用 获取设备评分等级的设计逻辑,提升了等级评分结果的准确性。
    • 支持使用 YV 12 格式的虚拟摄像头作为视频采集设备。(Windows)
    • -
    • 频道内调用 关闭本地采集后,支持通过手机静音侧键把 App 播放的背景音效设置为静音状态。(iOS)
    • -
    • 调用 切换不同分辨率的直播流或点播流时,可以实现平滑且无感知的切换效果,并在切换失败时新增自动重试机制。SDK 会在切换失败后自动重试 3 次,如果依旧失败,会通过 回调报告 事件,表示媒体资源切换时发生错误。
    • -
    • 调用 设置音频文件的播放速度时,最低支持 0.3 倍速播放。
    • +
    • 频道内调用 关闭本地采集后,支持通过手机静音侧键把 App 播放的背景音效设置为静音状态。(iOS)
    • +
    • 调用 切换不同分辨率的直播流或点播流时,可以实现平滑且无感知的切换效果,并在切换失败时新增自动重试机制。SDK 会在切换失败后自动重试 3 次,如果依旧失败,会通过 回调报告 事件,表示媒体资源切换时发生错误。
    • +
    • 调用 设置音频文件的播放速度时,最低支持 0.3 倍速播放。
  • @@ -172,20 +172,20 @@

    该版本修复了以下问题:

      -
    • 调用 共享屏幕时,通过 regionRect 指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows)
    • +
    • 调用 共享屏幕时,通过 regionRect 指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows)
    • 当发送端视频源类型为 JPEG 格式时,偶现接收端帧率低于预期。(Android、iOS)
    • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
    • -
    • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
    • -
    • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
    • -
    • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
    • +
    • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
    • +
    • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
    • +
    • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
    • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
    • -
    • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
    • +
    • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
    • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
    • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
    • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
    • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
    • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
    • -
    • 调用 后,立即调用 暂停播放音乐文件不生效。
    • +
    • 调用 后,立即调用 暂停播放音乐文件不生效。
    • 音视频互动过程中偶现崩溃。(Android)
    From b1e12c850097b1161a489a3aaefe1ab78e52a556 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 16:54:21 +0800 Subject: [PATCH 237/354] fix release notes --- dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 221735b5a57..d89f0898732 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -62,7 +62,7 @@

    自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

  • 强效视频降噪实现变更 -

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    +

    该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

    此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

  • 摄像头插拔状态变更 (macOS, Windows) From 62561deb0bc21fa32f49af213d240817f6024734 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 17:01:45 +0800 Subject: [PATCH 238/354] fix release notes again --- dita/RTC-NG/release/release_notes.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index d89f0898732..f29e1a3f4ca 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -97,7 +97,7 @@

  • 秀场直播场景 -

    该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

    +

    该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

  • 限制视频渲染帧率

    该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

    @@ -179,7 +179,7 @@
  • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
  • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
  • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
  • -
  • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
  • +
  • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
  • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
  • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
  • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
  • From 49f99f8a5b7f5c6730038cef66e82bca71e941c5 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 17:13:38 +0800 Subject: [PATCH 239/354] add codeph --- dita/RTC-NG/release/release_notes.dita | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index f29e1a3f4ca..d32599cb555 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -72,8 +72,8 @@
  • 视频编码偏好变更

    为提升用户的视频互动体验,该版本优化了视频编码时的默认偏好:

      -
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。
    • -
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。
    • +
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最佳的用户体验。
    • +
    • 枚举类中新增 (-1) 枚举,并替代原有的 (1) 作为默认值。在该模式下,SDK 会根据你设置的视频场景,自动选择 ,以获得最优的综合质量体验 (QoE)。

  • 16 KB 内存页大小 (Android) @@ -104,7 +104,7 @@

    在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

  • URL 拉流播放 -

    URL 拉流播放功能主要用于直播场景,观众端可以直接通过 OpenWithUrl 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

    +

    URL 拉流播放功能主要用于直播场景,观众端可以直接通过 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

    在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

    当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

    有关该功能的实现步骤,详见

  • @@ -133,7 +133,7 @@
  • 其他
      -
    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
    • +
    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
    • 新增 枚举,表示设备已插入。
  • @@ -153,7 +153,7 @@

    该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

  • 自定义音频采集改进 -

    该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

    +

    该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

  • 其他改进
      From 1771d4805b622c16357975ddbb43b3c25db44cdf Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 5 Nov 2024 17:21:05 +0800 Subject: [PATCH 240/354] Update keys-rtc-ng-api-java.ditamap --- .../config/keys-rtc-ng-api-java.ditamap | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 1609a138fa2..8a37c54c87d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -48,6 +48,14 @@ + + + + AsyncCallback + + + + @@ -279,6 +287,13 @@ + + + + PlayerGetStatsCallback + + + @@ -4867,6 +4882,22 @@ + + + + + onResult + + + + + + + onResult + + + + @@ -11286,6 +11317,7 @@ FAILED + From a6c521091c20134385665f0c69f42c0bcf0e894c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 5 Nov 2024 17:23:04 +0800 Subject: [PATCH 241/354] remove mac --- dita/RTC-NG/release/release_notes.dita | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index d32599cb555..d0bbeb8ef46 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -134,7 +134,7 @@
    • 其他
      • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
      • -
      • 新增 枚举,表示设备已插入。
      • +
      • 新增 枚举,表示设备已插入。
    • @@ -181,10 +181,10 @@
    • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
    • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
    • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
    • -
    • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
    • -
    • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
    • -
    • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
    • -
    • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
    • +
    • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
    • +
    • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
    • +
    • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
    • +
    • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
    • 调用 后,立即调用 暂停播放音乐文件不生效。
    • 音视频互动过程中偶现崩溃。(Android)
    From c0fc4f51378116670fd71933b20a1eb570651f21 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Tue, 5 Nov 2024 09:26:52 +0000 Subject: [PATCH 242/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-java.ditamap | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 1609a138fa2..8a37c54c87d 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -48,6 +48,14 @@ + + + + AsyncCallback + + + + @@ -279,6 +287,13 @@ + + + + PlayerGetStatsCallback + + + @@ -4867,6 +4882,22 @@ + + + + + onResult + + + + + + + onResult + + + + @@ -11286,6 +11317,7 @@ FAILED + From 421a8269da451597a26679d82d84d5188bd177ba Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 5 Nov 2024 18:38:43 +0800 Subject: [PATCH 243/354] fix errors and update en release notes --- dita/RTC-NG/API/api_canvas_addview.dita | 1 - .../API/api_config_getjsonparameter.dita | 11 +- dita/RTC-NG/API/api_config_setappid.dita | 2 +- dita/RTC-NG/API/api_player_getconfigs.dita | 2 +- .../API/api_playerconfig_getautoplay.dita | 1 - en-US/dita/RTC-NG/release/release_notes.dita | 267 +++++++++++------- 6 files changed, 176 insertions(+), 108 deletions(-) diff --git a/dita/RTC-NG/API/api_canvas_addview.dita b/dita/RTC-NG/API/api_canvas_addview.dita index 491df20a0c6..2f66fb4e656 100644 --- a/dita/RTC-NG/API/api_canvas_addview.dita +++ b/dita/RTC-NG/API/api_canvas_addview.dita @@ -30,7 +30,6 @@
    v4.5.0
    -

  • 适用场景 diff --git a/dita/RTC-NG/API/api_config_getjsonparameter.dita b/dita/RTC-NG/API/api_config_getjsonparameter.dita index 4b59767c05b..97215256903 100644 --- a/dita/RTC-NG/API/api_config_getjsonparameter.dita +++ b/dita/RTC-NG/API/api_config_getjsonparameter.dita @@ -49,13 +49,16 @@
    - <ph keyref="return-section-title" props="cpp apple framework"/> - <ph props="android">异常</ph> + <ph keyref="return-section-title"/>

    方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

    • 方法调用成功,返回设置的 JSON 配置信息。
    • 方法调用失败,返回空字符串。
    -

    - +

    设置的 JSON 配置信息。

    +
    + +

    +
    + diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index f78d01bfb38..0d7abe5670b 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -46,7 +46,7 @@ appId 你的项目的 App ID,在声网控制台获取。 - + diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita index f261039f061..2d997bc353c 100644 --- a/dita/RTC-NG/API/api_player_getconfigs.dita +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -52,7 +52,7 @@
    -
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita index 639b2b810bb..f3c60e5df9c 100644 --- a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita @@ -31,7 +31,6 @@

    你可以调用该方法来得知当前播放器的自动播放设置。

    -

    调用时机 diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 492afe0588e..2b6abbc8848 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -1,54 +1,85 @@ - v4.4.0 + v4.5.0 -

    This version was released on July x, 2024.

    +

    This version was released on November x, 2024.

    <topic id="compatibility"> <title>Compatibility changes -

    This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. - - Starting from v4.4.0, the RTC SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See API Sunset NoticeAPI Sunset NoticeAPI Sunset NoticeAPI Sunset Notice.

    +

    This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.

      -
    1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through in each callback. - - - Original callback - Current callback - - - onExtensionEvent - - - - onExtensionStarted - - - - onExtensionStopped - - - - onExtensionError - - - -
    2. -
    3. Before v4.4.0, when a user role was set to audience and called to set the audio scenario to chatroom (), the user would see a microphone permission request popup. As of v4.4.0, the SDK uses native iOS APIs to control the microphone, so audience members in a chatroom scenario will no longer receive the microphone permission request popup.
    4. -
    5. This version renames the receiveMetadata callback to and removes the data and timeStamp parameters. You can get metadata-related information, including timeStamp (timestamp of the sent data), uid (user ID), and channelId (channel name) through the newly-added metadata parameter.
    6. -
    7. This version removes the buffer, uid, and timeStampMs parameters of the callback. You can get metadata-related information, including timeStampMs (timestamp of the sent data), uid (user ID), and channelId (channel name) through the newly-added metadata parameter.
    8. -
    9. This version renames the following members in : -
        -
      • d3d11_texture_2d is renamed to d3d11Texture2d.
      • -
      • texture_slice_index is renamed to textureSliceIndex.
      • -
      • metadata_buffer is renamed to metadataBuffer.
      • -
      • metadata_size is renamed to metadataSize.
      • -
      -
    10. +
    11. Member Parameter Type Changes +

      To enhance the adaptability of various frameworks to the Native SDK, this version has made the following modifications to some API members or parameters: + + + + + + + + API + Member/Parameter + Change + + + + + + displayId + Changed from uint32_t to int64_t + + + + windowId + Changed from view_t to int64_t + + + + displayId + Changed from uint32_t to int64_t + + + windowId + Changed from view_t to int64_t + + + + sourceDisplayId + Changed from view_t to int64_t + + + sourceId + Default value changed from nullptr to 0 + + + +

      +
    12. +
    13. Automatic Installation of Virtual Sound Card (macOS) +

      Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call for the first time, the SDK will automatically install the built-in Agora self-developed virtual sound card, AgoraALD. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture.

      +
    14. +
    15. Changes in Strong Video Denoising Implementation +

      This version adjusts the implementation of strong video denoising. The now removes . Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

      +

      Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

      +
    16. +
    17. Changes in Camera Plug and Unplug Status (macOS, Windows) +

      In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

      +

      In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged.

      +
    18. +
    19. Changes in Video Encoding Preferences +

      To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: +

        +
      • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between or based on your video scene settings to achieve the best user experience.
      • +
      • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).
      • +

      +
    20. +
    21. 16 KB Memory Page Size (Android) +

      Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

      +
    @@ -56,29 +87,58 @@ New features
      -
    1. Lite SDK -

      Starting from this version, Agora introduces the Lite SDK, which includes only the basic audio and video capabilities and partially cuts advanced features, effectively reducing the app size after integrating the SDK.

      -
        -
      • Lite SDK supports manual integration or third-party repository integration. For details, see and .
      • -
      • For information on dynamic libraries included in the Lite SDK, see .
      • -
      • For the list of APIs supported by the Lite SDK, see Lite SDK API ListLite SDK API List.
      • -
      • For the limitations and precautions when using the Lite SDK to play media files, please refer to Which audio file formats are supported by RTC SDK?
      • -
    2. -
    3. Alpha transparency effects -

      This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.:

      -
        -
      • and add the alphaBuffer member: Sets the Alpha channel data.
      • -
      • adds the fillAlphaBuffer member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into alphaBuffer.
      • -
      • and add the alphaStitchMode member: Sets the relative position of alphaBuffer and video frame stitching.
      • -
      -

      Additionally, adds a new member encodeAlpha, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call to set the video encoding properties and set encodeAlpha to .

      -
    4. -
    5. Voice AI tuner -

      This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the method and passing in the sound effect types supported in the enum to achieve effects like deep voice, cute voice, husky singing voice, etc.

      -
    6. -
    7. 1v1 video call scenario -

      This version adds (1v1 video call) in . You can call to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions.

      +
    8. Advanced Beauty Effects +

      This version introduces the following two advanced beauty features: +

        +
      • Face Shaping: By calling the method, you can enhance various parts of the face. You can use preset templates to achieve effects such as face slimming, eye enlargement, and nose slimming in one go, and fine-tune the overall enhancement intensity. If the preset face shaping effects do not meet your needs, you can call the method to set face shaping area options and fine-tune each part of the face for more precise face shaping effects.
      • +
      • Makeup: By calling the method with specified parameters, you can achieve makeup effects such as eyeshadow, contact lenses, eyeliner, eyebrows, lip gloss, and blush.
      • +
      + For implementation steps of face shaping and makeup, see . + Currently, advanced beauty features are free for a limited time. For details, see . +

      +
    9. +
    10. Live Show Scenario +

      This version adds the (3) (Live Show) enumeration to the class. You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

      +
    11. +
    12. Limit Video Rendering Frame Rate +

      This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

      +

      In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.

    13. +
    14. URL Pull Streaming Playback +

      The URL pull streaming playback feature is mainly used in live broadcast scenarios. The audience can directly open a specific URL to play the real-time media stream through OpenWithUrl, without the need to join a channel or subscribe, greatly simplifying the API calls for the audience to watch the live stream.

      +

      During playback, the audience can set the subscription video stream size through and achieve smooth switching between different stream sizes. If higher video experience requirements are needed, you can contact to enable the ABR (Adaptive Bitrate) feature. After enabling this feature, you can customize the resolution of different levels of video streams, allowing the audience to achieve smooth switching between different resolution video streams.

      +

      When the network condition is unstable, the audience can call to set the fallback options for the subscribed video stream. The SDK will dynamically adjust the resolution within the specified range based on the network condition, with the lowest quality level video stream resolution as the lower limit.

      For implementation steps of this feature, see .

      +
    15. +
    16. Filter Effects +

      This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

      +
    17. +
    18. Local Audio Mixing +

      This version introduces the local audio mixing feature. You can call the method to merge the audio streams collected from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

      +

      Example use cases for this feature include: +

        +
      • Combining with the local video mixing feature to synchronize and publish audio streams related to the mixed video stream.
      • +
      • In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
      • +
      • In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
      • +
      +

      +
    19. +
    20. External MediaProjection (Android) +

      This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

      +

      If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture. For specific implementation methods, see "Screen Sharing".

      +
    21. +
    22. EGL Context (Android) +

      This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

      +
    23. +
    24. Color Space Settings +

      This version adds and to . You can use to obtain the color space properties of the video frame and use to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing.

      +

      This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

      +
    25. +
    26. Others +
        +
      • callback adds the enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows)
      • +
      • adds the enumeration, indicating that the device has been plugged in.
      • +
      +
    @@ -86,46 +146,53 @@ Improvements
      -
    1. Adaptive hardware decoding support (Android, Windows) -

      This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load.

      -
    2. -
    3. Rendering performance enhancement (Windows) -

      DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities.

      -
    4. -
    5. Facial region beautification -

      To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously.

      -
    6. -
    7. Other improvements -

      This version also includes the following improvements: -

        -
      • Optimizes the parameter types of the following APIs. These improvements enhance code readability, reduce potential errors, and facilitate future maintenance. -
          -
        • Deprecates the option parameter of type int in , and adds an overloaded function with the option parameter of type .
        • -
        • Deprecates the streamType parameter of type int in , , and , and adds overloaded functions , , and with the streamType parameter of type .
        • -
      • -
      • Optimizes transmission strategy: calling no longer impacts the security of the transmission link.
      • -
      • The enumerator is added in callback , indicating that the display used for screen capture has been disconnected. (Windows, macOS)
      • -
      • Optimizes the video link for window sharing, reducing CPU usage. (macOS)
      • -
      • Improves echo cancellation for screen sharing scenarios.
      • -
      • Adds the channelId parameter to , which is used to get the channel name from which the metadata is sent.
      • -
      • Deprecates redundant enumeration values and in .
      • -
      • Deprecates redundant enumeration values and .
      • -

      -
    8. +
    9. Virtual Background Algorithm Optimization +

      This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.

      +
    10. +
    11. Record Local Preview Video +

      This version adds the type member to . When calling , you can specify the type of video stream to be recorded as the local preview video stream through this member. You can set parameters such as height, width, frame rate, and sampling rate of the preview video in , and then call to start recording the local preview video.

      +
    12. +
    13. Snapshot at Specified Video Observation Points +

      This version introduces the and methods. You can use the config parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects.

      +
    14. +
    15. Custom Audio Capture Improvements +

      This version adds the enableAudioProcessing member parameter to , which is used to control whether to enable 3A audio processing for custom audio capture tracks of the AUDIO_TRACK_DIRECT type. The default value of this parameter is , meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing.

      +
    16. +
    17. Other Improvements +
        +
      • In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
      • +
      • Optimized the design logic for calling to obtain device score levels, improving the accuracy of the score results.
      • +
      • Support for using virtual cameras in YV12 format as video capture devices. (Windows)
      • +
      • After calling to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS)
      • +
      • When calling to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the callback will report the event, indicating an error occurred during media resource switching.
      • +
      • When calling to set the playback speed of an audio file, the minimum supported speed is 0.3x.
      • +
      +
    - - Issues fixed - -

    This release fixed the following issues:

    -
      -
    • Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS)
    • -
    • Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS)
    • -
    • After the sender called to start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS)
    • -
    • Audio playback failed when pushing external audio data using and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz.
    • -
    - -
    + + Bug Fixes + +

    This version fixes the following issues:

    +
      +
    • When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
    • +
    • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
    • +
    • Occasional noise and stuttering when playing music resources from the music content center. (Android)
    • +
    • Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
    • +
    • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
    • +
    • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
    • +
    • Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
    • +
    • When calling or to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback is not triggered when the audio device is removed, which is not as expected. (Windows)
    • +
    • Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
    • +
    • During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
    • +
    • In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
    • +
    • No sound when playing online media resources using the media player after the app starts. (iOS)
    • +
    • Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
    • +
    • Calling and then immediately calling to pause the music file playback does not take effect.
    • +
    • Occasional crashes during audio and video interaction. (Android)
    • +
    + +
    From 8120d5dbc5a6b1a26e44e34955a83b546ae8fc1e Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 5 Nov 2024 18:52:15 +0800 Subject: [PATCH 244/354] fix build warnings --- dita/RTC-NG/API/api_config_setappid.dita | 2 +- dita/RTC-NG/API/api_player_getconfigs.dita | 4 ++-- dita/RTC-NG/API/api_playerconfig_getautoplay.dita | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/api_config_setappid.dita b/dita/RTC-NG/API/api_config_setappid.dita index f78d01bfb38..6c83bd48ded 100644 --- a/dita/RTC-NG/API/api_config_setappid.dita +++ b/dita/RTC-NG/API/api_config_setappid.dita @@ -46,7 +46,7 @@ appId 你的项目的 App ID,在声网控制台获取。 - + diff --git a/dita/RTC-NG/API/api_player_getconfigs.dita b/dita/RTC-NG/API/api_player_getconfigs.dita index f261039f061..28186604c40 100644 --- a/dita/RTC-NG/API/api_player_getconfigs.dita +++ b/dita/RTC-NG/API/api_player_getconfigs.dita @@ -35,7 +35,7 @@
    调用时机

    -
    +
    调用限制

    无。

    @@ -52,7 +52,7 @@
    -
    +
    diff --git a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita index 639b2b810bb..f3c60e5df9c 100644 --- a/dita/RTC-NG/API/api_playerconfig_getautoplay.dita +++ b/dita/RTC-NG/API/api_playerconfig_getautoplay.dita @@ -31,7 +31,6 @@

    你可以调用该方法来得知当前播放器的自动播放设置。

    -

    调用时机 From 52f751cb43b3bc53eed991bf44fcd5fa35942f3c Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 6 Nov 2024 10:59:51 +0800 Subject: [PATCH 245/354] update --- dita/RTC-NG/API/class_canvas.dita | 4 ++-- dita/RTC-NG/API/class_playerconfig.dita | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/class_canvas.dita b/dita/RTC-NG/API/class_canvas.dita index 45ffee473ec..1ef02614d78 100644 --- a/dita/RTC-NG/API/class_canvas.dita +++ b/dita/RTC-NG/API/class_canvas.dita @@ -28,7 +28,7 @@ bool SetConfigs(CanvasConfig *config, Error *err); bool AddView(View *view, ViewConfig *config, rte::Error *err) bool RemoveView(View *view, ViewConfig *config, rte::Error *err); - + }; @@ -57,7 +57,7 @@ 设置视频的渲染模式。详见 - + 获取当前设置的视频渲染模式。详见 diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index 5c549d4e6eb..0ca399ca9bd 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -59,7 +59,7 @@ 获取自动播放设置。详见 - + 设置订阅的媒体流的质量层级。详见 From 1544c1b33127b5ceb256ed65b7eef8aa85b6ced3 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 6 Nov 2024 11:23:54 +0800 Subject: [PATCH 246/354] more 450 edits --- .../API/api_rteexception_errorcode.dita | 41 +++++++++++++++ dita/RTC-NG/API/class_error.dita | 12 +++-- dita/RTC-NG/API/class_playerconfig.dita | 2 +- dita/RTC-NG/API/class_rteexception.dita | 41 +++++++++++++++ dita/RTC-NG/API/enum_rteerrorcode.dita | 2 +- dita/RTC-NG/API/rtc_api_data_type.dita | 3 ++ dita/RTC-NG/RTC_NG_API_Android.ditamap | 1 + .../config/keys-rtc-ng-api-java.ditamap | 51 ++++++++++++++++--- .../config/relations-rtc-ng-api.ditamap | 6 +-- 9 files changed, 143 insertions(+), 16 deletions(-) create mode 100644 dita/RTC-NG/API/api_rteexception_errorcode.dita create mode 100644 dita/RTC-NG/API/class_rteexception.dita diff --git a/dita/RTC-NG/API/api_rteexception_errorcode.dita b/dita/RTC-NG/API/api_rteexception_errorcode.dita new file mode 100644 index 00000000000..5024c49a187 --- /dev/null +++ b/dita/RTC-NG/API/api_rteexception_errorcode.dita @@ -0,0 +1,41 @@ + + + + <ph keyref="errorCode_RteException"/> + 获取 RteException 携带的错误码。 + + + + + + + + +
    +

    + public Constants.ErrorCode errorCode() { + return Constants.ErrorCode.fromInt(mErrorCode); + } + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +

    +
    +
    +

    此异常携带的错误码,详见

    +
    +
    +
    diff --git a/dita/RTC-NG/API/class_error.dita b/dita/RTC-NG/API/class_error.dita index dae341c7188..81900306e04 100644 --- a/dita/RTC-NG/API/class_error.dita +++ b/dita/RTC-NG/API/class_error.dita @@ -6,7 +6,11 @@

    - + public class Error { + public Constants.ErrorCode code(); + public String message(); +} + __attribute__((visibility("default"))) @interface AgoraRteError : NSObject - (AgoraRteErrorCode)code; @@ -38,11 +42,13 @@ - 获取 API 调用返回的错误码,详见 + 获取 API 调用返回的错误码,详见 + 获取 API 调用返回的错误码。详见 - 获取 API 调用返回的具体错误信息,详见 + 获取 API 调用返回的具体错误信息,详见 + 获取 API 调用返回的具体错误信息。

    diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index 5c549d4e6eb..0ca399ca9bd 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -59,7 +59,7 @@ 获取自动播放设置。详见
    - + 设置订阅的媒体流的质量层级。详见 diff --git a/dita/RTC-NG/API/class_rteexception.dita b/dita/RTC-NG/API/class_rteexception.dita new file mode 100644 index 00000000000..0c30a4f3869 --- /dev/null +++ b/dita/RTC-NG/API/class_rteexception.dita @@ -0,0 +1,41 @@ + + + + <ph keyref="RteException"/> + Rte 异常信息。 + +
    +

    + public class RteException extends Exception { + public Constants.ErrorCode errorCode() { + return Constants.ErrorCode.fromInt(mErrorCode); + } +} + + + + + + + +

    +
    +
    +
    + +
    自从
    +
    v4.5.0
    +
    +
    +
    +
    + 方法 + + + + 设置是否自动播放。详见 + + +
    +
    +
    diff --git a/dita/RTC-NG/API/enum_rteerrorcode.dita b/dita/RTC-NG/API/enum_rteerrorcode.dita index 6910db1b83c..cf42127f3f3 100644 --- a/dita/RTC-NG/API/enum_rteerrorcode.dita +++ b/dita/RTC-NG/API/enum_rteerrorcode.dita @@ -8,7 +8,7 @@
    自从
    -
    v
    +
    v4.5.0
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 03346e5527f..a55996ec48c 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -173,6 +173,7 @@
  • +
  • @@ -252,6 +253,8 @@
  • +
  • +
  • diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index e24da405c7a..ce3738c3aa4 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -468,6 +468,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 8a37c54c87d..065147717b4 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -301,6 +301,20 @@ + + + + Error + + + + + + + Config + + + @@ -927,21 +941,28 @@ - Code + code - Message + message - GetAutoPlay + getAutoPlay + + + + + + + errorCode @@ -962,28 +983,28 @@ - InitMediaEngine + initMediaEngine - RegisterObserver [1/2] + registerObserver [1/2] - UnregisterObserver [1/2] + unregisterObserver [1/2] - SetAutoPlay + setAutoPlay @@ -1067,7 +1088,7 @@ - MuteAudio + muteAudio @@ -5498,6 +5519,13 @@ + + + + CanvasConfig + + + @@ -5939,6 +5967,13 @@ + + + + RteException + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index c61f48464a2..9f9048ea0b7 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -941,7 +941,7 @@ - + @@ -2360,7 +2360,7 @@ - + @@ -3275,7 +3275,7 @@ - + From 17f65a3967657ae65315cc312c93b475671f840c Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Wed, 6 Nov 2024 03:25:26 +0000 Subject: [PATCH 247/354] Sync cn prototype to en prototype --- .../config/keys-rtc-ng-api-java.ditamap | 51 ++++++++++++++++--- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 8a37c54c87d..065147717b4 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -301,6 +301,20 @@ + + + + Error + + + + + + + Config + + + @@ -927,21 +941,28 @@ - Code + code - Message + message - GetAutoPlay + getAutoPlay + + + + + + + errorCode @@ -962,28 +983,28 @@ - InitMediaEngine + initMediaEngine - RegisterObserver [1/2] + registerObserver [1/2] - UnregisterObserver [1/2] + unregisterObserver [1/2] - SetAutoPlay + setAutoPlay @@ -1067,7 +1088,7 @@ - MuteAudio + muteAudio @@ -5498,6 +5519,13 @@ + + + + CanvasConfig + + + @@ -5939,6 +5967,13 @@ + + + + RteException + + + From d971f0556b45d53bfcd7472653f08f34362a11a4 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 6 Nov 2024 11:55:29 +0800 Subject: [PATCH 248/354] add cn props --- dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index d0bbeb8ef46..10ae8121d20 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -146,7 +146,7 @@
  • 虚拟背景算法优化

    该版本升级了虚拟背景的算法,分割人像主体部分与背景时更加准确,背景无露出,人像身体轮廓无缺块,手指细节辨识显著提高。同时,人像与背景的边缘更加稳定,减少了连续视频帧中人像边缘的跳变和闪烁现象。

  • -
  • 录制本地预览视频 +
  • 录制本地预览视频

    该版本在 中新增 type 成员。当调用 时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 即可开始录制本地预览的视频。

  • 指定视频观测位置截图 From 976ba021ebea2994141bd385e08c10863039daf3 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 6 Nov 2024 14:05:23 +0800 Subject: [PATCH 249/354] Update release_notes.dita --- en-US/dita/RTC-NG/release/release_notes.dita | 82 ++++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 2b6abbc8848..2bcf3d1849d 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -22,23 +22,23 @@ API - Member/Parameter + Members/Parameters Change - + displayId Changed from uint32_t to int64_t - + windowId Changed from view_t to int64_t - + displayId Changed from uint32_t to int64_t @@ -47,7 +47,7 @@ Changed from view_t to int64_t - + sourceDisplayId Changed from view_t to int64_t @@ -59,25 +59,25 @@

  • -
  • Automatic Installation of Virtual Sound Card (macOS) -

    Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call for the first time, the SDK will automatically install the built-in Agora self-developed virtual sound card, AgoraALD. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture.

    +
  • Automatic installation of virtual sound card (macOS) +

    Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call for the first time, the SDK will automatically install the AgoraALD, a virtual sound card developed by Agora. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture.

  • -
  • Changes in Strong Video Denoising Implementation -

    This version adjusts the implementation of strong video denoising. The now removes . Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

    -

    Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

    +
  • Changes in strong video denoising implementation +

    This version adjusts the implementation of strong video denoising. The removes . Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

    +

    Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

  • -
  • Changes in Camera Plug and Unplug Status (macOS, Windows) -

    In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

    +
  • Changes in camera plug and unplug status (macOS, Windows) +

    In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

    In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged.

  • -
  • Changes in Video Encoding Preferences +
  • Changes in video encoding preferences

    To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding:

      -
    • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between or based on your video scene settings to achieve the best user experience.
    • -
    • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).
    • +
    • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between or based on your video scene settings to achieve the best user experience.
    • +
    • In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).

  • -
  • 16 KB Memory Page Size (Android) +
  • 16 KB memory page size (Android)

    Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

  • @@ -87,36 +87,36 @@ New features
      -
    1. Advanced Beauty Effects +
    2. Advanced beauty effects

      This version introduces the following two advanced beauty features:

        -
      • Face Shaping: By calling the method, you can enhance various parts of the face. You can use preset templates to achieve effects such as face slimming, eye enlargement, and nose slimming in one go, and fine-tune the overall enhancement intensity. If the preset face shaping effects do not meet your needs, you can call the method to set face shaping area options and fine-tune each part of the face for more precise face shaping effects.
      • -
      • Makeup: By calling the method with specified parameters, you can achieve makeup effects such as eyeshadow, contact lenses, eyeliner, eyebrows, lip gloss, and blush.
      • +
      • Face shaping: By calling the method, you can enhance various parts of the face. You can use preset templates to achieve effects such as face slimming, eye enlargement, and nose slimming in one go, and fine-tune the overall enhancement intensity. If the preset face shaping effects do not meet your needs, you can call the method to set face shaping area options and fine-tune each part of the face for more precise face shaping effects.
      • +
      • Makeup: By calling the method with specified parameters, you can achieve makeup effects such as eyeshadow, contact lenses, eyeliner, eyebrows, lip gloss, and blush.
      For implementation steps of face shaping and makeup, see . Currently, advanced beauty features are free for a limited time. For details, see .

    3. -
    4. Live Show Scenario -

      This version adds the (3) (Live Show) enumeration to the class. You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

      +
    5. Live show scenario +

      This version adds the (3) (Live Show) enumeration to the class. You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

    6. -
    7. Limit Video Rendering Frame Rate -

      This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

      +
    8. Maximum frame rate for video rendering +

      This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

      In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.

    9. -
    10. URL Pull Streaming Playback -

      The URL pull streaming playback feature is mainly used in live broadcast scenarios. The audience can directly open a specific URL to play the real-time media stream through OpenWithUrl, without the need to join a channel or subscribe, greatly simplifying the API calls for the audience to watch the live stream.

      -

      During playback, the audience can set the subscription video stream size through and achieve smooth switching between different stream sizes. If higher video experience requirements are needed, you can contact to enable the ABR (Adaptive Bitrate) feature. After enabling this feature, you can customize the resolution of different levels of video streams, allowing the audience to achieve smooth switching between different resolution video streams.

      -

      When the network condition is unstable, the audience can call to set the fallback options for the subscribed video stream. The SDK will dynamically adjust the resolution within the specified range based on the network condition, with the lowest quality level video stream resolution as the lower limit.

      For implementation steps of this feature, see .

      +
    11. Watching live streaming through URLs +

      As of this version, audience members can directly open a specific URL to play the real-time media stream through , instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream.

      +

      During playback, the audience can set the subscription video stream size through and achieve smooth switching between different stream sizes. If higher video experience requirements are needed, you can contact to enable the ABR (Adaptive Bitrate) feature. After enabling this feature, you can customize the resolution of different levels of video streams, allowing the audience to achieve smooth switching between different resolution video streams.

      +

      When the network condition is unstable, the audience can call to set the fallback options for the subscribed video stream. The SDK will dynamically adjust the resolution within the specified range based on the network condition, with the lowest quality level video stream resolution as the lower limit.

      For implementation steps of this feature, see .

    12. -
    13. Filter Effects +
    14. Filter effects

      This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

    15. -
    16. Local Audio Mixing -

      This version introduces the local audio mixing feature. You can call the method to merge the audio streams collected from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

      +
    17. Local audio mixing +

      This version introduces the local audio mixing feature. You can call the method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

      Example use cases for this feature include:

        -
      • Combining with the local video mixing feature to synchronize and publish audio streams related to the mixed video stream.
      • +
      • By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published.
      • In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
      • In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
      @@ -124,12 +124,12 @@
    18. External MediaProjection (Android)

      This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

      -

      If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture. For specific implementation methods, see "Screen Sharing".

      +

      If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture.

    19. -
    20. EGL Context (Android) +
    21. EGL context (Android)

      This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

    22. -
    23. Color Space Settings +
    24. Color space settings

      This version adds and to . You can use to obtain the color space properties of the video frame and use to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing.

      This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

    25. @@ -146,23 +146,23 @@ Improvements
        -
      1. Virtual Background Algorithm Optimization +
      2. Virtual background algorithm optimization

        This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames.

      3. -
      4. Record Local Preview Video +
      5. Record local preview video

        This version adds the type member to . When calling , you can specify the type of video stream to be recorded as the local preview video stream through this member. You can set parameters such as height, width, frame rate, and sampling rate of the preview video in , and then call to start recording the local preview video.

      6. -
      7. Snapshot at Specified Video Observation Points +
      8. Snapshot at specified video observation points

        This version introduces the and methods. You can use the config parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects.

      9. -
      10. Custom Audio Capture Improvements +
      11. Custom audio capture improvements

        This version adds the enableAudioProcessing member parameter to , which is used to control whether to enable 3A audio processing for custom audio capture tracks of the AUDIO_TRACK_DIRECT type. The default value of this parameter is , meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing.

      12. Other Improvements
        • In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
        • -
        • Optimized the design logic for calling to obtain device score levels, improving the accuracy of the score results.
        • -
        • Support for using virtual cameras in YV12 format as video capture devices. (Windows)
        • +
        • Optimizes the logic for calling to obtain device score levels, improving the accuracy of the score results.
        • +
        • Supports using virtual cameras in YV12 format as video capture devices. (Windows)
        • After calling to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS)
        • When calling to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the callback will report the event, indicating an error occurred during media resource switching.
        • When calling to set the playback speed of an audio file, the minimum supported speed is 0.3x.
        • @@ -172,7 +172,7 @@ - Bug Fixes + Bug fixes

          This version fixes the following issues:

            From 28a29beb8efa6a4b3044bf345a12cb012b6e0f8e Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 6 Nov 2024 06:48:04 +0000 Subject: [PATCH 250/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita | 2 -- 1 file changed, 2 deletions(-) diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita index 10e1b9d36ca..06e036c1d58 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_mute.dita @@ -16,8 +16,6 @@ int mute(boolean muted); public abstract mute(muted:boolean) : number; - (int)mute:(bool)isMute NS_SWIFT_NAME(mute(_:)); - - - (int)mute:(BOOL)isMute NS_SWIFT_NAME(mute(_:)); virtual int mute(bool muted) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IMediaPlayer") int Mute(bool muted); From 890c97d2c264dcdb3b7af62ce5a66c838258d1ab Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 7 Nov 2024 14:30:05 +0800 Subject: [PATCH 251/354] DOC-4556 --- ...callback_ivideoframeobserver_getvideoformatpreference.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita index ab6b3b89b21..f947e14ae73 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita @@ -26,13 +26,13 @@ return VIDEO_OBSERVER_FRAME_TYPE.FRAME_TYPE_RGBA; } - +

    你需要在调用 方法时注册该回调。成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置期望的视频数据格式。

    在默认情况下,原始视频像素格式 () 存在以下类型:
      -
    • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。自 v4.2.3 起,TextureBuffer 类型的纹理格式不再包括 OES 格式,仅为 RGB 格式。你需要在处理视频数据时增加对 I420、RGB 纹理格式的适配。视频帧类型固定为 I420Buffer 的情况包括但不限于:
        +
      • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。视频帧类型固定为 I420Buffer 的情况包括但不限于:
        • 特定机型,例如:LG G5 SE (H848),Google Pixel 4a,Samsung Galaxy A7 或 Xiaomi Mi Max。
        • 已集成视频增强插件并开启视频降噪或暗光增强功能。
      • From 244cde0c17c7cff41ae598d1ccaf9bfe1d395b0a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 7 Nov 2024 06:32:22 +0000 Subject: [PATCH 252/354] Sync cn prototype to en prototype --- ...rameobserver_getvideoformatpreference.dita | 2 +- .../class_channelmediarelayconfiguration.dita | 45 ++++++++----------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita b/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita index 72d15d17bca..cf9005994b4 100644 --- a/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita +++ b/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita @@ -26,7 +26,7 @@ return VIDEO_OBSERVER_FRAME_TYPE.FRAME_TYPE_RGBA; } - +

    diff --git a/en-US/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita b/en-US/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita index 0d6d9b08dd3..a317d47f332 100644 --- a/en-US/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_channelmediarelayconfiguration.dita @@ -8,34 +8,31 @@

    public class ChannelMediaRelayConfiguration { private ChannelMediaInfo srcInfo = null; - private Map<String, ChannelMediaInfo> destInfos = null; - + private Map<String, ChannelMediaInfo> destInfos = null; + public ChannelMediaRelayConfiguration() { - destInfos = new HashMap<String, ChannelMediaInfo>(); + destInfos = new HashMap<String, ChannelMediaInfo>(); srcInfo = new ChannelMediaInfo(null, null, 0); } - + public void setSrcChannelInfo(ChannelMediaInfo srcInfo) { this.srcInfo = srcInfo; } - + public void setDestChannelInfo(String channelName, ChannelMediaInfo destInfo) { destInfos.put(channelName, destInfo); } - + public void removeDestChannelInfo(String channelName) { destInfos.remove(channelName); } - public ChannelMediaInfo getSrcChannelMediaInfo() { return srcInfo; } - - public Map<String, ChannelMediaInfo> getDestChannelMediaInfos() { + public Map<String, ChannelMediaInfo> getDestChannelMediaInfos() { return destInfos; } -} - +} export class ChannelMediaRelayConfiguration { public srcInfo:ChannelMediaInfo = new ChannelMediaInfo(null,null,0); public destInfos:Map<string, ChannelMediaInfo> = new Map<string, ChannelMediaInfo>(); @@ -43,25 +40,21 @@ public setSrcChannelInfo(srcInfo: ChannelMediaInfo) { this.srcInfo = srcInfo; } - __attribute__((visibility("default"))) @interface AgoraChannelMediaRelayConfiguration: NSObject - + __attribute__((visibility("default"))) @interface AgoraChannelMediaRelayConfiguration: NSObject @property (strong, nonatomic, readonly) NSDictionary<NSString *, AgoraChannelMediaRelayInfo *> *_Nullable destinationInfos; @property (strong, nonatomic) AgoraChannelMediaRelayInfo *_Nonnull sourceInfo; - -- (BOOL)setDestinationInfo:(AgoraChannelMediaRelayInfo *_Nonnull)destinationInfo forChannelName:(NSString *_Nonnull)channelName; -- (BOOL)removeDestinationInfoForChannelName:(NSString *_Nonnull)channelName; +- (BOOL)setDestinationInfo:(AgoraChannelMediaRelayInfo *_Nonnull)destinationInfo forChannelName:(NSString *_Nonnull)channelName NS_SWIFT_NAME(setDestinationInfo(_:forChannelName:)); +- (BOOL)removeDestinationInfoForChannelName:(NSString *_Nonnull)channelName NS_SWIFT_NAME(removeDestinationInfo(forChannelName:)); @end struct ChannelMediaRelayConfiguration { - ChannelMediaInfo *srcInfo; - ChannelMediaInfo *destInfos; - int destCount; - - ChannelMediaRelayConfiguration() - : srcInfo(nullptr) - , destInfos(nullptr) - , destCount(0) - {} - }; + + ChannelMediaInfo* srcInfo; + + ChannelMediaInfo* destInfos; + + int destCount; + ChannelMediaRelayConfiguration() : srcInfo(OPTIONAL_NULLPTR), destInfos(OPTIONAL_NULLPTR), destCount(0) {} +}; USTRUCT(BlueprintType) struct FChannelMediaRelayConfiguration { From 47fe7168266487ad269ddb35da412d819b6bec46 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 7 Nov 2024 15:18:23 +0800 Subject: [PATCH 253/354] remove release branches for sync proto action --- .github/workflows/python-app-sync-proto.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-app-sync-proto.yml b/.github/workflows/python-app-sync-proto.yml index a92a4dbaff3..02ccb46a0fe 100644 --- a/.github/workflows/python-app-sync-proto.yml +++ b/.github/workflows/python-app-sync-proto.yml @@ -9,7 +9,7 @@ on: push: branches: - master - - 'release/**' + # - 'release/**' jobs: build: runs-on: ubuntu-latest From 7a11418a777d84a4cd806f36c57cdafb05f086fc Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 7 Nov 2024 16:45:43 +0800 Subject: [PATCH 254/354] minor updates --- .../api_irtcengine_setexternalmediaprojection.dita | 1 - .../API/api_irtcengine_setfiltereffectoptions.dita | 2 +- .../API/callback_playerobserver_onmetadata.dita | 5 ++++- dita/RTC-NG/API/class_canvasconfig.dita | 2 +- dita/RTC-NG/API/class_videodenoiseroptions.dita | 1 - dita/RTC-NG/API/rtc_api_data_type.dita | 1 - dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap | 14 -------------- 7 files changed, 6 insertions(+), 20 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index 05fc79f09bc..da31e5d7584 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -40,7 +40,6 @@

  • 在定制系统的设备上,可避免系统弹窗(即需要用户授予屏幕采集权限),直接开始采集屏幕视频流。
  • 一个屏幕共享进程中存在一个或多个子进程,避免在子进程中自行创建对象的过程出错而导致采集失败。
  • -

    有关详细的实现步骤,详见

    调用时机 diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 0d0a70c820f..b1732696a6c 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -2,7 +2,7 @@ <ph keyref="setFilterEffectOptions"/> - 设置滤镜效果选项。 + 设置滤镜效果选项并指定媒体源。 diff --git a/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita index ceb88482a12..9d587c7a358 100644 --- a/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita +++ b/dita/RTC-NG/API/callback_playerobserver_onmetadata.dita @@ -47,7 +47,10 @@ type - 附属信息类型,详见 + 附属信息类型,详见 + 附属信息类型:
      +
    • 0: SEI(补充增强信息)类型。
    • +
    data diff --git a/dita/RTC-NG/API/class_canvasconfig.dita b/dita/RTC-NG/API/class_canvasconfig.dita index 4ba4f34256d..0b84067a26f 100644 --- a/dita/RTC-NG/API/class_canvasconfig.dita +++ b/dita/RTC-NG/API/class_canvasconfig.dita @@ -59,7 +59,7 @@ 设置视频的镜像模式。详见 - + 获取当前设置的视频镜像模式。详见
    diff --git a/dita/RTC-NG/API/class_videodenoiseroptions.dita b/dita/RTC-NG/API/class_videodenoiseroptions.dita index 8aa969e86d3..22cd91a5b51 100644 --- a/dita/RTC-NG/API/class_videodenoiseroptions.dita +++ b/dita/RTC-NG/API/class_videodenoiseroptions.dita @@ -126,7 +126,6 @@ public:
    • (0):(默认)优先画质的暗光增强,会处理视频图像的亮度、细节、噪声,消耗的性能适中,处理速度适中,综合画质最优。
    • (1):优先性能的视频降噪。是在性能消耗和视频降噪效果中侧重于节省性能的等级。性能消耗较少,视频降噪速度较快。为避免处理后的视频有明显的拖影效果,建议你在摄像头固定的情况下使用该设置。
    • -
    • (2):强效的视频降噪。是在性能消耗和视频降噪效果中侧重于视频降噪效果的等级。性能消耗较多,视频降噪速度较慢,视频降噪效果较好。如果 不能满足你的视频降噪需求,你可以使用该设置。
    diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index da46c3da076..65668afaf7c 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1383,7 +1383,6 @@
  • -
  • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 065147717b4..afb2fb527db 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -11234,20 +11234,6 @@ - - - - RtePlayerMetadataType - - - - - - - kRtePlayerMetadataTypeSei - - - From 6b5850cb34eb1e4c4a67345522b22650f1007e49 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Thu, 7 Nov 2024 08:46:19 +0000 Subject: [PATCH 255/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-java.ditamap | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 065147717b4..afb2fb527db 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -11234,20 +11234,6 @@ - - - - RtePlayerMetadataType - - - - - - - kRtePlayerMetadataTypeSei - - - From 4d3365cb54fec9ba5aa7dc87d43414f80ffd3461 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Fri, 8 Nov 2024 15:44:16 +0800 Subject: [PATCH 256/354] add cn props in release notes --- dita/RTC-NG/release/release_notes.dita | 4 ++-- en-US/dita/RTC-NG/release/release_notes.dita | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 10ae8121d20..8f0b0e07a99 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -86,7 +86,7 @@ 新增特性
      -
    1. 高级美颜 +
    2. 高级美颜

      该版本新增以下两种高级美颜功能:

      • 美型:调用 方法,可对人脸各部位进行修饰,你可以使用预设的模板一次性实现瘦脸、大眼、瘦鼻等微整形效果,并微调整体的修饰力度。如果预设的美型效果不能满足你的需求,你可以调用 方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。
      • @@ -103,7 +103,7 @@

        该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

        在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

        -
      • URL 拉流播放 +
      • URL 拉流播放

        URL 拉流播放功能主要用于直播场景,观众端可以直接通过 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

        在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

        当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

        有关该功能的实现步骤,详见

        diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 2bcf3d1849d..6302c87c11a 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -87,7 +87,7 @@ New features
          -
        1. Advanced beauty effects +
        2. Advanced beauty effects

          This version introduces the following two advanced beauty features:

          • Face shaping: By calling the method, you can enhance various parts of the face. You can use preset templates to achieve effects such as face slimming, eye enlargement, and nose slimming in one go, and fine-tune the overall enhancement intensity. If the preset face shaping effects do not meet your needs, you can call the method to set face shaping area options and fine-tune each part of the face for more precise face shaping effects.
          • @@ -104,7 +104,7 @@

            This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

            In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.

            -
          • Watching live streaming through URLs +
          • Watching live streaming through URLs

            As of this version, audience members can directly open a specific URL to play the real-time media stream through , instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream.

            During playback, the audience can set the subscription video stream size through and achieve smooth switching between different stream sizes. If higher video experience requirements are needed, you can contact to enable the ABR (Adaptive Bitrate) feature. After enabling this feature, you can customize the resolution of different levels of video streams, allowing the audience to achieve smooth switching between different resolution video streams.

            When the network condition is unstable, the audience can call to set the fallback options for the subscribed video stream. The SDK will dynamically adjust the resolution within the specified range based on the network condition, with the lowest quality level video stream resolution as the lower limit.

            For implementation steps of this feature, see .

            From 78000c5537571577e129195372748fff7186d8cd Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 8 Nov 2024 16:33:58 +0800 Subject: [PATCH 257/354] hide --- dita/RTC-NG/API/rtc_api_data_type.dita | 44 +++++++++---------- dita/RTC-NG/RTC_NG_API_Android.ditamap | 24 +++++----- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 16 +++---- dita/RTC-NG/RTC_NG_API_iOS.ditamap | 24 +++++----- dita/RTC-NG/RTC_NG_API_macOS.ditamap | 24 +++++----- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 24 +++++----- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 32 +++++++------- .../config/keys-rtc-ng-api-java.ditamap | 28 ++++++------ .../config/keys-rtc-ng-api-macos.ditamap | 32 +++++++------- .../config/relations-rtc-ng-api.ditamap | 8 ++-- 10 files changed, 128 insertions(+), 128 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 65668afaf7c..df1502856f5 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -45,8 +45,8 @@
          • -
          • -
          • +
          • +
          • @@ -188,8 +188,8 @@
          • -
          • -
          • +
          • +
          • @@ -425,8 +425,8 @@
          • -
          • -
          • +
          • +
          • @@ -543,8 +543,8 @@
          • -
          • -
          • +
          • +
          • @@ -1240,8 +1240,8 @@
          • -
          • -
          • +
          • +
          • @@ -1296,8 +1296,8 @@
          • -
          • -
          • +
          • +
          • @@ -1380,8 +1380,8 @@
          • -
          • -
          • +
          • +
          • @@ -1497,8 +1497,8 @@
          • -
          • -
          • +
          • +
          • @@ -1547,8 +1547,8 @@
          • -
          • -
          • +
          • +
          • @@ -1639,8 +1639,8 @@
          • -
          • -
          • +
          • +
          • @@ -1687,8 +1687,8 @@
          • -
          • -
          • +
          • +
          • diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 58a091547a3..7bb07b2d790 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -332,18 +332,18 @@ - - - - + + + + - - - - + + + + @@ -481,8 +481,8 @@ - - + + @@ -494,8 +494,8 @@ - - + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 70ee89fc9e7..d109499699c 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -326,12 +326,12 @@ - - + + - - + + @@ -485,8 +485,8 @@ - - + + @@ -498,8 +498,8 @@ - - + + diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 5eb06789fcb..8a4c15f005e 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -333,18 +333,18 @@ - - - - + + + + - - - - + + + + @@ -479,8 +479,8 @@ - - + + @@ -492,8 +492,8 @@ - - + + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index cb3bb93d0a1..684718635ac 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -330,18 +330,18 @@ - - - - + + + + - - - - + + + + @@ -471,8 +471,8 @@ - - + + @@ -484,8 +484,8 @@ - - + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b84045ded19..b86f51fb442 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1085,28 +1085,28 @@ - + SetAbrFallbackLayer - + SetAbrSubscriptionLayer - + GetAbrFallbackLayer - + GetAbrSubscriptionLayer @@ -1672,14 +1672,14 @@ - + getFaceShapeAreaOptions - + getFaceShapeBeautyOptions @@ -1721,14 +1721,14 @@ - + setFaceShapeAreaOptions - + setFaceShapeBeautyOptions @@ -5862,14 +5862,14 @@ - + FaceShapeAreaOptions - + FaceShapeBeautyOptions @@ -9581,7 +9581,7 @@ - + FACE_SHAPE_AREA @@ -9679,7 +9679,7 @@ - + FACE_SHAPE_BEAUTY_STYLE diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index b1ff510784d..5c4990327cf 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -982,28 +982,28 @@ - + setAbrFallbackLayer:error: - + setAbrSubscriptionLayer:error: - + abrFallbackLayer: - + abrSubscriptionLayer: @@ -1567,28 +1567,28 @@ - + getFaceShapeAreaOptions: - + getFaceShapeAreaOptions:sourceType: - + getFaceShapeBeautyOptions - + getFaceShapeBeautyOptions:sourceType: @@ -1665,28 +1665,28 @@ - + setFaceShapeAreaOptions: - + setFaceShapeAreaOptions:sourceType: - + setFaceShapeBeautyOptions:options: - + setFaceShapeBeautyOptions:options:sourceType: @@ -5359,14 +5359,14 @@ - + AgoraFaceShapeAreaOptions - + AgoraFaceShapeBeautyOptions @@ -9050,7 +9050,7 @@ - + AgoraFaceShapeArea @@ -9148,7 +9148,7 @@ - + AgoraFaceShapeStyle diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index afb2fb527db..00946ab6624 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1029,28 +1029,28 @@ - + setAbrFallbackLayer - + setAbrSubscriptionLayer - + getAbrFallbackLayer - + getAbrSubscriptionLayer @@ -1592,28 +1592,28 @@ - + getFaceShapeAreaOptions [1/2] - + getFaceShapeAreaOptions [2/2] - + getFaceShapeBeautyOptions [1/2] - + getFaceShapeBeautyOptions [2/2] @@ -1690,28 +1690,28 @@ - + setFaceShapeAreaOptions [1/2] - + setFaceShapeAreaOptions [2/2] - + setFaceShapeBeautyOptions [1/2] - + setFaceShapeBeautyOptions [2/2] @@ -5666,14 +5666,14 @@ - + FaceShapeAreaOptions - + FaceShapeBeautyOptions diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index bd2dfa51c09..11e23b989a4 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -939,28 +939,28 @@ - + setAbrFallbackLayer:error: - + setAbrSubscriptionLayer:error: - + abrFallbackLayer: - + abrSubscriptionLayer: @@ -1517,28 +1517,28 @@ - + getFaceShapeAreaOptions: - + getFaceShapeAreaOptions:sourceType: - + getFaceShapeBeautyOptions - + getFaceShapeBeautyOptions:sourceType: @@ -1615,28 +1615,28 @@ - + setFaceShapeAreaOptions: - + setFaceShapeAreaOptions:sourceType: - + setFaceShapeBeautyOptions:options: - + setFaceShapeBeautyOptions:options:sourceType: @@ -5047,14 +5047,14 @@ - + AgoraFaceShapeAreaOptions - + AgoraFaceShapeBeautyOptions @@ -8612,7 +8612,7 @@ - + AgoraFaceShapeArea @@ -8710,7 +8710,7 @@ - + AgoraFaceShapeStyle diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index f426bb6a5aa..a152a9d65d4 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3393,11 +3393,11 @@ - - + + - - + + From 6d59bea8e02bd3344114ebd7eac1b82752d8075e Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 8 Nov 2024 16:37:01 +0800 Subject: [PATCH 258/354] remove hide --- dita/RTC-NG/release/release_notes.dita | 2 +- en-US/dita/RTC-NG/release/release_notes.dita | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 8f0b0e07a99..3dba8041b3b 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -103,7 +103,7 @@

            该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

            在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

            -
          • URL 拉流播放 +
          • URL 拉流播放

            URL 拉流播放功能主要用于直播场景,观众端可以直接通过 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

            在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

            当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

            有关该功能的实现步骤,详见

            diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 6302c87c11a..80c6fa81615 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -104,10 +104,8 @@

            This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

            In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.

          • -
          • Watching live streaming through URLs +
          • Watching live streaming through URLs

            As of this version, audience members can directly open a specific URL to play the real-time media stream through , instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream.

            -

            During playback, the audience can set the subscription video stream size through and achieve smooth switching between different stream sizes. If higher video experience requirements are needed, you can contact to enable the ABR (Adaptive Bitrate) feature. After enabling this feature, you can customize the resolution of different levels of video streams, allowing the audience to achieve smooth switching between different resolution video streams.

            -

            When the network condition is unstable, the audience can call to set the fallback options for the subscribed video stream. The SDK will dynamically adjust the resolution within the specified range based on the network condition, with the lowest quality level video stream resolution as the lower limit.

            For implementation steps of this feature, see .

          • Filter effects

            This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

            From db0fd7ac9e17f9845ec2576ad137a33436f42e43 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 11 Nov 2024 12:01:03 +0800 Subject: [PATCH 259/354] reorg toc --- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 36 +++++++++++++----------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index d109499699c..878a4c5f8bf 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -97,6 +97,10 @@ + + + + @@ -109,6 +113,12 @@ + + + + + + @@ -325,6 +335,12 @@ + + + + + + @@ -359,26 +375,6 @@ - - - - - - - - - - - - - - - - - - - - From 01eca55e7684cec35c91f8798540fbd10edeeb56 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 11 Nov 2024 06:33:28 +0000 Subject: [PATCH 260/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 24 +++++++------- .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 32 +++++++++---------- .../config/keys-rtc-ng-api-java.ditamap | 28 ++++++++-------- .../config/keys-rtc-ng-api-macos.ditamap | 32 +++++++++---------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b84045ded19..b86f51fb442 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1085,28 +1085,28 @@ - + SetAbrFallbackLayer - + SetAbrSubscriptionLayer - + GetAbrFallbackLayer - + GetAbrSubscriptionLayer @@ -1672,14 +1672,14 @@ - + getFaceShapeAreaOptions - + getFaceShapeBeautyOptions @@ -1721,14 +1721,14 @@ - + setFaceShapeAreaOptions - + setFaceShapeBeautyOptions @@ -5862,14 +5862,14 @@ - + FaceShapeAreaOptions - + FaceShapeBeautyOptions @@ -9581,7 +9581,7 @@ - + FACE_SHAPE_AREA @@ -9679,7 +9679,7 @@ - + FACE_SHAPE_BEAUTY_STYLE diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index b1ff510784d..5c4990327cf 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -982,28 +982,28 @@ - + setAbrFallbackLayer:error: - + setAbrSubscriptionLayer:error: - + abrFallbackLayer: - + abrSubscriptionLayer: @@ -1567,28 +1567,28 @@ - + getFaceShapeAreaOptions: - + getFaceShapeAreaOptions:sourceType: - + getFaceShapeBeautyOptions - + getFaceShapeBeautyOptions:sourceType: @@ -1665,28 +1665,28 @@ - + setFaceShapeAreaOptions: - + setFaceShapeAreaOptions:sourceType: - + setFaceShapeBeautyOptions:options: - + setFaceShapeBeautyOptions:options:sourceType: @@ -5359,14 +5359,14 @@ - + AgoraFaceShapeAreaOptions - + AgoraFaceShapeBeautyOptions @@ -9050,7 +9050,7 @@ - + AgoraFaceShapeArea @@ -9148,7 +9148,7 @@ - + AgoraFaceShapeStyle diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index afb2fb527db..00946ab6624 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -1029,28 +1029,28 @@ - + setAbrFallbackLayer - + setAbrSubscriptionLayer - + getAbrFallbackLayer - + getAbrSubscriptionLayer @@ -1592,28 +1592,28 @@ - + getFaceShapeAreaOptions [1/2] - + getFaceShapeAreaOptions [2/2] - + getFaceShapeBeautyOptions [1/2] - + getFaceShapeBeautyOptions [2/2] @@ -1690,28 +1690,28 @@ - + setFaceShapeAreaOptions [1/2] - + setFaceShapeAreaOptions [2/2] - + setFaceShapeBeautyOptions [1/2] - + setFaceShapeBeautyOptions [2/2] @@ -5666,14 +5666,14 @@ - + FaceShapeAreaOptions - + FaceShapeBeautyOptions diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index bd2dfa51c09..11e23b989a4 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -939,28 +939,28 @@ - + setAbrFallbackLayer:error: - + setAbrSubscriptionLayer:error: - + abrFallbackLayer: - + abrSubscriptionLayer: @@ -1517,28 +1517,28 @@ - + getFaceShapeAreaOptions: - + getFaceShapeAreaOptions:sourceType: - + getFaceShapeBeautyOptions - + getFaceShapeBeautyOptions:sourceType: @@ -1615,28 +1615,28 @@ - + setFaceShapeAreaOptions: - + setFaceShapeAreaOptions:sourceType: - + setFaceShapeBeautyOptions:options: - + setFaceShapeBeautyOptions:options:sourceType: @@ -5047,14 +5047,14 @@ - + AgoraFaceShapeAreaOptions - + AgoraFaceShapeBeautyOptions @@ -8612,7 +8612,7 @@ - + AgoraFaceShapeArea @@ -8710,7 +8710,7 @@ - + AgoraFaceShapeStyle From 604d9a25cae90eaa04ae1e8f105e18e6be084802 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 13 Nov 2024 11:48:25 +0800 Subject: [PATCH 261/354] Update api_player_getstats.dita --- dita/RTC-NG/API/api_player_getstats.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_player_getstats.dita b/dita/RTC-NG/API/api_player_getstats.dita index 15fe2041d83..37a96142511 100644 --- a/dita/RTC-NG/API/api_player_getstats.dita +++ b/dita/RTC-NG/API/api_player_getstats.dita @@ -48,7 +48,7 @@ 一个异步回调函数,用于通知获取播放器媒体资源统计信息的结果和错误信息。该函数包含以下参数:
            • stats: 播放器当前播放的媒体资源的统计数据,详见
            • -
            • err: 参数获取错误信息,详见
            +
          • err: 获取错误信息,详见
          callback From c4da9e1e28ed52e7621b35edc55afdbb40cf626e Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 13 Nov 2024 16:45:29 +0800 Subject: [PATCH 262/354] Update class_rteexception.dita --- dita/RTC-NG/API/class_rteexception.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_rteexception.dita b/dita/RTC-NG/API/class_rteexception.dita index 0c30a4f3869..cc9a62d210e 100644 --- a/dita/RTC-NG/API/class_rteexception.dita +++ b/dita/RTC-NG/API/class_rteexception.dita @@ -33,7 +33,7 @@ - 设置是否自动播放。详见 + 错误码。详见
    From 0e7203e5240c0c86dcda848397e5ec5a334c6eb8 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 13 Nov 2024 17:53:16 +0800 Subject: [PATCH 263/354] update desc --- ...llback_ivideoframeobserver_getvideoformatpreference.dita | 2 +- .../callback_ivideoframeobserver_oncapturevideoframe.dita | 6 +++++- .../callback_ivideoframeobserver_onrendervideoframe.dita | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita index f947e14ae73..5f0a26685f2 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita @@ -32,7 +32,7 @@

    你需要在调用 方法时注册该回调。成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置期望的视频数据格式。

    在默认情况下,原始视频像素格式 () 存在以下类型:
      -
    • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。视频帧类型固定为 I420Buffer 的情况包括但不限于:
        +
      • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。TextureBuffer 类型的纹理格式可能为 OES 格式或者 RGB 格式。如果 返回的视频帧类型为 ,你需要在处理视频数据时增加对 I420Buffer 或 TextureBuffer 的适配。视频帧类型固定为 I420Buffer 的情况包括但不限于:
        • 特定机型,例如:LG G5 SE (H848),Google Pixel 4a,Samsung Galaxy A7 或 Xiaomi Mi Max。
        • 已集成视频增强插件并开启视频降噪或暗光增强功能。
      • diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita index 66729309792..39c9cf6b9c0 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_oncapturevideoframe.dita @@ -35,6 +35,10 @@

        你可以在回调中获取本地设备采集到的原始视频数据,并可根据需要进行前处理。完成前处理后,你可以在该回调中直接修改 videoFrame,并将返回值设置为 ,即可将修改后的视频数据发送给 SDK。

        如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。

        你可以在回调中获取本地设备采集到的原始视频数据。

        + +

        该回调默认提供的视频数据格式为 I420Buffer 或 TextureBuffer,TextureBuffer 类型的纹理格式可能为 0ES 格式或者 RGB 格式。如果你需要其他格式的视频数据,可在 回调的返回值中设置预期的数据格式。

        +

        该回调默认提供的视频数据格式为 I420 或 CVPixelBufferRef,如果你需要其他格式的视频数据,可在 回调中返回预期的数据格式。

        +

        该回调默认提供的视频数据格式为 YUV420,如果你需要其他格式的视频数据,可在 getVideoFormatPreference 回调的返回值中设置预期的数据格式。

    适用场景 @@ -45,7 +49,7 @@
    触发时机

    成功注册视频数据观测器后,SDK 捕捉到每个视频帧时。

    -
    +
    使用限制
      diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita index 7647ebb013e..9f19aaf9f16 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita @@ -37,6 +37,9 @@

    成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的渲染前的视频数据,然后根据场景需要,对视频数据进行处理。

    +

    该回调默认提供的视频数据格式为 I420Buffer 或 TextureBuffer,TextureBuffer 类型的纹理格式可能为 0ES 格式或者 RGB 格式。如果你需要其他格式的视频数据,可在 回调的返回值中设置预期的数据格式。

    +

    该回调默认提供的视频数据格式为 I420 或 CVPixelBufferRef,如果你需要其他格式的视频数据,可在 回调中返回预期的数据格式。

    +

    该回调默认提供的视频数据格式为 YUV420,如果你需要其他格式的视频数据,可在 getVideoFormatPreference 回调的返回值中设置预期的数据格式。

    • 如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。
    • From 054eb99f61f66d3a7cb23c0862539ec1007cf65d Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 13 Nov 2024 17:56:02 +0800 Subject: [PATCH 264/354] Update callback_ivideoframeobserver_getvideoformatpreference.dita --- .../callback_ivideoframeobserver_getvideoformatpreference.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita index 5f0a26685f2..0bc0f0a6797 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita @@ -32,7 +32,7 @@

      你需要在调用 方法时注册该回调。成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调的返回值中设置期望的视频数据格式。

      在默认情况下,原始视频像素格式 () 存在以下类型:
        -
      • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。TextureBuffer 类型的纹理格式可能为 OES 格式或者 RGB 格式。如果 返回的视频帧类型为 ,你需要在处理视频数据时增加对 I420Buffer 或 TextureBuffer 的适配。视频帧类型固定为 I420Buffer 的情况包括但不限于:
          +
        • 在 Android 平台上,默认的视频帧类型可能为 I420Buffer 或 TextureBuffer。TextureBuffer 类型的纹理格式可能为 OES 格式或者 RGB 格式。如果 返回的视频帧类型为 ,你需要在处理视频数据时增加对 I420Buffer 或 TextureBuffer 的适配。视频帧类型固定为 I420Buffer 的情况包括但不限于:
          • 特定机型,例如:LG G5 SE (H848),Google Pixel 4a,Samsung Galaxy A7 或 Xiaomi Mi Max。
          • 已集成视频增强插件并开启视频降噪或暗光增强功能。
        • From 64f2b69eadf23cacde52c313fdc768628272f68e Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 13 Nov 2024 18:22:40 +0800 Subject: [PATCH 265/354] Update rtc_api_overview.dita --- dita/RTC-NG/API/rtc_api_overview.dita | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index eccb06a52b1..080b7c27cf0 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1108,37 +1108,37 @@ - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + From 23a13b5c153bdef7912852a24b67b2966f9d9406 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 13 Nov 2024 18:35:47 +0800 Subject: [PATCH 266/354] tag --- .../API/callback_ivideoframeobserver_onrendervideoframe.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita index 9f19aaf9f16..6d9517510a6 100644 --- a/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita +++ b/dita/RTC-NG/API/callback_ivideoframeobserver_onrendervideoframe.dita @@ -39,7 +39,7 @@

          成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的渲染前的视频数据,然后根据场景需要,对视频数据进行处理。

          该回调默认提供的视频数据格式为 I420Buffer 或 TextureBuffer,TextureBuffer 类型的纹理格式可能为 0ES 格式或者 RGB 格式。如果你需要其他格式的视频数据,可在 回调的返回值中设置预期的数据格式。

          该回调默认提供的视频数据格式为 I420 或 CVPixelBufferRef,如果你需要其他格式的视频数据,可在 回调中返回预期的数据格式。

          -

          该回调默认提供的视频数据格式为 YUV420,如果你需要其他格式的视频数据,可在 getVideoFormatPreference 回调的返回值中设置预期的数据格式。

          +

          该回调默认提供的视频数据格式为 YUV420,如果你需要其他格式的视频数据,可在 回调的返回值中设置预期的数据格式。

          • 如果你需要将处理后的数据发送给 SDK,需要先调用 方法,将视频处理模式设置为读写模式()。
          • From 1b88aecf651334905d9e00545f86a25a5aa8a791 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 10:52:20 +0800 Subject: [PATCH 267/354] add aosl note in CN/EN release notes --- dita/RTC-NG/release/release_notes.dita | 5 +++++ en-US/dita/RTC-NG/release/release_notes.dita | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 3dba8041b3b..39fce144a92 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -11,6 +11,11 @@ 升级必看

            该版本对部分功能的实现方式进行了优化,涉及 SDK 的行为变更、API 的改名或删除,为确保项目的正常运行,你需要在升级到该版本后更新 App 中的代码。

            + +

            自 4.5.0 起,RTC SDK 和 RTM SDK (2.2.0 及以上版本) 都包含 libaosl.so 库。如果你通过 CDN 手动集成 RTC SDK 且同时集成了 RTM SDK,为避免冲突,请手动删除版本较低的 libaosl.so 库。4.5.0 RTC SDK libaosl.so 库版本为 1.2.13。

            +

            自 4.5.0 起,RTC SDK 和 RTM SDK (2.2.0 及以上版本) 都包含 aosl.xcframework 库。如果你通过 CDN 手动集成 RTC SDK 且同时集成了 RTM SDK,为避免冲突,请手动删除版本较低的 aosl.xcframework 库。4.5.0 RTC SDK aosl.xcframework 库版本为 1.2.13。你可以在 Info.plist 中查看库的版本信息。

            +

            自 4.5.0 起,RTC SDK 和 RTM SDK (2.2.0 及以上版本) 都包含 aosl.dll 库。如果你通过 CDN 手动集成 RTC SDK 且同时集成了 RTM SDK,为避免冲突,请手动删除版本较低的 aosl.dll 库。4.5.0 RTC SDK aosl.dll 库版本为 1.2.13。你可以通过查看 aosl.dll 文件的属性来得知库的版本信息。

            +
            1. 成员参数类型变更

              为提升各框架对 Native SDK 的适配性,该版本对一些 API 中的成员或参数做了如下修改: diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 80c6fa81615..5b46638b5d9 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -11,6 +11,11 @@ Compatibility changes

              This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release.

              + +

              As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the libaosl.so library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the libaosl.so library to avoid conflicts. The libaosl.so library version in RTC SDK v4.5.0 is 1.2.13.

              +

              As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the aosl.xcframework library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the aosl.xcframework library to avoid conflicts. The aosl.xcframework library version in RTC SDK v4.5.0 is 1.2.13. You can check the version in the Info.plist file.

              +

              As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the aosl.dll library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the aosl.dll library to avoid conflicts. The aosl.dll library version in RTC SDK v4.5.0 is 1.2.13. You can check the version by viewing the aosl.dll file properties.

              +
              1. Member Parameter Type Changes

                To enhance the adaptability of various frameworks to the Native SDK, this version has made the following modifications to some API members or parameters: From ad3fa3c460499545b4ece9c62222b2321cfeb203 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 11:12:37 +0800 Subject: [PATCH 268/354] wrong name --- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 5b46638b5d9..b90b01d0e83 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -103,7 +103,7 @@

              2. Live show scenario -

                This version adds the (3) (Live Show) enumeration to the class. You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

                +

                This version adds the (3) (Live Show) enumeration to the . You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

              3. Maximum frame rate for video rendering

                This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

                From 10cccd0f8e25f59c2a00d4bbff977bf03086c214 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 11:19:26 +0800 Subject: [PATCH 269/354] remove key and wording --- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index b90b01d0e83..d9c228d8369 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -103,7 +103,7 @@

              4. Live show scenario -

                This version adds the (3) (Live Show) enumeration to the . You can call to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices.

                +

                This version adds the (3) (Live Show) enumeration to the . You can call to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices.

              5. Maximum frame rate for video rendering

                This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

                From 4af2ffff71ba7e68f9f979e21c45c1a31f44ecbe Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 11:23:23 +0800 Subject: [PATCH 270/354] update windows release --- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- .../en-US/native/release_windows_ng.md | 109 ++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index d9c228d8369..7a7721e63f3 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -119,7 +119,7 @@

                This version introduces the local audio mixing feature. You can call the method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

                Example use cases for this feature include:

                  -
                • By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published.
                • +
                • By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
                • In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels.
                • In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels.
                diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md index e1bc5bede0d..2df18e334bf 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md @@ -1,3 +1,112 @@ +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Attention:** + +As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.dll` library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the `aosl.dll` library to avoid conflicts. The `aosl.dll` library version in RTC SDK v4.5.0 is 1.2.13. You can check the version by viewing the `aosl.dll` file properties. + +1. **Member Parameter Type Changes** + + To enhance the adaptability of various frameworks to the Native SDK, this version has made the following modifications to some API members or parameters: + + | API | Members/Parameters | Change | + | ------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | + | `startScreenCaptureByDisplayId` | **displayId** | Changed from uint32_t to int64_t | + | `startScreenCaptureByWindowId` | **windowId** | Changed from view_t to int64_t | + | `ScreenCaptureConfiguration` |
                • **displayId**
                • **windowId**
                |
                • **displayId**: Changed from uint32_t to int64_t
                • **windowId**: Changed from view_t to int64_t
                | + | `ScreenCaptureSourceInfo` |
                • **sourceDisplayId**
                • **sourceId**
                |
                • **sourceDisplayId**: Changed from view_t to int64_t
                • **sourceId**:Default value changed from `nullptr` to 0
                | + +2. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. The `VIDEO_DENOISER_LEVEL` removes `VIDEO_DENOISER_LEVEL_STRENGTH`. Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions`. + +3. **Changes in camera plug and unplug status** + + In previous versions, when the camera was unplugged and replugged, the `onVideoDeviceStateChanged` callback would report the device status as `MEDIA_DEVICE_STATE_ACTIVE`(1) (device in use). Starting from this version, after the camera is replugged, the device status will change to `MEDIA_DEVICE_STATE_IDLE`(0) (device ready). + +4. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. + - In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +1. **Live show scenario** + + This version adds the `APPLICATION_SCENARIO_LIVESHOW`(3) (Live Show) enumeration to the `VIDEO_APPLICATION_SCENARIO_TYPE`. You can call `setVideoScenario` to set the video business scenario to showroom. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Watching live streaming through URLs** + + As of this version, audience members can directly open a specific URL to play the real-time media stream through `OpenWithUrl`, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. + +4. **Filter effects** + + This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +5. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +6. **Color space settings** + + This version adds the **colorSpace** parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +7. **Others** + + - `onLocalVideoStateChanged` callback adds the `LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). + - `MEDIA_DEVICE_STATE_TYPE` adds the `MEDIA_DEVICE_STATE_PLUGGED_IN` enumeration, indicating that the device has been plugged in. + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - Supports using virtual cameras in YV12 format as video capture devices. + - When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `onPlayerEvent` callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Bug fixes + +This version fixes the following issues: + +- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by **regionRect** was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. +- When calling `followSystemRecordingDevice` or `followSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `onLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. +- Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. + ## v4.4.0 This version was released on July x, 2024. From fa37bae14d26f1fd1cc801b30583b960ab606733 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 11:43:18 +0800 Subject: [PATCH 271/354] ios/mac: add en release notes --- .../en-US/native/release_ios_ng.md | 95 +++++++++++++++++++ .../en-US/native/release_mac_ng.md | 93 ++++++++++++++++++ 2 files changed, 188 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md index e7a4538f232..b9ee519590f 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md @@ -4,6 +4,101 @@ AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Attention:** + +As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcframework` library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the `aosl.xcframework` library to avoid conflicts. The `aosl.xcframework` library version in RTC SDK v4.5.0 is 1.2.13. You can check the version in the `Info.plist` file. + +1. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. The `AgoraVideoDenoiserLevel` removes `AgoraVideoDenoiserLevelStrength`. Instead, after enabling video denoising by calling `setVideoDenoiserOptions:options:`, you can call the `setBeautyEffectOptions:options:` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions:options:`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions:options:`. + +2. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `AgoraCompressionPreference` enumeration class, a new `AgoraCompressionAuto` (-1) enumeration is added, replacing the original `AgoraCompressionQuality` (1) as the default value. In this mode, the SDK will automatically choose between `AgoraCompressionLowLatency` or `AgoraCompressionQuality` based on your video scene settings to achieve the best user experience. + - In the `AgoraDegradationPreference` enumeration class, a new `AgoraDegradationMaintainAuto` (-1) enumeration is added, replacing the original `AgoraDegradationMaintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `AgoraDegradationMaintainFramerate`, `AgoraDegradationBalanced`, or `AgoraDegradationMaintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +1. **Live show scenario** + + This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Watching live streaming through URLs** + + As of this version, audience members can directly open a specific URL to play the real-time media stream through `openWithUrl:startTime:cb:`, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. + +4. **Filter effects** + + This version introduces the `setFilterEffectOptions:options:sourceType:` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +5. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +6. **Color space settings** + + This version adds the `colorSpace` parameter to `AgoraOutputVideoFrame` and `AgoraVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +7. **Others** + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshotWithConfig:config:` and `takeSnapshotExWithConfig:uid:config:` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AgoraAudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `NO`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - After calling `enableLocalAudio:` to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. + - When calling `switchSrc:syncPts:` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `AgoraRtcMediaPlayer:didOccurEvent:elapsedTime:message:` callback will report the `AgoraMediaPlayerEventSwitchError` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed:` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Bug fixes + +This version fixes the following issues: + +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. +- No sound when playing online media resources using the media player after the app starts. +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. +- Calling `startAudioMixing:loopback:cycle:` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. + ## v4.4.0 This version was released on July x, 2024. diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md index c08547b8885..fcba4a72c33 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md @@ -1,3 +1,96 @@ +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Attention:** + +As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcframework` library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the `aosl.xcframework` library to avoid conflicts. The `aosl.xcframework` library version in RTC SDK v4.5.0 is 1.2.13. You can check the version in the `Info.plist` file. + +1. **Automatic installation of virtual sound card** + + Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call `enableLoopbackRecording:deviceName:` for the first time, the SDK will automatically install the AgoraALD, a virtual sound card developed by Agora. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture. + +2. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. The `AgoraVideoDenoiserLevel` removes `AgoraVideoDenoiserLevelStrength`. Instead, after enabling video denoising by calling `setVideoDenoiserOptions:options:`, you can call the `setBeautyEffectOptions:options:` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions:options:`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions:options:`. + +3. **Changes in camera plug and unplug status** + + In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged. + +4. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `AgoraCompressionPreference` enumeration class, a new `AgoraCompressionAuto` (-1) enumeration is added, replacing the original `AgoraCompressionQuality` (1) as the default value. In this mode, the SDK will automatically choose between `AgoraCompressionLowLatency` or `AgoraCompressionQuality` based on your video scene settings to achieve the best user experience. + - In the `AgoraDegradationPreference` enumeration class, a new `AgoraDegradationMaintainAuto` (-1) enumeration is added, replacing the original `AgoraDegradationMaintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `AgoraDegradationMaintainFramerate`, `AgoraDegradationBalanced`, or `AgoraDegradationMaintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +1. **Live show scenario** + + This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Watching live streaming through URLs** + + As of this version, audience members can directly open a specific URL to play the real-time media stream through `openWithUrl:startTime:cb:`, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. + +4. **Filter effects** + + This version introduces the `setFilterEffectOptions:options:sourceType:` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +5. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +6. **Color space settings** + + This version adds the `colorSpace` parameter to `AgoraOutputVideoFrame` and `AgoraVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshotWithConfig:config:` and `takeSnapshotExWithConfig:uid:config:` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AgoraAudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `NO`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - When calling `switchSrc:syncPts:` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `AgoraRtcMediaPlayer:didOccurEvent:elapsedTime:message:` callback will report the `AgoraMediaPlayerEventSwitchError` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed:` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Bug fixes + +This version fixes the following issues: + +- Calling `startAudioMixing:loopback:cycle:` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. + ## v4.4.0 This version was released on July x, 2024. From 8d74c24ddb7bee746ed21ed22a4c709f6d8db02f Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 11:45:42 +0800 Subject: [PATCH 272/354] update ios/mac release --- markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md | 4 ++-- markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md index b9ee519590f..b3e468f49f8 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md @@ -33,7 +33,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr 1. **Live show scenario** - This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. + This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. 2. **Maximum frame rate for video rendering** @@ -55,7 +55,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr Example use cases for this feature include: - - By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published. + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md index fcba4a72c33..4ef3ad3b836 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md @@ -35,7 +35,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr 1. **Live show scenario** - This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to . To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. + This version adds the `AgoraApplicationLiveShowScenario`(3) (Live Show) enumeration to the `AgoraApplicationScenarioType`. You can call `setVideoScenario:` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the performance in weak network environments and on low-end devices. 2. **Maximum frame rate for video rendering** @@ -57,7 +57,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr Example use cases for this feature include: - - By utilizing the local image stitching feature, the associated audio streams of the stitched video streams can be simultaneously captured and published. + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. From 87b045be9234bd6a43aae899c2751f7474a669f2 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 11:50:46 +0800 Subject: [PATCH 273/354] update --- dita/RTC-NG/API/class_playerconfig.dita | 8 ++++---- en-US/dita/RTC-NG/API/class_playerconfig.dita | 8 ++++---- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/class_playerconfig.dita b/dita/RTC-NG/API/class_playerconfig.dita index 0ca399ca9bd..4fefd242147 100644 --- a/dita/RTC-NG/API/class_playerconfig.dita +++ b/dita/RTC-NG/API/class_playerconfig.dita @@ -58,19 +58,19 @@ 获取自动播放设置。详见 - + 设置订阅的媒体流的质量层级。详见 - + 获取所订阅的视频流的质量层级。详见 - + 设置订阅的视频流的回退选项。详见 - + 获取设置的视频流回退选项。详见 diff --git a/en-US/dita/RTC-NG/API/class_playerconfig.dita b/en-US/dita/RTC-NG/API/class_playerconfig.dita index 16586503bb1..ea7e84b9efd 100644 --- a/en-US/dita/RTC-NG/API/class_playerconfig.dita +++ b/en-US/dita/RTC-NG/API/class_playerconfig.dita @@ -58,19 +58,19 @@ Gets the autoplay settings. See . - + Sets the quality level of the subscribed media stream. See . - + Gets the quality level of the subscribed video stream. See . - + Sets the fallback option of the subscribed video stream. See . - + Gets the fallback option of video stream. See . diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 7a7721e63f3..47d406d4e1f 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -182,7 +182,7 @@
              6. When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
              7. When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
              8. Occasional noise and stuttering when playing music resources from the music content center. (Android)
              9. -
              10. Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
              11. +
              12. Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
              13. During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
              14. When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
              15. Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
              16. From a927ea956350fb9593b41e92dbceafe440bd3508 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 12:06:33 +0800 Subject: [PATCH 274/354] minor fix --- .../config/keys-rtc-ng-api-java.ditamap | 14 +++++++ .../config/keys-rtc-ng-links-android.ditamap | 7 ++++ en-US/dita/RTC-NG/release/release_notes.dita | 39 ++++++++++--------- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 00946ab6624..26ba160375f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -6275,6 +6275,20 @@ + + + + getColorSpace + + + + + + + setColorSpace + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap index 0175a31e6d3..4a86d4efba1 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-links-android.ditamap @@ -101,5 +101,12 @@ + + + + Support 16 KB page sizes + + + diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 47d406d4e1f..e2a8f3d43dc 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -68,9 +68,12 @@

                Starting from this version, the SDK supports the automatic installation of a virtual sound card. When you call for the first time, the SDK will automatically install the AgoraALD, a virtual sound card developed by Agora. Once the installation is successful, the audio routing will automatically switch to the virtual sound card, and the virtual sound card will be used for audio capture.

              17. Changes in strong video denoising implementation -

                This version adjusts the implementation of strong video denoising. The removes . Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

                -

                Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

                -
              18. +

                This version adjusts the implementation of strong video denoising.

                +

                The removes .

                +

                The enumeration is removed.

                +

                Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

                +

                Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

                +
              19. Changes in camera plug and unplug status (macOS, Windows)

                In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

                In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged.

                @@ -82,9 +85,9 @@
              20. In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).
              21. -
              22. 16 KB memory page size (Android) -

                Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

                -
              23. +
              24. 16 KB memory page size +

                Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

                +
              @@ -125,13 +128,13 @@

              -
            2. External MediaProjection (Android) -

              This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

              -

              If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture.

              -
            3. -
            4. EGL context (Android) -

              This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

              -
            5. +
            6. External MediaProjection +

              This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

              +

              If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture.

              +
            7. +
            8. EGL context +

              This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

              +
            9. Color space settings

              This version adds and to . You can use to obtain the color space properties of the video frame and use to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing.

              This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

              @@ -180,11 +183,11 @@

              This version fixes the following issues:

              • When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
              • -
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
              • -
              • Occasional noise and stuttering when playing music resources from the music content center. (Android)
              • +
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations.
              • +
              • Occasional noise and stuttering when playing music resources from the music content center.
              • Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
              • -
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
              • -
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
              • +
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect.
              • +
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected.
              • Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
              • When calling or to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback is not triggered when the audio device is removed, which is not as expected. (Windows)
              • Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
              • @@ -193,7 +196,7 @@
              • No sound when playing online media resources using the media player after the app starts. (iOS)
              • Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
              • Calling and then immediately calling to pause the music file playback does not take effect.
              • -
              • Occasional crashes during audio and video interaction. (Android)
              • +
              • Occasional crashes during audio and video interaction.
              From a3e888843ef8bd43890f7795e629f00132a0e33b Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 12:25:58 +0800 Subject: [PATCH 275/354] Update release_android_ng.md --- .../en-US/native/release_android_ng.md | 1106 +---------------- 1 file changed, 60 insertions(+), 1046 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md index 4db20af91fa..13ed52db0ba 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md @@ -1,1095 +1,109 @@ -## Known issues and limitations +# Release notes (Android) -**Android 14 screen sharing issue** +## v4.5.0 -On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. +This version was released on November x, 2024. - -## v4.4.1 - -This version was released on Aug x, 2024. - -#### Issues fixed - -This version fixed the issue where `io.agora.rtc:full-rtc-basic:4.4.0` and `io.agora.rtc:voice-rtc-basic:4.4.0` were not working properly on Maven Central due to an upload error. - - - -## v4.4.0 - -This version was released on July x, 2024. - - -#### Compatibility changes +### Compatibility changes This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. -**Attention:** Starting from v4.4.0, the RTC SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See [API Sunset Notice](https://doc.shengwang.cn/api-ref/rtc/android/API/rtc_api_sunset). - -1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. - - | Original callback | Current callback | - | ------------------ | ---------------------- | - | `onEvent` | `onEventWithContext` | - | `onStarted` | `onStartedWithContext` | - | `onStopped` | `onStoppedWithContext` | - | `onError` | `onErrorWithContext` | - -2. This version removes the `buffer`, `uid`, and `timeStampMs` parameters of the `onMetadataReceived` callback. You can get metadata-related information, including `timeStampMs` (timestamp of the sent data), `uid` (user ID), and `channelId` (channel name) through the newly-added `metadata` parameter. - -#### New features - -1. **Lite SDK** - - Starting from this version, Agora introduces the Lite SDK, which includes only the basic audio and video capabilities and partially cuts advanced features, effectively reducing the app size after integrating the SDK. - - - Lite SDK supports manual integration or third-party repository integration. For details, see [Download SDKs]() and [Integrate the SDK](). - - For information on dynamic libraries included in the Lite SDK, see [App size optimization](). - - For the list of APIs supported by the Lite SDK, see [Lite SDK API List](https://doc.shengwang.cn/api-ref/rtc/android/API/rtc_lite_api). - - For the limitations and precautions when using the Lite SDK to play media files, please refer to [Which audio file formats are supported by RTC SDK?](https://doc.shengwang.cn/faq/general-product-inquiry/audio-format) - -2. **Alpha transparency effects** - - This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: - - - `VideoFrame` and `AgoraVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. - - `AgoraVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. - - `VideoFrame` and `AgoraVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. - - Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. - -3. **Voice AI tuner** - - This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VOICE_AI_TUNER_TYPE` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. - -4. **1v1 video call scenario** - - This version adds `APPLICATION_SCENARIO_1V1` (1v1 video call) in `VideoScenario`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. - -#### Improvements - -1. **Adaptive hardware decoding support** - - This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. - -2. **Facial region beautification** - - To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. - -3. **Other improvements** - - This version also includes the following improvements: - - - Optimizes the parameter types of the following APIs. These improvements enhance code readability, reduce potential errors, and facilitate future maintenance. - - Deprecates the `option` parameter of type int in `setRemoteSubscribeFallbackOption` [1/2], and adds an overloaded function `setRemoteSubscribeFallbackOption` [2/2] with the `option` parameter of type `StreamFallbackOptions`. - - Deprecates the `streamType` parameter of type int in `setRemoteVideoStreamType` [1/2], `setRemoteDefaultVideoStreamType` [1/2], and `setRemoteVideoStreamTypeEx` [1/2], and adds overloaded functions `setRemoteVideoStreamType` [2/2], `setRemoteDefaultVideoStreamType` [2/2], and `setRemoteVideoStreamTypeEx` [2/2] with the `streamType` parameter of type `VideoStreamType`. - - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. - - Deprecates redundant enumeration values `CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUT` and `CLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED`. - -#### Issues fixed - -This release fixed the following issues: - -- Audio playback failed when pushing external audio data using `pushExternalAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. - - - -## v4.3.2 - -This version was released on May x, 20xx. - -#### Improvements - -1. This release enhances the usability of the [setRemoteSubscribeFallbackOption](API/api_irtcengine_setremotesubscribefallbackoption.html) method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions. -2. The Agora media player supports playing MP4 files with an Alpha channel. -3. The Agora media player fully supports playing music files located in the `/assets/` directory or from URI starting with `content://`. - -#### Issues fixed - -This version fixed the following issues: - -- Occasional video smoothness issues during audio and video interactions. -- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number. -- The app crashed when opening the app and starting screen sharing after the first installation or system reboot. -- Local audio capture failed after joining a channel while answering a system phone call and hanging up, causing remote users to not hear any sound. -- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end. (Android) -- The app occasionally crashed when remote users left the channel. -- The values of `cameraDirection` and `focalLengthType` in returned by [queryCameraFocalLengthCapability](API/api_irtcengine_querycamerafocallengthcapability.html) could not be read directly. - - -## v4.3.1 - -This version is released on 2024 Month x, Day x. - -#### Compatibility changes - -To ensure parameter naming consistency, this version renames `channelName` to `channelId` and `optionalUid` to `uid` in `joinChannel` [1/2]. You must update your app's code after upgrading to this version to ensure normal project operations. - -#### New features - -1. **Speech Driven Avatar** - - The SDK introduces a speech driven extension that converts speech information into corresponding facial expressions to animate avatar. You can access the facial information through the newly added [`registerFaceInfoObserver`](/api-ref/rtc/android/API/toc_speech_driven#api_imediaengine_registerfaceinfoobserver) method and [`onFaceInfo`](/api-ref/rtc/android/API/toc_speech_driven#callback_ifaceinfoobserver_onfaceinfo) callback. This facial information conforms to the ARKit standard for Blend Shapes (BS), which you can further process using third-party 3D rendering engines. - - The speech driven extension is a trimmable dynamic library, and details about the increase in app size are available at [reduce-app-size](). - - **Attention:** - - The speech driven avatar feature is currently in beta testing. To use it, please contact [technical support](mailto:support@agora.io). - -2. **Wide and ultra-wide cameras** - - To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call [`queryCameraFocalLengthCapability`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_querycamerafocallengthcapability) to check the device's focal length capabilities, and then call [`setCameraCapturerConfiguration`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_setcameracapturerconfiguration) and set `cameraFocalLengthType` to the supported focal length types, including wide and ultra-wide. - -3. **Multi-camera capture** - - This release introduces additional functionalities for Android camera capture: - - 1. Support for capturing and publishing video streams from the third and fourth cameras: - - New enumerators `VIDEO_SOURCE_CAMERA_THIRD`(11) and `VIDEO_SOURCE_CAMERA_FOURTH`(12) are added to [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype), specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling [`startCameraCapture`](/api-ref/rtc/android/API/toc_camera_capture#api_irtcengine_startcameracapture). - - New parameters `publishThirdCameraTrack` and `publishFourthCameraTrack` are added to [`ChannelMediaOptions`](/api-ref/rtc/android/API/class_channelmediaoptions). Set these parameters to `true` when joining a channel with [`joinChannel`](/api-ref/rtc/android/API/toc_channel#api_irtcengine_joinchannel2)[2/2] to publish video streams captured from the third and fourth cameras. - 2. Support for specifying cameras by camera ID: - - A new parameter `cameraId` is added to [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration). For devices with multiple cameras, where `cameraDirection` cannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling [`startCameraCapture`](/api-ref/rtc/android/API/toc_camera_capture#api_irtcengine_startcameracapture) with the specific `cameraId`. - - New method [`switchCamera`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_switchcamera2)[2/2] supports switching cameras by `cameraId`, allowing apps to dynamically adjust camera usage during runtime based on available cameras. - -4. **Data stream encryption** - - This version adds `datastreamEncryptionEnabled` to [`EncryptionConfig`](/api-ref/rtc/android/API/class_encryptionconfig) for enabling data stream encryption. You can set this when you activate encryption with [`enableEncryption`](/api-ref/rtc/android/API/toc_network#api_irtcengine_enableencryption). If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly added `ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE` and `ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE` enumerations. - -5. **Local Video Rendering** - - This version adds the following members to [`VideoCanvas`](/api-ref/rtc/android/API/class_videocanvas) to support more local rendering capabilities: - - - `surfaceTexture`: Set a native Android `SurfaceTexture` object as the container providing video imagery, then use SDK external methods to perform OpenGL texture rendering. - - `enableAlphaMask`: This member enables the receiving end to initiate alpha mask rendering. Alpha mask rendering can create images with transparent effects or extract human figures from video content. - -6. **Adaptive configuration for low-quality video streams** - - This version introduces adaptive configuration for low-quality video streams. When you activate dual-stream mode and set up low-quality video streams on the sending side using [`setDualStreamMode`](/api-ref/rtc/android/API/toc_dual_stream#api_irtcengine_setdualstreammode2)[2/2], the SDK defaults to the following behaviors: - - - The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution. - - The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification. - -7. **Other features** - - - New method [`enableEncryptionEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_enableencryptionex) is added for enabling media stream or data stream encryption in multi-channel scenarios. - - New method [`setAudioMixingPlaybackSpeed`](/api-ref/rtc/android/API/toc_audio_mixing#api_irtcengine_setaudiomixingplaybackspeed) is introduced for setting the playback speed of audio files. - - New method [`getCallIdEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_getcallidex) is introduced for retrieving call IDs in multi-channel scenarios. - -#### Improvements - -1. **Optimization of local video status callbacks** - - This version introduces the following enumerations, allowing you to understand more about the reasons behind changes in local video status through the [`onLocalVideoStateChanged`](/api-ref/rtc/android/API/toc_video_basic#callback_irtcengineeventhandler_onlocalvideostatechanged) callback: - - - `LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT` (14): Video capture is interrupted due to the camera being occupied by another app or the app moving to the background. - - `LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR` (15): Video capture device errors, possibly due to camera equipment failure. - -2. **Camera capture improvements** - - Improvements have been made to the video processing mechanism of camera capture, reducing noise, enhancing brightness, and improving color, making the captured images clearer, brighter, and more realistic. - -3. **Virtual Background Algorithm Optimization** - - To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm: - - - Supports recognition of any solid color background, no longer limited to green screens. - - Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation. - - After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges. - -4. **CPU consumption reduction of in-ear monitoring** - - This release adds an enumerator `EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER` (1<<15). For complex audio processing scenarios, you can specify this option to reuse the audio filter post sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant scenarios requiring low CPU consumption. - -5. **Other improvements** - - This version also includes the following improvements: - - - Enhanced performance and stability of the local compositing feature, reducing its CPU usage. - - Enhanced media player capabilities to handle WebM format videos, including support for rendering alpha channels. - - New chorus effect `ROOM_ACOUSTICS_CHORUS` is added to enhances the spatial presence of vocals in chorus scenarios. - - In [`RemoteAudioStats`](/api-ref/rtc/android/API/class_remoteaudiostats), a new `e2eDelay` field is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end. - -#### Issues fixed - -This version fixed the following issues: - -- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player. -- After joining a channel and calling [`disableAudio`](/api-ref/rtc/android/API/toc_audio_basic#api_irtcengine_disableaudio), audio playback did not immediately stop. -- Broadcasters using certain models of devices under speaker mode experienced occasional local audio capture failures when switching the app process to the background and then back to the foreground, causing remote users to not hear the broadcaster's audio. -- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash. -- In scenarios using camera capture for local video, when the app was moved to the background and [`disableVideo`](/api-ref/rtc/android/API/toc_video_basic#api_irtcengine_disablevideo) or [`stopPreview`](/api-ref/rtc/android/API/toc_video_basic#api_irtcengine_stoppreview)[1/2] was called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground. -- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag. - -#### API Changes - -**Added** - -- The `surfaceTexture` and `enableAlphaMask` members in [`VideoCanvas`](/api-ref/rtc/android/API/class_videocanvas) -- `LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT` -- `LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR` -- [`registerFaceInfoObserver`](/api-ref/rtc/android/API/toc_speech_driven#api_imediaengine_registerfaceinfoobserver) -- [`IFaceInfoObserver`](/api-ref/rtc/android/API/class_ifaceinfoobserver) -- [`onFaceInfo`](/api-ref/rtc/android/API/toc_speech_driven#callback_ifaceinfoobserver_onfaceinfo) -- [`MediaSourceType`](/api-ref/rtc/android/API/enum_mediasourcetype) adds `SPEECH_DRIVEN_VIDEO_SOURCE` -- [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype) adds `VIDEO_SOURCE_SPEECH_DRIVEN` -- [`EncryptionConfig`](/api-ref/rtc/android/API/class_encryptionconfig) adds `datastreamEncryptionEnabled` -- `ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE` -- `ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE` -- [`RemoteAudioStats`](/api-ref/rtc/android/API/class_remoteaudiostats) adds `e2eDelay` -- `ERR_DATASTREAM_DECRYPTION_FAILED` -- `ROOM_ACOUSTICS_CHORUS` is added, enhancing the spatial presence of vocals in chorus scenarios. -- [`getCallIdEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_getcallidex) -- [`enableEncryptionEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_enableencryptionex) -- [`setAudioMixingPlaybackSpeed`](/api-ref/rtc/android/API/toc_audio_mixing#api_irtcengine_setaudiomixingplaybackspeed) -- [`queryCameraFocalLengthCapability`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_querycamerafocallengthcapability) -- [`AgoraFocalLengthInfo`](/api-ref/rtc/android/API/class_focallengthinfo) -- [`CAMERA_FOCAL_LENGTH_TYPE`](/api-ref/rtc/android/API/enum_camerafocallengthtype) -- [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration) adds a new member `cameraFocalLengthType` -- [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype) adds the following enumerations: - - `VIDEO_SOURCE_CAMERA_THIRD`(11) - - `VIDEO_SOURCE_CAMERA_FOURTH`(12) -- [`ChannelMediaOptions`](/api-ref/rtc/android/API/class_channelmediaoptions) adds the following members: - - `publishThirdCameraTrack` - - `publishFourthCameraTrack` - - `publishLipSyncTrack` -- [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration) adds a new member `cameraId` -- [`CAMERA_DIRECTION`](/api-ref/rtc/android/API/enum_cameradirection) adds `CAMERA_EXTRA`(2) -- [`switchCamera`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_switchcamera2)[2/2] -- `EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS`(1<<15) - -## v4.3.0 - -v4.3.0 was released on xx xx, 2024. - -#### Compatibility changes - -This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. - -1. **Raw video data callback behavior change** - - As of this release, the callback processing related to raw video data changes from the previous fixed single thread to a random thread, meaning that callback processing can occur on different threads. Due to limitations in the Android system, OpenGL must be tightly bound to a specific thread. Therefore, Agora suggests that you make one of the following modifications to your code: - - - (Recommended) Use the `TextureBufferHelper` class to create a dedicated OpenGL thread for video pre-processing or post-processing (for example, image enhancement, stickers, etc.). - - Use the `eglMakeCurrent` method to associate the necessary OpenGL context for each video frame with the current thread. - -2. **Renaming parameters in callbacks** - - In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. - - | Callback | Original parameter name | Existing parameter name | - | ---------------------------------- | ----------------------- | ----------------------- | - | `onLocalAudioStateChanged` | `error` | `reason` | - | `onLocalVideoStateChanged` | `error` | `reason` | - | `onDirectCdnStreamingStateChanged` | `error` | `reason` | - | `onPlayerStateChanged` | `error` | `reason` | - | `onRtmpStreamingStateChanged` | `errCode` | `reason` | - - | Original enumeration class | Current enumeration class | - | -------------------------- | -------------------------- | - | `DirectCdnStreamingReason` | `DirectCdnStreamingReason` | - | `MediaPlayerReason` | `MediaPlayerReason` | - - **Note:** For specific renaming of enumerations, please refer to [API changes](C#apichange). - -3. **Channel media relay** - - To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: - - | Deleted methods and callbacks | Alternative methods and callbacks | - | ----------------------------------------------------- | ---------------------------------- | - |
              • `startChannelMediaRelay`
              • `updateChannelMediaRelay`
              | `startOrUpdateChannelMediaRelay` | - |
              • `startChannelMediaRelayEx`
              • `updateChannelMediaRelayEx`
              | `startOrUpdateChannelMediaRelayEx` | - | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | - -4. **Custom video source** - - Since this release, `pushExternalVideoFrameEx`[1/2] and `pushExternalVideoFrameEx`[2/2] are renamed to `pushExternalVideoFrameById`[1/2] and `pushExternalVideoFrame`[1/2], and are migrated from `RtcEngineEx` to `RtcEngine`. - -5. **Audio route** - - Since this release, `RouteBluetooth` is renamed to `AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP`, representing a Bluetooth device using the HFP protocol. The `AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP`(10) is added to represent a Bluetooth device using the A2DP protocol. - -6. **The state of the remote video** - - To make the name of the enumeration easier to understand, this release changes the name of the enumeration from `REMOTE_VIDEO_STATE_PLAYING` to `REMOTE_VIDEO_STATE_DECODING`, while the meaning of the enumeration remains unchanged. - -7. **Reasons for local video state changes** - - The `LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE` enumeration has been changed to `LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT`. - -8. **Log encryption behavior changes** - - For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. - - Refer to the following solutions for different needs: - - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. - - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. - -9. **Removing IAgoraEventHandler interface** - - This release deletes the `IAgoraEventHandler` interface class. All callback events that were previously managed under this class are now processed through the `IRtcEngineEventHandler` interface class. - -#### New features - -1. **Custom mixed video layout on receiving end** - - To facilitate customized layout of mixed video stream at the receiver end, this release introduces the [`onTranscodedStreamLayoutInfo`](API/callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo.html) callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate `view` for rendering the sub-video stream (distinguished by `subviewUid`) in the mixed video stream when calling the [`setupRemoteVideo`](API/api_irtcengine_setupremotevideo.html) method, achieving a custom video layout effect. - - When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time. - - Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video scenario, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end. - -2. **Local preview with multiple views** - - This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: - - 1. Call [`setupLocalVideo`](API/api_irtcengine_setuplocalvideo.html) to set the first view: Set the `position` parameter to `VIDEO_MODULE_POSITION_POST_CAPTURER_ORIGIN` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. - 2. Call [`setupLocalVideo`](API/api_irtcengine_setuplocalvideo.html) to set the second view: Set the `position` parameter to `VIDEO_MODULE_POSITION_POST_CAPTURER` in `VideoCanvas`, the video observed here has the effect of video preprocessing. - 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. - -3. **Query device score** - - This release adds the [`queryDeviceScore`](API/api_irtcengine_querydevicescore.html) method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). - -4. **Select different audio tracks for local playback and streaming** - - This release introduces the [`selectMultiAudioTrack`](API/api_imediaplayer_selectmultiaudiotrack.html) method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the [`openWithMediaSource`](API/api_imediaplayer_openwithmediasource.html) method and enable this function by setting the `enableMultiAudioTrack` parameter in [`MediaPlayerSource`](API/class_mediasource.html). - -5. **Audio playback device test** - - This release introduces the [`startPlaybackDeviceTest`](API/api_iaudiodevicemanager_startplaybackdevicetest.html) method to allow you to test whether you local audio device for playback works properly. You can specify the audio file to be played through the `testAudioFilePath` parameter and see if your audio device works properly. After the test is completed, you need to call the newly added [`stopPlaybackDeviceTest`](API/api_iaudiodevicemanager_stopplaybackdevicetest.html) method to stop the test. - -6. **Others** - - This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. - - - [`setRemoteSubscribeFallbackOption`](API/api_irtcengine_setremotesubscribefallbackoption.html): Sets fallback option for the subscribed video stream in weak network conditions. - - [`onRemoteSubscribeFallbackToAudioOnly`](API/callback_irtcengineeventhandler_onremotesubscribefallbacktoaudioonly.html): Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. - - [`setPlayerOption`](API/api_imediaplayer_setplayeroption.html) and [`setPlayerOptionString`](API/api_imediaplayer_setplayeroption2.html): Sets media player options for providing technical previews or special customization features. - - [`enableCustomAudioLocalPlayback`](API/api_irtcengine_enablecustomaudiolocalplayback.html): Sets whether to enable the local playback of external audio source. - -#### Improvements - -1. **SDK task processing scheduling optimization** - - This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: - - - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. - - The API call duration and response time are reduced by 5% to 50%. - - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. - - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. - -2. **In-ear monitoring volume boost** - - This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling [`setInEarMonitoringVolume`](API/api_irtcengine_setinearmonitoringvolume.html). - - -3. **Spatial audio effects usability improvement** - - - This release optimizes the design of the [`setZones`](API/api_ibasespatialaudioengine_setzones.html) method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. - - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the [`ILocalSpatialAudioEngine`](API/class_ilocalspatialaudioengine.html) method. - -4. **Optimization of video pre-processing methods** - - This release adds overloaded methods with the `sourceType` parameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing in `sourceType` (for example, applying on a custom video capture media source): - - - [`setBeautyEffectOptions` [2/2]](API/api_irtcengine_setbeautyeffectoptions2.html) - - [`setLowlightEnhanceOptions` [2/2]](API/api_irtcengine_setlowlightenhanceoptions2.html) - - [`setVideoDenoiserOptions` [2/2]](API/api_irtcengine_setvideodenoiseroptions2.html) - - [`setColorEnhanceOptions` [2/2]](API/api_irtcengine_setcolorenhanceoptions2.html) - - [`enableVirtualBackground` [2/2]](API/api_irtcengine_enablevirtualbackground2.html) - -5. **Other improvements** - - This release also includes the following improvements: - - - Adds `codecType` in [`VideoEncoderConfiguration`](API/class_videoencoderconfiguration.html) to set the video encoding type. - - Adds `allowCaptureCurrentApp` member in [`AudioCaptureParameters`](API/class_screenaudioparameters.html), which is used to set whether to capture audio from the current app during screen sharing. The default value of this member is `true`, which means it collects the audio from the current app by default. In certain scenarios, the shared screen audio captured by the app may cause echo on the remote side due to signal delay and other reasons. Agora suggests setting this member as `false` to eliminate the remote echo introduced during the screen sharing process. - - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling `setLocalAccessPoint` to resolve domain names in complex network environments. - - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. - - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in [`LocalAudioStats`](API/class_localaudiostats.html) to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. - - The [`onPlayerCacheStats`](API/callback_imediaplayersourceobserver_onplayercachestats.html) callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. - - The [`onPlayerPlaybackStats`](API/callback_imediaplayersourceobserver_onplayerplaybackstats.html) callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through [`PlayerPlaybackStats`](API/class_playerplaybackstats.html). - -#### Issues fixed - -This release fixed the following issues: - -- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the [`onLocalVideoStats`](API/callback_irtcengineeventhandler_onlocalvideostats.html) callback is 0, which is not as expected. -- In a online meeting scenario, occasional audio freezes occurred when the local user was listening to remote users. - -#### API changes - - - -**Added** - -- [`onTranscodedStreamLayoutInfo`](API/callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo.html) -- [`VideoLayout`](API/class_videolayout.html) -- The `subviewUid` and `uid` members in `VideoCanvas` -- The `codecType` member in [`VideoEncoderConfiguration`](API/class_videoencoderconfiguration.html) -- The `allowCaptureCurrentApp` member in [AudioCaptureParameters](API/class_screenaudioparameters.html) -- [`enableCustomAudioLocalPlayback`](API/api_irtcengine_enablecustomaudiolocalplayback.html) -- [`selectMultiAudioTrack`](API/api_imediaplayer_selectmultiaudiotrack.html) -- [`onPlayerCacheStats`](API/callback_imediaplayersourceobserver_onplayercachestats.html) -- [`onPlayerPlaybackStats`](API/callback_imediaplayersourceobserver_onplayerplaybackstats.html) -- [`PlayerPlaybackStats`](API/class_playerplaybackstats.html) -- [`startPlaybackDeviceTest`](API/api_iaudiodevicemanager_startplaybackdevicetest.html) -- [`stopPlaybackDeviceTest`](API/api_iaudiodevicemanager_stopplaybackdevicetest.html) -- The `earMonitorDelay` and `aecEstimatedDelay` members in [LocalAudioStats](API/class_localaudiostats.html) -- [`queryDeviceScore`](API/api_irtcengine_querydevicescore.html) -- The `CUSTOM_VIDEO_SOURCE` enumeration in [MediaSourceType](API/enum_mediasourcetype.html) -- [`setBeautyEffectOptions` [2/2]](API/api_irtcengine_setbeautyeffectoptions2.html) -- [`setLowlightEnhanceOptions` [2/2]](API/api_irtcengine_setlowlightenhanceoptions2.html) -- [`setVideoDenoiserOptions` [2/2]](API/api_irtcengine_setvideodenoiseroptions2.html) -- [`setColorEnhanceOptions` [2/2]](API/api_irtcengine_setcolorenhanceoptions2.html) -- [`enableVirtualBackground` [2/2]](API/api_irtcengine_enablevirtualbackground2.html) -- The `AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP` enumeration - -**Modified** - -- `pushExternalVideoFrameEx`[1/2] and `pushExternalVideoFrameEx`[2/2] are renamed to `pushExternalVideoFrameById`[1/2] and `pushExternalVideoFrameById`[2/2], and are migrated from `RtcEngineEx` to `RtcEngine` -- `REMOTE_VIDEO_STATE_PLAYING` enumeration name changed to`REMOTE_VIDEO_STATE_DECODING` -- `ROUTE_BLUETOOTH` is renamed as `AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP` -- All `ERROR` fields in the following enumerations are changed to `REASON`: - - `LOCAL_AUDIO_STREAM_ERROR_OK` - - `LOCAL_AUDIO_STREAM_ERROR_FAILURE` - - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION` - - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY` - - `LOCAL_AUDIO_STREAM_ERROR_CAPTURE_FAILURE` - - `LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE` - - `LOCAL_VIDEO_STREAM_ERROR_OK` - - `LOCAL_VIDEO_STREAM_ERROR_FAILURE` - - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION` - - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY` - - `LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE` - - `LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORT` - - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND` - - `PLAYER_ERROR_NONE` - - `PLAYER_ERROR_INVALID_ARGUMENTS` - - `PLAYER_ERROR_INTERNAL` - - `PLAYER_ERROR_NO_RESOURCE` - - `PLAYER_ERROR_INVALID_MEDIA_SOURCE` - - `PLAYER_ERROR_UNKNOWN_STREAM_TYPE` - - `PLAYER_ERROR_OBJ_NOT_INITIALIZED` - - `PLAYER_ERROR_CODEC_NOT_SUPPORTED` - - `PLAYER_ERROR_VIDEO_RENDER_FAILED` - - `PLAYER_ERROR_INVALID_STATE` - - `PLAYER_ERROR_URL_NOT_FOUND` - - `PLAYER_ERROR_INVALID_CONNECTION_STATE` - - `PLAYER_ERROR_SRC_BUFFER_UNDERFLOW` - - `PLAYER_ERROR_INTERRUPTED` - - `PLAYER_ERROR_NOT_SUPPORTED` - - `PLAYER_ERROR_TOKEN_EXPIRED` - - `PLAYER_ERROR_UNKNOWN` - - `RTMP_STREAM_PUBLISH_ERROR_OK` - - `RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT` - - `RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED` - - `RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT` - - `RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR` - - `RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR` - - `RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN` - - `RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT` - - `RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED` - - `RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND` - - `RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED` - - `RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER` - - `RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM` - - `RTMP_STREAM_PUBLISH_ERROR_NET_DOWN` - - `RTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGE` - - `RTMP_STREAM_UNPUBLISH_ERROR_OK` - -**Deleted** - -- `startChannelMediaRelay` -- `updateChannelMediaRelay` -- `startChannelMediaRelayEx` -- `updateChannelMediaRelayEx` -- `onChannelMediaRelayEvent` - - -## v4.2.6 - -v4.2.6 was released on November xx, 2023. - -#### Issues fixed - -This version fixed the following issues that may occur when using Android 14: - -- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users need to confirm recording the screen in the pop-up window. -- When integrating the SDK, setting the Android `targetSdkVersion` to 34 may cause screen sharing to be unavailable or even cause the app to crash. -- Calling `startScreenCapture` without sharing video (setting `captureVideo` to `false`) and then calling `updateScreenCaptureParameters` to share video (setting `captureVideo` to `true`) resulted in a frozen shared screen at the receiving end. -- When screen sharing in landscape mode, the shared screen seen by the audience was divided into two parts: one side of the screen was compressed; the other side was black. - -This version also fixed the following issues: - -- In live streaming scenarios, the video on the audience end occasionally distorted. -- In specific scenarios (such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel), the video on the receiving end stuttered or froze. - -## v4.2.3 - -v4.2.3 was released on September xx, 2023. - -#### New features - -1. **Update video screenshot and upload** - - To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes: - - - The `CONTENT_INSPECT_TYPE_IMAGE_MODERATION` enumeration is added in the `type` parameter of `ContentInspectModule`, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - - An optional parameter `serverConfig` is added in `ContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). - - In addition, this version also introduces the `enableContentInspectEx` method, which supports taking screenshots for multiple video streams and uploading them. - -2. **Check device support for advanced features** - - This version adds the `isFeatureAvailableOnDevice` method to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement. - - Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient. - - In addition, since this version, calling `enableVirtualBackground` and `setBeautyEffectOptions` automatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code `-4:ERR_NOT_SUPPORTED` is returned, indicating the device does not support the feature. - -#### Improvements - -1. **Optimize virtual background memory usage** - - This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform). - -2. **Screen sharing scenario optimization** - - This release also optimizes the video encoding configuration in screen sharing scenarios. When users customize the `width` and `height` properties of the video, the SDK rounds down the actual encoding resolution while maintaining the aspect ratio of the video and the screen, ensuring that the final encoding resolution does not exceed the user-defined encoding resolution, thereby improving the accuracy of billing for screen sharing streams. - -**Other improvements** - -This release includes the following additional improvements: - -- Optimizes the management method of Texture Buffer for SDK capture and custom video capture scenarios, effectively eliminating frame dropping and crash risks. -- Optimizes the logic of handling invalid parameters. When you call the `setPlaybackSpeed` method to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. -- Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in. - -#### Issues fixed - -This release fixed the following issues: - -- When using the H.265 encoding mode, when a Web client joined the interactivity, it caused a redundant `onUserEnableLocalVideo` callback on the native side: when the host called `enableLocalVideo (true)`, the receiving end first received a `onUserEnableLocalVideo` callback (with `enabled` as `false`) before receiving a `onUserEnableLocalVideo` callback (with `enabled` as `true`). -- Occasional failure of joining a channel when the local system time was not set correctly. -- When calling the `playEffect [2/2]` method to play two audio files using the same `soundId`, the first audio file was sometimes played repeatedly. -- When the host called the `startAudioMixing [2/2]` method to play music, sometimes the host couldn't hear the music while the remote users could hear it. -- Occasional crashes occurred on certain Android devices. -- Calling `takeSnapshotEx` once receives the `onSnapshotTaken` callback for multiple times. -- In channels joined by calling `joinChannelEx` exclusively, calling `setEnableSpeakerphone` is unable to switch audio route from the speaker to the headphone. - -#### API changes - -**Added** - -- `enableContentInspectEx` -- `CONTENT_INSPECT_TYPE_IMAGE_MODERATION` in `type` of `ContentInspectModule`. -- `serverConfig` in `ContentInspectConfig` -- `isFeatureAvailableOnDevice` -- `FeatureType` - - -## v4.2.2 - -v4.2.2 was released on July xx, 2023. - -#### Compatibility changes - -In this version, some constructors have been removed from the `VideoCanvas` class. - -#### New features - -1. **Wildcard token** - - This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). - -
              All 4.x SDKs support using wildcard tokens.
              - -2. **Preloading channels** - - This release adds `preloadChannel[1/2]` and `preloadChannel[2/2]` methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host. - - When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). - -3. **Customized background color of video canvas** - - In this release, the `backgroundColor` member has been added to `VideoCanvas`, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. - -#### Improvements - -1. **Improved camera capture effect** - - Since this release, camera exposure adjustment is supported. This release adds `isCameraExposureSupported` to query whether the device supports exposure adjustment and `setCameraExposureFactor` to set the exposure ratio of the camera. - -2. **Virtual Background Algorithm Upgrade** - - This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in scenarios such as meetings, offices, homes, and under backlight or weak light conditions. - -3. **Channel media relay** - - The number of target channels for media relay has been increased to 6. When calling `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, you can specify up to 6 target channels. - -4. **Enhancement in video codec query capability** - - To improve the video codec query capability, this release adds the `codecLevels` member in `CodecCapInfo`. After successfully calling `queryCodecCapability`, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats through `codecLevels`. - -This release includes the following additional improvements: - -1. To improve the switching experience between multiple audio routes, this release adds the `setRouteInCommunicationMode` method. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode ([`MODE_IN_COMMUNICATION`](https://developer.android.google.cn/reference/kotlin/android/media/AudioManager?hl=en#mode_in_communication)). -2. The SDK automatically adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. -3. To help users understand the reasons for more types of remote video state changes, the `REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT` enumeration has been added to the `onRemoteVideoStateChanged` callback, indicating that the local video decoder does not support decoding the received remote video stream. - -#### Issues fixed - -This release fixed the following issues: - -- Slow channel reconnection after the connection was interrupted due to network reasons. -- In screen sharing scenarios, the delay of seeing the shared screen was occasionally higher than expected on some devices. -- In custom video capturing scenarios, `setBeautyEffectOptions`, `setLowlightEnhanceOptions`, `setVideoDenoiserOptions`, and `setColorEnhanceOptions` could not load extensions automatically. - -#### API changes - -**Added** - -- `setCameraExposureFactor` -- `isCameraExposureSupported` -- `preloadChannel[1/2]` -- `preloadChannel[2/2]` -- `updatePreloadChannelToken` -- `setRouteInCommunicationMode` -- `CodecCapLevels` -- `VideoCodecCapLevel` -- `backgroundColor` in `VideoCanvas` -- `codecLevels` in `CodecCapInfo` -- `REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT` - -**Deleted** - -- Some constructors in `VideoCanvas` - -## v4.2.1 - -This version was released on June 21, 2023. - -#### Improvements - -This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions. - -#### Issues fixed - -This version fixed the following issues: -- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken. -- After the sending end called `setAINSMode` to activate AI noise reduction, occasional echo was observed by the receiving end. -- Brief noise occurred while playing media files using the media player. -- In screen sharing scenarios, some Android devices experienced choppy video on the receiving end. - -## v4.2.0 - -v4.2.0 was released on May 23, 2023. - -#### Compatibility changes - -If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK. - -**1. Video data acquisition** - -- The `onCaptureVideoFrame` and `onPreEncodeVideoFrame` callbacks are added with a new parameter called `sourceType`, which is used to indicate the specific video source type. -- The following callbacks are deleted. Get the video source type through the `sourceType` parameter in the `onPreEncodeVideoFrame` and `onCaptureVideoFrame` callbacks. -- `onScreenCaptureVideoFrame` -- `onPreEncodeScreenVideoFrame` - -**2. Channel media options** - -- `publishCustomAudioTrackEnableAec` in `ChannelMediaOptions` is deleted. Use `publishCustomAudioTrack` instead. -- `publishTrancodedVideoTrack` in `ChannelMediaOptions` is renamed to `publishTranscodedVideoTrack`. -- `publishCustomAudioSourceId` in `ChannelMediaOptions` is renamed to `publishCustomAudioTrackId`. - -**3. Miscellaneous** - -- `onApiCallExecuted` is deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks. -- `enableDualStreamMode`[1/2] and `enableDualStreamMode`[2/2] are depredated. Use `setDualStreamMode`[1/2] and `setDualStreamMode`[2/2] instead. -- `startChannelMediaRelay`, `updateChannelMediaRelay`, `startChannelMediaRelayEx` and `updateChannelMediaRelayEx` are deprecated. Use `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx` instead. - - -#### New features - -**1. AI noise reduction** - -This release introduces the AI noise reduction function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced `setAINSMode` method and set the noise reduction mode as balance, aggressive or low latency according to your scenarios. - -**2. Enhanced virtual background** - -To increase the fun of real-time video calls and protect user privacy, this version has enhanced the virtual background feature. You can now set custom backgrounds of various types by calling the `enableVirtualBackground` method, including: - -- Process the background as alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect. -- Replace the background with various formats of local videos. - -**3. Video scenario settings** - -This release introduces `setVideoScenario` for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements. - -Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including: - -- Automatically activate multiple anti-weak network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrate are required, ensuring smoothness when multiple streams are subscribed by the receiving end. -- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption. - -**4. Local video mixing** - -This release adds the local video mixing feature. You can use the `startLocalVideoTranscoder` method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various scenario requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect. - -Additionally, the SDK provides the `updateLocalTranscoderConfiguration` method and the `onLocalVideoTranscoderError` callback. After enabling local video mixing, you can use the `updateLocalTranscoderConfiguration` method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the `onLocalVideoTranscoderError` callback. - -
              Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
              - -**5. Cross-device synchronization** - -In real-time collaborative singing scenarios, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces `getNtpWallTimeInMs` for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience. - - -#### Improvements - -**1. Improved voice changer** - -This release introduces the `setLocalVoiceFormant` method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the `setLocalVoicePitch` method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects. - -**2. Enhanced screen share** - -This release adds the `queryScreenCaptureCapability` method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand. - -This release also adds the `setScreenCaptureScenario` method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set. - -**3. Improved compatibility with audio file types** - -As of v4.2.0, you can use the following methods to open files with a URI starting with `content://`: -- `startAudioMixing` [2/2] -- `playEffect` [3/3] -- `open` [2/2] -- `openWithMediaSource` - -**4. Audio and video synchronization** - -For custom video and audio capture scenarios, this release introduces `getCurrentMonotonicTimeInMs` for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization. - -**5. Multi-camera capture** - -This release introduces `startCameraCapture`. By calling this method multiple times and specifying the `sourceType` parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This is particularly useful for scenarios such as remote medical care and online education, where multiple cameras need to be connected. - -**6. Channel media relay** - -This release introduces `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. - -**7. Custom audio tracks** - -To better meet the needs of custom audio capture scenarios, this release adds `createCustomAudioTrack` and `destroyCustomAudioTrack` for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source: - -- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture scenarios. -- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture scenarios. - - -#### Issues fixed - -This release fixed the following issues: - -- Occasional crashes occur on Android devices when users joining or leaving a channel. -- When the host frequently switching the user role between broadcaster and audience in a short period of time, the audience members cannot hear the audio of the host. -- Occasional failure when enabling in-ear monitoring. -- Occasional echo. -- Abnormal client status cased by an exception in the `onRemoteAudioStateChanged` callback. - - -#### API changes - -**Added** - -- `startCameraCapture` -- `stopCameraCapture` -- `startOrUpdateChannelMediaRelay` -- `startOrUpdateChannelMediaRelayEx` -- `getNtpWallTimeInMs` -- `setVideoScenario` -- `getCurrentMonotonicTimeInMs` -- `startLocalVideoTranscoder` -- `updateLocalTranscoderConfiguration` -- `onLocalVideoTranscoderError` -- `queryScreenCaptureCapability` -- `setScreenCaptureScenario` -- `setAINSMode` -- `createCustomAudioTrack` -- `destroyCustomAudioTrack` -- `AudioTrackConfig` -- `AudioTrackType` -- `VideoScenario` -- The `mDomainLimit` and `mAutoRegisterAgoraExtensions` members in `RtcEngineConfig` -- The `sourceType` parameter in `onCaptureVideoFrame` and `onPreEncodeVideoFrame` callbacks -- `BACKGROUND_NONE`(0) -- `BACKGROUND_VIDEO`(4) - -**Deprecated** - -- `enableDualStreamMode`[1/2] -- `enableDualStreamMode`[2/2] -- `startChannelMediaRelay` -- `startChannelMediaRelayEx` -- `updateChannelMediaRelay` -- `updateChannelMediaRelayEx` -- `onChannelMediaRelayEvent` - -**Deleted** - -- `onApiCallExecuted` -- `publishCustomAudioTrackEnableAec` in `ChannelMediaOptions` in `ChannelMediaOptions` -- `onScreenCaptureVideoFrame` -- `onPreEncodeScreenVideoFrame` - - - -## v4.1.1 - -v4.1.1 was released on January xx, 2023. - -#### Compatibility changes - -As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction scenarios. - -You can call the `setVideoEncoderConfiguration` method to set the expected video encoding resolution in the video encoding parameters configuration. - -
              The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
              - - -#### New features - -**1. Instant frame rendering** - -This release adds the `enableInstantMediaRendering` method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel. - -**2. Video rendering tracing** - -This release adds the `startMediaRenderingTracing` and `startMediaRenderingTracingEx` methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the `onVideoRenderingTracingResult` callback. - -Agora recommends that you use this method in conjunction with the UI settings (such as buttons and sliders) in your app. For example, call this method at the moment when the user clicks the "Join Channel" button, and then get the indicators in the video frame rendering process through the `onVideoRenderingTracingResult` callback. This enables developers to facilitate developers to optimize the indicators to improve the user experience. - - - -#### Improvements - -**1. Video frame observer** - -As of this release, the SDK optimizes the `onRenderVideoFrame` callback, and the meaning of the return value is different depending on the video processing mode: - -- When the video processing mode is `PROCESS_MODE_READ_ONLY`, the return value is reserved for future use. -- When the video processing mode is `PROCESS_MODE_READ_WRITE`, the SDK receives the video frame when the return value is `true`; the video frame is discarded when the return value is `false`. - -**2. Super resolution** - -This release improves the performance of super resolution. To optimize the usability of super resolution, this release removes `enableRemoteSuperResolution`. Super resolution is now included in the online strategies of video quality enhancement which does not require extra configuration. - - - -#### Issues fixed - -This release fixed the following issues: - -- Playing audio files with a sample rate of 48 kHz failed. -- Crashes occurred after users set the video resolution as 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices. -- In real-time chorus scenarios, remote users heard noises and echoes when an OPPO R11 device joined the channel in loudspeaker mode. -- When the playback of the local music finished, the `onAudioMixingFinished` callback was not properly triggered. -- When using a video frame observer, the first video frame was occasionally missed on the receiver's end. -- When sharing screens in scenarios involving multiple channels, remote users occasionally saw black screens. -- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted. -- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed. - - - -#### API changes - -**Added** - -- `enableInstantMediaRendering` -- `startMediaRenderingTracing` -- `startMediaRenderingTracingEx` -- `onVideoRenderingTracingResult` -- `MEDIA_RENDER_TRACE_EVENT` -- `VideoRenderingTracingInfo` - -**Deleted** - -- `enableRemoteSuperResolution` -- Deleted `superResolutionType` in `RemoteVideoStats` -## v4.1.0-1 - -v4.1.0-1 was released on November xx, 2022. - -#### New features - -**1. Headphone equalization effect** - -This release adds the `setHeadphoneEQParameters` method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This is mainly useful in spatial audio scenarios. If you cannot achieve the expected headphone EQ effect after calling `setHeadphoneEQPreset`, you can call `setHeadphoneEQParameters` to adjust the EQ. - -**2. Encoded video frame observer** - -This release adds the `setRemoteVideoSubscriptionOptions` and `setRemoteVideoSubscriptionOptionsEx` methods. When you call the `registerVideoEncodedFrameObserver` method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them. - -For more information about registering video observers and subscription options, see the [API reference](./API%20Reference/java_ng/API/toc_video_observer.html#api_imediaengine_registervideoencodedframeobserver). - -**3. MPUDP (MultiPath UDP) (Beta)** - -As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. - -
              To enable this feature, contact sales-us@agora.io. - -**4. Camera capture options** - -This release adds the `followEncodeDimensionRatio` member in `CameraCapturerConfiguration`, which enables you to set whether to follow the video aspect ratio already set in `setVideoEncoderConfiguration` when capturing video with the camera. - -**5. Multi-channel management** - -This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel scenarios. - -- The `muteLocalAudioStreamEx` and `muteLocalVideoStreamEx` methods are used to cancel or resume publishing a local audio or video stream, respectively. -- The `muteAllRemoteAudioStreamsEx` and `muteAllRemoteVideoStreamsEx` are used to cancel or resume the subscription of all remote users to audio or video streams, respectively. -- The `startRtmpStreamWithoutTranscodingEx`, `startRtmpStreamWithTranscodingEx`, `updateRtmpTranscodingEx`, and `stopRtmpStreamEx` methods are used to implement Media Push in multi-channel scenarios. -- The `startChannelMediaRelayEx`, `updateChannelMediaRelayEx`, `pauseAllChannelMediaRelayEx`, `resumeAllChannelMediaRelayEx`, and `stopChannelMediaRelayEx` methods are used to relay media streams across channels in multi-channel scenarios. -- Adds the `leaveChannelEx` [2/2] method. Compared with the `leaveChannelEx` [1/2] method, a new options parameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel scenario. - -**6. Video encoding preferences** - -In general scenarios, the default video encoding configuration meets most requirements. For certain specific scenarios, this release adds the `advanceOptions` member in `VideoEncoderConfiguration` for advanced settings of video encoding properties: - -- `compressionPreference`: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences. -- `encodingPreference`: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences. - -**7. Client role switching** - -In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the `newRoleOptions` parameter to the `onClientRoleChanged` callback. The value of this parameter is as follows: - -- `AUDIENCE_LATENCY_LEVEL_LOW_LATENCY` (1): Low latency. -- `AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY` (2): Ultra-low latency. - -#### Improvements - -**1. Bluetooth permissions** - -To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the `BLUETOOTH_CONNECT` permission. - -**2. CDN streaming** - -To improve user experience during CDN streaming, when your camera does not support the video resolution you set when streaming, the SDK automatically adjusts the resolution to the closest value that is supported by your camera and has the same aspect ratio as the original video resolution you set. The actual video resolution used by the SDK for streaming can be obtained through the `onDirectCdnStreamingStats` callback. - -**3. Relaying media streams across channels** - -This release optimizes the `updateChannelMediaRelay` method as follows: - -- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code `RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED`(8), and you need to call the `updateChannelMediaRelay` method again. -- v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful. - -**4. Reconstructed AIAEC algorithm** - -This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other scenarios. - -**5. Virtual background** - -This release optimizes the virtual background algorithm. Improvements include the following: - -- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is is now extremely thin. -- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture. -- More application scenarios are now supported, and a user obtains a good virtual background effect day or night, indoors or out. -- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures. - - -**Other improvements** +**Attention:** +As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the libaosl.so library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the libaosl.so library to avoid conflicts. The libaosl.so library version in RTC SDK v4.5.0 is 1.2.13. -This release includes the following additional improvements: +#### 1. Changes in strong video denoising implementation -- Reduces the latency when pushing external audio sources. -- Improves the performance of echo cancellation when using the `AUDIO_SCENARIO_MEETING` scenario. -- Improves the smoothness of SDK video rendering. -- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios. -- At the moment when a user left a channel, a request for leaving was not sent to the server and the leaving behavior was incorrectly determined by the server as timed out. +This version adjusts the implementation of strong video denoising. -#### Issues fixed +The `VIDEO_DENOISER_LEVEL_STRENGTH` enumeration is removed. -This release fixed the following issues: +Instead, after enabling video denoising by calling `setVideoDenoiserOptions [1/2]`, you can call the `setBeautyEffectOptions [1/2]` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions [1/2]`. -- Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming. -- The call `getExtensionProperty` failed and returned an empty string. -- When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened. +Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions [1/2]`. -#### API changes +#### 2. Changes in video encoding preferences -**Added** +To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: -- `setHeadphoneEQParameters` +- In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. +- In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). -- `setRemoteVideoSubscriptionOptions` +#### 3. 16 KB memory page size -- `setRemoteVideoSubscriptionOptionsEx` +Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. -- `VideoSubscriptionOptions` +### New features -- `leaveChannelEx` [2/2] +#### 1. Live show scenario -- `muteLocalAudioStreamEx` +This version adds the `APPLICATION_SCENARIO_LIVESHOW(3)` (Live Show) enumeration to the `VideoScenario`. You can call `setVideoScenario` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. -- `muteLocalVideoStreamEx` +#### 2. Maximum frame rate for video rendering -- `muteAllRemoteAudioStreamsEx` +This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. -- `muteAllRemoteVideoStreamsEx` +In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. -- `startRtmpStreamWithoutTranscodingEx` +#### 3. Watching live streaming through URLs -- `startRtmpStreamWithTranscodingEx` +As of this version, audience members can directly open a specific URL to play the real-time media stream through openWithUrl, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. -- `updateRtmpTranscodingEx` +#### 4. Filter effects -- `stopRtmpStreamEx` +This version introduces the `setFilterEffectOptions [1/2]` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. -- `startChannelMediaRelayEx` +#### 5. Local audio mixing -- `updateChannelMediaRelayEx` +This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the stopLocalAudioMixer method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. -- `pauseAllChannelMediaRelayEx` +Example use cases for this feature include: +- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. +- In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. +- In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. -- `resumeAllChannelMediaRelayEx` +#### 6. External MediaProjection -- `stopChannelMediaRelayEx` +This version introduces the `setExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the MediaProjection applied by the SDK. -- `followEncodeDimensionRatio` in `CameraCapturerConfiguration` +If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. -- `hwEncoderAccelerating` in `LocalVideoStats` +#### 7. EGL context -- `advanceOptions` in `VideoEncoderConfiguration` +This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. -- `newRoleOptions` in `onClientRoleChanged` +#### 8. Color space settings -- `adjustUserPlaybackSignalVolumeEx` +This version adds `getColorSpace` and `setColorSpace` to `VideoFrame`. You can use `getColorSpace` to obtain the color space properties of the video frame and use `setColorSpace` to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing. -- `MvProperty` class -- `ClimaxSegment` class +### Improvements -**Deprecated** +#### 1. Virtual background algorithm optimization -- `onApiCallExecuted`. Use the callbacks triggered by specific methods instead. +This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. -**Deleted** +#### 2. Snapshot at specified video observation points -- Removes deprecated member parameters `backgroundImage` and `watermark` in `LiveTranscoding` class. -- Removes `RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED`(8) in `onChannelMediaRelayEvent` callback. +This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. -## v4.0.0 +#### 3. Custom audio capture improvements -v4.0.0 was released on September 15, 2022. +This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is false, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. -#### New features +#### 4. Other Improvements +- In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. +- Optimizes the logic for calling queryDeviceScore to obtain device score levels, improving the accuracy of the score results. +- When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the onPlayerEvent callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. +- When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. -**2. Full HD and Ultra HD resolution** +### Bug fixes -In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the `dimensions` parameter to 1920 × 1080 or higher resolution when calling the `setVideoEncoderConfiguration` method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution. +This version fixes the following issues: -
            10. The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to experience this feature, contact technical support. -
            11. High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance. -
            12. The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing. +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. +- Occasional noise and stuttering when playing music resources from the music content center. +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. +- Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. From a9ff1650936940e77904abc0407366715b9d6d2e Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 14:37:46 +0800 Subject: [PATCH 276/354] remove parmname --- en-US/dita/RTC-NG/release/release_notes.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index e2a8f3d43dc..a93b6ecfe4b 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -116,7 +116,7 @@

              As of this version, audience members can directly open a specific URL to play the real-time media stream through , instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream.

            13. Filter effects -

              This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

              +

              This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

            14. Local audio mixing

              This version introduces the local audio mixing feature. You can call the method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

              @@ -159,7 +159,7 @@

              This version adds the type member to . When calling , you can specify the type of video stream to be recorded as the local preview video stream through this member. You can set parameters such as height, width, frame rate, and sampling rate of the preview video in , and then call to start recording the local preview video.

            15. Snapshot at specified video observation points -

              This version introduces the and methods. You can use the config parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects.

              +

              This version introduces the and methods. You can use the config parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects.

            16. Custom audio capture improvements

              This version adds the enableAudioProcessing member parameter to , which is used to control whether to enable 3A audio processing for custom audio capture tracks of the AUDIO_TRACK_DIRECT type. The default value of this parameter is , meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing.

              From 6986e7101db863a1ed406d4aa737883639331719 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 14:41:29 +0800 Subject: [PATCH 277/354] sync cn release --- dita/RTC-NG/release/release_notes.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 39fce144a92..f7cad3c2c76 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -114,7 +114,7 @@

              当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

              有关该功能的实现步骤,详见

            17. 滤镜效果 -

              该版本新增 方法,你可以在 config 参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,用于快速实现美白滤镜效果。

              +

              该版本新增 方法,你可以在 config 参数中传入指定格式的立方体贴图文件 (.cube),从而实现美白、鲜艳、冷色、黑白等自定义滤镜效果。此外,SDK 提供了一个内置的 built_in_whiten_filter.cube 文件,用于快速实现美白滤镜效果。

            18. 本地音频合流

              该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

              @@ -155,7 +155,7 @@

              该版本在 中新增 type 成员。当调用 时,可通过该成员指定录制的视频流类型为本地预览视频流,并在 中设置录制预览视频的高、宽、帧率、采样率等参数,之后调用 即可开始录制本地预览的视频。

            19. 指定视频观测位置截图 -

              该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

              +

              该版本新增 方法,你可以在调用该方法时通过 config 参数,在指定的视频观测点进行截图,比如:编码前、编码后或渲染前的数据,以实现更加灵活的截图效果。

            20. 自定义音频采集改进

              该版本在 中新增了 enableAudioProcessing 成员参数,用于控制是否对 AUDIO_TRACK_DIRECT 类型的自定义音频采集轨道启用 3A 音频处理。该参数默认值为 ,即不启用音频处理,用户可以按需开启,此项改动提升了自定义音频处理的灵活性。

              From 7c608aa180d843793fc3c1c80b21fa5e6884c998 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 14:41:35 +0800 Subject: [PATCH 278/354] Revert "Update release_android_ng.md" This reverts commit a3e888843ef8bd43890f7795e629f00132a0e33b. --- .../en-US/native/release_android_ng.md | 1106 ++++++++++++++++- 1 file changed, 1046 insertions(+), 60 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md index 13ed52db0ba..4db20af91fa 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md @@ -1,109 +1,1095 @@ -# Release notes (Android) +## Known issues and limitations -## v4.5.0 +**Android 14 screen sharing issue** -This version was released on November x, 2024. +On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. -### Compatibility changes + +## v4.4.1 + +This version was released on Aug x, 2024. + +#### Issues fixed + +This version fixed the issue where `io.agora.rtc:full-rtc-basic:4.4.0` and `io.agora.rtc:voice-rtc-basic:4.4.0` were not working properly on Maven Central due to an upload error. + + + +## v4.4.0 + +This version was released on July x, 2024. + + +#### Compatibility changes This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. -**Attention:** -As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the libaosl.so library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the libaosl.so library to avoid conflicts. The libaosl.so library version in RTC SDK v4.5.0 is 1.2.13. +**Attention:** Starting from v4.4.0, the RTC SDK provides an API sunset notice, which includes information about deprecated and removed APIs in each version. See [API Sunset Notice](https://doc.shengwang.cn/api-ref/rtc/android/API/rtc_api_sunset). + +1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | ------------------ | ---------------------- | + | `onEvent` | `onEventWithContext` | + | `onStarted` | `onStartedWithContext` | + | `onStopped` | `onStoppedWithContext` | + | `onError` | `onErrorWithContext` | + +2. This version removes the `buffer`, `uid`, and `timeStampMs` parameters of the `onMetadataReceived` callback. You can get metadata-related information, including `timeStampMs` (timestamp of the sent data), `uid` (user ID), and `channelId` (channel name) through the newly-added `metadata` parameter. + +#### New features + +1. **Lite SDK** + + Starting from this version, Agora introduces the Lite SDK, which includes only the basic audio and video capabilities and partially cuts advanced features, effectively reducing the app size after integrating the SDK. + + - Lite SDK supports manual integration or third-party repository integration. For details, see [Download SDKs]() and [Integrate the SDK](). + - For information on dynamic libraries included in the Lite SDK, see [App size optimization](). + - For the list of APIs supported by the Lite SDK, see [Lite SDK API List](https://doc.shengwang.cn/api-ref/rtc/android/API/rtc_lite_api). + - For the limitations and precautions when using the Lite SDK to play media files, please refer to [Which audio file formats are supported by RTC SDK?](https://doc.shengwang.cn/faq/general-product-inquiry/audio-format) + +2. **Alpha transparency effects** + + This version introduces the Alpha transparency effects feature, supporting the transmission and rendering of Alpha channel data in video frames for SDK capture and custom capture scenarios, enabling transparent gift effects, custom backgrounds on the receiver end, etc.: + + - `VideoFrame` and `AgoraVideoFrame` add the `alphaBuffer` member: Sets the Alpha channel data. + - `AgoraVideoFrame` adds the `fillAlphaBuffer` member: For BGRA or RGBA formatted video data, sets whether to automatically extract the Alpha channel data and fill it into `alphaBuffer`. + - `VideoFrame` and `AgoraVideoFrame` add the `alphaStitchMode` member: Sets the relative position of `alphaBuffer` and video frame stitching. + + Additionally, `AdvanceOptions` adds a new member `encodeAlpha`, which is used to set whether to encode and send Alpha information to the remote end. By default, the SDK does not encode and send Alpha information; if you need to encode and send Alpha information to the remote end (for example, when virtual background is enabled), explicitly call `setVideoEncoderConfiguration` to set the video encoding properties and set `encodeAlpha` to `true`. + +3. **Voice AI tuner** + + This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VOICE_AI_TUNER_TYPE` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. + +4. **1v1 video call scenario** + + This version adds `APPLICATION_SCENARIO_1V1` (1v1 video call) in `VideoScenario`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. + +#### Improvements + +1. **Adaptive hardware decoding support** + + This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. + +2. **Facial region beautification** + + To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. + +3. **Other improvements** + + This version also includes the following improvements: + + - Optimizes the parameter types of the following APIs. These improvements enhance code readability, reduce potential errors, and facilitate future maintenance. + - Deprecates the `option` parameter of type int in `setRemoteSubscribeFallbackOption` [1/2], and adds an overloaded function `setRemoteSubscribeFallbackOption` [2/2] with the `option` parameter of type `StreamFallbackOptions`. + - Deprecates the `streamType` parameter of type int in `setRemoteVideoStreamType` [1/2], `setRemoteDefaultVideoStreamType` [1/2], and `setRemoteVideoStreamTypeEx` [1/2], and adds overloaded functions `setRemoteVideoStreamType` [2/2], `setRemoteDefaultVideoStreamType` [2/2], and `setRemoteVideoStreamTypeEx` [2/2] with the `streamType` parameter of type `VideoStreamType`. + - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. + - Deprecates redundant enumeration values `CLIENT_ROLE_CHANGE_FAILED_REQUEST_TIME_OUT` and `CLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED`. + +#### Issues fixed + +This release fixed the following issues: + +- Audio playback failed when pushing external audio data using `pushExternalAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. + + + +## v4.3.2 + +This version was released on May x, 20xx. + +#### Improvements + +1. This release enhances the usability of the [setRemoteSubscribeFallbackOption](API/api_irtcengine_setremotesubscribefallbackoption.html) method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions. +2. The Agora media player supports playing MP4 files with an Alpha channel. +3. The Agora media player fully supports playing music files located in the `/assets/` directory or from URI starting with `content://`. + +#### Issues fixed + +This version fixed the following issues: + +- Occasional video smoothness issues during audio and video interactions. +- The app occasionally crashed when the decoded video resolution on the receiving end was an odd number. +- The app crashed when opening the app and starting screen sharing after the first installation or system reboot. +- Local audio capture failed after joining a channel while answering a system phone call and hanging up, causing remote users to not hear any sound. +- During the interaction process on certain devices (for example, Redmi Note8), after answering and hanging up a system call, local media files were played without sound and no sound was heard from the remote end. (Android) +- The app occasionally crashed when remote users left the channel. +- The values of `cameraDirection` and `focalLengthType` in returned by [queryCameraFocalLengthCapability](API/api_irtcengine_querycamerafocallengthcapability.html) could not be read directly. + + +## v4.3.1 + +This version is released on 2024 Month x, Day x. + +#### Compatibility changes + +To ensure parameter naming consistency, this version renames `channelName` to `channelId` and `optionalUid` to `uid` in `joinChannel` [1/2]. You must update your app's code after upgrading to this version to ensure normal project operations. + +#### New features + +1. **Speech Driven Avatar** + + The SDK introduces a speech driven extension that converts speech information into corresponding facial expressions to animate avatar. You can access the facial information through the newly added [`registerFaceInfoObserver`](/api-ref/rtc/android/API/toc_speech_driven#api_imediaengine_registerfaceinfoobserver) method and [`onFaceInfo`](/api-ref/rtc/android/API/toc_speech_driven#callback_ifaceinfoobserver_onfaceinfo) callback. This facial information conforms to the ARKit standard for Blend Shapes (BS), which you can further process using third-party 3D rendering engines. + + The speech driven extension is a trimmable dynamic library, and details about the increase in app size are available at [reduce-app-size](). + + **Attention:** + + The speech driven avatar feature is currently in beta testing. To use it, please contact [technical support](mailto:support@agora.io). + +2. **Wide and ultra-wide cameras** + + To allow users to capture a broader field of view and more complete scene content, this release introduces support for wide and ultra-wide cameras. You can first call [`queryCameraFocalLengthCapability`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_querycamerafocallengthcapability) to check the device's focal length capabilities, and then call [`setCameraCapturerConfiguration`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_setcameracapturerconfiguration) and set `cameraFocalLengthType` to the supported focal length types, including wide and ultra-wide. + +3. **Multi-camera capture** + + This release introduces additional functionalities for Android camera capture: + + 1. Support for capturing and publishing video streams from the third and fourth cameras: + - New enumerators `VIDEO_SOURCE_CAMERA_THIRD`(11) and `VIDEO_SOURCE_CAMERA_FOURTH`(12) are added to [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype), specifically for the third and fourth camera sources. This change allows you to specify up to four camera streams when initiating camera capture by calling [`startCameraCapture`](/api-ref/rtc/android/API/toc_camera_capture#api_irtcengine_startcameracapture). + - New parameters `publishThirdCameraTrack` and `publishFourthCameraTrack` are added to [`ChannelMediaOptions`](/api-ref/rtc/android/API/class_channelmediaoptions). Set these parameters to `true` when joining a channel with [`joinChannel`](/api-ref/rtc/android/API/toc_channel#api_irtcengine_joinchannel2)[2/2] to publish video streams captured from the third and fourth cameras. + 2. Support for specifying cameras by camera ID: + - A new parameter `cameraId` is added to [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration). For devices with multiple cameras, where `cameraDirection` cannot identify or access all available cameras, you can obtain the camera ID through Android's native system APIs and specify the desired camera by calling [`startCameraCapture`](/api-ref/rtc/android/API/toc_camera_capture#api_irtcengine_startcameracapture) with the specific `cameraId`. + - New method [`switchCamera`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_switchcamera2)[2/2] supports switching cameras by `cameraId`, allowing apps to dynamically adjust camera usage during runtime based on available cameras. + +4. **Data stream encryption** + + This version adds `datastreamEncryptionEnabled` to [`EncryptionConfig`](/api-ref/rtc/android/API/class_encryptionconfig) for enabling data stream encryption. You can set this when you activate encryption with [`enableEncryption`](/api-ref/rtc/android/API/toc_network#api_irtcengine_enableencryption). If there are issues causing failures in data stream encryption or decryption, these can be identified by the newly added `ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE` and `ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE` enumerations. + +5. **Local Video Rendering** + + This version adds the following members to [`VideoCanvas`](/api-ref/rtc/android/API/class_videocanvas) to support more local rendering capabilities: + + - `surfaceTexture`: Set a native Android `SurfaceTexture` object as the container providing video imagery, then use SDK external methods to perform OpenGL texture rendering. + - `enableAlphaMask`: This member enables the receiving end to initiate alpha mask rendering. Alpha mask rendering can create images with transparent effects or extract human figures from video content. + +6. **Adaptive configuration for low-quality video streams** + + This version introduces adaptive configuration for low-quality video streams. When you activate dual-stream mode and set up low-quality video streams on the sending side using [`setDualStreamMode`](/api-ref/rtc/android/API/toc_dual_stream#api_irtcengine_setdualstreammode2)[2/2], the SDK defaults to the following behaviors: + + - The default encoding resolution for low-quality video streams is set to 50% of the original video encoding resolution. + - The bitrate for the small streams is automatically matched based on the video resolution and frame rate, eliminating the need for manual specification. + +7. **Other features** + + - New method [`enableEncryptionEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_enableencryptionex) is added for enabling media stream or data stream encryption in multi-channel scenarios. + - New method [`setAudioMixingPlaybackSpeed`](/api-ref/rtc/android/API/toc_audio_mixing#api_irtcengine_setaudiomixingplaybackspeed) is introduced for setting the playback speed of audio files. + - New method [`getCallIdEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_getcallidex) is introduced for retrieving call IDs in multi-channel scenarios. + +#### Improvements + +1. **Optimization of local video status callbacks** + + This version introduces the following enumerations, allowing you to understand more about the reasons behind changes in local video status through the [`onLocalVideoStateChanged`](/api-ref/rtc/android/API/toc_video_basic#callback_irtcengineeventhandler_onlocalvideostatechanged) callback: + + - `LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT` (14): Video capture is interrupted due to the camera being occupied by another app or the app moving to the background. + - `LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR` (15): Video capture device errors, possibly due to camera equipment failure. + +2. **Camera capture improvements** + + Improvements have been made to the video processing mechanism of camera capture, reducing noise, enhancing brightness, and improving color, making the captured images clearer, brighter, and more realistic. + +3. **Virtual Background Algorithm Optimization** + + To enhance the accuracy and stability of human segmentation when activating virtual backgrounds against solid colors, this version optimizes the green screen segmentation algorithm: + + - Supports recognition of any solid color background, no longer limited to green screens. + - Improves accuracy in recognizing background colors and reduces the background exposure during human segmentation. + - After segmentation, the edges of the human figure (especially around the fingers) are more stable, significantly reducing flickering at the edges. + +4. **CPU consumption reduction of in-ear monitoring** + + This release adds an enumerator `EAR_MONITORING_FILTER_REUSE_POST_PROCESSING_FILTER` (1<<15). For complex audio processing scenarios, you can specify this option to reuse the audio filter post sender-side processing in in-ear monitoring, thereby reducing CPU consumption. Note that this option may increase the latency of in-ear monitoring, which is suitable for latency-tolerant scenarios requiring low CPU consumption. + +5. **Other improvements** + + This version also includes the following improvements: + + - Enhanced performance and stability of the local compositing feature, reducing its CPU usage. + - Enhanced media player capabilities to handle WebM format videos, including support for rendering alpha channels. + - New chorus effect `ROOM_ACOUSTICS_CHORUS` is added to enhances the spatial presence of vocals in chorus scenarios. + - In [`RemoteAudioStats`](/api-ref/rtc/android/API/class_remoteaudiostats), a new `e2eDelay` field is added to report the delay from when the audio is captured on the sending end to when the audio is played on the receiving end. + +#### Issues fixed + +This version fixed the following issues: + +- Fixed an issue where SEI data output did not synchronize with video rendering when playing media streams containing SEI data using the media player. +- After joining a channel and calling [`disableAudio`](/api-ref/rtc/android/API/toc_audio_basic#api_irtcengine_disableaudio), audio playback did not immediately stop. +- Broadcasters using certain models of devices under speaker mode experienced occasional local audio capture failures when switching the app process to the background and then back to the foreground, causing remote users to not hear the broadcaster's audio. +- On devices with Android 8.0, enabling screen sharing occasionally caused the app to crash. +- In scenarios using camera capture for local video, when the app was moved to the background and [`disableVideo`](/api-ref/rtc/android/API/toc_video_basic#api_irtcengine_disablevideo) or [`stopPreview`](/api-ref/rtc/android/API/toc_video_basic#api_irtcengine_stoppreview)[1/2] was called to stop video capture, camera capture was unexpectedly activated when the app was brought back to the foreground. +- When the network conditions of the sender deteriorated (for example, in poor network environments), the receiver occasionally experienced a decrease in video smoothness and an increase in lag. + +#### API Changes + +**Added** + +- The `surfaceTexture` and `enableAlphaMask` members in [`VideoCanvas`](/api-ref/rtc/android/API/class_videocanvas) +- `LOCAL_VIDEO_STREAM_REASON_DEVICE_INTERRUPT` +- `LOCAL_VIDEO_STREAM_REASON_DEVICE_FATAL_ERROR` +- [`registerFaceInfoObserver`](/api-ref/rtc/android/API/toc_speech_driven#api_imediaengine_registerfaceinfoobserver) +- [`IFaceInfoObserver`](/api-ref/rtc/android/API/class_ifaceinfoobserver) +- [`onFaceInfo`](/api-ref/rtc/android/API/toc_speech_driven#callback_ifaceinfoobserver_onfaceinfo) +- [`MediaSourceType`](/api-ref/rtc/android/API/enum_mediasourcetype) adds `SPEECH_DRIVEN_VIDEO_SOURCE` +- [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype) adds `VIDEO_SOURCE_SPEECH_DRIVEN` +- [`EncryptionConfig`](/api-ref/rtc/android/API/class_encryptionconfig) adds `datastreamEncryptionEnabled` +- `ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE` +- `ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE` +- [`RemoteAudioStats`](/api-ref/rtc/android/API/class_remoteaudiostats) adds `e2eDelay` +- `ERR_DATASTREAM_DECRYPTION_FAILED` +- `ROOM_ACOUSTICS_CHORUS` is added, enhancing the spatial presence of vocals in chorus scenarios. +- [`getCallIdEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_getcallidex) +- [`enableEncryptionEx`](/api-ref/rtc/android/API/toc_network#api_irtcengineex_enableencryptionex) +- [`setAudioMixingPlaybackSpeed`](/api-ref/rtc/android/API/toc_audio_mixing#api_irtcengine_setaudiomixingplaybackspeed) +- [`queryCameraFocalLengthCapability`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_querycamerafocallengthcapability) +- [`AgoraFocalLengthInfo`](/api-ref/rtc/android/API/class_focallengthinfo) +- [`CAMERA_FOCAL_LENGTH_TYPE`](/api-ref/rtc/android/API/enum_camerafocallengthtype) +- [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration) adds a new member `cameraFocalLengthType` +- [`VideoSourceType`](/api-ref/rtc/android/API/enum_videosourcetype) adds the following enumerations: + - `VIDEO_SOURCE_CAMERA_THIRD`(11) + - `VIDEO_SOURCE_CAMERA_FOURTH`(12) +- [`ChannelMediaOptions`](/api-ref/rtc/android/API/class_channelmediaoptions) adds the following members: + - `publishThirdCameraTrack` + - `publishFourthCameraTrack` + - `publishLipSyncTrack` +- [`CameraCapturerConfiguration`](/api-ref/rtc/android/API/class_cameracapturerconfiguration) adds a new member `cameraId` +- [`CAMERA_DIRECTION`](/api-ref/rtc/android/API/enum_cameradirection) adds `CAMERA_EXTRA`(2) +- [`switchCamera`](/api-ref/rtc/android/API/toc_video_device#api_irtcengine_switchcamera2)[2/2] +- `EAR_MONITORING_FILTER_BUILT_IN_AUDIO_FILTERS`(1<<15) + +## v4.3.0 + +v4.3.0 was released on xx xx, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Raw video data callback behavior change** + + As of this release, the callback processing related to raw video data changes from the previous fixed single thread to a random thread, meaning that callback processing can occur on different threads. Due to limitations in the Android system, OpenGL must be tightly bound to a specific thread. Therefore, Agora suggests that you make one of the following modifications to your code: + + - (Recommended) Use the `TextureBufferHelper` class to create a dedicated OpenGL thread for video pre-processing or post-processing (for example, image enhancement, stickers, etc.). + - Use the `eglMakeCurrent` method to associate the necessary OpenGL context for each video frame with the current thread. + +2. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | Existing parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onPlayerStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | Current enumeration class | + | -------------------------- | -------------------------- | + | `DirectCdnStreamingReason` | `DirectCdnStreamingReason` | + | `MediaPlayerReason` | `MediaPlayerReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](C#apichange). + +3. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + |
              • `startChannelMediaRelay`
              • `updateChannelMediaRelay`
              | `startOrUpdateChannelMediaRelay` | + |
              • `startChannelMediaRelayEx`
              • `updateChannelMediaRelayEx`
              | `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +4. **Custom video source** + + Since this release, `pushExternalVideoFrameEx`[1/2] and `pushExternalVideoFrameEx`[2/2] are renamed to `pushExternalVideoFrameById`[1/2] and `pushExternalVideoFrame`[1/2], and are migrated from `RtcEngineEx` to `RtcEngine`. + +5. **Audio route** + + Since this release, `RouteBluetooth` is renamed to `AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP`, representing a Bluetooth device using the HFP protocol. The `AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP`(10) is added to represent a Bluetooth device using the A2DP protocol. + +6. **The state of the remote video** + + To make the name of the enumeration easier to understand, this release changes the name of the enumeration from `REMOTE_VIDEO_STATE_PLAYING` to `REMOTE_VIDEO_STATE_DECODING`, while the meaning of the enumeration remains unchanged. + +7. **Reasons for local video state changes** + + The `LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE` enumeration has been changed to `LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT`. + +8. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + +9. **Removing IAgoraEventHandler interface** + + This release deletes the `IAgoraEventHandler` interface class. All callback events that were previously managed under this class are now processed through the `IRtcEngineEventHandler` interface class. + +#### New features + +1. **Custom mixed video layout on receiving end** + + To facilitate customized layout of mixed video stream at the receiver end, this release introduces the [`onTranscodedStreamLayoutInfo`](API/callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo.html) callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate `view` for rendering the sub-video stream (distinguished by `subviewUid`) in the mixed video stream when calling the [`setupRemoteVideo`](API/api_irtcengine_setupremotevideo.html) method, achieving a custom video layout effect. + + When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time. + + Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video scenario, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end. + +2. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Call [`setupLocalVideo`](API/api_irtcengine_setuplocalvideo.html) to set the first view: Set the `position` parameter to `VIDEO_MODULE_POSITION_POST_CAPTURER_ORIGIN` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 2. Call [`setupLocalVideo`](API/api_irtcengine_setuplocalvideo.html) to set the second view: Set the `position` parameter to `VIDEO_MODULE_POSITION_POST_CAPTURER` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +3. **Query device score** + + This release adds the [`queryDeviceScore`](API/api_irtcengine_querydevicescore.html) method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +4. **Select different audio tracks for local playback and streaming** + + This release introduces the [`selectMultiAudioTrack`](API/api_imediaplayer_selectmultiaudiotrack.html) method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the [`openWithMediaSource`](API/api_imediaplayer_openwithmediasource.html) method and enable this function by setting the `enableMultiAudioTrack` parameter in [`MediaPlayerSource`](API/class_mediasource.html). + +5. **Audio playback device test** + + This release introduces the [`startPlaybackDeviceTest`](API/api_iaudiodevicemanager_startplaybackdevicetest.html) method to allow you to test whether you local audio device for playback works properly. You can specify the audio file to be played through the `testAudioFilePath` parameter and see if your audio device works properly. After the test is completed, you need to call the newly added [`stopPlaybackDeviceTest`](API/api_iaudiodevicemanager_stopplaybackdevicetest.html) method to stop the test. + +6. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - [`setRemoteSubscribeFallbackOption`](API/api_irtcengine_setremotesubscribefallbackoption.html): Sets fallback option for the subscribed video stream in weak network conditions. + - [`onRemoteSubscribeFallbackToAudioOnly`](API/callback_irtcengineeventhandler_onremotesubscribefallbacktoaudioonly.html): Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - [`setPlayerOption`](API/api_imediaplayer_setplayeroption.html) and [`setPlayerOptionString`](API/api_imediaplayer_setplayeroption2.html): Sets media player options for providing technical previews or special customization features. + - [`enableCustomAudioLocalPlayback`](API/api_irtcengine_enablecustomaudiolocalplayback.html): Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +2. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling [`setInEarMonitoringVolume`](API/api_irtcengine_setinearmonitoringvolume.html). + + +3. **Spatial audio effects usability improvement** + + - This release optimizes the design of the [`setZones`](API/api_ibasespatialaudioengine_setzones.html) method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the [`ILocalSpatialAudioEngine`](API/class_ilocalspatialaudioengine.html) method. + +4. **Optimization of video pre-processing methods** + + This release adds overloaded methods with the `sourceType` parameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing in `sourceType` (for example, applying on a custom video capture media source): + + - [`setBeautyEffectOptions` [2/2]](API/api_irtcengine_setbeautyeffectoptions2.html) + - [`setLowlightEnhanceOptions` [2/2]](API/api_irtcengine_setlowlightenhanceoptions2.html) + - [`setVideoDenoiserOptions` [2/2]](API/api_irtcengine_setvideodenoiseroptions2.html) + - [`setColorEnhanceOptions` [2/2]](API/api_irtcengine_setcolorenhanceoptions2.html) + - [`enableVirtualBackground` [2/2]](API/api_irtcengine_enablevirtualbackground2.html) + +5. **Other improvements** + + This release also includes the following improvements: + + - Adds `codecType` in [`VideoEncoderConfiguration`](API/class_videoencoderconfiguration.html) to set the video encoding type. + - Adds `allowCaptureCurrentApp` member in [`AudioCaptureParameters`](API/class_screenaudioparameters.html), which is used to set whether to capture audio from the current app during screen sharing. The default value of this member is `true`, which means it collects the audio from the current app by default. In certain scenarios, the shared screen audio captured by the app may cause echo on the remote side due to signal delay and other reasons. Agora suggests setting this member as `false` to eliminate the remote echo introduced during the screen sharing process. + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling `setLocalAccessPoint` to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in [`LocalAudioStats`](API/class_localaudiostats.html) to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The [`onPlayerCacheStats`](API/callback_imediaplayersourceobserver_onplayercachestats.html) callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The [`onPlayerPlaybackStats`](API/callback_imediaplayersourceobserver_onplayerplaybackstats.html) callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through [`PlayerPlaybackStats`](API/class_playerplaybackstats.html). + +#### Issues fixed + +This release fixed the following issues: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the [`onLocalVideoStats`](API/callback_irtcengineeventhandler_onlocalvideostats.html) callback is 0, which is not as expected. +- In a online meeting scenario, occasional audio freezes occurred when the local user was listening to remote users. + +#### API changes + + + +**Added** + +- [`onTranscodedStreamLayoutInfo`](API/callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo.html) +- [`VideoLayout`](API/class_videolayout.html) +- The `subviewUid` and `uid` members in `VideoCanvas` +- The `codecType` member in [`VideoEncoderConfiguration`](API/class_videoencoderconfiguration.html) +- The `allowCaptureCurrentApp` member in [AudioCaptureParameters](API/class_screenaudioparameters.html) +- [`enableCustomAudioLocalPlayback`](API/api_irtcengine_enablecustomaudiolocalplayback.html) +- [`selectMultiAudioTrack`](API/api_imediaplayer_selectmultiaudiotrack.html) +- [`onPlayerCacheStats`](API/callback_imediaplayersourceobserver_onplayercachestats.html) +- [`onPlayerPlaybackStats`](API/callback_imediaplayersourceobserver_onplayerplaybackstats.html) +- [`PlayerPlaybackStats`](API/class_playerplaybackstats.html) +- [`startPlaybackDeviceTest`](API/api_iaudiodevicemanager_startplaybackdevicetest.html) +- [`stopPlaybackDeviceTest`](API/api_iaudiodevicemanager_stopplaybackdevicetest.html) +- The `earMonitorDelay` and `aecEstimatedDelay` members in [LocalAudioStats](API/class_localaudiostats.html) +- [`queryDeviceScore`](API/api_irtcengine_querydevicescore.html) +- The `CUSTOM_VIDEO_SOURCE` enumeration in [MediaSourceType](API/enum_mediasourcetype.html) +- [`setBeautyEffectOptions` [2/2]](API/api_irtcengine_setbeautyeffectoptions2.html) +- [`setLowlightEnhanceOptions` [2/2]](API/api_irtcengine_setlowlightenhanceoptions2.html) +- [`setVideoDenoiserOptions` [2/2]](API/api_irtcengine_setvideodenoiseroptions2.html) +- [`setColorEnhanceOptions` [2/2]](API/api_irtcengine_setcolorenhanceoptions2.html) +- [`enableVirtualBackground` [2/2]](API/api_irtcengine_enablevirtualbackground2.html) +- The `AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP` enumeration + +**Modified** + +- `pushExternalVideoFrameEx`[1/2] and `pushExternalVideoFrameEx`[2/2] are renamed to `pushExternalVideoFrameById`[1/2] and `pushExternalVideoFrameById`[2/2], and are migrated from `RtcEngineEx` to `RtcEngine` +- `REMOTE_VIDEO_STATE_PLAYING` enumeration name changed to`REMOTE_VIDEO_STATE_DECODING` +- `ROUTE_BLUETOOTH` is renamed as `AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP` +- All `ERROR` fields in the following enumerations are changed to `REASON`: + - `LOCAL_AUDIO_STREAM_ERROR_OK` + - `LOCAL_AUDIO_STREAM_ERROR_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_AUDIO_STREAM_ERROR_CAPTURE_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_OK` + - `LOCAL_VIDEO_STREAM_ERROR_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORT` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND` + - `PLAYER_ERROR_NONE` + - `PLAYER_ERROR_INVALID_ARGUMENTS` + - `PLAYER_ERROR_INTERNAL` + - `PLAYER_ERROR_NO_RESOURCE` + - `PLAYER_ERROR_INVALID_MEDIA_SOURCE` + - `PLAYER_ERROR_UNKNOWN_STREAM_TYPE` + - `PLAYER_ERROR_OBJ_NOT_INITIALIZED` + - `PLAYER_ERROR_CODEC_NOT_SUPPORTED` + - `PLAYER_ERROR_VIDEO_RENDER_FAILED` + - `PLAYER_ERROR_INVALID_STATE` + - `PLAYER_ERROR_URL_NOT_FOUND` + - `PLAYER_ERROR_INVALID_CONNECTION_STATE` + - `PLAYER_ERROR_SRC_BUFFER_UNDERFLOW` + - `PLAYER_ERROR_INTERRUPTED` + - `PLAYER_ERROR_NOT_SUPPORTED` + - `PLAYER_ERROR_TOKEN_EXPIRED` + - `PLAYER_ERROR_UNKNOWN` + - `RTMP_STREAM_PUBLISH_ERROR_OK` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT` + - `RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED` + - `RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT` + - `RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN` + - `RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED` + - `RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND` + - `RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER` + - `RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM` + - `RTMP_STREAM_PUBLISH_ERROR_NET_DOWN` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGE` + - `RTMP_STREAM_UNPUBLISH_ERROR_OK` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` + + +## v4.2.6 + +v4.2.6 was released on November xx, 2023. + +#### Issues fixed + +This version fixed the following issues that may occur when using Android 14: + +- When switching between portrait and landscape modes during screen sharing, the screen sharing process was interrupted. To restart screen sharing, users need to confirm recording the screen in the pop-up window. +- When integrating the SDK, setting the Android `targetSdkVersion` to 34 may cause screen sharing to be unavailable or even cause the app to crash. +- Calling `startScreenCapture` without sharing video (setting `captureVideo` to `false`) and then calling `updateScreenCaptureParameters` to share video (setting `captureVideo` to `true`) resulted in a frozen shared screen at the receiving end. +- When screen sharing in landscape mode, the shared screen seen by the audience was divided into two parts: one side of the screen was compressed; the other side was black. + +This version also fixed the following issues: + +- In live streaming scenarios, the video on the audience end occasionally distorted. +- In specific scenarios (such as when the network packet loss rate was high or when the broadcaster left the channel without destroying the engine and then re-joined the channel), the video on the receiving end stuttered or froze. + +## v4.2.3 + +v4.2.3 was released on September xx, 2023. + +#### New features + +1. **Update video screenshot and upload** + + To facilitate the integration of third-party video moderation services from Agora Extensions Marketplace, this version has the following changes: + + - The `CONTENT_INSPECT_TYPE_IMAGE_MODERATION` enumeration is added in the `type` parameter of `ContentInspectModule`, which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. + - An optional parameter `serverConfig` is added in `ContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). + + In addition, this version also introduces the `enableContentInspectEx` method, which supports taking screenshots for multiple video streams and uploading them. + +2. **Check device support for advanced features** + + This version adds the `isFeatureAvailableOnDevice` method to check whether the capability of the current device meets the requirements of the specified advanced feature, such as virtual background and image enhancement. + + Before using advanced features, you can check whether the current device supports these features based on the call result. This helps to avoid performance degradation or unavailable features when enabling advanced features on low-end devices. Based on the return value of this method, you can decide whether to display or enable the corresponding feature button, or notify the user when the device's capabilities are insufficient. + + In addition, since this version, calling `enableVirtualBackground` and `setBeautyEffectOptions` automatically triggers a test on the capability of the current device. When the device is considered underperformed, the error code `-4:ERR_NOT_SUPPORTED` is returned, indicating the device does not support the feature. + +#### Improvements + +1. **Optimize virtual background memory usage** + + This version has upgraded the virtual background algorithm, reducing the memory usage of the virtual background feature. Compared to the previous version, the memory consumption of the app during the use of the virtual background feature on low-end devices has been reduced by approximately 4% to 10% (specific values may vary depending on the device model and platform). + +2. **Screen sharing scenario optimization** + + This release also optimizes the video encoding configuration in screen sharing scenarios. When users customize the `width` and `height` properties of the video, the SDK rounds down the actual encoding resolution while maintaining the aspect ratio of the video and the screen, ensuring that the final encoding resolution does not exceed the user-defined encoding resolution, thereby improving the accuracy of billing for screen sharing streams. + +**Other improvements** + +This release includes the following additional improvements: + +- Optimizes the management method of Texture Buffer for SDK capture and custom video capture scenarios, effectively eliminating frame dropping and crash risks. +- Optimizes the logic of handling invalid parameters. When you call the `setPlaybackSpeed` method to set the playback speed of audio files, if you pass an invalid parameter, the SDK returns the error code -2, which means that you need to reset the parameter. +- Optimizes the logic of Token parsing, in order to prevent an app from crash when an invalid token is passed in. + +#### Issues fixed + +This release fixed the following issues: + +- When using the H.265 encoding mode, when a Web client joined the interactivity, it caused a redundant `onUserEnableLocalVideo` callback on the native side: when the host called `enableLocalVideo (true)`, the receiving end first received a `onUserEnableLocalVideo` callback (with `enabled` as `false`) before receiving a `onUserEnableLocalVideo` callback (with `enabled` as `true`). +- Occasional failure of joining a channel when the local system time was not set correctly. +- When calling the `playEffect [2/2]` method to play two audio files using the same `soundId`, the first audio file was sometimes played repeatedly. +- When the host called the `startAudioMixing [2/2]` method to play music, sometimes the host couldn't hear the music while the remote users could hear it. +- Occasional crashes occurred on certain Android devices. +- Calling `takeSnapshotEx` once receives the `onSnapshotTaken` callback for multiple times. +- In channels joined by calling `joinChannelEx` exclusively, calling `setEnableSpeakerphone` is unable to switch audio route from the speaker to the headphone. + +#### API changes + +**Added** + +- `enableContentInspectEx` +- `CONTENT_INSPECT_TYPE_IMAGE_MODERATION` in `type` of `ContentInspectModule`. +- `serverConfig` in `ContentInspectConfig` +- `isFeatureAvailableOnDevice` +- `FeatureType` + + +## v4.2.2 + +v4.2.2 was released on July xx, 2023. + +#### Compatibility changes + +In this version, some constructors have been removed from the `VideoCanvas` class. + +#### New features + +1. **Wildcard token** + + This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +
              All 4.x SDKs support using wildcard tokens.
              + +2. **Preloading channels** + + This release adds `preloadChannel[1/2]` and `preloadChannel[2/2]` methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host. + + When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Wildcard tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + +3. **Customized background color of video canvas** + + In this release, the `backgroundColor` member has been added to `VideoCanvas`, which allows you to customize the background color of the video canvas when setting the properties of local or remote video display. + +#### Improvements + +1. **Improved camera capture effect** + + Since this release, camera exposure adjustment is supported. This release adds `isCameraExposureSupported` to query whether the device supports exposure adjustment and `setCameraExposureFactor` to set the exposure ratio of the camera. + +2. **Virtual Background Algorithm Upgrade** + + This version has upgraded the portrait segmentation algorithm of the virtual background, which comprehensively improves the accuracy of portrait segmentation, the smoothness of the portrait edge with the virtual background, and the fit of the edge when the person moves. In addition, it optimizes the precision of the person's edge in scenarios such as meetings, offices, homes, and under backlight or weak light conditions. + +3. **Channel media relay** + + The number of target channels for media relay has been increased to 6. When calling `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, you can specify up to 6 target channels. + +4. **Enhancement in video codec query capability** + + To improve the video codec query capability, this release adds the `codecLevels` member in `CodecCapInfo`. After successfully calling `queryCodecCapability`, you can obtain the hardware and software decoding capability levels of the device for H.264 and H.265 video formats through `codecLevels`. + +This release includes the following additional improvements: + +1. To improve the switching experience between multiple audio routes, this release adds the `setRouteInCommunicationMode` method. This method can switch the audio route from a Bluetooth headphone to the earpiece, wired headphone or speaker in communication volume mode ([`MODE_IN_COMMUNICATION`](https://developer.android.google.cn/reference/kotlin/android/media/AudioManager?hl=en#mode_in_communication)). +2. The SDK automatically adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. +3. To help users understand the reasons for more types of remote video state changes, the `REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT` enumeration has been added to the `onRemoteVideoStateChanged` callback, indicating that the local video decoder does not support decoding the received remote video stream. + +#### Issues fixed + +This release fixed the following issues: + +- Slow channel reconnection after the connection was interrupted due to network reasons. +- In screen sharing scenarios, the delay of seeing the shared screen was occasionally higher than expected on some devices. +- In custom video capturing scenarios, `setBeautyEffectOptions`, `setLowlightEnhanceOptions`, `setVideoDenoiserOptions`, and `setColorEnhanceOptions` could not load extensions automatically. + +#### API changes + +**Added** + +- `setCameraExposureFactor` +- `isCameraExposureSupported` +- `preloadChannel[1/2]` +- `preloadChannel[2/2]` +- `updatePreloadChannelToken` +- `setRouteInCommunicationMode` +- `CodecCapLevels` +- `VideoCodecCapLevel` +- `backgroundColor` in `VideoCanvas` +- `codecLevels` in `CodecCapInfo` +- `REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT` + +**Deleted** + +- Some constructors in `VideoCanvas` + +## v4.2.1 + +This version was released on June 21, 2023. + +#### Improvements + +This version improves the network transmission strategy, enhancing the smoothness of audio and video interactions. + +#### Issues fixed + +This version fixed the following issues: +- Inability to join channels caused by SDK's incompatibility with some older versions of AccessToken. +- After the sending end called `setAINSMode` to activate AI noise reduction, occasional echo was observed by the receiving end. +- Brief noise occurred while playing media files using the media player. +- In screen sharing scenarios, some Android devices experienced choppy video on the receiving end. + +## v4.2.0 + +v4.2.0 was released on May 23, 2023. + +#### Compatibility changes + +If you use the features mentioned in this section, ensure that you modify the implementation of the relevant features after upgrading the SDK. + +**1. Video data acquisition** + +- The `onCaptureVideoFrame` and `onPreEncodeVideoFrame` callbacks are added with a new parameter called `sourceType`, which is used to indicate the specific video source type. +- The following callbacks are deleted. Get the video source type through the `sourceType` parameter in the `onPreEncodeVideoFrame` and `onCaptureVideoFrame` callbacks. +- `onScreenCaptureVideoFrame` +- `onPreEncodeScreenVideoFrame` + +**2. Channel media options** + +- `publishCustomAudioTrackEnableAec` in `ChannelMediaOptions` is deleted. Use `publishCustomAudioTrack` instead. +- `publishTrancodedVideoTrack` in `ChannelMediaOptions` is renamed to `publishTranscodedVideoTrack`. +- `publishCustomAudioSourceId` in `ChannelMediaOptions` is renamed to `publishCustomAudioTrackId`. + +**3. Miscellaneous** + +- `onApiCallExecuted` is deleted. Agora recommends getting the results of the API implementation through relevant channels and media callbacks. +- `enableDualStreamMode`[1/2] and `enableDualStreamMode`[2/2] are depredated. Use `setDualStreamMode`[1/2] and `setDualStreamMode`[2/2] instead. +- `startChannelMediaRelay`, `updateChannelMediaRelay`, `startChannelMediaRelayEx` and `updateChannelMediaRelayEx` are deprecated. Use `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx` instead. + + +#### New features + +**1. AI noise reduction** + +This release introduces the AI noise reduction function. Once enabled, the SDK automatically detects and reduces background noises. Whether in bustling public venues or real-time competitive arenas that demand lightning-fast responsiveness, this function guarantees optimal audio clarity, providing users with an elevated audio experience. You can enable this function through the newly-introduced `setAINSMode` method and set the noise reduction mode as balance, aggressive or low latency according to your scenarios. + +**2. Enhanced virtual background** + +To increase the fun of real-time video calls and protect user privacy, this version has enhanced the virtual background feature. You can now set custom backgrounds of various types by calling the `enableVirtualBackground` method, including: + +- Process the background as alpha information without replacement, only separating the portrait and the background. This can be combined with the local video mixing feature to achieve a portrait-in-picture effect. +- Replace the background with various formats of local videos. + +**3. Video scenario settings** + +This release introduces `setVideoScenario` for setting the video application scene. The SDK will automatically enable the best practice strategy based on different scenes, adjusting key performance indicators to optimize video quality and improve user experience. Whether it is a formal business meeting or a casual online gathering, this feature ensures that the video quality meets the requirements. + +Currently, this feature provides targeted optimizations for real-time video conferencing scenarios, including: + +- Automatically activate multiple anti-weak network technologies to enhance the capability and performance of low-quality video streams in meeting scenarios where high bitrate are required, ensuring smoothness when multiple streams are subscribed by the receiving end. +- Monitor the number of subscribers for the high-quality and low-quality video streams in real time, dynamically adjusting the configuration of the high-quality stream and dynamically enabling or disabling the low-quality stream, to save uplink bandwidth and consumption. + +**4. Local video mixing** + +This release adds the local video mixing feature. You can use the `startLocalVideoTranscoder` method to mix and render multiple video streams locally, such as camera-captured video, screen sharing streams, video files, images, etc. This allows you to achieve custom layouts and effects, making it easy to create personalized video display effects to meet various scenario requirements, such as remote meetings, live streaming, online education, while also supporting features like portrait-in-picture effect. + +Additionally, the SDK provides the `updateLocalTranscoderConfiguration` method and the `onLocalVideoTranscoderError` callback. After enabling local video mixing, you can use the `updateLocalTranscoderConfiguration` method to update the video mixing configuration. Where an error occurs in starting the local video mixing or updating the configuration, you can get the reason for the failure through the `onLocalVideoTranscoderError` callback. + +
              Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
              + +**5. Cross-device synchronization** + +In real-time collaborative singing scenarios, network issues can cause inconsistencies in the downlinks of different client devices. To address this, this release introduces `getNtpWallTimeInMs` for obtaining the current Network Time Protocol (NTP) time. By using this method to synchronize lyrics and music across multiple client devices, users can achieve synchronized singing and lyrics progression, resulting in a better collaborative experience. + + +#### Improvements + +**1. Improved voice changer** + +This release introduces the `setLocalVoiceFormant` method that allows you to adjust the formant ratio to change the timbre of the voice. This method can be used together with the `setLocalVoicePitch` method to adjust the pitch and timbre of voice at the same time, enabling a wider range of voice transformation effects. + +**2. Enhanced screen share** + +This release adds the `queryScreenCaptureCapability` method, which is used to query the screen capture capabilities of the current device. To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device's maximum supported frame rate using this method beforehand. + +This release also adds the `setScreenCaptureScenario` method, which is used to set the scenario type for screen sharing. The SDK automatically adjusts the smoothness and clarity of the shared screen based on the scenario type you set. + +**3. Improved compatibility with audio file types** + +As of v4.2.0, you can use the following methods to open files with a URI starting with `content://`: +- `startAudioMixing` [2/2] +- `playEffect` [3/3] +- `open` [2/2] +- `openWithMediaSource` + +**4. Audio and video synchronization** + +For custom video and audio capture scenarios, this release introduces `getCurrentMonotonicTimeInMs` for obtaining the current Monotonic Time. By passing this value into the timestamps of audio and video frames, developers can accurately control the timing of their audio and video streams, ensuring proper synchronization. + +**5. Multi-camera capture** + +This release introduces `startCameraCapture`. By calling this method multiple times and specifying the `sourceType` parameter, developers can start capturing video streams from multiple cameras for local video mixing or multi-channel publishing. This is particularly useful for scenarios such as remote medical care and online education, where multiple cameras need to be connected. + +**6. Channel media relay** + +This release introduces `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. + +**7. Custom audio tracks** + +To better meet the needs of custom audio capture scenarios, this release adds `createCustomAudioTrack` and `destroyCustomAudioTrack` for creating and destroying custom audio tracks. Two types of audio tracks are also provided for users to choose from, further improving the flexibility of capturing external audio source: + +- Mixable audio track: Supports mixing multiple external audio sources and publishing them to the same channel, suitable for multi-channel audio capture scenarios. +- Direct audio track: Only supports publishing one external audio source to a single channel, suitable for low-latency audio capture scenarios. + + +#### Issues fixed + +This release fixed the following issues: + +- Occasional crashes occur on Android devices when users joining or leaving a channel. +- When the host frequently switching the user role between broadcaster and audience in a short period of time, the audience members cannot hear the audio of the host. +- Occasional failure when enabling in-ear monitoring. +- Occasional echo. +- Abnormal client status cased by an exception in the `onRemoteAudioStateChanged` callback. + + +#### API changes + +**Added** + +- `startCameraCapture` +- `stopCameraCapture` +- `startOrUpdateChannelMediaRelay` +- `startOrUpdateChannelMediaRelayEx` +- `getNtpWallTimeInMs` +- `setVideoScenario` +- `getCurrentMonotonicTimeInMs` +- `startLocalVideoTranscoder` +- `updateLocalTranscoderConfiguration` +- `onLocalVideoTranscoderError` +- `queryScreenCaptureCapability` +- `setScreenCaptureScenario` +- `setAINSMode` +- `createCustomAudioTrack` +- `destroyCustomAudioTrack` +- `AudioTrackConfig` +- `AudioTrackType` +- `VideoScenario` +- The `mDomainLimit` and `mAutoRegisterAgoraExtensions` members in `RtcEngineConfig` +- The `sourceType` parameter in `onCaptureVideoFrame` and `onPreEncodeVideoFrame` callbacks +- `BACKGROUND_NONE`(0) +- `BACKGROUND_VIDEO`(4) + +**Deprecated** + +- `enableDualStreamMode`[1/2] +- `enableDualStreamMode`[2/2] +- `startChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelay` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` + +**Deleted** + +- `onApiCallExecuted` +- `publishCustomAudioTrackEnableAec` in `ChannelMediaOptions` in `ChannelMediaOptions` +- `onScreenCaptureVideoFrame` +- `onPreEncodeScreenVideoFrame` + + + +## v4.1.1 + +v4.1.1 was released on January xx, 2023. + +#### Compatibility changes + +As of this release, the SDK optimizes the video encoder algorithm and upgrades the default video encoding resolution from 640 × 360 to 960 × 540 to accommodate improvements in device performance and network bandwidth, providing users with a full-link HD experience in various audio and video interaction scenarios. + +You can call the `setVideoEncoderConfiguration` method to set the expected video encoding resolution in the video encoding parameters configuration. + +
              The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
              + + +#### New features + +**1. Instant frame rendering** + +This release adds the `enableInstantMediaRendering` method to enable instant rendering mode for audio and video frames, which can speed up the first video or audio frame rendering after the user joins the channel. + +**2. Video rendering tracing** + +This release adds the `startMediaRenderingTracing` and `startMediaRenderingTracingEx` methods. The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is called and reports information about the event through the `onVideoRenderingTracingResult` callback. + +Agora recommends that you use this method in conjunction with the UI settings (such as buttons and sliders) in your app. For example, call this method at the moment when the user clicks the "Join Channel" button, and then get the indicators in the video frame rendering process through the `onVideoRenderingTracingResult` callback. This enables developers to facilitate developers to optimize the indicators to improve the user experience. + + + +#### Improvements + +**1. Video frame observer** + +As of this release, the SDK optimizes the `onRenderVideoFrame` callback, and the meaning of the return value is different depending on the video processing mode: + +- When the video processing mode is `PROCESS_MODE_READ_ONLY`, the return value is reserved for future use. +- When the video processing mode is `PROCESS_MODE_READ_WRITE`, the SDK receives the video frame when the return value is `true`; the video frame is discarded when the return value is `false`. + +**2. Super resolution** + +This release improves the performance of super resolution. To optimize the usability of super resolution, this release removes `enableRemoteSuperResolution`. Super resolution is now included in the online strategies of video quality enhancement which does not require extra configuration. + + + +#### Issues fixed + +This release fixed the following issues: + +- Playing audio files with a sample rate of 48 kHz failed. +- Crashes occurred after users set the video resolution as 3840 × 2160 and started CDN streaming on Xiaomi Redmi 9A devices. +- In real-time chorus scenarios, remote users heard noises and echoes when an OPPO R11 device joined the channel in loudspeaker mode. +- When the playback of the local music finished, the `onAudioMixingFinished` callback was not properly triggered. +- When using a video frame observer, the first video frame was occasionally missed on the receiver's end. +- When sharing screens in scenarios involving multiple channels, remote users occasionally saw black screens. +- Switching to the rear camera with the virtual background enabled occasionally caused the background to be inverted. +- When there were multiple video streams in a channel, calling some video enhancement APIs occasionally failed. + + + +#### API changes + +**Added** + +- `enableInstantMediaRendering` +- `startMediaRenderingTracing` +- `startMediaRenderingTracingEx` +- `onVideoRenderingTracingResult` +- `MEDIA_RENDER_TRACE_EVENT` +- `VideoRenderingTracingInfo` + +**Deleted** + +- `enableRemoteSuperResolution` +- Deleted `superResolutionType` in `RemoteVideoStats` +## v4.1.0-1 + +v4.1.0-1 was released on November xx, 2022. + +#### New features + +**1. Headphone equalization effect** + +This release adds the `setHeadphoneEQParameters` method, which is used to adjust the low- and high-frequency parameters of the headphone EQ. This is mainly useful in spatial audio scenarios. If you cannot achieve the expected headphone EQ effect after calling `setHeadphoneEQPreset`, you can call `setHeadphoneEQParameters` to adjust the EQ. + +**2. Encoded video frame observer** + +This release adds the `setRemoteVideoSubscriptionOptions` and `setRemoteVideoSubscriptionOptionsEx` methods. When you call the `registerVideoEncodedFrameObserver` method to register a video frame observer for the encoded video frames, the SDK subscribes to the encoded video frames by default. If you want to change the subscription options, you can call these new methods to set them. + +For more information about registering video observers and subscription options, see the [API reference](./API%20Reference/java_ng/API/toc_video_observer.html#api_imediaengine_registervideoencodedframeobserver). + +**3. MPUDP (MultiPath UDP) (Beta)** + +As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. + +
              To enable this feature, contact sales-us@agora.io. + +**4. Camera capture options** + +This release adds the `followEncodeDimensionRatio` member in `CameraCapturerConfiguration`, which enables you to set whether to follow the video aspect ratio already set in `setVideoEncoderConfiguration` when capturing video with the camera. + +**5. Multi-channel management** + +This release adds a series of multi-channel related methods that you can call to manage audio and video streams in multi-channel scenarios. + +- The `muteLocalAudioStreamEx` and `muteLocalVideoStreamEx` methods are used to cancel or resume publishing a local audio or video stream, respectively. +- The `muteAllRemoteAudioStreamsEx` and `muteAllRemoteVideoStreamsEx` are used to cancel or resume the subscription of all remote users to audio or video streams, respectively. +- The `startRtmpStreamWithoutTranscodingEx`, `startRtmpStreamWithTranscodingEx`, `updateRtmpTranscodingEx`, and `stopRtmpStreamEx` methods are used to implement Media Push in multi-channel scenarios. +- The `startChannelMediaRelayEx`, `updateChannelMediaRelayEx`, `pauseAllChannelMediaRelayEx`, `resumeAllChannelMediaRelayEx`, and `stopChannelMediaRelayEx` methods are used to relay media streams across channels in multi-channel scenarios. +- Adds the `leaveChannelEx` [2/2] method. Compared with the `leaveChannelEx` [1/2] method, a new options parameter is added, which is used to choose whether to stop recording with the microphone when leaving a channel in a multi-channel scenario. + +**6. Video encoding preferences** + +In general scenarios, the default video encoding configuration meets most requirements. For certain specific scenarios, this release adds the `advanceOptions` member in `VideoEncoderConfiguration` for advanced settings of video encoding properties: + +- `compressionPreference`: The compression preferences for video encoding, which is used to select low-latency or high-quality video preferences. +- `encodingPreference`: The video encoder preference, which is used to select adaptive preference, software encoder preference, or hardware encoder video preferences. + +**7. Client role switching** + +In order to enable users to know whether the switched user role is low-latency or ultra-low-latency, this release adds the `newRoleOptions` parameter to the `onClientRoleChanged` callback. The value of this parameter is as follows: + +- `AUDIENCE_LATENCY_LEVEL_LOW_LATENCY` (1): Low latency. +- `AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY` (2): Ultra-low latency. + +#### Improvements + +**1. Bluetooth permissions** + +To simplify integration, as of this release, you can use the SDK to enable Android users to use Bluetooth normally without adding the `BLUETOOTH_CONNECT` permission. + +**2. CDN streaming** + +To improve user experience during CDN streaming, when your camera does not support the video resolution you set when streaming, the SDK automatically adjusts the resolution to the closest value that is supported by your camera and has the same aspect ratio as the original video resolution you set. The actual video resolution used by the SDK for streaming can be obtained through the `onDirectCdnStreamingStats` callback. + +**3. Relaying media streams across channels** + +This release optimizes the `updateChannelMediaRelay` method as follows: + +- Before v4.1.0: If the target channel update fails due to internal reasons in the server, the SDK returns the error code `RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED`(8), and you need to call the `updateChannelMediaRelay` method again. +- v4.1.0 and later: If the target channel update fails due to internal server reasons, the SDK retries the update until the target channel update is successful. + +**4. Reconstructed AIAEC algorithm** + +This release reconstructs the AEC algorithm based on the AI method. Compared with the traditional AEC algorithm, the new algorithm can preserve the complete, clear, and smooth near-end vocals under poor echo-to-signal conditions, significantly improving the system's echo cancellation and dual-talk performance. This gives users a more comfortable call and live-broadcast experience. AIAEC is suitable for conference calls, chats, karaoke, and other scenarios. + +**5. Virtual background** + +This release optimizes the virtual background algorithm. Improvements include the following: + +- The boundaries of virtual backgrounds are handled in a more nuanced way and image matting is is now extremely thin. +- The stability of the virtual background is improved whether the portrait is still or moving, effectively eliminating the problem of background flickering and exceeding the range of the picture. +- More application scenarios are now supported, and a user obtains a good virtual background effect day or night, indoors or out. +- A larger variety of postures are now recognized, when half the body is motionless, the body is shaking, the hands are swinging, or there is fine finger movement. This helps to achieve a good virtual background effect in conjunction with many different gestures. + + +**Other improvements** -#### 1. Changes in strong video denoising implementation +This release includes the following additional improvements: -This version adjusts the implementation of strong video denoising. +- Reduces the latency when pushing external audio sources. +- Improves the performance of echo cancellation when using the `AUDIO_SCENARIO_MEETING` scenario. +- Improves the smoothness of SDK video rendering. +- Enhances the ability to identify different network protocol stacks and improves the SDK's access capabilities in multiple-operator network scenarios. +- At the moment when a user left a channel, a request for leaving was not sent to the server and the leaving behavior was incorrectly determined by the server as timed out. -The `VIDEO_DENOISER_LEVEL_STRENGTH` enumeration is removed. +#### Issues fixed -Instead, after enabling video denoising by calling `setVideoDenoiserOptions [1/2]`, you can call the `setBeautyEffectOptions [1/2]` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions [1/2]`. +This release fixed the following issues: -Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions [1/2]`. +- Audience members heard buzzing noises when the host switched between speakers and earphones during live streaming. +- The call `getExtensionProperty` failed and returned an empty string. +- When entering a live streaming room that has been played for a long time as an audience, the time for the first frame to be rendered was shortened. -#### 2. Changes in video encoding preferences +#### API changes -To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: +**Added** -- In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. -- In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). +- `setHeadphoneEQParameters` -#### 3. 16 KB memory page size +- `setRemoteVideoSubscriptionOptions` -Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. +- `setRemoteVideoSubscriptionOptionsEx` -### New features +- `VideoSubscriptionOptions` -#### 1. Live show scenario +- `leaveChannelEx` [2/2] -This version adds the `APPLICATION_SCENARIO_LIVESHOW(3)` (Live Show) enumeration to the `VideoScenario`. You can call `setVideoScenario` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. +- `muteLocalAudioStreamEx` -#### 2. Maximum frame rate for video rendering +- `muteLocalVideoStreamEx` -This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. +- `muteAllRemoteAudioStreamsEx` -In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. +- `muteAllRemoteVideoStreamsEx` -#### 3. Watching live streaming through URLs +- `startRtmpStreamWithoutTranscodingEx` -As of this version, audience members can directly open a specific URL to play the real-time media stream through openWithUrl, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. +- `startRtmpStreamWithTranscodingEx` -#### 4. Filter effects +- `updateRtmpTranscodingEx` -This version introduces the `setFilterEffectOptions [1/2]` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. +- `stopRtmpStreamEx` -#### 5. Local audio mixing +- `startChannelMediaRelayEx` -This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the stopLocalAudioMixer method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. +- `updateChannelMediaRelayEx` -Example use cases for this feature include: -- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. -- In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. -- In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. +- `pauseAllChannelMediaRelayEx` -#### 6. External MediaProjection +- `resumeAllChannelMediaRelayEx` -This version introduces the `setExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the MediaProjection applied by the SDK. +- `stopChannelMediaRelayEx` -If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. +- `followEncodeDimensionRatio` in `CameraCapturerConfiguration` -#### 7. EGL context +- `hwEncoderAccelerating` in `LocalVideoStats` -This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. +- `advanceOptions` in `VideoEncoderConfiguration` -#### 8. Color space settings +- `newRoleOptions` in `onClientRoleChanged` -This version adds `getColorSpace` and `setColorSpace` to `VideoFrame`. You can use `getColorSpace` to obtain the color space properties of the video frame and use `setColorSpace` to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing. +- `adjustUserPlaybackSignalVolumeEx` +- `MvProperty` class -### Improvements +- `ClimaxSegment` class -#### 1. Virtual background algorithm optimization +**Deprecated** -This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. +- `onApiCallExecuted`. Use the callbacks triggered by specific methods instead. -#### 2. Snapshot at specified video observation points +**Deleted** -This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. +- Removes deprecated member parameters `backgroundImage` and `watermark` in `LiveTranscoding` class. +- Removes `RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED`(8) in `onChannelMediaRelayEvent` callback. -#### 3. Custom audio capture improvements +## v4.0.0 -This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is false, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. +v4.0.0 was released on September 15, 2022. -#### 4. Other Improvements +#### New features -- In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. -- Optimizes the logic for calling queryDeviceScore to obtain device score levels, improving the accuracy of the score results. -- When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the onPlayerEvent callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. -- When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. -### Bug fixes +**2. Full HD and Ultra HD resolution** -This version fixes the following issues: +In order to improve the interactive video experience, the SDK optimizes the whole process of video capturing, encoding, decoding and rendering. Starting from this version, it supports Full HD (FHD) and Ultra HD (UHD) video resolutions. You can set the `dimensions` parameter to 1920 × 1080 or higher resolution when calling the `setVideoEncoderConfiguration` method. If your device does not support high resolutions, the SDK will automatically fall back to an appropriate resolution. -- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. -- Occasional noise and stuttering when playing music resources from the music content center. -- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. -- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. -- Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. -- Occasional crashes during audio and video interaction. +
            21. The UHD resolution (4K, 60 fps) is currently in beta and requires certain device performance and network bandwidth. If you want to experience this feature, contact technical support. +
            22. High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance. +
            23. The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing. From 3564f068769a5e28a4ed7dbe918254220e290273 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 14:42:39 +0800 Subject: [PATCH 279/354] Update release_android_ng.md --- .../en-US/native/release_android_ng.md | 119 +++++++++++++++++- 1 file changed, 114 insertions(+), 5 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md index 4db20af91fa..88a06e2b11a 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md @@ -4,6 +4,115 @@ On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. +## v4.5.0 + +This version was released on November x, 2024. + +### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Attention:** +As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the libaosl.so library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the libaosl.so library to avoid conflicts. The libaosl.so library version in RTC SDK v4.5.0 is 1.2.13. + +#### 1. Changes in strong video denoising implementation + +This version adjusts the implementation of strong video denoising. + +The `VIDEO_DENOISER_LEVEL_STRENGTH` enumeration is removed. + +Instead, after enabling video denoising by calling `setVideoDenoiserOptions [1/2]`, you can call the `setBeautyEffectOptions [1/2]` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions [1/2]`. + +Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions [1/2]`. + +#### 2. Changes in video encoding preferences + +To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + +- In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. +- In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### 3. 16 KB memory page size + +Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + +### New features + +#### 1. Live show scenario + +This version adds the `APPLICATION_SCENARIO_LIVESHOW(3)` (Live Show) enumeration to the `VideoScenario`. You can call `setVideoScenario` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. + +#### 2. Maximum frame rate for video rendering + +This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + +In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +#### 3. Watching live streaming through URLs + +As of this version, audience members can directly open a specific URL to play the real-time media stream through openWithUrl, instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream. + +#### 4. Filter effects + +This version introduces the `setFilterEffectOptions [1/2]` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +#### 5. Local audio mixing + +This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the stopLocalAudioMixer method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + +Example use cases for this feature include: + +- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. +- In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. +- In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +#### 6. External MediaProjection + +This version introduces the `setExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the MediaProjection applied by the SDK. + +If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. + +#### 7. EGL context + +This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. + +#### 8. Color space settings + +This version adds `getColorSpace` and `setColorSpace` to `VideoFrame`. You can use `getColorSpace` to obtain the color space properties of the video frame and use `setColorSpace` to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing. + +### Improvements + +#### 1. Virtual background algorithm optimization + +This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +#### 2. Snapshot at specified video observation points + +This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +#### 3. Custom audio capture improvements + +This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is false, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +#### 4. Other Improvements + +- In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. +- Optimizes the logic for calling queryDeviceScore to obtain device score levels, improving the accuracy of the score results. +- When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the onPlayerEvent callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. +- When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +### Bug fixes + +This version fixes the following issues: + +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. +- Occasional noise and stuttering when playing music resources from the music content center. +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. +- Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. + + ## v4.4.1 @@ -102,7 +211,7 @@ This version was released on May x, 20xx. 1. This release enhances the usability of the [setRemoteSubscribeFallbackOption](API/api_irtcengine_setremotesubscribefallbackoption.html) method by removing the timing requirements for invocation. It can now be called both before and after joining the channel to dynamically switch audio and video stream fallback options in weak network conditions. 2. The Agora media player supports playing MP4 files with an Alpha channel. -3. The Agora media player fully supports playing music files located in the `/assets/` directory or from URI starting with `content://`. +3. The Agora media player fully supports playing music files located in the `/assets/` directory or from URI starting with `content://`. #### Issues fixed @@ -319,13 +428,13 @@ This release has optimized the implementation of some functions, involving renam The `LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE` enumeration has been changed to `LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT`. 8. **Log encryption behavior changes** - - For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. - + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + Refer to the following solutions for different needs: - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. - + 9. **Removing IAgoraEventHandler interface** This release deletes the `IAgoraEventHandler` interface class. All callback events that were previously managed under this class are now processed through the `IRtcEngineEventHandler` interface class. From 88e87dc73543d1d1cd462a66edd622c71a65ffd5 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 14:45:39 +0800 Subject: [PATCH 280/354] Update release_android_ng.md --- .../RTC 4.x/release-notes/en-US/native/release_android_ng.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md index 88a06e2b11a..07ef00dc261 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md @@ -54,7 +54,7 @@ As of this version, audience members can directly open a specific URL to play th #### 4. Filter effects -This version introduces the `setFilterEffectOptions [1/2]` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. +This version introduces the `setFilterEffectOptions [1/2]` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. #### 5. Local audio mixing @@ -88,7 +88,7 @@ This version upgrades the virtual background algorithm, making the segmentation #### 2. Snapshot at specified video observation points -This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. +This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. #### 3. Custom audio capture improvements From 301e61b6e71f6bf9da30a44129a5aea67bf00332 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 14:46:08 +0800 Subject: [PATCH 281/354] Update release_windows_ng.md --- .../release-notes/en-US/native/release_windows_ng.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md index 2df18e334bf..50dc45f17f7 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_windows_ng.md @@ -56,7 +56,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.dll` 4. **Filter effects** - This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the **config** parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. 5. **Local audio mixing** @@ -85,7 +85,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.dll` 2. **Snapshot at specified video observation points** - This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the **config** parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. 3. **Custom audio capture improvements** @@ -102,7 +102,7 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.dll` This version fixes the following issues: -- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by **regionRect** was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. +- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by `regionRect` was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. - Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. - When calling `followSystemRecordingDevice` or `followSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `onLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. - Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. From 4b7154dfdecbe619cb88c766854bf45fe42f99a8 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 14:50:44 +0800 Subject: [PATCH 282/354] fix ios release --- markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md index b3e468f49f8..6f9aef67c7f 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_ios_ng.md @@ -63,8 +63,6 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr This version adds the `colorSpace` parameter to `AgoraOutputVideoFrame` and `AgoraVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. -7. **Others** - #### Improvements 1. **Virtual background algorithm optimization** From 6014e80579dd1bc058715236948e4db22554fd52 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 14:51:37 +0800 Subject: [PATCH 283/354] Update release_android_ng.md --- .../release-notes/en-US/native/release_android_ng.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md index 07ef00dc261..ae739c2eea6 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_android_ng.md @@ -1,9 +1,3 @@ -## Known issues and limitations - -**Android 14 screen sharing issue** - -On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. - ## v4.5.0 This version was released on November x, 2024. From d2aebfee67eb3bee861e9d9cb8cd0d7a5b976c71 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 15:39:56 +0800 Subject: [PATCH 284/354] add en keys links --- en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index 0ba457c5cf4..e7dd974544d 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -27,6 +27,20 @@ + + + + show room + + + + + + + one to one live + + + From 1b064625da4dc898cfb38495f2c1134b5f031faa Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 14 Nov 2024 16:18:01 +0800 Subject: [PATCH 285/354] add mac device --- markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md index 4ef3ad3b836..b8e5673d106 100644 --- a/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/native/release_mac_ng.md @@ -65,6 +65,10 @@ As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the `aosl.xcfr This version adds the `colorSpace` parameter to `AgoraOutputVideoFrame` and `AgoraVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. +7. **Others** + + - The `rtcEngine:device:type:stateChanged:` callback supports reporting that the device has been plugged in. + #### Improvements 1. **Virtual background algorithm optimization** From c97d64481a77618e246da6fa8ec513f3354343d3 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 14 Nov 2024 08:57:53 +0000 Subject: [PATCH 286/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-java.ditamap | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 26ba160375f..00946ab6624 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -6275,20 +6275,6 @@ - - - - getColorSpace - - - - - - - setColorSpace - - - From c589b40cd1b0c4df51768fe60184ecab6599802c Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 14 Nov 2024 17:37:30 +0800 Subject: [PATCH 287/354] add back platform --- .../RTC-NG/config/keys-rtc-ng-api-java.ditamap | 14 ++++++++++++++ en-US/dita/RTC-NG/release/release_notes.dita | 14 +++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 00946ab6624..26ba160375f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -6275,6 +6275,20 @@ + + + + getColorSpace + + + + + + + setColorSpace + + + diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index a93b6ecfe4b..188c55213e2 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -85,7 +85,7 @@
            24. In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).
            25. -
            26. 16 KB memory page size +
            27. 16 KB memory page size (Android)

              Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

            28. @@ -128,11 +128,11 @@

              -
            29. External MediaProjection +
            30. External MediaProjection (Android)

              This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

              If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture.

            31. -
            32. EGL context +
            33. EGL context (Android)

              This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

            34. Color space settings @@ -183,11 +183,11 @@

              This version fixes the following issues:

              • When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
              • -
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations.
              • -
              • Occasional noise and stuttering when playing music resources from the music content center.
              • +
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
              • +
              • Occasional noise and stuttering when playing music resources from the music content center. (Android)
              • Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
              • -
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect.
              • -
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected.
              • +
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
              • +
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
              • Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
              • When calling or to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback is not triggered when the audio device is removed, which is not as expected. (Windows)
              • Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
              • From 5e63fe39ae8846eb03076a6249ad6a93960a19a9 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Thu, 14 Nov 2024 09:38:03 +0000 Subject: [PATCH 288/354] Sync cn prototype to en prototype --- .../RTC-NG/config/keys-rtc-ng-api-java.ditamap | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 26ba160375f..00946ab6624 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -6275,20 +6275,6 @@ - - - - getColorSpace - - - - - - - setColorSpace - - - From 775331a55662b5454c52e9d4505698e7e729bd82 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Fri, 15 Nov 2024 17:44:38 +0800 Subject: [PATCH 289/354] Update keys-rtc-ng-api-blueprint.ditamap --- .../config/keys-rtc-ng-api-blueprint.ditamap | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index ec9e6afed07..dbe9fded58f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -6592,6 +6592,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -11716,6 +11723,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -12934,4 +12948,4 @@ - \ No newline at end of file + From 3d4a73d996ad48c11c70eba9820b16b1c16bd934 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Mon, 18 Nov 2024 10:27:11 +0800 Subject: [PATCH 290/354] add 4.5.0 app methods and enums --- .../config/keys-rtc-ng-api-blueprint.ditamap | 7 + .../config/keys-rtc-ng-api-unreal.ditamap | 340 +++++++++++++++++- dita/rtc_api.xpr | 44 +-- 3 files changed, 368 insertions(+), 23 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index dbe9fded58f..f16502f2971 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -8223,6 +8223,13 @@ + + + + MAINTAIN_AUTO + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index e4216b8eb72..f0b40a28e35 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -1166,6 +1166,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1261,6 +1275,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1296,6 +1324,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1543,6 +1592,13 @@ + + + + takeSnapshotEx [2/2] + + + @@ -1685,6 +1741,13 @@ + + + + setExternalMediaProjection + + + @@ -2684,6 +2747,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -3955,6 +4041,13 @@ + + + + takeSnapshot [2/2] + + + @@ -5344,6 +5437,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5477,6 +5591,13 @@ + + + + MixedAudioStream + + + @@ -5708,6 +5829,13 @@ + + + + SnapshotConfig + + + @@ -6242,6 +6370,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -6536,6 +6727,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -8300,6 +8498,13 @@ + + + + MAINTAIN_AUTO + + + @@ -8930,6 +9135,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -11093,6 +11417,13 @@ + + + + RecorderStreamType + + + @@ -11793,6 +12124,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -13515,4 +13853,4 @@ - \ No newline at end of file + diff --git a/dita/rtc_api.xpr b/dita/rtc_api.xpr index 11952bb119b..c4874483445 100644 --- a/dita/rtc_api.xpr +++ b/dita/rtc_api.xpr @@ -202,11 +202,11 @@ - RTC-NG/RTC_NG_API_CPP.ditamap + RTC-NG/RTC_NG_API_Blueprint.ditamap - DITA Map HTML5 - NG CPP + DITA Map HTML5 - NG Blueprint @@ -240,26 +240,6 @@ - - - RTC-NG/RTC_NG_API_Blueprint.ditamap - - - - DITA Map HTML5 - NG Blueprint - - - - - DITAMAP - - - - - 2 - - - RTC-NG/RTC_NG_API_Harmony.ditamap @@ -763,6 +743,26 @@ + + + RTC-NG/RTC_NG_API_CPP.ditamap + + + + DITA Map HTML5 - NG CPP + + + + + DITAMAP + + + + + 2 + + + From 99d28f6ec379a94139b562b38f5742752ca711b3 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 18 Nov 2024 14:43:28 +0800 Subject: [PATCH 291/354] RN/Electron: proto 1 and 3 --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 10 +- ..._irtcengine_getfaceshapebeautyoptions.dita | 8 +- ...irtcengine_setexternalmediaprojection.dita | 2 +- ...pi_irtcengine_setfaceshapeareaoptions.dita | 10 +- ..._irtcengine_setfaceshapebeautyoptions.dita | 12 +- ...pi_irtcengine_setlocalrendertargetfps.dita | 10 +- ...i_irtcengine_setremoterendertargetfps.dita | 4 +- .../api_irtcengine_startlocalaudiomixer.dita | 4 +- .../api_irtcengine_stoplocalaudiomixer.dita | 4 +- ...ne_updatelocalaudiomixerconfiguration.dita | 8 +- dita/RTC-NG/API/class_audiotrackconfig.dita | 2 + .../API/class_faceshapeareaoptions.dita | 9 +- .../API/class_faceshapebeautyoptions.dita | 9 +- .../class_localaudiomixerconfiguration.dita | 12 +- dita/RTC-NG/API/class_mixedaudiostream.dita | 14 +- dita/RTC-NG/API/class_videoframe.dita | 2 + dita/RTC-NG/RTC_NG_API_Electron.ditamap | 12 + dita/RTC-NG/RTC_NG_API_RN.ditamap | 13 + .../config/keys-rtc-ng-api-electron.ditamap | 296 ++++++++++++++++ dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 331 +++++++++++++++++- ...rtcengine_setexternalremoteeglcontext.dita | 2 +- 21 files changed, 741 insertions(+), 33 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 676a696e2af..4a245a17182 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -19,9 +19,15 @@ - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeAreaOptions(_:sourceType:)); virtual int getFaceShapeAreaOptions(agora::rtc::FaceShapeAreaOptions::FACE_SHAPE_AREA shapeArea, FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + abstract getFaceShapeAreaOptions( + shapeArea: FaceShapeArea, + type?: MediaSourceType + ): FaceShapeAreaOptions; - + abstract getFaceShapeAreaOptions( + shapeArea: FaceShapeArea, + type?: MediaSourceType + ): FaceShapeAreaOptions;

                diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 80c14bce42d..33a4b7f5526 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -19,9 +19,13 @@ - (AgoraFaceShapeBeautyOptions * _Nullable)getFaceShapeBeautyOptions:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeBeautyOptions(_:)); virtual int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + abstract getFaceShapeBeautyOptions( + type?: MediaSourceType + ): FaceShapeBeautyOptions; - + abstract getFaceShapeBeautyOptions( + type?: MediaSourceType + ): FaceShapeBeautyOptions;

                diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index da31e5d7584..42910d71c88 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -20,7 +20,7 @@ - + abstract setExternalMediaProjection(mediaProjection: any): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index ce79afa1326..60422c14037 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -19,9 +19,15 @@ - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + abstract setFaceShapeAreaOptions( + options: FaceShapeAreaOptions, + type?: MediaSourceType + ): number; - + abstract setFaceShapeAreaOptions( + options: FaceShapeAreaOptions, + type?: MediaSourceType + ): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index b1a48a8e85c..6672598b421 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -19,9 +19,17 @@ - (int)setFaceShapeBeautyOptions:(BOOL)enable options:(AgoraFaceShapeBeautyOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeBeautyOptions(_:options:sourceType:)); virtual int setFaceShapeBeautyOptions(bool enabled, const FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + abstract setFaceShapeBeautyOptions( + enabled: boolean, + options: FaceShapeBeautyOptions, + type?: MediaSourceType + ): number; - + abstract setFaceShapeBeautyOptions( + enabled: boolean, + options: FaceShapeBeautyOptions, + type?: MediaSourceType + ): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index 1bc5b8e42fa..8d93088a195 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -19,9 +19,15 @@ targetFps:(int)targetFps; public abstract int setLocalRenderTargetFps(Constants.VideoSourceType sourceType, int targetFps); virtual int setLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps) = 0; - + abstract setLocalRenderTargetFps( + sourceType: VideoSourceType, + targetFps: number + ): number; - + abstract setLocalRenderTargetFps( + sourceType: VideoSourceType, + targetFps: number + ): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita index bf998b2d33b..da37e4375ef 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -18,9 +18,9 @@ - (int)setRemoteRenderTargetFps:(int)targetFps; virtual int setRemoteRenderTargetFps(int targetFps) = 0; - + abstract setRemoteRenderTargetFps(targetFps: number): number; - + abstract setRemoteRenderTargetFps(targetFps: number): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 5e935eb83a3..4252ffe0d75 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -18,9 +18,9 @@ - (int)startLocalAudioMixer:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(startLocalAudioMixer(_:)); virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; - + abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; - + abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index 30fb53839f4..1de4c459b36 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -18,9 +18,9 @@ - (int)stopLocalAudioMixer NS_SWIFT_NAME(stopLocalAudioMixer()); virtual int stopLocalAudioMixer() = 0; - + abstract stopLocalAudioMixer(): number; - + abstract stopLocalAudioMixer(): number;

                diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 93a02ece0e0..2e7a6038868 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -18,9 +18,13 @@ - (int)updateLocalAudioMixerConfiguration:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(updateLocalAudioMixerConfiguration(_:)); virtual int updateLocalAudioMixerConfiguration(const LocalAudioMixerConfiguration& config) = 0; - + abstract updateLocalAudioMixerConfiguration( + config: LocalAudioMixerConfiguration + ): number; - + abstract updateLocalAudioMixerConfiguration( + config: LocalAudioMixerConfiguration + ): number;

                diff --git a/dita/RTC-NG/API/class_audiotrackconfig.dita b/dita/RTC-NG/API/class_audiotrackconfig.dita index 7c425f5025d..64af142135c 100644 --- a/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -47,6 +47,7 @@ struct FAudioTrackConfig }; export class AudioTrackConfig { enableLocalPlayback?: boolean; + enableAudioProcessing?: boolean; } public class AudioTrackConfig { @@ -65,6 +66,7 @@ struct FAudioTrackConfig }; export class AudioTrackConfig { enableLocalPlayback?: boolean; + enableAudioProcessing?: boolean; } @JsonSerializable(explicitToJson: true, includeIfNull: false) class AudioTrackConfig { diff --git a/dita/RTC-NG/API/class_faceshapeareaoptions.dita b/dita/RTC-NG/API/class_faceshapeareaoptions.dita index 08daedaeacf..ca8161300b1 100644 --- a/dita/RTC-NG/API/class_faceshapeareaoptions.dita +++ b/dita/RTC-NG/API/class_faceshapeareaoptions.dita @@ -56,8 +56,15 @@ }; - + export class FaceShapeAreaOptions { + shapeArea?: FaceShapeArea; + shapeIntensity?: number; +} + export class FaceShapeAreaOptions { + shapeArea?: FaceShapeArea; + shapeIntensity?: number; +}

                diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita index 0d4c4250e0b..457ee8b7d77 100644 --- a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -33,8 +33,15 @@ FaceShapeBeautyOptions() : shapeStyle(FACE_SHAPE_BEAUTY_STYLE_FEMALE), styleIntensity(50) {} };
                - + export class FaceShapeBeautyOptions { + shapeStyle?: FaceShapeBeautyStyle; + styleIntensity?: number; +} + export class FaceShapeBeautyOptions { + shapeStyle?: FaceShapeBeautyStyle; + styleIntensity?: number; +}

                diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 6f8f514341d..f2ae0904495 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -38,9 +38,17 @@ LocalAudioMixerConfiguration() : streamCount(0), syncWithLocalMic(true) {} };
                - + export class LocalAudioMixerConfiguration { + streamCount?: number; + audioInputStreams?: MixedAudioStream[]; + syncWithLocalMic?: boolean; +} - + export class LocalAudioMixerConfiguration { + streamCount?: number; + audioInputStreams?: MixedAudioStream[]; + syncWithLocalMic?: boolean; +}

                diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index 4fba9c0c8e8..aba54637086 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -49,9 +49,19 @@ trackId(track) {} }; - + export class MixedAudioStream { + sourceType?: AudioSourceType; + remoteUserUid?: number; + channelId?: string; + trackId?: number; +} - + export class MixedAudioStream { + sourceType?: AudioSourceType; + remoteUserUid?: number; + channelId?: string; + trackId?: number; +}

                diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 15070bb10e9..5a652283888 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -559,6 +559,7 @@ struct FVideoFrame { alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } public class VideoFrame { @@ -646,6 +647,7 @@ struct FVideoFrame { alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } @JsonSerializable(explicitToJson: true, includeIfNull: false) class VideoFrame { diff --git a/dita/RTC-NG/RTC_NG_API_Electron.ditamap b/dita/RTC-NG/RTC_NG_API_Electron.ditamap index 715d31e56c6..6f7040b917f 100644 --- a/dita/RTC-NG/RTC_NG_API_Electron.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Electron.ditamap @@ -198,6 +198,11 @@ + + + + + @@ -298,8 +303,13 @@ + + + + + @@ -345,9 +355,11 @@ + + diff --git a/dita/RTC-NG/RTC_NG_API_RN.ditamap b/dita/RTC-NG/RTC_NG_API_RN.ditamap index 43b7a0febd2..ef80875541a 100644 --- a/dita/RTC-NG/RTC_NG_API_RN.ditamap +++ b/dita/RTC-NG/RTC_NG_API_RN.ditamap @@ -195,6 +195,11 @@ + + + + + @@ -273,6 +278,7 @@ + @@ -294,8 +300,13 @@ + + + + + @@ -345,9 +356,11 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index f042a9914db..b5f30cfe27b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -1203,6 +1203,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1238,6 +1252,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -2424,6 +2459,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4827,6 +4885,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -4943,6 +5022,20 @@ MediaSource + + + + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration @@ -5690,6 +5783,69 @@ + + + + AudioSourceType + + + + + + + AudioSourceMicrophone + + + + + + + AudioSourceCustom + + + + + + + AudioSourceMediaPlayer + + + + + + + AudioSourceLoopbackRecording + + + + + + + AudioSourceMixedStream + + + + + + + AudioSourceRemoteUser + + + + + + + AudioSourceRemoteChannel + + + + + + + AudioSourceUnknown + + + @@ -5872,6 +6028,13 @@ + + + + PreferCompressionAuto + + + @@ -7629,6 +7792,13 @@ + + + + MaintainAuto + + + @@ -8256,6 +8426,125 @@ ExperienceQualityBad + + + + + + + FaceShapeArea + + + + + + + FaceShapeAreaNone + + + + + + + FaceShapeAreaHeadscale + + + + + + + FaceShapeAreaForehead + + + + + + + FaceShapeAreaFacecontour + + + + + + + FaceShapeAreaFacelength + + + + + + + FaceShapeAreaFacewidth + + + + + + + FaceShapeAreaCheekbone + + + + + + + FaceShapeAreaCheek + + + + + + + FaceShapeAreaChin + + + + + + + FaceShapeAreaEyescale + + + + + + + FaceShapeAreaNoselength + + + + + + + FaceShapeAreaNosewidth + + + + + + + FaceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + FaceShapeBeautyStyleFemale + + + + + + + FaceShapeBeautyStyleMale @@ -10807,6 +11096,13 @@ + + + + ApplicationScenarioLiveshow + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index 80eba449e27..c24778205cf 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -1136,6 +1136,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1220,13 +1234,6 @@ - - - - FocalLengthInfo - - - @@ -1245,6 +1252,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1280,6 +1301,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -2405,6 +2447,13 @@ + + + + setExternalRemoteEglContext + + + @@ -2464,6 +2513,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -4787,6 +4859,34 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + + + + + FocalLengthInfo + + + @@ -4899,6 +4999,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5629,6 +5743,69 @@ + + + + AudioSourceType + + + + + + + AudioSourceMicrophone + + + + + + + AudioSourceCustom + + + + + + + AudioSourceMediaPlayer + + + + + + + AudioSourceLoopbackRecording + + + + + + + AudioSourceMixedStream + + + + + + + AudioSourceRemoteUser + + + + + + + AudioSourceRemoteChannel + + + + + + + AudioSourceUnknown + + + @@ -5853,6 +6030,13 @@ + + + + PreferCompressionAuto + + + @@ -7645,6 +7829,13 @@ + + + + MaintainAuto + + + @@ -8275,6 +8466,125 @@ + + + + FaceShapeArea + + + + + + + FaceShapeAreaNone + + + + + + + FaceShapeAreaHeadscale + + + + + + + FaceShapeAreaForehead + + + + + + + FaceShapeAreaFacecontour + + + + + + + FaceShapeAreaFacelength + + + + + + + FaceShapeAreaFacewidth + + + + + + + FaceShapeAreaCheekbone + + + + + + + FaceShapeAreaCheek + + + + + + + FaceShapeAreaChin + + + + + + + FaceShapeAreaEyescale + + + + + + + FaceShapeAreaNoselength + + + + + + + FaceShapeAreaNosewidth + + + + + + + FaceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + FaceShapeBeautyStyleFemale + + + + + + + FaceShapeBeautyStyleMale + + + @@ -10767,6 +11077,13 @@ + + + + ApplicationScenarioLiveshow + + + diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index bb303f9c7d5..e5e172da6bc 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -20,7 +20,7 @@ - + abstract setExternalRemoteEglContext(eglContext: any): number;

                From f1ac001e145b6d3f798222faeec4dd599ae3eb1f Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 18 Nov 2024 14:45:15 +0800 Subject: [PATCH 292/354] ++ --- .../api_irtcengine_setexternalremoteeglcontext.dita | 4 ++-- .../API/api_irtcengine_setfiltereffectoptions.dita | 7 +++++-- dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita | 5 +++-- dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita | 7 +++++-- dita/RTC-NG/API/class_videoframe.dita | 10 +++++++++- dita/RTC-NG/API/rtc_api_data_type.dita | 6 ++++++ 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index 5a01a581576..aa88692f00d 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -19,9 +19,9 @@ virtual int setExternalRemoteEglContext(void* eglContext) = 0; - + public abstract int SetExternalRemoteEglContext(IntPtr eglContext); -

                + Future<void> setExternalRemoteEglContext(int eglContext);

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index b1732696a6c..7818a497c38 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -20,9 +20,12 @@ virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + public abstract int SetFilterEffectOptions(bool enabled, FilterEffectOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); -

                + Future<void> setFilterEffectOptions( + {required bool enabled, + required FilterEffectOptions options, + MediaSourceType type = MediaSourceType.primaryCameraSource});

                diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index e03d688bb42..f06e7380911 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -19,9 +19,10 @@ virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; - + public abstract int TakeSnapshot(uint uid, SnapshotConfig config); - + Future<void> takeSnapshotWithConfig( + {required int uid, required SnapshotConfig config});

                diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index ee7dec4acbe..b5fe53ae9ed 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -19,9 +19,12 @@ virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; - + public abstract int TakeSnapshotEx(RtcConnection connection, uint uid, SnapshotConfig config); - + Future<void> takeSnapshotWithConfigEx( + {required RtcConnection connection, + required int uid, + required SnapshotConfig config});

                diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 5a652283888..72566fa7917 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -608,6 +608,10 @@ struct FVideoFrame { public byte[] alphaBuffer; public ALPHA_STITCH_MODE alphaStitchMode; + + public IVideoFrameMetaInfo metaInfo; + + public ColorSpace colorSpace; }; export class VideoFrame { @@ -671,7 +675,8 @@ class VideoFrame { this.alphaBuffer, this.alphaStitchMode, this.pixelBuffer, - this.metaInfo}); + this.metaInfo; + this.colorSpace}); @JsonKey(name: 'type') final VideoPixelFormat? type; @@ -734,6 +739,9 @@ class VideoFrame { @JsonKey(name: 'metaInfo') final VideoFrameMetaInfo? metaInfo; + @JsonKey(name: 'colorSpace') + final ColorSpace? colorSpace; + factory VideoFrame.fromJson(Map<String, dynamic> json) => _$VideoFrameFromJson(json); diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index df1502856f5..57aacbb5425 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -654,6 +654,7 @@
              • +
              • @@ -701,6 +702,7 @@
              • +
              • @@ -1098,6 +1100,7 @@
              • +
              • @@ -1156,6 +1159,7 @@
              • +
              • @@ -1830,6 +1834,7 @@
              • +
              • @@ -2386,6 +2391,7 @@
              • +
              • From 59754da5f5886e76105fde3441f742af95e29ab5 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 18 Nov 2024 15:19:41 +0800 Subject: [PATCH 293/354] section 1 --- .../api_irtcengine_startlocalaudiomixer.dita | 4 +- .../api_irtcengine_stoplocalaudiomixer.dita | 4 +- ...ne_updatelocalaudiomixerconfiguration.dita | 5 +- dita/RTC-NG/API/class_audiotrackconfig.dita | 27 +++----- .../class_localaudiomixerconfiguration.dita | 26 +++++++- dita/RTC-NG/API/class_mixedaudiostream.dita | 31 ++++++++- dita/RTC-NG/API/rtc_api_data_type.dita | 2 + .../config/keys-rtc-ng-api-flutter.ditamap | 63 +++++++++++++++++++ .../config/keys-rtc-ng-api-unity.ditamap | 63 +++++++++++++++++++ 9 files changed, 198 insertions(+), 27 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 4252ffe0d75..5a2d42e09e2 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -19,9 +19,9 @@ virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; - + public abstract int StartLocalAudioMixer(LocalAudioMixerConfiguration config); abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; -

                + Future<void> startLocalAudioMixer(LocalAudioMixerConfiguration config);

                diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index 1de4c459b36..c97fe2dea37 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -19,9 +19,9 @@ virtual int stopLocalAudioMixer() = 0; abstract stopLocalAudioMixer(): number; - + public abstract int StopLocalAudioMixer(); abstract stopLocalAudioMixer(): number; -

                + Future<void> stopLocalAudioMixer();

                diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 2e7a6038868..bb3fb8b2761 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -21,11 +21,12 @@ abstract updateLocalAudioMixerConfiguration( config: LocalAudioMixerConfiguration ): number; - + public abstract int UpdateLocalAudioMixerConfiguration(LocalAudioMixerConfiguration config); abstract updateLocalAudioMixerConfiguration( config: LocalAudioMixerConfiguration ): number; -

                + Future<void> updateLocalAudioMixerConfiguration( + LocalAudioMixerConfiguration config);

                diff --git a/dita/RTC-NG/API/class_audiotrackconfig.dita b/dita/RTC-NG/API/class_audiotrackconfig.dita index 64af142135c..7efbc46b1c9 100644 --- a/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -50,31 +50,24 @@ struct FAudioTrackConfig enableAudioProcessing?: boolean; } public class AudioTrackConfig - { - public bool enableLocalPlayback; - - public AudioTrackConfig(bool enableLocalPlayback) - { - this.enableLocalPlayback = enableLocalPlayback; - } - - public AudioTrackConfig() - { - enableLocalPlayback = true; - } - - }; +{ + public bool enableLocalPlayback; + public bool enableAudioProcessing; +} export class AudioTrackConfig { enableLocalPlayback?: boolean; enableAudioProcessing?: boolean; } - @JsonSerializable(explicitToJson: true, includeIfNull: false) -class AudioTrackConfig { - const AudioTrackConfig({this.enableLocalPlayback}); + class AudioTrackConfig { + const AudioTrackConfig( + {this.enableLocalPlayback, this.enableAudioProcessing}); @JsonKey(name: 'enableLocalPlayback') final bool? enableLocalPlayback; + @JsonKey(name: 'enableAudioProcessing') + final bool? enableAudioProcessing; + factory AudioTrackConfig.fromJson(Map<String, dynamic> json) => _$AudioTrackConfigFromJson(json); diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index f2ae0904495..fd5499bc62a 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -43,13 +43,35 @@ audioInputStreams?: MixedAudioStream[]; syncWithLocalMic?: boolean; } - + public class LocalAudioMixerConfiguration +{ + public uint streamCount; + public MixedAudioStream[] audioInputStreams; + public bool syncWithLocalMic +} export class LocalAudioMixerConfiguration { streamCount?: number; audioInputStreams?: MixedAudioStream[]; syncWithLocalMic?: boolean; } -

                + class LocalAudioMixerConfiguration { + const LocalAudioMixerConfiguration( + {this.streamCount, this.audioInputStreams, this.syncWithLocalMic}); + + @JsonKey(name: 'streamCount') + final int? streamCount; + + @JsonKey(name: 'audioInputStreams') + final List<MixedAudioStream>? audioInputStreams; + + @JsonKey(name: 'syncWithLocalMic') + final bool? syncWithLocalMic; + + factory LocalAudioMixerConfiguration.fromJson(Map<String, dynamic> json) => + _$LocalAudioMixerConfigurationFromJson(json); + + Map<String, dynamic> toJson() => _$LocalAudioMixerConfigurationToJson(this); +}

                diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index aba54637086..5de318f4ce7 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -55,14 +55,41 @@ channelId?: string; trackId?: number; } - + public class MixedAudioStream +{ + public AUDIO_SOURCE_TYPE sourceType; + public uint remoteUserUid; + public string channelId; + public uint trackId; + } export class MixedAudioStream { sourceType?: AudioSourceType; remoteUserUid?: number; channelId?: string; trackId?: number; } -

                + class MixedAudioStream { + + const MixedAudioStream( + {this.sourceType, this.remoteUserUid, this.channelId, this.trackId}); + + @JsonKey(name: 'sourceType') + final AudioSourceType? sourceType; + + @JsonKey(name: 'remoteUserUid') + final int? remoteUserUid; + + @JsonKey(name: 'channelId') + final String? channelId; + + @JsonKey(name: 'trackId') + final int? trackId; + + factory MixedAudioStream.fromJson(Map<String, dynamic> json) => + _$MixedAudioStreamFromJson(json); + + Map<String, dynamic> toJson() => _$MixedAudioStreamToJson(this); +}

                diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 57aacbb5425..e75f6b2bebf 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1755,6 +1755,7 @@
              • +
              • @@ -2318,6 +2319,7 @@
              • +
              • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 96fafab5e72..9302ab162cb 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -6858,6 +6858,69 @@ + + + + AudioSourceType + + + + + + + audioSourceMicrophone + + + + + + + audioSourceCustom + + + + + + + audioSourceMediaPlayer + + + + + + + audioSourceLoopbackRecording + + + + + + + audioSourceMixedStream + + + + + + + audioSourceRemoteUser + + + + + + + audioSourceRemoteChannel + + + + + + + audioSourceUnknown + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index b6083d7ce2f..5a28f47c0e6 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -6925,6 +6925,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + From 31eb5733261f7bbf44e0163681f38a1347497dc7 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 18 Nov 2024 15:37:13 +0800 Subject: [PATCH 294/354] section 3 --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 6 +- ..._irtcengine_getfaceshapebeautyoptions.dita | 5 +- ...irtcengine_setexternalmediaprojection.dita | 4 +- ...pi_irtcengine_setfaceshapeareaoptions.dita | 6 +- ..._irtcengine_setfaceshapebeautyoptions.dita | 7 +- ...pi_irtcengine_setlocalrendertargetfps.dita | 5 +- ...i_irtcengine_setremoterendertargetfps.dita | 4 +- .../API/class_faceshapebeautyoptions.dita | 25 +++- dita/RTC-NG/API/rtc_api_data_type.dita | 4 + .../config/keys-rtc-ng-api-flutter.ditamap | 119 ++++++++++++++++++ .../config/keys-rtc-ng-api-unity.ditamap | 119 ++++++++++++++++++ 11 files changed, 288 insertions(+), 16 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 4a245a17182..18aef54df6b 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -23,12 +23,14 @@ shapeArea: FaceShapeArea, type?: MediaSourceType ): FaceShapeAreaOptions; - + public abstract int GetFaceShapeAreaOptions(FACE_SHAPE_AREA shapeArea, ref FaceShapeAreaOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); abstract getFaceShapeAreaOptions( shapeArea: FaceShapeArea, type?: MediaSourceType ): FaceShapeAreaOptions; -

                + Future<FaceShapeAreaOptions> getFaceShapeAreaOptions( + {required FaceShapeArea shapeArea, + MediaSourceType type = MediaSourceType.primaryCameraSource});

                diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 33a4b7f5526..a2175d7b292 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -22,11 +22,12 @@ abstract getFaceShapeBeautyOptions( type?: MediaSourceType ): FaceShapeBeautyOptions; - + public abstract int GetFaceShapeBeautyOptions(ref FaceShapeBeautyOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); abstract getFaceShapeBeautyOptions( type?: MediaSourceType ): FaceShapeBeautyOptions; -

                + Future<FaceShapeBeautyOptions> getFaceShapeBeautyOptions( + {MediaSourceType type = MediaSourceType.primaryCameraSource});

                diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index 42910d71c88..f1fa41633c8 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -19,9 +19,9 @@ virtual int setExternalMediaProjection(void* mediaProjection) = 0; - + public abstract int SetExternalMediaProjection(IntPtr mediaProjection); abstract setExternalMediaProjection(mediaProjection: any): number; -

                + Future<void> setExternalMediaProjection(int mediaProjection);

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index 60422c14037..5556cf4e056 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -23,12 +23,14 @@ options: FaceShapeAreaOptions, type?: MediaSourceType ): number; - + public abstract int SetFaceShapeAreaOptions(FaceShapeAreaOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); abstract setFaceShapeAreaOptions( options: FaceShapeAreaOptions, type?: MediaSourceType ): number; -

                + Future<void> setFaceShapeAreaOptions( + {required FaceShapeAreaOptions options, + MediaSourceType type = MediaSourceType.primaryCameraSource});

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 6672598b421..1da9806e220 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -24,13 +24,16 @@ options: FaceShapeBeautyOptions, type?: MediaSourceType ): number; - + public abstract int SetFaceShapeBeautyOptions(bool enabled, FaceShapeBeautyOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); abstract setFaceShapeBeautyOptions( enabled: boolean, options: FaceShapeBeautyOptions, type?: MediaSourceType ): number; -

                + Future<void> setFaceShapeBeautyOptions( + {required bool enabled, + required FaceShapeBeautyOptions options, + MediaSourceType type = MediaSourceType.primaryCameraSource});

                diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index 8d93088a195..50bbbbb5c2b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -23,12 +23,13 @@ targetFps:(int)targetFps; sourceType: VideoSourceType, targetFps: number ): number; - + public abstract int SetLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps); abstract setLocalRenderTargetFps( sourceType: VideoSourceType, targetFps: number ): number; -

                + Future<void> setLocalRenderTargetFps( + {required VideoSourceType sourceType, required int targetFps});

                diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita index da37e4375ef..f0426731116 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -19,9 +19,9 @@ virtual int setRemoteRenderTargetFps(int targetFps) = 0; abstract setRemoteRenderTargetFps(targetFps: number): number; - + public abstract int SetRemoteRenderTargetFps(int targetFps); abstract setRemoteRenderTargetFps(targetFps: number): number; -

                + Future<void> setRemoteRenderTargetFps(int targetFps);

                diff --git a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita index 457ee8b7d77..1ce6a2174d2 100644 --- a/dita/RTC-NG/API/class_faceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/class_faceshapebeautyoptions.dita @@ -37,12 +37,33 @@ shapeStyle?: FaceShapeBeautyStyle; styleIntensity?: number; } - + public class FaceShapeBeautyOptions + { + public FACE_SHAPE_BEAUTY_STYLE shapeStyle; + + public int styleIntensity; + } export class FaceShapeBeautyOptions { shapeStyle?: FaceShapeBeautyStyle; styleIntensity?: number; } - + +class FaceShapeBeautyOptions { + + const FaceShapeBeautyOptions({this.shapeStyle, this.styleIntensity}); + + @JsonKey(name: 'shapeStyle') + final FaceShapeBeautyStyle? shapeStyle; + + @JsonKey(name: 'styleIntensity') + final int? styleIntensity; + + factory FaceShapeBeautyOptions.fromJson(Map<String, dynamic> json) => + _$FaceShapeBeautyOptionsFromJson(json); + + Map<String, dynamic> toJson() => _$FaceShapeBeautyOptionsToJson(this); +} +

                diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index e75f6b2bebf..42ebaede28d 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -1787,6 +1787,8 @@
              • +
              • +
              • @@ -2350,6 +2352,8 @@
              • +
              • +
              • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 9302ab162cb..7ccc1b456ad 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -8195,6 +8195,125 @@ + + + + FaceShapeArea + + + + + + + faceShapeAreaNone + + + + + + + faceShapeAreaHeadscale + + + + + + + faceShapeAreaForehead + + + + + + + faceShapeAreaFacecontour + + + + + + + faceShapeAreaFacelength + + + + + + + faceShapeAreaFacewidth + + + + + + + faceShapeAreaCheekbone + + + + + + + faceShapeAreaCheek + + + + + + + faceShapeAreaChin + + + + + + + faceShapeAreaEyescale + + + + + + + faceShapeAreaNoselength + + + + + + + faceShapeAreaNosewidth + + + + + + + faceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + faceShapeBeautyStyleFemale + + + + + + + faceShapeBeautyStyleMale + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 5a28f47c0e6..b28c12b0fb9 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -8619,6 +8619,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + From e8ff3005cf0dc6af341218c719caa78b44356979 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 18 Nov 2024 15:41:14 +0800 Subject: [PATCH 295/354] Electron/RN: proto 2 --- ...api_irtcengine_setfiltereffectoptions.dita | 12 ++- .../API/api_irtcengine_takesnapshot2.dita | 4 +- .../API/api_irtcengineex_takesnapshotex2.dita | 12 ++- .../RTC-NG/API/class_filtereffectoptions.dita | 9 +- .../API/class_mediarecorderconfiguration.dita | 38 ++++---- dita/RTC-NG/API/class_recorderstreaminfo.dita | 18 ++-- dita/RTC-NG/API/class_snapshotconfig.dita | 10 +- dita/RTC-NG/API/rtc_api_data_type.dita | 28 +++++- dita/RTC-NG/RTC_NG_API_Electron.ditamap | 2 + dita/RTC-NG/RTC_NG_API_RN.ditamap | 2 + .../config/keys-rtc-ng-api-electron.ditamap | 93 ++++++++++++++++--- dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 51 +++++++++- .../config/keys-rtc-ng-links-electron.ditamap | 7 ++ .../config/keys-rtc-ng-links-rn.ditamap | 7 ++ 14 files changed, 234 insertions(+), 59 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 7818a497c38..1fdae57ce9e 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -19,9 +19,17 @@ - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + abstract setFilterEffectOptions( + enabled: boolean, + options: FilterEffectOptions, + type?: MediaSourceType + ): number; public abstract int SetFilterEffectOptions(bool enabled, FilterEffectOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); - + abstract setFilterEffectOptions( + enabled: boolean, + options: FilterEffectOptions, + type?: MediaSourceType + ): number; Future<void> setFilterEffectOptions( {required bool enabled, required FilterEffectOptions options, diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index f06e7380911..7ec49889a31 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -18,9 +18,9 @@ - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; - + abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; public abstract int TakeSnapshot(uint uid, SnapshotConfig config); - + abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; Future<void> takeSnapshotWithConfig( {required int uid, required SnapshotConfig config});

                diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index b5fe53ae9ed..9bc3bb1ce81 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -18,9 +18,17 @@ - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; - + abstract takeSnapshotWithConfigEx( + connection: RtcConnection, + uid: number, + config: SnapshotConfig + ): number; public abstract int TakeSnapshotEx(RtcConnection connection, uint uid, SnapshotConfig config); - + abstract takeSnapshotWithConfigEx( + connection: RtcConnection, + uid: number, + config: SnapshotConfig + ): number; Future<void> takeSnapshotWithConfigEx( {required RtcConnection connection, required int uid, diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index 83e3c8ec375..de04fa8ef07 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -24,8 +24,15 @@ FilterEffectOptions() : path(OPTIONAL_NULLPTR), strength(0.5) {} }; - + export class FilterEffectOptions { + path?: string; + strength?: number; +} + export class FilterEffectOptions { + path?: string; + strength?: number; +}

                diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 09476438c5d..d636807b823 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -138,17 +138,14 @@ struct FMediaRecorderConfiguration int recorderInfoUpdateInterval; };
                export class MediaRecorderConfiguration { - - storagePath?: string; - - containerFormat?: MediaRecorderContainerFormat; - - streamType?: MediaRecorderStreamType; - - maxDurationMs?: number; - - recorderInfoUpdateInterval?: number; -} + recorderInfoUpdateInterval?: number; + width?: number; + height?: number; + fps?: number; + sample_rate?: number; + channel_num?: number; + videoSourceType?: VideoSourceType; + }
                public struct MediaRecorderConfiguration { public string storagePath; public MediaRecorderContainerFormat containerFormat; @@ -157,17 +154,14 @@ struct FMediaRecorderConfiguration public int recorderInfoUpdateInterval; }; export class MediaRecorderConfiguration { - - storagePath?: string; - - containerFormat?: MediaRecorderContainerFormat; - - streamType?: MediaRecorderStreamType; - - maxDurationMs?: number; - - recorderInfoUpdateInterval?: number; -} + recorderInfoUpdateInterval?: number; + width?: number; + height?: number; + fps?: number; + sample_rate?: number; + channel_num?: number; + videoSourceType?: VideoSourceType; + }
                class MediaRecorderConfiguration { const MediaRecorderConfiguration( diff --git a/dita/RTC-NG/API/class_recorderstreaminfo.dita b/dita/RTC-NG/API/class_recorderstreaminfo.dita index 5438c358061..7448a0fc74e 100644 --- a/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -50,20 +50,22 @@ struct FRecorderStreamInfo { int64 uid; }; - export class RecorderStreamInfo { - channelId?: string; - uid?: number; -} + RecorderStreamInfo { + channelId?: string; + uid?: number; + type?: RecorderStreamType; + } public class RecorderStreamInfo { public string channelId; public uint uid; }; - export class RecorderStreamInfo { - channelId?: string; - uid?: number; -} + RecorderStreamInfo { + channelId?: string; + uid?: number; + type?: RecorderStreamType; + } @JsonSerializable(explicitToJson: true, includeIfNull: false) class RecorderStreamInfo { const RecorderStreamInfo({this.channelId, this.uid}); diff --git a/dita/RTC-NG/API/class_snapshotconfig.dita b/dita/RTC-NG/API/class_snapshotconfig.dita index 401653f3ae3..adfdd759df4 100644 --- a/dita/RTC-NG/API/class_snapshotconfig.dita +++ b/dita/RTC-NG/API/class_snapshotconfig.dita @@ -22,9 +22,15 @@ media::base::VIDEO_MODULE_POSITION position; SnapshotConfig() :filePath(NULL), position(media::base::POSITION_PRE_ENCODER) {} }; - + export class SnapshotConfig { + filePath?: string; + position?: VideoModulePosition; +} - + export class SnapshotConfig { + filePath?: string; + position?: VideoModulePosition; +}

                diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 57aacbb5425..812cc74589f 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -860,6 +860,9 @@
              • +
              • +
              • +
              • @@ -873,6 +876,7 @@
              • +
              • @@ -882,6 +886,7 @@
              • +
              • @@ -916,9 +921,10 @@
              • +
              • -
              • +
              • @@ -979,6 +985,9 @@
              • +
              • +
              • +
              • @@ -992,6 +1001,7 @@
              • +
              • @@ -1001,6 +1011,7 @@
              • +
              • @@ -1037,9 +1048,10 @@
              • +
              • -
              • +
              • @@ -2039,6 +2051,7 @@
              • +
              • @@ -2067,6 +2080,8 @@
              • +
              • +
              • @@ -2110,11 +2125,11 @@
              • +
              • -
              • @@ -2148,6 +2163,7 @@
              • +
              • @@ -2178,6 +2194,7 @@
              • +
              • @@ -2208,6 +2225,8 @@
              • +
              • +
              • @@ -2250,11 +2269,11 @@
              • +
              • -
              • @@ -2288,6 +2307,7 @@
              • +
              • diff --git a/dita/RTC-NG/RTC_NG_API_Electron.ditamap b/dita/RTC-NG/RTC_NG_API_Electron.ditamap index 6f7040b917f..0ff17a3da87 100644 --- a/dita/RTC-NG/RTC_NG_API_Electron.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Electron.ditamap @@ -296,7 +296,9 @@ + + diff --git a/dita/RTC-NG/RTC_NG_API_RN.ditamap b/dita/RTC-NG/RTC_NG_API_RN.ditamap index ef80875541a..895a3e8d860 100644 --- a/dita/RTC-NG/RTC_NG_API_RN.ditamap +++ b/dita/RTC-NG/RTC_NG_API_RN.ditamap @@ -293,7 +293,9 @@ + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index b5f30cfe27b..89ef13dbb72 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -1108,6 +1108,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1487,6 +1501,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -3531,6 +3552,13 @@ + + + + takeSnapshotWithConfig + + + @@ -5242,20 +5270,27 @@ - - - - SpatialAudioParams - - - - - - - SpatialAudioZone - - - + + + + SnapshotConfig + + + + + + + SpatialAudioParams + + + + + + + SpatialAudioZone + + + @@ -9304,6 +9339,13 @@ + + + + MediaDeviceStatePluggedIn + + + @@ -10452,6 +10494,27 @@ + + + + RecorderStreamType + + + + + + + Rtc + + + + + + + Preview + + + @@ -11194,7 +11257,7 @@ - + VideoDenoiserLevelStrength diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index c24778205cf..58a1c6bbf10 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -1529,6 +1529,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -3524,6 +3531,13 @@ + + + + takeSnapshotWithConfig + + + @@ -5201,6 +5215,13 @@ SimulcastStreamConfig + + + + + SnapshotConfig + + @@ -9285,6 +9306,13 @@ + + + + MediaDeviceStatePluggedIn + + + @@ -10440,6 +10468,27 @@ + + + + RecorderStreamType + + + + + + + Rtc + + + + + + + Preview + + + @@ -11175,7 +11224,7 @@ - + VideoDenoiserLevelStrength diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-electron.ditamap index 1479630c116..69d62307cc2 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-electron.ditamap @@ -53,6 +53,13 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-rn.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-rn.ditamap index 834db554074..8a7050c9326 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-rn.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-rn.ditamap @@ -67,6 +67,13 @@ + From 297eefec1579397d61e4b218739ed6d38c8fcb44 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 18 Nov 2024 15:44:13 +0800 Subject: [PATCH 296/354] add props for faceshape --- dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 1da9806e220..9071f5b2ba4 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -42,7 +42,7 @@
                v4.5.0
                -

                调用该方法可对人脸各部位进行修饰,使用预设的参数一次性实现瘦脸、大眼、瘦鼻等微整形效果,支持微调整体的修饰力度,详见

                +

                调用该方法可对人脸各部位进行修饰,使用预设的参数一次性实现瘦脸、大眼、瘦鼻等微整形效果,支持微调整体的修饰力度。详见

                该方法和 均可用于设置美型效果选项,区别在于该方法支持指定应用美型效果的媒体源。

                美型属于增值服务,计费方式详见 From 13491110ffe5e4138b9bcfcb174173f96bce9592 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 18 Nov 2024 15:47:41 +0800 Subject: [PATCH 297/354] add proto --- dita/RTC-NG/API/class_snapshotconfig.dita | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/class_snapshotconfig.dita b/dita/RTC-NG/API/class_snapshotconfig.dita index adfdd759df4..8a9b15ddbb7 100644 --- a/dita/RTC-NG/API/class_snapshotconfig.dita +++ b/dita/RTC-NG/API/class_snapshotconfig.dita @@ -26,12 +26,30 @@ filePath?: string; position?: VideoModulePosition; }
                - + public class SnapshotConfig + { + public string filePath; + + public VIDEO_MODULE_POSITION position; + } export class SnapshotConfig { filePath?: string; position?: VideoModulePosition; } - + class SnapshotConfig { + const SnapshotConfig({this.filePath, this.position}); + + @JsonKey(name: 'filePath') + final String? filePath; + + @JsonKey(name: 'position') + final VideoModulePosition? position; + + factory SnapshotConfig.fromJson(Map<String, dynamic> json) => + _$SnapshotConfigFromJson(json); + + Map<String, dynamic> toJson() => _$SnapshotConfigToJson(this); +}

                From 2aaa70a410e8e5812c0573136d877e9ad6bd9993 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 19 Nov 2024 12:24:09 +0800 Subject: [PATCH 298/354] add bp keys and prototype --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 5 +- ..._irtcengine_getfaceshapebeautyoptions.dita | 5 +- ...pi_irtcengine_setfaceshapeareaoptions.dita | 5 +- ..._irtcengine_setfaceshapebeautyoptions.dita | 5 +- ...api_irtcengine_setfiltereffectoptions.dita | 5 +- ...pi_irtcengine_setlocalrendertargetfps.dita | 5 +- ...irtcengine_setlowlightenhanceoptions2.dita | 5 +- ...i_irtcengine_setremoterendertargetfps.dita | 5 +- ...pi_irtcengine_setvideodenoiseroptions.dita | 8 +- ...i_irtcengine_setvideodenoiseroptions2.dita | 5 +- .../api_irtcengine_startlocalaudiomixer.dita | 5 +- .../api_irtcengine_stoplocalaudiomixer.dita | 5 +- .../API/api_irtcengine_takesnapshot2.dita | 7 +- ...ne_updatelocalaudiomixerconfiguration.dita | 5 +- .../API/api_irtcengineex_takesnapshotex2.dita | 5 +- .../API/class_faceshapeareaoptions.dita | 21 +- .../API/class_faceshapebeautyoptions.dita | 21 +- .../RTC-NG/API/class_filtereffectoptions.dita | 18 +- .../class_localaudiomixerconfiguration.dita | 16 +- .../API/class_lowlightenhanceoptions.dita | 35 +- dita/RTC-NG/API/class_mixedaudiostream.dita | 20 +- dita/RTC-NG/API/class_snapshotconfig.dita | 17 +- .../API/class_videodenoiseroptions.dita | 37 +- .../config/keys-rtc-ng-api-blueprint.ditamap | 330 +++++++++++++++++- .../config/keys-rtc-ng-api-unreal.ditamap | 4 +- 25 files changed, 490 insertions(+), 109 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 18aef54df6b..98c26e8b8c0 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -18,7 +18,8 @@ - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeAreaOptions(_:sourceType:)); virtual int getFaceShapeAreaOptions(agora::rtc::FaceShapeAreaOptions::FACE_SHAPE_AREA shapeArea, FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int GetFaceShapeAreaOptions(EUABT_FACE_SHAPE_AREA shapeArea, FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract getFaceShapeAreaOptions( shapeArea: FaceShapeArea, type?: MediaSourceType @@ -48,7 +49,7 @@
                调用时机

                请在 之后调用该方法。

                -
                +
                调用限制

                无。

                diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index a2175d7b292..114a8fffaef 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -18,7 +18,8 @@ - (AgoraFaceShapeBeautyOptions * _Nullable)getFaceShapeBeautyOptions:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeBeautyOptions(_:)); virtual int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int GetFaceShapeBeautyOptions(FUABT_FaceShapeBeautyOptions & options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract getFaceShapeBeautyOptions( type?: MediaSourceType ): FaceShapeBeautyOptions; @@ -45,7 +46,7 @@
                调用时机

                请在 之后调用该方法。

                -
                +
                调用限制

                无。

                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index 5556cf4e056..89cb931c2a2 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -18,7 +18,8 @@ - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetFaceShapeAreaOptions(const FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract setFaceShapeAreaOptions( options: FaceShapeAreaOptions, type?: MediaSourceType @@ -46,7 +47,7 @@
                调用时机

                请在 之后调用该方法。

                -
                +
                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index 9071f5b2ba4..a682bf28f19 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -18,7 +18,8 @@ - (int)setFaceShapeBeautyOptions:(BOOL)enable options:(AgoraFaceShapeBeautyOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeBeautyOptions(_:options:sourceType:)); virtual int setFaceShapeBeautyOptions(bool enabled, const FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetFaceShapeBeautyOptions(bool enabled, const FUABT_FaceShapeBeautyOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract setFaceShapeBeautyOptions( enabled: boolean, options: FaceShapeBeautyOptions, @@ -49,7 +50,7 @@
                调用时机

                请在 之后调用该方法。

                -
                +
                调用限制
                  diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 1fdae57ce9e..9b76ea0611f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -18,7 +18,8 @@ - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetFilterEffectOptions(bool enabled, const FUABT_FilterEffectOptions & options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract setFilterEffectOptions( enabled: boolean, options: FilterEffectOptions, @@ -47,7 +48,7 @@
                  调用时机

                  请在 之后调用该方法。

                  -
                  +
                调用限制
                  diff --git a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index 50bbbbb5c2b..f8abf9e020f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -18,7 +18,8 @@ targetFps:(int)targetFps; public abstract int setLocalRenderTargetFps(Constants.VideoSourceType sourceType, int targetFps); virtual int setLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLocalRenderTargetFps(EUABT_VIDEO_SOURCE_TYPE sourceType, int targetFps); abstract setLocalRenderTargetFps( sourceType: VideoSourceType, targetFps: number @@ -47,7 +48,7 @@ targetFps:(int)targetFps;
                  调用时机

                  该方法在加入频道前后均可调用。

                  -
                  +
                调用限制

                无。

                diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index db2ac1fcb35..5fdad8974bf 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -17,8 +17,9 @@ boolean enabled, LowLightEnhanceOptions options, Constants.MediaSourceType sourceType); - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:sourceType:)); - - + virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); diff --git a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita index f0426731116..fc6b677c86b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita +++ b/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -17,7 +17,8 @@ - (int)setRemoteRenderTargetFps:(int)targetFps; virtual int setRemoteRenderTargetFps(int targetFps) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetRemoteRenderTargetFps(int targetFps); abstract setRemoteRenderTargetFps(targetFps: number): number; public abstract int SetRemoteRenderTargetFps(int targetFps); abstract setRemoteRenderTargetFps(targetFps: number): number; @@ -39,7 +40,7 @@
                调用时机

                该方法在加入频道前后均可调用。

                -
                +
                调用限制

                无。

                diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index ceb120c42c0..eb1ead83b89 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -19,8 +19,8 @@ - (int)setVideoDenoiserOptions:(BOOL)enable options:(AgoraVideoDenoiserOptions* _Nullable)options NS_SWIFT_NAME(setVideoDenoiserOptions(_:options:)); virtual int setVideoDenoiserOptions(bool enabled, const VideoDenoiserOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetVideoDenoiserOptions(bool enabled, const FVideoDenoiserOptions& options, EMEDIA_SOURCE_TYPE type); + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setVideoDenoiserOptions( enabled: boolean, options: VideoDenoiserOptions, @@ -56,7 +56,7 @@
                调用时机

                请在 后调用该方法。

                -
                +
                调用限制
                  @@ -71,7 +71,7 @@ enabled enable 是否开启视频降噪功能: - +
                  • : 开启视频降噪功能。
                  • :(默认)关闭视频降噪功能。
                  • diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita index 5679567d32d..bbe07c49625 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita @@ -17,8 +17,9 @@ boolean enabled, VideoDenoiserOptions options, Constants.MediaSourceType sourceType); - (int)setVideoDenoiserOptions:(BOOL)enable options:(AgoraVideoDenoiserOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setVideoDenoiserOptions(_:options:sourceType:)); - - + virtual int setVideoDenoiserOptions(bool enabled, const VideoDenoiserOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 5a2d42e09e2..bca1600974f 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -17,7 +17,8 @@ - (int)startLocalAudioMixer:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(startLocalAudioMixer(_:)); virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int StartLocalAudioMixer(const FUABT_LocalAudioMixerConfiguration& config); abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; public abstract int StartLocalAudioMixer(LocalAudioMixerConfiguration config); abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; @@ -47,7 +48,7 @@
                    调用时机

                    该方法在加入频道前后均可调用。

                    -
                    +
                调用限制

                为了保证音频质量,建议参与本地合流的音频流数量不超过 10 个。

                diff --git a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index c97fe2dea37..d9e10fff443 100644 --- a/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -17,7 +17,8 @@ - (int)stopLocalAudioMixer NS_SWIFT_NAME(stopLocalAudioMixer()); virtual int stopLocalAudioMixer() = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int StopLocalAudioMixer(); abstract stopLocalAudioMixer(): number; public abstract int StopLocalAudioMixer(); abstract stopLocalAudioMixer(): number; @@ -35,7 +36,7 @@
                调用时机

                该方法需要在 之后调用。

                -
                +
                调用限制

                无。

                diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index 7ec49889a31..fedaa9b656d 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -17,7 +17,8 @@ - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int TakeSnapshot(int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; public abstract int TakeSnapshot(uint uid, SnapshotConfig config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; @@ -31,10 +32,10 @@
                调用时机

                该方法需要在加入频道后调用。

                -
                +
                调用限制 -
                  +
                  • 该方法是异步操作,调用返回时 SDK 并没有真正获取截图。
                  • 调用该方法返回时 SDK 并没有真正获取截图。
                  • 该方法用于本地视频截图时,是对 中指定发布的视频流进行截图。
                  • diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index bb3fb8b2761..106c8d301ee 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -17,7 +17,8 @@ - (int)updateLocalAudioMixerConfiguration:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(updateLocalAudioMixerConfiguration(_:)); virtual int updateLocalAudioMixerConfiguration(const LocalAudioMixerConfiguration& config) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int UpdateLocalAudioMixerConfiguration(const FUABT_LocalAudioMixerConfiguration& config); abstract updateLocalAudioMixerConfiguration( config: LocalAudioMixerConfiguration ): number; @@ -40,7 +41,7 @@
                    调用时机

                    该方法需要在 之后调用。

                    -
                    +
                调用限制
                diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index 9bc3bb1ce81..ac4bd3823d5 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -17,7 +17,8 @@ - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int TakeSnapshotEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfigEx( connection: RtcConnection, uid: number, @@ -39,7 +40,7 @@
                调用时机

                该方法需要在 后调用。

                -
                +
                - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_filtereffectoptions.dita b/dita/RTC-NG/API/class_filtereffectoptions.dita index de04fa8ef07..c83bb8de808 100644 --- a/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -19,11 +19,23 @@ struct FilterEffectOptions { const char * path; float strength; - + FilterEffectOptions(const char * lut3dPath, float filterStrength) : path(lut3dPath), strength(filterStrength) {} FilterEffectOptions() : path(OPTIONAL_NULLPTR), strength(0.5) {} }; - + USTRUCT(BlueprintType) +struct FUABT_FilterEffectOptions { + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString path; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + float strength = 0.5; +}; + export class FilterEffectOptions { path?: string; strength?: number; @@ -66,4 +78,4 @@ LUT_3D_SIZE 32
                - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index fd5499bc62a..9f5ae20307c 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -37,7 +37,19 @@ bool syncWithLocalMic; LocalAudioMixerConfiguration() : streamCount(0), syncWithLocalMic(true) {} };
                - + USTRUCT(BlueprintType) +struct FUABT_LocalAudioMixerConfiguration { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + TArray sourceStreams; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + bool syncWithLocalMic; +}; export class LocalAudioMixerConfiguration { streamCount?: number; audioInputStreams?: MixedAudioStream[]; @@ -95,7 +107,7 @@ syncWithLocalMic - 合流后的音频流是否使用本地麦克风采集的音频帧时间戳: + 合流后的音频流是否使用本地麦克风采集的音频帧时间戳:
                • :(默认)使用本地麦克风采集的音频帧时间戳。如果要所有本地采集的音频流保持同步,你可以将参数设置为该值。
                • :不使用本地麦克风采集的音频帧时间戳,SDK 会采用合流的音频帧被构建时的时间戳。
                • diff --git a/dita/RTC-NG/API/class_lowlightenhanceoptions.dita b/dita/RTC-NG/API/class_lowlightenhanceoptions.dita index 90074b48bd5..2ba954f9884 100644 --- a/dita/RTC-NG/API/class_lowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/class_lowlightenhanceoptions.dita @@ -49,27 +49,16 @@ }; USTRUCT(BlueprintType) -struct FLowlightEnhanceOptions +struct FUABT_LowlightEnhanceOptions { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|LowlightEnhanceOptions") - ELOW_LIGHT_ENHANCE_MODE mode = ELOW_LIGHT_ENHANCE_MODE::LOW_LIGHT_ENHANCE_AUTO; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|LowlightEnhanceOptions") - ELOW_LIGHT_ENHANCE_LEVEL level = ELOW_LIGHT_ENHANCE_LEVEL::LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY; - FLowlightEnhanceOptions(){} - FLowlightEnhanceOptions(const agora::rtc::LowlightEnhanceOptions & AgoraData){ - mode = static_cast<ELOW_LIGHT_ENHANCE_MODE>(AgoraData.mode); - level = static_cast<ELOW_LIGHT_ENHANCE_LEVEL>(AgoraData.level); - } - agora::rtc::LowlightEnhanceOptions CreateAgoraData() const { - agora::rtc::LowlightEnhanceOptions AgoraData; - AgoraData.mode = static_cast<agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_MODE>(mode); - AgoraData.level = static_cast<agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_LEVEL>(level); - return AgoraData; - } - void FreeAgoraData(agora::rtc::LowlightEnhanceOptions& AgoraData) const { - } + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_LOW_LIGHT_ENHANCE_MODE mode = EUABT_LOW_LIGHT_ENHANCE_MODE::LOW_LIGHT_ENHANCE_AUTO; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_LOW_LIGHT_ENHANCE_LEVEL level = EUABT_LOW_LIGHT_ENHANCE_LEVEL::LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY; }; public class LowlightEnhanceOptions { @@ -89,15 +78,15 @@ public: } }; export class LowlightEnhanceOptions { - + mode?: LowLightEnhanceMode; - + level?: LowLightEnhanceLevel; } export class LowlightEnhanceOptions { - + mode?: LowLightEnhanceMode; - + level?: LowLightEnhanceLevel; } class LowlightEnhanceOptions { @@ -114,7 +103,7 @@ public: _$LowlightEnhanceOptionsFromJson(json); Map<String, dynamic> toJson() => _$LowlightEnhanceOptionsToJson(this); -} +}

                  diff --git a/dita/RTC-NG/API/class_mixedaudiostream.dita b/dita/RTC-NG/API/class_mixedaudiostream.dita index 5de318f4ce7..86e51d272c2 100644 --- a/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -48,7 +48,25 @@ channelId(channel), trackId(track) {} }; - + USTRUCT(BlueprintType) +struct FUABT_MixedAudioStream { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_AUDIO_SOURCE_TYPE sourceType = EUABT_AUDIO_SOURCE_TYPE::AUDIO_SOURCE_MICROPHONE; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + int64 remoteUserUid; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString channelName; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + int64 trackId; +}; export class MixedAudioStream { sourceType?: AudioSourceType; remoteUserUid?: number; diff --git a/dita/RTC-NG/API/class_snapshotconfig.dita b/dita/RTC-NG/API/class_snapshotconfig.dita index 8a9b15ddbb7..3b5139befca 100644 --- a/dita/RTC-NG/API/class_snapshotconfig.dita +++ b/dita/RTC-NG/API/class_snapshotconfig.dita @@ -21,6 +21,19 @@ media::base::VIDEO_MODULE_POSITION position; SnapshotConfig() :filePath(NULL), position(media::base::POSITION_PRE_ENCODER) {} +}; + USTRUCT(BlueprintType) +struct FUABT_SnapshotConfig { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString filePath; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_MODULE_POSITION position = EUABT_VIDEO_MODULE_POSITION::POSITION_PRE_ENCODER; }; export class SnapshotConfig { filePath?: string; @@ -49,7 +62,7 @@ _$SnapshotConfigFromJson(json); Map<String, dynamic> toJson() => _$SnapshotConfigToJson(this); -} +}

                  @@ -65,4 +78,4 @@
                  - \ No newline at end of file + diff --git a/dita/RTC-NG/API/class_videodenoiseroptions.dita b/dita/RTC-NG/API/class_videodenoiseroptions.dita index 22cd91a5b51..fbf71090e43 100644 --- a/dita/RTC-NG/API/class_videodenoiseroptions.dita +++ b/dita/RTC-NG/API/class_videodenoiseroptions.dita @@ -50,32 +50,21 @@ }; USTRUCT(BlueprintType) -struct FVideoDenoiserOptions +struct FUABT_VideoDenoiserOptions { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoDenoiserOptions") - EVIDEO_DENOISER_MODE mode = EVIDEO_DENOISER_MODE::VIDEO_DENOISER_AUTO; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoDenoiserOptions") - EVIDEO_DENOISER_LEVEL level = EVIDEO_DENOISER_LEVEL::VIDEO_DENOISER_LEVEL_HIGH_QUALITY; - FVideoDenoiserOptions(){} - FVideoDenoiserOptions(const agora::rtc::VideoDenoiserOptions & AgoraData){ - mode = static_cast<EVIDEO_DENOISER_MODE>(AgoraData.mode); - level = static_cast<EVIDEO_DENOISER_LEVEL>(AgoraData.level); - } - agora::rtc::VideoDenoiserOptions CreateAgoraData() const { - agora::rtc::VideoDenoiserOptions AgoraData; - AgoraData.mode = static_cast<agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_MODE>(mode); - AgoraData.level = static_cast<agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL>(level); - return AgoraData; - } - void FreeAgoraData(agora::rtc::VideoDenoiserOptions& AgoraData) const { - } + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_DENOISER_MODE mode = EUABT_VIDEO_DENOISER_MODE::VIDEO_DENOISER_AUTO; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_DENOISER_LEVEL level = EUABT_VIDEO_DENOISER_LEVEL ::VIDEO_DENOISER_LEVEL_HIGH_QUALITY; }; export class VideoDenoiserOptions { - + mode?: VideoDenoiserMode; - + level?: VideoDenoiserLevel; } public class VideoDenoiserOptions @@ -96,9 +85,9 @@ public: } }; export class VideoDenoiserOptions { - + mode?: VideoDenoiserMode; - + level?: VideoDenoiserLevel; } class VideoDenoiserOptions { @@ -114,7 +103,7 @@ public: _$VideoDenoiserOptionsFromJson(json); Map<String, dynamic> toJson() => _$VideoDenoiserOptionsToJson(this); -} +}

                  @@ -140,4 +129,4 @@ public:
                  - \ No newline at end of file + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index f16502f2971..0bf38767be9 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -1215,6 +1215,20 @@ + + + + SetLocalRenderTargetFps + + + + + + + SetRemoteRenderTargetFps + + + @@ -1310,6 +1324,20 @@ + + + + GetFaceShapeAreaOptions + + + + + + + GetFaceShapeBeautyOptions + + + @@ -1324,14 +1352,14 @@ - + SetLowlightEnhanceOptions - + SetVideoDenoiserOptions @@ -1345,6 +1373,27 @@ + + + + SetFaceShapeAreaOptions + + + + + + + SetFaceShapeBeautyOptions + + + + + + + SetFilterEffectOptions + + + @@ -2726,6 +2775,29 @@ + + + + + StartLocalAudioMixer + + + + + + + StopLocalAudioMixer + + + + + + + UpdateLocalAudioMixerConfiguration + + + + @@ -5407,6 +5479,41 @@ + + + + FUABT_FaceShapeAreaOptions + + + + + + + FUABT_FaceShapeBeautyOptions + + + + + + + FUABT_FaceShapeAreaOptions + + + + + + + FUABT_FaceShapeBeautyOptions + + + + + + + FUABT_FilterEffectOptions + + + @@ -5533,10 +5640,24 @@ + + + + FUABT_MixedAudioStream + + + + + + + FUABT_LocalAudioMixerConfiguration + + + - FLowlightEnhanceOptions + FUABT_LowlightEnhanceOptions @@ -5676,7 +5797,7 @@ - FRtcConnection + FUABT_RtcConnection @@ -5764,6 +5885,13 @@ + + + + FUABT_SnapshotConfig + + + @@ -5837,7 +5965,7 @@ - FVideoDenoiserOptions + FUABT_VideoDenoiserOptions @@ -5934,6 +6062,69 @@ + + + + EUABT_AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -8860,6 +9051,125 @@ + + + + EUABT_FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + EUABT_FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -9570,7 +9880,7 @@ - ELOW_LIGHT_ENHANCE_LEVEL + EUABT_LOW_LIGHT_ENHANCE_LEVEL @@ -10074,7 +10384,7 @@ - EMEDIA_SOURCE_TYPE + EUABT_MEDIA_SOURCE_TYPE @@ -11817,7 +12127,7 @@ - EVIDEO_DENOISER_LEVEL + EUABT_VIDEO_DENOISER_LEVEL @@ -11845,7 +12155,7 @@ - EVIDEO_SOURCE_TYPE + EUABT_VIDEO_SOURCE_TYPE @@ -12272,7 +12582,7 @@ - EVIDEO_MODULE_POSITION + EUABT_VIDEO_MODULE_POSITION diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index f0b40a28e35..8d60162f161 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -1303,14 +1303,14 @@ - + setLowlightEnhanceOptions - + setVideoDenoiserOptions From 5c6669dda2191121d4f33633aa8e05bcc9e6db1f Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 19 Nov 2024 12:30:02 +0800 Subject: [PATCH 299/354] change key map --- .../API/api_irtcengine_setlowlightenhanceoptions.dita | 10 +++++----- dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index f00c47f8182..fdde3c159e6 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -19,8 +19,8 @@ - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:)); virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetLowlightEnhanceOptions(bool enabled, const FLowlightEnhanceOptions& options, EMEDIA_SOURCE_TYPE type); + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setLowlightEnhanceOptions( enabled: boolean, options: LowlightEnhanceOptions, @@ -48,7 +48,7 @@
                  调用时机

                  请在 后调用该方法。

                  -
                  +
                  调用限制
                    @@ -56,8 +56,8 @@
                  • 暗光增强对设备性能有一定要求。开启暗光增强后,如果设备出现严重发烫等问题,建议你将暗光增强等级修改为消耗性能较少的等级或关闭暗光增强功能。
                  • 如果要实现优先画质 () 的暗光增强,需要先调用 实现视频降噪,具体对应关系如下:
                      -
                    • 暗光增强为自动模式 () 时,视频降噪需设置为优先画质 ()、自动模式 ()。
                    • -
                    • 暗光增强为手动模式 () 时,视频降噪需设置为优先画质 ()、手动模式 ()。
                    • +
                    • 暗光增强为自动模式 () 时,视频降噪需设置为优先画质 ()、自动模式 ()。
                    • +
                    • 暗光增强为手动模式 () 时,视频降噪需设置为优先画质 ()、手动模式 ()。
                  diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index 0bf38767be9..5a9f93b2af3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -1352,14 +1352,14 @@ - + SetLowlightEnhanceOptions - + SetVideoDenoiserOptions diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index 8d60162f161..f0b40a28e35 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -1303,14 +1303,14 @@ - + setLowlightEnhanceOptions - + setVideoDenoiserOptions From e5db5a2d4cc5245f03e28c145a4f8ff0a1e6fed8 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 19 Nov 2024 14:39:24 +0800 Subject: [PATCH 300/354] bp updates --- dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita | 2 +- .../API/api_irtcengineex_takesnapshotex2.dita | 2 +- .../config/keys-rtc-ng-api-blueprint.ditamap | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index fedaa9b656d..4058dfacb7e 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -18,7 +18,7 @@ - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int TakeSnapshot(int64 uid, const FUABT_SnapshotConfig& config); + int TakeSnapshotWithConfig(int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; public abstract int TakeSnapshot(uint uid, SnapshotConfig config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index ac4bd3823d5..19474953c6a 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -18,7 +18,7 @@ - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int TakeSnapshotEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); + int TakeSnapshotWithConfigEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfigEx( connection: RtcConnection, uid: number, diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index 5a9f93b2af3..a2d9887bc22 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -1641,6 +1641,13 @@ + + + + TakeSnapshotWithConfigEx + + + @@ -4090,6 +4097,13 @@ + + + + TakeSnapshotWithConfig + + + From f7a97b3b8695ef12ed0c1b29c31ae68623f4c066 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 19 Nov 2024 17:31:48 +0800 Subject: [PATCH 301/354] add area code for hamonyos --- dita/RTC-NG/API/class_rtcengineconfig.dita | 31 +++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/dita/RTC-NG/API/class_rtcengineconfig.dita b/dita/RTC-NG/API/class_rtcengineconfig.dita index 341c2fdefc7..ab411ecf5cd 100644 --- a/dita/RTC-NG/API/class_rtcengineconfig.dita +++ b/dita/RTC-NG/API/class_rtcengineconfig.dita @@ -18,7 +18,7 @@ public IMediaExtensionObserver mExtensionObserver; public LogConfig mLogConfig; public String mNativeLibPath; - public boolean mDomainLimit; + public boolean mDomainLimit; public void addExtension(String providerName) { mExtensionList.add(providerName); @@ -26,11 +26,12 @@ } export class RtcEngineConfig{ - public mContext:Context | null = null; - public mAppId:string | null = null; - public mEventHandler: IRtcEngineEventHandler | null = null; - public mLogConfig?:LogConfig; -} + public mContext:Context; + public mAppId:string; + public mEventHandler: IRtcEngineEventHandler ; + public mLogConfig?:LogConfig; + public areaCode: Constants.AreaCode = Constants.AreaCode.GLOB; + } __attribute__((visibility("default"))) @interface AgoraRtcEngineConfig: NSObject @property (copy, nonatomic) NSString * _Nullable appId; @@ -70,19 +71,19 @@ struct FRtcEngineContext EAgoraBPuEventHandlerType EventHandlerCreationType = EAgoraBPuEventHandlerType::EventHandler; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FString appId = ""; - - + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") ECHANNEL_PROFILE_TYPE channelProfile = ECHANNEL_PROFILE_TYPE::CHANNEL_PROFILE_LIVE_BROADCASTING; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FString license = ""; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") EAUDIO_SCENARIO_TYPE audioScenario = EAUDIO_SCENARIO_TYPE::AUDIO_SCENARIO_DEFAULT; - - + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FENUMWRAP_AREA_CODE areaCode = EENUMCUSTOM_AREA_CODE::AREA_CODE_GLOB; - + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FLogConfig logConfig; @@ -100,11 +101,11 @@ struct FRtcEngineContext FRtcEngineContext() {} agora::rtc::RtcEngineContext CreateAgoraData() const { agora::rtc::RtcEngineContext AgoraData; - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.appId, this->appId) - + AgoraData.channelProfile = (agora::CHANNEL_PROFILE_TYPE)channelProfile; - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.license, this->license) AgoraData.audioScenario = (agora::rtc::AUDIO_SCENARIO_TYPE)audioScenario; AgoraData.areaCode = areaCode.GetRawValue(); @@ -113,7 +114,7 @@ struct FRtcEngineContext AgoraData.useExternalEglContext = useExternalEglContext; AgoraData.domainLimit = domainLimit; AgoraData.autoRegisterAgoraExtensions = autoRegisterAgoraExtensions; - + return AgoraData; } From f636ee13e07156fea478f7dd9e9bf7798be7ec9b Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 19 Nov 2024 17:43:06 +0800 Subject: [PATCH 302/354] RN: add setExternalRemoteEglContext --- dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita | 2 +- dita/RTC-NG/RTC_NG_API_RN.ditamap | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index aa88692f00d..efa4a2d784b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -20,7 +20,7 @@ public abstract int SetExternalRemoteEglContext(IntPtr eglContext); - + abstract setExternalRemoteEglContext(eglContext: any): number; Future<void> setExternalRemoteEglContext(int eglContext);

                  diff --git a/dita/RTC-NG/RTC_NG_API_RN.ditamap b/dita/RTC-NG/RTC_NG_API_RN.ditamap index 895a3e8d860..ce26af31007 100644 --- a/dita/RTC-NG/RTC_NG_API_RN.ditamap +++ b/dita/RTC-NG/RTC_NG_API_RN.ditamap @@ -389,6 +389,7 @@ + From a88bb65d3526a35e625888b90838219c70af241b Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Tue, 19 Nov 2024 17:53:02 +0800 Subject: [PATCH 303/354] RN/Electron: add color space --- dita/RTC-NG/API/class_externalvideoframe.dita | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index b2de1d3b9ae..4eedcbf5053 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -175,6 +175,7 @@ struct ExternalVideoFrame { alphaStitchMode?: AlphaStitchMode; d3d11Texture2d?: any; textureSliceIndex?: number; + colorSpace?: ColorSpace; } public class ExternalVideoFrame { @@ -220,6 +221,7 @@ struct ExternalVideoFrame { alphaBuffer?: Uint8Array; fillAlphaBuffer?: boolean; alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } @JsonSerializable(explicitToJson: true, includeIfNull: false) class ExternalVideoFrame { From 818d059bcb6fc0fddad48690581c180c11bbd8ae Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 19 Nov 2024 18:08:06 +0800 Subject: [PATCH 304/354] add color space in external video frame --- dita/RTC-NG/API/class_externalvideoframe.dita | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 4eedcbf5053..6460ba4ac78 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -200,6 +200,7 @@ struct ExternalVideoFrame { public ALPHA_STITCH_MODE alphaStitchMode; public IntPtr d3d11Texture2d; public int textureSliceIndex; + public ColorSpace colorSpace; }; export class ExternalVideoFrame { type?: VideoBufferType; @@ -311,6 +312,9 @@ class ExternalVideoFrame { @JsonKey(name: 'textureSliceIndex') final int? textureSliceIndex; + @JsonKey(name: 'colorSpace') + final ColorSpace? colorSpace; + factory ExternalVideoFrame.fromJson(Map<String, dynamic> json) => _$ExternalVideoFrameFromJson(json); From 3a62680e73640c6dfc52bee96766648cbb327b4f Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 19 Nov 2024 18:17:20 +0800 Subject: [PATCH 305/354] more color --- dita/RTC-NG/API/class_externalvideoframe.dita | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 6460ba4ac78..ce670948a22 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -247,7 +247,8 @@ class ExternalVideoFrame { this.fillAlphaBuffer, this.alphaStitchMode, this.d3d11Texture2d, - this.textureSliceIndex}); + this.textureSliceIndex, + this.colorSpace}); @JsonKey(name: 'type') final VideoBufferType? type; From 95fcaa64670aad191ed3e98c76b7ffabf2b7537e Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 20 Nov 2024 11:45:13 +0800 Subject: [PATCH 306/354] bp keys and framework --- ...pi_irtcengine_getfaceshapeareaoptions.dita | 4 ++-- ..._irtcengine_getfaceshapebeautyoptions.dita | 4 ++-- ...irtcengine_setexternalmediaprojection.dita | 4 ++-- ...pi_irtcengine_setfaceshapeareaoptions.dita | 4 ++-- ..._irtcengine_setfaceshapebeautyoptions.dita | 7 ++++--- ...api_irtcengine_setfiltereffectoptions.dita | 2 +- ..._irtcengine_setlowlightenhanceoptions.dita | 2 +- ...pi_irtcengine_setvideodenoiseroptions.dita | 2 +- .../api_irtcengine_startlocalaudiomixer.dita | 2 +- .../API/api_irtcengine_takesnapshot2.dita | 2 +- ...ne_updatelocalaudiomixerconfiguration.dita | 2 +- .../API/api_irtcengineex_takesnapshotex2.dita | 2 +- .../class_localaudiomixerconfiguration.dita | 2 +- dita/RTC-NG/API/rtc_api_data_type_unreal.dita | 19 ++++++++++++++++++- dita/RTC-NG/RTC_NG_API_Blueprint.ditamap | 11 ++++++++++- dita/RTC-NG/RTC_NG_API_Unreal.ditamap | 15 +++++++++++++++ 16 files changed, 63 insertions(+), 21 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index 98c26e8b8c0..ced0500927f 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -19,7 +19,7 @@ - (AgoraFaceShapeAreaOptions * _Nullable)getFaceShapeAreaOptions:(AgoraFaceShapeArea) area sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeAreaOptions(_:sourceType:)); virtual int getFaceShapeAreaOptions(agora::rtc::FaceShapeAreaOptions::FACE_SHAPE_AREA shapeArea, FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int GetFaceShapeAreaOptions(EUABT_FACE_SHAPE_AREA shapeArea, FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + int GetFaceShapeAreaOptions(EUABT_FACE_SHAPE_AREA shapeArea, FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract getFaceShapeAreaOptions( shapeArea: FaceShapeArea, type?: MediaSourceType @@ -81,7 +81,7 @@

                  - + diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 114a8fffaef..7c2c7e6228f 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -19,7 +19,7 @@ - (AgoraFaceShapeBeautyOptions * _Nullable)getFaceShapeBeautyOptions:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(getFaceShapeBeautyOptions(_:)); virtual int getFaceShapeBeautyOptions(FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int GetFaceShapeBeautyOptions(FUABT_FaceShapeBeautyOptions & options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + int GetFaceShapeBeautyOptions(FUABT_FaceShapeBeautyOptions & options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE);
                  abstract getFaceShapeBeautyOptions( type?: MediaSourceType ): FaceShapeBeautyOptions; @@ -54,7 +54,7 @@
                  参数 - + diff --git a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index f1fa41633c8..cd4a395301e 100644 --- a/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -30,7 +30,7 @@
                  v4.5.0
                  - 该方法仅适用于 Android。 + 该方法仅适用于 Android。

                  成功调用该方法后,你设置的外部 MediaProjection 会替换掉 SDK 申请的 MediaProjection 采集屏幕视频流。

                  当停止屏幕共享或销毁 时,SDK 会自动释放 MediaProjection。

                  @@ -44,7 +44,7 @@
                  调用时机

                  该方法需要在 之前调用。

                  -
                  +
                  调用限制

                  在调用该方法前,必须先申请 MediaProjection 权限。

                  diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index 89cb931c2a2..bf5bae3c79b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -19,7 +19,7 @@ - (int)setFaceShapeAreaOptions:(AgoraFaceShapeAreaOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeAreaOptions(_:sourceType:)); virtual int setFaceShapeAreaOptions(const FaceShapeAreaOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetFaceShapeAreaOptions(const FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + int SetFaceShapeAreaOptions(const FUABT_FaceShapeAreaOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract setFaceShapeAreaOptions( options: FaceShapeAreaOptions, type?: MediaSourceType @@ -72,7 +72,7 @@
                • -4:当前设备不支持该功能,可能的原因有:
                  • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
                  • -
                  • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
                  • +
                  • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
                diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita index a682bf28f19..3c4361b5af4 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions.dita @@ -19,7 +19,7 @@ - (int)setFaceShapeBeautyOptions:(BOOL)enable options:(AgoraFaceShapeBeautyOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFaceShapeBeautyOptions(_:options:sourceType:)); virtual int setFaceShapeBeautyOptions(bool enabled, const FaceShapeBeautyOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetFaceShapeBeautyOptions(bool enabled, const FUABT_FaceShapeBeautyOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + int SetFaceShapeBeautyOptions(bool enabled, const FUABT_FaceShapeBeautyOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE);
                abstract setFaceShapeBeautyOptions( enabled: boolean, options: FaceShapeBeautyOptions, @@ -54,7 +54,8 @@
                调用限制
                  -
                • 该方法仅适用于 Android 4.4 及以上版本。
                • +
                • 该方法仅适用于 Android 4.4 及以上版本。
                • +
                • 在 Android 平台上,该方法仅适用于 Android 4.4 及以上版本。
                • 该方法依赖于视频增强动态库 ,如果删除该动态库会导致无法正常开启该功能。
                • 该功能对设备性能要求较高,调用该方法时 SDK 会自动对当前设备能力进行检查。
                @@ -91,7 +92,7 @@
              • -4:当前设备不支持该功能,可能的原因有:
                • 当前设备能力不满足美颜的使用要求,建议更换性能更高的设备。
                • -
                • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
                • +
                • 当前设备版本低于 Android 4.4,不支持该操作,建议更换设备或升级操作系统。
              diff --git a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index 9b76ea0611f..06521ce2cf5 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -19,7 +19,7 @@ - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetFilterEffectOptions(bool enabled, const FUABT_FilterEffectOptions & options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + int SetFilterEffectOptions(bool enabled, const FUABT_FilterEffectOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); abstract setFilterEffectOptions( enabled: boolean, options: FilterEffectOptions, diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index fdde3c159e6..a0b34f51b37 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -20,7 +20,7 @@ virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setLowlightEnhanceOptions( enabled: boolean, options: LowlightEnhanceOptions, diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index eb1ead83b89..45aaac06357 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -20,7 +20,7 @@ virtual int setVideoDenoiserOptions(bool enabled, const VideoDenoiserOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); + int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setVideoDenoiserOptions( enabled: boolean, options: VideoDenoiserOptions, diff --git a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index bca1600974f..48d75189600 100644 --- a/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -18,7 +18,7 @@ - (int)startLocalAudioMixer:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(startLocalAudioMixer(_:)); virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int StartLocalAudioMixer(const FUABT_LocalAudioMixerConfiguration& config); + int StartLocalAudioMixer(const FUABT_LocalAudioMixerConfiguration& config); abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; public abstract int StartLocalAudioMixer(LocalAudioMixerConfiguration config); abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; diff --git a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index 4058dfacb7e..b16451ca318 100644 --- a/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -18,7 +18,7 @@ - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int TakeSnapshotWithConfig(int64 uid, const FUABT_SnapshotConfig& config); + int TakeSnapshotWithConfig(int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; public abstract int TakeSnapshot(uint uid, SnapshotConfig config); abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; diff --git a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 106c8d301ee..f9f93cea745 100644 --- a/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -18,7 +18,7 @@ - (int)updateLocalAudioMixerConfiguration:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(updateLocalAudioMixerConfiguration(_:)); virtual int updateLocalAudioMixerConfiguration(const LocalAudioMixerConfiguration& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int UpdateLocalAudioMixerConfiguration(const FUABT_LocalAudioMixerConfiguration& config); + int UpdateLocalAudioMixerConfiguration(const FUABT_LocalAudioMixerConfiguration& config); abstract updateLocalAudioMixerConfiguration( config: LocalAudioMixerConfiguration ): number; diff --git a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index 19474953c6a..7381c42a5cc 100644 --- a/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -18,7 +18,7 @@ - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int TakeSnapshotWithConfigEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); + int TakeSnapshotWithConfigEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); abstract takeSnapshotWithConfigEx( connection: RtcConnection, uid: number, diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 9f5ae20307c..358ca225509 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -45,7 +45,7 @@ struct FUABT_LocalAudioMixerConfiguration { public: UPROPERTY(VisibleAnywhere, BlueprintReadWrite) - TArray sourceStreams; + TArray<FUABT_MixedAudioStream> sourceStreams; UPROPERTY(VisibleAnywhere, BlueprintReadWrite) bool syncWithLocalMic; diff --git a/dita/RTC-NG/API/rtc_api_data_type_unreal.dita b/dita/RTC-NG/API/rtc_api_data_type_unreal.dita index 0e4158644e6..3df97a7d0c9 100644 --- a/dita/RTC-NG/API/rtc_api_data_type_unreal.dita +++ b/dita/RTC-NG/API/rtc_api_data_type_unreal.dita @@ -42,6 +42,9 @@
            35. +
            36. +
            37. +
            38. @@ -52,6 +55,7 @@
            39. +
            40. @@ -62,6 +66,7 @@
            41. +
            42. @@ -104,6 +109,7 @@
            43. +
            44. @@ -162,6 +168,9 @@
            45. +
            46. +
            47. +
            48. @@ -224,6 +233,7 @@
            49. +
            50. @@ -275,6 +285,7 @@
            51. +
            52. @@ -305,6 +316,8 @@
            53. +
            54. +
            55. @@ -350,6 +363,7 @@
            56. +
            57. @@ -420,6 +434,7 @@
            58. +
            59. @@ -450,6 +465,8 @@
            60. +
            61. +
            62. @@ -542,4 +559,4 @@ - \ No newline at end of file + diff --git a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap index 9885a2e2e6d..8ece0181db8 100644 --- a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -320,7 +320,9 @@ + + @@ -334,8 +336,13 @@ + + + + + @@ -366,9 +373,11 @@ + + @@ -821,4 +830,4 @@ - \ No newline at end of file + diff --git a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap index 2f4cb93f10e..af0578e010c 100644 --- a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap @@ -210,6 +210,11 @@ + + + + + @@ -316,7 +321,9 @@ + + @@ -330,8 +337,13 @@ + + + + + @@ -362,9 +374,11 @@ + + @@ -396,6 +410,7 @@ + From 22fecc128f17339c44acde1505b6187066f76233 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 20 Nov 2024 11:50:28 +0800 Subject: [PATCH 307/354] shipei --- dita/RTC-NG/API/class_audiotrackconfig.dita | 2 +- dita/RTC-NG/API/class_externalvideoframe.dita | 2 +- dita/RTC-NG/API/class_videoframe.dita | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/class_audiotrackconfig.dita b/dita/RTC-NG/API/class_audiotrackconfig.dita index 7efbc46b1c9..f436dd4ee1e 100644 --- a/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -87,7 +87,7 @@ struct FAudioTrackConfig - + enableAudioProcessing 是否启用音频处理模块:
                diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index ce670948a22..80e5659f261 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -528,7 +528,7 @@ class ExternalVideoFrame { time 传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步。 - + diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 72566fa7917..4d67fedea84 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -889,7 +889,7 @@ class VideoFrame { pixelBuffer 将数据填充到 CVPixelBuffer。 - + colorSpace 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自定义采集、自定义渲染的业务需求进行自定义设置,详见 From 7379badbb62a41b577091ce782068eb9a7b724aa Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 20 Nov 2024 11:56:33 +0800 Subject: [PATCH 308/354] fix --- dita/RTC-NG/API/class_localaudiomixerconfiguration.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index 9f5ae20307c..afbccc7cd27 100644 --- a/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -97,7 +97,7 @@ public:
                <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> - + streamCount 在本地进行合流的音频流数量。 From 731254654401110bd5bbe58a9a34052770f0303a Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 20 Nov 2024 12:06:56 +0800 Subject: [PATCH 309/354] 450 framework --- ...irtcengine_setlowlightenhanceoptions2.dita | 4 - ...i_irtcengine_setvideodenoiseroptions2.dita | 9 +- .../API/class_mediarecorderconfiguration.dita | 87 ++++++++++++++----- dita/RTC-NG/API/class_recorderstreaminfo.dita | 10 ++- dita/RTC-NG/API/rtc_api_overview.dita | 2 +- 5 files changed, 73 insertions(+), 39 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index 5fdad8974bf..d0517612f6e 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -43,10 +43,6 @@ - - type - 媒体资源类型,详见 - diff --git a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita index bbe07c49625..5e0bb5aed26 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions2.dita @@ -17,9 +17,8 @@ boolean enabled, VideoDenoiserOptions options, Constants.MediaSourceType sourceType); - (int)setVideoDenoiserOptions:(BOOL)enable options:(AgoraVideoDenoiserOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setVideoDenoiserOptions(_:options:sourceType:)); - virtual int setVideoDenoiserOptions(bool enabled, const VideoDenoiserOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); + + @@ -45,10 +44,6 @@ - - - - diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index d636807b823..8b389f73709 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -51,15 +51,15 @@ } } export class MediaRecorderConfiguration { - + public storagePath: string; - + public containerFormat: number = AgoraMediaRecorder.CONTAINER_MP4; - + public streamType: number = AgoraMediaRecorder.STREAM_TYPE_BOTH; - + public maxDurationMs: number = 120000; - + public recorderInfoUpdateInterval: number = 0; public constructor(storagePath: string, containerFormat: number, streamType: number, maxDurationMs: number, recorderInfoUpdateInterval: number) { @@ -138,38 +138,59 @@ struct FMediaRecorderConfiguration int recorderInfoUpdateInterval; }; export class MediaRecorderConfiguration { - recorderInfoUpdateInterval?: number; + storagePath?: string; + containerFormat?: MediaRecorderContainerFormat; + streamType?: MediaRecorderStreamType; + maxDurationMs?: number; + recorderInfoUpdateInterval?: number; width?: number; height?: number; fps?: number; sample_rate?: number; channel_num?: number; videoSourceType?: VideoSourceType; - } +} public struct MediaRecorderConfiguration { public string storagePath; public MediaRecorderContainerFormat containerFormat; public MediaRecorderStreamType streamType; public int maxDurationMs; public int recorderInfoUpdateInterval; + public int width; + public int height; + public int fps; + public int sample_rate; + public int channel_num; + public VIDEO_SOURCE_TYPE videoSourceType; }; export class MediaRecorderConfiguration { - recorderInfoUpdateInterval?: number; + storagePath?: string; + containerFormat?: MediaRecorderContainerFormat; + streamType?: MediaRecorderStreamType; + maxDurationMs?: number; + recorderInfoUpdateInterval?: number; width?: number; height?: number; fps?: number; sample_rate?: number; channel_num?: number; videoSourceType?: VideoSourceType; - } - class MediaRecorderConfiguration { - +} + @JsonSerializable(explicitToJson: true, includeIfNull: false) +class MediaRecorderConfiguration { + /// @nodoc const MediaRecorderConfiguration( {this.storagePath, this.containerFormat, this.streamType, this.maxDurationMs, - this.recorderInfoUpdateInterval}); + this.recorderInfoUpdateInterval, + this.width, + this.height, + this.fps, + this.sampleRate, + this.channelNum, + this.videoSourceType}); @JsonKey(name: 'storagePath') final String? storagePath; @@ -186,6 +207,24 @@ struct FMediaRecorderConfiguration @JsonKey(name: 'recorderInfoUpdateInterval') final int? recorderInfoUpdateInterval; + @JsonKey(name: 'width') + final int? width; + + @JsonKey(name: 'height') + final int? height; + + @JsonKey(name: 'fps') + final int? fps; + + @JsonKey(name: 'sample_rate') + final int? sampleRate; + + @JsonKey(name: 'channel_num') + final int? channelNum; + + @JsonKey(name: 'videoSourceType') + final VideoSourceType? videoSourceType; + factory MediaRecorderConfiguration.fromJson(Map<String, dynamic> json) => _$MediaRecorderConfigurationFromJson(json); @@ -233,49 +272,49 @@ struct FMediaRecorderConfiguration recorderInfoUpdateInterval 录制信息更新间隔,单位为毫秒,取值范围为 [1000,10000]。SDK 会根据该值的设置触发 回调,报告更新后的录制信息。 - + width 录制视频的宽度 (px),宽 × 高的最大值不应超过 3840 × 2160。 - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 - + height 录制视频的高度 (px),宽 × 高的最大值不超过 3840 × 2160。 - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 - + fps 录制视频的帧率,最高值不超过 30,如: 5、10、15、24、30 等。 - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 - + sample_rate 录制音频的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 - + channel_num 录制音频的声道数:
                • 1: 单声道
                • 2: 双声道
                - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。
                - + videoSourceType 录制视频源的类型。详见 。 - 该参数仅在 调用 且将 中的 type设置为 时需要传入。 + 该参数仅在 调用 且将 中的 type设置为 时需要传入。 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 diff --git a/dita/RTC-NG/API/class_recorderstreaminfo.dita b/dita/RTC-NG/API/class_recorderstreaminfo.dita index 7448a0fc74e..cd7bade353e 100644 --- a/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -12,9 +12,9 @@ public int recorderStreamType; } export class RecorderStreamInfo { - + public uid: number = 0; - + public channelId: string; public constructor() { this.uid = 0; @@ -59,6 +59,7 @@ struct FRecorderStreamInfo { { public string channelId; public uint uid; + public RecorderStreamType type; }; RecorderStreamInfo { @@ -76,6 +77,9 @@ class RecorderStreamInfo { @JsonKey(name: 'uid') final int? uid; + @JsonKey(name: 'type') + final RecorderStreamType? type; + factory RecorderStreamInfo.fromJson(Map<String, dynamic> json) => _$RecorderStreamInfoFromJson(json); @@ -101,7 +105,7 @@ class RecorderStreamInfo { uid 需录制的用户 ID。 - + type 需录制的视频流类型,详见 diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 080b7c27cf0..85c168b6cc8 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1028,7 +1028,7 @@ - + From f96c0da7788f6cddb77393f06a70f38e33879c2f Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 20 Nov 2024 14:59:00 +0800 Subject: [PATCH 310/354] pr review comment --- .../API/api_irtcengine_getfaceshapeareaoptions.dita | 10 +++++----- .../API/api_irtcengine_getfaceshapebeautyoptions.dita | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita index ced0500927f..b35df05fe13 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapeareaoptions.dita @@ -58,8 +58,8 @@ 参数 - shapeArea - area + area + shapeArea

                美型部位。详见

                美型部位: @@ -92,12 +92,12 @@

                <ph keyref="return-section-title"/> -

                方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

                -
                  +

                  方法成功调用时,返回 对象;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

                  +
                  • 0: 方法调用成功。
                  • < 0: 方法调用失败。详见了解详情和解决建议。
                  -
                    +
                    • 方法调用成功,返回 对象。
                    • 方法调用失败,返回
                diff --git a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita index 7c2c7e6228f..0daf01fefa7 100644 --- a/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_getfaceshapebeautyoptions.dita @@ -66,12 +66,12 @@
                <ph keyref="return-section-title"/> -

                方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

                -
                  +

                  方法成功调用时,返回 对象;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

                  +
                  • 0: 方法调用成功。
                  • < 0: 方法调用失败。详见了解详情和解决建议。
                  -
                    +
                    • 方法调用成功,返回 对象。
                    • 方法调用失败,返回
                From 19f0e7686a0b62a129946054005d23fa3c72dfe1 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 20 Nov 2024 15:11:01 +0800 Subject: [PATCH 311/354] done --- dita/RTC-NG/API/rtc_api_data_type.dita | 6 + dita/RTC-NG/RTC_NG_API_Flutter.ditamap | 20 +- dita/RTC-NG/RTC_NG_API_Unity.ditamap | 24 +- .../config/keys-rtc-ng-api-flutter.ditamap | 205 +++++++++++++++++- .../config/keys-rtc-ng-api-unity.ditamap | 195 ++++++++++++++++- .../config/relations-rtc-ng-api.ditamap | 2 +- 6 files changed, 436 insertions(+), 16 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_data_type.dita b/dita/RTC-NG/API/rtc_api_data_type.dita index 60965d6cede..74be6f71bab 100644 --- a/dita/RTC-NG/API/rtc_api_data_type.dita +++ b/dita/RTC-NG/API/rtc_api_data_type.dita @@ -653,6 +653,8 @@
              • +
              • +
              • @@ -666,6 +668,7 @@
              • +
              • @@ -1112,6 +1115,8 @@
              • +
              • +
              • @@ -1122,6 +1127,7 @@
              • +
              • diff --git a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap index 6a7db2377bf..c6bc5e67d36 100644 --- a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap @@ -303,13 +303,16 @@ - + + + + @@ -322,8 +325,13 @@ + + + + + @@ -362,8 +370,15 @@ + + + + + + + @@ -383,7 +398,8 @@ - + + diff --git a/dita/RTC-NG/RTC_NG_API_Unity.ditamap b/dita/RTC-NG/RTC_NG_API_Unity.ditamap index 1ef6abcd172..21096838852 100644 --- a/dita/RTC-NG/RTC_NG_API_Unity.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unity.ditamap @@ -192,6 +192,11 @@ + + + + + @@ -270,6 +275,7 @@ + @@ -282,13 +288,15 @@ - + + + @@ -296,8 +304,13 @@ + + + + + @@ -349,9 +362,9 @@ - + @@ -361,6 +374,8 @@ + + @@ -383,7 +398,8 @@ - + + @@ -772,4 +788,4 @@ - + \ No newline at end of file diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 7ccc1b456ad..241aac64017 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -1151,6 +1151,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1246,6 +1260,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1281,6 +1309,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1495,6 +1544,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -1581,6 +1637,13 @@ + + + + setExternalMediaProjection + + + @@ -2441,6 +2504,13 @@ + + + + setExternalRemoteEglContext + + + @@ -2500,6 +2570,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -3610,6 +3703,13 @@ + + + + takeSnapshotWithConfig + + + @@ -4728,13 +4828,6 @@ - - - - AudioTrackConfig - - - @@ -4742,6 +4835,13 @@ + + + + AudioTrackConfig + + + @@ -4903,6 +5003,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5015,6 +5136,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5232,6 +5367,13 @@ + + + + SnapshotConfig + + + @@ -5948,6 +6090,13 @@ + + + + preferCompressionAuto + + + @@ -7565,6 +7714,13 @@ + + + + maintainAuto + + + @@ -9077,6 +9233,13 @@ + + + + mediaDeviceStatePluggedIn + + + @@ -10372,6 +10535,27 @@ + + + + RecorderStreamType + + + + + + + rtc + + + + + + + preview + + + @@ -11002,6 +11186,13 @@ + + + + applicationScenarioLiveshow + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index b28c12b0fb9..87987551dcd 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -1089,6 +1089,20 @@ + + + + SetLocalRenderTargetFps + + + + + + + SetRemoteRenderTargetFps + + + @@ -1177,6 +1191,20 @@ + + + + GetFaceShapeAreaOptions + + + + + + + GetFaceShapeBeautyOptions + + + @@ -1219,6 +1247,27 @@ + + + + SetFaceShapeAreaOptions + + + + + + + SetFaceShapeBeautyOptions + + + + + + + SetFilterEffectOptions + + + @@ -1506,7 +1555,14 @@ - TakeSnapshotEx + TakeSnapshotEx [1/2] + + + + + + + TakeSnapshotEx [2/2] @@ -1610,6 +1666,13 @@ + + + + SetExternalMediaProjection + + + @@ -2509,6 +2572,13 @@ + + + + SetExternalRemoteEglContext + + + @@ -2568,6 +2638,29 @@ + + + + + StartLocalAudioMixer + + + + + + + StopLocalAudioMixer + + + + + + + UpdateLocalAudioMixerConfiguration + + + + @@ -3682,7 +3775,14 @@ - TakeSnapshot + TakeSnapshot [1/2] + + + + + + + TakeSnapshot [2/2] @@ -5030,6 +5130,27 @@ ExtensionContext + + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + @@ -5157,6 +5278,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5362,6 +5497,13 @@ + + + + SnapshotConfig + + + @@ -6883,6 +7025,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -7100,6 +7249,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -7926,6 +8082,13 @@ + + + + MAINTAIN_AUTO + + + @@ -9438,6 +9601,13 @@ + + + + MEDIA_DEVICE_STATE_PLUGGED_IN + + + @@ -10880,6 +11050,27 @@ + + + + RecorderStreamType + + + + + + + RTC + + + + + + + PREVIEW + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index a152a9d65d4..7c547436aad 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2539,7 +2539,7 @@ - + From 8d8085e3729521876e9a0b7d61aacc10b31513e4 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 20 Nov 2024 15:44:11 +0800 Subject: [PATCH 312/354] Update class_mediarecorderconfiguration.dita --- dita/RTC-NG/API/class_mediarecorderconfiguration.dita | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index 8b389f73709..1b26d637cfb 100644 --- a/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -178,7 +178,7 @@ struct FMediaRecorderConfiguration } @JsonSerializable(explicitToJson: true, includeIfNull: false) class MediaRecorderConfiguration { - /// @nodoc + const MediaRecorderConfiguration( {this.storagePath, this.containerFormat, @@ -294,14 +294,16 @@ class MediaRecorderConfiguration {
                - sample_rate + sample_rate + sampleRate 录制音频的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 该参数仅在 调用 且将 中的 type设置为 时需要传入。 - 该参数仅在 调用 且将 recorderStreamType 为 0 时需要传入。 + 该参数仅在调用 且将 recorderStreamType 为 0 时需要传入。 - channel_num + channel_num + channelNum 录制音频的声道数:
                • 1: 单声道
                • From fbe62f0bb3f77a04565c120d8d9d58dd8a3607a7 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 20 Nov 2024 15:47:57 +0800 Subject: [PATCH 313/354] fix --- dita/RTC-NG/API/class_externalvideoframe.dita | 2 +- dita/RTC-NG/API/rtc_api_overview.dita | 4 ++-- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dita/RTC-NG/API/class_externalvideoframe.dita b/dita/RTC-NG/API/class_externalvideoframe.dita index 80e5659f261..5e3892c5a98 100644 --- a/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/dita/RTC-NG/API/class_externalvideoframe.dita @@ -528,7 +528,7 @@ class ExternalVideoFrame { time 传入的视频帧的时间戳,以毫秒为单位。不正确的时间戳会导致丢帧或者音视频不同步。 - + diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 080b7c27cf0..cac1c2d01e4 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -1376,9 +1376,9 @@ - + - (仅适用于 Android) + (仅适用于 Android) diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index a152a9d65d4..417ff4ed175 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2435,7 +2435,7 @@ - + From 6337543e2509de99e996621ae847367ef0f49cf1 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 20 Nov 2024 16:14:13 +0800 Subject: [PATCH 314/354] fix advanced-beauty --- dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita | 2 +- dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita | 2 +- dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita index bf5bae3c79b..3ba4e72357f 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions.dita @@ -40,7 +40,7 @@
                  v4.5.0
                  -

                  如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

                  +

                  如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。详见

                  该方法和 均可用于设置美型部位选项,区别在于该方法支持指定应用美型效果的媒体源。

                  diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita index ec77b500e40..a29a70d8e5d 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapeareaoptions2.dita @@ -30,7 +30,7 @@
                  v4.5.0
                  -

                  如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果,详见

                  +

                  如果在 方法中实现的预设美型效果达不到预期,你可以通过该方法设置美型部位选项,对人脸的各个部位单独微调,实现更加精细的美型效果。详见

                  diff --git a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita index ea42e983883..56b0534b963 100644 --- a/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setfaceshapebeautyoptions2.dita @@ -30,7 +30,7 @@
                  v4.5.0
                  -

                  调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果,详见

                  +

                  调用该方法可对脸部指定部位进行调整,从而实现瘦脸、大眼、瘦鼻等微整形效果。详见

                  From 6b893e96d8fa0d5ba75bc0c92a365dc5fb34e82b Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 20 Nov 2024 16:14:46 +0800 Subject: [PATCH 315/354] exclude rte --- dita/RTC-NG/config/keys-rtc-ng-links-flutter.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-links-unity.ditamap | 7 +++++++ dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 12 ++++++------ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-flutter.ditamap index cff7fd5b5a0..030e5379365 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-flutter.ditamap @@ -74,6 +74,13 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-links-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-links-unity.ditamap index f4c392d3080..b1c8dfc4bb8 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-links-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-links-unity.ditamap @@ -68,6 +68,13 @@ + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index 7c547436aad..0d2f5b3dec7 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3066,7 +3066,7 @@ - + @@ -3310,7 +3310,7 @@ - + @@ -3335,7 +3335,7 @@ - + @@ -3367,7 +3367,7 @@ - + @@ -3391,7 +3391,7 @@ - + @@ -3404,7 +3404,7 @@ - + From 0785662ada89e4358456ef9a7aa24e8aa4fb075d Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 20 Nov 2024 16:28:05 +0800 Subject: [PATCH 316/354] rn: add setExternalMediaProjection --- dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index 58a1c6bbf10..1baa2330cc7 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -1629,6 +1629,13 @@ + + + + setExternalMediaProjection + + + From 9d7e82bb9c58696e1dae869a7c31a478af81ffef Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 20 Nov 2024 18:12:13 +0800 Subject: [PATCH 317/354] map reorg --- dita/RTC-NG/RTC_NG_API_Unity.ditamap | 64 +++++++++++++--------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Unity.ditamap b/dita/RTC-NG/RTC_NG_API_Unity.ditamap index 21096838852..ad68c3eb8e2 100644 --- a/dita/RTC-NG/RTC_NG_API_Unity.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unity.ditamap @@ -86,6 +86,16 @@ + + + + + + + + + + @@ -303,6 +313,12 @@ + + + + + + @@ -338,26 +354,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -522,20 +518,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + From c2dcfbc78bcf25308a1b8570c8ea01b2411bf3c8 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 20 Nov 2024 18:43:12 +0800 Subject: [PATCH 318/354] unreal and bp api --- dita/RTC-NG/API/rtc_api_overview.dita | 8 +++--- dita/RTC-NG/RTC_NG_API_Unreal.ditamap | 1 + .../config/keys-rtc-ng-api-blueprint.ditamap | 24 ++++------------ .../config/keys-rtc-ng-api-unreal.ditamap | 28 +++++++++++++++++++ 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index e620ec2b16b..67d0a9f7a3d 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -584,15 +584,15 @@ - + - + - + @@ -959,7 +959,7 @@ (仅适用于 Android 和 iOS) - + (仅适用于 Android) diff --git a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap index af0578e010c..d79de21ff7e 100644 --- a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap @@ -302,6 +302,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index a2d9887bc22..93b91ff803b 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -2783,21 +2783,21 @@ - + StartLocalAudioMixer - + StopLocalAudioMixer - + UpdateLocalAudioMixerConfiguration @@ -5507,20 +5507,6 @@ - - - - FUABT_FaceShapeAreaOptions - - - - - - - FUABT_FaceShapeBeautyOptions - - - @@ -5654,14 +5640,14 @@ - + FUABT_MixedAudioStream - + FUABT_LocalAudioMixerConfiguration diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index f0b40a28e35..2785b01950e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -2674,6 +2674,13 @@ + + + + setExternalRemoteEglContext + + + @@ -5598,6 +5605,13 @@ + + + + LocalAudioMixerConfiguration + + + @@ -11424,6 +11438,20 @@ + + + + RTC + + + + + + + PREVIEW + + + From 84c60ed9dbd98758f2e1fc3eb30154310b7b78c2 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 21 Nov 2024 10:35:39 +0800 Subject: [PATCH 319/354] prototype updates --- .../API/class_videoencoderconfiguration.dita | 101 +++++++----------- .../config/keys-rtc-ng-api-blueprint.ditamap | 14 +-- 2 files changed, 44 insertions(+), 71 deletions(-) diff --git a/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/dita/RTC-NG/API/class_videoencoderconfiguration.dita index fc457bae25b..f659d2dee3a 100644 --- a/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -350,74 +350,47 @@ } }; USTRUCT(BlueprintType) -struct FVideoEncoderConfiguration +struct FUABT_VideoEncoderConfiguration { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EVIDEO_CODEC_TYPE codecType = EVIDEO_CODEC_TYPE::VIDEO_CODEC_NONE; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - FVideoDimensions dimensions = FVideoDimensions(); - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_CODEC_TYPE codecType = EUABT_VIDEO_CODEC_TYPE::VIDEO_CODEC_NONE; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FUABT_VideoDimensions dimensions = FUABT_VideoDimensions(); + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int frameRate = 15; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int bitrate = 0; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int minBitrate = -1; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EORIENTATION_MODE orientationMode = EORIENTATION_MODE::ORIENTATION_MODE_ADAPTIVE; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EDEGRADATION_PREFERENCE degradationPreference = EDEGRADATION_PREFERENCE::MAINTAIN_QUALITY; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EVIDEO_MIRROR_MODE_TYPE mirrorMode = EVIDEO_MIRROR_MODE_TYPE::VIDEO_MIRROR_MODE_DISABLED; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - FAdvanceOptions advanceOptions = FAdvanceOptions(); - FVideoEncoderConfiguration(){} - FVideoEncoderConfiguration(const agora::rtc::VideoEncoderConfiguration & AgoraData){ - codecType = static_cast<EVIDEO_CODEC_TYPE>(AgoraData.codecType); - dimensions = FVideoDimensions(AgoraData.dimensions); - frameRate = AgoraData.frameRate; - bitrate = AgoraData.bitrate; - minBitrate = AgoraData.minBitrate; - orientationMode = static_cast<EORIENTATION_MODE>(AgoraData.orientationMode); - degradationPreference = static_cast<EDEGRADATION_PREFERENCE>(AgoraData.degradationPreference); - mirrorMode = static_cast<EVIDEO_MIRROR_MODE_TYPE>(AgoraData.mirrorMode); - advanceOptions = FAdvanceOptions(AgoraData.advanceOptions); - } - agora::rtc::VideoEncoderConfiguration CreateAgoraData() const { - agora::rtc::VideoEncoderConfiguration AgoraData; - AgoraData.codecType = static_cast<agora::rtc::VIDEO_CODEC_TYPE>(codecType); - AgoraData.dimensions = dimensions.CreateAgoraData(); - AgoraData.frameRate = frameRate; - AgoraData.bitrate = bitrate; - AgoraData.minBitrate = minBitrate; - AgoraData.orientationMode = static_cast<agora::rtc::ORIENTATION_MODE>(orientationMode); - AgoraData.degradationPreference = static_cast<agora::rtc::DEGRADATION_PREFERENCE>(degradationPreference); - AgoraData.mirrorMode = static_cast<agora::rtc::VIDEO_MIRROR_MODE_TYPE>(mirrorMode); - AgoraData.advanceOptions = advanceOptions.CreateAgoraData(); - return AgoraData; - } - void FreeAgoraData(agora::rtc::VideoEncoderConfiguration& AgoraData) const { - dimensions.FreeAgoraData(AgoraData.dimensions); - advanceOptions.FreeAgoraData(AgoraData.advanceOptions); - } + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_ORIENTATION_MODE orientationMode = EUABT_ORIENTATION_MODE::ORIENTATION_MODE_ADAPTIVE; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_DEGRADATION_PREFERENCE degradationPreference = EUABT_DEGRADATION_PREFERENCE::MAINTAIN_QUALITY; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_MIRROR_MODE_TYPE mirrorMode = EUABT_VIDEO_MIRROR_MODE_TYPE::VIDEO_MIRROR_MODE_DISABLED; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FUABT_AdvanceOptions advanceOptions = FUABT_AdvanceOptions(); }; export class VideoEncoderConfiguration { - + codecType?: VideoCodecType; - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + minBitrate?: number; - + orientationMode?: OrientationMode; - + degradationPreference?: DegradationPreference; - + mirrorMode?: VideoMirrorModeType; advanceOptions?: AdvanceOptions; @@ -500,21 +473,21 @@ public: } } export class VideoEncoderConfiguration { - + codecType?: VideoCodecType; - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + minBitrate?: number; - + orientationMode?: OrientationMode; - + degradationPreference?: DegradationPreference; - + mirrorMode?: VideoMirrorModeType; advanceOptions?: AdvanceOptions; @@ -562,7 +535,7 @@ public: _$VideoEncoderConfigurationFromJson(json); Map<String, dynamic> toJson() => _$VideoEncoderConfigurationToJson(this); -} +}

                  @@ -572,8 +545,8 @@ public: dimensions

                  视频编码的分辨率 (px),详见 。该参数用于衡量编码质量,以长 × 宽表示,默认值为 960 × 540。用户可以自行设置分辨率。

                  -

                  用户可以自行设置分辨率,也可以在如下列表中直接选择想要的分辨率: - +

                  用户可以自行设置分辨率,也可以在如下列表中直接选择想要的分辨率: +

                  • :视频分辨率为 120 × 120。
                  • :视频分辨率为 160 × 120。
                  • diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index 93b91ff803b..ff2b336b4bf 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -5972,14 +5972,14 @@ - FVideoDimensions + FUABT_VideoDimensions - FVideoEncoderConfiguration + FUABT_VideoEncoderConfiguration @@ -8410,7 +8410,7 @@ - EDEGRADATION_PREFERENCE + EUABT_DEGRADATION_PREFERENCE @@ -10678,7 +10678,7 @@ - EORIENTATION_MODE + EUABT_ORIENTATION_MODE @@ -11224,7 +11224,7 @@ - FAdvanceOptions + FUABT_AdvanceOptions @@ -12365,7 +12365,7 @@ - EVIDEO_CODEC_TYPE + EUABT_VIDEO_CODEC_TYPE @@ -12554,7 +12554,7 @@ - EVIDEO_MIRROR_MODE_TYPE + EUABT_VIDEO_MIRROR_MODE_TYPE From 43430fffdb5bcd206e6e7f8d2965c43f8fddbd0e Mon Sep 17 00:00:00 2001 From: chenmeng Date: Thu, 21 Nov 2024 10:58:14 +0800 Subject: [PATCH 320/354] Create RTC_NG_Release_Blueprint.ditamap --- dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap diff --git a/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap new file mode 100644 index 00000000000..0d1f2b4f643 --- /dev/null +++ b/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap @@ -0,0 +1,17 @@ + + + + Release Notes + + + + + + + + + + + + + From 6f6d418923fffd1abb15c83a0b52c80f35b9fed6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 11:11:58 +0800 Subject: [PATCH 321/354] update unity proto --- ...tcengine_startscreencapturebywindowid.dita | 2 +- .../API/class_screencaptureconfiguration.dita | 28 +++++++++++++------ .../API/class_screencapturesourceinfo.dita | 4 +-- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita b/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita index b4d09d894c4..5393dab31be 100644 --- a/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita +++ b/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita @@ -28,7 +28,7 @@ regionRect: Rectangle, captureParams: ScreenCaptureParameters ): number; - public abstract int StartScreenCaptureByWindowId(view_t windowId, Rectangle regionRect, ScreenCaptureParameters captureParams); + public abstract int StartScreenCaptureByWindowId(long windowId, Rectangle regionRect, ScreenCaptureParameters captureParams); abstract startScreenCaptureByWindowId( windowId: any, regionRect: Rectangle, diff --git a/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/dita/RTC-NG/API/class_screencaptureconfiguration.dita index e61e9403b46..9d6975fa4cf 100644 --- a/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -90,18 +90,30 @@ public: } public class ScreenCaptureConfiguration { + public bool isCaptureWindow; + public long displayId; + public Rectangle screenRect; + public long windowId; + + public ScreenCaptureParameters @params; + public Rectangle regionRect; + public ScreenCaptureConfiguration() { - isCaptureWindow = false; - displayId = 0; + this.isCaptureWindow = false; + this.displayId = 0; + this.windowId = 0; } - public bool isCaptureWindow { set; get; } - public uint displayId { set; get; } - public Rectangle screenRect { set; get; } - public uint windowId { set; get; } - public ScreenCaptureParameters parameters { set; get; } - public Rectangle regionRect { set; get; } + public ScreenCaptureConfiguration(bool isCaptureWindow, long displayId, Rectangle screenRect, long windowId, ScreenCaptureParameters @params, Rectangle regionRect) + { + this.isCaptureWindow = isCaptureWindow; + this.displayId = displayId; + this.screenRect = screenRect; + this.windowId = windowId; + this.@params = @params; + this.regionRect = regionRect; + } } export class ScreenCaptureConfiguration { diff --git a/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/dita/RTC-NG/API/class_screencapturesourceinfo.dita index 607faf82b32..f854b3dbcbf 100644 --- a/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -143,7 +143,7 @@ public: public class ScreenCaptureSourceInfo { public ScreenCaptureSourceType type; - public view_t sourceId; + public long sourceId; public string sourceName; public ThumbImageBuffer thumbImage; public ThumbImageBuffer iconImage; @@ -151,7 +151,7 @@ public: public string sourceTitle; public bool primaryMonitor; public Rectangle position; - public view_t sourceDisplayId; + public long sourceDisplayId; }; class ScreenCaptureSourceInfo { From 02bf04891c9e7f154880b63bf512c4418ace713c Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 11:54:37 +0800 Subject: [PATCH 322/354] add props --- dita/RTC-NG/release/release_notes.dita | 54 +++++++++++++------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index f7cad3c2c76..7be101035af 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -17,8 +17,8 @@

                    自 4.5.0 起,RTC SDK 和 RTM SDK (2.2.0 及以上版本) 都包含 aosl.dll 库。如果你通过 CDN 手动集成 RTC SDK 且同时集成了 RTM SDK,为避免冲突,请手动删除版本较低的 aosl.dll 库。4.5.0 RTC SDK aosl.dll 库版本为 1.2.13。你可以通过查看 aosl.dll 文件的属性来得知库的版本信息。

                      -
                    1. 成员参数类型变更 -

                      为提升各框架对 Native SDK 的适配性,该版本对一些 API 中的成员或参数做了如下修改:

              +
            63. 成员参数类型变更 +

              为提升各框架对 Native SDK 的适配性,该版本对一些 API 中的成员或参数做了如下修改:

            64. @@ -31,7 +31,7 @@ - + displayId 由 uint32_t 型变更为 int64_t 型 @@ -39,25 +39,25 @@ windowId - 由 view_t 型变更为 int64_t 型 + 由 view_t 型变更为 int64_t 型由 view_t 型变更为 long 型 displayId - 由 uint32_t 型变更为 int64_t 型 + 由 uint32_t 型变更为 int64_t 型由 unit 型变更为 long 型 windowId - 由 view_t 型变更为 int64_t 型 + 由 view_t 型变更为 int64_t 型由 unit 型变更为 long 型 sourceDisplayId - 由 view_t 型变更为 int64_t 型 + 由 view_t 型变更为 int64_t 型由 view_t 型变更为 long 型 sourceId - 默认值由 nullptr 变更为 0 + 默认值由 nullptr 变更为 0由 view_t 型变更为 long 型 @@ -70,7 +70,7 @@

              该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

              此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

              -
            65. 摄像头插拔状态变更 (macOS, Windows) +
            66. 摄像头插拔状态变更 (macOS, Windows)

              在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

              在之前版本中,摄像头拔出并重新插入后不会自动恢复采集。该版本起,摄像头重新插入后将自动恢复采集。

            67. @@ -129,17 +129,17 @@

              该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

              如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

              -
            68. EGL 环境上下文 (Android) +
            69. EGL 环境上下文 (Android)

              该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

            70. 色彩空间设置

              该版本在 中新增了 ,你可以通过 获取视频帧的色彩空间属性,并通过 对其进行自定义设置。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,开发者可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

              -

              该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

              +

              该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

            71. 其他
                -
              • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
              • -
              • 新增 枚举,表示设备已插入。
              • +
              • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
              • +
              • 新增 枚举,表示设备已插入。
            72. @@ -177,21 +177,21 @@

              该版本修复了以下问题:

                -
              • 调用 共享屏幕时,通过 regionRect 指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows)
              • -
              • 当发送端视频源类型为 JPEG 格式时,偶现接收端帧率低于预期。(Android、iOS)
              • -
              • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
              • -
              • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
              • -
              • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
              • -
              • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
              • -
              • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
              • -
              • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
              • -
              • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
              • -
              • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
              • -
              • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
              • -
              • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
              • -
              • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
              • +
              • 调用 共享屏幕时,通过 regionRect 指定的窗口采集区域不准确,导致接收端看到的屏幕共享窗口宽高错误。(Windows)
              • +
              • 当发送端视频源类型为 JPEG 格式时,偶现接收端帧率低于预期。(Android、iOS)
              • +
              • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
              • +
              • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
              • +
              • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
              • +
              • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
              • +
              • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
              • +
              • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
              • +
              • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
              • +
              • 音视频互动过程中,如果发送端设备的系统版本为 iOS 17,偶现接收端听不到来自发送端的声音。(iOS)
              • +
              • 直播场景下,观众端因切换网络导致断开连接,重新连接直播间花费的时间长于预期。(iOS)
              • +
              • App 启动后使用媒体播放器播放在线媒体资源,播放无声。(iOS)
              • +
              • 音视频互动过程中被系统其他 App 打断后恢复,偶现音频采集无声。(iOS)
              • 调用 后,立即调用 暂停播放音乐文件不生效。
              • -
              • 音视频互动过程中偶现崩溃。(Android)
              • +
              • 音视频互动过程中偶现崩溃。(Android)
              From 46206482d9d6619536bed1756346701874404102 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 14:28:55 +0800 Subject: [PATCH 323/354] remove hide props for set/getrecordingdevicemute --- dita/RTC-NG/API/rtc_api_overview.dita | 4 ++-- dita/RTC-NG/RTC_NG_API_Blueprint.ditamap | 4 ++-- dita/RTC-NG/RTC_NG_API_CPP.ditamap | 4 ++-- dita/RTC-NG/RTC_NG_API_Flutter.ditamap | 2 ++ dita/RTC-NG/RTC_NG_API_Unity.ditamap | 4 ++-- dita/RTC-NG/RTC_NG_API_Unreal.ditamap | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 12 ++++-------- dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap | 14 ++++++++++++++ dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 4 ++-- dita/RTC-NG/config/relations-rtc-ng-api.ditamap | 4 ++-- 10 files changed, 34 insertions(+), 22 deletions(-) diff --git a/dita/RTC-NG/API/rtc_api_overview.dita b/dita/RTC-NG/API/rtc_api_overview.dita index 67d0a9f7a3d..59e422fd47e 100644 --- a/dita/RTC-NG/API/rtc_api_overview.dita +++ b/dita/RTC-NG/API/rtc_api_overview.dita @@ -2583,11 +2583,11 @@ (仅适用于 Windows) - + (仅适用于 Windows) - + (仅适用于 Windows) diff --git a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap index 8ece0181db8..d2403723bd1 100644 --- a/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Blueprint.ditamap @@ -737,7 +737,7 @@ - + @@ -750,7 +750,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 878a4c5f8bf..44343521f9e 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -792,7 +792,7 @@ - + @@ -805,7 +805,7 @@ - + diff --git a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap index c6bc5e67d36..6d79bbd2e3f 100644 --- a/dita/RTC-NG/RTC_NG_API_Flutter.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Flutter.ditamap @@ -691,6 +691,7 @@ + @@ -700,6 +701,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_Unity.ditamap b/dita/RTC-NG/RTC_NG_API_Unity.ditamap index ad68c3eb8e2..405ea3f525f 100644 --- a/dita/RTC-NG/RTC_NG_API_Unity.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unity.ditamap @@ -703,14 +703,14 @@ - + - + diff --git a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap index d79de21ff7e..8af7dd0df41 100644 --- a/dita/RTC-NG/RTC_NG_API_Unreal.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Unreal.ditamap @@ -736,7 +736,7 @@ - + @@ -749,7 +749,7 @@ - + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b86f51fb442..13f50fb975d 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -3964,21 +3964,17 @@ - + - href="../API/api_iaudiodevicemanager_setrecordingdevicemute.dita" - setRecordingDeviceMute - + setRecordingDeviceMute - + - href="../API/api_iaudiodevicemanager_getrecordingdevicemute.dita" - getRecordingDeviceMute - + getRecordingDeviceMute diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 241aac64017..2440540f108 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -3253,6 +3253,20 @@ + + + + setRecordingDeviceMute + + + + + + + getRecordingDeviceMute + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index 87987551dcd..a0f58388058 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -3397,14 +3397,14 @@ - + SetRecordingDeviceMute - + GetRecordingDeviceMute diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index c18e9c8b127..5fb4608f5ee 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -2857,7 +2857,7 @@ - + @@ -2865,7 +2865,7 @@ - + From 5401a291b5e1c1feb2150005c883aa1c3afa6522 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 21 Nov 2024 14:31:29 +0800 Subject: [PATCH 324/354] Electron: add get/setRecordingDeviceMute --- dita/RTC-NG/RTC_NG_API_Electron.ditamap | 2 ++ .../RTC-NG/config/keys-rtc-ng-api-electron.ditamap | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/dita/RTC-NG/RTC_NG_API_Electron.ditamap b/dita/RTC-NG/RTC_NG_API_Electron.ditamap index 0ff17a3da87..96ba0ba3328 100644 --- a/dita/RTC-NG/RTC_NG_API_Electron.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Electron.ditamap @@ -661,6 +661,7 @@ + @@ -674,6 +675,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index 89ef13dbb72..fa99e0bd3c3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -3020,6 +3020,20 @@ + + + + setRecordingDeviceMute + + + + + + + getRecordingDeviceMute + + + From 2b1cefe74d6129e938cd3cc9c08fb52f5911fb98 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 21 Nov 2024 14:36:01 +0800 Subject: [PATCH 325/354] RN/Electron: reorder dualstream and video transcoder --- dita/RTC-NG/RTC_NG_API_Electron.ditamap | 36 +++++++++++-------------- dita/RTC-NG/RTC_NG_API_RN.ditamap | 36 +++++++++++-------------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Electron.ditamap b/dita/RTC-NG/RTC_NG_API_Electron.ditamap index 96ba0ba3328..451ab7bf0f2 100644 --- a/dita/RTC-NG/RTC_NG_API_Electron.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Electron.ditamap @@ -94,6 +94,10 @@ + + + + @@ -106,6 +110,12 @@ + + + + + + @@ -304,6 +314,12 @@ + + + + + + @@ -334,26 +350,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/dita/RTC-NG/RTC_NG_API_RN.ditamap b/dita/RTC-NG/RTC_NG_API_RN.ditamap index ce26af31007..85bd3a2d5ef 100644 --- a/dita/RTC-NG/RTC_NG_API_RN.ditamap +++ b/dita/RTC-NG/RTC_NG_API_RN.ditamap @@ -93,6 +93,10 @@ + + + + @@ -105,6 +109,12 @@ + + + + + + @@ -301,6 +311,12 @@ + + + + + + @@ -335,26 +351,6 @@ - - - - - - - - - - - - - - - - - - - - From 9ba5dfbcc8d164f9fa0f382e671f1d185034c13c Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Thu, 21 Nov 2024 14:43:24 +0800 Subject: [PATCH 326/354] RN/Electron: move toc_mediaplayer_cache --- dita/RTC-NG/RTC_NG_API_Electron.ditamap | 2 +- dita/RTC-NG/RTC_NG_API_RN.ditamap | 28 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dita/RTC-NG/RTC_NG_API_Electron.ditamap b/dita/RTC-NG/RTC_NG_API_Electron.ditamap index 451ab7bf0f2..4cd7e4c5ca8 100644 --- a/dita/RTC-NG/RTC_NG_API_Electron.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Electron.ditamap @@ -512,7 +512,6 @@ - @@ -527,6 +526,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_RN.ditamap b/dita/RTC-NG/RTC_NG_API_RN.ditamap index 85bd3a2d5ef..6c6053eda2b 100644 --- a/dita/RTC-NG/RTC_NG_API_RN.ditamap +++ b/dita/RTC-NG/RTC_NG_API_RN.ditamap @@ -510,20 +510,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + From 07271cb31b645b33d1a57c010e68e478a612404b Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 14:56:58 +0800 Subject: [PATCH 327/354] Update release_notes.dita --- dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 7be101035af..69598bd2da2 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -108,7 +108,7 @@

              该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

              在对视频渲染帧率要求不高的场景(例如:屏幕共享、在线教育)或者远端使用中低端设备的场景下,你可以通过这一组方法限制视频渲染帧率,从而减小 CPU 消耗、提升系统性能。

              -
            73. URL 拉流播放 +
            74. URL 拉流播放

              URL 拉流播放功能主要用于直播场景,观众端可以直接通过 打开特定的 URL 来播放实时媒体流,无需加入频道、订阅等步骤,极大简化了观众端观看直播流的 API 调用。

              在播放的过程中,观众端可以通过 设置订阅视频大小流,并可以在大小流之间实现平滑切换。如果对视频体验有更高要求,可以联系开通 ABR(Adaptive Bitrate,自适应码率)功能。启用该功能后,可以自定义不同层级的视频流分辨率,观众可以实现不同分辨率视频流的平滑切换。

              当网络情况不稳定时,观众端可以调用 来设置订阅的视频流的回退选项。SDK 会以你指定的最低质量层级对应的视频流分辨率为下限,在此范围内根据网络状况动态调整分辨率。

              有关该功能的实现步骤,详见

              From 9377afbb716fdb33bbf32083d9ee77ac9431db98 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 15:37:20 +0800 Subject: [PATCH 328/354] delete desc about android screen share in release --- dita/RTC-NG/release/release_notes.dita | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index 69598bd2da2..6f29cabb064 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -71,7 +71,7 @@

              此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

            75. 摄像头插拔状态变更 (macOS, Windows) -

              在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

              +

              在之前版本中,当摄像头拔出并重新插入时, 回调会将设备状态报告为 (1)(设备正在使用)。该版本起,摄像头重新插入后,设备状态将改为 (0)(设备就绪)。

              在之前版本中,摄像头拔出并重新插入后不会自动恢复采集。该版本起,摄像头重新插入后将自动恢复采集。

            76. 视频编码偏好变更 @@ -127,7 +127,7 @@
            77. 外部 MediaProjection (Android)

              该版本新增 方法,该方法支持你自行设置外部 MediaProjection,并取代 SDK 申请的 MediaProjection

              -

              如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。有关具体实现方法,详见《屏幕共享》。

              +

              如果你具备自行申请 MediaProjection 的开发能力,可通过该功能实现更加灵活的屏幕采集。

            78. EGL 环境上下文 (Android)

              该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

              From 55a4ae7b1d7dee8080659c7f3b8e22109040e405 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Thu, 21 Nov 2024 18:18:54 +0800 Subject: [PATCH 329/354] add destroy and cpp map --- dita/RTC-NG/API/api_rte_destroy.dita | 58 +++++++++++++++++++ dita/RTC-NG/RTC_NG_API_CPP.ditamap | 1 + .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 +++ .../config/relations-rtc-ng-api.ditamap | 1 + 4 files changed, 67 insertions(+) create mode 100644 dita/RTC-NG/API/api_rte_destroy.dita diff --git a/dita/RTC-NG/API/api_rte_destroy.dita b/dita/RTC-NG/API/api_rte_destroy.dita new file mode 100644 index 00000000000..47cf09e782e --- /dev/null +++ b/dita/RTC-NG/API/api_rte_destroy.dita @@ -0,0 +1,58 @@ + + + + <ph keyref="Destroy_Rte"/> + 销毁 RTE 对象。 + + + + + + + + +
              +

              + public synchronized void destroy() throws RteException; + - (BOOL)destroy:(AgoraRteError * _Nullable)error; + bool Destroy(Error *err = nullptr){ + return RteDestroy(&c_rte, err != nullptr ? err->get_underlying_impl() : nullptr); + } + + + + +

              +
              +
              +
              + +
              自从
              +
              v4.5.0
              +
              +
              +

              该方法释放 RTE 对象使用的所有资源。

              +
              +
              + 调用限制 +

              无。

              +
              +
              + <ph props="cpp apple">参数</ph> + + + + + +
              +
              + <ph keyref="return-section-title"/> +

              方法成功调用时,无返回值;方法调用失败时,会抛出 异常,你需要捕获异常并进行处理。详见了解详情和解决建议。

              +

              销毁 RTE 对象是否成功:

                +
              • :销毁成功。
              • +
              • :销毁失败。
              • +
              +

              +
              + + diff --git a/dita/RTC-NG/RTC_NG_API_CPP.ditamap b/dita/RTC-NG/RTC_NG_API_CPP.ditamap index 878a4c5f8bf..746a44e0013 100644 --- a/dita/RTC-NG/RTC_NG_API_CPP.ditamap +++ b/dita/RTC-NG/RTC_NG_API_CPP.ditamap @@ -469,6 +469,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b86f51fb442..62f937fcd3e 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1008,6 +1008,13 @@ + + + + Destroy + + + diff --git a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap index a152a9d65d4..dd44362634b 100644 --- a/dita/RTC-NG/config/relations-rtc-ng-api.ditamap +++ b/dita/RTC-NG/config/relations-rtc-ng-api.ditamap @@ -3312,6 +3312,7 @@ + From dd3f73037aa58b9308d82841b38af10ef8dbfcb3 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Fri, 22 Nov 2024 11:39:37 +0800 Subject: [PATCH 330/354] android 4.5.0 updates --- dita/RTC-NG/API/class_videoframe.dita | 133 ++++++++---------- dita/RTC-NG/RTC_NG_API_Android.ditamap | 1 + .../config/keys-rtc-ng-api-java.ditamap | 7 + dita/RTC-NG/release/release_notes.dita | 10 +- 4 files changed, 73 insertions(+), 78 deletions(-) diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 15070bb10e9..5db3ceb0d22 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -7,45 +7,45 @@

              public class VideoFrame implements RefCounted { - + public interface Buffer extends RefCounted { - + @CalledByNative("Buffer") int getWidth(); - + @CalledByNative("Buffer") int getHeight(); - + @CalledByNative("Buffer") I420Buffer toI420(); - + @Override @CalledByNative("Buffer") void release(); - + @Override @CalledByNative("Buffer") void retain(); - + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } - + public interface I420Buffer extends Buffer { - + @CalledByNative("I420Buffer") ByteBuffer getDataY(); - + @CalledByNative("I420Buffer") ByteBuffer getDataU(); - + @CalledByNative("I420Buffer") ByteBuffer getDataV(); @CalledByNative("I420Buffer") int getStrideY(); @CalledByNative("I420Buffer") int getStrideU(); @CalledByNative("I420Buffer") int getStrideV(); } - + public interface I422Buffer extends Buffer { @CalledByNative("I422Buffer") ByteBuffer getDataY(); @CalledByNative("I422Buffer") ByteBuffer getDataU(); @@ -55,13 +55,13 @@ @CalledByNative("I422Buffer") int getStrideV(); } public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } - + public interface TextureBuffer extends Buffer { - + enum Type { - + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), - + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -76,17 +76,17 @@ EGL_CONTEXT_14; } Type getType(); - + @CalledByNative("TextureBuffer") int getTextureId(); - + Matrix getTransformMatrix(); - + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); @CalledByNative("TextureBuffer") Object getSourceTexturePool(); @CalledByNative("TextureBuffer") long getNativeEglContext(); @CalledByNative("TextureBuffer") int getEglContextType(); @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - + @CalledByNative("TextureBuffer") int getSequence(); @CalledByNative("TextureBuffer") long getFenceObject(); @CalledByNative("TextureBuffer") boolean is10BitTexture(); @@ -198,22 +198,22 @@ return stitchMode; } } - + private Buffer buffer; - + private int rotation; - + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; - + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); - + private @Nullable ByteBuffer alphaBuffer; private long nativeAlphaBuffer; - + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); @@ -243,12 +243,12 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } - + @CalledByNative public Buffer getBuffer() { return buffer; } - + @CalledByNative public int getRotation() { return rotation; @@ -261,7 +261,7 @@ public void setAlphaStitchMode(int stitchMode) { alphaStitchMode = AlphaStitchMode.values()[stitchMode]; } - + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -270,7 +270,7 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } - + public int getRotatedWidth() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT @@ -283,7 +283,7 @@ ? buffer.getHeight() / 2 : buffer.getHeight(); } - + public int getRotatedHeight() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP @@ -296,7 +296,7 @@ ? buffer.getWidth() / 2 : buffer.getWidth(); } - + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; @@ -351,12 +351,12 @@ public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - + @Override public void retain() { buffer.retain(); } - + @Override @CalledByNative public void release() { @@ -431,51 +431,51 @@ struct VideoFrame { metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } - + VIDEO_PIXEL_FORMAT type; - + int width; - + int height; - + int yStride; - + int uStride; - + int vStride; - + uint8_t* yBuffer; - + uint8_t* uBuffer; - + uint8_t* vBuffer; - + int rotation; - + int64_t renderTimeMs; - + int avsync_type; - + uint8_t* metadata_buffer; - + int metadata_size; - + void* sharedContext; - + int textureId; - + void* d3d11Texture2d; - + float matrix[16]; - + uint8_t* alphaBuffer; - + ALPHA_STITCH_MODE alphaStitchMode; - + void* pixelBuffer; - + IVideoFrameMetaInfo* metaInfo; - + ColorSpace colorSpace; }; USTRUCT(BlueprintType) @@ -742,19 +742,6 @@ class VideoFrame {

              缓冲区给出的是指向指针的指针,该接口不能修改缓冲区的指针,只能修改缓冲区的内容。

              -
              - 方法 - - - getColorSpace - 获取视频帧的色彩空间属性。 - - - setColorSpace - 设置视频帧的色彩空间属性。 - - -
              <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> diff --git a/dita/RTC-NG/RTC_NG_API_Android.ditamap b/dita/RTC-NG/RTC_NG_API_Android.ditamap index 7bb07b2d790..96b00956087 100644 --- a/dita/RTC-NG/RTC_NG_API_Android.ditamap +++ b/dita/RTC-NG/RTC_NG_API_Android.ditamap @@ -469,6 +469,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 00946ab6624..baf188eaf26 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -945,6 +945,13 @@ + + + + destroy + + + diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index f7cad3c2c76..f316fd0ff7a 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -67,7 +67,8 @@

              自该版本起,SDK 支持自动安装虚拟声卡功能,当你第一次调用 时,SDK 会自动安装内置的声网自研虚拟声卡 AgoraALD。安装成功后,音频路由会自动切换为虚拟声卡,同时使用虚拟声卡进行采集。

            79. 强效视频降噪实现变更 -

              该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

              +

              该版本调整了强效视频降噪的实现方式,在 中删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

              +

              该版本调整了强效视频降噪的实现方式,删除了 ,改为调用 启用视频降噪后,调用 方法启用美颜磨皮功能,二者搭配使用以获得更好的视频降噪效果。实现强效降噪时,推荐磨皮参数设置详见

              此外,受该调整影响,实现画质优先的暗光增强效果时,需要先开启视频降噪并采用特定设置,详见

            80. 摄像头插拔状态变更 (macOS, Windows) @@ -118,7 +119,7 @@
            81. 本地音频合流

              该版本新增本地音频合流功能,你可以调用 方法,将本地麦克风采集的音频流、媒体播放器中的音频流、声卡采集的音频流、远端音频流等合并为一路音频流,你可以将合并后的音频流发布到频道中。不再需要音频合流时,你可以调用 方法停止本地音频合流;在合流过程中,可以调用 方法更新正在合流的音频流配置。

              -

              该功能的使用场景示例如下: +

              该功能的使用场景示例如下:

              • 结合本地合图功能一起使用,可将合图视频流相关的音频流同步采集和发布。
              • 在直播场景下,用户接收频道内的音频流,在本地进行多路音频流合流后转发到其他频道。
              • @@ -133,8 +134,7 @@

                该版本新增了 方法,用于设置远端视频流渲染的 EGL 环境上下文。使用 Texture 格式的视频数据进行远端视频自渲染时,你可以通过该方法替换 SDK 默认的远端 EGL 环境上下文,实现统一的 EGL 上下文管理。

              • 色彩空间设置 -

                该版本在 中新增了 ,你可以通过 获取视频帧的色彩空间属性,并通过 对其进行自定义设置。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,开发者可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

                -

                该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

                +

                该版本在 中新增了 colorSpace,你可以通过该参数设置视频帧的色彩空间属性。默认情况下,色彩空间采用 Full Range 和 BT.709 标准配置,你可以根据自采集或自渲染的需求灵活调整,进一步提升视频处理的定制化能力。

              • 其他
                  @@ -182,7 +182,7 @@
                • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
                • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
                • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
                • -
                • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
                • +
                • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
                • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
                • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
                • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
                • From 28425ec89c29b033c2433a3b5a786a71c6e9940c Mon Sep 17 00:00:00 2001 From: chenmeng Date: Fri, 22 Nov 2024 11:48:40 +0800 Subject: [PATCH 331/354] delete set/getcolor space as member method --- en-US/dita/RTC-NG/API/class_videoframe.dita | 133 +++++++++---------- en-US/dita/RTC-NG/release/release_notes.dita | 3 +- 2 files changed, 61 insertions(+), 75 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index 9a1bb22e2e1..67f74220edb 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -7,45 +7,45 @@

                  public class VideoFrame implements RefCounted { - + public interface Buffer extends RefCounted { - + @CalledByNative("Buffer") int getWidth(); - + @CalledByNative("Buffer") int getHeight(); - + @CalledByNative("Buffer") I420Buffer toI420(); - + @Override @CalledByNative("Buffer") void release(); - + @Override @CalledByNative("Buffer") void retain(); - + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } - + public interface I420Buffer extends Buffer { - + @CalledByNative("I420Buffer") ByteBuffer getDataY(); - + @CalledByNative("I420Buffer") ByteBuffer getDataU(); - + @CalledByNative("I420Buffer") ByteBuffer getDataV(); @CalledByNative("I420Buffer") int getStrideY(); @CalledByNative("I420Buffer") int getStrideU(); @CalledByNative("I420Buffer") int getStrideV(); } - + public interface I422Buffer extends Buffer { @CalledByNative("I422Buffer") ByteBuffer getDataY(); @CalledByNative("I422Buffer") ByteBuffer getDataU(); @@ -55,13 +55,13 @@ @CalledByNative("I422Buffer") int getStrideV(); } public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } - + public interface TextureBuffer extends Buffer { - + enum Type { - + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), - + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -76,17 +76,17 @@ EGL_CONTEXT_14; } Type getType(); - + @CalledByNative("TextureBuffer") int getTextureId(); - + Matrix getTransformMatrix(); - + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); @CalledByNative("TextureBuffer") Object getSourceTexturePool(); @CalledByNative("TextureBuffer") long getNativeEglContext(); @CalledByNative("TextureBuffer") int getEglContextType(); @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - + @CalledByNative("TextureBuffer") int getSequence(); @CalledByNative("TextureBuffer") long getFenceObject(); @CalledByNative("TextureBuffer") boolean is10BitTexture(); @@ -198,22 +198,22 @@ return stitchMode; } } - + private Buffer buffer; - + private int rotation; - + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; - + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); - + private @Nullable ByteBuffer alphaBuffer; private long nativeAlphaBuffer; - + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); @@ -243,12 +243,12 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } - + @CalledByNative public Buffer getBuffer() { return buffer; } - + @CalledByNative public int getRotation() { return rotation; @@ -261,7 +261,7 @@ public void setAlphaStitchMode(int stitchMode) { alphaStitchMode = AlphaStitchMode.values()[stitchMode]; } - + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -270,7 +270,7 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } - + public int getRotatedWidth() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT @@ -283,7 +283,7 @@ ? buffer.getHeight() / 2 : buffer.getHeight(); } - + public int getRotatedHeight() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP @@ -296,7 +296,7 @@ ? buffer.getWidth() / 2 : buffer.getWidth(); } - + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; @@ -351,12 +351,12 @@ public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - + @Override public void retain() { buffer.retain(); } - + @Override @CalledByNative public void release() { @@ -431,51 +431,51 @@ struct VideoFrame { metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } - + VIDEO_PIXEL_FORMAT type; - + int width; - + int height; - + int yStride; - + int uStride; - + int vStride; - + uint8_t* yBuffer; - + uint8_t* uBuffer; - + uint8_t* vBuffer; - + int rotation; - + int64_t renderTimeMs; - + int avsync_type; - + uint8_t* metadata_buffer; - + int metadata_size; - + void* sharedContext; - + int textureId; - + void* d3d11Texture2d; - + float matrix[16]; - + uint8_t* alphaBuffer; - + ALPHA_STITCH_MODE alphaStitchMode; - + void* pixelBuffer; - + IVideoFrameMetaInfo* metaInfo; - + ColorSpace colorSpace; }; USTRUCT(BlueprintType) @@ -742,19 +742,6 @@ class VideoFrame {

                  Note that the buffer provides a pointer to a pointer. This interface cannot modify the pointer of the buffer, but it can modify the content of the buffer.

                  -
                  - Method - - - getColorSpace - Get the color space properties of the video frame. - - - setColorSpace - Get the color space properties of the video frame. - - -
                  <text conref="../conref/conref_api_metadata.dita#conref_api_metadata/property"/> diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 188c55213e2..64ba335eff8 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -136,8 +136,7 @@

                  This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

                • Color space settings -

                  This version adds and to . You can use to obtain the color space properties of the video frame and use to customize the settings. By default, the color space uses Full Range and BT.709 standard configuration. Developers can flexibly adjust according to their own capture or rendering needs, further enhancing the customization capabilities of video processing.

                  -

                  This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

                  +

                  This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

                • Others
                    From e92c2a46d7fc0348808348358127fa35d9ff6fa4 Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Fri, 22 Nov 2024 03:49:14 +0000 Subject: [PATCH 332/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_videoframe.dita | 120 ++++++++++---------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index 67f74220edb..71b4703f1cb 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -7,45 +7,45 @@

                    public class VideoFrame implements RefCounted { - + public interface Buffer extends RefCounted { - + @CalledByNative("Buffer") int getWidth(); - + @CalledByNative("Buffer") int getHeight(); - + @CalledByNative("Buffer") I420Buffer toI420(); - + @Override @CalledByNative("Buffer") void release(); - + @Override @CalledByNative("Buffer") void retain(); - + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } - + public interface I420Buffer extends Buffer { - + @CalledByNative("I420Buffer") ByteBuffer getDataY(); - + @CalledByNative("I420Buffer") ByteBuffer getDataU(); - + @CalledByNative("I420Buffer") ByteBuffer getDataV(); @CalledByNative("I420Buffer") int getStrideY(); @CalledByNative("I420Buffer") int getStrideU(); @CalledByNative("I420Buffer") int getStrideV(); } - + public interface I422Buffer extends Buffer { @CalledByNative("I422Buffer") ByteBuffer getDataY(); @CalledByNative("I422Buffer") ByteBuffer getDataU(); @@ -55,13 +55,13 @@ @CalledByNative("I422Buffer") int getStrideV(); } public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } - + public interface TextureBuffer extends Buffer { - + enum Type { - + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), - + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -76,17 +76,17 @@ EGL_CONTEXT_14; } Type getType(); - + @CalledByNative("TextureBuffer") int getTextureId(); - + Matrix getTransformMatrix(); - + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); @CalledByNative("TextureBuffer") Object getSourceTexturePool(); @CalledByNative("TextureBuffer") long getNativeEglContext(); @CalledByNative("TextureBuffer") int getEglContextType(); @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - + @CalledByNative("TextureBuffer") int getSequence(); @CalledByNative("TextureBuffer") long getFenceObject(); @CalledByNative("TextureBuffer") boolean is10BitTexture(); @@ -198,22 +198,22 @@ return stitchMode; } } - + private Buffer buffer; - + private int rotation; - + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; - + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); - + private @Nullable ByteBuffer alphaBuffer; private long nativeAlphaBuffer; - + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); @@ -243,12 +243,12 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } - + @CalledByNative public Buffer getBuffer() { return buffer; } - + @CalledByNative public int getRotation() { return rotation; @@ -261,7 +261,7 @@ public void setAlphaStitchMode(int stitchMode) { alphaStitchMode = AlphaStitchMode.values()[stitchMode]; } - + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -270,7 +270,7 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } - + public int getRotatedWidth() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT @@ -283,7 +283,7 @@ ? buffer.getHeight() / 2 : buffer.getHeight(); } - + public int getRotatedHeight() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP @@ -296,7 +296,7 @@ ? buffer.getWidth() / 2 : buffer.getWidth(); } - + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; @@ -351,12 +351,12 @@ public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - + @Override public void retain() { buffer.retain(); } - + @Override @CalledByNative public void release() { @@ -431,51 +431,51 @@ struct VideoFrame { metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } - + VIDEO_PIXEL_FORMAT type; - + int width; - + int height; - + int yStride; - + int uStride; - + int vStride; - + uint8_t* yBuffer; - + uint8_t* uBuffer; - + uint8_t* vBuffer; - + int rotation; - + int64_t renderTimeMs; - + int avsync_type; - + uint8_t* metadata_buffer; - + int metadata_size; - + void* sharedContext; - + int textureId; - + void* d3d11Texture2d; - + float matrix[16]; - + uint8_t* alphaBuffer; - + ALPHA_STITCH_MODE alphaStitchMode; - + void* pixelBuffer; - + IVideoFrameMetaInfo* metaInfo; - + ColorSpace colorSpace; }; USTRUCT(BlueprintType) From 6234eb859c52f8c08ea23746b8da62045171d600 Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Mon, 25 Nov 2024 10:36:35 +0800 Subject: [PATCH 333/354] IOS/MAC: add rte destroy --- dita/RTC-NG/RTC_NG_API_iOS.ditamap | 1 + dita/RTC-NG/RTC_NG_API_macOS.ditamap | 1 + dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 +++++++ dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 7 +++++++ 4 files changed, 16 insertions(+) diff --git a/dita/RTC-NG/RTC_NG_API_iOS.ditamap b/dita/RTC-NG/RTC_NG_API_iOS.ditamap index 8a4c15f005e..4b5ccef98a7 100644 --- a/dita/RTC-NG/RTC_NG_API_iOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_iOS.ditamap @@ -467,6 +467,7 @@ + diff --git a/dita/RTC-NG/RTC_NG_API_macOS.ditamap b/dita/RTC-NG/RTC_NG_API_macOS.ditamap index 684718635ac..9f2737cca53 100644 --- a/dita/RTC-NG/RTC_NG_API_macOS.ditamap +++ b/dita/RTC-NG/RTC_NG_API_macOS.ditamap @@ -459,6 +459,7 @@ + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 5c4990327cf..f8a329a2ddb 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -905,6 +905,13 @@ + + + + destroy: + + + diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 11e23b989a4..8029e0f5244 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -862,6 +862,13 @@ + + + + destroy: + + + From f9db695fa478999d532c469fe025881f0bf1bb61 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Mon, 25 Nov 2024 11:08:45 +0800 Subject: [PATCH 334/354] Update class_videoframe.dita --- dita/RTC-NG/API/class_videoframe.dita | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/class_videoframe.dita b/dita/RTC-NG/API/class_videoframe.dita index 5db3ceb0d22..b861000164d 100644 --- a/dita/RTC-NG/API/class_videoframe.dita +++ b/dita/RTC-NG/API/class_videoframe.dita @@ -868,7 +868,14 @@ class VideoFrame { colorSpace - 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自定义采集、自定义渲染的业务需求进行自定义设置,详见 + 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自定义采集、自定义渲染的业务需求进行自定义设置,详见 + 视频帧的色彩空间属性,默认情况下会应用 Full Range 和 BT.709 标准配置。你可以根据自定义采集、自定义渲染的业务需求进行自定义设置,详见 。与该参数相关的方法如下所示: +

                      +
                    • getColorSpace:获取视频帧的色彩空间属性。
                    • +
                    • setColorSpace:设置视频帧的色彩空间属性。
                    • +
                    sourceType From deb229aa2eca9314f135e9795a468f137910e379 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 03:12:30 +0000 Subject: [PATCH 335/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/API/class_videoframe.dita | 120 +++++++++--------- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 7 + .../RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 7 + .../config/keys-rtc-ng-api-java.ditamap | 7 + .../config/keys-rtc-ng-api-macos.ditamap | 7 + 5 files changed, 88 insertions(+), 60 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index 71b4703f1cb..67f74220edb 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -7,45 +7,45 @@

                    public class VideoFrame implements RefCounted { - + public interface Buffer extends RefCounted { - + @CalledByNative("Buffer") int getWidth(); - + @CalledByNative("Buffer") int getHeight(); - + @CalledByNative("Buffer") I420Buffer toI420(); - + @Override @CalledByNative("Buffer") void release(); - + @Override @CalledByNative("Buffer") void retain(); - + @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); - + @CalledByNative("Buffer") @Nullable Buffer mirror(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer rotate(int frameRotation); - + @CalledByNative("Buffer") @Nullable Buffer transform(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight, int frameRotation); } - + public interface I420Buffer extends Buffer { - + @CalledByNative("I420Buffer") ByteBuffer getDataY(); - + @CalledByNative("I420Buffer") ByteBuffer getDataU(); - + @CalledByNative("I420Buffer") ByteBuffer getDataV(); @CalledByNative("I420Buffer") int getStrideY(); @CalledByNative("I420Buffer") int getStrideU(); @CalledByNative("I420Buffer") int getStrideV(); } - + public interface I422Buffer extends Buffer { @CalledByNative("I422Buffer") ByteBuffer getDataY(); @CalledByNative("I422Buffer") ByteBuffer getDataU(); @@ -55,13 +55,13 @@ @CalledByNative("I422Buffer") int getStrideV(); } public interface RgbaBuffer extends Buffer { @CalledByNative("RgbaBuffer") ByteBuffer getData(); } - + public interface TextureBuffer extends Buffer { - + enum Type { - + OES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES), - + RGB(GLES20.GL_TEXTURE_2D); private final int glTarget; private Type(final int glTarget) { @@ -76,17 +76,17 @@ EGL_CONTEXT_14; } Type getType(); - + @CalledByNative("TextureBuffer") int getTextureId(); - + Matrix getTransformMatrix(); - + @CalledByNative("TextureBuffer") EglBase.Context getEglBaseContext(); @CalledByNative("TextureBuffer") Object getSourceTexturePool(); @CalledByNative("TextureBuffer") long getNativeEglContext(); @CalledByNative("TextureBuffer") int getEglContextType(); @CalledByNative("TextureBuffer") float[] getTransformMatrixArray(); - + @CalledByNative("TextureBuffer") int getSequence(); @CalledByNative("TextureBuffer") long getFenceObject(); @CalledByNative("TextureBuffer") boolean is10BitTexture(); @@ -198,22 +198,22 @@ return stitchMode; } } - + private Buffer buffer; - + private int rotation; - + private long timestampNs; private ColorSpace colorSpace; private SourceType sourceType; private float sampleAspectRatio; - + private AlphaStitchMode alphaStitchMode = AlphaStitchMode.ALPHA_NO_STITCH; private VideoFrameMetaInfo metaInfo = new VideoFrameMetaInfo(); - + private @Nullable ByteBuffer alphaBuffer; private long nativeAlphaBuffer; - + public VideoFrame(Buffer buffer, int rotation, long timestampNs) { this(buffer, rotation, timestampNs, new WrappedNativeColorSpace(), null, 0L, 1.0f, SourceType.kUnspecified.ordinal()); @@ -243,12 +243,12 @@ public float getSampleAspectRatio() { return sampleAspectRatio; } - + @CalledByNative public Buffer getBuffer() { return buffer; } - + @CalledByNative public int getRotation() { return rotation; @@ -261,7 +261,7 @@ public void setAlphaStitchMode(int stitchMode) { alphaStitchMode = AlphaStitchMode.values()[stitchMode]; } - + @CalledByNative public long getTimestampNs() { return timestampNs; @@ -270,7 +270,7 @@ public VideoFrameMetaInfo getMetaInfo() { return metaInfo; } - + public int getRotatedWidth() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_LEFT @@ -283,7 +283,7 @@ ? buffer.getHeight() / 2 : buffer.getHeight(); } - + public int getRotatedHeight() { if (rotation % 180 == 0) { return (alphaStitchMode == AlphaStitchMode.ALPHA_STITCH_UP @@ -296,7 +296,7 @@ ? buffer.getWidth() / 2 : buffer.getWidth(); } - + public void replaceBuffer(Buffer buffer, int rotation, long timestampNs) { release(); this.buffer = buffer; @@ -351,12 +351,12 @@ public void fillAlphaData(ByteBuffer buffer) { alphaBuffer = buffer; } - + @Override public void retain() { buffer.retain(); } - + @Override @CalledByNative public void release() { @@ -431,51 +431,51 @@ struct VideoFrame { metaInfo(NULL){ memset(matrix, 0, sizeof(matrix)); } - + VIDEO_PIXEL_FORMAT type; - + int width; - + int height; - + int yStride; - + int uStride; - + int vStride; - + uint8_t* yBuffer; - + uint8_t* uBuffer; - + uint8_t* vBuffer; - + int rotation; - + int64_t renderTimeMs; - + int avsync_type; - + uint8_t* metadata_buffer; - + int metadata_size; - + void* sharedContext; - + int textureId; - + void* d3d11Texture2d; - + float matrix[16]; - + uint8_t* alphaBuffer; - + ALPHA_STITCH_MODE alphaStitchMode; - + void* pixelBuffer; - + IVideoFrameMetaInfo* metaInfo; - + ColorSpace colorSpace; }; USTRUCT(BlueprintType) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index b86f51fb442..62f937fcd3e 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -1008,6 +1008,13 @@ + + + + Destroy + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index 5c4990327cf..f8a329a2ddb 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -905,6 +905,13 @@ + + + + destroy: + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap index 00946ab6624..baf188eaf26 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-java.ditamap @@ -945,6 +945,13 @@ + + + + destroy + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 11e23b989a4..8029e0f5244 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -862,6 +862,13 @@ + + + + destroy: + + + From 44ec53e77715c6d886e1fff4225dba07ecb0077b Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 14:36:21 +0800 Subject: [PATCH 336/354] restore xpr file --- dita/rtc_api.xpr | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/dita/rtc_api.xpr b/dita/rtc_api.xpr index c4874483445..11952bb119b 100644 --- a/dita/rtc_api.xpr +++ b/dita/rtc_api.xpr @@ -202,11 +202,11 @@ - RTC-NG/RTC_NG_API_Blueprint.ditamap + RTC-NG/RTC_NG_API_CPP.ditamap - DITA Map HTML5 - NG Blueprint + DITA Map HTML5 - NG CPP @@ -240,6 +240,26 @@ + + + RTC-NG/RTC_NG_API_Blueprint.ditamap + + + + DITA Map HTML5 - NG Blueprint + + + + + DITAMAP + + + + + 2 + + + RTC-NG/RTC_NG_API_Harmony.ditamap @@ -743,26 +763,6 @@ - - - RTC-NG/RTC_NG_API_CPP.ditamap - - - - DITA Map HTML5 - NG CPP - - - - - DITAMAP - - - - - 2 - - - From c17987ccd73dbb78511799339968a9fbe13c1df6 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 07:02:29 +0000 Subject: [PATCH 337/354] Sync cn prototype to en prototype --- ...irtcengine_setexternalmediaprojection.dita | 6 +- ...rtcengine_setexternalremoteeglcontext.dita | 4 +- ...api_irtcengine_setfiltereffectoptions.dita | 22 +- ...pi_irtcengine_setlocalrendertargetfps.dita | 18 +- ..._irtcengine_setlowlightenhanceoptions.dita | 4 +- ...irtcengine_setlowlightenhanceoptions2.dita | 5 +- ...i_irtcengine_setremoterendertargetfps.dita | 11 +- ...pi_irtcengine_setvideodenoiseroptions.dita | 4 +- .../api_irtcengine_startlocalaudiomixer.dita | 11 +- ...tcengine_startscreencapturebywindowid.dita | 2 +- .../api_irtcengine_stoplocalaudiomixer.dita | 11 +- .../API/api_irtcengine_takesnapshot2.dita | 12 +- ...ne_updatelocalaudiomixerconfiguration.dita | 16 +- .../API/api_irtcengineex_takesnapshotex2.dita | 22 +- .../RTC-NG/API/class_audiotrackconfig.dita | 29 +- .../RTC-NG/API/class_externalvideoframe.dita | 9 +- .../RTC-NG/API/class_filtereffectoptions.dita | 25 +- .../class_localaudiomixerconfiguration.dita | 52 ++- .../API/class_lowlightenhanceoptions.dita | 35 +- .../API/class_mediarecorderconfiguration.dita | 67 ++- .../RTC-NG/API/class_mixedaudiostream.dita | 65 ++- .../RTC-NG/API/class_recorderstreaminfo.dita | 26 +- .../RTC-NG/API/class_rtcengineconfig.dita | 31 +- .../API/class_screencaptureconfiguration.dita | 28 +- .../API/class_screencapturesourceinfo.dita | 4 +- .../dita/RTC-NG/API/class_snapshotconfig.dita | 45 +- .../API/class_videodenoiseroptions.dita | 35 +- .../API/class_videoencoderconfiguration.dita | 97 ++--- en-US/dita/RTC-NG/API/class_videoframe.dita | 12 +- .../config/keys-rtc-ng-api-blueprint.ditamap | 363 +++++++++++++++- .../RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 12 +- .../config/keys-rtc-ng-api-electron.ditamap | 403 +++++++++++++++++- .../config/keys-rtc-ng-api-flutter.ditamap | 401 ++++++++++++++++- .../RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 389 ++++++++++++++++- .../config/keys-rtc-ng-api-unity.ditamap | 381 ++++++++++++++++- .../config/keys-rtc-ng-api-unreal.ditamap | 368 +++++++++++++++- 36 files changed, 2718 insertions(+), 307 deletions(-) diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita index 87dd8c5930c..65dd76ec6c6 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalmediaprojection.dita @@ -19,9 +19,9 @@ virtual int setExternalMediaProjection(void* mediaProjection) = 0; - - -

                    + public abstract int SetExternalMediaProjection(IntPtr mediaProjection); + abstract setExternalMediaProjection(mediaProjection: any): number; + Future<void> setExternalMediaProjection(int mediaProjection);

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita index e5e172da6bc..944a83940a9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setexternalremoteeglcontext.dita @@ -19,9 +19,9 @@ virtual int setExternalRemoteEglContext(void* eglContext) = 0; - + public abstract int SetExternalRemoteEglContext(IntPtr eglContext); abstract setExternalRemoteEglContext(eglContext: any): number; -

                    + Future<void> setExternalRemoteEglContext(int eglContext);

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita index d35c345c0c9..68149d40fe9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setfiltereffectoptions.dita @@ -18,11 +18,23 @@ - (int)setFilterEffectOptions:(BOOL)enable options:(AgoraFilterEffectOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setFilterEffectOptions(_:options:sourceType:)); virtual int setFilterEffectOptions(bool enabled, const FilterEffectOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetFilterEffectOptions(bool enabled, const FUABT_FilterEffectOptions& options, EUABT_MEDIA_SOURCE_TYPE type = EUABT_MEDIA_SOURCE_TYPE::PRIMARY_CAMERA_SOURCE); + abstract setFilterEffectOptions( + enabled: boolean, + options: FilterEffectOptions, + type?: MediaSourceType + ): number; + public abstract int SetFilterEffectOptions(bool enabled, FilterEffectOptions options, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE); + abstract setFilterEffectOptions( + enabled: boolean, + options: FilterEffectOptions, + type?: MediaSourceType + ): number; + Future<void> setFilterEffectOptions( + {required bool enabled, + required FilterEffectOptions options, + MediaSourceType type = MediaSourceType.primaryCameraSource});

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita index 66ab8b73d50..8585592801d 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlocalrendertargetfps.dita @@ -18,11 +18,19 @@ targetFps:(int)targetFps; public abstract int setLocalRenderTargetFps(Constants.VideoSourceType sourceType, int targetFps); virtual int setLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps) = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLocalRenderTargetFps(EUABT_VIDEO_SOURCE_TYPE sourceType, int targetFps); + abstract setLocalRenderTargetFps( + sourceType: VideoSourceType, + targetFps: number + ): number; + public abstract int SetLocalRenderTargetFps(VIDEO_SOURCE_TYPE sourceType, int targetFps); + abstract setLocalRenderTargetFps( + sourceType: VideoSourceType, + targetFps: number + ): number; + Future<void> setLocalRenderTargetFps( + {required VideoSourceType sourceType, required int targetFps});

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita index f9b8af2cb3f..0033179542c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions.dita @@ -19,8 +19,8 @@ - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:)); virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetLowlightEnhanceOptions(bool enabled, const FLowlightEnhanceOptions& options, EMEDIA_SOURCE_TYPE type); + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setLowlightEnhanceOptions( enabled: boolean, options: LowlightEnhanceOptions, diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index de6c52a2728..4a2c918617a 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -17,8 +17,9 @@ boolean enabled, LowLightEnhanceOptions options, Constants.MediaSourceType sourceType); - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:sourceType:)); - - + virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita index db43c3fb6a5..3c31b3f00f3 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setremoterendertargetfps.dita @@ -17,11 +17,12 @@ - (int)setRemoteRenderTargetFps:(int)targetFps; virtual int setRemoteRenderTargetFps(int targetFps) = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetRemoteRenderTargetFps(int targetFps); + abstract setRemoteRenderTargetFps(targetFps: number): number; + public abstract int SetRemoteRenderTargetFps(int targetFps); + abstract setRemoteRenderTargetFps(targetFps: number): number; + Future<void> setRemoteRenderTargetFps(int targetFps);

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita index 99f8429e519..2f16131bd2c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setvideodenoiseroptions.dita @@ -19,8 +19,8 @@ - (int)setVideoDenoiserOptions:(BOOL)enable options:(AgoraVideoDenoiserOptions* _Nullable)options NS_SWIFT_NAME(setVideoDenoiserOptions(_:options:)); virtual int setVideoDenoiserOptions(bool enabled, const VideoDenoiserOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; - UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetVideoDenoiserOptions(bool enabled, const FVideoDenoiserOptions& options, EMEDIA_SOURCE_TYPE type); + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int SetVideoDenoiserOptions(bool enabled, const FUABT_VideoDenoiserOptions& options, EUABT_MEDIA_SOURCE_TYPE type); abstract setVideoDenoiserOptions( enabled: boolean, options: VideoDenoiserOptions, diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita index 0b638ebbed8..cc27809b1cf 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startlocalaudiomixer.dita @@ -17,11 +17,12 @@ - (int)startLocalAudioMixer:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(startLocalAudioMixer(_:)); virtual int startLocalAudioMixer(const LocalAudioMixerConfiguration& config) = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int StartLocalAudioMixer(const FUABT_LocalAudioMixerConfiguration& config); + abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; + public abstract int StartLocalAudioMixer(LocalAudioMixerConfiguration config); + abstract startLocalAudioMixer(config: LocalAudioMixerConfiguration): number; + Future<void> startLocalAudioMixer(LocalAudioMixerConfiguration config);

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita index 692ec0a30ab..081cb39f01b 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebywindowid.dita @@ -28,7 +28,7 @@ regionRect: Rectangle, captureParams: ScreenCaptureParameters ): number; - public abstract int StartScreenCaptureByWindowId(view_t windowId, Rectangle regionRect, ScreenCaptureParameters captureParams); + public abstract int StartScreenCaptureByWindowId(long windowId, Rectangle regionRect, ScreenCaptureParameters captureParams); abstract startScreenCaptureByWindowId( windowId: any, regionRect: Rectangle, diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita b/en-US/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita index f89240256ab..ecff9a440c4 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_stoplocalaudiomixer.dita @@ -17,11 +17,12 @@ - (int)stopLocalAudioMixer NS_SWIFT_NAME(stopLocalAudioMixer()); virtual int stopLocalAudioMixer() = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int StopLocalAudioMixer(); + abstract stopLocalAudioMixer(): number; + public abstract int StopLocalAudioMixer(); + abstract stopLocalAudioMixer(): number; + Future<void> stopLocalAudioMixer();

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita index 7d4a89fac3e..b5039970ab3 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_takesnapshot2.dita @@ -17,11 +17,13 @@ - (NSInteger)takeSnapshotWithConfig:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotWithConfig(_:config:)); virtual int takeSnapshot(uid_t uid, const media::SnapshotConfig& config) = 0; - - - - - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int TakeSnapshotWithConfig(int64 uid, const FUABT_SnapshotConfig& config); + abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; + public abstract int TakeSnapshot(uint uid, SnapshotConfig config); + abstract takeSnapshotWithConfig(uid: number, config: SnapshotConfig): number; + Future<void> takeSnapshotWithConfig( + {required int uid, required SnapshotConfig config});

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita b/en-US/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita index 7439ff2525e..44a4acb8b25 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_updatelocalaudiomixerconfiguration.dita @@ -17,11 +17,17 @@ - (int)updateLocalAudioMixerConfiguration:(AgoraLocalAudioMixerConfiguration* _Nonnull)config NS_SWIFT_NAME(updateLocalAudioMixerConfiguration(_:)); virtual int updateLocalAudioMixerConfiguration(const LocalAudioMixerConfiguration& config) = 0; - - - - -

                    + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int UpdateLocalAudioMixerConfiguration(const FUABT_LocalAudioMixerConfiguration& config); + abstract updateLocalAudioMixerConfiguration( + config: LocalAudioMixerConfiguration + ): number; + public abstract int UpdateLocalAudioMixerConfiguration(LocalAudioMixerConfiguration config); + abstract updateLocalAudioMixerConfiguration( + config: LocalAudioMixerConfiguration + ): number; + Future<void> updateLocalAudioMixerConfiguration( + LocalAudioMixerConfiguration config);

                    diff --git a/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita b/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita index 08726914d29..635b441af95 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengineex_takesnapshotex2.dita @@ -17,11 +17,23 @@ - (NSInteger)takeSnapshotExWithConfig:(AgoraRtcConnection * _Nonnull)connection uid:(NSInteger)uid config:(AgoraSnapshotConfig* _Nonnull)config NS_SWIFT_NAME(takeSnapshotExWithConfig(_:uid:config:)); virtual int takeSnapshotEx(const RtcConnection& connection, uid_t uid, const media::SnapshotConfig& config) = 0; - - - - - + UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") + int TakeSnapshotWithConfigEx(const FUABT_RtcConnection& connection, int64 uid, const FUABT_SnapshotConfig& config); + abstract takeSnapshotWithConfigEx( + connection: RtcConnection, + uid: number, + config: SnapshotConfig + ): number; + public abstract int TakeSnapshotEx(RtcConnection connection, uint uid, SnapshotConfig config); + abstract takeSnapshotWithConfigEx( + connection: RtcConnection, + uid: number, + config: SnapshotConfig + ): number; + Future<void> takeSnapshotWithConfigEx( + {required RtcConnection connection, + required int uid, + required SnapshotConfig config});

                    diff --git a/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita b/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita index 403743ca319..c50e306e825 100644 --- a/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita +++ b/en-US/dita/RTC-NG/API/class_audiotrackconfig.dita @@ -47,32 +47,27 @@ struct FAudioTrackConfig }; export class AudioTrackConfig { enableLocalPlayback?: boolean; + enableAudioProcessing?: boolean; } public class AudioTrackConfig - { - public bool enableLocalPlayback; - - public AudioTrackConfig(bool enableLocalPlayback) - { - this.enableLocalPlayback = enableLocalPlayback; - } - - public AudioTrackConfig() - { - enableLocalPlayback = true; - } - - }; +{ + public bool enableLocalPlayback; + public bool enableAudioProcessing; +} export class AudioTrackConfig { enableLocalPlayback?: boolean; + enableAudioProcessing?: boolean; } - @JsonSerializable(explicitToJson: true, includeIfNull: false) -class AudioTrackConfig { - const AudioTrackConfig({this.enableLocalPlayback}); + class AudioTrackConfig { + const AudioTrackConfig( + {this.enableLocalPlayback, this.enableAudioProcessing}); @JsonKey(name: 'enableLocalPlayback') final bool? enableLocalPlayback; + @JsonKey(name: 'enableAudioProcessing') + final bool? enableAudioProcessing; + factory AudioTrackConfig.fromJson(Map<String, dynamic> json) => _$AudioTrackConfigFromJson(json); diff --git a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita index 4508152ca2b..d11b2250727 100644 --- a/en-US/dita/RTC-NG/API/class_externalvideoframe.dita +++ b/en-US/dita/RTC-NG/API/class_externalvideoframe.dita @@ -175,6 +175,7 @@ struct ExternalVideoFrame { alphaStitchMode?: AlphaStitchMode; d3d11Texture2d?: any; textureSliceIndex?: number; + colorSpace?: ColorSpace; } public class ExternalVideoFrame { @@ -199,6 +200,7 @@ struct ExternalVideoFrame { public ALPHA_STITCH_MODE alphaStitchMode; public IntPtr d3d11Texture2d; public int textureSliceIndex; + public ColorSpace colorSpace; }; export class ExternalVideoFrame { type?: VideoBufferType; @@ -220,6 +222,7 @@ struct ExternalVideoFrame { alphaBuffer?: Uint8Array; fillAlphaBuffer?: boolean; alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } @JsonSerializable(explicitToJson: true, includeIfNull: false) class ExternalVideoFrame { @@ -244,7 +247,8 @@ class ExternalVideoFrame { this.fillAlphaBuffer, this.alphaStitchMode, this.d3d11Texture2d, - this.textureSliceIndex}); + this.textureSliceIndex, + this.colorSpace}); @JsonKey(name: 'type') final VideoBufferType? type; @@ -309,6 +313,9 @@ class ExternalVideoFrame { @JsonKey(name: 'textureSliceIndex') final int? textureSliceIndex; + @JsonKey(name: 'colorSpace') + final ColorSpace? colorSpace; + factory ExternalVideoFrame.fromJson(Map<String, dynamic> json) => _$ExternalVideoFrameFromJson(json); diff --git a/en-US/dita/RTC-NG/API/class_filtereffectoptions.dita b/en-US/dita/RTC-NG/API/class_filtereffectoptions.dita index 22bc70a352b..d9f00b8a663 100644 --- a/en-US/dita/RTC-NG/API/class_filtereffectoptions.dita +++ b/en-US/dita/RTC-NG/API/class_filtereffectoptions.dita @@ -19,13 +19,32 @@ struct FilterEffectOptions { const char * path; float strength; - + FilterEffectOptions(const char * lut3dPath, float filterStrength) : path(lut3dPath), strength(filterStrength) {} FilterEffectOptions() : path(OPTIONAL_NULLPTR), strength(0.5) {} }; - - + USTRUCT(BlueprintType) +struct FUABT_FilterEffectOptions { + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString path; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + float strength = 0.5; +}; + + export class FilterEffectOptions { + path?: string; + strength?: number; +} + export class FilterEffectOptions { + path?: string; + strength?: number; +}

                    diff --git a/en-US/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita b/en-US/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita index dd6b6e7b24b..aa37af43a1a 100644 --- a/en-US/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_localaudiomixerconfiguration.dita @@ -37,11 +37,53 @@ bool syncWithLocalMic; LocalAudioMixerConfiguration() : streamCount(0), syncWithLocalMic(true) {} }; - - - - -

                    + USTRUCT(BlueprintType) +struct FUABT_LocalAudioMixerConfiguration { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + TArray<FUABT_MixedAudioStream> sourceStreams; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + bool syncWithLocalMic; +}; + export class LocalAudioMixerConfiguration { + streamCount?: number; + audioInputStreams?: MixedAudioStream[]; + syncWithLocalMic?: boolean; +} + public class LocalAudioMixerConfiguration +{ + public uint streamCount; + public MixedAudioStream[] audioInputStreams; + public bool syncWithLocalMic +} + export class LocalAudioMixerConfiguration { + streamCount?: number; + audioInputStreams?: MixedAudioStream[]; + syncWithLocalMic?: boolean; +} + class LocalAudioMixerConfiguration { + const LocalAudioMixerConfiguration( + {this.streamCount, this.audioInputStreams, this.syncWithLocalMic}); + + @JsonKey(name: 'streamCount') + final int? streamCount; + + @JsonKey(name: 'audioInputStreams') + final List<MixedAudioStream>? audioInputStreams; + + @JsonKey(name: 'syncWithLocalMic') + final bool? syncWithLocalMic; + + factory LocalAudioMixerConfiguration.fromJson(Map<String, dynamic> json) => + _$LocalAudioMixerConfigurationFromJson(json); + + Map<String, dynamic> toJson() => _$LocalAudioMixerConfigurationToJson(this); +}

                    diff --git a/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita b/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita index d658d5c9aa5..54272e4cbb0 100644 --- a/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita +++ b/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita @@ -49,27 +49,16 @@ }; USTRUCT(BlueprintType) -struct FLowlightEnhanceOptions +struct FUABT_LowlightEnhanceOptions { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|LowlightEnhanceOptions") - ELOW_LIGHT_ENHANCE_MODE mode = ELOW_LIGHT_ENHANCE_MODE::LOW_LIGHT_ENHANCE_AUTO; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|LowlightEnhanceOptions") - ELOW_LIGHT_ENHANCE_LEVEL level = ELOW_LIGHT_ENHANCE_LEVEL::LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY; - FLowlightEnhanceOptions(){} - FLowlightEnhanceOptions(const agora::rtc::LowlightEnhanceOptions & AgoraData){ - mode = static_cast<ELOW_LIGHT_ENHANCE_MODE>(AgoraData.mode); - level = static_cast<ELOW_LIGHT_ENHANCE_LEVEL>(AgoraData.level); - } - agora::rtc::LowlightEnhanceOptions CreateAgoraData() const { - agora::rtc::LowlightEnhanceOptions AgoraData; - AgoraData.mode = static_cast<agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_MODE>(mode); - AgoraData.level = static_cast<agora::rtc::LowlightEnhanceOptions::LOW_LIGHT_ENHANCE_LEVEL>(level); - return AgoraData; - } - void FreeAgoraData(agora::rtc::LowlightEnhanceOptions& AgoraData) const { - } + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_LOW_LIGHT_ENHANCE_MODE mode = EUABT_LOW_LIGHT_ENHANCE_MODE::LOW_LIGHT_ENHANCE_AUTO; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_LOW_LIGHT_ENHANCE_LEVEL level = EUABT_LOW_LIGHT_ENHANCE_LEVEL::LOW_LIGHT_ENHANCE_LEVEL_HIGH_QUALITY; }; public class LowlightEnhanceOptions { @@ -89,15 +78,15 @@ public: } }; export class LowlightEnhanceOptions { - + mode?: LowLightEnhanceMode; - + level?: LowLightEnhanceLevel; } export class LowlightEnhanceOptions { - + mode?: LowLightEnhanceMode; - + level?: LowLightEnhanceLevel; } class LowlightEnhanceOptions { @@ -114,7 +103,7 @@ public: _$LowlightEnhanceOptionsFromJson(json); Map<String, dynamic> toJson() => _$LowlightEnhanceOptionsToJson(this); -} +}

                    diff --git a/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita b/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita index b238eca1137..b6c61c33f32 100644 --- a/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_mediarecorderconfiguration.dita @@ -51,15 +51,15 @@ } } export class MediaRecorderConfiguration { - + public storagePath: string; - + public containerFormat: number = AgoraMediaRecorder.CONTAINER_MP4; - + public streamType: number = AgoraMediaRecorder.STREAM_TYPE_BOTH; - + public maxDurationMs: number = 120000; - + public recorderInfoUpdateInterval: number = 0; public constructor(storagePath: string, containerFormat: number, streamType: number, maxDurationMs: number, recorderInfoUpdateInterval: number) { @@ -138,16 +138,17 @@ struct FMediaRecorderConfiguration int recorderInfoUpdateInterval; }; export class MediaRecorderConfiguration { - storagePath?: string; - containerFormat?: MediaRecorderContainerFormat; - streamType?: MediaRecorderStreamType; - maxDurationMs?: number; - recorderInfoUpdateInterval?: number; + width?: number; + height?: number; + fps?: number; + sample_rate?: number; + channel_num?: number; + videoSourceType?: VideoSourceType; } public struct MediaRecorderConfiguration { public string storagePath; @@ -155,27 +156,41 @@ struct FMediaRecorderConfiguration public MediaRecorderStreamType streamType; public int maxDurationMs; public int recorderInfoUpdateInterval; + public int width; + public int height; + public int fps; + public int sample_rate; + public int channel_num; + public VIDEO_SOURCE_TYPE videoSourceType; }; export class MediaRecorderConfiguration { - storagePath?: string; - containerFormat?: MediaRecorderContainerFormat; - streamType?: MediaRecorderStreamType; - maxDurationMs?: number; - recorderInfoUpdateInterval?: number; + width?: number; + height?: number; + fps?: number; + sample_rate?: number; + channel_num?: number; + videoSourceType?: VideoSourceType; } - class MediaRecorderConfiguration { + @JsonSerializable(explicitToJson: true, includeIfNull: false) +class MediaRecorderConfiguration { const MediaRecorderConfiguration( {this.storagePath, this.containerFormat, this.streamType, this.maxDurationMs, - this.recorderInfoUpdateInterval}); + this.recorderInfoUpdateInterval, + this.width, + this.height, + this.fps, + this.sampleRate, + this.channelNum, + this.videoSourceType}); @JsonKey(name: 'storagePath') final String? storagePath; @@ -192,6 +207,24 @@ struct FMediaRecorderConfiguration @JsonKey(name: 'recorderInfoUpdateInterval') final int? recorderInfoUpdateInterval; + @JsonKey(name: 'width') + final int? width; + + @JsonKey(name: 'height') + final int? height; + + @JsonKey(name: 'fps') + final int? fps; + + @JsonKey(name: 'sample_rate') + final int? sampleRate; + + @JsonKey(name: 'channel_num') + final int? channelNum; + + @JsonKey(name: 'videoSourceType') + final VideoSourceType? videoSourceType; + factory MediaRecorderConfiguration.fromJson(Map<String, dynamic> json) => _$MediaRecorderConfigurationFromJson(json); diff --git a/en-US/dita/RTC-NG/API/class_mixedaudiostream.dita b/en-US/dita/RTC-NG/API/class_mixedaudiostream.dita index af64f1582ff..e579bd5960c 100644 --- a/en-US/dita/RTC-NG/API/class_mixedaudiostream.dita +++ b/en-US/dita/RTC-NG/API/class_mixedaudiostream.dita @@ -48,11 +48,66 @@ channelId(channel), trackId(track) {} }; - - - - -

                    + USTRUCT(BlueprintType) +struct FUABT_MixedAudioStream { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_AUDIO_SOURCE_TYPE sourceType = EUABT_AUDIO_SOURCE_TYPE::AUDIO_SOURCE_MICROPHONE; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + int64 remoteUserUid; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString channelName; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + int64 trackId; +}; + export class MixedAudioStream { + sourceType?: AudioSourceType; + remoteUserUid?: number; + channelId?: string; + trackId?: number; +} + public class MixedAudioStream +{ + public AUDIO_SOURCE_TYPE sourceType; + public uint remoteUserUid; + public string channelId; + public uint trackId; + } + export class MixedAudioStream { + sourceType?: AudioSourceType; + remoteUserUid?: number; + channelId?: string; + trackId?: number; +} + class MixedAudioStream { + + const MixedAudioStream( + {this.sourceType, this.remoteUserUid, this.channelId, this.trackId}); + + @JsonKey(name: 'sourceType') + final AudioSourceType? sourceType; + + @JsonKey(name: 'remoteUserUid') + final int? remoteUserUid; + + @JsonKey(name: 'channelId') + final String? channelId; + + @JsonKey(name: 'trackId') + final int? trackId; + + factory MixedAudioStream.fromJson(Map<String, dynamic> json) => + _$MixedAudioStreamFromJson(json); + + Map<String, dynamic> toJson() => _$MixedAudioStreamToJson(this); +}

                    diff --git a/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita b/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita index 784722659b0..28bcf4c9f18 100644 --- a/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/class_recorderstreaminfo.dita @@ -12,9 +12,9 @@ public int recorderStreamType; } export class RecorderStreamInfo { - + public uid: number = 0; - + public channelId: string; public constructor() { this.uid = 0; @@ -50,20 +50,23 @@ struct FRecorderStreamInfo { int64 uid; }; - export class RecorderStreamInfo { - channelId?: string; - uid?: number; -} + RecorderStreamInfo { + channelId?: string; + uid?: number; + type?: RecorderStreamType; + } public class RecorderStreamInfo { public string channelId; public uint uid; + public RecorderStreamType type; }; - export class RecorderStreamInfo { - channelId?: string; - uid?: number; -} + RecorderStreamInfo { + channelId?: string; + uid?: number; + type?: RecorderStreamType; + } @JsonSerializable(explicitToJson: true, includeIfNull: false) class RecorderStreamInfo { const RecorderStreamInfo({this.channelId, this.uid}); @@ -74,6 +77,9 @@ class RecorderStreamInfo { @JsonKey(name: 'uid') final int? uid; + @JsonKey(name: 'type') + final RecorderStreamType? type; + factory RecorderStreamInfo.fromJson(Map<String, dynamic> json) => _$RecorderStreamInfoFromJson(json); diff --git a/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita b/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita index 4e67bc7ec9e..2b317a253aa 100644 --- a/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita +++ b/en-US/dita/RTC-NG/API/class_rtcengineconfig.dita @@ -18,7 +18,7 @@ public IMediaExtensionObserver mExtensionObserver; public LogConfig mLogConfig; public String mNativeLibPath; - public boolean mDomainLimit; + public boolean mDomainLimit; public void addExtension(String providerName) { mExtensionList.add(providerName); @@ -26,11 +26,12 @@ } export class RtcEngineConfig{ - public mContext:Context | null = null; - public mAppId:string | null = null; - public mEventHandler: IRtcEngineEventHandler | null = null; - public mLogConfig?:LogConfig; -} + public mContext:Context; + public mAppId:string; + public mEventHandler: IRtcEngineEventHandler ; + public mLogConfig?:LogConfig; + public areaCode: Constants.AreaCode = Constants.AreaCode.GLOB; + } __attribute__((visibility("default"))) @interface AgoraRtcEngineConfig: NSObject @property (copy, nonatomic) NSString * _Nullable appId; @@ -70,19 +71,19 @@ struct FRtcEngineContext EAgoraBPuEventHandlerType EventHandlerCreationType = EAgoraBPuEventHandlerType::EventHandler; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FString appId = ""; - - + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") ECHANNEL_PROFILE_TYPE channelProfile = ECHANNEL_PROFILE_TYPE::CHANNEL_PROFILE_LIVE_BROADCASTING; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FString license = ""; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") EAUDIO_SCENARIO_TYPE audioScenario = EAUDIO_SCENARIO_TYPE::AUDIO_SCENARIO_DEFAULT; - - + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FENUMWRAP_AREA_CODE areaCode = EENUMCUSTOM_AREA_CODE::AREA_CODE_GLOB; - + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|RtcEngineContext") FLogConfig logConfig; @@ -100,11 +101,11 @@ struct FRtcEngineContext FRtcEngineContext() {} agora::rtc::RtcEngineContext CreateAgoraData() const { agora::rtc::RtcEngineContext AgoraData; - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.appId, this->appId) - + AgoraData.channelProfile = (agora::CHANNEL_PROFILE_TYPE)channelProfile; - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.license, this->license) AgoraData.audioScenario = (agora::rtc::AUDIO_SCENARIO_TYPE)audioScenario; AgoraData.areaCode = areaCode.GetRawValue(); @@ -113,7 +114,7 @@ struct FRtcEngineContext AgoraData.useExternalEglContext = useExternalEglContext; AgoraData.domainLimit = domainLimit; AgoraData.autoRegisterAgoraExtensions = autoRegisterAgoraExtensions; - + return AgoraData; } diff --git a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita index 8fbf87d3e53..edc5e9b753e 100644 --- a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -90,18 +90,30 @@ public: } public class ScreenCaptureConfiguration { + public bool isCaptureWindow; + public long displayId; + public Rectangle screenRect; + public long windowId; + + public ScreenCaptureParameters @params; + public Rectangle regionRect; + public ScreenCaptureConfiguration() { - isCaptureWindow = false; - displayId = 0; + this.isCaptureWindow = false; + this.displayId = 0; + this.windowId = 0; } - public bool isCaptureWindow { set; get; } - public uint displayId { set; get; } - public Rectangle screenRect { set; get; } - public uint windowId { set; get; } - public ScreenCaptureParameters parameters { set; get; } - public Rectangle regionRect { set; get; } + public ScreenCaptureConfiguration(bool isCaptureWindow, long displayId, Rectangle screenRect, long windowId, ScreenCaptureParameters @params, Rectangle regionRect) + { + this.isCaptureWindow = isCaptureWindow; + this.displayId = displayId; + this.screenRect = screenRect; + this.windowId = windowId; + this.@params = @params; + this.regionRect = regionRect; + } } export class ScreenCaptureConfiguration { diff --git a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita index 6646c19fc6c..aad86bbe8c6 100644 --- a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -143,7 +143,7 @@ public: public class ScreenCaptureSourceInfo { public ScreenCaptureSourceType type; - public view_t sourceId; + public long sourceId; public string sourceName; public ThumbImageBuffer thumbImage; public ThumbImageBuffer iconImage; @@ -151,7 +151,7 @@ public: public string sourceTitle; public bool primaryMonitor; public Rectangle position; - public view_t sourceDisplayId; + public long sourceDisplayId; }; class ScreenCaptureSourceInfo { diff --git a/en-US/dita/RTC-NG/API/class_snapshotconfig.dita b/en-US/dita/RTC-NG/API/class_snapshotconfig.dita index e48d3d35dbc..ddde0f2b569 100644 --- a/en-US/dita/RTC-NG/API/class_snapshotconfig.dita +++ b/en-US/dita/RTC-NG/API/class_snapshotconfig.dita @@ -22,10 +22,47 @@ media::base::VIDEO_MODULE_POSITION position; SnapshotConfig() :filePath(NULL), position(media::base::POSITION_PRE_ENCODER) {} }; - - - - + USTRUCT(BlueprintType) +struct FUABT_SnapshotConfig { + + GENERATED_BODY() + +public: + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FString filePath; + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_MODULE_POSITION position = EUABT_VIDEO_MODULE_POSITION::POSITION_PRE_ENCODER; +}; + export class SnapshotConfig { + filePath?: string; + position?: VideoModulePosition; +} + public class SnapshotConfig + { + public string filePath; + + public VIDEO_MODULE_POSITION position; + } + export class SnapshotConfig { + filePath?: string; + position?: VideoModulePosition; +} + class SnapshotConfig { + const SnapshotConfig({this.filePath, this.position}); + + @JsonKey(name: 'filePath') + final String? filePath; + + @JsonKey(name: 'position') + final VideoModulePosition? position; + + factory SnapshotConfig.fromJson(Map<String, dynamic> json) => + _$SnapshotConfigFromJson(json); + + Map<String, dynamic> toJson() => _$SnapshotConfigToJson(this); +}

                    diff --git a/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita b/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita index 2350ed96847..e4583f16d8a 100644 --- a/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita +++ b/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita @@ -50,32 +50,21 @@ }; USTRUCT(BlueprintType) -struct FVideoDenoiserOptions +struct FUABT_VideoDenoiserOptions { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoDenoiserOptions") - EVIDEO_DENOISER_MODE mode = EVIDEO_DENOISER_MODE::VIDEO_DENOISER_AUTO; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoDenoiserOptions") - EVIDEO_DENOISER_LEVEL level = EVIDEO_DENOISER_LEVEL::VIDEO_DENOISER_LEVEL_HIGH_QUALITY; - FVideoDenoiserOptions(){} - FVideoDenoiserOptions(const agora::rtc::VideoDenoiserOptions & AgoraData){ - mode = static_cast<EVIDEO_DENOISER_MODE>(AgoraData.mode); - level = static_cast<EVIDEO_DENOISER_LEVEL>(AgoraData.level); - } - agora::rtc::VideoDenoiserOptions CreateAgoraData() const { - agora::rtc::VideoDenoiserOptions AgoraData; - AgoraData.mode = static_cast<agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_MODE>(mode); - AgoraData.level = static_cast<agora::rtc::VideoDenoiserOptions::VIDEO_DENOISER_LEVEL>(level); - return AgoraData; - } - void FreeAgoraData(agora::rtc::VideoDenoiserOptions& AgoraData) const { - } + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_DENOISER_MODE mode = EUABT_VIDEO_DENOISER_MODE::VIDEO_DENOISER_AUTO; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_DENOISER_LEVEL level = EUABT_VIDEO_DENOISER_LEVEL ::VIDEO_DENOISER_LEVEL_HIGH_QUALITY; }; export class VideoDenoiserOptions { - + mode?: VideoDenoiserMode; - + level?: VideoDenoiserLevel; } public class VideoDenoiserOptions @@ -96,9 +85,9 @@ public: } }; export class VideoDenoiserOptions { - + mode?: VideoDenoiserMode; - + level?: VideoDenoiserLevel; } class VideoDenoiserOptions { @@ -114,7 +103,7 @@ public: _$VideoDenoiserOptionsFromJson(json); Map<String, dynamic> toJson() => _$VideoDenoiserOptionsToJson(this); -} +}

                    diff --git a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita index f08b7004a58..d964f9685b4 100644 --- a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -350,74 +350,47 @@ } }; USTRUCT(BlueprintType) -struct FVideoEncoderConfiguration +struct FUABT_VideoEncoderConfiguration { GENERATED_BODY() + public: - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EVIDEO_CODEC_TYPE codecType = EVIDEO_CODEC_TYPE::VIDEO_CODEC_NONE; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - FVideoDimensions dimensions = FVideoDimensions(); - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_CODEC_TYPE codecType = EUABT_VIDEO_CODEC_TYPE::VIDEO_CODEC_NONE; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FUABT_VideoDimensions dimensions = FUABT_VideoDimensions(); + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int frameRate = 15; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int bitrate = 0; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) int minBitrate = -1; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EORIENTATION_MODE orientationMode = EORIENTATION_MODE::ORIENTATION_MODE_ADAPTIVE; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EDEGRADATION_PREFERENCE degradationPreference = EDEGRADATION_PREFERENCE::MAINTAIN_QUALITY; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - EVIDEO_MIRROR_MODE_TYPE mirrorMode = EVIDEO_MIRROR_MODE_TYPE::VIDEO_MIRROR_MODE_DISABLED; - UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|VideoEncoderConfiguration") - FAdvanceOptions advanceOptions = FAdvanceOptions(); - FVideoEncoderConfiguration(){} - FVideoEncoderConfiguration(const agora::rtc::VideoEncoderConfiguration & AgoraData){ - codecType = static_cast<EVIDEO_CODEC_TYPE>(AgoraData.codecType); - dimensions = FVideoDimensions(AgoraData.dimensions); - frameRate = AgoraData.frameRate; - bitrate = AgoraData.bitrate; - minBitrate = AgoraData.minBitrate; - orientationMode = static_cast<EORIENTATION_MODE>(AgoraData.orientationMode); - degradationPreference = static_cast<EDEGRADATION_PREFERENCE>(AgoraData.degradationPreference); - mirrorMode = static_cast<EVIDEO_MIRROR_MODE_TYPE>(AgoraData.mirrorMode); - advanceOptions = FAdvanceOptions(AgoraData.advanceOptions); - } - agora::rtc::VideoEncoderConfiguration CreateAgoraData() const { - agora::rtc::VideoEncoderConfiguration AgoraData; - AgoraData.codecType = static_cast<agora::rtc::VIDEO_CODEC_TYPE>(codecType); - AgoraData.dimensions = dimensions.CreateAgoraData(); - AgoraData.frameRate = frameRate; - AgoraData.bitrate = bitrate; - AgoraData.minBitrate = minBitrate; - AgoraData.orientationMode = static_cast<agora::rtc::ORIENTATION_MODE>(orientationMode); - AgoraData.degradationPreference = static_cast<agora::rtc::DEGRADATION_PREFERENCE>(degradationPreference); - AgoraData.mirrorMode = static_cast<agora::rtc::VIDEO_MIRROR_MODE_TYPE>(mirrorMode); - AgoraData.advanceOptions = advanceOptions.CreateAgoraData(); - return AgoraData; - } - void FreeAgoraData(agora::rtc::VideoEncoderConfiguration& AgoraData) const { - dimensions.FreeAgoraData(AgoraData.dimensions); - advanceOptions.FreeAgoraData(AgoraData.advanceOptions); - } + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_ORIENTATION_MODE orientationMode = EUABT_ORIENTATION_MODE::ORIENTATION_MODE_ADAPTIVE; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_DEGRADATION_PREFERENCE degradationPreference = EUABT_DEGRADATION_PREFERENCE::MAINTAIN_QUALITY; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + EUABT_VIDEO_MIRROR_MODE_TYPE mirrorMode = EUABT_VIDEO_MIRROR_MODE_TYPE::VIDEO_MIRROR_MODE_DISABLED; + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) + FUABT_AdvanceOptions advanceOptions = FUABT_AdvanceOptions(); }; export class VideoEncoderConfiguration { - + codecType?: VideoCodecType; - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + minBitrate?: number; - + orientationMode?: OrientationMode; - + degradationPreference?: DegradationPreference; - + mirrorMode?: VideoMirrorModeType; advanceOptions?: AdvanceOptions; @@ -500,21 +473,21 @@ public: } } export class VideoEncoderConfiguration { - + codecType?: VideoCodecType; - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + minBitrate?: number; - + orientationMode?: OrientationMode; - + degradationPreference?: DegradationPreference; - + mirrorMode?: VideoMirrorModeType; advanceOptions?: AdvanceOptions; @@ -562,7 +535,7 @@ public: _$VideoEncoderConfigurationFromJson(json); Map<String, dynamic> toJson() => _$VideoEncoderConfigurationToJson(this); -} +}

                    diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index 675475f9c7b..dbe44d6cd9e 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -559,6 +559,7 @@ struct FVideoFrame { alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } public class VideoFrame { @@ -607,6 +608,10 @@ struct FVideoFrame { public byte[] alphaBuffer; public ALPHA_STITCH_MODE alphaStitchMode; + + public IVideoFrameMetaInfo metaInfo; + + public ColorSpace colorSpace; }; export class VideoFrame { @@ -646,6 +651,7 @@ struct FVideoFrame { alphaStitchMode?: AlphaStitchMode; + colorSpace?: ColorSpace; } @JsonSerializable(explicitToJson: true, includeIfNull: false) class VideoFrame { @@ -669,7 +675,8 @@ class VideoFrame { this.alphaBuffer, this.alphaStitchMode, this.pixelBuffer, - this.metaInfo}); + this.metaInfo; + this.colorSpace}); @JsonKey(name: 'type') final VideoPixelFormat? type; @@ -732,6 +739,9 @@ class VideoFrame { @JsonKey(name: 'metaInfo') final VideoFrameMetaInfo? metaInfo; + @JsonKey(name: 'colorSpace') + final ColorSpace? colorSpace; + factory VideoFrame.fromJson(Map<String, dynamic> json) => _$VideoFrameFromJson(json); diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap index ec9e6afed07..ff2b336b4bf 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-blueprint.ditamap @@ -1215,6 +1215,20 @@ + + + + SetLocalRenderTargetFps + + + + + + + SetRemoteRenderTargetFps + + + @@ -1310,6 +1324,20 @@ + + + + GetFaceShapeAreaOptions + + + + + + + GetFaceShapeBeautyOptions + + + @@ -1345,6 +1373,27 @@ + + + + SetFaceShapeAreaOptions + + + + + + + SetFaceShapeBeautyOptions + + + + + + + SetFilterEffectOptions + + + @@ -1592,6 +1641,13 @@ + + + + TakeSnapshotWithConfigEx + + + @@ -2726,6 +2782,29 @@ + + + + + StartLocalAudioMixer + + + + + + + StopLocalAudioMixer + + + + + + + UpdateLocalAudioMixerConfiguration + + + + @@ -4018,6 +4097,13 @@ + + + + TakeSnapshotWithConfig + + + @@ -5407,6 +5493,27 @@ + + + + FUABT_FaceShapeAreaOptions + + + + + + + FUABT_FaceShapeBeautyOptions + + + + + + + FUABT_FilterEffectOptions + + + @@ -5533,10 +5640,24 @@ + + + + FUABT_MixedAudioStream + + + + + + + FUABT_LocalAudioMixerConfiguration + + + - FLowlightEnhanceOptions + FUABT_LowlightEnhanceOptions @@ -5676,7 +5797,7 @@ - FRtcConnection + FUABT_RtcConnection @@ -5764,6 +5885,13 @@ + + + + FUABT_SnapshotConfig + + + @@ -5837,21 +5965,21 @@ - FVideoDenoiserOptions + FUABT_VideoDenoiserOptions - FVideoDimensions + FUABT_VideoDimensions - FVideoEncoderConfiguration + FUABT_VideoEncoderConfiguration @@ -5934,6 +6062,69 @@ + + + + EUABT_AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -6592,6 +6783,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -8212,7 +8410,14 @@ - EDEGRADATION_PREFERENCE + EUABT_DEGRADATION_PREFERENCE + + + + + + + MAINTAIN_AUTO @@ -8846,6 +9051,125 @@ + + + + EUABT_FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + EUABT_FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -9556,7 +9880,7 @@ - ELOW_LIGHT_ENHANCE_LEVEL + EUABT_LOW_LIGHT_ENHANCE_LEVEL @@ -10060,7 +10384,7 @@ - EMEDIA_SOURCE_TYPE + EUABT_MEDIA_SOURCE_TYPE @@ -10354,7 +10678,7 @@ - EORIENTATION_MODE + EUABT_ORIENTATION_MODE @@ -10900,7 +11224,7 @@ - FAdvanceOptions + FUABT_AdvanceOptions @@ -11716,6 +12040,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -11796,7 +12127,7 @@ - EVIDEO_DENOISER_LEVEL + EUABT_VIDEO_DENOISER_LEVEL @@ -11824,7 +12155,7 @@ - EVIDEO_SOURCE_TYPE + EUABT_VIDEO_SOURCE_TYPE @@ -12034,7 +12365,7 @@ - EVIDEO_CODEC_TYPE + EUABT_VIDEO_CODEC_TYPE @@ -12223,7 +12554,7 @@ - EVIDEO_MIRROR_MODE_TYPE + EUABT_VIDEO_MIRROR_MODE_TYPE @@ -12251,7 +12582,7 @@ - EVIDEO_MODULE_POSITION + EUABT_VIDEO_MODULE_POSITION @@ -12934,4 +13265,4 @@ - \ No newline at end of file + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 62f937fcd3e..8be293ba31c 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -3971,21 +3971,17 @@ - + - href="../API/api_iaudiodevicemanager_setrecordingdevicemute.dita" - setRecordingDeviceMute - + setRecordingDeviceMute - + - href="../API/api_iaudiodevicemanager_getrecordingdevicemute.dita" - getRecordingDeviceMute - + getRecordingDeviceMute diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index f042a9914db..fa99e0bd3c3 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -1108,6 +1108,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1203,6 +1217,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1238,6 +1266,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1452,6 +1501,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -2424,6 +2480,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -2941,6 +3020,20 @@ + + + + setRecordingDeviceMute + + + + + + + getRecordingDeviceMute + + + @@ -3473,6 +3566,13 @@ + + + + takeSnapshotWithConfig + + + @@ -4827,6 +4927,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -4943,6 +5064,20 @@ MediaSource + + + + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration @@ -5149,20 +5284,27 @@ - - - - SpatialAudioParams - - - - - - - SpatialAudioZone - - - + + + + SnapshotConfig + + + + + + + SpatialAudioParams + + + + + + + SpatialAudioZone + + + @@ -5690,6 +5832,69 @@ + + + + AudioSourceType + + + + + + + AudioSourceMicrophone + + + + + + + AudioSourceCustom + + + + + + + AudioSourceMediaPlayer + + + + + + + AudioSourceLoopbackRecording + + + + + + + AudioSourceMixedStream + + + + + + + AudioSourceRemoteUser + + + + + + + AudioSourceRemoteChannel + + + + + + + AudioSourceUnknown + + + @@ -5872,6 +6077,13 @@ + + + + PreferCompressionAuto + + + @@ -7629,6 +7841,13 @@ + + + + MaintainAuto + + + @@ -8256,6 +8475,125 @@ ExperienceQualityBad + + + + + + + FaceShapeArea + + + + + + + FaceShapeAreaNone + + + + + + + FaceShapeAreaHeadscale + + + + + + + FaceShapeAreaForehead + + + + + + + FaceShapeAreaFacecontour + + + + + + + FaceShapeAreaFacelength + + + + + + + FaceShapeAreaFacewidth + + + + + + + FaceShapeAreaCheekbone + + + + + + + FaceShapeAreaCheek + + + + + + + FaceShapeAreaChin + + + + + + + FaceShapeAreaEyescale + + + + + + + FaceShapeAreaNoselength + + + + + + + FaceShapeAreaNosewidth + + + + + + + FaceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + FaceShapeBeautyStyleFemale + + + + + + + FaceShapeBeautyStyleMale @@ -9015,6 +9353,13 @@ + + + + MediaDeviceStatePluggedIn + + + @@ -10163,6 +10508,27 @@ + + + + RecorderStreamType + + + + + + + Rtc + + + + + + + Preview + + + @@ -10807,6 +11173,13 @@ + + + + ApplicationScenarioLiveshow + + + @@ -10898,7 +11271,7 @@ - + VideoDenoiserLevelStrength diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 96fafab5e72..2440540f108 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -1151,6 +1151,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1246,6 +1260,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1281,6 +1309,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1495,6 +1544,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -1581,6 +1637,13 @@ + + + + setExternalMediaProjection + + + @@ -2441,6 +2504,13 @@ + + + + setExternalRemoteEglContext + + + @@ -2500,6 +2570,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -3160,6 +3253,20 @@ + + + + setRecordingDeviceMute + + + + + + + getRecordingDeviceMute + + + @@ -3610,6 +3717,13 @@ + + + + takeSnapshotWithConfig + + + @@ -4728,13 +4842,6 @@ - - - - AudioTrackConfig - - - @@ -4742,6 +4849,13 @@ + + + + AudioTrackConfig + + + @@ -4903,6 +5017,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5015,6 +5150,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5232,6 +5381,13 @@ + + + + SnapshotConfig + + + @@ -5948,6 +6104,13 @@ + + + + preferCompressionAuto + + + @@ -6858,6 +7021,69 @@ + + + + AudioSourceType + + + + + + + audioSourceMicrophone + + + + + + + audioSourceCustom + + + + + + + audioSourceMediaPlayer + + + + + + + audioSourceLoopbackRecording + + + + + + + audioSourceMixedStream + + + + + + + audioSourceRemoteUser + + + + + + + audioSourceRemoteChannel + + + + + + + audioSourceUnknown + + + @@ -7502,6 +7728,13 @@ + + + + maintainAuto + + + @@ -8132,6 +8365,125 @@ + + + + FaceShapeArea + + + + + + + faceShapeAreaNone + + + + + + + faceShapeAreaHeadscale + + + + + + + faceShapeAreaForehead + + + + + + + faceShapeAreaFacecontour + + + + + + + faceShapeAreaFacelength + + + + + + + faceShapeAreaFacewidth + + + + + + + faceShapeAreaCheekbone + + + + + + + faceShapeAreaCheek + + + + + + + faceShapeAreaChin + + + + + + + faceShapeAreaEyescale + + + + + + + faceShapeAreaNoselength + + + + + + + faceShapeAreaNosewidth + + + + + + + faceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + faceShapeBeautyStyleFemale + + + + + + + faceShapeBeautyStyleMale + + + @@ -8895,6 +9247,13 @@ + + + + mediaDeviceStatePluggedIn + + + @@ -10190,6 +10549,27 @@ + + + + RecorderStreamType + + + + + + + rtc + + + + + + + preview + + + @@ -10820,6 +11200,13 @@ + + + + applicationScenarioLiveshow + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index 80eba449e27..1baa2330cc7 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -1136,6 +1136,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1220,13 +1234,6 @@ - - - - FocalLengthInfo - - - @@ -1245,6 +1252,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1280,6 +1301,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1487,6 +1529,13 @@ + + + + takeSnapshotWithConfigEx + + + @@ -1580,6 +1629,13 @@ + + + + setExternalMediaProjection + + + @@ -2405,6 +2461,13 @@ + + + + setExternalRemoteEglContext + + + @@ -2464,6 +2527,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -3452,6 +3538,13 @@ + + + + takeSnapshotWithConfig + + + @@ -4787,6 +4880,34 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + + + + + FocalLengthInfo + + + @@ -4899,6 +5020,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5087,6 +5222,13 @@ SimulcastStreamConfig + + + + + SnapshotConfig + + @@ -5629,6 +5771,69 @@ + + + + AudioSourceType + + + + + + + AudioSourceMicrophone + + + + + + + AudioSourceCustom + + + + + + + AudioSourceMediaPlayer + + + + + + + AudioSourceLoopbackRecording + + + + + + + AudioSourceMixedStream + + + + + + + AudioSourceRemoteUser + + + + + + + AudioSourceRemoteChannel + + + + + + + AudioSourceUnknown + + + @@ -5853,6 +6058,13 @@ + + + + PreferCompressionAuto + + + @@ -7645,6 +7857,13 @@ + + + + MaintainAuto + + + @@ -8275,6 +8494,125 @@ + + + + FaceShapeArea + + + + + + + FaceShapeAreaNone + + + + + + + FaceShapeAreaHeadscale + + + + + + + FaceShapeAreaForehead + + + + + + + FaceShapeAreaFacecontour + + + + + + + FaceShapeAreaFacelength + + + + + + + FaceShapeAreaFacewidth + + + + + + + FaceShapeAreaCheekbone + + + + + + + FaceShapeAreaCheek + + + + + + + FaceShapeAreaChin + + + + + + + FaceShapeAreaEyescale + + + + + + + FaceShapeAreaNoselength + + + + + + + FaceShapeAreaNosewidth + + + + + + + FaceShapeAreaMouthscale + + + + + + + FaceShapeBeautyStyle + + + + + + + FaceShapeBeautyStyleFemale + + + + + + + FaceShapeBeautyStyleMale + + + @@ -8975,6 +9313,13 @@ + + + + MediaDeviceStatePluggedIn + + + @@ -10130,6 +10475,27 @@ + + + + RecorderStreamType + + + + + + + Rtc + + + + + + + Preview + + + @@ -10767,6 +11133,13 @@ + + + + ApplicationScenarioLiveshow + + + @@ -10858,7 +11231,7 @@ - + VideoDenoiserLevelStrength diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index b6083d7ce2f..a0f58388058 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -1089,6 +1089,20 @@ + + + + SetLocalRenderTargetFps + + + + + + + SetRemoteRenderTargetFps + + + @@ -1177,6 +1191,20 @@ + + + + GetFaceShapeAreaOptions + + + + + + + GetFaceShapeBeautyOptions + + + @@ -1219,6 +1247,27 @@ + + + + SetFaceShapeAreaOptions + + + + + + + SetFaceShapeBeautyOptions + + + + + + + SetFilterEffectOptions + + + @@ -1506,7 +1555,14 @@ - TakeSnapshotEx + TakeSnapshotEx [1/2] + + + + + + + TakeSnapshotEx [2/2] @@ -1610,6 +1666,13 @@ + + + + SetExternalMediaProjection + + + @@ -2509,6 +2572,13 @@ + + + + SetExternalRemoteEglContext + + + @@ -2568,6 +2638,29 @@ + + + + + StartLocalAudioMixer + + + + + + + StopLocalAudioMixer + + + + + + + UpdateLocalAudioMixerConfiguration + + + + @@ -3304,14 +3397,14 @@ - + SetRecordingDeviceMute - + GetRecordingDeviceMute @@ -3682,7 +3775,14 @@ - TakeSnapshot + TakeSnapshot [1/2] + + + + + + + TakeSnapshot [2/2] @@ -5030,6 +5130,27 @@ ExtensionContext + + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + @@ -5157,6 +5278,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5362,6 +5497,13 @@ + + + + SnapshotConfig + + + @@ -6883,6 +7025,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -6925,6 +7074,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -7037,6 +7249,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -7863,6 +8082,13 @@ + + + + MAINTAIN_AUTO + + + @@ -8556,6 +8782,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -9256,6 +9601,13 @@ + + + + MEDIA_DEVICE_STATE_PLUGGED_IN + + + @@ -10698,6 +11050,27 @@ + + + + RecorderStreamType + + + + + + + RTC + + + + + + + PREVIEW + + + diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index e4216b8eb72..2785b01950e 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -1166,6 +1166,20 @@ + + + + setLocalRenderTargetFps + + + + + + + setRemoteRenderTargetFps + + + @@ -1261,6 +1275,20 @@ + + + + getFaceShapeAreaOptions + + + + + + + getFaceShapeBeautyOptions + + + @@ -1296,6 +1324,27 @@ + + + + setFaceShapeAreaOptions + + + + + + + setFaceShapeBeautyOptions + + + + + + + setFilterEffectOptions + + + @@ -1543,6 +1592,13 @@ + + + + takeSnapshotEx [2/2] + + + @@ -1685,6 +1741,13 @@ + + + + setExternalMediaProjection + + + @@ -2611,6 +2674,13 @@ + + + + setExternalRemoteEglContext + + + @@ -2684,6 +2754,29 @@ + + + + + startLocalAudioMixer + + + + + + + stopLocalAudioMixer + + + + + + + updateLocalAudioMixerConfiguration + + + + @@ -3955,6 +4048,13 @@ + + + + takeSnapshot [2/2] + + + @@ -5344,6 +5444,27 @@ + + + + FaceShapeAreaOptions + + + + + + + FaceShapeBeautyOptions + + + + + + + FilterEffectOptions + + + @@ -5477,6 +5598,20 @@ + + + + MixedAudioStream + + + + + + + LocalAudioMixerConfiguration + + + @@ -5708,6 +5843,13 @@ + + + + SnapshotConfig + + + @@ -6242,6 +6384,69 @@ + + + + AUDIO_SOURCE_TYPE + + + + + + + AUDIO_SOURCE_MICROPHONE + + + + + + + AUDIO_SOURCE_CUSTOM + + + + + + + AUDIO_SOURCE_MEDIA_PLAYER + + + + + + + AUDIO_SOURCE_LOOPBACK_RECORDING + + + + + + + AUDIO_SOURCE_MIXED_STREAM + + + + + + + AUDIO_SOURCE_REMOTE_USER + + + + + + + AUDIO_SOURCE_REMOTE_CHANNEL + + + + + + + AUDIO_SOURCE_UNKNOWN + + + @@ -6536,6 +6741,13 @@ + + + + PREFER_COMPRESSION_AUTO + + + @@ -8300,6 +8512,13 @@ + + + + MAINTAIN_AUTO + + + @@ -8930,6 +9149,125 @@ + + + + FACE_SHAPE_AREA + + + + + + + FACE_SHAPE_AREA_NONE + + + + + + + FACE_SHAPE_AREA_HEADSCALE + + + + + + + FACE_SHAPE_AREA_FOREHEAD + + + + + + + FACE_SHAPE_AREA_FACECONTOUR + + + + + + + FACE_SHAPE_AREA_FACELENGTH + + + + + + + FACE_SHAPE_AREA_FACEWIDTH + + + + + + + FACE_SHAPE_AREA_CHEEKBONE + + + + + + + FACE_SHAPE_AREA_CHEEK + + + + + + + FACE_SHAPE_AREA_CHIN + + + + + + + FACE_SHAPE_AREA_EYESCALE + + + + + + + FACE_SHAPE_AREA_NOSELENGTH + + + + + + + FACE_SHAPE_AREA_NOSEWIDTH + + + + + + + FACE_SHAPE_AREA_MOUTHSCALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_FEMALE + + + + + + + FACE_SHAPE_BEAUTY_STYLE_MALE + + + @@ -11093,6 +11431,27 @@ + + + + RecorderStreamType + + + + + + + RTC + + + + + + + PREVIEW + + + @@ -11793,6 +12152,13 @@ + + + + APPLICATION_SCENARIO_LIVESHOW + + + @@ -13515,4 +13881,4 @@ - \ No newline at end of file + From 097ec408432ec9c26149d640e84701eb818a246e Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 15:59:29 +0800 Subject: [PATCH 338/354] update 4.5.0 framework en release --- dita/RTC-NG/release/release_notes.dita | 4 +- en-US/dita/RTC-NG/release/release_notes.dita | 45 ++++++++++---------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index fe93f018b77..bcbfb9b5b2b 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -139,7 +139,7 @@
                  • 其他
                    • 回调新增 枚举,表示当前正在使用的视频采集设备已经断开连接(例如,被拔出)。(Windows)
                    • -
                    • 新增 枚举,表示设备已插入。
                    • +
                    • 新增 枚举,表示设备已插入。(Windows)
                  • @@ -182,7 +182,7 @@
                  • 在播放音乐内容中心的音乐资源时,偶现杂音和卡顿。(Android)
                  • 在 App 没有获取麦克风权限时,通过 播放伴奏音乐偶现卡顿。(Android)
                  • 音视频互动过程中被系统来电打断后,通过 回调上报的用户音量错误。(Android)
                  • -
                  • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
                  • +
                  • 在接收端默认订阅视频小流、加入频道时不自动订阅任何视频流的前提下,加入频道后调用 (uid,false) 恢复接收视频流,但接收到的视频流为视频大流,不符合预期。(Android)
                  • Windows 7 系统下进行音视频互动,偶现找不到系统文件的报错。(Windows)
                  • 调用 设置 SDK 使用的音频采集或播放设备不跟随系统默认的音频播放设备,当音频设备被移除时,本地音频状态回调 没有被触发,不符合预期。(Windows)
                  • 音视频互动过程中,偶现接收端听发送端没有声音。(iOS)
                  • diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 64ba335eff8..924cdbe483c 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -17,8 +17,9 @@

                    As of v4.5.0, both RTC SDK and RTM SDK (v2.2.0 and above) include the aosl.dll library. If you manually integrate RTC SDK via CDN and also use RTM SDK, delete the lower version of the aosl.dll library to avoid conflicts. The aosl.dll library version in RTC SDK v4.5.0 is 1.2.13. You can check the version by viewing the aosl.dll file properties.

                      -
                    1. Member Parameter Type Changes -

                      To enhance the adaptability of various frameworks to the Native SDK, this version has made the following modifications to some API members or parameters: +

                    2. Member Parameter Type Changes +

                      To enhance the adaptability of various frameworks to the Native SDK, this version has made the following modifications to some API members or parameters: + This version has made the following modifications to some API members or parameters:

            82. @@ -32,7 +33,7 @@ - + displayId Changed from uint32_t to int64_t @@ -74,8 +75,8 @@

              Instead, after enabling video denoising by calling , you can call the method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in .

              Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in .

              -
            83. Changes in camera plug and unplug status (macOS, Windows) -

              In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

              +
            84. Changes in camera plug and unplug status (macOS, Windows) +

              In previous versions, when the camera was unplugged and replugged, the callback would report the device status as (1) (device in use). Starting from this version, after the camera is replugged, the device status will change to (0) (device ready).

              In previous versions, the camera would not automatically resume capture after being unplugged and replugged. Starting from this version, the camera will automatically resume capture after being replugged.

            85. Changes in video encoding preferences @@ -112,7 +113,7 @@

              This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

              In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance.

            86. -
            87. Watching live streaming through URLs +
            88. Watching live streaming through URLs

              As of this version, audience members can directly open a specific URL to play the real-time media stream through , instead of joining a channel and subscribing to the streams of hosts, which greatly simplifies the API calls for the audience end to watch a live stream.

            89. Filter effects @@ -132,7 +133,7 @@

              This version introduces the method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK.

              If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture.

            90. -
            91. EGL context (Android) +
            92. EGL context (Android)

              This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

            93. Color space settings @@ -140,8 +141,8 @@
            94. Others
                -
              • callback adds the enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows)
              • -
              • adds the enumeration, indicating that the device has been plugged in.
              • +
              • callback adds the enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows)
              • +
              • adds the enumeration, indicating that the device has been plugged in. (Windows)
            95. @@ -181,21 +182,21 @@

              This version fixes the following issues:

                -
              • When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
              • -
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
              • -
              • Occasional noise and stuttering when playing music resources from the music content center. (Android)
              • +
              • When calling to share the screen, the window capture area specified by regionRect was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows)
              • +
              • When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS)
              • +
              • Occasional noise and stuttering when playing music resources from the music content center. (Android)
              • Occasional stuttering when playing accompaniment music through without microphone permission in the app. (Android)
              • -
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
              • -
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
              • -
              • Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
              • -
              • When calling or to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback is not triggered when the audio device is removed, which is not as expected. (Windows)
              • -
              • Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
              • -
              • During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
              • -
              • In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
              • -
              • No sound when playing online media resources using the media player after the app starts. (iOS)
              • -
              • Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
              • +
              • During audio and video interaction, after being interrupted by a system call, the user volume reported by the callback was incorrect. (Android)
              • +
              • When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling (uid, false) after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android)
              • +
              • Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows)
              • +
              • When calling or to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback is not triggered when the audio device is removed, which is not as expected. (Windows)
              • +
              • Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS)
              • +
              • During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS)
              • +
              • In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
              • +
              • No sound when playing online media resources using the media player after the app starts. (iOS)
              • +
              • Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
              • Calling and then immediately calling to pause the music file playback does not take effect.
              • -
              • Occasional crashes during audio and video interaction.
              • +
              • Occasional crashes during audio and video interaction. (Android)
              From 0f4bdc5fb508f55745a6676f9fbcdbda8f39ba43 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 16:37:08 +0800 Subject: [PATCH 339/354] =?UTF-8?q?=E6=BC=8F=E7=BD=91=E9=B1=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 4 ++-- dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 2 +- dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 8be293ba31c..e508e48ccb3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -12132,7 +12132,7 @@ - + RecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index fa99e0bd3c3..983e466ad3c 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -3027,7 +3027,7 @@ - + getRecordingDeviceMute @@ -10508,7 +10508,7 @@ - + RecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 2440540f108..6350f1ae356 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -10549,7 +10549,7 @@ - + RecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index f8a329a2ddb..f4ae555934f 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -11283,7 +11283,7 @@ - + AgoraRecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 8029e0f5244..567589c09b6 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -10756,7 +10756,7 @@ - + AgoraRecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index 1baa2330cc7..14688433be3 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -3247,7 +3247,7 @@ kMusicPlayModeLeadSing - + @@ -10475,7 +10475,7 @@ - + RecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index a0f58388058..3dd95163ec8 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -11050,7 +11050,7 @@ - + RecorderStreamType diff --git a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index 2785b01950e..03158390efc 100644 --- a/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -11431,7 +11431,7 @@ - + RecorderStreamType From dadfcfa8803d85968f12d0097a6861a6f8dcfd23 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 08:38:19 +0000 Subject: [PATCH 340/354] Sync cn prototype to en prototype --- en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap | 2 +- en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap | 4 ++-- en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap | 2 +- en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap | 2 +- en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap | 2 +- en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap | 4 ++-- en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap | 2 +- en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap index 8be293ba31c..e508e48ccb3 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-cpp.ditamap @@ -12132,7 +12132,7 @@ - + RecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap index fa99e0bd3c3..983e466ad3c 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-electron.ditamap @@ -3027,7 +3027,7 @@ - + getRecordingDeviceMute @@ -10508,7 +10508,7 @@ - + RecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap index 2440540f108..6350f1ae356 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-flutter.ditamap @@ -10549,7 +10549,7 @@ - + RecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap index f8a329a2ddb..f4ae555934f 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-ios.ditamap @@ -11283,7 +11283,7 @@ - + AgoraRecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap index 8029e0f5244..567589c09b6 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-macos.ditamap @@ -10756,7 +10756,7 @@ - + AgoraRecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap index 1baa2330cc7..14688433be3 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-rn.ditamap @@ -3247,7 +3247,7 @@ kMusicPlayModeLeadSing - + @@ -10475,7 +10475,7 @@ - + RecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap index a0f58388058..3dd95163ec8 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unity.ditamap @@ -11050,7 +11050,7 @@ - + RecorderStreamType diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap index 2785b01950e..03158390efc 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-api-unreal.ditamap @@ -11431,7 +11431,7 @@ - + RecorderStreamType From 82574f4541389539d92b7d18eadcc44d74c15557 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 16:52:49 +0800 Subject: [PATCH 341/354] 4.5.0 unity release --- .../en-US/framework/release_unity_ng.md | 128 +++++++++++++++++- 1 file changed, 124 insertions(+), 4 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md index fe8fee87ef3..2602ef4d8b6 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md @@ -1,13 +1,133 @@ ## Known issues and limitations -**Android 14 screen sharing issue (Android)** - -On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. - **AirPods Pro Bluetooth connection issue (iOS)** AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. **Member Parameter Type Changes** + + This version has made the following modifications to some API members or parameters: + + | API | Members/Parameters | Change | + | ------------------------------ | ---------------------------------------------------------- | ---------------------------- | + | `StartScreenCaptureByWindowId` | **windowId** | Changed from view_t to long | + | `ScreenCaptureConfiguration` |
              • **displayId**
              • **windowId**
              | Changed from unit to long | + | `ScreenCaptureSourceInfo` |
              • **sourceDisplayId**
              • **sourceId**
              | Changed from view_t to long | + +2. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. + + The `VIDEO_DENOISER_LEVEL` removes `VIDEO_DENOISER_LEVEL_STRENGTH`. + + Instead, after enabling video denoising by calling `SetVideoDenoiserOptions`, you can call the `SetBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `SetVideoDenoiserOptions`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `SetLowlightEnhanceOptions`. + +3. **Changes in camera plug and unplug status (macOS, Windows)** + + In previous versions, when the camera was unplugged and replugged, the `OnVideoDeviceStateChanged` callback would report the device status as `MEDIA_DEVICE_STATE_ACTIVE`(1) (device in use). Starting from this version, after the camera is replugged, the device status will change to `MEDIA_DEVICE_STATE_IDLE`(0) (device ready). + +4. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. + - In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +1. **Live show scenario** + + This version adds the `APPLICATION_SCENARIO_LIVESHOW`(3) (Live Show) enumeration to the `VIDEO_APPLICATION_SCENARIO_TYPE`. You can call `SetVideoScenario` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. + +2. **Maximum frame rate for video rendering** + + This version adds the `SetLocalRenderTargetFps` and `SetRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Filter effects** + + This version introduces the `SetFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +4. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `StartLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `StopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `UpdateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +5. **External MediaProjection (Android)** + + This version introduces the `SetExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the `MediaProjection` applied by the SDK. + + If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. + +6. **EGL context (Android)** + + This version introduces the `SetExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. + +7. **Color space settings** + + This version adds the **colorSpace** parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +8. **Others** + + - `OnLocalVideoStateChanged` callback adds the `LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) + - `MEDIA_DEVICE_STATE_TYPE` adds the `MEDIA_DEVICE_STATE_PLUGGED_IN` enumeration, indicating that the device has been plugged in. (Windows) + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `TakeSnapshot [2/2]` and `TakeSnapshotEx [2/2]` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS) + - Optimizes the logic for calling `QueryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - Supports using virtual cameras in YV12 format as video capture devices. (Windows) + - When calling `SwitchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `OnPlayerEvent` callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. + - When calling `SetPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Bug fixes + +This version fixes the following issues: + +- When calling `StartScreenCaptureByWindowId` to share the screen, the window capture area specified by **regionRect** was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS) +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `OnAudioVolumeIndication` callback was incorrect. (Android) +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `MuteRemoteVideoStream``(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android) +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows) +- When calling `FollowSystemRecordingDevice` or `FollowSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `OnLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. (Windows) +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS) +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS) +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS) +- No sound when playing online media resources using the media player after the app starts. (iOS) +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS) +- Calling `StartAudioMixing [1/2]` and then immediately calling `PauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. (Android) + ## v4.4.0 This version was released on August x, 2024. From 9b93e71127f171d3c624501dd4042bcd07ccb955 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Mon, 25 Nov 2024 17:04:01 +0800 Subject: [PATCH 342/354] flutter 450 release --- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- .../en-US/framework/release_flutter_ng.md | 129 ++++++++++++++---- .../en-US/framework/release_unity_ng.md | 2 +- 3 files changed, 108 insertions(+), 25 deletions(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 924cdbe483c..7d009d26396 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -178,7 +178,7 @@ - Bug fixes + Issues fixed

              This version fixes the following issues:

                diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md index 3085667681c..3d177abb911 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md @@ -1,28 +1,42 @@ ## Known issues and limitations -**Android 14 screen sharing issue (Android)** - -On Android 14 devices (such as OnePlus 11), screen sharing may not be available when `targetSdkVersion` is set to 34. For example, half of the shared screen may be black. To avoid this issue, Agora recommends setting `targetSdkVersion` to 34 or below. However, this may cause the screen sharing process to be interrupted when switching between portrait and landscape mode. In this case, a window will pop up on the device asking if you want to start recording the screen. After confirming, you can resume screen sharing. - **AirPods Pro Bluetooth connection issue (iOS)** AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v6.5.0 +This version was released on November x, 2024. +#### Compatibility changes -## v6.4.0 +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. -This version was released on August x, 2024. +1. **Changes in strong video denoising implementation** -#### Compatibility changes + This version adjusts the implementation of strong video denoising. -This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + The `VideoDenoiserLevel` removes `videoDenoiserLevelStrength`. + + Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions`. + +2. **Changes in camera plug and unplug status (macOS, Windows)** + + In previous versions, when the camera was unplugged and replugged, the `onVideoDeviceStateChanged` callback would report the device status as mediaDeviceStateActive(1) (device in use). Starting from this version, after the camera is replugged, the device status will change to `mediaDeviceStateIdle`(0) (device ready). + +3. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: -1. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + - In the `CompressionPreference` enumeration class, a new `preferCompressionAuto` (-1) enumeration is added, replacing the original `preferQuality` (1) as the default value. In this mode, the SDK will automatically choose between `preferLowLatency` or `preferQuality` based on your video scene settings to achieve the best user experience. + - In the `DegradationPreference` enumeration class, a new `maintainAuto` (-1) enumeration is added, replacing the original `maintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `maintainFramerate`, `maintainBalanced`, or `maintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). - | Original callback | Current callback | - | ------------------ | ------------------------------- | +4. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. + + | Original callback | Current callback | + | -------------------- | ------------------------------- | | `onExtensionEvent` | `onExtensionEventWithContext` | | `onExtensionStarted` | `onExtensionStartedWithContext` | | `onExtensionStopped` | `onExtensionStoppedWithContext` | @@ -30,32 +44,90 @@ This version includes optimizations to some features, including changes to SDK b #### New features -1. **Voice AI tuner** +1. **Live show scenario** + + This version adds the `applicationScenarioLiveshow`(3) (Live Show) enumeration to the `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Filter effects** + + This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +4. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +5. **External MediaProjection (Android)** + + This version introduces the `setExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the `MediaProjection` applied by the SDK. + + If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. + +6. **EGL context (Android)** + + This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. + +7. **Color space settings** + + This version adds the **colorSpace** parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +8. **Voice AI tuner** This version introduces the voice AI tuner feature, which can enhance the sound quality and tone, similar to a physical sound card. You can enable the voice AI tuner feature by calling the `enableVoiceAITuner` method and passing in the sound effect types supported in the `VoiceAiTunerType` enum to achieve effects like deep voice, cute voice, husky singing voice, etc. -2. **1v1 video call scenario** +9. **1v1 video call scenario** This version adds `applicationScenario1v1` (1v1 video call) in `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video application scenario to 1v1 video call, the SDK optimizes performance to achieve low latency and high video quality, enhancing image quality, first frame rendering, latency on mid-to-low-end devices, and smoothness under poor network conditions. +10. **Others** + + - `onLocalVideoStateChanged` callback adds the `localVideoStreamReasonDeviceDisconnected` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) + - `MediaDeviceStateType` adds the `mediaDeviceStatePluggedIn` enumeration, indicating that the device has been plugged in. (Windows) + #### Improvements -1. **Adaptive hardware decoding support (Android, Windows)** +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshotWithConfig` and `takeSnapshotWithConfigEx` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Adaptive hardware decoding support (Android, Windows)** This release introduces adaptive hardware decoding support, enhancing rendering smoothness on low-end devices and effectively reducing system load. -2. **Rendering performance enhancement (Windows)** +5. **Rendering performance enhancement (Windows)** DirectX 11 renderer is now enabled by default on Windows devices, providing high-performance and high-quality graphics rendering capabilities. -3. **Facial region beautification** +6. **Facial region beautification** To avoid losing details in non-facial areas during heavy skin smoothing, this version improves the skin smoothing algorithm. The SDK now recognizes various parts of the face, applying smoothing to facial skin areas excluding the mouth, eyes, and eyebrows. In addition, the SDK supports smoothing up to two faces simultaneously. -4. **Other improvements** - - This version also includes the following improvements: +7. **Other Improvements** + - In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS) + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - Supports using virtual cameras in YV12 format as video capture devices. (Windows) + - When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `onPlayerEvent` callback will report the `playerEventSwitchError` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. - The `localVideoStreamReasonScreenCaptureDisplayDisconnected` enumerator is added in `onLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. (Windows, macOS) - Optimizes the video link for window sharing, reducing CPU usage. (macOS) @@ -65,16 +137,27 @@ This version includes optimizations to some features, including changes to SDK b #### Issues fixed -This release fixed the following issues: - +This version fixes the following issues: + +- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by **regionRect** was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS) +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. (Android) +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android) +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows) +- When calling `followSystemRecordingDevice` or `followSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `onLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. (Windows) +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS) +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS) +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS) +- No sound when playing online media resources using the media player after the app starts. (iOS) +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS) +- Calling `startAudioMixing`and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. (Android) - Occasional app crashes occurred when multiple remote users joined the channel simultaneously during real-time interaction. (iOS) - Remote video occasionally froze or displayed corrupted images when the app returned to the foreground after being in the background for a while. (iOS) - After the sender called `startDirectCdnStreaming` to start direct CDN streaming, frequent switching or toggling of the network occasionally resulted in a black screen on the receiver's end without a streaming failure callback on the sender's end. (iOS) - Audio playback failed when pushing external audio data using `pushAudioFrame` and the sample rate was not set as a recommended value, such as 22050 Hz and 11025 Hz. (Android, iOS) - - ## v6.3.2 This version was released on May x, 20xx. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md index 2602ef4d8b6..13edb452335 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md @@ -110,7 +110,7 @@ This version includes optimizations to some features, including changes to SDK b - When calling `SwitchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `OnPlayerEvent` callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. - When calling `SetPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. -#### Bug fixes +#### Issues fixed This version fixes the following issues: From 3ef5c5d3d22de099402cabd43e7865ef799ade44 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Tue, 26 Nov 2024 11:05:26 +0800 Subject: [PATCH 343/354] Update api_irtcengine_setlowlightenhanceoptions2.dita --- dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index d0517612f6e..8b3746be57b 100644 --- a/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -19,7 +19,7 @@ - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:sourceType:)); virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); From bed15336c28c3d71542ded23e7f4b5b5984d967f Mon Sep 17 00:00:00 2001 From: lemon-chen Date: Tue, 26 Nov 2024 03:06:04 +0000 Subject: [PATCH 344/354] Sync cn prototype to en prototype --- .../RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita index 281623e1968..7e9c03a7e98 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlowlightenhanceoptions2.dita @@ -19,7 +19,7 @@ - (int)setLowlightEnhanceOptions:(BOOL)enable options:(AgoraLowlightEnhanceOptions* _Nullable)options sourceType:(AgoraMediaSourceType)sourceType NS_SWIFT_NAME(setLowlightEnhanceOptions(_:options:sourceType:)); virtual int setLowlightEnhanceOptions(bool enabled, const LowlightEnhanceOptions& options, agora::media::MEDIA_SOURCE_TYPE type = agora::media::PRIMARY_CAMERA_SOURCE) = 0; UFUNCTION(BlueprintCallable, Category = "Agora|IRtcEngine") - int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); + int SetLowlightEnhanceOptions(bool enabled, const FUABT_LowlightEnhanceOptions& options, EUABT_MEDIA_SOURCE_TYPE type); From 25cf06469c7e15774c8a126e744acb56ecbb8e03 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 26 Nov 2024 11:38:31 +0800 Subject: [PATCH 345/354] ENDOC-575 --- dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita | 2 +- dita/RTC-NG/release/release_notes.dita | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita index d929855a308..0ea3f1babbf 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita @@ -78,7 +78,7 @@

              (2) 适用于场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

              -

              (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

              +

              (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,例如,默认开启音视频帧加速渲染来提升首帧出图体验,无需再额外调用 ,同时会默认开启 B 帧来确保较高的图像质量、提高传输效率。此外,也增强了在弱网环境和低端设备上的画质和流畅度表现。

              diff --git a/dita/RTC-NG/release/release_notes.dita b/dita/RTC-NG/release/release_notes.dita index bcbfb9b5b2b..54f0988b22f 100644 --- a/dita/RTC-NG/release/release_notes.dita +++ b/dita/RTC-NG/release/release_notes.dita @@ -103,7 +103,7 @@

            96. 秀场直播场景 -

              该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,重点提升了首帧出图体验和画质表现,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

              +

              该版本在 类下新增枚举 (3)(秀场直播),你可以调用 将视频业务场景设置为。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,例如,默认开启音视频帧加速渲染来提升首帧出图体验,无需再额外调用 ,同时增强了在弱网环境和低端设备上的画质和流畅度表现。

            97. 限制视频渲染帧率

              该版本新增 方法,支持设置视频在本地和远端渲染时的最大帧率,SDK 进行视频渲染的实际帧率会尽量接近该值。

              From bbe69486441a76fe6b8d6774632e29c4e0014f91 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 26 Nov 2024 11:41:03 +0800 Subject: [PATCH 346/354] Update api_irtcengine_setvideoscenario.dita --- dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita index 0ea3f1babbf..483f516bf3a 100644 --- a/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita +++ b/dita/RTC-NG/API/api_irtcengine_setvideoscenario.dita @@ -78,7 +78,7 @@

              (2) 适用于场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。

              -

              (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,例如,默认开启音视频帧加速渲染来提升首帧出图体验,无需再额外调用 ,同时会默认开启 B 帧来确保较高的图像质量、提高传输效率。此外,也增强了在弱网环境和低端设备上的画质和流畅度表现。

              +

              (3) 适用于场景。针对该场景对首帧出图时间和画质清晰度的高要求,SDK 进行了策略调优,例如,默认开启音视频帧加速渲染来提升首帧出图体验,无需再额外调用 ,同时会默认开启 B 帧来确保较高的图像质量、提高传输效率。此外,也增强了在弱网环境和低端设备上的画质和流畅度表现。

              From bb156501483171b033e1da72e754d38468264c31 Mon Sep 17 00:00:00 2001 From: Suri539 Date: Tue, 26 Nov 2024 17:36:28 +0800 Subject: [PATCH 347/354] ENDOC-575 --- en-US/dita/RTC-NG/release/release_notes.dita | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 924cdbe483c..136a2f5a016 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -107,7 +107,7 @@

            98. Live show scenario -

              This version adds the (3) (Live Show) enumeration to the . You can call to set the video business scenario to show room. To meet the high requirements for first frame rendering time and image quality in this scenario, the SDK has optimized strategies to significantly improve the first frame rendering experience and image quality, while enhancing the image quality in weak network environments and on low-end devices.

              +

              This version adds the (3) (Live Show) enumeration to the . You can call to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call ) to achieve better image quality and bandwidth efficiency.

            99. Maximum frame rate for video rendering

              This version adds the and methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible.

              From 808d352efe5d0901f0ebba86ed1b6e487c354113 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 27 Nov 2024 15:06:13 +0800 Subject: [PATCH 348/354] Create RTC_NG_Release_Blueprint.ditamap --- .../RTC-NG/RTC_NG_Release_Blueprint.ditamap | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 en-US/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap diff --git a/en-US/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap b/en-US/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap new file mode 100644 index 00000000000..0d1f2b4f643 --- /dev/null +++ b/en-US/dita/RTC-NG/RTC_NG_Release_Blueprint.ditamap @@ -0,0 +1,17 @@ + + + + Release Notes + + + + + + + + + + + + + From dd098a149f298e3ef464c9c5bcfb80e7b63ad58c Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 27 Nov 2024 16:05:38 +0800 Subject: [PATCH 349/354] add bp and unreal 450 release notes --- en-US/dita/RTC-NG/release/release_notes.dita | 5 +- .../en-US/framework/release_bluerprint_ng.md | 85 ++++++++++++- .../en-US/framework/release_unreal_ng.md | 117 +++++++++++++++++- 3 files changed, 197 insertions(+), 10 deletions(-) diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 7d009d26396..360b3277eba 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -195,8 +195,9 @@
            100. In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS)
            101. No sound when playing online media resources using the media player after the app starts. (iOS)
            102. Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS)
            103. -
            104. Calling and then immediately calling to pause the music file playback does not take effect.
            105. -
            106. Occasional crashes during audio and video interaction. (Android)
            107. +
            108. Calling and then immediately calling to pause the music file playback does not take effect.
            109. +
            110. Calling and then immediately calling to pause the music file playback does not take effect.
            111. +
            112. Occasional crashes during audio and video interaction. (Android)
            113. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md index c80bd08693f..9847741149a 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md @@ -9,6 +9,85 @@ The audio module of the Agora Unreal SDK is incompatible with the AudioMixer mod AudioMixerModuleName= ``` +## v4.5.0 +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Changes in strong video denoising implementation** +This version adjusts the implementation of strong video denoising. The `EUABT_VIDEO_DENOISER_LEVEL` removes the `VIDEO_DENOISER_LEVEL_STRENGTH` enumeration. Instead, after enabling video denoising by calling `SetVideoDenoiserOptions`, you can call the `SetBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `SetVideoDenoiserOptions`. + +Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `SetLowlightEnhanceOptions`. + +**Changes in camera plug and unplug status (macOS, Windows)** + +In previous versions, when the camera was unplugged and replugged, the OnVideoDeviceStateChanged callback would report the device status as `MEDIA_DEVICE_STATE_ACTIVE(1)` (device in use). Starting from this version, after the camera is replugged, the device status will change to `MEDIA_DEVICE_STATE_IDLE(0)` (device ready). + +**Changes in video encoding preferences** + +To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: +- In the `ECOMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO (-1)` enumeration is added, replacing the original `PREFER_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. +- In the `EUABT_DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO (-1)` enumeration is added, replacing the original `MAINTAIN_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +**Live show scenario** + +This version adds the `APPLICATION_SCENARIO_LIVESHOW(3)` (Live Show) enumeration to the `EVIDEO_APPLICATION_SCENARIO_TYPE`. You can call `SetVideoScenario` to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call `EnableInstantMediaRendering`) to achieve better image quality and bandwidth efficiency. + +**Maximum frame rate for video rendering** + +This version adds the `SetLocalRenderTargetFps` and `SetRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + +In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +**Filter effects** + +This version introduces the `SetFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +**Others** + +- The `OnLocalVideoStateChanged` callback adds the `LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) +- The `EMEDIA_DEVICE_STATE_TYPE` adds the `MEDIA_DEVICE_STATE_PLUGGED_IN` enumeration, indicating that the device has been plugged in. (Windows) + +#### Improvements + +**Virtual background algorithm optimization** + +This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +**Snapshot at specified video observation points** + +This version introduces the `TakeSnapshotWithConfig` and `TakeSnapshotWithConfigEx` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +**Others** + +- In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS) +- Optimizes the logic for calling `QueryDeviceScore` to obtain device score levels, improving the accuracy of the score results. +- Supports using virtual cameras in YV12 format as video capture devices. (Windows) +- When calling `SwitchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `OnPlayerEvent` callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. +- When calling `SetPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Issues fixed + +This version fixes the following issues: + +- When calling `StartScreenCaptureByWindowId` to share the screen, the window capture area specified by `regionRect` was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS) +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `OnAudioVolumeIndication` callback was incorrect. (Android) +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `MuteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android) +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows) +- When calling `FollowSystemRecordingDevice` or `FollowSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `OnLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. (Windows) +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS) +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS) +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS) +- No sound when playing online media resources using the media player after the app starts. (iOS) +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS) +- Calling `StartAudioMixing` and then immediately calling `PauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. (Android) + ## v4.4.0 This version releases on August xx, 2024. @@ -78,7 +157,7 @@ The image below demonstrates how to obtain the `EventHandler` through the [`GetE - The `CONTENT_INSPECT_IMAGE_MODERATION` enumeration is added in `ECONTENT_INSPECT_TYPE` which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter `serverConfig` is added in `FContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). - + Additionally, this version introduces the `EnableContentInspectEx` method, which supports simultaneous screenshot and upload of multiple video streams. 6. **Wildcard token** @@ -129,9 +208,9 @@ if (Target.Platform == UnrealTargetPlatform.IOS) ``` -## v4.2.1 +## v4.2.1 -This version was released on October xx, 2023. +This version was released on October xx, 2023. This is the first release of Video SDK for Unreal Blueprint. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md index 19464b000ca..240658f7327 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md @@ -9,6 +9,113 @@ The audio module of the Agora Unreal SDK is incompatible with the AudioMixer mod AudioMixerModuleName= ``` +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +**Changes in strong video denoising implementation** + +This version adjusts the implementation of strong video denoising. The `VIDEO_DENOISER_LEVEL` removes `VIDEO_DENOISER_LEVEL_STRENGTH`. Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. + +Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions`. + +**Changes in camera plug and unplug status (macOS, Windows)** + +In previous versions, when the camera was unplugged and replugged, the `onVideoDeviceStateChanged` callback would report the device status as `MEDIA_DEVICE_STATE_ACTIVE(1)` (device in use). Starting from this version, after the camera is replugged, the device status will change to `MEDIA_DEVICE_STATE_IDLE(0)` (device ready). + +**Changes in video encoding preferences** + +To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: +- In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO (-1)` enumeration is added, replacing the original `PREFER_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. +- In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO (-1)` enumeration is added, replacing the original `MAINTAIN_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +**Live show scenario** + +This version adds the `APPLICATION_SCENARIO_LIVESHOW(3)` (Live Show) enumeration to the `VIDEO_APPLICATION_SCENARIO_TYPE`. You can call `setVideoScenario` to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call `enableInstantMediaRendering`) to achieve better image quality and bandwidth efficiency. + +**Maximum frame rate for video rendering** + +This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + +In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +**Filter effects** + +This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +**Local audio mixing** + +This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + +Example use cases for this feature include: +- By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. +- In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. +- In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +**External MediaProjection (Android)** + +This version introduces the `setExternalMediaProjection` method, which allows you to set an external MediaProjection and replace the MediaProjection applied by the SDK. + +If you have the capability to apply for MediaProjection on your own, you can use this feature to achieve more flexible screen capture. + +**EGL context (Android)** + +This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. + +**Color space settings** + +This version adds the `colorSpace` parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +**Others** + +- The `onLocalVideoStateChanged` callback adds the `LOCAL_VIDEO_STREAM_REASON_DEVICE_DISCONNECTED` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) +- The `MEDIA_DEVICE_STATE_TYPE` adds the `MEDIA_DEVICE_STATE_PLUGGED_IN` enumeration, indicating that the device has been plugged in. (Windows) + +#### Improvements + +**Virtual background algorithm optimization** + +This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +**Snapshot at specified video observation points** + +This version introduces the `takeSnapshot [2/2]` and `takeSnapshotEx [2/2]` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +**Custom audio capture improvements** + +This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +**Other Improvements** + +- In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS) +- Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. +- Supports using virtual cameras in YV12 format as video capture devices. (Windows) +- When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `onPlayerEvent` callback will report the `PLAYER_EVENT_SWITCH_ERROR` event, indicating an error occurred during media resource switching. +- When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Issues fixed + +This version fixes the following issues: + +- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by `regionRect` was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. (Android, iOS) +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. (Android) +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android) +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows) +- When calling `followSystemRecordingDevice` or `followSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `onLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. (Windows) +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS) +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS) +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS) +- No sound when playing online media resources using the media player after the app starts. (iOS) +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS) +- Calling `startAudioMixing [1/2]` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. + ## v4.4.0 This version releases on August xx, 2024. @@ -67,7 +174,7 @@ In this release, the creation and destruction of engine instances use the [`Get` - The `CONTENT_INSPECT_IMAGE_MODERATION` enumeration is added in `CONTENT_INSPECT_TYPE` which means using video moderation extensions from Agora Extensions Marketplace to take video screenshots and upload them. - An optional parameter `serverConfig` is added in `ContentInspectConfig`, which is for server-side configuration related to video screenshot and upload via extensions from Agora Extensions Marketplace. By configuring this parameter, you can integrate multiple third-party moderation extensions and achieve flexible control over extension switches and other features. For more details, please contact [technical support](mailto:support@agora.io). - + Additionally, this version introduces the `enableContentInspectEx` method, which supports simultaneous screenshot and upload of multiple video streams. 6. **ID3D11Texture2D rendering (Windows)** @@ -121,13 +228,13 @@ if (Target.Platform == UnrealTargetPlatform.IOS) -## v4.2.1 +## v4.2.1 -This version was released on October xx, 2023. +This version was released on October xx, 2023. **Features** -The SDK is designed by Agora for developers who use Unreal, aiming to provide a simple and user-friendly real-time interactive solution for Unreal Engine users. +The SDK is designed by Agora for developers who use Unreal, aiming to provide a simple and user-friendly real-time interactive solution for Unreal Engine users. The SDK provides a powerful set of C++ APIs, allowing developers to easily build games or apps with real-time interactive features. It can also leverage the powerful graphics engine functionality of Unreal Engine to add various visual effects and interactive performance to the app, providing users with a more immersive experience. @@ -143,4 +250,4 @@ To integrate real-time engagement functionality into your app using Agora SDK fo Agora provides the open source [example project](https://github.com/AgoraIO-Extensions/Agora-Unreal-RTC-SDK/tree/main/Agora-Unreal-SDK-CPP-Example) on GitHub for your reference. -
              If you have already integrated the 3.x version of the SDK and wish to upgrade to this version, please refer to [Migration Guide](https://github.com/AgoraIO-Extensions/Agora-Unreal-RTC-SDK/blob/main/Migration%20Guide.md) for upgrade instructions.
              \ No newline at end of file +
              If you have already integrated the 3.x version of the SDK and wish to upgrade to this version, please refer to [Migration Guide](https://github.com/AgoraIO-Extensions/Agora-Unreal-RTC-SDK/blob/main/Migration%20Guide.md) for upgrade instructions.
              From a15093cfd7143e7a15d0b5386d0600cfff2e63de Mon Sep 17 00:00:00 2001 From: Suri539 Date: Wed, 27 Nov 2024 16:35:23 +0800 Subject: [PATCH 350/354] ++ --- .../en-US/framework/release_flutter_ng.md | 18 +++++++++++------- .../en-US/framework/release_unity_ng.md | 10 +++++++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md index 3d177abb911..b577b646680 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_flutter_ng.md @@ -14,9 +14,9 @@ This version includes optimizations to some features, including changes to SDK b 1. **Changes in strong video denoising implementation** - This version adjusts the implementation of strong video denoising. + This version adjusts the implementation of strong video denoising. - The `VideoDenoiserLevel` removes `videoDenoiserLevelStrength`. + The `VideoDenoiserLevel` removes `videoDenoiserLevelStrength`. Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. @@ -33,7 +33,11 @@ This version includes optimizations to some features, including changes to SDK b - In the `CompressionPreference` enumeration class, a new `preferCompressionAuto` (-1) enumeration is added, replacing the original `preferQuality` (1) as the default value. In this mode, the SDK will automatically choose between `preferLowLatency` or `preferQuality` based on your video scene settings to achieve the best user experience. - In the `DegradationPreference` enumeration class, a new `maintainAuto` (-1) enumeration is added, replacing the original `maintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `maintainFramerate`, `maintainBalanced`, or `maintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). -4. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. +4. **16 KB memory page size** + +Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + +5. To distinguish context information in different extension callbacks, this version removes the original extension callbacks and adds corresponding callbacks that contain context information (see the table below). You can identify the extension name, the user ID, and the service provider name through `ExtensionContext` in each callback. | Original callback | Current callback | | -------------------- | ------------------------------- | @@ -383,9 +387,9 @@ This release has optimized the implementation of some functions, involving renam - The `localVideoStreamErrorEncodeFailure` enumeration has been changed to `localVideoStreamReasonCodecNotSupport`. 5. **Log encryption behavior changes** - - For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. - + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + Refer to the following solutions for different needs: - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. @@ -820,7 +824,7 @@ This release optimizes the APIs for camera and screen capture function. As of v6 **2. Video data acquisition** - The `onCaptureVideoFrame` and `onPreEncodeVideoFrame` callbacks are added with a new parameter called `sourceType`, which is used to indicate the specific video source type. -- The following callbacks are deleted. Get the video source type through the `sourceType` parameter in the `onPreEncodeVideoFrame` and `onCaptureVideoFrame` callbacks. +- The following callbacks are deleted. Get the video source type through the `sourceType` parameter in the `onPreEncodeVideoFrame` and `onCaptureVideoFrame` callbacks. - `onSecondaryPreEncodeCameraVideoFrame` (Windows) - `onScreenCaptureVideoFrame` - `onPreEncodeScreenVideoFrame` diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md index 13edb452335..3fed8a8953c 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unity_ng.md @@ -24,9 +24,9 @@ This version includes optimizations to some features, including changes to SDK b 2. **Changes in strong video denoising implementation** - This version adjusts the implementation of strong video denoising. + This version adjusts the implementation of strong video denoising. - The `VIDEO_DENOISER_LEVEL` removes `VIDEO_DENOISER_LEVEL_STRENGTH`. + The `VIDEO_DENOISER_LEVEL` removes `VIDEO_DENOISER_LEVEL_STRENGTH`. Instead, after enabling video denoising by calling `SetVideoDenoiserOptions`, you can call the `SetBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `SetVideoDenoiserOptions`. @@ -43,6 +43,10 @@ This version includes optimizations to some features, including changes to SDK b - In the `COMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO` (-1) enumeration is added, replacing the original `PREFER_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. - In the `DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO` (-1) enumeration is added, replacing the original `MAINTAIN_QUALITY` (1) as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). +5. **16 KB memory page size** + + Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + #### New features 1. **Live show scenario** @@ -188,7 +192,7 @@ This version includes optimizations to some features, including changes to SDK b 4. **Other improvements** - This version also includes the following improvements: + This version also includes the following improvements: - Optimizes transmission strategy: calling `EnableInstantMediaRendering` no longer impacts the security of the transmission link. - The `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_DISPLAY_DISCONNECTED` enumerator is added in `OnLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. (Windows, macOS) From 43881c75268f5f10976d7f29e4cd3795b1a2a7b0 Mon Sep 17 00:00:00 2001 From: chenmeng Date: Wed, 27 Nov 2024 16:39:16 +0800 Subject: [PATCH 351/354] framework release notes --- en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap | 7 +++++++ en-US/dita/RTC-NG/release/release_notes.dita | 12 ++++++------ .../en-US/framework/release_bluerprint_ng.md | 6 ++++++ .../en-US/framework/release_unreal_ng.md | 4 ++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap b/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap index e7dd974544d..c9a49400338 100644 --- a/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap +++ b/en-US/dita/RTC-NG/config/keys-rtc-ng-links.ditamap @@ -78,5 +78,12 @@
              + + + + Support 16 KB page sizes + + + diff --git a/en-US/dita/RTC-NG/release/release_notes.dita b/en-US/dita/RTC-NG/release/release_notes.dita index 360b3277eba..1698ea69b60 100644 --- a/en-US/dita/RTC-NG/release/release_notes.dita +++ b/en-US/dita/RTC-NG/release/release_notes.dita @@ -86,7 +86,7 @@
            114. In the enumeration class, a new (-1) enumeration is added, replacing the original (1) as the default value. In this mode, the SDK will automatically choose between , , or based on your video scene settings to achieve the optimal overall quality experience (QoE).
            115. -
            116. 16 KB memory page size (Android) +
            117. 16 KB memory page size (Android)

              Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in . To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes.

            118. @@ -119,7 +119,7 @@
            119. Filter effects

              This version introduces the method. You can pass a cube map file (.cube) in the config parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in built_in_whiten_filter.cube file for quickly achieving a whitening filter effect.

            120. -
            121. Local audio mixing +
            122. Local audio mixing

              This version introduces the local audio mixing feature. You can call the method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the method to stop local audio mixing. During the mixing process, you can call the method to update the configuration of the audio streams being mixed.

              Example use cases for this feature include:

                @@ -136,7 +136,7 @@
              • EGL context (Android)

                This version introduces the method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management.

              • -
              • Color space settings +
              • Color space settings

                This version adds the colorSpace parameter to and . You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing.

              • Others @@ -161,15 +161,15 @@
              • Snapshot at specified video observation points

                This version introduces the and methods. You can use the config parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects.

              • -
              • Custom audio capture improvements +
              • Custom audio capture improvements

                This version adds the enableAudioProcessing member parameter to , which is used to control whether to enable 3A audio processing for custom audio capture tracks of the AUDIO_TRACK_DIRECT type. The default value of this parameter is , meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing.

              • Other Improvements
                  -
                • In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
                • +
                • In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. (Android, iOS)
                • Optimizes the logic for calling to obtain device score levels, improving the accuracy of the score results.
                • Supports using virtual cameras in YV12 format as video capture devices. (Windows)
                • -
                • After calling to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS)
                • +
                • After calling to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS)
                • When calling to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the callback will report the event, indicating an error occurred during media resource switching.
                • When calling to set the playback speed of an audio file, the minimum supported speed is 0.3x.
                diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md index 9847741149a..f6ffaa32717 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_bluerprint_ng.md @@ -31,6 +31,12 @@ To enhance the user’s video interaction experience, this version optimizes the - In the `ECOMPRESSION_PREFERENCE` enumeration class, a new `PREFER_COMPRESSION_AUTO (-1)` enumeration is added, replacing the original `PREFER_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `PREFER_LOW_LATENCY` or `PREFER_QUALITY` based on your video scene settings to achieve the best user experience. - In the `EUABT_DEGRADATION_PREFERENCE` enumeration class, a new `MAINTAIN_AUTO (-1)` enumeration is added, replacing the original `MAINTAIN_QUALITY (1)` as the default value. In this mode, the SDK will automatically choose between `MAINTAIN_FRAMERATE`, `MAINTAIN_BALANCED`, or `MAINTAIN_RESOLUTION` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +**16 KB memory page size (Android)** + +Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + + #### New features **Live show scenario** diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md index 240658f7327..3ccda305fbe 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_unreal_ng.md @@ -27,6 +27,10 @@ Additionally, due to this adjustment, to achieve the best low-light enhancement In previous versions, when the camera was unplugged and replugged, the `onVideoDeviceStateChanged` callback would report the device status as `MEDIA_DEVICE_STATE_ACTIVE(1)` (device in use). Starting from this version, after the camera is replugged, the device status will change to `MEDIA_DEVICE_STATE_IDLE(0)` (device ready). +**16 KB memory page size (Android)** + +Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + **Changes in video encoding preferences** To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: From 424f528a931f68be60d5ea5750578b14b637b82b Mon Sep 17 00:00:00 2001 From: Nero-Hu Date: Wed, 27 Nov 2024 18:21:55 +0800 Subject: [PATCH 352/354] RN/Electron: update en release notes --- .../en-US/framework/release_electron_ng.md | 95 ++++++++++++++- .../en-US/framework/release_rn_ng.md | 108 ++++++++++++++++++ 2 files changed, 202 insertions(+), 1 deletion(-) diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md index 6223d4c2282..43685b145da 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_electron_ng.md @@ -1,3 +1,96 @@ +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. + + The `VideoDenoiserLevel` removes `VideoDenoiserLevelStrength`. + + Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions`. + +2. **Changes in camera plug and unplug status** + + In previous versions, when the camera was unplugged and replugged, the `onVideoDeviceStateChanged` callback would report the device status as MediaDeviceStateActive(1) (device in use). Starting from this version, after the camera is replugged, the device status will change to `MediaDeviceStateIdle`(0) (device ready). + +3. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `CompressionPreference` enumeration class, a new `PreferCompressionAuto` (-1) enumeration is added, replacing the original `PreferQuality` (1) as the default value. In this mode, the SDK will automatically choose between `PreferLowLatency` or `PreferQuality` based on your video scene settings to achieve the best user experience. + - In the `DegradationPreference` enumeration class, a new `MaintainAuto` (-1) enumeration is added, replacing the original `MaintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `MaintainFramerate`, `MaintainBalanced`, or `MaintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +#### New features + +1. **Live show scenario** + + This version adds the `ApplicationScenarioLiveshow`(3) (Live Show) enumeration to the `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call `enableInstantMediaRendering`) to achieve better image quality and bandwidth efficiency. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Filter effects** + + This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +4. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +5. **Color space settings** + + This version adds the `colorSpace` parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +6. **Others** + + - `onLocalVideoStateChanged` callback adds the `LocalVideoStreamReasonDeviceDisconnected` enumeration, indicating that the currently used video capture device has been disconnected (e.g., unplugged). (Windows) + - `MediaDeviceStateType` adds the `MediaDeviceStatePluggedIn` enumeration, indicating that the device has been plugged in. (Windows) + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshotWithConfig` and `takeSnapshotWithConfigEx` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - Supports using virtual cameras in YV12 format as video capture devices. (Windows) + - When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `onPlayerEvent` callback will report the `PlayerEventSwitchError` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Issues fixed + +This version fixes the following issues: + +- When calling `startScreenCaptureByWindowId` to share the screen, the window capture area specified by `regionRect` was inaccurate, resulting in incorrect width and height of the screen sharing window seen by the receiving end. (Windows) +- Occasional errors of not finding system files during audio and video interaction on Windows 7 systems. (Windows) +- When calling `followSystemRecordingDevice` or `followSystemPlaybackDevice` to set the audio capture or playback device used by the SDK to not follow the system default audio playback device, the local audio state callback `onLocalAudioStateChanged` is not triggered when the audio device is removed, which is not as expected. (Windows) + ## v4.4.0 This version was released on July x, 2024. @@ -51,7 +144,7 @@ This version includes optimizations to some features, including changes to SDK b This version also includes the following improvements: - Optimizes transmission strategy: calling `enableInstantMediaRendering` no longer impacts the security of the transmission link. - - The ``enumerator is added in `onLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. + - The `LocalVideoStreamReasonDeviceDisconnected` enumerator is added in `onLocalVideoStateChanged` callback, indicating that the display used for screen capture has been disconnected. - Optimizes the video link for window sharing, reducing CPU usage. (macOS) - Improves echo cancellation for screen sharing scenarios. - Adds the `channelId` parameter to `Metadata`, which is used to get the channel name from which the metadata is sent. diff --git a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md index 9180442b02f..6fd439d7181 100644 --- a/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md +++ b/markdown/RTC 4.x/release-notes/en-US/framework/release_rn_ng.md @@ -8,6 +8,114 @@ On Android 14 devices (such as OnePlus 11), screen sharing may not be available AirPods Pro does not support A2DP protocol in communication audio mode, which may lead to connection failure in that mode. +## v4.5.0 + +This version was released on November x, 2024. + +#### Compatibility changes + +This version includes optimizations to some features, including changes to SDK behavior, API renaming and deletion. To ensure normal operation of the project, update the code in the app after upgrading to this release. + +1. **Changes in strong video denoising implementation** + + This version adjusts the implementation of strong video denoising. + + The `VideoDenoiserLevel` removes `VideoDenoiserLevelStrength`. + + Instead, after enabling video denoising by calling `setVideoDenoiserOptions`, you can call the `setBeautyEffectOptions` method to enable the beauty skin smoothing feature. Using both together will achieve better video denoising effects. For strong denoising, it is recommended to set the skin smoothing parameters as detailed in `setVideoDenoiserOptions`. + + Additionally, due to this adjustment, to achieve the best low-light enhancement effect with a focus on image quality, you need to enable video denoising first and use specific settings as detailed in `setLowlightEnhanceOptions`. + +2. **Changes in video encoding preferences** + + To enhance the user’s video interaction experience, this version optimizes the default preferences for video encoding: + + - In the `CompressionPreference` enumeration class, a new `PreferCompressionAuto` (-1) enumeration is added, replacing the original `PreferQuality` (1) as the default value. In this mode, the SDK will automatically choose between `PreferLowLatency` or `PreferQuality` based on your video scene settings to achieve the best user experience. + - In the `DegradationPreference` enumeration class, a new `MaintainAuto` (-1) enumeration is added, replacing the original `MaintainQuality` (1) as the default value. In this mode, the SDK will automatically choose between `MaintainFramerate`, `MaintainBalanced`, or `MaintainResolution` based on your video scene settings to achieve the optimal overall quality experience (QoE). + +3. **16 KB memory page size (Android)** + + Starting from Android 15, the system adds support for 16 KB memory page size, as detailed in [Support 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). To ensure the stability and performance of the app, starting from this version, the SDK supports 16 KB memory page size, ensuring seamless operation on devices with both 4 KB and 16 KB memory page sizes, enhancing compatibility and preventing crashes. + +#### New features + +1. **Live show scenario** + + This version adds the `ApplicationScenarioLiveshow`(3) (Live Show) enumeration to the `VideoApplicationScenarioType`. You can call `setVideoScenario` to set the video business scenario to show room. In this scenario, fast video rendering and high image quality are crucial. The SDK implements several performance optimizations, such as enabling accelerated audio and video frame rendering to minimize first-frame latency (no need to call `enableInstantMediaRendering`) to achieve better image quality and bandwidth efficiency. + +2. **Maximum frame rate for video rendering** + + This version adds the `setLocalRenderTargetFps` and `setRemoteRenderTargetFps` methods, which support setting the maximum frame rate for video rendering locally and remotely. The actual frame rate for video rendering by the SDK will be as close to this value as possible. + + In scenarios where the frame rate requirement for video rendering is not high (e.g., screen sharing, online education) or when the remote end uses mid-to-low-end devices, you can use this set of methods to limit the video rendering frame rate, thereby reducing CPU consumption and improving system performance. + +3. **Filter effects** + + This version introduces the `setFilterEffectOptions` method. You can pass a cube map file (.cube) in the `config` parameter to achieve custom filter effects such as whitening, vivid, cool, black and white, etc. Additionally, the SDK provides a built-in `built_in_whiten_filter.cube` file for quickly achieving a whitening filter effect. + +4. **Local audio mixing** + + This version introduces the local audio mixing feature. You can call the `startLocalAudioMixer` method to mix the audio streams from the local microphone, media player, sound card, and remote audio streams into a single audio stream, which can then be published to the channel. When you no longer need audio mixing, you can call the `stopLocalAudioMixer` method to stop local audio mixing. During the mixing process, you can call the `updateLocalAudioMixerConfiguration` method to update the configuration of the audio streams being mixed. + + Example use cases for this feature include: + + - By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published. + - In live streaming scenarios, users can receive audio streams within the channel, mix multiple audio streams locally, and then forward the mixed audio stream to other channels. + - In educational scenarios, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. + +5. **External MediaProjection (Android)** + + This version introduces the `setExternalMediaProjection` method, which allows you to set an external `MediaProjection` and replace the `MediaProjection` applied by the SDK. + + If you have the capability to apply for `MediaProjection` on your own, you can use this feature to achieve more flexible screen capture. + +6. **EGL context (Android)** + + This version introduces the `setExternalRemoteEglContext` method, which is used to set the EGL context for rendering remote video streams. When using Texture format video data for remote video self-rendering, you can use this method to replace the SDK's default remote EGL context, achieving unified EGL context management. + +7. **Color space settings** + + This version adds the **colorSpace** parameter to `VideoFrame` and `ExternalVideoFrame`. You can use this parameter to set the color space properties of the video frame. By default, the color space uses Full Range and BT.709 standard configuration. You can flexibly adjust according to your own capture or rendering needs, further enhancing the customization capabilities of video processing. + +8. **Others** + +#### Improvements + +1. **Virtual background algorithm optimization** + + This version upgrades the virtual background algorithm, making the segmentation between the portrait and the background more accurate. There is no background exposure, the body contour of the portrait is complete, and the detail recognition of fingers is significantly improved. Additionally, the edges between the portrait and the background are more stable, reducing edge jumping and flickering in continuous video frames. + +2. **Snapshot at specified video observation points** + + This version introduces the `takeSnapshotWithConfig` and `takeSnapshotWithConfigEx` methods. You can use the `config` parameter when calling these methods to take snapshots at specified video observation points, such as before encoding, after encoding, or before rendering, to achieve more flexible snapshot effects. + +3. **Custom audio capture improvements** + + This version adds the `enableAudioProcessing` member parameter to `AudioTrackConfig`, which is used to control whether to enable 3A audio processing for custom audio capture tracks of the `AUDIO_TRACK_DIRECT` type. The default value of this parameter is `false`, meaning that audio processing is not enabled. Users can enable it as needed, enhancing the flexibility of custom audio processing. + +4. **Other Improvements** + + - In scenarios where Alpha transparency effects are achieved by stitching video frames and Alpha data, the rendering performance on the receiving end has been improved, effectively reducing stuttering and latency. + - Optimizes the logic for calling `queryDeviceScore` to obtain device score levels, improving the accuracy of the score results. + - After calling `enableLocalAudio` to disable local audio capture within the channel, the mute side button on the phone can be used to mute the background sound effects played by the app. (iOS) + - When calling `switchSrc` to switch between live streams or on-demand streams of different resolutions, smooth and seamless switching can be achieved. An automatic retry mechanism has been added in case of switching failures. The SDK will automatically retry 3 times after a failure. If it still fails, the `onPlayerEvent` callback will report the `PlayerEventSwitchError` event, indicating an error occurred during media resource switching. + - When calling `setPlaybackSpeed` to set the playback speed of an audio file, the minimum supported speed is 0.3x. + +#### Issues fixed + +This version fixes the following issues: + +- When the video source type of the sender is in JPEG format, the frame rate on the receiving end occasionally falls below expectations. +- During audio and video interaction, after being interrupted by a system call, the user volume reported by the `onAudioVolumeIndication` callback was incorrect. (Android) +- When the receiving end subscribes to the video small stream by default and does not automatically subscribe to any video stream when joining the channel, calling `muteRemoteVideoStream(uid, false)` after joining the channel to resume receiving the video stream results in receiving the video large stream, which is not as expected. (Android) +- Occasional instances where the receiving end cannot hear the sender during audio and video interaction. (iOS) +- During audio and video interaction, if the sender's device system version is iOS 17, the receiving end occasionally cannot hear the sender. (iOS) +- In live streaming scenarios, the time taken to reconnect to the live room after the audience end disconnects due to network switching is longer than expected. (iOS) +- No sound when playing online media resources using the media player after the app starts. (iOS) +- Occasional instances of no sound in audio capture after resuming from being interrupted by other system apps during audio and video interaction. (iOS) +- Calling `startAudioMixing` and then immediately calling `pauseAudioMixing` to pause the music file playback does not take effect. +- Occasional crashes during audio and video interaction. (Android) + ## v4.4.0 This version was released on July x, 2024. From 511c0ee4c9066d9695ec8bc02056291e7289785c Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 29 Nov 2024 15:06:09 +0800 Subject: [PATCH 353/354] fix tag --- .../callback_iaudiopcmframesink_onframe.dita | 2 +- ...ediaengine_registeraudioframeobserver.dita | 4 +- ...ediaengine_registervideoframeobserver.dita | 4 +- ...api_imediaplayer_setaudiodualmonomode.dita | 2 +- ...pi_irtcengine_getscreencapturesources.dita | 6 +- ...tcengine_queryscreencapturecapability.dita | 2 +- ...cengine_registermediametadataobserver.dita | 2 +- .../API/api_irtcengine_setaudioprofile.dita | 4 +- .../API/api_irtcengine_setclientrole2.dita | 2 +- .../API/api_irtcengine_setlogfilter.dita | 2 +- ...gine_setremotesubscribefallbackoption.dita | 2 +- .../api_irtcengine_setremoteuserpriority.dita | 2 +- ...cengine_startscreencapturebydisplayid.dita | 6 +- ...irtcengine_updatescreencaptureregion2.dita | 2 +- .../callback_iaudiopcmframesink_onframe.dita | 2 +- ...venthandler_onaudiomixingstatechanged.dita | 4 +- ...irtcengineeventhandler_onaudioquality.dita | 2 +- ...eventhandler_onconnectionstatechanged.dita | 2 +- ...nthandler_onlocalvideotranscodererror.dita | 2 +- ...tcengineeventhandler_onnetworkquality.dita | 4 +- ...rameobserver_getvideoformatpreference.dita | 2 +- .../dita/RTC-NG/API/class_beautyoptions.dita | 24 +-- .../RTC-NG/API/class_clientroleoptions.dita | 10 +- .../dita/RTC-NG/API/class_codeccaplevels.dita | 6 +- .../API/class_encodedvideoframeinfo.dita | 2 +- .../RTC-NG/API/class_livetranscoding.dita | 48 +++--- .../RTC-NG/API/class_localvideostats.dita | 140 +++++++++--------- .../API/class_lowlightenhanceoptions.dita | 4 +- .../RTC-NG/API/class_playerstreaminfo.dita | 4 +- .../RTC-NG/API/class_remoteaudiostats.dita | 42 +++--- .../RTC-NG/API/class_remotevideostats.dita | 38 ++--- .../API/class_screencaptureconfiguration.dita | 28 ++-- .../API/class_screencapturesourceinfo.dita | 22 +-- .../API/class_screenvideoparameters.dita | 24 +-- .../API/class_segmentationproperty.dita | 8 +- .../API/class_simulcaststreamconfig.dita | 6 +- .../API/class_useraudiospectruminfo.dita | 10 +- .../API/class_videodenoiseroptions.dita | 4 +- .../API/class_videoencoderconfiguration.dita | 2 +- en-US/dita/RTC-NG/API/class_videoframe.dita | 2 +- .../API/class_virtualbackgroundsource.dita | 46 +++--- 41 files changed, 265 insertions(+), 265 deletions(-) diff --git a/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita b/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita index ea469418cd8..7f355eee315 100644 --- a/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita +++ b/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita @@ -37,7 +37,7 @@ frame audioFrame - 音频帧信息。详见 详见 + 音频帧信息。详见 详见 playerKit diff --git a/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita b/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita index f31a24dec92..c40bad8a208 100644 --- a/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaengine_registeraudioframeobserver.dita @@ -29,7 +29,7 @@
                Call timing

                Call this method before joining a channel.

                -
                +
                Restrictions

                None.

                @@ -42,7 +42,7 @@ delegate audioFrameObserver -

                The observer instance. See . Set the value as to release the instance. Agora recommends calling this method after receiving to release the audio observer object.

                +

                The observer instance. See .Set the value as to release the instance. Agora recommends calling this method after receiving to release the audio observer object.

                diff --git a/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita b/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita index c874590c13d..96b94e049c5 100644 --- a/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita +++ b/en-US/dita/RTC-NG/API/api_imediaengine_registervideoframeobserver.dita @@ -35,7 +35,7 @@
                Call timing

                Call this method before joining a channel.

                -
                +
                Restrictions

                When handling the video data returned in the callbacks, pay attention to the changes in the width and height parameters, which may be adapted under the following circumstances:

                  @@ -50,7 +50,7 @@ observer delegate videoFrameObserver - The observer instance. See . To release the instance, set the value as . + The observer instance. See .To release the instance, set the value as . mode diff --git a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita index 3b37e553e2b..b463081ae45 100644 --- a/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita +++ b/en-US/dita/RTC-NG/API/api_imediaplayer_setaudiodualmonomode.dita @@ -38,7 +38,7 @@ mode - The channel mode. See .
                    + The channel mode. See .
                    • (0): Original mode.
                    • (1): Left channel mode. This mode replaces the audio of the right channel with the audio of the left channel, which means the user can only hear the audio of the left channel.
                    • (2): Right channel mode. This mode replaces the audio of the left channel with the audio of the right channel, which means the user can only hear the audio of the right channel.
                    • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_getscreencapturesources.dita b/en-US/dita/RTC-NG/API/api_irtcengine_getscreencapturesources.dita index 20a0d01ac67..3d69ed4bb92 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_getscreencapturesources.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_getscreencapturesources.dita @@ -40,18 +40,18 @@
                      Details

                      You can call this method before sharing a screen or window to get a list of shareable screens and windows, which enables a user to use thumbnails in the list to easily choose a particular screen or window to share. This list also contains important information such as window ID and screen ID, with which you can call or to start the sharing.

                      - This method applies to macOS and Windows only. + This method applies to macOS and Windows only.
                      Parameters thumbSize - The target size of the screen or window thumbnail (the width and height are in pixels). See . The SDK scales the original image to make the length of the longest side of the image the same as that of the target size without distorting the original image. For example, if the original image is 400 × 300 and thumbSize is 100 × 100, the actual size of the thumbnail is 100 × 75. If the target size is larger than the original size, the thumbnail is the original image and the SDK does not scale it. + The target size of the screen or window thumbnail (the width and height are in pixels). See .The SDK scales the original image to make the length of the longest side of the image the same as that of the target size without distorting the original image. For example, if the original image is 400 × 300 and thumbSize is 100 × 100, the actual size of the thumbnail is 100 × 75. If the target size is larger than the original size, the thumbnail is the original image and the SDK does not scale it. iconSize - The target size of the icon corresponding to the application program (the width and height are in pixels). See . The SDK scales the original image to make the length of the longest side of the image the same as that of the target size without distorting the original image. For example, if the original image is 400 × 300 and iconSize is 100 × 100, the actual size of the icon is 100 × 75. If the target size is larger than the original size, the icon is the original image and the SDK does not scale it. + The target size of the icon corresponding to the application program (the width and height are in pixels). See .The SDK scales the original image to make the length of the longest side of the image the same as that of the target size without distorting the original image. For example, if the original image is 400 × 300 and iconSize is 100 × 100, the actual size of the icon is 100 × 75. If the target size is larger than the original size, the icon is the original image and the SDK does not scale it. includeScreen diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_queryscreencapturecapability.dita b/en-US/dita/RTC-NG/API/api_irtcengine_queryscreencapturecapability.dita index 02e62779772..a0c9c2919ef 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_queryscreencapturecapability.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_queryscreencapturecapability.dita @@ -46,7 +46,7 @@
                      • The highest frame rate supported by the device, if the method is called successfully. See .
                      • If the call fails, returns .
                        -
                      • The highest frame rate supported by the device, if the method is called successfully. See .
                          +
                        • The highest frame rate supported by the device, if the method is called successfully. See .
                          • 0: The device supports the frame rate of up to 15 fps.
                          • 1: The device supports the frame rate of up to 30 fps.
                          • 2: The device supports the frame rate of up to 60 fps.
                        • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_registermediametadataobserver.dita b/en-US/dita/RTC-NG/API/api_irtcengine_registermediametadataobserver.dita index d3b8483b22a..ac53b76c050 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_registermediametadataobserver.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_registermediametadataobserver.dita @@ -49,7 +49,7 @@ type -

                          The metadata type. The SDK currently only supports . See .

                          +

                          The metadata type. The SDK currently only supports . See .

                      diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita index dc71c11947f..c2b0cfc85a9 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setaudioprofile.dita @@ -48,7 +48,7 @@
                      Call timing

                      You can call this method either before or after joining a channel.

                      -
                      +
                Restrictions

                Due to iOS system restrictions, some audio routes cannot be recognized in call volume mode. Therefore, if you need to use an external sound card, it is recommended to set the audio scenario to (3). In this scenario, the SDK will switch to media volume to avoid this issue.

                @@ -60,7 +60,7 @@ profile -

                The audio profile, including the sampling rate, bitrate, encoding mode, and the number of channels. See .

                  +

                  The audio profile, including the sampling rate, bitrate, encoding mode, and the number of channels. See .

                  • (0): The default value.
                  • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita index efa3eed3ebb..0bf3eb6e9f5 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setclientrole2.dita @@ -62,7 +62,7 @@ role clientRoleType - The user role. See .
                      + The user role. See .
                      • (1): Host. A host can both send and receive streams.
                      • (2): (Default) Audience. An audience member can only receive streams.
                      diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setlogfilter.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setlogfilter.dita index e65709f1f83..8cdb4bea7dc 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setlogfilter.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setlogfilter.dita @@ -42,7 +42,7 @@ filter -

                      The output log level of the SDK. See .

                        +

                        The output log level of the SDK. See .

                        • (0): Do not output any log information.
                        • (0x080f): Output all log information. Set your log filter as DEBUG if you want to get the most complete log file.
                        • (0x0f): Output , , , and level log information. Agora recommends that you set the log level to this level.
                        • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setremotesubscribefallbackoption.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setremotesubscribefallbackoption.dita index 6559f96225d..c7c9eafe13c 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setremotesubscribefallbackoption.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setremotesubscribefallbackoption.dita @@ -44,7 +44,7 @@ option - Fallback options for the subscribed stream. See .
                            + Fallback options for the subscribed stream. See .
                            • (0): No fallback processing is performed on audio and video streams, and the quality of the audio and video streams cannot be guaranteed.
                            • (1): (Default) Under poor downlink network conditions, the remote video stream, to which you subscribe, falls back to the low-quality (low resolution and low bitrate) video stream.
                            • (2): When the network conditions are poor, try to receive the low-quality video stream first. If the video cannot be displayed due to extremely poor network environment, then fall back to receiving audio-only stream.
                            • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_setremoteuserpriority.dita b/en-US/dita/RTC-NG/API/api_irtcengine_setremoteuserpriority.dita index 7cd4d20fc1c..54523c60202 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_setremoteuserpriority.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_setremoteuserpriority.dita @@ -40,7 +40,7 @@ userPriority -

                              The priority of the remote user. See .

                                +

                                The priority of the remote user. See .

                                • : The user's priority is high.
                                • : (Default) The user's priority is normal.

                                diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita index 5195ab85033..5d63191478d 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_startscreencapturebydisplayid.dita @@ -43,7 +43,7 @@

                Captures the video stream of a screen or a part of the screen area.

                - This method is for Windows and macOS only. + This method is for Windows and macOS only.
                Applicable scenarios @@ -55,7 +55,7 @@
              • Call this method before joining a channel, and then call to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to to start screen sharing.
              • Call this method after joining a channel, and then call to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to to start screen sharing.

              - +
              Restrictions

              None.

              @@ -70,7 +70,7 @@ regionRect - (Optional) Sets the relative location of the region to the screen. Pass in nil to share the entire screen. See . It consists of the following parameters:
                + (Optional) Sets the relative location of the region to the screen. Pass in nil to share the entire screen. See .It consists of the following parameters:
                • x: The horizontal offset from the top-left corner.
                • y: The vertical offset from the top-left corner.
                • width: The width of the region.
                • diff --git a/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureregion2.dita b/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureregion2.dita index 055b1d6a00b..97b1f4dfa49 100644 --- a/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureregion2.dita +++ b/en-US/dita/RTC-NG/API/api_irtcengine_updatescreencaptureregion2.dita @@ -29,7 +29,7 @@ rect regionRect - The relative location of the region to the screen or window. If you do not set this parameter, the SDK shares the whole screen. See . If the specified region overruns the screen or window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole screen or window. + The relative location of the region to the screen or window. If you do not set this parameter, the SDK shares the whole screen. See .If the specified region overruns the screen or window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole screen or window.
              diff --git a/en-US/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita b/en-US/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita index df2b304cf12..3d78ccd2577 100644 --- a/en-US/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita +++ b/en-US/dita/RTC-NG/API/callback_iaudiopcmframesink_onframe.dita @@ -37,7 +37,7 @@ frame audioFrame - The audio frame information. See . See . + The audio frame information. See .See . playerKit diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita index 3ce5d7533ea..3e8bd51e6c8 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudiomixingstatechanged.dita @@ -43,7 +43,7 @@ reasonCode:(AgoraAudioMixingReasonCode)reasonCode; state - The playback state of the music file. See .

              + The playback state of the music file. See .

              • (710): The music file is playing.
              • (711): The music file pauses playing.
              • @@ -57,7 +57,7 @@ reasonCode:(AgoraAudioMixingReasonCode)reasonCode; reasonCode reason - Error code. See .

                + Error code. See .

                • (0): No error.
                • (701): The SDK cannot open the music file.
                • diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioquality.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioquality.dita index 00d08029e2d..92a52c19413 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioquality.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onaudioquality.dita @@ -72,7 +72,7 @@ quality - Audio quality of the user. See .
                    + Audio quality of the user. See .
                    diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita index 4f535d1884b..123ad62ab8a 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onconnectionstatechanged.dita @@ -56,7 +56,7 @@ state -

                    The current connection state. See .

                    +

                    The current connection state. See .

                    • (1): The SDK is disconnected from Agora's edge server.
                    • (2): The SDK is connecting to Agora's edge server.
                    • diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita index 2e646a830b3..710f36c7266 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onlocalvideotranscodererror.dita @@ -57,7 +57,7 @@ error errorCode - The reason for local video mixing error. See . + The reason for local video mixing error. See . The reason for local video mixing error:
                      • 1: The selected video source has not started video capture. You need to create a video track for it and start video capture.
                      • 2: The video source type is invalid. You need to re-specify the supported video source type.
                      • diff --git a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita index f6f4e230f9a..ee43bbee716 100644 --- a/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita +++ b/en-US/dita/RTC-NG/API/callback_irtcengineeventhandler_onnetworkquality.dita @@ -68,13 +68,13 @@ txQuality - Uplink network quality rating of the user in terms of the transmission bit rate, packet loss rate, average RTT (Round-Trip Time) and jitter of the uplink network. This parameter is a quality rating helping you understand how well the current uplink network conditions can support the selected video encoder configuration. For example, a 1000 Kbps uplink network may be adequate for video frames with a resolution of 640 × 480 and a frame rate of 15 fps in the LIVE_BROADCASTING profile, but might be inadequate for resolutions higher than 1280 × 720. See .
                          + Uplink network quality rating of the user in terms of the transmission bit rate, packet loss rate, average RTT (Round-Trip Time) and jitter of the uplink network. This parameter is a quality rating helping you understand how well the current uplink network conditions can support the selected video encoder configuration. For example, a 1000 Kbps uplink network may be adequate for video frames with a resolution of 640 × 480 and a frame rate of 15 fps in the LIVE_BROADCASTING profile, but might be inadequate for resolutions higher than 1280 × 720. See .
                          rxQuality - Downlink network quality rating of the user in terms of packet loss rate, average RTT, and jitter of the downlink network. See .
                            + Downlink network quality rating of the user in terms of packet loss rate, average RTT, and jitter of the downlink network. See .
                            diff --git a/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita b/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita index 6b2fa07d547..8090b0eee49 100644 --- a/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita +++ b/en-US/dita/RTC-NG/API/callback_ivideoframeobserver_getvideoformatpreference.dita @@ -43,7 +43,7 @@
              Returns -

              Sets the raw data format of the SDK output. See .

              +

              Sets the raw data format of the SDK output. See .

              • (0): Raw video.
              • (1): I420.
              • diff --git a/en-US/dita/RTC-NG/API/class_beautyoptions.dita b/en-US/dita/RTC-NG/API/class_beautyoptions.dita index 794349a2054..69457f3acda 100644 --- a/en-US/dita/RTC-NG/API/class_beautyoptions.dita +++ b/en-US/dita/RTC-NG/API/class_beautyoptions.dita @@ -84,15 +84,15 @@ public: } }; export class BeautyOptions { - + lighteningContrastLevel?: LighteningContrastLevel; - + lighteningLevel?: number; - + smoothnessLevel?: number; - + rednessLevel?: number; - + sharpnessLevel?: number; } public class BeautyOptions @@ -135,15 +135,15 @@ public: public float sharpnessLevel { set; get; } } export class BeautyOptions { - + lighteningContrastLevel?: LighteningContrastLevel; - + lighteningLevel?: number; - + smoothnessLevel?: number; - + rednessLevel?: number; - + sharpnessLevel?: number; } class BeautyOptions { @@ -153,7 +153,7 @@ public: this.smoothnessLevel, this.rednessLevel, this.sharpnessLevel}); - + @JsonKey(name: 'lighteningContrastLevel') final LighteningContrastLevel? lighteningContrastLevel; @JsonKey(name: 'lighteningLevel') @@ -177,7 +177,7 @@ public: lighteningContrastLevel -

                The contrast level, used with the lighteningLevel parameter. The larger the value, the greater the contrast between light and dark. See .

                  +

                  The contrast level, used with the lighteningLevel parameter. The larger the value, the greater the contrast between light and dark. See .

                  • (0): Low contrast level.
                  • (1): Normal contrast level.
                  • (2): High contrast level.
                  • diff --git a/en-US/dita/RTC-NG/API/class_clientroleoptions.dita b/en-US/dita/RTC-NG/API/class_clientroleoptions.dita index 851263f41b1..a3d238194fd 100644 --- a/en-US/dita/RTC-NG/API/class_clientroleoptions.dita +++ b/en-US/dita/RTC-NG/API/class_clientroleoptions.dita @@ -15,7 +15,7 @@ } } export class ClientRoleOptions { - + public audienceLatencyLevel: Constants.AudienceLatencyLevel = Constants.AudienceLatencyLevel.LOW_LATENCY; } __attribute__((visibility("default"))) @interface AgoraClientRoleOptions: NSObject @@ -48,7 +48,7 @@ public: } }; export class ClientRoleOptions { - + audienceLatencyLevel?: AudienceLatencyLevelType; } public class ClientRoleOptions @@ -61,7 +61,7 @@ public: public AUDIENCE_LATENCY_LEVEL_TYPE audienceLatencyLevel; }; export class ClientRoleOptions { - + audienceLatencyLevel?: AudienceLatencyLevelType; } class ClientRoleOptions { @@ -72,7 +72,7 @@ public: factory ClientRoleOptions.fromJson(Map<String, dynamic> json) => _$ClientRoleOptionsFromJson(json); Map<String, dynamic> toJson() => _$ClientRoleOptionsToJson(this); -} +}

              @@ -80,7 +80,7 @@ public: audienceLatencyLevel - The latency level of an audience member in interactive live streaming. See .
                + The latency level of an audience member in interactive live streaming. See .
                • (1): Low latency.
                • (2): (Default) Ultra low latency.
                diff --git a/en-US/dita/RTC-NG/API/class_codeccaplevels.dita b/en-US/dita/RTC-NG/API/class_codeccaplevels.dita index 1d358536259..57c136b2b6a 100644 --- a/en-US/dita/RTC-NG/API/class_codeccaplevels.dita +++ b/en-US/dita/RTC-NG/API/class_codeccaplevels.dita @@ -40,7 +40,7 @@ public: FENUMWRAP_VIDEO_CODEC_CAPABILITY_LEVEL hwDecodingLevel; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FCodecCapLevels") FENUMWRAP_VIDEO_CODEC_CAPABILITY_LEVEL swDecodingLevel; - + FCodecCapLevels() {} FCodecCapLevels(const agora::rtc::CodecCapLevels& AgoraData) { hwDecodingLevel = AgoraData.hwDecodingLevel; @@ -104,7 +104,7 @@ class CodecCapLevels { hwDecodingLevel - Hardware decoding capability level, which represents the device's ability to perform hardware decoding on videos of different quality. See . + Hardware decoding capability level, which represents the device's ability to perform hardware decoding on videos of different quality. See .
                • (-1): Unsupported video type. Currently, only H.264 and H.265 formats are supported. If the video is in another format, this value will be returned.
                • (5): Supports encoding and decoding videos up to 1080p and 30 fps.
                • @@ -114,7 +114,7 @@ class CodecCapLevels { swDecodingLevel - Software decoding capability level, which represents the device's ability to perform software decoding on videos of different quality. See . + Software decoding capability level, which represents the device's ability to perform software decoding on videos of different quality. See .
              diff --git a/en-US/dita/RTC-NG/API/class_encodedvideoframeinfo.dita b/en-US/dita/RTC-NG/API/class_encodedvideoframeinfo.dita index a3153e5905f..a55c85d11df 100644 --- a/en-US/dita/RTC-NG/API/class_encodedvideoframeinfo.dita +++ b/en-US/dita/RTC-NG/API/class_encodedvideoframeinfo.dita @@ -402,7 +402,7 @@ struct FEncodedVideoFrameInfo { streamType - The type of video streams. See . + The type of video streams. See .
              • (0): High-quality stream, that is, a high-resolution and high-bitrate video stream.
              • diff --git a/en-US/dita/RTC-NG/API/class_livetranscoding.dita b/en-US/dita/RTC-NG/API/class_livetranscoding.dita index 2c20497d3a1..9cf5ae8c69c 100644 --- a/en-US/dita/RTC-NG/API/class_livetranscoding.dita +++ b/en-US/dita/RTC-NG/API/class_livetranscoding.dita @@ -226,39 +226,39 @@ } } export class LiveTranscoding { - + public width: number; - + public height: number; - + public videoBitrate: number; - + public videoFramerate: number; - + public videoGop: number; - + public watermarkList?: Array<AgoraImage>; - + public backgroundImageList?: Array<AgoraImage>; - + public audioSampleRate: Constants.AudioSampleRateType; - + public audioBitrate: number; - + public audioChannels: number; - + public audioCodecProfile: Constants.AudioCodecProfileType; - + public videoCodecProfile: Constants.VideoCodecProfileType; - + public videoCodecType: Constants.VideoCodecType; - + public userConfigExtraInfo?: string; - + public metadata?: string; - + public transcodingUsers: Map<number, TranscodingUser>; - + public advancedFeatures: Map<string, boolean>; constructor() { this.width = 360; @@ -392,7 +392,7 @@ public: for(int i = 0; i< userCount; i++){ transcodingUsers.Add(FTranscodingUser((AgoraData.transcodingUsers[i]))); } - + transcodingExtraInfo = UTF8_TO_TCHAR(AgoraData.transcodingExtraInfo); metadata = UTF8_TO_TCHAR(AgoraData.metadata); for(unsigned int i =0; i< AgoraData.watermarkCount;i++) @@ -424,14 +424,14 @@ public: AgoraData.videoCodecProfile = static_cast<agora::rtc::VIDEO_CODEC_PROFILE_TYPE>(videoCodecProfile); AgoraData.backgroundColor = static_cast<unsigned int>(backgroundColor); AgoraData.videoCodecType = static_cast<agora::rtc::VIDEO_CODEC_TYPE_FOR_STREAM>(videoCodecType); - + AgoraData.userCount = userCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.transcodingUsers, agora::rtc::TranscodingUser, userCount, this->transcodingUsers) SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.transcodingExtraInfo,this->transcodingExtraInfo) SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.metadata,this->metadata) AgoraData.watermarkCount = watermarkCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.watermark, agora::rtc::RtcImage, watermarkCount, this->watermark) - + AgoraData.backgroundImageCount = backgroundImageCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.backgroundImage, agora::rtc::RtcImage, backgroundImageCount, this->backgroundImage) AgoraData.audioSampleRate = static_cast<agora::rtc::AUDIO_SAMPLE_RATE_TYPE>(audioSampleRate); @@ -443,14 +443,14 @@ public: } void FreeAgoraData(agora::rtc::LiveTranscoding & AgoraData) const{ SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.transcodingUsers,userCount, FTranscodingUser) - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMFREE(AgoraData.transcodingExtraInfo) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.watermark, watermarkCount, FRtcImage) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.backgroundImage, backgroundImageCount, FRtcImage) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.advancedFeatures, advancedFeatureCount, FLiveStreamAdvancedFeature) - + } - + }; export class LiveTranscoding { @@ -771,7 +771,7 @@ public: videoBitrate -

                The encoding bitrate (Kbps) of the video. See . This parameter does not need to be set; keeping the default value is sufficient. The SDK automatically matches the most suitable bitrate based on the video resolution and frame rate you have set. For the correspondence between video resolution and frame rate, see .

                +

                The encoding bitrate (Kbps) of the video. See .This parameter does not need to be set; keeping the default value is sufficient. The SDK automatically matches the most suitable bitrate based on the video resolution and frame rate you have set. For the correspondence between video resolution and frame rate, see .

                diff --git a/en-US/dita/RTC-NG/API/class_localvideostats.dita b/en-US/dita/RTC-NG/API/class_localvideostats.dita index f32a452bc5a..927b49e32b5 100644 --- a/en-US/dita/RTC-NG/API/class_localvideostats.dita +++ b/en-US/dita/RTC-NG/API/class_localvideostats.dita @@ -31,50 +31,50 @@ public int hwEncoderAccelerating; }
                export class LocalVideoStats { - + public uid:number = 0; public sentBitrate:number = 0; - + public sentFrameRate:number = 0; - + public captureFrameRate:number = 0; - + public captureFrameWidth:number = 0; - + public captureFrameHeight:number = 0; - + public regulatedCaptureFrameRate:number = 0; - + public regulatedCaptureFrameWidth:number = 0; - + public regulatedCaptureFrameHeight:number = 0; - + public encoderOutputFrameRate:number = 0; - + public rendererOutputFrameRate:number = 0; - + public targetBitrate:number = 0; - + public targetFrameRate:number = 0; - + public qualityAdaptIndication:number = 0; - + public encodedBitrate:number = 0; - + public encodedFrameWidth:number = 0; - + public encodedFrameHeight:number = 0; - + public encodedFrameCount:number = 0; - + public codecType:number = 0; - + public txPacketLossRate:number = 0; - + public captureBrightnessLevel:number = 0; - + public dualStreamEnabled:boolean = false; - + public hwEncoderAccelerating:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcLocalVideoStats : NSObject @@ -238,47 +238,47 @@ public: } }; export class LocalVideoStats { - + uid?: number; - + sentBitrate?: number; - + sentFrameRate?: number; - + captureFrameRate?: number; - + captureFrameWidth?: number; - + captureFrameHeight?: number; - + regulatedCaptureFrameRate?: number; - + regulatedCaptureFrameWidth?: number; - + regulatedCaptureFrameHeight?: number; - + encoderOutputFrameRate?: number; - + encodedFrameWidth?: number; - + encodedFrameHeight?: number; - + rendererOutputFrameRate?: number; - + targetBitrate?: number; - + targetFrameRate?: number; - + qualityAdaptIndication?: QualityAdaptIndication; - + encodedBitrate?: number; - + encodedFrameCount?: number; - + codecType?: VideoCodecType; - + txPacketLossRate?: number; - + captureBrightnessLevel?: CaptureBrightnessLevelType; hwEncoderAccelerating?: number; @@ -297,7 +297,7 @@ public: public int captureFrameWidth { set; get; } public int captureFrameHeight { set; get; } public int regulatedCaptureFrameRate { set; get; } - public int regulatedCaptureFrameWidth { set; get; + public int regulatedCaptureFrameWidth { set; get; public int regulatedCaptureFrameHeight { set; get; } public int encoderOutputFrameRate { set; get; } public int encodedFrameWidth { set; get; } @@ -314,51 +314,51 @@ public: public int hwEncoderAccelerating { set; get; } }; export class LocalVideoStats { - + uid?: number; - + sentBitrate?: number; - + sentFrameRate?: number; - + captureFrameRate?: number; - + captureFrameWidth?: number; - + captureFrameHeight?: number; - + regulatedCaptureFrameRate?: number; - + regulatedCaptureFrameWidth?: number; - + regulatedCaptureFrameHeight?: number; - + encoderOutputFrameRate?: number; - + encodedFrameWidth?: number; - + encodedFrameHeight?: number; - + rendererOutputFrameRate?: number; - + targetBitrate?: number; - + targetFrameRate?: number; - + qualityAdaptIndication?: QualityAdaptIndication; - + encodedBitrate?: number; - + encodedFrameCount?: number; - + codecType?: VideoCodecType; - + txPacketLossRate?: number; - + captureBrightnessLevel?: CaptureBrightnessLevelType; hwEncoderAccelerating?: number; - + } class LocalVideoStats { const LocalVideoStats( @@ -455,7 +455,7 @@ public: _$LocalVideoStatsFromJson(json); Map<String, dynamic> toJson() => _$LocalVideoStatsToJson(this); -} +}

                @@ -517,7 +517,7 @@ public: qualityAdaptIndication - The quality adaptation of the local video stream in the reported interval (based on the target frame rate and target bitrate). See .

                + The quality adaptation of the local video stream in the reported interval (based on the target frame rate and target bitrate). See .

                • (0): The local video quality stays the same.
                • (1): The local video quality improves because the network bandwidth increases.
                • @@ -545,7 +545,7 @@ public: codecType - The codec type of the local video. See .

                  + The codec type of the local video. See .

                  • (1): VP8.
                  • (2): H.264.
                  • @@ -577,7 +577,7 @@ public: hwEncoderAccelerating - The local video encoding acceleration type. See .
                      + The local video encoding acceleration type. See .
                      • 0: Software encoding is applied without acceleration.
                      • 1: Hardware encoding is applied for acceleration.
                      diff --git a/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita b/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita index 54272e4cbb0..a17d1a86aa3 100644 --- a/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita +++ b/en-US/dita/RTC-NG/API/class_lowlightenhanceoptions.dita @@ -112,14 +112,14 @@ public: level - The low-light enhancement level. See .
                        + The low-light enhancement level. See .
                        • (0): (Default) Promotes video quality during low-light enhancement. It processes the brightness, details, and noise of the video image. The performance consumption is moderate, the processing speed is moderate, and the overall video quality is optimal.
                        • (1): Promotes performance during low-light enhancement. It processes the brightness and details of the video image. The processing speed is faster.
                        mode - The low-light enhancement mode. See .
                          + The low-light enhancement mode. See .
                          • (0): (Default) Automatic mode. The SDK automatically enables or disables the low-light enhancement feature according to the ambient light to compensate for the lighting level or prevent overexposure, as necessary.
                          • (1): Manual mode. Users need to enable or disable the low-light enhancement feature manually.
                          diff --git a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita index 227b8750819..6d909abf14b 100644 --- a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita @@ -147,7 +147,7 @@ public: return AgoraData; } void FreeAgoraData(agora::media::base::PlayerStreamInfo & AgoraData) const { - + } }; export class PlayerStreamInfo { @@ -296,7 +296,7 @@ public: streamType mediaStreamType - The type of the media stream. See .
                            + The type of the media stream. See .
                            • (0): The type is unknown.
                            • (1): The video stream.
                            • (2): The audio stream.
                            • diff --git a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita index f6d53604106..b9017cb6a91 100644 --- a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita +++ b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita @@ -25,41 +25,41 @@ public int e2eDelay; } export class RemoteAudioStats { - + public uid:number = 0; - + public quality:number = 0; - + public networkTransportDelay:number = 0; - + public jitterBufferDelay:number = 0; - + public audioLossRate:number = 0; - + public numChannels:number = 0; - + public receivedSampleRate:number = 0; - + public receivedBitrate:number = 0; - + public totalFrozenTime:number = 0; - + public frozenRate:number = 0; - + public mosValue:number = 0; - + public frozenRateByCustomPlcCount:number = 0; - + public plcCount:number = 0; - + public totalActiveTime:bigint = BigInt(0); - + public publishDuration:bigint = BigInt(0); - + public qoeQuality:number = 0; - + public qualityChangedReason:number = 0; - + public rxAudioBytes:number = 0; public e2eDelay:number = 0; @@ -423,7 +423,7 @@ class RemoteAudioStats { quality -

                              The quality of the audio stream sent by the user. See .

                              +

                              The quality of the audio stream sent by the user. See .

                              • (0): The quality is unknown.
                              • @@ -487,7 +487,7 @@ class RemoteAudioStats { qoeQuality -

                                The Quality of Experience (QoE) of the local user when receiving a remote audio stream. See .

                                  +

                                  The Quality of Experience (QoE) of the local user when receiving a remote audio stream. See .

                                  • (0): The QoE of the local user is good.
                                  • (1): The QoE of the local user is poor.

                                  @@ -496,7 +496,7 @@ class RemoteAudioStats { qualityChangedReason -

                                  Reasons why the QoE of the local user when receiving a remote audio stream is poor. See .

                                    +

                                    Reasons why the QoE of the local user when receiving a remote audio stream is poor. See .

                                    • (0): No reason, indicating a good QoE of the local user.
                                    • (1): The remote user's network quality is poor.
                                    • (2): The local user's network quality is poor.
                                    • diff --git a/en-US/dita/RTC-NG/API/class_remotevideostats.dita b/en-US/dita/RTC-NG/API/class_remotevideostats.dita index d75591dd125..3760192db83 100644 --- a/en-US/dita/RTC-NG/API/class_remotevideostats.dita +++ b/en-US/dita/RTC-NG/API/class_remotevideostats.dita @@ -25,41 +25,41 @@ public long publishDuration; } export class RemoteVideoStats { - + public uid:number = 0; - + public delay:number = 0; - + public e2eDelay:number = 0; - + public width:number = 0; - + public height:number = 0; - + public receivedBitrate:number = 0; - + public decoderOutputFrameRate:number = 0; - + public rendererOutputFrameRate:number = 0; - + public frameLossRate:number = 0; - + public packetLossRate:number = 0; - + public rxStreamType:number = 0; - + public totalFrozenTime:number = 0; - + public frozenRate:number = 0; - + public avSyncTimeMs:number = 0; - + public totalActiveTime:bigint = BigInt(0); - + public publishDuration:bigint = BigInt(0); - + public mosValue:number = 0; - + public rxVideoBytes:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcRemoteVideoStats : NSObject @@ -414,7 +414,7 @@ class RemoteVideoStats { rxStreamType - The type of the video stream. See .

                                      + The type of the video stream. See .

                                      • (0): High-quality stream, that is, a high-resolution and high-bitrate video stream.
                                      • (1): Low-quality stream, that is, a low-resolution and low-bitrate video stream.
                                      • diff --git a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita index edc5e9b753e..e6a31b540a7 100644 --- a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -75,17 +75,17 @@ public: } }; export class ScreenCaptureConfiguration { - + isCaptureWindow?: boolean; - + displayId?: number; - + screenRect?: Rectangle; - + windowId?: any; - + params?: ScreenCaptureParameters; - + regionRect?: Rectangle; } public class ScreenCaptureConfiguration @@ -116,17 +116,17 @@ public: } } export class ScreenCaptureConfiguration { - + isCaptureWindow?: boolean; - + displayId?: number; - + screenRect?: Rectangle; - + windowId?: any; - + params?: ScreenCaptureParameters; - + regionRect?: Rectangle; } class ScreenCaptureConfiguration { @@ -153,7 +153,7 @@ public: factory ScreenCaptureConfiguration.fromJson(Map<String, dynamic> json) => _$ScreenCaptureConfigurationFromJson(json); Map<String, dynamic> toJson() => _$ScreenCaptureConfigurationToJson(this); -} +}

                @@ -182,7 +182,7 @@ public: params parameters - (For Windows and macOS only) The screen capture configuration. See . + (For Windows and macOS only) The screen capture configuration. See . regionRect diff --git a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita index aad86bbe8c6..5bdb077c65c 100644 --- a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -63,7 +63,7 @@ public: bool primaryMonitor = false; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") bool isOccluded = false; - + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") FRectangle position = FRectangle(); UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") @@ -117,21 +117,21 @@ public: #endif }; export class ScreenCaptureSourceInfo { - + type?: ScreenCaptureSourceType; - + sourceId?: any; - + sourceName?: string; - + thumbImage?: ThumbImageBuffer; - + iconImage?: ThumbImageBuffer; - + processPath?: string; - + sourceTitle?: string; - + primaryMonitor?: boolean; position?: Rectangle; @@ -205,7 +205,7 @@ public: _$ScreenCaptureSourceInfoFromJson(json); Map<String, dynamic> toJson() => _$ScreenCaptureSourceInfoToJson(this); -} +}

                @@ -248,7 +248,7 @@ public: position - The position of a window relative to the entire screen space (including all shareable screens). See . See . + The position of a window relative to the entire screen space (including all shareable screens). See .See . minimizeWindow diff --git a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita index ae74a7cdc82..598d9987e65 100644 --- a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita +++ b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita @@ -103,13 +103,13 @@ public: #endif }; export class ScreenVideoParameters { - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + contentHint?: VideoContentHint; } public class ScreenVideoParameters @@ -129,19 +129,19 @@ public: } }; export class ScreenVideoParameters { - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + contentHint?: VideoContentHint; } class ScreenVideoParameters { const ScreenVideoParameters( {this.dimensions, this.frameRate, this.bitrate, this.contentHint}); - + @JsonKey(name: 'dimensions') final VideoDimensions? dimensions; @JsonKey(name: 'frameRate') @@ -153,7 +153,7 @@ public: factory ScreenVideoParameters.fromJson(Map<String, dynamic> json) => _$ScreenVideoParametersFromJson(json); Map<String, dynamic> toJson() => _$ScreenVideoParametersToJson(this); -} +}

                @@ -216,7 +216,7 @@ public:
              • The billing for the screen sharing stream is based on the value of dimensions. When you do not pass in a value, Agora bills you at 1280 × 720; when you pass in a value, Agora bills you at that value.
              • The value of this parameter does not indicate the orientation mode of the output video. For how to set the video orientation, see .
              • Whether the 720p resolution or above can be supported depends on the device. If the device cannot support 720p, the frame rate will be lower than the set value.
              • -
              + When setting the encoding resolution in the scenario of sharing documents (), choose one of the following two methods:
              • If you require the best image quality, it is recommended to set the encoding resolution to be the same as the capture resolution.
              • If you wish to achieve a relative balance between image quality, bandwidth, and system performance, then:
                  @@ -237,7 +237,7 @@ public: contentHint - The content hint for screen sharing. See .
                    + The content hint for screen sharing. See .
                    • (0): (Default) No content hint.
                    • (1): Motion-intensive content. Choose this option if you prefer smoothness or when you are sharing a video clip, movie, or video game.
                    • (2): Motionless content. Choose this option if you prefer sharpness or when you are sharing a picture, PowerPoint slides, or texts.
                    • diff --git a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita index 914c35101af..63d9b21e74a 100644 --- a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita +++ b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita @@ -24,9 +24,9 @@ export class SegmentationProperty { public static readonly SEG_MODEL_AI:number = 1; public static readonly SEG_MODEL_GREEN:number = 2; - + public modelType:number = SegmentationProperty.SEG_MODEL_AI; - + public greenCapacity:number = 0.5; } __attribute__((visibility("default"))) @interface AgoraSegmentationProperty: NSObject @@ -103,7 +103,7 @@ public: _$SegmentationPropertyFromJson(json); Map<String, dynamic> toJson() => _$SegmentationPropertyToJson(this); -} +}

                      @@ -114,7 +114,7 @@ public: modelType - The type of algorithms to user for background processing. See .
                        + The type of algorithms to user for background processing. See .
                        • (1): (Default) Use the algorithm suitable for all scenarios.
                        • (2): Use the algorithm designed specifically for scenarios with a green screen background.
                        diff --git a/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita b/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita index 24bd7af9c2d..dcc9ea6acb6 100644 --- a/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita +++ b/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita @@ -26,9 +26,9 @@ } export class SimulcastStreamConfig { public dimensions: VideoDimensions; - + public bitrate: number = -1; - + public framerate: number = 5; constructor() { this.dimensions = new VideoDimensions(-1, -1); @@ -115,7 +115,7 @@ public: dimensions - The video dimension. See . The default value is 50% of the high-quality video stream. + The video dimension. See .The default value is 50% of the high-quality video stream. bitrate diff --git a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita index b72a02052c6..498e0c7a10d 100644 --- a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita +++ b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita @@ -36,9 +36,9 @@ struct FUserAudioSpectrumInfo { FAudioSpectrumData spectrumData; }; export class UserAudioSpectrumInfo { - + uid?: number; - + spectrumData?: AudioSpectrumData; } public struct UserAudioSpectrumInfo @@ -47,9 +47,9 @@ struct FUserAudioSpectrumInfo { public AudioSpectrumData spectrumData; }; export class UserAudioSpectrumInfo { - + uid?: number; - + spectrumData?: AudioSpectrumData; } class UserAudioSpectrumInfo { @@ -77,7 +77,7 @@ struct FUserAudioSpectrumInfo { audioSpectrumData spectrumData -

                        Audio spectrum information of the remote user. See .

                        +

                        Audio spectrum information of the remote user. See .

                      diff --git a/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita b/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita index bb51fd42b85..917fbf85f43 100644 --- a/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita +++ b/en-US/dita/RTC-NG/API/class_videodenoiseroptions.dita @@ -111,7 +111,7 @@ public: level - Video noise reduction level. See .
                        + Video noise reduction level. See .
                        • (0): (Default) Promotes video quality during low-light enhancement. It processes the brightness, details, and noise of the video image. The performance consumption is moderate, the processing speed is moderate, and the overall video quality is optimal.
                        • (1): Promotes reducing performance consumption during video noise reduction. It prioritizes reducing performance consumption over video noise reduction quality. The performance consumption is lower, and the video noise reduction speed is faster. To avoid a noticeable shadowing effect (shadows trailing behind moving objects) in the processed video, Agora recommends that you use this setting when the camera is fixed.
                        @@ -119,7 +119,7 @@ public: mode - Video noise reduction mode. See .
                          + Video noise reduction mode. See .
                          • (0): (Default) Automatic mode. The SDK automatically enables or disables the video noise reduction feature according to the ambient light.
                          • (1): Manual mode. Users need to enable or disable the video noise reduction feature manually.
                          diff --git a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita index d964f9685b4..c4f8c49a657 100644 --- a/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_videoencoderconfiguration.dita @@ -595,7 +595,7 @@ public: bitrate -

                          The encoding bitrate (Kbps) of the video. See . This parameter does not need to be set; keeping the default value is sufficient. The SDK automatically matches the most suitable bitrate based on the video resolution and frame rate you have set. For the correspondence between video resolution and frame rate, see .

                          +

                          The encoding bitrate (Kbps) of the video. See .This parameter does not need to be set; keeping the default value is sufficient. The SDK automatically matches the most suitable bitrate based on the video resolution and frame rate you have set. For the correspondence between video resolution and frame rate, see .

                          • (0): (Recommended) Standard bitrate mode.
                          • (-1): Adaptive bitrate mode. In general, Agora suggests that you do not use this value.
                          • diff --git a/en-US/dita/RTC-NG/API/class_videoframe.dita b/en-US/dita/RTC-NG/API/class_videoframe.dita index 6169ab03551..eb075247102 100644 --- a/en-US/dita/RTC-NG/API/class_videoframe.dita +++ b/en-US/dita/RTC-NG/API/class_videoframe.dita @@ -907,7 +907,7 @@ class VideoFrame { alphaStitchMode - When the video frame contains alpha channel data, it represents the relative position of alphaBuffer and the video frame. See .
                              + When the video frame contains alpha channel data, it represents the relative position of alphaBuffer and the video frame. See .
                              • 0: (Default) Only video frame, that is, alphaBuffer is not stitched with the video frame.
                              • (1): alphaBuffer is above the video frame.
                              • (2): alphaBuffer is below the video frame.
                              • diff --git a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita index 5e2c6e98ca8..0bff06c5b3a 100644 --- a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita +++ b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita @@ -35,29 +35,29 @@ } export class VirtualBackgroundSource { - + public static readonly BACKGROUND_NONE:number = 0; - + public static readonly BACKGROUND_COLOR:number = 1; - + public static readonly BACKGROUND_IMG:number = 2; - + public static readonly BACKGROUND_BLUR:number = 3; - + public static readonly BACKGROUND_VIDEO:number = 4; - + public static readonly BLUR_DEGREE_LOW:number = 1; - + public static readonly BLUR_DEGREE_MEDIUM:number = 2; - + public static readonly BLUR_DEGREE_HIGH:number = 3; - + public backgroundSourceType:number = VirtualBackgroundSource.BACKGROUND_COLOR; - + public color:number = 0xffffff; - + public source?:string; - + public blurDegree:number = VirtualBackgroundSource.BLUR_DEGREE_HIGH; } __attribute__((visibility("default"))) @interface AgoraVirtualBackgroundSource : NSObject @@ -119,13 +119,13 @@ public: } }; export class VirtualBackgroundSource { - + background_source_type?: BackgroundSourceType; - + color?: number; - + source?: string; - + blur_degree?: BackgroundBlurDegree; } public class VirtualBackgroundSource @@ -143,13 +143,13 @@ public: public BACKGROUND_BLUR_DEGREE blur_degree; }; export class VirtualBackgroundSource { - + background_source_type?: BackgroundSourceType; - + color?: number; - + source?: string; - + blur_degree?: BackgroundBlurDegree; } class VirtualBackgroundSource { @@ -167,7 +167,7 @@ public: factory VirtualBackgroundSource.fromJson(Map<String, dynamic> json) => _$VirtualBackgroundSourceFromJson(json); Map<String, dynamic> toJson() => _$VirtualBackgroundSourceToJson(this); -} +}

                                @@ -176,7 +176,7 @@ public: backgroundSourceType background_source_type - The custom background. See .
                                  + The custom background. See .
                                  • (0): Process the background as alpha data without replacement, only separating the portrait and the background. After setting this value, you can call to implement the picture-in-picture effect.
                                  • (1): (Default) The background image is a solid color.
                                  • (2): The background image is a file in PNG or JPG format.
                                  • @@ -199,7 +199,7 @@ public: blurDegree blur_degree - The degree of blurring applied to the custom background image. See .
                                      + The degree of blurring applied to the custom background image. See .
                                      • (1): The degree of blurring applied to the custom background image is low. The user can almost see the background clearly.
                                      • (2): The degree of blurring applied to the custom background image is medium. It is difficult for the user to recognize details in the background.
                                      • (3): The degree of blurring applied to the custom background image is high. The user can barely see any distinguishing features in the background.
                                      • From e8f8ab0c3418cd841681b15f23c9f92fbfec703b Mon Sep 17 00:00:00 2001 From: Suri539 Date: Fri, 29 Nov 2024 07:06:45 +0000 Subject: [PATCH 354/354] Sync cn prototype to en prototype --- .../dita/RTC-NG/API/class_beautyoptions.dita | 22 +-- .../RTC-NG/API/class_clientroleoptions.dita | 8 +- .../dita/RTC-NG/API/class_codeccaplevels.dita | 2 +- .../RTC-NG/API/class_livetranscoding.dita | 46 +++--- .../RTC-NG/API/class_localvideostats.dita | 134 +++++++++--------- .../RTC-NG/API/class_playerstreaminfo.dita | 2 +- .../RTC-NG/API/class_remoteaudiostats.dita | 36 ++--- .../RTC-NG/API/class_remotevideostats.dita | 36 ++--- .../API/class_screencaptureconfiguration.dita | 26 ++-- .../API/class_screencapturesourceinfo.dita | 20 +-- .../API/class_screenvideoparameters.dita | 20 +-- .../API/class_segmentationproperty.dita | 6 +- .../API/class_simulcaststreamconfig.dita | 4 +- .../API/class_useraudiospectruminfo.dita | 8 +- .../API/class_virtualbackgroundsource.dita | 42 +++--- 15 files changed, 206 insertions(+), 206 deletions(-) diff --git a/en-US/dita/RTC-NG/API/class_beautyoptions.dita b/en-US/dita/RTC-NG/API/class_beautyoptions.dita index 69457f3acda..f15393fc08a 100644 --- a/en-US/dita/RTC-NG/API/class_beautyoptions.dita +++ b/en-US/dita/RTC-NG/API/class_beautyoptions.dita @@ -84,15 +84,15 @@ public: } }; export class BeautyOptions { - + lighteningContrastLevel?: LighteningContrastLevel; - + lighteningLevel?: number; - + smoothnessLevel?: number; - + rednessLevel?: number; - + sharpnessLevel?: number; } public class BeautyOptions @@ -135,15 +135,15 @@ public: public float sharpnessLevel { set; get; } } export class BeautyOptions { - + lighteningContrastLevel?: LighteningContrastLevel; - + lighteningLevel?: number; - + smoothnessLevel?: number; - + rednessLevel?: number; - + sharpnessLevel?: number; } class BeautyOptions { @@ -153,7 +153,7 @@ public: this.smoothnessLevel, this.rednessLevel, this.sharpnessLevel}); - + @JsonKey(name: 'lighteningContrastLevel') final LighteningContrastLevel? lighteningContrastLevel; @JsonKey(name: 'lighteningLevel') diff --git a/en-US/dita/RTC-NG/API/class_clientroleoptions.dita b/en-US/dita/RTC-NG/API/class_clientroleoptions.dita index a3d238194fd..c8e3fccccff 100644 --- a/en-US/dita/RTC-NG/API/class_clientroleoptions.dita +++ b/en-US/dita/RTC-NG/API/class_clientroleoptions.dita @@ -15,7 +15,7 @@ } } export class ClientRoleOptions { - + public audienceLatencyLevel: Constants.AudienceLatencyLevel = Constants.AudienceLatencyLevel.LOW_LATENCY; } __attribute__((visibility("default"))) @interface AgoraClientRoleOptions: NSObject @@ -48,7 +48,7 @@ public: } }; export class ClientRoleOptions { - + audienceLatencyLevel?: AudienceLatencyLevelType; } public class ClientRoleOptions @@ -61,7 +61,7 @@ public: public AUDIENCE_LATENCY_LEVEL_TYPE audienceLatencyLevel; }; export class ClientRoleOptions { - + audienceLatencyLevel?: AudienceLatencyLevelType; } class ClientRoleOptions { @@ -72,7 +72,7 @@ public: factory ClientRoleOptions.fromJson(Map<String, dynamic> json) => _$ClientRoleOptionsFromJson(json); Map<String, dynamic> toJson() => _$ClientRoleOptionsToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_codeccaplevels.dita b/en-US/dita/RTC-NG/API/class_codeccaplevels.dita index 57c136b2b6a..73222db379c 100644 --- a/en-US/dita/RTC-NG/API/class_codeccaplevels.dita +++ b/en-US/dita/RTC-NG/API/class_codeccaplevels.dita @@ -40,7 +40,7 @@ public: FENUMWRAP_VIDEO_CODEC_CAPABILITY_LEVEL hwDecodingLevel; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FCodecCapLevels") FENUMWRAP_VIDEO_CODEC_CAPABILITY_LEVEL swDecodingLevel; - + FCodecCapLevels() {} FCodecCapLevels(const agora::rtc::CodecCapLevels& AgoraData) { hwDecodingLevel = AgoraData.hwDecodingLevel; diff --git a/en-US/dita/RTC-NG/API/class_livetranscoding.dita b/en-US/dita/RTC-NG/API/class_livetranscoding.dita index 9cf5ae8c69c..e608b52c7cb 100644 --- a/en-US/dita/RTC-NG/API/class_livetranscoding.dita +++ b/en-US/dita/RTC-NG/API/class_livetranscoding.dita @@ -226,39 +226,39 @@ } } export class LiveTranscoding { - + public width: number; - + public height: number; - + public videoBitrate: number; - + public videoFramerate: number; - + public videoGop: number; - + public watermarkList?: Array<AgoraImage>; - + public backgroundImageList?: Array<AgoraImage>; - + public audioSampleRate: Constants.AudioSampleRateType; - + public audioBitrate: number; - + public audioChannels: number; - + public audioCodecProfile: Constants.AudioCodecProfileType; - + public videoCodecProfile: Constants.VideoCodecProfileType; - + public videoCodecType: Constants.VideoCodecType; - + public userConfigExtraInfo?: string; - + public metadata?: string; - + public transcodingUsers: Map<number, TranscodingUser>; - + public advancedFeatures: Map<string, boolean>; constructor() { this.width = 360; @@ -392,7 +392,7 @@ public: for(int i = 0; i< userCount; i++){ transcodingUsers.Add(FTranscodingUser((AgoraData.transcodingUsers[i]))); } - + transcodingExtraInfo = UTF8_TO_TCHAR(AgoraData.transcodingExtraInfo); metadata = UTF8_TO_TCHAR(AgoraData.metadata); for(unsigned int i =0; i< AgoraData.watermarkCount;i++) @@ -424,14 +424,14 @@ public: AgoraData.videoCodecProfile = static_cast<agora::rtc::VIDEO_CODEC_PROFILE_TYPE>(videoCodecProfile); AgoraData.backgroundColor = static_cast<unsigned int>(backgroundColor); AgoraData.videoCodecType = static_cast<agora::rtc::VIDEO_CODEC_TYPE_FOR_STREAM>(videoCodecType); - + AgoraData.userCount = userCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.transcodingUsers, agora::rtc::TranscodingUser, userCount, this->transcodingUsers) SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.transcodingExtraInfo,this->transcodingExtraInfo) SET_UABT_FSTRING_TO_CONST_CHAR___MEMALLOC(AgoraData.metadata,this->metadata) AgoraData.watermarkCount = watermarkCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.watermark, agora::rtc::RtcImage, watermarkCount, this->watermark) - + AgoraData.backgroundImageCount = backgroundImageCount; SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMALLOC(AgoraData.backgroundImage, agora::rtc::RtcImage, backgroundImageCount, this->backgroundImage) AgoraData.audioSampleRate = static_cast<agora::rtc::AUDIO_SAMPLE_RATE_TYPE>(audioSampleRate); @@ -443,14 +443,14 @@ public: } void FreeAgoraData(agora::rtc::LiveTranscoding & AgoraData) const{ SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.transcodingUsers,userCount, FTranscodingUser) - + SET_UABT_FSTRING_TO_CONST_CHAR___MEMFREE(AgoraData.transcodingExtraInfo) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.watermark, watermarkCount, FRtcImage) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.backgroundImage, backgroundImageCount, FRtcImage) SET_UABT_TARRARY_CUSTOMDATA_TO_AGORA_ARRAY___MEMFREE(AgoraData.advancedFeatures, advancedFeatureCount, FLiveStreamAdvancedFeature) - + } - + }; export class LiveTranscoding { diff --git a/en-US/dita/RTC-NG/API/class_localvideostats.dita b/en-US/dita/RTC-NG/API/class_localvideostats.dita index 927b49e32b5..0a0ba4771c4 100644 --- a/en-US/dita/RTC-NG/API/class_localvideostats.dita +++ b/en-US/dita/RTC-NG/API/class_localvideostats.dita @@ -31,50 +31,50 @@ public int hwEncoderAccelerating; } export class LocalVideoStats { - + public uid:number = 0; public sentBitrate:number = 0; - + public sentFrameRate:number = 0; - + public captureFrameRate:number = 0; - + public captureFrameWidth:number = 0; - + public captureFrameHeight:number = 0; - + public regulatedCaptureFrameRate:number = 0; - + public regulatedCaptureFrameWidth:number = 0; - + public regulatedCaptureFrameHeight:number = 0; - + public encoderOutputFrameRate:number = 0; - + public rendererOutputFrameRate:number = 0; - + public targetBitrate:number = 0; - + public targetFrameRate:number = 0; - + public qualityAdaptIndication:number = 0; - + public encodedBitrate:number = 0; - + public encodedFrameWidth:number = 0; - + public encodedFrameHeight:number = 0; - + public encodedFrameCount:number = 0; - + public codecType:number = 0; - + public txPacketLossRate:number = 0; - + public captureBrightnessLevel:number = 0; - + public dualStreamEnabled:boolean = false; - + public hwEncoderAccelerating:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcLocalVideoStats : NSObject @@ -238,47 +238,47 @@ public: } }; export class LocalVideoStats { - + uid?: number; - + sentBitrate?: number; - + sentFrameRate?: number; - + captureFrameRate?: number; - + captureFrameWidth?: number; - + captureFrameHeight?: number; - + regulatedCaptureFrameRate?: number; - + regulatedCaptureFrameWidth?: number; - + regulatedCaptureFrameHeight?: number; - + encoderOutputFrameRate?: number; - + encodedFrameWidth?: number; - + encodedFrameHeight?: number; - + rendererOutputFrameRate?: number; - + targetBitrate?: number; - + targetFrameRate?: number; - + qualityAdaptIndication?: QualityAdaptIndication; - + encodedBitrate?: number; - + encodedFrameCount?: number; - + codecType?: VideoCodecType; - + txPacketLossRate?: number; - + captureBrightnessLevel?: CaptureBrightnessLevelType; hwEncoderAccelerating?: number; @@ -297,7 +297,7 @@ public: public int captureFrameWidth { set; get; } public int captureFrameHeight { set; get; } public int regulatedCaptureFrameRate { set; get; } - public int regulatedCaptureFrameWidth { set; get; + public int regulatedCaptureFrameWidth { set; get; public int regulatedCaptureFrameHeight { set; get; } public int encoderOutputFrameRate { set; get; } public int encodedFrameWidth { set; get; } @@ -314,51 +314,51 @@ public: public int hwEncoderAccelerating { set; get; } }; export class LocalVideoStats { - + uid?: number; - + sentBitrate?: number; - + sentFrameRate?: number; - + captureFrameRate?: number; - + captureFrameWidth?: number; - + captureFrameHeight?: number; - + regulatedCaptureFrameRate?: number; - + regulatedCaptureFrameWidth?: number; - + regulatedCaptureFrameHeight?: number; - + encoderOutputFrameRate?: number; - + encodedFrameWidth?: number; - + encodedFrameHeight?: number; - + rendererOutputFrameRate?: number; - + targetBitrate?: number; - + targetFrameRate?: number; - + qualityAdaptIndication?: QualityAdaptIndication; - + encodedBitrate?: number; - + encodedFrameCount?: number; - + codecType?: VideoCodecType; - + txPacketLossRate?: number; - + captureBrightnessLevel?: CaptureBrightnessLevelType; hwEncoderAccelerating?: number; - + } class LocalVideoStats { const LocalVideoStats( @@ -455,7 +455,7 @@ public: _$LocalVideoStatsFromJson(json); Map<String, dynamic> toJson() => _$LocalVideoStatsToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita index 6d909abf14b..022d3b4c653 100644 --- a/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita +++ b/en-US/dita/RTC-NG/API/class_playerstreaminfo.dita @@ -147,7 +147,7 @@ public: return AgoraData; } void FreeAgoraData(agora::media::base::PlayerStreamInfo & AgoraData) const { - + } }; export class PlayerStreamInfo { diff --git a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita index b9017cb6a91..0a5826a74c4 100644 --- a/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita +++ b/en-US/dita/RTC-NG/API/class_remoteaudiostats.dita @@ -25,41 +25,41 @@ public int e2eDelay; } export class RemoteAudioStats { - + public uid:number = 0; - + public quality:number = 0; - + public networkTransportDelay:number = 0; - + public jitterBufferDelay:number = 0; - + public audioLossRate:number = 0; - + public numChannels:number = 0; - + public receivedSampleRate:number = 0; - + public receivedBitrate:number = 0; - + public totalFrozenTime:number = 0; - + public frozenRate:number = 0; - + public mosValue:number = 0; - + public frozenRateByCustomPlcCount:number = 0; - + public plcCount:number = 0; - + public totalActiveTime:bigint = BigInt(0); - + public publishDuration:bigint = BigInt(0); - + public qoeQuality:number = 0; - + public qualityChangedReason:number = 0; - + public rxAudioBytes:number = 0; public e2eDelay:number = 0; diff --git a/en-US/dita/RTC-NG/API/class_remotevideostats.dita b/en-US/dita/RTC-NG/API/class_remotevideostats.dita index 3760192db83..ea91c18db4d 100644 --- a/en-US/dita/RTC-NG/API/class_remotevideostats.dita +++ b/en-US/dita/RTC-NG/API/class_remotevideostats.dita @@ -25,41 +25,41 @@ public long publishDuration; } export class RemoteVideoStats { - + public uid:number = 0; - + public delay:number = 0; - + public e2eDelay:number = 0; - + public width:number = 0; - + public height:number = 0; - + public receivedBitrate:number = 0; - + public decoderOutputFrameRate:number = 0; - + public rendererOutputFrameRate:number = 0; - + public frameLossRate:number = 0; - + public packetLossRate:number = 0; - + public rxStreamType:number = 0; - + public totalFrozenTime:number = 0; - + public frozenRate:number = 0; - + public avSyncTimeMs:number = 0; - + public totalActiveTime:bigint = BigInt(0); - + public publishDuration:bigint = BigInt(0); - + public mosValue:number = 0; - + public rxVideoBytes:number = 0; } __attribute__((visibility("default"))) @interface AgoraRtcRemoteVideoStats : NSObject diff --git a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita index e6a31b540a7..80c62c52582 100644 --- a/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita +++ b/en-US/dita/RTC-NG/API/class_screencaptureconfiguration.dita @@ -75,17 +75,17 @@ public: } }; export class ScreenCaptureConfiguration { - + isCaptureWindow?: boolean; - + displayId?: number; - + screenRect?: Rectangle; - + windowId?: any; - + params?: ScreenCaptureParameters; - + regionRect?: Rectangle; } public class ScreenCaptureConfiguration @@ -116,17 +116,17 @@ public: } } export class ScreenCaptureConfiguration { - + isCaptureWindow?: boolean; - + displayId?: number; - + screenRect?: Rectangle; - + windowId?: any; - + params?: ScreenCaptureParameters; - + regionRect?: Rectangle; } class ScreenCaptureConfiguration { @@ -153,7 +153,7 @@ public: factory ScreenCaptureConfiguration.fromJson(Map<String, dynamic> json) => _$ScreenCaptureConfigurationFromJson(json); Map<String, dynamic> toJson() => _$ScreenCaptureConfigurationToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita index 5bdb077c65c..a4153cd64aa 100644 --- a/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita +++ b/en-US/dita/RTC-NG/API/class_screencapturesourceinfo.dita @@ -63,7 +63,7 @@ public: bool primaryMonitor = false; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") bool isOccluded = false; - + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") FRectangle position = FRectangle(); UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Agora|FScreenCaptureSourceInfo") @@ -117,21 +117,21 @@ public: #endif }; export class ScreenCaptureSourceInfo { - + type?: ScreenCaptureSourceType; - + sourceId?: any; - + sourceName?: string; - + thumbImage?: ThumbImageBuffer; - + iconImage?: ThumbImageBuffer; - + processPath?: string; - + sourceTitle?: string; - + primaryMonitor?: boolean; position?: Rectangle; @@ -205,7 +205,7 @@ public: _$ScreenCaptureSourceInfoFromJson(json); Map<String, dynamic> toJson() => _$ScreenCaptureSourceInfoToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita index 598d9987e65..65ba9b23da0 100644 --- a/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita +++ b/en-US/dita/RTC-NG/API/class_screenvideoparameters.dita @@ -103,13 +103,13 @@ public: #endif }; export class ScreenVideoParameters { - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + contentHint?: VideoContentHint; } public class ScreenVideoParameters @@ -129,19 +129,19 @@ public: } }; export class ScreenVideoParameters { - + dimensions?: VideoDimensions; - + frameRate?: number; - + bitrate?: number; - + contentHint?: VideoContentHint; } class ScreenVideoParameters { const ScreenVideoParameters( {this.dimensions, this.frameRate, this.bitrate, this.contentHint}); - + @JsonKey(name: 'dimensions') final VideoDimensions? dimensions; @JsonKey(name: 'frameRate') @@ -153,7 +153,7 @@ public: factory ScreenVideoParameters.fromJson(Map<String, dynamic> json) => _$ScreenVideoParametersFromJson(json); Map<String, dynamic> toJson() => _$ScreenVideoParametersToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita index 63d9b21e74a..9b49842ef25 100644 --- a/en-US/dita/RTC-NG/API/class_segmentationproperty.dita +++ b/en-US/dita/RTC-NG/API/class_segmentationproperty.dita @@ -24,9 +24,9 @@ export class SegmentationProperty { public static readonly SEG_MODEL_AI:number = 1; public static readonly SEG_MODEL_GREEN:number = 2; - + public modelType:number = SegmentationProperty.SEG_MODEL_AI; - + public greenCapacity:number = 0.5; } __attribute__((visibility("default"))) @interface AgoraSegmentationProperty: NSObject @@ -103,7 +103,7 @@ public: _$SegmentationPropertyFromJson(json); Map<String, dynamic> toJson() => _$SegmentationPropertyToJson(this); -} +}

                                diff --git a/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita b/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita index dcc9ea6acb6..5a95ba022d3 100644 --- a/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita +++ b/en-US/dita/RTC-NG/API/class_simulcaststreamconfig.dita @@ -26,9 +26,9 @@ } export class SimulcastStreamConfig { public dimensions: VideoDimensions; - + public bitrate: number = -1; - + public framerate: number = 5; constructor() { this.dimensions = new VideoDimensions(-1, -1); diff --git a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita index 498e0c7a10d..8b3aa2f5c0a 100644 --- a/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita +++ b/en-US/dita/RTC-NG/API/class_useraudiospectruminfo.dita @@ -36,9 +36,9 @@ struct FUserAudioSpectrumInfo { FAudioSpectrumData spectrumData; }; export class UserAudioSpectrumInfo { - + uid?: number; - + spectrumData?: AudioSpectrumData; } public struct UserAudioSpectrumInfo @@ -47,9 +47,9 @@ struct FUserAudioSpectrumInfo { public AudioSpectrumData spectrumData; }; export class UserAudioSpectrumInfo { - + uid?: number; - + spectrumData?: AudioSpectrumData; } class UserAudioSpectrumInfo { diff --git a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita index 0bff06c5b3a..e1bef0fb006 100644 --- a/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita +++ b/en-US/dita/RTC-NG/API/class_virtualbackgroundsource.dita @@ -35,29 +35,29 @@ } export class VirtualBackgroundSource { - + public static readonly BACKGROUND_NONE:number = 0; - + public static readonly BACKGROUND_COLOR:number = 1; - + public static readonly BACKGROUND_IMG:number = 2; - + public static readonly BACKGROUND_BLUR:number = 3; - + public static readonly BACKGROUND_VIDEO:number = 4; - + public static readonly BLUR_DEGREE_LOW:number = 1; - + public static readonly BLUR_DEGREE_MEDIUM:number = 2; - + public static readonly BLUR_DEGREE_HIGH:number = 3; - + public backgroundSourceType:number = VirtualBackgroundSource.BACKGROUND_COLOR; - + public color:number = 0xffffff; - + public source?:string; - + public blurDegree:number = VirtualBackgroundSource.BLUR_DEGREE_HIGH; } __attribute__((visibility("default"))) @interface AgoraVirtualBackgroundSource : NSObject @@ -119,13 +119,13 @@ public: } }; export class VirtualBackgroundSource { - + background_source_type?: BackgroundSourceType; - + color?: number; - + source?: string; - + blur_degree?: BackgroundBlurDegree; } public class VirtualBackgroundSource @@ -143,13 +143,13 @@ public: public BACKGROUND_BLUR_DEGREE blur_degree; }; export class VirtualBackgroundSource { - + background_source_type?: BackgroundSourceType; - + color?: number; - + source?: string; - + blur_degree?: BackgroundBlurDegree; } class VirtualBackgroundSource { @@ -167,7 +167,7 @@ public: factory VirtualBackgroundSource.fromJson(Map<String, dynamic> json) => _$VirtualBackgroundSourceFromJson(json); Map<String, dynamic> toJson() => _$VirtualBackgroundSourceToJson(this); -} +}