\hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{}\doxysection{io.\+agora.\+rtc2.\+Rtc\+Engine Class Reference}
\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine}\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
Inheritance diagram for io.\+agora.\+rtc2.\+Rtc\+Engine\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=3.000000cm]{classio_1_1agora_1_1rtc2_1_1_rtc_engine}
\end{center}
\end{figure}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6eb91768f2a6efedb6f581e9a42bed0}{set\+Channel\+Profile}} (int profile)
\begin{DoxyCompactList}\small\item\em Sets the channel profile. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}{set\+Client\+Role}} (int role)
\begin{DoxyCompactList}\small\item\em Sets the client role. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae61dcff88a6c9854770fbd8cf14310f3}{set\+Client\+Role}} (int role, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_client_role_options}{Client\+Role\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets the user role and the audience latency level in a live streaming scenario. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a53300ddeb64455cd7f7d7c2eb3f08d1e}{send\+Custom\+Report\+Message}} (String id, String category, String event, String label, int value)
\begin{DoxyCompactList}\small\item\em Reports customized messages. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2253d93887b5dd10ee10a84b51aaf57}{preload\+Channel}} (String token, String channel\+Name, int optional\+Uid)
\begin{DoxyCompactList}\small\item\em Preloads a channel with {\ttfamily token}, {\ttfamily channel\+Name}, and {\ttfamily optional\+Uid}. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fcf306ca1009b0318248a30d90e928d}{preload\+Channel\+With\+User\+Account}} (String token, String channel\+Name, String user\+Account)
\begin{DoxyCompactList}\small\item\em Preloads a channel with {\ttfamily token}, {\ttfamily channel\+Name}, and {\ttfamily user\+Account}. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36f318ebd447878bba6789836cf0f89f}{update\+Preload\+Channel\+Token}} (String token)
\begin{DoxyCompactList}\small\item\em Updates the wildcard token for preloading channels. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}{join\+Channel}} (String token, String channel\+Id, String optional\+Info, int uid)
\begin{DoxyCompactList}\small\item\em Joins a channel. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel}} (String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)
\begin{DoxyCompactList}\small\item\em Joins a channel with media options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9d596bab97c3b7b164e9f7a61732da4b}{register\+Local\+User\+Account}} (String app\+Id, String user\+Account)
\begin{DoxyCompactList}\small\item\em Registers a user account. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}{join\+Channel\+With\+User\+Account}} (String token, String channel\+Name, String user\+Account)
\begin{DoxyCompactList}\small\item\em Joins a channel with a User Account and Token. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a65d0e8211e6a9ac4dde5d67ced844cfa}{join\+Channel\+With\+User\+Account}} (String token, String channel\+Name, String user\+Account, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)
\begin{DoxyCompactList}\small\item\em Join a channel using a user account and token, and set the media options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad5b7ad4d48999316546cdc9d6c21cd19}{get\+User\+Info\+By\+User\+Account}} (String user\+Account, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}} user\+Info)
\begin{DoxyCompactList}\small\item\em Gets the user information by passing in the user account. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa8b9d7d2958d6e712caf2df0f3fd3eb5}{get\+User\+Info\+By\+Uid}} (int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}} user\+Info)
\begin{DoxyCompactList}\small\item\em Gets the user information by passing in the user ID. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} ()
\begin{DoxyCompactList}\small\item\em Leaves a channel. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab4af0c1df4b68eb898b1843dd0671702}{leave\+Channel}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_leave_channel_options}{Leave\+Channel\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets channel options and leaves the channel. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c8f9a9cabfb7ac7e71990525910793e}{renew\+Token}} (String token)
\begin{DoxyCompactList}\small\item\em Renews the token. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_device_info}{Device\+Info}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affc79f4a1174abff12b8f04e57e61e5d}{get\+Audio\+Device\+Info}} ()
\begin{DoxyCompactList}\small\item\em Gets the audio device information. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a278f1f8eb83ce0665c4417ac6cfc96d8}{enable\+Web\+Sdk\+Interoperability}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables interoperability with the Agora Web S\+DK (applicable only in the live streaming scenarios). \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b7763c95e0adf259bc9a2e129678af7}{get\+Connection\+State}} ()
\begin{DoxyCompactList}\small\item\em Gets the current connection state of the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adcfff23cc12e91cde1a7dcddbbcb607c}{enable\+Audio}} ()
\begin{DoxyCompactList}\small\item\em Enables the audio module. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae0ab52549f9323ffed182c22354bcd78}{disable\+Audio}} ()
\begin{DoxyCompactList}\small\item\em Disables the audio module. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a334c846939534a92753ab5fc4e01577b}{pause\+Audio}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a743ab0769994206a08525e0789d51d14}{resume\+Audio}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile}} (int profile)
\begin{DoxyCompactList}\small\item\em Sets the audio profile. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac4d4cabacd4c45dcbb7439ba9d86136e}{set\+Audio\+Profile}} (int profile, int scenario)
\begin{DoxyCompactList}\small\item\em Sets the audio profile and audio scenario. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a486279ba467cdbd04bb1fbe443dac9ef}{set\+Audio\+Scenario}} (int scenario)
\begin{DoxyCompactList}\small\item\em Sets the audio scenario. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ad961b62060ca796f2f31a4ec12234b}{set\+High\+Quality\+Audio\+Parameters}} (boolean fullband, boolean stereo, boolean full\+Bitrate)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abaaae5da30201592da737e3c82107e38}{adjust\+Recording\+Signal\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the capturing signal volume. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a222d08f40629b38390606a4ee26fc3fb}{adjust\+Playback\+Signal\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the playback signal volume of all remote users. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb7da23e2f44e57e6fbae8c84f233624}{enable\+Audio\+Volume\+Indication}} (int interval, int smooth, boolean report\+Vad)
\begin{DoxyCompactList}\small\item\em Enables the reporting of users\textquotesingle{} volume indication. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae48eb47f2af9c3e55d55d1fd0516131}{enable\+Local\+Audio}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables or disables the local audio capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2214ae694000345bbeaa9610411e52b7}{mute\+Local\+Audio\+Stream}} (boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes publishing the local audio stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0608e571f04aac18473c1cefc5bc35db}{mute\+Remote\+Audio\+Stream}} (int uid, boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes subscribing to the audio stream of a specified user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a22fedd8b7c6484918eb7cbdad78ffcee}{adjust\+User\+Playback\+Signal\+Volume}} (int uid, int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the playback signal volume of a specified remote user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a300aaecf6aba89a95005d3ad6e7957b9}{mute\+All\+Remote\+Audio\+Streams}} (boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes subscribing to the audio streams of all remote users. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}} ()
\begin{DoxyCompactList}\small\item\em Enables the video module. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dbba3464a6c44818282ad920e4097bc}{disable\+Video}} ()
\begin{DoxyCompactList}\small\item\em Disables the video module. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33af5b77701edea3f565e05e2bd7e9d4}{set\+Video\+Encoder\+Configuration}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Sets the video encoder configuration. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_codec_cap_info}{Codec\+Cap\+Info}}\mbox{[}$\,$\mbox{]} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab09a987202828e5b2db6765b8e1e0673}{query\+Codec\+Capability}} ()
\begin{DoxyCompactList}\small\item\em Queries the video codec capabilities of the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7a5c0d41afd03f4d91df64911ee9eff9}{query\+Device\+Score}} ()
\begin{DoxyCompactList}\small\item\em Queries device score. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_focal_length_info}{Agora\+Focal\+Length\+Info}}\mbox{[}$\,$\mbox{]} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dc8d43505e6e85a3854f1a90c5c40b9}{query\+Camera\+Focal\+Length\+Capability}} ()
\begin{DoxyCompactList}\small\item\em Queries the focal length capability supported by the camera. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83dae67b4ea08ec9ca4b64b8a7b0aa2c}{set\+Camera\+Capturer\+Configuration}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Sets the camera capture configuration. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a75485acddd3d8593f8a7403c489c9d7f}{setup\+Local\+Video}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_canvas}{Video\+Canvas}} local)
\begin{DoxyCompactList}\small\item\em Initializes the local video view. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab401e6b2b6159c7762b5168040424ce9}{setup\+Remote\+Video}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_canvas}{Video\+Canvas}} remote)
\begin{DoxyCompactList}\small\item\em Initializes the video view of a remote user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a728841e67ec45f0c88ab38a2e44fa8cf}{set\+Remote\+Render\+Mode}} (int uid, int render\+Mode)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4f24649ccc0fe339b5601e396ae258}{set\+Local\+Render\+Mode}} (int render\+Mode)
\begin{DoxyCompactList}\small\item\em Sets the local video display mode. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6ef85a2fe40643c6e32024572d49b1e5}{set\+Remote\+Render\+Mode}} (int uid, int render\+Mode, int mirror\+Mode)
\begin{DoxyCompactList}\small\item\em Updates the display mode of the video view of a remote user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a12b166d473a769c559a7afbd98c1ce23}{set\+Local\+Render\+Mode}} (int render\+Mode, int mirror\+Mode)
\begin{DoxyCompactList}\small\item\em Updates the display mode of the local video view. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}{start\+Preview}} ()
\begin{DoxyCompactList}\small\item\em Enables the local video preview. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73e309d45cc7d9b8e657833137ca2bd5}{start\+Preview}} (Constants.\+Video\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Enables the local video preview and specifies the video source for the preview. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}{stop\+Preview}} ()
\begin{DoxyCompactList}\small\item\em Stops the local video preview. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9899967cfeed29860bee3b24b5c01eb2}{stop\+Preview}} (Constants.\+Video\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Stops the local video preview. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a80351723711a6f3a66abcc287154eb10}{enable\+Local\+Video}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables/\+Disables the local video capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affbf7d3b7eb77a658e30e90bd90a0275}{start\+Camera\+Capture}} (Constants.\+Video\+Source\+Type source\+Type, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Starts camera capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab13536b8e10175f429d822140de8611c}{stop\+Camera\+Capture}} (Constants.\+Video\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Stops camera capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8df002847430147c47905b42fbdccba4}{start\+Local\+Video\+Transcoder}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Starts the local video mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5f2495ad78475daa85329aea53774023}{stop\+Local\+Video\+Transcoder}} ()
\begin{DoxyCompactList}\small\item\em Stops the local video mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0dc5a07a0c76360a1e23ce92685feb55}{update\+Local\+Transcoder\+Configuration}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Updates the local video mixing configuration. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a26b75895c5a64c0976cf506509653012}{start\+Local\+Audio\+Mixer}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Starts local audio mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a671696bf251a79f71f5e6d997070a7b0}{update\+Local\+Audio\+Mixer\+Configuration}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Updates the configurations for mixing audio streams locally. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae6bb70ab022e56eee9141d19acc416e}{stop\+Local\+Audio\+Mixer}} ()
\begin{DoxyCompactList}\small\item\em Stops the local audio mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20fd1bfb77864b47bc264fc370b0fae3}{mute\+Local\+Video\+Stream}} (boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes publishing the local video stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac8c1db59fa60aa6c04c40d492a218129}{mute\+Remote\+Video\+Stream}} (int uid, boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes subscribing to the video stream of a specified user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae74ecd1bf61812930605994bd1bb77c}{mute\+All\+Remote\+Video\+Streams}} (boolean muted)
\begin{DoxyCompactList}\small\item\em Stops or resumes subscribing to the video streams of all remote users. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}{set\+Beauty\+Effect\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets the image enhancement options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaac428e315f77ed8dd3cf671effd17f}{set\+Beauty\+Effect\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets the image enhancement options and specifies the media source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}{set\+Face\+Shape\+Beauty\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets the face shape beauty options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e23beb2cfe8a2dffb46801e21f34150}{set\+Face\+Shape\+Beauty\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets the face shape options and specifies the media source. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a037185699632c8adba8f4d33554cc09d}{get\+Face\+Shape\+Beauty\+Options}} ()
\begin{DoxyCompactList}\small\item\em Gets the beauty effect options. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af164fff877bf1789054d57ab3e6b6597}{get\+Face\+Shape\+Beauty\+Options}} (Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Gets the beauty effect options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a44b12c841a6cb96f75a73a433684c091}{set\+Face\+Shape\+Area\+Options}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets the options for beauty enhancement facial areas. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a37eb5991a88212efdcfb5adc9b5b1ec9}{set\+Face\+Shape\+Area\+Options}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets the image enhancement options for facial areas and specifies the media source. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf5284e278a6d41c6e6b5f7b35153f53}{get\+Face\+Shape\+Area\+Options}} (int shape\+Area)
\begin{DoxyCompactList}\small\item\em Gets the facial beauty area options. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac56a0950540ce606c10a508d316911b}{get\+Face\+Shape\+Area\+Options}} (int shape\+Area, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Gets the facial beauty area options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43148bccc5d86545500c2e367ba34698}{set\+Filter\+Effect\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets the filter effect options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5d215beb08dda637ed4773f319dd3ac9}{set\+Filter\+Effect\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets the filter effect options and specifies the media source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f3f92c762fe9773fb61a2118a4f8504}{set\+Lowlight\+Enhance\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_low_light_enhance_options}{Low\+Light\+Enhance\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets low-\/light enhancement. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae8fdd7884e964fd98669e6158b282e51}{set\+Lowlight\+Enhance\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_low_light_enhance_options}{Low\+Light\+Enhance\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets low light enhance options and specifies the media source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abcea923e468e6bce9d6c77469fd7774a}{set\+Video\+Denoiser\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_denoiser_options}{Video\+Denoiser\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets video noise reduction. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6309e3b0960cd680cd6464e52566ea9}{set\+Video\+Denoiser\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_denoiser_options}{Video\+Denoiser\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets video noise reduction and specifies the media source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83a2353ebb342c293c6dda4d98a5f1c1}{set\+Color\+Enhance\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_color_enhance_options}{Color\+Enhance\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets color enhancement. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af496272f593d01fad73630254e4ad175}{set\+Color\+Enhance\+Options}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_color_enhance_options}{Color\+Enhance\+Options}} options, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Sets color enhance options and specifies the media source. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33b263df955fe8ef32504d576300d8a1}{create\+Video\+Effect\+Object}} (String bundle\+Path, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Creates a video effect object. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a84fea84319c101eb815b699b5769114f}{destroy\+Video\+Effect\+Object}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}} video\+Effect\+Object)
\begin{DoxyCompactList}\small\item\em Destroys a video effect object. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f86af9f11bd4498fcbd913af2572cb5}{enable\+Virtual\+Background}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_virtual_background_source}{Virtual\+Background\+Source}} background\+Source, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_segmentation_property}{Segmentation\+Property}} segproperty)
\begin{DoxyCompactList}\small\item\em Enables/\+Disables the virtual background. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaef56d7becd92afbc402d8592c6f3273}{enable\+Virtual\+Background}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_virtual_background_source}{Virtual\+Background\+Source}} background\+Source, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_segmentation_property}{Segmentation\+Property}} segproperty, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Enables virtual background and specify the media source, or disables virtual background. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5861f16ae4025a0bee7eb8b4e5096d86}{set\+Default\+Audio\+Routeto\+Speakerphone}} (boolean default\+To\+Speaker)
\begin{DoxyCompactList}\small\item\em Sets the default audio playback route. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5dce9e487806eb87da6c142450498f61}{set\+Enable\+Speakerphone}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables/\+Disables the audio route to the speakerphone. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1949e03a3c541d8e3ee5f57b9b51201f}{set\+Route\+In\+Communication\+Mode}} (int route)
\begin{DoxyCompactList}\small\item\em Selects the audio playback route in communication audio mode. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5916d5e8b659ef49a8c1ec9ff54d8dc}{is\+Speakerphone\+Enabled}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the speakerphone is enabled. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d5a12ef14d4134ac17d3f48faea0feb}{enable\+In\+Ear\+Monitoring}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables in-\/ear monitoring. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac713dba8f2c8d68dcbb549de5060b1e4}{enable\+In\+Ear\+Monitoring}} (boolean enabled, int include\+Audio\+Filters)
\begin{DoxyCompactList}\small\item\em Enables in-\/ear monitoring. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d6b079b986dacc6d010fc0322a4b48c}{set\+In\+Ear\+Monitoring\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Sets the volume of the in-\/ear monitor. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}{set\+Local\+Voice\+Pitch}} (double pitch)
\begin{DoxyCompactList}\small\item\em Changes the voice pitch of the local speaker. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}{set\+Local\+Voice\+Formant}} (double formant\+Ratio)
\begin{DoxyCompactList}\small\item\em Sets the formant ratio to change the timbre of human voice. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e707946700a15c2b7d99177db830a54}{set\+Local\+Voice\+Equalization}} (Constants.\+A\+U\+D\+I\+O\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+A\+T\+I\+O\+N\+\_\+\+B\+A\+N\+D\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+CY band\+Frequency, int band\+Gain)
\begin{DoxyCompactList}\small\item\em Sets the local voice equalization effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac955fd38973b32c629cdfa1566e52fc6}{set\+Local\+Voice\+Reverb}} (Constants.\+A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE reverb\+Key, int value)
\begin{DoxyCompactList}\small\item\em Sets the local voice reverberation. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac7573d0f4cbfbcb1e6564048142cb5d0}{set\+Headphone\+E\+Q\+Preset}} (int preset)
\begin{DoxyCompactList}\small\item\em Sets the preset headphone equalization effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acdfd1a0eef6fd2456cffede678664001}{set\+Headphone\+E\+Q\+Parameters}} (int low\+Gain, int high\+Gain)
\begin{DoxyCompactList}\small\item\em Sets the low-\/ and high-\/frequency parameters of the headphone equalizer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}{set\+Audio\+Effect\+Preset}} (int preset)
\begin{DoxyCompactList}\small\item\em Sets an S\+DK preset audio effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}{set\+Voice\+Beautifier\+Preset}} (int preset)
\begin{DoxyCompactList}\small\item\em Sets a preset voice beautifier effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}{set\+Voice\+Conversion\+Preset}} (int preset)
\begin{DoxyCompactList}\small\item\em Sets a preset voice beautifier effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf70d13931b9a2194cd96284b37dc071}{set\+Audio\+Effect\+Parameters}} (int preset, int param1, int param2)
\begin{DoxyCompactList}\small\item\em Sets parameters for S\+DK preset audio effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af712699445c8ff8118f5d1027dc636ca}{set\+Voice\+Beautifier\+Parameters}} (int preset, int param1, int param2)
\begin{DoxyCompactList}\small\item\em Sets parameters for the preset voice beautifier effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a788c6bfca053863f685af72879540e58}{set\+Voice\+Conversion\+Parameters}} (int preset, int param1, int param2)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43d9d2c9264cd08d6e89ebba43ffc1c3}{enable\+Sound\+Position\+Indication}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables or disables stereo panning for remote users. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf43fddf9cb4e3b76f5407ff6f6d57a4}{set\+Remote\+Voice\+Position}} (int uid, double pan, double gain)
\begin{DoxyCompactList}\small\item\em Sets the 2D position (the position on the horizontal plane) of the remote user\textquotesingle{}s voice. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae2258c8955f81bd5a6f2fc8a955af918}{enable\+Voice\+A\+I\+Tuner}} (boolean enabled, Constants.\+V\+O\+I\+C\+E\+\_\+\+A\+I\+\_\+\+T\+U\+N\+E\+R\+\_\+\+T\+Y\+PE type)
\begin{DoxyCompactList}\small\item\em Enables or disables the voice AI tuner. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a18c4fcacfc39625ae8a47e66564bd8f4}{start\+Audio\+Mixing}} (String file\+Path, boolean loopback, int cycle)
\begin{DoxyCompactList}\small\item\em Starts playing the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8c0a30cd46f79dcb24d6e91540270142}{enable\+Spatial\+Audio}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables or disables the spatial audio effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7c83d6073cb7d5b3144a1581ff9463b1}{set\+Remote\+User\+Spatial\+Audio\+Params}} (int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_spatial_audio_params}{Spatial\+Audio\+Params}} params)
\begin{DoxyCompactList}\small\item\em Sets the spatial audio effect parameters of the remote user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63d7b44e0c112170d94c3271e05fcb6f}{set\+Remote\+Video\+Subscription\+Options}} (int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_subscription_options}{Video\+Subscription\+Options}} options)
\begin{DoxyCompactList}\small\item\em Options for subscribing to remote video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeed0db7baf58dae9cb35be092b7b7af7}{set\+A\+I\+N\+S\+Mode}} (boolean enabled, int mode)
\begin{DoxyCompactList}\small\item\em Sets whether to enable the AI ​​noise suppression function and set the noise suppression mode. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing}} (String file\+Path, boolean loopback, int cycle, int start\+Pos)
\begin{DoxyCompactList}\small\item\em Starts playing the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d9f13f4f48f9a2737a27c1b55ac6145}{stop\+Audio\+Mixing}} ()
\begin{DoxyCompactList}\small\item\em Stops playing the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3c26a5f7908c84557180af289301457}{pause\+Audio\+Mixing}} ()
\begin{DoxyCompactList}\small\item\em Pauses playing and mixing the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1b2b908018d836a60de5495b5db8adb}{resume\+Audio\+Mixing}} ()
\begin{DoxyCompactList}\small\item\em Resumes playing and mixing the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4c5538d92e250748052d7617876526ea}{adjust\+Audio\+Mixing\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the volume during audio mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8884d20e687221f4f1ae8315cd172d8d}{adjust\+Audio\+Mixing\+Playout\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the volume of audio mixing for local playback. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb4c28214a9adc6f49192d53a757911c}{adjust\+Audio\+Mixing\+Publish\+Volume}} (int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the volume of audio mixing for publishing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad4bf1c84245a27aa1300e2dc394a827e}{get\+Audio\+Mixing\+Playout\+Volume}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the audio mixing volume for local playback. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7711fae2a3361f8fe6b47915228a5de2}{get\+Audio\+Mixing\+Publish\+Volume}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the audio mixing volume for publishing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6a866bfaa0cdf575feaf82e899bb740b}{get\+Audio\+Mixing\+Duration}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the duration (ms) of the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a69d5eed20fd0b6462a2a83fd8592ec24}{get\+Audio\+Mixing\+Current\+Position}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the playback position (ms) of the music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae0ea7cd0f5f45044a1378a2ed5c9cd1}{set\+Audio\+Mixing\+Position}} (int pos)
\begin{DoxyCompactList}\small\item\em Sets the audio mixing position. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aabb75250d3a6f15dfa888d867cffe90d}{set\+Audio\+Mixing\+Dual\+Mono\+Mode}} (Constants.\+Audio\+Mixing\+Dual\+Mono\+Mode mode)
\begin{DoxyCompactList}\small\item\em Sets the channel mode of the current audio file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7aae18cb7483e2eecd184896cd23cbdc}{set\+Audio\+Mixing\+Pitch}} (int pitch)
\begin{DoxyCompactList}\small\item\em Sets the pitch of the local music file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e8317f510164a2b313accba8a26dd5d}{set\+Audio\+Mixing\+Playback\+Speed}} (int speed)
\begin{DoxyCompactList}\small\item\em Sets the playback speed of the current audio file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1372d948223d44bc834243eea0ff8114}{select\+Audio\+Track}} (int audio\+Index)
\begin{DoxyCompactList}\small\item\em Selects the audio track used during playback. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab9319a3aa51fbef5baab307bbff61e4}{get\+Audio\+Track\+Count}} ()
\begin{DoxyCompactList}\small\item\em Gets the index of audio tracks of the current music file. \end{DoxyCompactList}\item 
abstract I\+Audio\+Effect\+Manager \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a566145bbefcc8f58a67c20b1ea2e4054}{get\+Audio\+Effect\+Manager}} ()
\begin{DoxyCompactList}\small\item\em Gets the {\ttfamily I\+Audio\+Effect\+Manager} class to manage the audio effect files. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8a868bc783c424a88c02fee7e9d4dbed}{start\+Audio\+Recording}} (String file\+Path, int quality)
\begin{DoxyCompactList}\small\item\em Starts client-\/side recording. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedb9b84a3afd1c5b7316112710b21d8f}{start\+Audio\+Recording}} (Audio\+Recording\+Configuration config)
\begin{DoxyCompactList}\small\item\em Starts client-\/side recording and applies recording configurations. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60a05708b6b2d40b9f3e2bd7aadda143}{stop\+Audio\+Recording}} ()
\begin{DoxyCompactList}\small\item\em Stops client-\/side recording. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7213f4169e8c3425fc3f6876bf8a1cdc}{start\+Echo\+Test}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_echo_test_configuration}{Echo\+Test\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Starts an audio device loopback test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf712c76582d770457bf8f0b773312fe}{stop\+Echo\+Test}} ()
\begin{DoxyCompactList}\small\item\em Stops the audio call test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad00ae90f0aa7008e0008fe6fcc547f22}{start\+Lastmile\+Probe\+Test}} (Lastmile\+Probe\+Config config)
\begin{DoxyCompactList}\small\item\em Starts the last mile network probe test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae557f56f8fd4b808bb5c5902d0f1acc5}{stop\+Lastmile\+Probe\+Test}} ()
\begin{DoxyCompactList}\small\item\em Stops the last mile network probe test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab202ce0e42ee7e6674d04da41052541}{set\+External\+Audio\+Source}} (boolean enabled, int sample\+Rate, int channels)
\begin{DoxyCompactList}\small\item\em Sets the external audio source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}{set\+External\+Audio\+Sink}} (boolean enabled, int sample\+Rate, int channels)
\begin{DoxyCompactList}\small\item\em Sets the external audio sink. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7ffbff878b86717e801cc7ef2b338b2}{set\+External\+Remote\+Egl\+Context}} (Object egl\+Context)
\begin{DoxyCompactList}\small\item\em Sets the E\+GL context for rendering remote video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae60153bc207ded1ced8773eb797b8b26}{pull\+Playback\+Audio\+Frame}} (byte\mbox{[}$\,$\mbox{]} data, int length\+In\+Byte)
\begin{DoxyCompactList}\small\item\em Pulls the remote audio data. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2daa2138791b3225790d640d009e7b50}{pull\+Playback\+Audio\+Frame}} (Byte\+Buffer data, int length\+In\+Byte)
\begin{DoxyCompactList}\small\item\em Pulls the remote audio data. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa207c4859ffe0069ae34e9fc25bc93ff}{start\+Recording\+Device\+Test}} (int indication\+Interval)
\begin{DoxyCompactList}\small\item\em Starts the audio capturing device test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a656bea04193aa7b46643e1029336d2db}{stop\+Recording\+Device\+Test}} ()
\begin{DoxyCompactList}\small\item\em Stops the audio capturing device test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf15918db9c0585578536e3302b7b2a0}{start\+Playback\+Device\+Test}} (String audio\+File\+Name)
\begin{DoxyCompactList}\small\item\em Starts the audio playback device test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a71059caa6c3cde61f5015666922089df}{stop\+Playback\+Device\+Test}} ()
\begin{DoxyCompactList}\small\item\em Stops the audio playback device test. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac9062e82b4bb3eb772f7bbc96a6de1f6}{create\+Custom\+Audio\+Track}} (Constants.\+Audio\+Track\+Type track\+Type, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_audio_track_config}{Audio\+Track\+Config}} config)
\begin{DoxyCompactList}\small\item\em Creates a custom audio track. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a616d3425adda32ead9409eda5b258a9b}{destroy\+Custom\+Audio\+Track}} (int track\+Id)
\begin{DoxyCompactList}\small\item\em Destroys the specified audio track. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0448dfe93f92836b8c9724b1a3f9227b}{set\+External\+Audio\+Source}} (boolean enabled, int sample\+Rate, int channels, boolean local\+Playback, boolean publish)
\begin{DoxyCompactList}\small\item\em Sets the external audio source parameters. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7d3fb043b5e6110aaf1dbb79bdf1e443}{push\+External\+Audio\+Frame}} (byte\mbox{[}$\,$\mbox{]} data, long timestamp)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f0b6f1a4844846a681557f51e22c262}{push\+External\+Audio\+Frame}} (Byte\+Buffer data, long timestamp, int track\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a431e4482d6051a83738cf958e50f8a2d}{push\+External\+Audio\+Frame}} (byte\mbox{[}$\,$\mbox{]} data, long timestamp, int sample\+Rate, int channels, Constants.\+Bytes\+Per\+Sample bytes\+Per\+Sample, int track\+Id)
\begin{DoxyCompactList}\small\item\em Pushes the external audio frame to the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0eedda4cc4b1a0563180b58046551626}{push\+External\+Audio\+Frame}} (Byte\+Buffer data, long timestamp, int sample\+Rate, int channels, Constants.\+Bytes\+Per\+Sample bytes\+Per\+Sample, int track\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}{set\+External\+Video\+Source}} (boolean enable, boolean use\+Texture, Constants.\+External\+Video\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Configures the external video source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ade238d422f27dddf80f09c4c28c0037e}{set\+External\+Video\+Source}} (boolean enable, boolean use\+Texture, Constants.\+External\+Video\+Source\+Type source\+Type, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_encoded_video_track_options}{Encoded\+Video\+Track\+Options}} encoded\+Opt)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e84e4ede445e1b024bf3836fae61d26}{push\+External\+Video\+Frame}} (Video\+Frame frame)
\begin{DoxyCompactList}\small\item\em Pushes the external raw video frame to the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa846bf55e5224c170493ff98f49fcc16}{push\+External\+Video\+Frame\+By\+Id}} (Video\+Frame frame, int video\+Track\+Id)
\begin{DoxyCompactList}\small\item\em Pushes the external raw video frame to the S\+DK through video tracks. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4425a1ab6b833b21e200e39b2c9d61}{push\+External\+Video\+Frame\+By\+Id}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_video_frame}{Agora\+Video\+Frame}} frame, int video\+Track\+Id)
\begin{DoxyCompactList}\small\item\em Pushes the external raw video frame to the S\+DK through video tracks. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2502e34dd73becfa8d13104e5038e021}{push\+External\+Encoded\+Video\+Frame}} (Byte\+Buffer data, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info}} frame\+Info)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af1630bcbdc9fb71618b7745ad612e502}{push\+External\+Encoded\+Video\+Frame\+By\+Id}} (Byte\+Buffer data, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info}} frame\+Info, int video\+Track\+Id)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a139283543acaa618638acd57a9195607}{push\+External\+Video\+Frame}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_video_frame}{Agora\+Video\+Frame}} frame)
\begin{DoxyCompactList}\small\item\em Pushes the external raw video frame to the S\+DK. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1f7cabb6523f481f407a33cee41112b8}{is\+Texture\+Encode\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Check whether the video supports the Texture encoding. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ca9abd0f13dd5cdbbad54dc1fa23786}{register\+Audio\+Frame\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer}{I\+Audio\+Frame\+Observer}} observer)
\begin{DoxyCompactList}\small\item\em Registers an audio frame observer object. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c62e328822d8b98608726426cf6416c}{register\+Audio\+Encoded\+Frame\+Observer}} (Audio\+Encoded\+Frame\+Observer\+Config config, \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}} observer)
\begin{DoxyCompactList}\small\item\em Registers an encoded audio observer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af4315d888d60b756a9da1ccbfa472032}{set\+Recording\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, int mode, int samples\+Per\+Call)
\begin{DoxyCompactList}\small\item\em Sets the format of the captured raw audio data. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af863694d368e643cb1d055f8bc0d1af5}{set\+Playback\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, int mode, int samples\+Per\+Call)
\begin{DoxyCompactList}\small\item\em Sets the format of the raw audio playback data. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4bbeaa31598a8546cdd544af8846bbf8}{set\+Mixed\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, int samples\+Per\+Call)
\begin{DoxyCompactList}\small\item\em Sets the format of the raw audio data after mixing for audio capture and playback. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70e4c68451db9d2dd7fe111b5e68ae12}{set\+Ear\+Monitoring\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, int mode, int samples\+Per\+Call)
\begin{DoxyCompactList}\small\item\em Sets the format of the in-\/ear monitoring raw audio data. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a68b9c77f4879d0c3a9c23b608fb34f0b}{add\+Video\+Watermark}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_image}{Agora\+Image}} watermark)
\begin{DoxyCompactList}\small\item\em Adds a watermark image to the local video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a93cead22d8e71234dce89d55655bac90}{add\+Video\+Watermark}} (String watermark\+Url, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_watermark_options}{Watermark\+Options}} options)
\begin{DoxyCompactList}\small\item\em Adds a watermark image to the local video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ace0fe42d41b1c09e6243ecf04d62719d}{add\+Video\+Watermark}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_watermark_config}{Watermark\+Config}} config)
\begin{DoxyCompactList}\small\item\em Adds a watermark image to the local video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c7f3411c243d68b8796959957ffa807}{remove\+Video\+Watermark}} (String id)
\begin{DoxyCompactList}\small\item\em Removes the watermark image from the local video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a88d1a9288aea4e51966090d0f5f3d9cf}{clear\+Video\+Watermarks}} ()
\begin{DoxyCompactList}\small\item\em Removes the watermark image from the video stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9793a467418b54eef7cc202a2ee38291}{set\+Remote\+User\+Priority}} (int uid, int user\+Priority)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aeb5327eea26b97b67bcf41d6021920}{set\+Remote\+Subscribe\+Fallback\+Option}} (Constants.\+Stream\+Fallback\+Options option)
\begin{DoxyCompactList}\small\item\em Sets the fallback option for the subscribed video stream based on the network conditions. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa0ca8a4b071602eeca1fca6795e353}{set\+Remote\+Subscribe\+Fallback\+Option}} (int option)
\begin{DoxyCompactList}\small\item\em Sets the fallback option for the subscribed video stream based on the network conditions. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab31a26080ec40a489d35140b7a2bf3a6}{set\+High\+Priority\+User\+List}} (int\mbox{[}$\,$\mbox{]} uid\+List, int option)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}{enable\+Dual\+Stream\+Mode}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables or disables dual-\/stream mode on the sender side. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aea4bf3f92298a40c7b83be2fe3e52144}{enable\+Dual\+Stream\+Mode}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)
\begin{DoxyCompactList}\small\item\em Sets the dual-\/stream mode on the sender side and the low-\/quality video stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6bc02edcdda8dc4c0c2a3d51ba85199}{set\+Dual\+Stream\+Mode}} (Constants.\+Simulcast\+Stream\+Mode mode)
\begin{DoxyCompactList}\small\item\em Sets the dual-\/stream mode on the sender side. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3f67968e38500bcac10b88fa63cb74a7}{set\+Dual\+Stream\+Mode}} (Constants.\+Simulcast\+Stream\+Mode mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)
\begin{DoxyCompactList}\small\item\em Sets dual-\/stream mode configuration on the sender side. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1560ec915e310cb6d5139994b9697a7}{set\+Simulcast\+Config}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_config}{Simulcast\+Config}} simulcast\+Config)
\begin{DoxyCompactList}\small\item\em Sets the simulcast video stream configuration. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab7a60a6f83b8dc876f83adaaa8b40ec9}{set\+Local\+Render\+Target\+Fps}} (Constants.\+Video\+Source\+Type source\+Type, int target\+Fps)
\begin{DoxyCompactList}\small\item\em Sets the maximum frame rate for rendering local video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a214fd18d9efe6958c4fd295fd9e45545}{set\+Remote\+Render\+Target\+Fps}} (int target\+Fps)
\begin{DoxyCompactList}\small\item\em Sets the maximum frame rate for rendering remote video. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}} (int uid, Constants.\+Video\+Stream\+Type stream\+Type)
\begin{DoxyCompactList}\small\item\em Sets the video stream type to subscribe to. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type}} (int uid, int stream\+Type)
\begin{DoxyCompactList}\small\item\em Sets the video stream type to subscribe to. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae4f88a38935a22e30cb023c7db6f86af}{set\+Remote\+Default\+Video\+Stream\+Type}} (Constants.\+Video\+Stream\+Type stream\+Type)
\begin{DoxyCompactList}\small\item\em Sets the default video stream type to subscribe to. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}{set\+Remote\+Default\+Video\+Stream\+Type}} (int stream\+Type)
\begin{DoxyCompactList}\small\item\em Sets the default video stream type to subscribe to. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abca64dd09b9fb1a034ff1e9a617df7f1}{set\+Subscribe\+Audio\+Blocklist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\begin{DoxyCompactList}\small\item\em Sets the blocklist of subscriptions for audio streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e0cb141e957f69179395c566afc9a20}{set\+Subscribe\+Audio\+Allowlist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\begin{DoxyCompactList}\small\item\em Sets the allowlist of subscriptions for audio streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3cb5999d288bbc5e81902af945f011ed}{set\+Subscribe\+Video\+Blocklist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\begin{DoxyCompactList}\small\item\em Sets the blocklist of subscriptions for video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36193f0cdd42c18ab82e9f7bc78717c6}{set\+Subscribe\+Video\+Allowlist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\begin{DoxyCompactList}\small\item\em Sets the allowlist of subscriptions for video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a840d57b187d64b8903078a6dcc879c67}{enable\+Encryption}} (boolean enabled, Encryption\+Config config)
\begin{DoxyCompactList}\small\item\em Enables or disables the built-\/in encryption. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61e6a515d2c687ae3879e46c804073f4}{start\+Rtmp\+Stream\+Without\+Transcoding}} (String url)
\begin{DoxyCompactList}\small\item\em Starts pushing media streams to a C\+DN without transcoding. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a556d466c4b0ee61888bb459810c8ded8}{start\+Rtmp\+Stream\+With\+Transcoding}} (String url, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1live_1_1_live_transcoding}{Live\+Transcoding}} transcoding)
\begin{DoxyCompactList}\small\item\em Starts Media Push and sets the transcoding configuration. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ff6d0920a8fd7df441745506a0d0a0f}{update\+Rtmp\+Transcoding}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1live_1_1_live_transcoding}{Live\+Transcoding}} transcoding)
\begin{DoxyCompactList}\small\item\em Updates the transcoding configuration. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7e257e16fd020dba728407e2151139e6}{stop\+Rtmp\+Stream}} (String url)
\begin{DoxyCompactList}\small\item\em Stops pushing media streams to a C\+DN. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}{create\+Data\+Stream}} (boolean reliable, boolean ordered)
\begin{DoxyCompactList}\small\item\em Creates a data stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}{create\+Data\+Stream}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_data_stream_config}{Data\+Stream\+Config}} config)
\begin{DoxyCompactList}\small\item\em Creates a data stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a08e5c46d5b2eaf8fa96f43f7bb4002c8}{send\+Stream\+Message}} (int stream\+Id, byte\mbox{[}$\,$\mbox{]} message)
\begin{DoxyCompactList}\small\item\em Sends data stream messages. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a94ee49a5a2257fd047fb2e2d10f57c7d}{send\+Rdt\+Message}} (int uid, int type, byte\mbox{[}$\,$\mbox{]} message)
\begin{DoxyCompactList}\small\item\em Send Reliable message to remote uid in channel. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdc25117a46361b6f7dc1023e9a81332}{send\+Media\+Control\+Message}} (int uid, byte\mbox{[}$\,$\mbox{]} message)
\begin{DoxyCompactList}\small\item\em Send media control message. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc13362ddd02df1d4215b97d3c65a4da}{set\+Video\+Quality\+Parameters}} (boolean prefer\+Frame\+Rate\+Over\+Image\+Quality)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8841e236cb3fec44d2ab1085d2ceaacf}{set\+Local\+Video\+Mirror\+Mode}} (int mode)
\begin{DoxyCompactList}\small\item\em Sets the local video mirror mode. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}{switch\+Camera}} ()
\begin{DoxyCompactList}\small\item\em Switches between front and rear cameras. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}{switch\+Camera}} (String camera\+Id)
\begin{DoxyCompactList}\small\item\em Switches cameras by camera ID. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b18c80dc7b0a0b54adf9bc85cc05a01}{is\+Camera\+Zoom\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the device supports camera zoom. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9bf739195b960ecae53dbdce21804bbe}{is\+Camera\+Torch\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the device supports camera flash. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a299e0a04059c8cebdeea96d9e2053e78}{is\+Camera\+Focus\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Check whether the device supports the manual focus function. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a28b7f4f98affcd7642254bb508bd97c2}{is\+Camera\+Exposure\+Position\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the device supports manual exposure. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aff8c36abfbc340d26cf6a5b01f787061}{is\+Camera\+Auto\+Focus\+Face\+Mode\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the device supports the face auto-\/focus function. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab614e59770986be217d84726b0eb069c}{is\+Camera\+Face\+Detect\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Checks whether the device camera supports face detection. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa96bcfadebbaba6e9b82064e58b196a8}{is\+Camera\+Exposure\+Supported}} ()
\begin{DoxyCompactList}\small\item\em Queries whether the current camera supports adjusting exposure value. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3112cd22c82fbdab18306a3706cefb45}{set\+Camera\+Zoom\+Factor}} (float factor)
\begin{DoxyCompactList}\small\item\em Sets the camera zoom factor. \end{DoxyCompactList}\item 
abstract float \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac385178dddfd07f28c690a41a4de6bff}{get\+Camera\+Max\+Zoom\+Factor}} ()
\begin{DoxyCompactList}\small\item\em Gets the maximum zoom ratio supported by the camera. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0efc30c502ef3c7af0a2f3f6131801a2}{set\+Camera\+Focus\+Position\+In\+Preview}} (float positionX, float positionY)
\begin{DoxyCompactList}\small\item\em Sets the camera manual focus position. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aaa1ddf935a415b78884d97dfa866c9}{set\+Camera\+Exposure\+Position}} (float position\+Xin\+View, float position\+Yin\+View)
\begin{DoxyCompactList}\small\item\em Sets the camera exposure position. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abc1fce0299f1972f78c63b45c5dcab79}{enable\+Face\+Detection}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables or disables face detection for the local user. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2c7ee5480582f6f2e2160b09cc8d6f0}{set\+Camera\+Torch\+On}} (boolean is\+On)
\begin{DoxyCompactList}\small\item\em Enables the camera flash. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13368ea66c71ed9dc187048f2b8205c2}{set\+Camera\+Auto\+Focus\+Face\+Mode\+Enabled}} (boolean enabled)
\begin{DoxyCompactList}\small\item\em Enables the camera auto-\/face focus function. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2721050e0ab83699a607beb25e919262}{set\+Camera\+Exposure\+Factor}} (int factor)
\begin{DoxyCompactList}\small\item\em Sets the camera exposure value. \end{DoxyCompactList}\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8878aa59bdf6e8f328ebadf32ec40273}{get\+Call\+Id}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the call ID. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afb97d530cdc8295043ab074d89d5f54c}{rate}} (String call\+Id, int rating, String description)
\begin{DoxyCompactList}\small\item\em Allows a user to rate a call after the call ends. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c22a74f586b6169c48358d64bed1b07}{complain}} (String call\+Id, String description)
\begin{DoxyCompactList}\small\item\em Allows a user to complain about the call quality after a call ends. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4fa5f803c59e1bc2d816511f5f5bbbc1}{set\+Log\+File}} (String file\+Path)
\begin{DoxyCompactList}\small\item\em Sets the log file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdab41e7cb1d8c8549ca7db248a78216}{set\+Log\+Filter}} (int filter)
\begin{DoxyCompactList}\small\item\em Sets the log output level of the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55e1c586d3885c4f0d43aecfbd3729f2}{set\+Log\+Level}} (int level)
\begin{DoxyCompactList}\small\item\em Sets the output log level of the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5595061ecba8d52cf14719976c5805ab}{set\+Log\+File\+Size}} (long file\+Size\+In\+K\+Bytes)
\begin{DoxyCompactList}\small\item\em Sets the log file size. \end{DoxyCompactList}\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed3cf22474a862b8e75dc4a2eab68f2f}{upload\+Log\+File}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59b77fa66a969307df93ad842b63b02d}{write\+Log}} (int level, String format, Object... args)
\item 
abstract long \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a045a0762442c7b7ca8955d08b8aec397}{get\+Native\+Handle}} ()
\begin{DoxyCompactList}\small\item\em Gets the C++ handle of the Native S\+DK. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13e66c39d0c3c1395c54172b344e8eb8}{add\+Handler}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} handler)
\begin{DoxyCompactList}\small\item\em Adds event handlers. \end{DoxyCompactList}\item 
void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a263e03bf1292625b2a28daac4ba34538}{remove\+Handler}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} handler)
\begin{DoxyCompactList}\small\item\em Removes the specified \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} instance. \end{DoxyCompactList}\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdacfc92faddfb139a7494994f7eb54a}{enable\+High\+Perf\+Wifi\+Mode}} (boolean enable)
\item 
abstract long \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab5e001e90eb21e35d7c1454bfeb279ac}{get\+Native\+Media\+Player}} (int source\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c6b90f7287c07b3de132671ba247152}{query\+H\+D\+R\+Capability}} (Constants.\+V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+T\+Y\+PE module\+Type)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59f337c7cd25292a08885aaa70e24a08}{query\+Screen\+Capture\+Capability}} ()
\begin{DoxyCompactList}\small\item\em Queries the highest frame rate supported by the device during screen sharing. \end{DoxyCompactList}\item 
abstract void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa61bae7d31a052043c3bb831ff2899}{monitor\+Headset\+Event}} (boolean monitor)
\item 
abstract void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaaf9fc82bfea34039891aa977f8d2732}{monitor\+Bluetooth\+Headset\+Event}} (boolean monitor)
\item 
abstract void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13c23e98808f778c48dcd1eb03d4062b}{set\+Prefer\+Headset}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa4af1f6a2f9a53e0b0652d3902286604}{set\+Parameters}} (String parameters)
\begin{DoxyCompactList}\small\item\em Provides technical preview functionalities or special customizations by configuring the S\+DK with J\+S\+ON options. \end{DoxyCompactList}\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae3994b04c05a47590322b5e527c4c288}{get\+Parameters}} (String parameters)
\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae42d90fa3d5c89dc5e562ca30b7470ce}{get\+Parameter}} (String parameter, String args)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a537716f1117501cdfa7ceb221dbaafb9}{register\+Media\+Metadata\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}} observer, int type)
\begin{DoxyCompactList}\small\item\em Registers the metadata observer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a526ccf46b52f43deb9a37c88abbbac04}{unregister\+Media\+Metadata\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}} observer, int type)
\begin{DoxyCompactList}\small\item\em Unregisters the specified metadata observer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6f4c6de494528c49968008a0b89f468}{start\+Or\+Update\+Channel\+Media\+Relay}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_channel_media_relay_configuration}{Channel\+Media\+Relay\+Configuration}} channel\+Media\+Relay\+Configuration)
\begin{DoxyCompactList}\small\item\em Starts relaying media streams across channels or updates channels for media relay. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f7f548ec0a720db0e83314755dc5015}{stop\+Channel\+Media\+Relay}} ()
\begin{DoxyCompactList}\small\item\em Stops the media stream relay. Once the relay stops, the host quits all the target channels. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f082ed2fb2bcf8e7e1f5f1a13bd9955}{pause\+All\+Channel\+Media\+Relay}} ()
\begin{DoxyCompactList}\small\item\em Pauses the media stream relay to all target channels. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a227a56b32e23eb918ef5762522d496b4}{resume\+All\+Channel\+Media\+Relay}} ()
\begin{DoxyCompactList}\small\item\em Resumes the media stream relay to all target channels. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9753d50d974ab3135d95d254a83383fe}{update\+Channel\+Media\+Options}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)
\begin{DoxyCompactList}\small\item\em Updates the channel media options after joining the channel. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a645bd4590504fffc802d01a18e17bf1f}{mute\+Recording\+Signal}} (boolean muted)
\begin{DoxyCompactList}\small\item\em Whether to mute the recording signal. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a130ebcb8057eb5e3453aac9665cfb572}{set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters}} (int sample\+Rate, int channel)
\begin{DoxyCompactList}\small\item\em Sets the format of the raw audio playback data before mixing. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa74fd48a5e84c8a358eb1c2b75c7a2b5}{set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters}} (int sample\+Rate, int channel, int samples\+Per\+Call)
\begin{DoxyCompactList}\small\item\em Sets the format of audio data in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8fcc7517dd6f95be50d1f273d3f56c32}{enable\+Audio\+Spectrum\+Monitor}} (int interval\+In\+MS)
\begin{DoxyCompactList}\small\item\em Turns on audio spectrum monitoring. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc0518028a558fc6e1934b5767ab614b}{disable\+Audio\+Spectrum\+Monitor}} ()
\begin{DoxyCompactList}\small\item\em Disables audio spectrum monitoring. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b242f54d022fc19aa603ece26c08475}{register\+Audio\+Spectrum\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1audio_1_1_i_audio_spectrum_observer}{I\+Audio\+Spectrum\+Observer}} observer)
\begin{DoxyCompactList}\small\item\em Registers an audio spectrum observer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a922f6867658c8e7e6821bac4335f7fee}{un\+Register\+Audio\+Spectrum\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1audio_1_1_i_audio_spectrum_observer}{I\+Audio\+Spectrum\+Observer}} observer)
\begin{DoxyCompactList}\small\item\em Unregisters the audio spectrum observer. \end{DoxyCompactList}\item 
abstract double \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b281f2f1dfa4e8d5eb7664fb0d7322e}{get\+Effects\+Volume}} ()
\begin{DoxyCompactList}\small\item\em Retrieves the volume of the audio effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61f2a4c99febfd709d92296d72d52eea}{set\+Effects\+Volume}} (double volume)
\begin{DoxyCompactList}\small\item\em Sets the volume of the audio effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}} (int sound\+Id, String file\+Path)
\begin{DoxyCompactList}\small\item\em Preloads a specified audio effect file into the memory. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adfec464b6a60ecb5f071df5c44e44954}{preload\+Effect}} (int sound\+Id, String file\+Path, int start\+Pos)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a890999cd19b7dbebececfbb2537637d8}{play\+Effect}} (int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish)
\begin{DoxyCompactList}\small\item\em Plays the specified local or online audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afae7503ed2b7e1ec963f98774d0d0e16}{play\+Effect}} (int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)
\begin{DoxyCompactList}\small\item\em Plays the specified local or online audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3fdc448786337757f696ecdad4f2fcf1}{play\+All\+Effects}} (int loop\+Count, double pitch, double pan, double gain, boolean publish)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab3aa021cfc9a2d6d3decfbdf975d5a29}{get\+Volume\+Of\+Effect}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Gets the volume of a specified audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c73b4a61d30381b75d87ac819df42cb}{set\+Volume\+Of\+Effect}} (int sound\+Id, double volume)
\begin{DoxyCompactList}\small\item\em Gets the volume of a specified audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5dafc037f35c83b4d8ca2b64a6050f3}{pause\+Effect}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Pauses a specified audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d48af1ce2e341c54f8bbae686b10975}{pause\+All\+Effects}} ()
\begin{DoxyCompactList}\small\item\em Pauses all audio effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a46fc5d80c6a4fab34a72407431b35e31}{resume\+Effect}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Resumes playing a specified audio effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a24d7ae60d87cc69c656d5f89cb9fd187}{resume\+All\+Effects}} ()
\begin{DoxyCompactList}\small\item\em Resumes playing all audio effect files. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}{stop\+Effect}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Stops playing a specified audio effect. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a62f806462a9bfcc360ce2fd37d49271a}{stop\+All\+Effects}} ()
\begin{DoxyCompactList}\small\item\em Stops playing all audio effects. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e6f4408aeb348a8cafbc83db301d004}{unload\+Effect}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Releases a specified preloaded audio effect from the memory. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a21994fe821124d831ca863d342d3caed}{unload\+All\+Effects}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aec00fd4a0787f0010cdbd31189b2ac72}{get\+Effect\+Duration}} (String file\+Path)
\begin{DoxyCompactList}\small\item\em Retrieves the duration of the audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afe3b84f40dabb97d321a6e8a1a001c7e}{set\+Effect\+Position}} (int sound\+Id, int pos)
\begin{DoxyCompactList}\small\item\em Sets the playback position of an audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a172c1995a4000c584cf7d5e15b930cf5}{get\+Effect\+Current\+Position}} (int sound\+Id)
\begin{DoxyCompactList}\small\item\em Retrieves the playback position of the audio effect file. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a185eba8f37aeb4b4bfc7761c7631214f}{register\+Video\+Encoded\+Frame\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_encoded_frame_observer}{I\+Video\+Encoded\+Frame\+Observer}} receiver)
\begin{DoxyCompactList}\small\item\em Registers a receiver object for the encoded video image. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6c3b5c780cad3456815481c128b27fd}{register\+Face\+Info\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_face_info_observer}{I\+Face\+Info\+Observer}} receiver)
\begin{DoxyCompactList}\small\item\em Registers or unregisters a facial information observer. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8ea12ecf93baca6f9e23331f3b1c5a9b}{take\+Snapshot}} (int uid, String file\+Path)
\begin{DoxyCompactList}\small\item\em Takes a snapshot of a video stream. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0bfa6cb48d1b71f388f87f10069a841f}{take\+Snapshot}} (int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_snapshot_config}{Snapshot\+Config}} config)
\begin{DoxyCompactList}\small\item\em Takes a screenshot of the video at the specified observation point. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc64bdcf6c7a298014f84921c50ea7d6}{enable\+Content\+Inspect}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_content_inspect_config}{Content\+Inspect\+Config}} config)
\begin{DoxyCompactList}\small\item\em Enables or disables video screenshot and upload. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3b8f9eac4863847ba1e880263ebce1fc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3b8f9eac4863847ba1e880263ebce1fc}} 
abstract int {\bfseries load\+Extension\+Provider} (String path)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abfb75504df0a7a17d6eac70ca231a742}{register\+Extension}} (String provider, String extension, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Registers an extension. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3b140b737969f11fbd46a8812f1c3e2c}{enable\+Extension}} (String provider, String extension, boolean enable)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac1b1caf786a8724395cab25e181a8bd}{enable\+Extension}} (String provider, String extension, boolean enable, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Enables or disables extensions. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a352998d3fe5745ae6b679b3bc0a5a852}{set\+Extension\+Property}} (String provider, String extension, String key, String value)
\begin{DoxyCompactList}\small\item\em Sets the properties of the extension. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73239916872738232ccdb364c4180e8f}{set\+Extension\+Property}} (String provider, String extension, String key, String value, Constants.\+Media\+Source\+Type source\+Type)
\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a54ff467519122a6dd64b9db845f9e63b}{get\+Extension\+Property}} (String provider, String extension, String key)
\begin{DoxyCompactList}\small\item\em Gets detailed information on the extensions. \end{DoxyCompactList}\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeeba30781172e4b0b7a479f5c5948ca2}{get\+Extension\+Property}} (String provider, String extension, String key, Constants.\+Media\+Source\+Type source\+Type)
\begin{DoxyCompactList}\small\item\em Gets detailed information on the extensions. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9340f504747432241e47402529f2abb0}{set\+Extension\+Provider\+Property}} (String provider, String key, String value)
\begin{DoxyCompactList}\small\item\em Sets the properties of the extension provider. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7fde43abcd44bd22793bc71917050192}{enable\+Extension}} (String provider, String extension, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}} extension\+Info, boolean enable)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55c3b490d2cbd4c118bdada7cd86dd4c}{set\+Extension\+Property}} (String provider, String extension, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}} extension\+Info, String key, String value)
\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a787a8b6960dfe5f5a338483348679054}{get\+Extension\+Property}} (String provider, String extension, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}} extension\+Info, String key)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf71be90a0e958aee09558be1aa225aa}{start\+Screen\+Capture}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}} screen\+Capture\+Parameters)
\begin{DoxyCompactList}\small\item\em Starts screen capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af959439d3f83247f41087ed653da2b01}{set\+External\+Media\+Projection}} (Media\+Projection media\+Projection)
\begin{DoxyCompactList}\small\item\em Configures {\ttfamily Media\+Projection} outside of the S\+DK to capture screen video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab14b55af7fd174f1e188239fdc157131}{set\+Screen\+Capture\+Scenario}} (Constants.\+Screen\+Scenario\+Type screen\+Scenario)
\begin{DoxyCompactList}\small\item\em Sets the screen sharing scenario. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa8a6ef8909cebd023c5c229d35fb472}{stop\+Screen\+Capture}} ()
\begin{DoxyCompactList}\small\item\em Stops screen capture. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fa00b6bbc373b4479204d789758d63d}{set\+Video\+Scenario}} (Constants.\+Video\+Scenario scenario\+Type)
\begin{DoxyCompactList}\small\item\em Sets video application scenarios. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f75341476b4eebc8ca2533699470a8b}{set\+Video\+Qo\+E\+Preference}} (Constants.\+Qo\+E\+Preference qoe\+Preference)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9564ff8ab6950b8ae455884decc239f3}{update\+Screen\+Capture\+Parameters}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}} screen\+Capture\+Parameters)
\begin{DoxyCompactList}\small\item\em Updates the screen capturing parameters. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20c1dd38e24232e87d536329f556de71}{register\+Video\+Frame\+Observer}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_frame_observer}{I\+Video\+Frame\+Observer}} observer)
\begin{DoxyCompactList}\small\item\em Registers a raw video frame observer object. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1mediaplayer_1_1_i_media_player}{I\+Media\+Player}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af2bf8f1e94ec4d4d2a9fdaffb9d520fb}{create\+Media\+Player}} ()
\begin{DoxyCompactList}\small\item\em Creates a media player object. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a82eaaee21b41e0ca6bc5c0b1c43043}{create\+Media\+Recorder}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_recorder_stream_info}{Recorder\+Stream\+Info}} info)
\begin{DoxyCompactList}\small\item\em Creates a recorder for audio and video. \end{DoxyCompactList}\item 
abstract void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf80e430eb3ce8706cc5e116ae79a2d9}{destroy\+Media\+Recorder}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}} media\+Recorder)
\begin{DoxyCompactList}\small\item\em Destroys the audio and video recording object. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1mediaplayer_1_1_i_media_player_cache_manager}{I\+Media\+Player\+Cache\+Manager}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f03ac7f1e60e968c52aae4ee457fd18}{get\+Media\+Player\+Cache\+Manager}} ()
\begin{DoxyCompactList}\small\item\em Gets one {\ttfamily I\+Media\+Player\+Cache\+Manager} instance. \end{DoxyCompactList}\item 
abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_h265_transcoder}{I\+H265\+Transcoder}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedded7eaa7135a5848532c698af03cac}{get\+H265\+Transcoder}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a85d5cbe15b4b615def22a5f1e7972aee}{enable\+External\+Audio\+Source\+Local\+Playback}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8b5f9a0bd175de8d2929b6e96eaed8b9}{adjust\+Custom\+Audio\+Publish\+Volume}} (int track\+Id, int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the volume of the custom audio track played remotely. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2446f78169660ad941fd08ed0264a49e}{adjust\+Custom\+Audio\+Playout\+Volume}} (int track\+Id, int volume)
\begin{DoxyCompactList}\small\item\em Adjusts the volume of the custom audio track played locally. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac21f0ce46af46c474fc967810b89d771}{start\+Rhythm\+Player}} (String sound1, String sound2, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_agora_rhythm_player_config}{Agora\+Rhythm\+Player\+Config}} config)
\begin{DoxyCompactList}\small\item\em Enables the virtual metronome. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6c0b5186b0618831994e964c2177ffed}{stop\+Rhythm\+Player}} ()
\begin{DoxyCompactList}\small\item\em Disables the virtual metronome. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaeb6ed4b4ebceff99b542d8f0a7c1f7}{config\+Rhythm\+Player}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_agora_rhythm_player_config}{Agora\+Rhythm\+Player\+Config}} config)
\begin{DoxyCompactList}\small\item\em Configures the virtual metronome. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc15013468e36f69262b10f056c14e55}{set\+Direct\+Cdn\+Streaming\+Audio\+Configuration}} (int profile)
\begin{DoxyCompactList}\small\item\em Sets the audio profile of the audio streams directly pushed to the C\+DN by the host. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70b9ca001d4ab50e04a8d15bd6043d4b}{set\+Direct\+Cdn\+Streaming\+Video\+Configuration}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Sets the video profile of the media streams directly pushed to the C\+DN by the host. \end{DoxyCompactList}\item 
abstract long \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7c50fe9a5721e53732023e44bb43ac8}{get\+Current\+Monotonic\+Time\+In\+Ms}} ()
\begin{DoxyCompactList}\small\item\em Gets the current Monotonic Time of the S\+DK. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8efda37843613bf3ff9241448776bec9}{start\+Direct\+Cdn\+Streaming}} (\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_direct_cdn_streaming_event_handler}{I\+Direct\+Cdn\+Streaming\+Event\+Handler}} event\+Handler, String publish\+Url, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} options)
\begin{DoxyCompactList}\small\item\em Starts pushing media streams to the C\+DN directly. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ab7e0ff379f8ad33b86526189071077}{stop\+Direct\+Cdn\+Streaming}} ()
\begin{DoxyCompactList}\small\item\em Stops pushing media streams to the C\+DN directly. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad21c9753722bd6d5c782f179bc7385f5}{update\+Direct\+Cdn\+Streaming\+Media\+Options}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} options)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a00212b2c259519bbf14f4268ac3efa09}{create\+Custom\+Video\+Track}} ()
\begin{DoxyCompactList}\small\item\em Creates a custom video track. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adf29679eaef7d9b6013b6f49a3680d81}{create\+Custom\+Encoded\+Video\+Track}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_encoded_video_track_options}{Encoded\+Video\+Track\+Options}} encoded\+Opt)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0d5411060829c96ad7795d29b53be05d}{destroy\+Custom\+Video\+Track}} (int video\+\_\+track\+\_\+id)
\begin{DoxyCompactList}\small\item\em Destroys the specified video track. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad642edcdd030091932a8595478f72522}{destroy\+Custom\+Encoded\+Video\+Track}} (int video\+\_\+track\+\_\+id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1dc1f4c114f5f96dfacfbeedb6959ca7}{set\+Cloud\+Proxy}} (int proxy\+Type)
\begin{DoxyCompactList}\small\item\em Sets up cloud proxy service. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39207f6b1f7136fe8faf6ef15915b97d}{set\+Local\+Access\+Point}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1proxy_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}} config)
\begin{DoxyCompactList}\small\item\em Configures the connection to the Agora private media server access module. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa346adbce32299be61c6df4b7bbf104}{enable\+Custom\+Audio\+Local\+Playback}} (int track\+Id, boolean enabled)
\begin{DoxyCompactList}\small\item\em Sets whether to enable the local playback of external audio source. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0685b074ebd9c6bc68c302d3e4715819}{set\+Advanced\+Audio\+Options}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_advanced_audio_options}{Advanced\+Audio\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets audio advanced options. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a452919534a48a99e66cc2f1602699d11}{set\+A\+V\+Sync\+Source}} (String channel\+Id, int uid)
\begin{DoxyCompactList}\small\item\em Sets audio-\/video synchronization on the publishing side. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a7d92023c61cd5fd38cceb5cae6a901}{enable\+Video\+Image\+Source}} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_image_track_options}{Image\+Track\+Options}} options)
\begin{DoxyCompactList}\small\item\em Sets whether to replace the current video feeds with images when publishing video streams. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad42e1c1aa220a217f7626579a5a90697}{get\+Network\+Type}} ()
\begin{DoxyCompactList}\small\item\em Gets the type of the local network connection. \end{DoxyCompactList}\item 
abstract long \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a96b09af0aaf427482752380d3722e78b}{get\+Ntp\+Wall\+Time\+In\+Ms}} ()
\begin{DoxyCompactList}\small\item\em Gets the current N\+TP (Network Time Protocol) time. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a954f0e6d1d2576ed719becd55d2526f5}{start\+Media\+Rendering\+Tracing}} ()
\begin{DoxyCompactList}\small\item\em Enables tracing the video frame rendering process. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c761e2401bcb64a25af57652954f7d0}{enable\+Instant\+Media\+Rendering}} ()
\begin{DoxyCompactList}\small\item\em Enables audio and video frame instant rendering. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab167f715ce669feff463bfd3c5103d01}{setup\+Audio\+Attributes}} (Audio\+Attributes attr)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a721a8ebf9fc006f6de61f9a8936b531f}{is\+Feature\+Available\+On\+Device}} (int type)
\begin{DoxyCompactList}\small\item\em Checks whether the device supports the specified advanced feature. \end{DoxyCompactList}\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5cd7e15bca454cdd1d541957a15d40eb}{send\+Audio\+Metadata}} (byte\mbox{[}$\,$\mbox{]} metadata)
\begin{DoxyCompactList}\small\item\em Send audio metadata. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static synchronized \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create}} (Context context, String app\+Id, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} handler)  throws Exception 
\begin{DoxyCompactList}\small\item\em Creates and initializes {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. \end{DoxyCompactList}\item 
static synchronized \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create}} (\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_config}{Rtc\+Engine\+Config}} config)  throws Exception 
\begin{DoxyCompactList}\small\item\em Creates and initializes {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. \end{DoxyCompactList}\item 
static synchronized void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy}} ()
\begin{DoxyCompactList}\small\item\em Releases the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance. \end{DoxyCompactList}\item 
static synchronized void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab8298468a63b963e41d18f60a1720e7d}{destroy}} (@Nullable \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_rtc_engine_release_callback}{I\+Rtc\+Engine\+Release\+Callback}} callback)
\begin{DoxyCompactList}\small\item\em Destroys the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance and releases related resources. \end{DoxyCompactList}\item 
static int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6186606062e5fbe0ff3c6d67c50e68aa}{get\+Recommended\+Encoder\+Type}} ()
\item 
static String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a16cac8571a53394289669f07047cc94c}{get\+Sdk\+Version}} ()
\begin{DoxyCompactList}\small\item\em Gets the S\+DK version. \end{DoxyCompactList}\item 
static String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf1d443e3b29be1c27994b5d09a5bef4}{get\+Media\+Engine\+Version}} ()
\item 
static String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1da04565c3a6dcece43877e242558217}{get\+Error\+Description}} (int error)
\begin{DoxyCompactList}\small\item\em Gets the warning or error description. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Static Protected Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a048fb8e7ca1a5b3a0d53358c8999a3cf}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a048fb8e7ca1a5b3a0d53358c8999a3cf}} 
static Rtc\+Engine\+Impl {\bfseries m\+Instance} = null
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Main interface class of the Agora Native S\+DK.

Call the methods of this class to use all the functionalities of the S\+DK. Agora recommends calling the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} A\+PI methods in the same thread instead of in multiple threads. In previous versions, this class was named Agora\+Audio, and was renamed to \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} from version 1.\+0. 

\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!create@{create}}
\index{create@{create}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{create()}{create()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily static synchronized \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+create (\begin{DoxyParamCaption}\item[{Context}]{context,  }\item[{String}]{app\+Id,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}]{handler }\end{DoxyParamCaption}) throws Exception\hspace{0.3cm}{\ttfamily [static]}}



Creates and initializes {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. 

All called methods provided by the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} class are executed asynchronously. Agora recommends calling these methods in the same thread.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling other A\+P\+Is, you must call this method to create the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\item You can create the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance either by calling this method or by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} . The difference between {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} and this method is that {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} supports more configurations when creating the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance, for example, specifying the region for connection and setting the log files.
\item The S\+DK supports creating only one {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance for an app.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em context} & The context of Android Activity. \\
\hline
{\em app\+Id} & The App ID issued by Agora for your project. Only users in apps with the same App ID can join the same channel and communicate with each other. An App ID can only be used to create one {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance. To change your App ID, call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy()}}} to destroy the current {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance, and then create a new one. \\
\hline
{\em handler} & The event handler for {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns an initialized {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object if the method call succeeds.
\item The method call fails and an exception is thrown, you need to catch the exception and handle it. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!create@{create}}
\index{create@{create}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{create()}{create()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily static synchronized \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+create (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_config}{Rtc\+Engine\+Config}}}]{config }\end{DoxyParamCaption}) throws Exception\hspace{0.3cm}{\ttfamily [static]}}



Creates and initializes {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. 

You can create the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance either by calling this method or by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create(\+Context context, String app\+Id, I\+Rtc\+Engine\+Event\+Handler handler)}}} . The difference between {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create(\+Context context, String app\+Id, I\+Rtc\+Engine\+Event\+Handler handler)}}} and this method is that this method supports more configurations when creating the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance, for example, specifying the region for connection and setting the log files. Call timing\+: Before calling other A\+P\+Is, you must call this method to create the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.

\begin{DoxyNote}{Note}
The S\+DK supports creating only one {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance for an app. All called methods provided by the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} class are executed asynchronously. Agora recommends calling these methods in the same thread.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Configurations for the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_config}{Rtc\+Engine\+Config}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns an initialized {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object if the method call succeeds.
\item The method call fails and an exception is thrown, you need to catch the exception and handle it. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroy@{destroy}}
\index{destroy@{destroy}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroy()}{destroy()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily static synchronized void io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Releases the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance. 

This method releases all resources used by the Agora S\+DK. Use this method for apps in which users occasionally make voice or video calls. When users do not make calls, you can free up resources for other operations. After a successful method call, you can no longer use any method or callback in the S\+DK anymore. If you want to use the real-\/time communication functions again, you must call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} to create a new {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance.

\begin{DoxyNote}{Note}
Agora does not recommend you calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy()}}} in any callback of the S\+DK. Otherwise, the S\+DK cannot release the resources until the callbacks return results, which may result in a deadlock. 
\end{DoxyNote}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab8298468a63b963e41d18f60a1720e7d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab8298468a63b963e41d18f60a1720e7d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroy@{destroy}}
\index{destroy@{destroy}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroy()}{destroy()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily static synchronized void io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy (\begin{DoxyParamCaption}\item[{@Nullable \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_rtc_engine_release_callback}{I\+Rtc\+Engine\+Release\+Callback}}}]{callback }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Destroys the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance and releases related resources. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
When you no longer need real-\/time communication, call this method to release the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance and its related resources, so that the released resources can be used for other operations. It is recommended for scenarios where users make voice or video interactions.


\begin{DoxyParams}{Parameters}
{\em callback} & To configure the synchronous or asynchronous destruction of the engine\+:
\begin{DoxyItemize}
\item Non-\/{\ttfamily N\+U\+LL}：\+Asynchronous destruction. The method returns immediately, while the engine resources might not be fully released. The {\ttfamily on\+Engine\+Released} callback is triggered after the engine is destroyed.
\item {\ttfamily N\+U\+LL}：\+Synchronous destruction. The method returns only after the engine resources are fully released. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_rtc_engine_release_callback}{I\+Rtc\+Engine\+Release\+Callback}}}. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6eb91768f2a6efedb6f581e9a42bed0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6eb91768f2a6efedb6f581e9a42bed0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setChannelProfile@{setChannelProfile}}
\index{setChannelProfile@{setChannelProfile}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setChannelProfile()}{setChannelProfile()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Channel\+Profile (\begin{DoxyParamCaption}\item[{int}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the channel profile. 

You can call this method to set the channel profile. The S\+DK adopts different optimization strategies for different channel profiles. For example, in a live streaming scenario, the S\+DK prioritizes video quality. After initializing the S\+DK, the default channel profile is the live streaming profile. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}
To ensure the quality of real-\/time communication, Agora recommends that all users in a channel use the same channel profile. In different channel scenarios, the default audio routing of the S\+DK is different. See {\ttfamily set\+Default\+Audio\+Route\+To\+Speakerphone}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em profile} & The channel profile.
\begin{DoxyItemize}
\item C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON (0)\+: Communication. Agora recommends using the live streaming profile for a better audio and video experience.
\item C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG (1)\+: (Default) Live streaming.
\item C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+G\+A\+ME (2)\+: Gaming. Deprecated\+: Use C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG instead.
\item C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+C\+L\+O\+U\+D\+\_\+\+G\+A\+M\+I\+NG (3)\+: Interaction. The scenario is optimized for latency. Use this profile if the use case requires frequent interactions between users. Deprecated\+: Use C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG instead.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid.
\item -\/7\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setClientRole@{setClientRole}}
\index{setClientRole@{setClientRole}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setClientRole()}{setClientRole()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Client\+Role (\begin{DoxyParamCaption}\item[{int}]{role }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the client role. 

By default,the S\+DK sets the user role as audience. You can call this method to set the user role as host. The user role ( {\ttfamily roles} ) determines the users\textquotesingle{} permissions at the S\+DK level, including whether they can publish audio and video streams in a channel. Call timing\+: You can call this method either before or after joining a channel. If you call this method to set the user role as the host before joining the channel and set the local video property through the {\ttfamily setup\+Local\+Video} method, the local video preview is automatically enabled when the user joins the channel. If you call this method to set the user role after joining a channel, the S\+DK will automatically call the {\ttfamily mute\+Local\+Audio\+Stream} and {\ttfamily mute\+Local\+Video\+Stream} method to change the state for publishing audio and video streams. Related callbacks\+: If you call this method to switch the user role after joining the channel, the S\+DK triggers the following callbacks\+:
\begin{DoxyItemize}
\item Triggers {\ttfamily on\+Client\+Role\+Changed} on the local client.\+Note\+: Calling this method before joining a channel and set the {\ttfamily role} to {\ttfamily A\+U\+D\+I\+E\+N\+CE} will trigger this callback as well.
\item Triggers {\ttfamily on\+User\+Joined} or {\ttfamily on\+User\+Offline} on the remote client. If you call this method to set the user role after joining a channel but encounter a failure, the S\+DK trigger the {\ttfamily on\+Client\+Role\+Change\+Failed} callback to report the reason for the failure and the current user role.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
When calling this method before joining a channel and setting the user role to {\ttfamily B\+R\+O\+A\+D\+C\+A\+S\+T\+ER}, the {\ttfamily on\+Client\+Role\+Changed} callback will not be triggered on the local client. Calling this method before joining a channel and set the {\ttfamily role} to {\ttfamily A\+U\+D\+I\+E\+N\+CE} will trigger this callback as well.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em role} & The user role\+:
\begin{DoxyItemize}
\item C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+ER (1)\+: Host.
\item C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE (2)\+: Audience. Note\+: If you set the user role as an audience member, you cannot publish audio and video streams in the channel. If you want to publish media streams in a channel during live streaming, ensure you set the user role as broadcaster.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/7\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae61dcff88a6c9854770fbd8cf14310f3}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae61dcff88a6c9854770fbd8cf14310f3}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setClientRole@{setClientRole}}
\index{setClientRole@{setClientRole}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setClientRole()}{setClientRole()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Client\+Role (\begin{DoxyParamCaption}\item[{int}]{role,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_client_role_options}{Client\+Role\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the user role and the audience latency level in a live streaming scenario. 

By default,the S\+DK sets the user role as audience. You can call this method to set the user role as host. The user role ( {\ttfamily roles} ) determines the users\textquotesingle{} permissions at the S\+DK level, including whether they can publish audio and video streams in a channel. The difference between this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}{set\+Client\+Role(int role)}}} is that, this method supports setting the {\ttfamily audience\+Latency\+Level}. {\ttfamily audience\+Latency\+Level} needs to be used together with {\ttfamily role} to determine the level of service that users can enjoy within their permissions. For example, an audience member can choose to receive remote streams with low latency or ultra-\/low latency. Call timing\+: You can call this method either before or after joining a channel. If you call this method to set the user role as the host before joining the channel and set the local video property through the {\ttfamily setup\+Local\+Video} method, the local video preview is automatically enabled when the user joins the channel. If you call this method to set the user role after joining a channel, the S\+DK will automatically call the {\ttfamily mute\+Local\+Audio\+Stream} and {\ttfamily mute\+Local\+Video\+Stream} method to change the state for publishing audio and video streams. Related callbacks\+: If you call this method to switch the user role after joining the channel, the S\+DK triggers the following callbacks\+:
\begin{DoxyItemize}
\item Triggers {\ttfamily on\+Client\+Role\+Changed} on the local client.\+Note\+: Calling this method before joining a channel and set the {\ttfamily role} to {\ttfamily A\+U\+D\+I\+E\+N\+CE} will trigger this callback as well.
\item Triggers {\ttfamily on\+User\+Joined} or {\ttfamily on\+User\+Offline} on the remote client. If you call this method to set the user role after joining a channel but encounter a failure, the S\+DK trigger the {\ttfamily on\+Client\+Role\+Change\+Failed} callback to report the reason for the failure and the current user role.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
When the user role is set to host, the audience latency level can only be set to A\+U\+D\+I\+E\+N\+C\+E\+\_\+\+L\+A\+T\+E\+N\+C\+Y\+\_\+\+L\+E\+V\+E\+L\+\_\+\+U\+L\+T\+R\+A\+\_\+\+L\+O\+W\+\_\+\+L\+A\+T\+E\+N\+CY. When calling this method before joining a channel and setting the {\ttfamily role} to {\ttfamily B\+R\+O\+A\+D\+C\+A\+S\+T\+ER}, the {\ttfamily on\+Client\+Role\+Changed} callback will not be triggered on the local client. Calling this method before joining a channel and set the {\ttfamily role} to {\ttfamily A\+U\+D\+I\+E\+N\+CE} will trigger this callback as well.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em role} & The user role.
\begin{DoxyItemize}
\item C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+ER (1)\+: Host. A host can both send and receive streams.
\item C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE (2)\+: (Default) Audience. An audience member can only receive streams. Note\+: If you set the user role as an audience member, you cannot publish audio and video streams in the channel. If you want to publish media streams in a channel during live streaming, ensure you set the user role as broadcaster. 
\end{DoxyItemize}\\
\hline
{\em options} & The detailed options of a user, including the user level. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_client_role_options}{Client\+Role\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/5\+: The request is rejected.
\item -\/7\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a53300ddeb64455cd7f7d7c2eb3f08d1e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a53300ddeb64455cd7f7d7c2eb3f08d1e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!sendCustomReportMessage@{sendCustomReportMessage}}
\index{sendCustomReportMessage@{sendCustomReportMessage}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{sendCustomReportMessage()}{sendCustomReportMessage()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+send\+Custom\+Report\+Message (\begin{DoxyParamCaption}\item[{String}]{id,  }\item[{String}]{category,  }\item[{String}]{event,  }\item[{String}]{label,  }\item[{int}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Reports customized messages. 

Agora supports reporting and analyzing customized messages. This function is in the beta stage with a free trial. The ability provided in its beta test version is reporting a maximum of 10 message pieces within 6 seconds, with each message piece not exceeding 256 bytes and each string not exceeding 100 bytes. To try out this function, contact {\ttfamily support@agora.\+io} and discuss the format of customized messages with us. \mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2253d93887b5dd10ee10a84b51aaf57}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2253d93887b5dd10ee10a84b51aaf57}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!preloadChannel@{preloadChannel}}
\index{preloadChannel@{preloadChannel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadChannel()}{preloadChannel()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+preload\+Channel (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Name,  }\item[{int}]{optional\+Uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Preloads a channel with {\ttfamily token}, {\ttfamily channel\+Name}, and {\ttfamily optional\+Uid}. 

When audience members need to switch between different channels frequently, 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. If you join a preloaded channel, leave it and want to rejoin the same channel, you do not need to call this method unless the token for preloading the channel expires. Call timing\+: To improve the user experience of preloading channels, Agora recommends that before joining the channel, calling this method as early as possible once confirming the channel name and user information.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item When calling this method, ensure you set the user role as audience and do not set the audio scenario as {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+O\+R\+US}, otherwise, this method does not take effect.
\item You also need to make sure that the channel name, user ID and token passed in for preloading are the same as the values passed in when joinning the channel, otherwise, this method does not take effect.
\item One {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance supports preloading 20 channels at most. When exceeding this limit, the latest 20 preloaded channels take effect. Failing to preload a channel does not mean that you can\textquotesingle{}t join a channel, nor will it increase the time of joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. See .When the token for preloading channels expires, you can update the token based on the number of channels you preload.
\begin{DoxyItemize}
\item When preloading one channel, calling this method to pass in the new token.
\item When preloading more than one channels\+:
\begin{DoxyItemize}
\item If you use a wildcard token for all preloaded channels, call {\ttfamily update\+Preload\+Channel\+Token} to update the token.\+Note\+: When generating a wildcard token, ensure the user ID is not set as 0. See {\ttfamily Secure authentication with tokens}.
\item If you use different tokens to preload different channels, call this method to pass in your user ID, channel name and the new token. 
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
{\em channel\+Name} & The channel name that you want to preload. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em optional\+Uid} & The user ID. This parameter is used to identify the user in the channel for real-\/time audio and video interaction. You need to set and manage user I\+Ds yourself, and ensure that each user ID in the same channel is unique. This parameter is a 32-\/bit signed integer. The value range is from -\/2$^\wedge$31 to 2$^\wedge$31-\/1. If the user ID is not assigned (or set to 0), the S\+DK assigns a random user ID and {\ttfamily on\+Join\+Channel\+Success} returns it in the callback. Your application must record and maintain the returned user ID, because the S\+DK does not do so.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name and join the channel again. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fcf306ca1009b0318248a30d90e928d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fcf306ca1009b0318248a30d90e928d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!preloadChannelWithUserAccount@{preloadChannelWithUserAccount}}
\index{preloadChannelWithUserAccount@{preloadChannelWithUserAccount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadChannelWithUserAccount()}{preloadChannelWithUserAccount()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+preload\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Name,  }\item[{String}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Preloads a channel with {\ttfamily token}, {\ttfamily channel\+Name}, and {\ttfamily user\+Account}. 

When audience members need to switch between different channels frequently, 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. If you join a preloaded channel, leave it and want to rejoin the same channel, you do not need to call this method unless the token for preloading the channel expires. Call timing\+: To improve the user experience of preloading channels, Agora recommends that before joining the channel, calling this method as early as possible once confirming the channel name and user information.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item When calling this method, ensure you set the user role as audience and do not set the audio scenario as {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+O\+R\+US}, otherwise, this method does not take effect.
\item You also need to make sure that the User Account, channel ID and token passed in for preloading are the same as the values passed in when joining the channel, otherwise, this method does not take effect.
\item One {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance supports preloading 20 channels at most. When exceeding this limit, the latest 20 preloaded channels take effect. Failing to preload a channel does not mean that you can\textquotesingle{}t join a channel, nor will it increase the time of joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. See .When the token for preloading channels expires, you can update the token based on the number of channels you preload.
\begin{DoxyItemize}
\item When preloading one channel, calling this method to pass in the new token.
\item When preloading more than one channels\+:
\begin{DoxyItemize}
\item If you use a wildcard token for all preloaded channels, call {\ttfamily update\+Preload\+Channel\+Token} to update the token.\+Note\+: When generating a wildcard token, ensure the user ID is not set as 0. See {\ttfamily Secure authentication with tokens}.
\item If you use different tokens to preload different channels, call this method to pass in your user ID, channel name and the new token. 
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
{\em channel\+Name} & The channel name that you want to preload. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em user\+Account} & The user account. This parameter is used to identify the user in the channel for real-\/time audio and video engagement. You need to set and manage user accounts yourself and ensure that each user account in the same channel is unique. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as N\+U\+LL. Supported characters are as follows(89 in total)\+:
\begin{DoxyItemize}
\item The 26 lowercase English letters\+: a to z.
\item The 26 uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item Space
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the User Account is empty. You need to pass in a valid parameter and join the channel again.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name and join the channel again. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36f318ebd447878bba6789836cf0f89f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36f318ebd447878bba6789836cf0f89f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updatePreloadChannelToken@{updatePreloadChannelToken}}
\index{updatePreloadChannelToken@{updatePreloadChannelToken}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updatePreloadChannelToken()}{updatePreloadChannelToken()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Preload\+Channel\+Token (\begin{DoxyParamCaption}\item[{String}]{token }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the wildcard token for preloading channels. 

You need to maintain the life cycle of the wildcard token by yourself. When the token expires, you need to generate a new wildcard token and then call this method to pass in the new token. Applicable scenarios\+: In scenarios involving multiple channels, such as switching between different channels, using a wildcard token means users do not need to apply for a new token every time joinning a new channel, which can save users time for switching channels and reduce the pressure on your token server.


\begin{DoxyParams}{Parameters}
{\em token} & The new token.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!joinChannel@{joinChannel}}
\index{joinChannel@{joinChannel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannel()}{joinChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+join\+Channel (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Id,  }\item[{String}]{optional\+Info,  }\item[{int}]{uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Joins a channel. 

By default, the user subscribes to the audio and video streams of all the other users in the channel, giving rise to usage and {\bfseries{billings}}. To stop subscribing to a specified stream or all remote streams, call the corresponding {\ttfamily mute} methods. Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}}. Related callbacks\+: A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: The {\ttfamily on\+User\+Joined} callback, if a user joining the channel in the C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON profile, or a host joining a channel in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile. When the connection between the local client and Agora\textquotesingle{}s server is interrupted due to poor network conditions, the S\+DK tries reconnecting to the server. When the local client successfully rejoins the channel, the S\+DK triggers the {\ttfamily on\+Rejoin\+Channel\+Success} callback on the local client.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only supports users joining one channel at a time.
\item Users with different App I\+Ds cannot call each other.
\item Before joining a channel, ensure that the App ID you use to generate a token is the same as that you pass in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} method; otherwise, you may fail to join the channel with the token.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\+Note\+:
\begin{DoxyItemize}
\item (Recommended) If your project has enabled the security mode (using A\+PP ID and Token for authentication), this parameter is required.
\item If you have only enabled the testing mode (using A\+PP ID for authentication), this parameter is optional. You will automatically exit the channel 24 hours after successfully joining in.
\item If you need to join different channels at the same time or switch between channels, Agora recommends using a wildcard token so that you don\textquotesingle{}t need to apply for a new token every time joining a channel. See {\ttfamily Secure authentication with tokens}. 
\end{DoxyItemize}\\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em optional\+Info} & (Optional) Reserved for future use. \\
\hline
{\em uid} & The user ID. This parameter is used to identify the user in the channel for real-\/time audio and video interaction. You need to set and manage user I\+Ds yourself, and ensure that each user ID in the same channel is unique. This parameter is a 32-\/bit signed integer. The value range is from -\/2$^\wedge$31 to 2$^\wedge$31-\/1. If the user ID is not assigned (or set to 0), the S\+DK assigns a random user ID and {\ttfamily on\+Join\+Channel\+Success} returns it in the callback. Your application must record and maintain the returned user ID, because the S\+DK does not do so.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is invalid, the {\ttfamily uid} parameter is not set to an integer, or the value of a member in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/3\+: Fails to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object. You need to reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/8\+: The internal state of the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object is wrong. The typical cause is that after calling {\ttfamily start\+Echo\+Test} to start a call loop test, you call this method to join the channel without calling {\ttfamily stop\+Echo\+Test} to stop the test. You need to call {\ttfamily stop\+Echo\+Test} before calling this method.
\item -\/17\+: The request to join the channel is rejected. The typical cause is that the user is already in the channel. Agora recommends that you use the {\ttfamily on\+Connection\+State\+Changed} callback to see whether the user is in the channel. Do not call this method to join the channel unless you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED} (1) state.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in {\ttfamily channel\+Id} to rejoin the channel.
\item -\/121\+: The user ID is invalid. You need to pass in a valid user ID in {\ttfamily uid} to rejoin the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!joinChannel@{joinChannel}}
\index{joinChannel@{joinChannel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannel()}{joinChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+join\+Channel (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Id,  }\item[{int}]{uid,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Joins a channel with media options. 

Compared to {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}{join\+Channel(\+String token, String channel\+Id, String optional\+Info, int uid)}}}, this method has the {\ttfamily options} parameter which is used to set media options, such as whether to publish audio and video streams within a channel, or whether to automatically subscribe to the audio and video streams of all remote users when joining a channel. By default, the user subscribes to the audio and video streams of all the other users in the channel, giving rise to usage and {\bfseries{billings}}. To stop subscribing to other streams, set the {\ttfamily options} parameter or call the corresponding {\ttfamily mute} methods. Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}}. Related callbacks\+: A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: The {\ttfamily on\+User\+Joined} callback, if a user joining the channel in the C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON profile, or a host joining a channel in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile. When the connection between the local client and Agora\textquotesingle{}s server is interrupted due to poor network conditions, the S\+DK tries reconnecting to the server. When the local client successfully rejoins the channel, the S\+DK triggers the {\ttfamily on\+Rejoin\+Channel\+Success} callback on the local client.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only supports users joining one channel at a time.
\item Users with different App I\+Ds cannot call each other.
\item Before joining a channel, ensure that the App ID you use to generate a token is the same as that you pass in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} method; otherwise, you may fail to join the channel with the token.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\+Note\+:
\begin{DoxyItemize}
\item (Recommended) If your project has enabled the security mode (using A\+PP ID and Token for authentication), this parameter is required.
\item If you have only enabled the testing mode (using A\+PP ID for authentication), this parameter is optional. You will automatically exit the channel 24 hours after successfully joining in.
\item If you need to join different channels at the same time or switch between channels, Agora recommends using a wildcard token so that you don\textquotesingle{}t need to apply for a new token every time joining a channel. See {\ttfamily Secure authentication with tokens}. 
\end{DoxyItemize}\\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em uid} & The user ID. This parameter is used to identify the user in the channel for real-\/time audio and video interaction. You need to set and manage user I\+Ds yourself, and ensure that each user ID in the same channel is unique. This parameter is a 32-\/bit signed integer. The value range is from -\/231 to 231-\/1. If the user ID is not assigned (or set to 0), the S\+DK assigns a random user ID and {\ttfamily on\+Join\+Channel\+Success} returns it in the callback. Your application must record and maintain the returned user ID, because the S\+DK does not do so. \\
\hline
{\em options} & The channel media options. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is invalid, the {\ttfamily uid} parameter is not set to an integer, or the value of a member in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/3\+: Fails to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object. You need to reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/8\+: The internal state of the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object is wrong. The typical cause is that after calling {\ttfamily start\+Echo\+Test} to start a call loop test, you call this method to join the channel without calling {\ttfamily stop\+Echo\+Test} to stop the test. You need to call {\ttfamily stop\+Echo\+Test} before calling this method.
\item -\/17\+: The request to join the channel is rejected. The typical cause is that the user is already in the channel. Agora recommends that you use the {\ttfamily on\+Connection\+State\+Changed} callback to see whether the user is in the channel. Do not call this method to join the channel unless you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED} (1) state.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in {\ttfamily channel\+Id} to rejoin the channel.
\item -\/121\+: The user ID is invalid. You need to pass in a valid user ID in {\ttfamily uid} to rejoin the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9d596bab97c3b7b164e9f7a61732da4b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9d596bab97c3b7b164e9f7a61732da4b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerLocalUserAccount@{registerLocalUserAccount}}
\index{registerLocalUserAccount@{registerLocalUserAccount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerLocalUserAccount()}{registerLocalUserAccount()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Local\+User\+Account (\begin{DoxyParamCaption}\item[{String}]{app\+Id,  }\item[{String}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers a user account. 

Once registered, the user account can be used to identify the local user when the user joins the channel. After the registration is successful, the user account can identify the identity of the local user, and the user can use it to join the channel. This method is optional. If you want to join a channel using a user account, you can choose one of the following methods\+:
\begin{DoxyItemize}
\item Call the {\ttfamily register\+Local\+User\+Account} method to register a user account, and then call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}{join\+Channel\+With\+User\+Account(\+String token, String channel\+Name, String user\+Account)}}} or {\ttfamily join\+Channel\+With\+User\+Account(String token, String channel\+Name, String user\+Account, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} method to join a channel, which can shorten the time it takes to enter the channel.
\item Call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}{join\+Channel\+With\+User\+Account(\+String token, String channel\+Name, String user\+Account)}}} or {\ttfamily join\+Channel\+With\+User\+Account(String token, String channel\+Name, String user\+Account, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} method to join a channel. Related callbacks\+: After successfully calling this method, the {\ttfamily on\+Local\+User\+Registered} callback will be triggered on the local client to report the local user\textquotesingle{}s U\+ID and user account.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Starting from v4.\+6.\+0, the S\+DK will no longer automatically map Int U\+ID to the String {\ttfamily user\+Account} used when registering a User Account. If you want to join a channel with the original String {\ttfamily user\+Account} used during registration, call the {\ttfamily join\+Channel\+With\+User\+Account(String token, String channel\+Name, String user\+Account, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} method to join the channel, instead of calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} and pass in the Int U\+ID obtained through this method
\item Ensure that the {\ttfamily user\+Account} is unique in the channel.
\item To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a U\+ID, then ensure all the other users use the U\+ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the ID of the user is set to the same parameter type.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em app\+Id} & The App ID of your project on Agora Console. \\
\hline
{\em user\+Account} & The user account. This parameter is used to identify the user in the channel for real-\/time audio and video engagement. You need to set and manage user accounts yourself and ensure that each user account in the same channel is unique. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as N\+U\+LL. Supported characters are as follow(89 in total)\+:
\begin{DoxyItemize}
\item The 26 lowercase English letters\+: a to z.
\item The 26 uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item Space
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!joinChannelWithUserAccount@{joinChannelWithUserAccount}}
\index{joinChannelWithUserAccount@{joinChannelWithUserAccount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannelWithUserAccount()}{joinChannelWithUserAccount()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+join\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Name,  }\item[{String}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Joins a channel with a User Account and Token. 

Before calling this method, if you have not called {\ttfamily register\+Local\+User\+Account} to register a user account, when you call this method to join a channel, the S\+DK automatically creates a user account for you. Calling the {\ttfamily register\+Local\+User\+Account} method to register a user account, and then calling this method to join a channel can shorten the time it takes to enter the channel. Once a user joins the channel, the user subscribes to the audio and video streams of all the other users in the channel by default, giving rise to usage and billings. To stop subscribing to a specified stream or all remote streams, call the corresponding {\ttfamily mute} methods. Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}}. Related callbacks\+: After the user successfully joins the channel, the S\+DK triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: {\ttfamily on\+Local\+User\+Registered}, {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: The {\ttfamily on\+User\+Joined} and {\ttfamily on\+User\+Info\+Updated} callbacks if a user joins the channel in the C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON profile, or if a host joins the channel in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only supports users joining one channel at a time.
\item Users with different App I\+Ds cannot call each other.
\item Before joining a channel, ensure that the App ID you use to generate a token is the same as that you pass in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} method; otherwise, you may fail to join the channel with the token. To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a U\+ID, then ensure all the other users use the U\+ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the ID of the user is set to the same parameter type.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\+Note\+:
\begin{DoxyItemize}
\item (Recommended) If your project has enabled the security mode (using A\+PP ID and Token for authentication), this parameter is required.
\item If you have only enabled the testing mode (using A\+PP ID for authentication), this parameter is optional. You will automatically exit the channel 24 hours after successfully joining in.
\item If you need to join different channels at the same time or switch between channels, Agora recommends using a wildcard token so that you don\textquotesingle{}t need to apply for a new token every time joining a channel. See {\ttfamily Secure authentication with tokens}. 
\end{DoxyItemize}\\
\hline
{\em channel\+Name} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em user\+Account} & The user account. This parameter is used to identify the user in the channel for real-\/time audio and video engagement. You need to set and manage user accounts yourself and ensure that each user account in the same channel is unique. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as N\+U\+LL. Supported characters are as follows(89 in total)\+:
\begin{DoxyItemize}
\item The 26 lowercase English letters\+: a to z.
\item The 26 uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item Space
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is invalid, the {\ttfamily uid} parameter is not set to an integer, or the value of a member in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/3\+: Fails to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object. You need to reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/8\+: The internal state of the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object is wrong. The typical cause is that after calling {\ttfamily start\+Echo\+Test} to start a call loop test, you call this method to join the channel without calling {\ttfamily stop\+Echo\+Test} to stop the test. You need to call {\ttfamily stop\+Echo\+Test} before calling this method.
\item -\/17\+: The request to join the channel is rejected. The typical cause is that the user is already in the channel. Agora recommends that you use the {\ttfamily on\+Connection\+State\+Changed} callback to see whether the user is in the channel. Do not call this method to join the channel unless you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED} (1) state.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in {\ttfamily channel\+Id} to rejoin the channel.
\item -\/121\+: The user ID is invalid. You need to pass in a valid user ID in {\ttfamily uid} to rejoin the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a65d0e8211e6a9ac4dde5d67ced844cfa}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a65d0e8211e6a9ac4dde5d67ced844cfa}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!joinChannelWithUserAccount@{joinChannelWithUserAccount}}
\index{joinChannelWithUserAccount@{joinChannelWithUserAccount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannelWithUserAccount()}{joinChannelWithUserAccount()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+join\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{String}]{token,  }\item[{String}]{channel\+Name,  }\item[{String}]{user\+Account,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Join a channel using a user account and token, and set the media options. 

\begin{DoxySince}{Since}
v3.\+3.\+0.
\end{DoxySince}
Before calling this method, if you have not called {\ttfamily register\+Local\+User\+Account} to register a user account, when you call this method to join a channel, the S\+DK automatically creates a user account for you. Calling the {\ttfamily register\+Local\+User\+Account} method to register a user account, and then calling this method to join a channel can shorten the time it takes to enter the channel. Compared to {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aef5f666b23319116e7d7ee85e58fc5e8}{join\+Channel\+With\+User\+Account(\+String token, String channel\+Name, String user\+Account)}}}, this method has the {\ttfamily options} parameter which is used to set media options, such as whether to publish audio and video streams within a channel. By default, the user subscribes to the audio and video streams of all the other users in the channel, giving rise to usage and {\bfseries{billings}}. To stop subscribing to other streams, set the {\ttfamily options} parameter or call the corresponding {\ttfamily mute} methods. Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}}. Related callbacks\+: After the user successfully joins the channel, the S\+DK triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: {\ttfamily on\+Local\+User\+Registered}, {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: The {\ttfamily on\+User\+Joined} and {\ttfamily on\+User\+Info\+Updated} callbacks if a user joins the channel in the C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON profile, or if a host joins the channel in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only supports users joining one channel at a time.
\item Users with different App I\+Ds cannot call each other.
\item Before joining a channel, ensure that the App ID you use to generate a token is the same as that you pass in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} method; otherwise, you may fail to join the channel with the token. To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a U\+ID, then ensure all the other users use the U\+ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the ID of the user is set to the same parameter type.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\+Note\+:
\begin{DoxyItemize}
\item (Recommended) If your project has enabled the security mode (using A\+PP ID and Token for authentication), this parameter is required.
\item If you have only enabled the testing mode (using A\+PP ID for authentication), this parameter is optional. You will automatically exit the channel 24 hours after successfully joining in.
\item If you need to join different channels at the same time or switch between channels, Agora recommends using a wildcard token so that you don\textquotesingle{}t need to apply for a new token every time joining a channel. See {\ttfamily Secure authentication with tokens}. 
\end{DoxyItemize}\\
\hline
{\em channel\+Name} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters (89 characters in total)\+:
\begin{DoxyItemize}
\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em user\+Account} & The user account. This parameter is used to identify the user in the channel for real-\/time audio and video engagement. You need to set and manage user accounts yourself and ensure that each user account in the same channel is unique. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as N\+U\+LL. Supported characters are as follows(89 in total)\+:
\begin{DoxyItemize}
\item The 26 lowercase English letters\+: a to z.
\item The 26 uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item Space
\item \char`\"{}!\char`\"{}, \char`\"{}\#\char`\"{}, \char`\"{}\$\char`\"{}, \char`\"{}\%\char`\"{}, \char`\"{}\&\char`\"{}, \char`\"{}(\char`\"{}, \char`\"{})\char`\"{}, \char`\"{}+\char`\"{}, \char`\"{}-\/\char`\"{}, \char`\"{}\+:\char`\"{}, \char`\"{};\char`\"{}, \char`\"{}$<$\char`\"{}, \char`\"{}=\char`\"{}, \char`\"{}.\char`\"{}, \char`\"{}$>$\char`\"{}, \char`\"{}?\char`\"{}, \char`\"{}@\char`\"{}, \char`\"{}\mbox{[}\char`\"{}, \char`\"{}\mbox{]}\char`\"{}, \char`\"{}$^\wedge$\char`\"{}, \char`\"{}\+\_\+\char`\"{}, \char`\"{}\{\char`\"{}, \char`\"{}\}\char`\"{}, \char`\"{}$\vert$\char`\"{}, \char`\"{}$\sim$\char`\"{}, \char`\"{},\char`\"{} 
\end{DoxyItemize}\\
\hline
{\em options} & The channel media options. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is invalid, the {\ttfamily uid} parameter is not set to an integer, or the value of a member in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/3\+: Fails to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object. You need to reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/8\+: The internal state of the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object is wrong. The typical cause is that after calling {\ttfamily start\+Echo\+Test} to start a call loop test, you call this method to join the channel without calling {\ttfamily stop\+Echo\+Test} to stop the test. You need to call {\ttfamily stop\+Echo\+Test} before calling this method.
\item -\/17\+: The request to join the channel is rejected. The typical cause is that the user is already in the channel. Agora recommends that you use the {\ttfamily on\+Connection\+State\+Changed} callback to see whether the user is in the channel. Do not call this method to join the channel unless you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED} (1) state.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in {\ttfamily channel\+Id} to rejoin the channel.
\item -\/121\+: The user ID is invalid. You need to pass in a valid user ID in {\ttfamily uid} to rejoin the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad5b7ad4d48999316546cdc9d6c21cd19}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad5b7ad4d48999316546cdc9d6c21cd19}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getUserInfoByUserAccount@{getUserInfoByUserAccount}}
\index{getUserInfoByUserAccount@{getUserInfoByUserAccount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getUserInfoByUserAccount()}{getUserInfoByUserAccount()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+User\+Info\+By\+User\+Account (\begin{DoxyParamCaption}\item[{String}]{user\+Account,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}}]{user\+Info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the user information by passing in the user account. 

After a remote user joins the channel, the S\+DK gets the U\+ID and user account of the remote user, caches them in a mapping table object, and triggers the {\ttfamily on\+User\+Info\+Updated} callback on the local client. After receiving the callback, you can call this method and pass in the U\+ID to get the user account of the specified user from the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object.


\begin{DoxyParams}{Parameters}
{\em user\+Account} & The user account. \\
\hline
{\em user\+Info} & The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object that identifies the user information.
\begin{DoxyItemize}
\item Input value\+: A {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object.
\item Output\+: A {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object that contains the user account and user ID of the user. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa8b9d7d2958d6e712caf2df0f3fd3eb5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa8b9d7d2958d6e712caf2df0f3fd3eb5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getUserInfoByUid@{getUserInfoByUid}}
\index{getUserInfoByUid@{getUserInfoByUid}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getUserInfoByUid()}{getUserInfoByUid()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+User\+Info\+By\+Uid (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}}]{user\+Info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the user information by passing in the user ID. 

After a remote user joins the channel, the S\+DK gets the U\+ID and user account of the remote user, caches them in a mapping table object, and triggers the {\ttfamily on\+User\+Info\+Updated} callback on the local client. After receiving the callback, you can call this method and pass in the U\+ID to get the user account of the specified user from the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object. Call timing\+: Call this method after receiving the {\ttfamily on\+User\+Info\+Updated} callback. Related callbacks\+: {\ttfamily on\+User\+Info\+Updated}


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. \\
\hline
{\em user\+Info} & Input and output parameter. The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object that identifies the user information.
\begin{DoxyItemize}
\item Input value\+: A {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object.
\item Output\+: A {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_user_info}{User\+Info}}} object that contains both the user account and U\+ID.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!leaveChannel@{leaveChannel}}
\index{leaveChannel@{leaveChannel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{leaveChannel()}{leaveChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+leave\+Channel (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Leaves a channel. 

After calling this method, the S\+DK terminates the audio and video interaction, leaves the current channel, and releases all resources related to the session. After joining the channel, you must call this method to end the call; otherwise, the next call cannot be started. Call timing\+: Call this method after joining a channel. Related callbacks\+: A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Leave\+Channel} callback will be triggered.
\item The remote client\+: The {\ttfamily on\+User\+Offline} callback will be triggered after the remote host leaves the channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
If you call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy()}}} immediately after calling this method, the S\+DK does not trigger the {\ttfamily on\+Leave\+Channel} callback.
\begin{DoxyItemize}
\item This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel.
\item If you have called {\ttfamily join\+Channel\+Ex} to join multiple channels, calling this method will leave all the channels you joined.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/7\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab4af0c1df4b68eb898b1843dd0671702}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab4af0c1df4b68eb898b1843dd0671702}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!leaveChannel@{leaveChannel}}
\index{leaveChannel@{leaveChannel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{leaveChannel()}{leaveChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+leave\+Channel (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_leave_channel_options}{Leave\+Channel\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets channel options and leaves the channel. 

After calling this method, the S\+DK terminates the audio and video interaction, leaves the current channel, and releases all resources related to the session. After joining a channel, you must call this method or {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel()}}} to end the call, otherwise, the next call cannot be started. If you have called {\ttfamily join\+Channel\+Ex} to join multiple channels, calling this method will leave all the channels you joined. Call timing\+: Call this method after joining a channel. Related callbacks\+: A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Leave\+Channel} callback will be triggered.
\item The remote client\+: The {\ttfamily on\+User\+Offline} callback will be triggered after the remote host leaves the channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
If you call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy()}}} immediately after calling this method, the S\+DK does not trigger the {\ttfamily on\+Leave\+Channel} callback. This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & The options for leaving the channel. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_leave_channel_options}{Leave\+Channel\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c8f9a9cabfb7ac7e71990525910793e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c8f9a9cabfb7ac7e71990525910793e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!renewToken@{renewToken}}
\index{renewToken@{renewToken}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{renewToken()}{renewToken()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+renew\+Token (\begin{DoxyParamCaption}\item[{String}]{token }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Renews the token. 

This method is used to update the token. After successfully calling this method, the S\+DK will trigger the {\ttfamily on\+Renew\+Token\+Result} callback. A token will expire after a certain period of time, at which point the S\+DK will be unable to establish a connection with the server. Call timing\+: In any of the following cases, Agora recommends that you generate a new token on your server and then call this method to renew your token\+:
\begin{DoxyItemize}
\item Receiving the {\ttfamily on\+Token\+Privilege\+Will\+Expire} callback reporting the token is about to expire.
\item Receiving the {\ttfamily on\+Request\+Token} callback reporting the token has expired.
\item Receiving the {\ttfamily on\+Connection\+State\+Changed} callback reporting {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+C\+H\+A\+N\+G\+E\+D\+\_\+\+T\+O\+K\+E\+N\+\_\+\+E\+X\+P\+I\+R\+ED} (9).
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em token} & The new token.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid. For example, the token is empty.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item 110\+: Invalid token. Ensure the following\+:
\begin{DoxyItemize}
\item The user ID specified when generating the token is consistent with the user ID used when joining the channel.
\item The generated token is the same as the token passed in to join the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affc79f4a1174abff12b8f04e57e61e5d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affc79f4a1174abff12b8f04e57e61e5d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioDeviceInfo@{getAudioDeviceInfo}}
\index{getAudioDeviceInfo@{getAudioDeviceInfo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioDeviceInfo()}{getAudioDeviceInfo()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_device_info}{Device\+Info}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Device\+Info (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the audio device information. 

After calling this method, you can get whether the audio device supports ultra-\/low-\/latency capture and playback.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}
The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_device_info}{Device\+Info}}} object that identifies the audio device information.
\begin{DoxyItemize}
\item Not null\+: Success.
\item Null\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a278f1f8eb83ce0665c4417ac6cfc96d8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a278f1f8eb83ce0665c4417ac6cfc96d8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableWebSdkInteroperability@{enableWebSdkInteroperability}}
\index{enableWebSdkInteroperability@{enableWebSdkInteroperability}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableWebSdkInteroperability()}{enableWebSdkInteroperability()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Web\+Sdk\+Interoperability (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables interoperability with the Agora Web S\+DK (applicable only in the live streaming scenarios). 

You can call this method to enable or disable interoperability with the Agora Web S\+DK. If a channel has Web S\+DK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user. This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable interoperability\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable interoperability.
\item {\ttfamily false}\+: (Default) Disable interoperability.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b7763c95e0adf259bc9a2e129678af7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b7763c95e0adf259bc9a2e129678af7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getConnectionState@{getConnectionState}}
\index{getConnectionState@{getConnectionState}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getConnectionState()}{getConnectionState()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Connection\+State (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the current connection state of the S\+DK. 

Call timing\+: This method can be called either before or after joining the channel.

\begin{DoxyReturn}{Returns}
The current connection state. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adcfff23cc12e91cde1a7dcddbbcb607c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adcfff23cc12e91cde1a7dcddbbcb607c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableAudio@{enableAudio}}
\index{enableAudio@{enableAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudio()}{enableAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the audio module. 

The audio module is enabled by default After calling {\ttfamily disable\+Audio} to disable the audio module, you can call this method to re-\/enable it. Call timing\+: This method can be called either before or after joining the channel. It is still valid after one leaves channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Calling this method will reset the entire engine, resulting in a slow response time. You can use the following methods to independently control a specific function of the audio module based on your actual needs\+:
\begin{DoxyItemize}
\item {\ttfamily enable\+Local\+Audio}\+: Whether to enable the microphone to create the local audio stream.
\item {\ttfamily mute\+Local\+Audio\+Stream}\+: Whether to publish the local audio stream.
\item {\ttfamily mute\+Remote\+Audio\+Stream}\+: Whether to subscribe and play the remote audio stream.
\item {\ttfamily mute\+All\+Remote\+Audio\+Streams}\+: Whether to subscribe to and play all remote audio streams.
\end{DoxyItemize}
\item A successful call of this method resets {\ttfamily enable\+Local\+Audio}, {\ttfamily mute\+Remote\+Audio\+Stream}, and {\ttfamily mute\+All\+Remote\+Audio\+Streams}. Proceed it with caution.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae0ab52549f9323ffed182c22354bcd78}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae0ab52549f9323ffed182c22354bcd78}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!disableAudio@{disableAudio}}
\index{disableAudio@{disableAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{disableAudio()}{disableAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+disable\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Disables the audio module. 

The audio module is enabled by default, and you can call this method to disable the audio module. Call timing\+: This method can be called either before or after joining the channel. It is still valid after one leaves channel.

\begin{DoxyNote}{Note}
This method resets the internal engine and takes some time to take effect. Agora recommends using the following A\+PI methods to control the audio modules separately\+:
\begin{DoxyItemize}
\item {\ttfamily enable\+Local\+Audio}\+: Whether to enable the microphone to create the local audio stream.
\item {\ttfamily mute\+Local\+Audio\+Stream}\+: Whether to publish the local audio stream.
\item {\ttfamily mute\+Remote\+Audio\+Stream}\+: Whether to subscribe and play the remote audio stream.
\item {\ttfamily mute\+All\+Remote\+Audio\+Streams}\+: Whether to subscribe to and play all remote audio streams.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a334c846939534a92753ab5fc4e01577b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a334c846939534a92753ab5fc4e01577b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pauseAudio@{pauseAudio}}
\index{pauseAudio@{pauseAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAudio()}{pauseAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pause\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Disables the audio function in the channel. 

Note\+: This method controls the underlying states of the Engine. It is still valid after one leaves channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a743ab0769994206a08525e0789d51d14}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a743ab0769994206a08525e0789d51d14}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!resumeAudio@{resumeAudio}}
\index{resumeAudio@{resumeAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAudio()}{resumeAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+resume\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Enables the audio function in the channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioProfile@{setAudioProfile}}
\index{setAudioProfile@{setAudioProfile}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioProfile()}{setAudioProfile()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Profile (\begin{DoxyParamCaption}\item[{int}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the audio profile. 

If you need to set the audio scenario, you can either call {\ttfamily set\+Audio\+Scenario}, or {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}} and set the {\ttfamily m\+Audio\+Scenario} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_config}{Rtc\+Engine\+Config}}}. Applicable scenarios\+: This method is suitable for various audio scenarios. You can choose as needed. For example, in scenarios with high audio quality requirements such as music teaching, it is recommended to set {\ttfamily profile} to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4). Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em profile} & The audio profile, including the sampling rate, bitrate, encoding mode, and the number of channels.
\begin{DoxyItemize}
\item {\ttfamily D\+E\+F\+A\+U\+LT}(0)\+: The default value.
\begin{DoxyItemize}
\item For the interactive streaming profile\+: A sample rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item For the communication profile\+: A sample rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\end{DoxyItemize}
\item {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(1)\+: A sampling rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(2)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+EO}(3)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 80 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 96 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO}(5)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 128 Kbps.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac4d4cabacd4c45dcbb7439ba9d86136e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac4d4cabacd4c45dcbb7439ba9d86136e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioProfile@{setAudioProfile}}
\index{setAudioProfile@{setAudioProfile}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioProfile()}{setAudioProfile()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Profile (\begin{DoxyParamCaption}\item[{int}]{profile,  }\item[{int}]{scenario }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the audio profile and audio scenario. 

Applicable scenarios\+: This method is suitable for various audio scenarios. You can choose as needed. For example, in scenarios with high audio quality requirements such as music teaching, it is recommended to set {\ttfamily profile} to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4) and {\ttfamily scenario} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG}(3). Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em profile} & The audio profile, including the sampling rate, bitrate, encoding mode, and the number of channels.
\begin{DoxyItemize}
\item {\ttfamily D\+E\+F\+A\+U\+LT}(0)\+: The default value.
\begin{DoxyItemize}
\item For the interactive streaming profile\+: A sample rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item For the communication profile\+: A sample rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\end{DoxyItemize}
\item {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(1)\+: A sampling rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(2)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+EO}(3)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 80 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 96 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO}(5)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 128 Kbps. 
\end{DoxyItemize}\\
\hline
{\em scenario} & The audio scenarios. Under different audio scenarios, the device uses different volume types.
\begin{DoxyItemize}
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+D\+E\+F\+A\+U\+LT}(0)\+: (Default) Automatic scenario, where the S\+DK chooses the appropriate audio quality according to the user role and audio route.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG}(3)\+: High-\/quality audio scenario, where users mainly play music.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+A\+T\+R\+O\+OM}(5)\+: Chatroom scenario, where users need to frequently switch the user role or mute and unmute the microphone.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+O\+R\+US}(7)\+: Real-\/time chorus scenario, where users have good network conditions and require ultra-\/low latency. Attention\+: Before using this enumeration, you need to call {\ttfamily get\+Audio\+Device\+Info} to see whether the audio device supports ultra-\/low-\/latency capture and playback. To experience ultra-\/low latency, you need to ensure that your audio device supports ultra-\/low latency ( {\ttfamily is\+Low\+Latency\+Audio\+Supported} = {\ttfamily true}).
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+M\+E\+E\+T\+I\+NG}(8)\+: Meeting scenario that mainly involves the human voice.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+A\+I\+\_\+\+C\+L\+I\+E\+NT}(10)\+: AI conversation scenario, which is only applicable to scenarios where the user interacts with the conversational AI agent created by {\ttfamily Conversational AI Engine}.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a486279ba467cdbd04bb1fbe443dac9ef}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a486279ba467cdbd04bb1fbe443dac9ef}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioScenario@{setAudioScenario}}
\index{setAudioScenario@{setAudioScenario}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioScenario()}{setAudioScenario()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Scenario (\begin{DoxyParamCaption}\item[{int}]{scenario }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the audio scenario. 

Applicable scenarios\+: This method is suitable for various audio scenarios. You can choose as needed. For example, in scenarios such as music teaching that require high sound quality, it is recommended to set {\ttfamily scenario} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG}(3). Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em scenario} & The audio scenarios. Under different audio scenarios, the device uses different volume types.
\begin{DoxyItemize}
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+D\+E\+F\+A\+U\+LT}(0)\+: (Default) Automatic scenario, where the S\+DK chooses the appropriate audio quality according to the user role and audio route.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG}(3)\+: High-\/quality audio scenario, where users mainly play music.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+A\+T\+R\+O\+OM}(5)\+: Chatroom scenario, where users need to frequently switch the user role or mute and unmute the microphone.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+O\+R\+US}(7)\+: Real-\/time chorus scenario, where users have good network conditions and require ultra-\/low latency. Attention\+: Before using this enumeration, you need to call {\ttfamily get\+Audio\+Device\+Info} to see whether the audio device supports ultra-\/low-\/latency capture and playback. To experience ultra-\/low latency, you need to ensure that your audio device supports ultra-\/low latency ( {\ttfamily is\+Low\+Latency\+Audio\+Supported} = {\ttfamily true}).
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+M\+E\+E\+T\+I\+NG}(8)\+: Meeting scenario that mainly involves the human voice.
\item {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+A\+I\+\_\+\+C\+L\+I\+E\+NT}(10)\+: AI conversation scenario, which is only applicable to scenarios where the user interacts with the conversational AI agent created by {\ttfamily Conversational AI Engine}.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ad961b62060ca796f2f31a4ec12234b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ad961b62060ca796f2f31a4ec12234b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setHighQualityAudioParameters@{setHighQualityAudioParameters}}
\index{setHighQualityAudioParameters@{setHighQualityAudioParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setHighQualityAudioParameters()}{setHighQualityAudioParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+High\+Quality\+Audio\+Parameters (\begin{DoxyParamCaption}\item[{boolean}]{fullband,  }\item[{boolean}]{stereo,  }\item[{boolean}]{full\+Bitrate }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets high-\/quality audio preferences.

Call this method and set all the modes before joining a channel. Do N\+OT call this method again after joining a channel.

Note\+: Agora does not recommend using this method. If you want to set the audio profile, see \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac4d4cabacd4c45dcbb7439ba9d86136e}{set\+Audio\+Profile}}.


\begin{DoxyParams}{Parameters}
{\em fullband} & Full-\/band codec (48 k\+Hz sampling rate), not compatible with versions before v1.\+7.\+4. 
\begin{DoxyItemize}
\item True\+: Enable full-\/band codec. 
\item False\+: Disable full-\/band codec. 
\end{DoxyItemize}\\
\hline
{\em stereo} & Stereo codec, not compatible with versions before v1.\+7.\+4. 
\begin{DoxyItemize}
\item True\+: Enable stereo codec. 
\item False\+: Disable stereo codec. 
\end{DoxyItemize}\\
\hline
{\em full\+Bitrate} & High bitrate. Recommended in voice-\/only mode. 
\begin{DoxyItemize}
\item True\+: Enable high bitrate mode. 
\item False\+: Disable high bitrate mode. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abaaae5da30201592da737e3c82107e38}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abaaae5da30201592da737e3c82107e38}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustRecordingSignalVolume@{adjustRecordingSignalVolume}}
\index{adjustRecordingSignalVolume@{adjustRecordingSignalVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustRecordingSignalVolume()}{adjustRecordingSignalVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Recording\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the capturing signal volume. 

If you only need to mute the audio signal, Agora recommends that you use {\ttfamily mute\+Recording\+Signal} instead. Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of the user. The value range is \mbox{[}0,400\mbox{]}.
\begin{DoxyItemize}
\item 0\+: Mute.
\item 100\+: (Default) The original volume.
\item 400\+: Four times the original volume (amplifying the audio signals by four times).
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a222d08f40629b38390606a4ee26fc3fb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a222d08f40629b38390606a4ee26fc3fb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustPlaybackSignalVolume@{adjustPlaybackSignalVolume}}
\index{adjustPlaybackSignalVolume@{adjustPlaybackSignalVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustPlaybackSignalVolume()}{adjustPlaybackSignalVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Playback\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the playback signal volume of all remote users. 

This method is used to adjust the signal volume of all remote users mixed and played locally. If you need to adjust the signal volume of a specified remote user played locally, it is recommended that you call {\ttfamily adjust\+User\+Playback\+Signal\+Volume} instead. Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of the user. The value range is \mbox{[}0,400\mbox{]}.
\begin{DoxyItemize}
\item 0\+: Mute.
\item 100\+: (Default) The original volume.
\item 400\+: Four times the original volume (amplifying the audio signals by four times).
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb7da23e2f44e57e6fbae8c84f233624}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb7da23e2f44e57e6fbae8c84f233624}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableAudioVolumeIndication@{enableAudioVolumeIndication}}
\index{enableAudioVolumeIndication@{enableAudioVolumeIndication}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudioVolumeIndication()}{enableAudioVolumeIndication()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Audio\+Volume\+Indication (\begin{DoxyParamCaption}\item[{int}]{interval,  }\item[{int}]{smooth,  }\item[{boolean}]{report\+Vad }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the reporting of users\textquotesingle{} volume indication. 

This method enables the S\+DK to regularly report the volume information to the app of the local user who sends a stream and remote users (three users at most) whose instantaneous volumes are the highest. Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: The S\+DK triggers the {\ttfamily on\+Audio\+Volume\+Indication} callback according to the interval you set if this method is successfully called and there are users publishing streams in the channel.


\begin{DoxyParams}{Parameters}
{\em interval} & Sets the time interval between two consecutive volume indications\+:
\begin{DoxyItemize}
\item ≤ 0\+: Disables the volume indication.
\item $>$ 0\+: Time interval (ms) between two consecutive volume indications. Ensure this parameter is set to a value greater than 10, otherwise you will not receive the {\ttfamily on\+Audio\+Volume\+Indication} callback. Agora recommends that this value is set as greater than 100. 
\end{DoxyItemize}\\
\hline
{\em smooth} & The smoothing factor that sets the sensitivity of the audio volume indicator. The value ranges between 0 and 10. The recommended value is 3. The greater the value, the more sensitive the indicator. \\
\hline
{\em report\+Vad} & -\/ {\ttfamily true}\+: Enables the voice activity detection of the local user. Once it is enabled, the {\ttfamily vad} parameter of the {\ttfamily on\+Audio\+Volume\+Indication} callback reports the voice activity status of the local user.
\begin{DoxyItemize}
\item {\ttfamily false}\+: (Default) Disables the voice activity detection of the local user. Once it is disabled, the {\ttfamily vad} parameter of the {\ttfamily on\+Audio\+Volume\+Indication} callback does not report the voice activity status of the local user, except for the scenario where the engine automatically detects the voice activity of the local user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae48eb47f2af9c3e55d55d1fd0516131}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae48eb47f2af9c3e55d55d1fd0516131}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableLocalAudio@{enableLocalAudio}}
\index{enableLocalAudio@{enableLocalAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableLocalAudio()}{enableLocalAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Local\+Audio (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables the local audio capture. 

The audio function is enabled by default when users joining a channel. This method disables or re-\/enables the local audio function to stop or restart local audio capturing. The difference between this method and {\ttfamily mute\+Local\+Audio\+Stream} are as follows\+:
\begin{DoxyItemize}
\item {\ttfamily enable\+Local\+Audio}\+: Disables or re-\/enables the local audio capturing and processing. If you disable or re-\/enable local audio capturing using the {\ttfamily enable\+Local\+Audio} method, the local user might hear a pause in the remote audio playback.
\item {\ttfamily mute\+Local\+Audio\+Stream}\+: Sends or stops sending the local audio streams without affecting the audio capture status. Applicable scenarios\+: This method does not affect receiving the remote audio streams. {\ttfamily enable\+Local\+Audio} {\ttfamily (false)} is suitable for scenarios where the user wants to receive remote audio streams without sending locally captured audio. Call timing\+: You can call this method either before or after joining a channel. Calling it before joining a channel only sets the device state, and it takes effect immediately after you join the channel. Related callbacks\+: Once the local audio function is disabled or re-\/enabled, the S\+DK triggers the {\ttfamily on\+Local\+Audio\+State\+Changed} callback, which reports {\ttfamily L\+O\+C\+A\+L\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+O\+P\+P\+ED} (0) or {\ttfamily L\+O\+C\+A\+L\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+C\+O\+R\+D\+I\+NG} (1).
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em enabled} & -\/ {\ttfamily true}\+: (Default) Re-\/enable the local audio function, that is, to start the local audio capturing device (for example, the microphone).
\begin{DoxyItemize}
\item {\ttfamily false}\+: Disable the local audio function, that is, to stop local audio capturing.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2214ae694000345bbeaa9610411e52b7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2214ae694000345bbeaa9610411e52b7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteLocalAudioStream@{muteLocalAudioStream}}
\index{muteLocalAudioStream@{muteLocalAudioStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteLocalAudioStream()}{muteLocalAudioStream()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+Local\+Audio\+Stream (\begin{DoxyParamCaption}\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes publishing the local audio stream. 

This method is used to control whether to publish the locally captured audio stream. If you call this method to stop publishing locally captured audio streams, the audio capturing device will still work and won\textquotesingle{}t be affected. Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: After successfully calling this method, the local end triggers callback {\ttfamily on\+Audio\+Publish\+State\+Changed}; the remote end triggers {\ttfamily on\+User\+Mute\+Audio} and {\ttfamily on\+Remote\+Audio\+State\+Changed} callbacks.


\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop publishing the local audio stream\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stops publishing the local audio stream.
\item {\ttfamily false}\+: (Default) Resumes publishing the local audio stream.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0608e571f04aac18473c1cefc5bc35db}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0608e571f04aac18473c1cefc5bc35db}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteRemoteAudioStream@{muteRemoteAudioStream}}
\index{muteRemoteAudioStream@{muteRemoteAudioStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRemoteAudioStream()}{muteRemoteAudioStream()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+Remote\+Audio\+Stream (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes subscribing to the audio stream of a specified user. 

Call timing\+: Call this method after joining a channel. Related callbacks\+: After a successful method call, the S\+DK triggers the {\ttfamily on\+Audio\+Subscribe\+State\+Changed} callback.


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the specified user. \\
\hline
{\em muted} & Whether to subscribe to the specified remote user\textquotesingle{}s audio stream.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stop subscribing to the audio stream of the specified user.
\item {\ttfamily false}\+: (Default) Subscribe to the audio stream of the specified user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a22fedd8b7c6484918eb7cbdad78ffcee}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a22fedd8b7c6484918eb7cbdad78ffcee}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustUserPlaybackSignalVolume@{adjustUserPlaybackSignalVolume}}
\index{adjustUserPlaybackSignalVolume@{adjustUserPlaybackSignalVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustUserPlaybackSignalVolume()}{adjustUserPlaybackSignalVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+User\+Playback\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the playback signal volume of a specified remote user. 

You can call this method to adjust the playback volume of a specified remote user. To adjust the playback volume of different remote users, call the method as many times, once for each remote user. Call timing\+: Call this method after joining a channel.


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the remote user. \\
\hline
{\em volume} & The volume of the user. The value range is \mbox{[}0,400\mbox{]}.
\begin{DoxyItemize}
\item 0\+: Mute.
\item 100\+: (Default) The original volume.
\item 400\+: Four times the original volume (amplifying the audio signals by four times).
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a300aaecf6aba89a95005d3ad6e7957b9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a300aaecf6aba89a95005d3ad6e7957b9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteAllRemoteAudioStreams@{muteAllRemoteAudioStreams}}
\index{muteAllRemoteAudioStreams@{muteAllRemoteAudioStreams}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteAllRemoteAudioStreams()}{muteAllRemoteAudioStreams()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+All\+Remote\+Audio\+Streams (\begin{DoxyParamCaption}\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes subscribing to the audio streams of all remote users. 

After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. Call timing\+: Call this method after joining a channel.

\begin{DoxyNote}{Note}
If you call this method and then call {\ttfamily enable\+Audio} or {\ttfamily disable\+Audio}, the latest call will prevail. By default, the S\+DK subscribes to the audio streams of all remote users when joining a channel. To modify this behavior, you can set {\ttfamily auto\+Subscribe\+Audio} to {\ttfamily false} when calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel, which will cancel the subscription to the audio streams of all users upon joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop subscribing to the audio streams of all remote users\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stops subscribing to the audio streams of all remote users.
\item {\ttfamily false}\+: (Default) Subscribes to the audio streams of all remote users by default.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableVideo@{enableVideo}}
\index{enableVideo@{enableVideo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVideo()}{enableVideo()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Video (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the video module. 

The video module is disabled by default, call this method to enable it. If you need to disable the video module later, you need to call {\ttfamily disable\+Video}. Call timing\+: This method can be called either before joining a channel or while in the channel\+:
\begin{DoxyItemize}
\item If called before joining a channel, it enables the video module.
\item If called during an audio-\/only call, the audio call automatically switches to a video call. Related callbacks\+: A successful call of this method triggers the {\ttfamily on\+Remote\+Video\+State\+Changed} callback on the remote client.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method enables the internal engine and is valid after leaving the channel.
\item Calling this method will reset the entire engine, resulting in a slow response time. You can use the following methods to independently control a specific function of the video module based on your actual needs\+:
\begin{DoxyItemize}
\item {\ttfamily enable\+Local\+Video}\+: Whether to enable the camera to create the local video stream.
\item {\ttfamily mute\+Local\+Video\+Stream}\+: Whether to publish the local video stream.
\item {\ttfamily mute\+Remote\+Video\+Stream}\+: Whether to subscribe to and play the remote video stream.
\item {\ttfamily mute\+All\+Remote\+Video\+Streams}\+: Whether to subscribe to and play all remote video streams.
\end{DoxyItemize}
\item A successful call of this method resets {\ttfamily enable\+Local\+Video}, {\ttfamily mute\+Remote\+Video\+Stream}, and {\ttfamily mute\+All\+Remote\+Video\+Streams}. Proceed it with caution.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dbba3464a6c44818282ad920e4097bc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dbba3464a6c44818282ad920e4097bc}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!disableVideo@{disableVideo}}
\index{disableVideo@{disableVideo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{disableVideo()}{disableVideo()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+disable\+Video (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Disables the video module. 

This method is used to disable the video module. Call timing\+: This method can be called either before or after joining the channel.
\begin{DoxyItemize}
\item If it is called before joining the channel, the audio-\/only mode is enabled.
\item If it is called after joining the channel, it switches from video mode to audio-\/only mode. Then, calling {\ttfamily enable\+Video} can swithch to video mode again. Related callbacks\+: A successful call of this method triggers the {\ttfamily on\+User\+Enable\+Video} ({\ttfamily false}) callback on the remote client.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method affects the internal engine and can be called after leaving the channel.
\item Calling this method will reset the entire engine, resulting in a slow response time. You can use the following methods to independently control a specific function of the video module based on your actual needs\+:
\begin{DoxyItemize}
\item {\ttfamily enable\+Local\+Video}\+: Whether to enable the camera to create the local video stream.
\item {\ttfamily mute\+Local\+Video\+Stream}\+: Whether to publish the local video stream.
\item {\ttfamily mute\+Remote\+Video\+Stream}\+: Whether to subscribe to and play the remote video stream.
\item {\ttfamily mute\+All\+Remote\+Video\+Streams}\+: Whether to subscribe to and play all remote video streams.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33af5b77701edea3f565e05e2bd7e9d4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33af5b77701edea3f565e05e2bd7e9d4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoEncoderConfiguration@{setVideoEncoderConfiguration}}
\index{setVideoEncoderConfiguration@{setVideoEncoderConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoEncoderConfiguration()}{setVideoEncoderConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Encoder\+Configuration (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the video encoder configuration. 

Sets the encoder configuration for the local video. Each configuration profile corresponds to a set of video parameters, including the resolution, frame rate, and bitrate. Call timing\+: You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before {\ttfamily enable\+Video} to reduce the time to render the first video frame.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Both this method and the {\ttfamily get\+Mirror\+Applied} method support setting the mirroring effect. Agora recommends that you only choose one method to set it up. Using both methods at the same time causes the mirroring effect to overlap, and the mirroring settings fail.
\item The {\ttfamily config} specified in this method is the maximum value under ideal network conditions. If the video engine cannot render the video using the specified {\ttfamily config} due to unreliable network conditions, the parameters further down the list are considered until a successful configuration is found.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Video profile. See {\ttfamily Video\+Encoder\+Configuration}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab09a987202828e5b2db6765b8e1e0673}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab09a987202828e5b2db6765b8e1e0673}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!queryCodecCapability@{queryCodecCapability}}
\index{queryCodecCapability@{queryCodecCapability}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{queryCodecCapability()}{queryCodecCapability()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_codec_cap_info}{Codec\+Cap\+Info}} \mbox{[}$\,$\mbox{]} io.\+agora.\+rtc2.\+Rtc\+Engine.\+query\+Codec\+Capability (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Queries the video codec capabilities of the S\+DK. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item One {\ttfamily Codec\+Cap\+Info} array indicating the video encoding capability of the device, if the method call succeeds.
\item If the call timeouts, please modify the call logic and do not invoke the method in the main thread. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7a5c0d41afd03f4d91df64911ee9eff9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7a5c0d41afd03f4d91df64911ee9eff9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!queryDeviceScore@{queryDeviceScore}}
\index{queryDeviceScore@{queryDeviceScore}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{queryDeviceScore()}{queryDeviceScore()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+query\+Device\+Score (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Queries device score. 

Applicable scenarios\+: In high-\/definition or ultra-\/high-\/definition video scenarios, you can first call this method to query the device\textquotesingle{}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 {\ttfamily technical support}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item $>$ 0\+: The method call succeeeds, the value is the current device\textquotesingle{}s score, the range is \mbox{[}0,100\mbox{]}, the larger the value, the stronger the device capability. Most devices are rated between 60 and 100.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dc8d43505e6e85a3854f1a90c5c40b9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dc8d43505e6e85a3854f1a90c5c40b9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!queryCameraFocalLengthCapability@{queryCameraFocalLengthCapability}}
\index{queryCameraFocalLengthCapability@{queryCameraFocalLengthCapability}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{queryCameraFocalLengthCapability()}{queryCameraFocalLengthCapability()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_focal_length_info}{Agora\+Focal\+Length\+Info}} \mbox{[}$\,$\mbox{]} io.\+agora.\+rtc2.\+Rtc\+Engine.\+query\+Camera\+Focal\+Length\+Capability (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Queries the focal length capability supported by the camera. 

If you want to enable the wide-\/angle or ultra-\/wide-\/angle mode for camera capture, it is recommended to start by calling this method to check whether the device supports the required focal length capability. Then, adjust the camera\textquotesingle{}s focal length configuration based on the query result by calling {\ttfamily set\+Camera\+Capturer\+Configuration}, ensuring the best camera capture performance.

\begin{DoxyReturn}{Returns}
Returns an array of {\ttfamily Agora\+Focal\+Length\+Info} objects, which contain the camera\textquotesingle{}s orientation and focal length type. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83dae67b4ea08ec9ca4b64b8a7b0aa2c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83dae67b4ea08ec9ca4b64b8a7b0aa2c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraCapturerConfiguration@{setCameraCapturerConfiguration}}
\index{setCameraCapturerConfiguration@{setCameraCapturerConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraCapturerConfiguration()}{setCameraCapturerConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Capturer\+Configuration (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the camera capture configuration. 

Call timing\+: Call this method before enabling local camera capture, such as before calling {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)} and {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)}.

\begin{DoxyNote}{Note}
To adjust the camera focal length configuration, It is recommended to call {\ttfamily query\+Camera\+Focal\+Length\+Capability} first to check the device\textquotesingle{}s focal length capabilities, and then configure based on the query results. Due to limitations on some Android devices, even if you set the focal length type according to the results returned in {\ttfamily query\+Camera\+Focal\+Length\+Capability}, the settings may not take effect.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The camera capture configuration. See {\ttfamily Camera\+Capturer\+Configuration}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a75485acddd3d8593f8a7403c489c9d7f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a75485acddd3d8593f8a7403c489c9d7f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setupLocalVideo@{setupLocalVideo}}
\index{setupLocalVideo@{setupLocalVideo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setupLocalVideo()}{setupLocalVideo()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+setup\+Local\+Video (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_canvas}{Video\+Canvas}}}]{local }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Initializes the local video view. 

This method initializes the video view of a local stream on the local device. It only affects the video seen by the local user and does not impact the publishing of the local video. Call this method to bind the local video stream to a video view ( {\ttfamily view} ) and to set the rendering and mirror modes of the video view. The binding remains valid after leaving the channel. To stop rendering or unbind the local video from the view, set {\ttfamily view} as N\+U\+LL. Applicable scenarios\+: After initialization, call this method to set the local video and then join the channel. In real-\/time interactive scenarios, if you need to simultaneously view multiple preview frames in the local video preview, and each frame is at a different observation position along the video link, you can repeatedly call this method to set different {\ttfamily view} s and set different observation positions for each {\ttfamily view.} For example, by setting the video source to the camera and then configuring two {\ttfamily view} s with {\ttfamily position} setting to V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+P\+O\+S\+I\+T\+I\+O\+N\+\_\+\+P\+O\+S\+T\+\_\+\+C\+A\+P\+T\+U\+R\+E\+R\+\_\+\+O\+R\+I\+G\+IN and V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+P\+O\+S\+I\+T\+I\+O\+N\+\_\+\+P\+O\+S\+T\+\_\+\+C\+A\+P\+T\+U\+R\+ER, you can simultaneously preview the raw, unprocessed video frame and the video frame that has undergone preprocessing (image enhancement effects, virtual background, watermark) in the local video preview. Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyNote}{Note}
To update only the rendering or mirror mode of the local video view during a call, call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a12b166d473a769c559a7afbd98c1ce23}{set\+Local\+Render\+Mode(int render\+Mode, int mirror\+Mode)}}} instead.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em local} & The local video view and settings. See {\ttfamily Video\+Canvas}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab401e6b2b6159c7762b5168040424ce9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab401e6b2b6159c7762b5168040424ce9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setupRemoteVideo@{setupRemoteVideo}}
\index{setupRemoteVideo@{setupRemoteVideo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setupRemoteVideo()}{setupRemoteVideo()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+setup\+Remote\+Video (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_canvas}{Video\+Canvas}}}]{remote }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Initializes the video view of a remote user. 

This method initializes the video view of a remote stream on the local device. It affects only the video view that the local user sees. Call this method to bind the remote video stream to a video view and to set the rendering and mirror modes of the video view. You need to specify the ID of the remote user in this method. If the remote user ID is unknown to the application, set it after the app receives the {\ttfamily on\+User\+Joined} callback. To unbind the remote user from the view, set the {\ttfamily view} parameter to N\+U\+LL. Once the remote user leaves the channel, the S\+DK unbinds the remote user. In the scenarios of custom layout for mixed videos on the mobile end, you can call this method and set a separate {\ttfamily view} for rendering each sub-\/video stream of the mixed video stream.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item To update the rendering or mirror mode of the remote video view during a call, use the {\ttfamily set\+Remote\+Render\+Mode} method.
\item When using the recording service, the app does not need to bind a view, as it does not send a video stream. If your app does not recognize the recording service, bind the remote user to the view when the S\+DK triggers the {\ttfamily on\+First\+Remote\+Video\+Decoded} callback.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em remote} & The remote video view and settings. See {\ttfamily Video\+Canvas}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a728841e67ec45f0c88ab38a2e44fa8cf}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a728841e67ec45f0c88ab38a2e44fa8cf}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteRenderMode@{setRemoteRenderMode}}
\index{setRemoteRenderMode@{setRemoteRenderMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteRenderMode()}{setRemoteRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Render\+Mode (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{render\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Updates the display mode of the video view of a remote user.

After initializing the video view of a remote user, you can call this method to update its rendering and mirror modes. This method affects only the video view that the local user sees.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you have called \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab401e6b2b6159c7762b5168040424ce9}{setup\+Remote\+Video}} to initialize the remote video view before calling this method.
\item During a call, you can call this method as many times as necessary to update the display mode of the video view of a remote user.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & ID of the remote user. \\
\hline
{\em render\+Mode} & Sets the remote display mode\+:
\begin{DoxyItemize}
\item {\ttfamily R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+H\+I\+D\+D\+EN}(1)\+: Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
\item {\ttfamily R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+F\+IT}(2)\+: Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio will be filled with black.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4f24649ccc0fe339b5601e396ae258}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4f24649ccc0fe339b5601e396ae258}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalRenderMode@{setLocalRenderMode}}
\index{setLocalRenderMode@{setLocalRenderMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderMode()}{setLocalRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Render\+Mode (\begin{DoxyParamCaption}\item[{int}]{render\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the local video display mode. 

Call this method to set the local video display mode. This method can be called multiple times during a call to change the display mode.


\begin{DoxyParams}{Parameters}
{\em render\+Mode} & The local video display mode.
\begin{DoxyItemize}
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+H\+I\+D\+D\+EN (1)\+: Hidden mode. Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+F\+IT (2)\+: Fit mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+D\+A\+P\+T\+I\+VE (3)\+: Adaptive mode. Deprecated\+: This enumerator is deprecated and not recommended for use.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6ef85a2fe40643c6e32024572d49b1e5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6ef85a2fe40643c6e32024572d49b1e5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteRenderMode@{setRemoteRenderMode}}
\index{setRemoteRenderMode@{setRemoteRenderMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteRenderMode()}{setRemoteRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Render\+Mode (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{render\+Mode,  }\item[{int}]{mirror\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the display mode of the video view of a remote user. 

After initializing the video view of a remote user, you can call this method to update its rendering and mirror modes. This method affects only the video view that the local user sees.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after initializing the remote view by calling the {\ttfamily setup\+Remote\+Video} method.
\item During a call, you can call this method as many times as necessary to update the display mode of the video view of a remote user.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the remote user. \\
\hline
{\em render\+Mode} & The rendering mode of the remote user view.
\begin{DoxyItemize}
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+H\+I\+D\+D\+EN (1)\+: Hidden mode. Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+F\+IT (2)\+: Fit mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+D\+A\+P\+T\+I\+VE (3)\+: Adaptive mode. Deprecated\+: This enumerator is deprecated and not recommended for use. 
\end{DoxyItemize}\\
\hline
{\em mirror\+Mode} & The mirror mode of the remote user view.
\begin{DoxyItemize}
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+U\+TO (0)\+: The S\+DK determines whether to enable the mirror mode. The S\+DK disables mirror mode by default.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+ED (1)\+: Enables the mirror mode for remote user\textquotesingle{}s view.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+ED (2)\+: Disables the mirror mode for remote user\textquotesingle{}s view.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a12b166d473a769c559a7afbd98c1ce23}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a12b166d473a769c559a7afbd98c1ce23}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalRenderMode@{setLocalRenderMode}}
\index{setLocalRenderMode@{setLocalRenderMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderMode()}{setLocalRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Render\+Mode (\begin{DoxyParamCaption}\item[{int}]{render\+Mode,  }\item[{int}]{mirror\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the display mode of the local video view. 

After initializing the local video view, you can call this method to update its rendering and mirror modes. It affects only the video view that the local user sees and does not impact the publishing of the local video. Call timing\+: -\/ Ensure that you have called the {\ttfamily setup\+Local\+Video} method to initialize the local video view before calling this method.
\begin{DoxyItemize}
\item During a call, you can call this method as many times as necessary to update the display mode of the local video view.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em render\+Mode} & The local video display mode.
\begin{DoxyItemize}
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+H\+I\+D\+D\+EN (1)\+: Hidden mode. Uniformly scale the video until it fills the visible boundaries (cropped). One dimension of the video may have clipped contents.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+F\+IT (2)\+: Fit mode. Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio are filled with black.
\item R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+D\+A\+P\+T\+I\+VE (3)\+: Adaptive mode. Deprecated\+: This enumerator is deprecated and not recommended for use. 
\end{DoxyItemize}\\
\hline
{\em mirror\+Mode} & For the local user\+:
\begin{DoxyItemize}
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+U\+TO (0)\+: The S\+DK determines whether to enable the mirror mode. If you use a front camera, the S\+DK enables the mirror mode by default; if you use a rear camera, the S\+DK disables the mirror mode by default.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+ED (1)\+: Enable the mirroring mode of the local view.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+ED (2)\+: Disable the mirroring mode of the local view. Attention\+: If you use a front camera, the S\+DK enables the mirror mode by default; if you use a rear camera, the S\+DK disables the mirror mode by default.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startPreview@{startPreview}}
\index{startPreview@{startPreview}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startPreview()}{startPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Preview (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the local video preview. 

You can call this method to enable local video preview. Call timing\+: This method must be called after {\ttfamily enable\+Video} and {\ttfamily setup\+Local\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The local preview enables the mirror mode by default.
\item After leaving the channel, local preview remains enabled. You need to call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}{stop\+Preview()}}} to disable local preview.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73e309d45cc7d9b8e657833137ca2bd5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73e309d45cc7d9b8e657833137ca2bd5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startPreview@{startPreview}}
\index{startPreview@{startPreview}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startPreview()}{startPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Preview (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the local video preview and specifies the video source for the preview. 

This method is used to start local video preview and specify the video source that appears in the preview screen. Call timing\+: This method must be called after {\ttfamily enable\+Video} and {\ttfamily setup\+Local\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The local preview enables the mirror mode by default.
\item After leaving the channel, local preview remains enabled. You need to call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}{stop\+Preview()}}} to disable local preview.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the video source. See {\ttfamily Video\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopPreview@{stopPreview}}
\index{stopPreview@{stopPreview}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopPreview()}{stopPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Preview (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the local video preview. 

Applicable scenarios\+: After calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}{start\+Preview()}}} to start the preview, if you want to stop the local video preview, call this method. Call timing\+: Call this method before joining a channel or after leaving a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9899967cfeed29860bee3b24b5c01eb2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9899967cfeed29860bee3b24b5c01eb2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopPreview@{stopPreview}}
\index{stopPreview@{stopPreview}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopPreview()}{stopPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Preview (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the local video preview. 

Applicable scenarios\+: After calling {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)} to start the preview, if you want to stop the local video preview, call this method. Call timing\+: Call this method before joining a channel or after leaving a channel.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the video source. See {\ttfamily Video\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a80351723711a6f3a66abcc287154eb10}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a80351723711a6f3a66abcc287154eb10}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableLocalVideo@{enableLocalVideo}}
\index{enableLocalVideo@{enableLocalVideo}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableLocalVideo()}{enableLocalVideo()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Local\+Video (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables/\+Disables the local video capture. 

This method disables or re-\/enables the local video capture, and does not affect receiving the remote video stream. After calling {\ttfamily enable\+Video}, the local video capture is enabled by default. If you call {\ttfamily enable\+Local\+Video} ({\ttfamily false}) to disable local video capture within the channel, it also simultaneously stops publishing the video stream within the channel. If you want to restart video catpure, you can call {\ttfamily enable\+Local\+Video} ({\ttfamily true}) and then call {\ttfamily update\+Channel\+Media\+Options} to set the {\ttfamily options} parameter to publish the locally captured video stream in the channel. After the local video capturer is successfully disabled or re-\/enabled, the S\+DK triggers the {\ttfamily on\+Remote\+Video\+State\+Changed} callback on the remote client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel. However, if you call it before joining, the settings will only take effect once you have joined the channel.
\item This method enables the internal engine and is valid after leaving the channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the local video capture.
\begin{DoxyItemize}
\item {\ttfamily true}\+: (Default) Enable the local video capture.
\item {\ttfamily false}\+: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to {\ttfamily false}, this method does not require a local camera.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affbf7d3b7eb77a658e30e90bd90a0275}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_affbf7d3b7eb77a658e30e90bd90a0275}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startCameraCapture@{startCameraCapture}}
\index{startCameraCapture@{startCameraCapture}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startCameraCapture()}{startCameraCapture()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Camera\+Capture (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Source\+Type}]{source\+Type,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts camera capture. 

You can call this method to start capturing video from one or more cameras by specifying {\ttfamily source\+Type}.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the video source. See {\ttfamily Video\+Source\+Type}. Note\+:
\begin{DoxyItemize}
\item On Android devices, you can capture video from up to 4 cameras, provided the device has multiple cameras or supports external cameras. 
\end{DoxyItemize}\\
\hline
{\em config} & The configuration of the video capture. See {\ttfamily Camera\+Capturer\+Configuration}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab13536b8e10175f429d822140de8611c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab13536b8e10175f429d822140de8611c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopCameraCapture@{stopCameraCapture}}
\index{stopCameraCapture@{stopCameraCapture}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopCameraCapture()}{stopCameraCapture()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Camera\+Capture (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops camera capture. 

After calling {\ttfamily start\+Camera\+Capture} to start capturing video through one or more cameras, you can call this method and set the {\ttfamily source\+Type} parameter to stop the capture from the specified cameras.

\begin{DoxyNote}{Note}
If you are using the local video mixing function, calling this method can cause the local video mixing to be interrupted.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the video source. See {\ttfamily Video\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8df002847430147c47905b42fbdccba4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8df002847430147c47905b42fbdccba4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startLocalVideoTranscoder@{startLocalVideoTranscoder}}
\index{startLocalVideoTranscoder@{startLocalVideoTranscoder}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startLocalVideoTranscoder()}{startLocalVideoTranscoder()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Local\+Video\+Transcoder (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts the local video mixing. 

After calling this method, you can merge multiple video streams into one video stream locally. For example, you can merge the video streams captured by the camera, screen sharing, media player, remote video, video files, images, etc. into one video stream, and then publish the mixed video stream to the channel. Applicable scenarios\+: You can enable the local video mixing function in scenarios such as remote conferences, live streaming, and online education, which allows users to view and manage multiple videos more conveniently, and supports portrait-\/in-\/picture effect and other functions. The following is a typical use case for implementing the portrait-\/in-\/picture effect\+:1. Call {\ttfamily enable\+Virtual\+Background(boolean enabled, Virtual\+Background\+Source background\+Source, Segmentation\+Property segproperty)}, and set the custom background image to {\ttfamily B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+N\+O\+NE}, that is, separate the portrait and the background in the video captured by the camera.
\begin{DoxyEnumerate}
\item Call {\ttfamily start\+Screen\+Capture} to start capturing the screen sharing video stream.
\item Call this method and set the video source for capturing portraits as one of the video sources participating in the local video mixing, picture-\/in-\/picture of the portrait can be achived in the mixed video. Call timing\+: -\/ If you need to mix the locally collected video streams, you need to call this method after {\ttfamily start\+Camera\+Capture} or {\ttfamily start\+Screen\+Capture}.
\end{DoxyEnumerate}
\begin{DoxyItemize}
\item If you want to publish the mixed video stream to the channel, you need to set {\ttfamily publish\+Transcoded\+Video\+Track} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} to {\ttfamily true} when calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} or {\ttfamily update\+Channel\+Media\+Options}. Related callbacks\+: When you fail to call this method, the S\+DK triggers the {\ttfamily on\+Local\+Video\+Transcoder\+Error} callback to report the reason.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Local video mixing requires more C\+PU resources. Therefore, Agora recommends enabling this function on devices with higher performance.
\item If you need to mix locally captured video streams, the S\+DK supports the following capture combinations\+:
\begin{DoxyItemize}
\item On the Android platform, it supports up to 2 video streams captured by cameras (the device itself needs to support dual cameras or support external cameras) + 1 screen sharing stream.
\end{DoxyItemize}
\item When configuring the local video mixing, it is necessary to ensure that the layer number of the video stream capturing the portrait is greater than the layer number of the screen sharing stream. Otherwise, the portrait will be covered by the screen sharing and will not be displayed in the final mixed video stream.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Configuration of the local video mixing, see {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}}}.Attention\+:
\begin{DoxyItemize}
\item The maximum resolution of each video stream participating in the local video mixing is 4096 ×
\end{DoxyItemize}
\begin{DoxyEnumerate}
\item If this limit is exceeded, video mixing does not take effect.
\end{DoxyEnumerate}
\begin{DoxyItemize}
\item The maximum resolution of the mixed video stream is 4096 × 2160.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5f2495ad78475daa85329aea53774023}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5f2495ad78475daa85329aea53774023}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopLocalVideoTranscoder@{stopLocalVideoTranscoder}}
\index{stopLocalVideoTranscoder@{stopLocalVideoTranscoder}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopLocalVideoTranscoder()}{stopLocalVideoTranscoder()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Local\+Video\+Transcoder (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the local video mixing. 

After calling {\ttfamily start\+Local\+Video\+Transcoder}, call this method if you want to stop the local video mixing.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0dc5a07a0c76360a1e23ce92685feb55}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0dc5a07a0c76360a1e23ce92685feb55}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateLocalTranscoderConfiguration@{updateLocalTranscoderConfiguration}}
\index{updateLocalTranscoderConfiguration@{updateLocalTranscoderConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateLocalTranscoderConfiguration()}{updateLocalTranscoderConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Local\+Transcoder\+Configuration (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the local video mixing configuration. 

After calling {\ttfamily start\+Local\+Video\+Transcoder}, call this method if you want to update the local video mixing configuration.

\begin{DoxyNote}{Note}
If you want to update the video source type used for local video mixing, such as adding a second camera or screen to capture video, you need to call this method after {\ttfamily start\+Camera\+Capture} or {\ttfamily start\+Screen\+Capture}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Configuration of the local video mixing, see {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a26b75895c5a64c0976cf506509653012}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a26b75895c5a64c0976cf506509653012}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startLocalAudioMixer@{startLocalAudioMixer}}
\index{startLocalAudioMixer@{startLocalAudioMixer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startLocalAudioMixer()}{startLocalAudioMixer()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Local\+Audio\+Mixer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts local audio mixing. 

This method supports merging multiple audio streams into one audio stream locally. For example, merging the audio streams captured from the local microphone, and that from the media player, the sound card, and the remote users into one audio stream, and then publish the merged audio stream to the channel.
\begin{DoxyItemize}
\item If you want to mix the locally captured audio streams, you can set publish\+Mixed\+Audio\+Track in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} to {\ttfamily true}, and then publish the mixed audio stream to the channel.
\item If you want to mix the remote audio stream, ensure that the remote audio stream has been published in the channel and you have subcribed to the audio stream that you need to mix. Applicable scenarios\+: You can enable this function in the following scenarios\+:
\item By utilizing the local video mixing feature, the associated audio streams of the mixed video streams can be simultaneously captured and published.
\item 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.
\item In online classes, teachers can mix the audio from interactions with students locally and then forward the mixed audio stream to other channels. Call timing\+: You can call this method either before or after joining a channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
To ensure audio quality, it is recommended that the number of audio streams to be mixed does not exceed 10.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The configurations for mixing the lcoal audio. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a671696bf251a79f71f5e6d997070a7b0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a671696bf251a79f71f5e6d997070a7b0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateLocalAudioMixerConfiguration@{updateLocalAudioMixerConfiguration}}
\index{updateLocalAudioMixerConfiguration@{updateLocalAudioMixerConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateLocalAudioMixerConfiguration()}{updateLocalAudioMixerConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Local\+Audio\+Mixer\+Configuration (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the configurations for mixing audio streams locally. 

After calling {\ttfamily start\+Local\+Audio\+Mixer}, call this method if you want to update the local audio mixing configuration. Call timing\+: Call this method after {\ttfamily start\+Local\+Audio\+Mixer}.

\begin{DoxyNote}{Note}
To ensure audio quality, it is recommended that the number of audio streams to be mixed does not exceed 10.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The configurations for mixing the lcoal audio. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae6bb70ab022e56eee9141d19acc416e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae6bb70ab022e56eee9141d19acc416e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopLocalAudioMixer@{stopLocalAudioMixer}}
\index{stopLocalAudioMixer@{stopLocalAudioMixer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopLocalAudioMixer()}{stopLocalAudioMixer()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Local\+Audio\+Mixer (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the local audio mixing. 

After calling {\ttfamily start\+Local\+Audio\+Mixer}, call this method if you want to stop the local audio mixing. Call timing\+: Call this method after {\ttfamily start\+Local\+Audio\+Mixer}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20fd1bfb77864b47bc264fc370b0fae3}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20fd1bfb77864b47bc264fc370b0fae3}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteLocalVideoStream@{muteLocalVideoStream}}
\index{muteLocalVideoStream@{muteLocalVideoStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteLocalVideoStream()}{muteLocalVideoStream()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+Local\+Video\+Stream (\begin{DoxyParamCaption}\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes publishing the local video stream. 

This method is used to control whether to publish the locally captured video stream. If you call this method to stop publishing locally captured video streams, the video capturing device will still work and won\textquotesingle{}t be affected. Compared to {\ttfamily enable\+Local\+Video} ({\ttfamily false}), which can also cancel the publishing of local video stream by turning off the local video stream capture, this method responds faster. Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: After successfully calling this method, the local end triggers callback {\ttfamily on\+Video\+Publish\+State\+Changed}; the remote end triggers {\ttfamily on\+User\+Mute\+Video} and {\ttfamily on\+Remote\+Video\+State\+Changed} callbacks.


\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop publishing the local video stream.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stop publishing the local video stream.
\item {\ttfamily false}\+: (Default) Publish the local video stream.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac8c1db59fa60aa6c04c40d492a218129}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac8c1db59fa60aa6c04c40d492a218129}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteRemoteVideoStream@{muteRemoteVideoStream}}
\index{muteRemoteVideoStream@{muteRemoteVideoStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRemoteVideoStream()}{muteRemoteVideoStream()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+Remote\+Video\+Stream (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes subscribing to the video stream of a specified user. 

Call timing\+: Call this method after joining a channel. Related callbacks\+: After a successful method call, the S\+DK triggers the {\ttfamily on\+Video\+Subscribe\+State\+Changed} callback.


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the specified user. \\
\hline
{\em muted} & Whether to subscribe to the specified remote user\textquotesingle{}s video stream.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stop subscribing to the video streams of the specified user.
\item {\ttfamily false}\+: (Default) Subscribe to the video stream of the specified user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae74ecd1bf61812930605994bd1bb77c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae74ecd1bf61812930605994bd1bb77c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteAllRemoteVideoStreams@{muteAllRemoteVideoStreams}}
\index{muteAllRemoteVideoStreams@{muteAllRemoteVideoStreams}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteAllRemoteVideoStreams()}{muteAllRemoteVideoStreams()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+All\+Remote\+Video\+Streams (\begin{DoxyParamCaption}\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops or resumes subscribing to the video streams of all remote users. 

After successfully calling this method, the local user stops or resumes subscribing to the video streams of all remote users, including all subsequent users. Call timing\+: Call this method after joining a channel.

\begin{DoxyNote}{Note}
If you call this method and then call {\ttfamily enable\+Video} or {\ttfamily disable\+Video}, the latest call will prevail. By default, the S\+DK subscribes to the video streams of all remote users when joining a channel. To modify this behavior, you can set {\ttfamily auto\+Subscribe\+Video} to{\ttfamily false} when calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel, which will cancel the subscription to the video streams of all users upon joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop subscribing to the video streams of all remote users.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Stop subscribing to the video streams of all remote users.
\item {\ttfamily false}\+: (Default) Subscribe to the video streams of all remote users by default.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setBeautyEffectOptions@{setBeautyEffectOptions}}
\index{setBeautyEffectOptions@{setBeautyEffectOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setBeautyEffectOptions()}{setBeautyEffectOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Beauty\+Effect\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the image enhancement options. 

\begin{DoxySince}{Since}
v2.\+4.\+0.
\end{DoxySince}
Enables or disables image enhancement, and sets the options. Call timing\+: Call this method after calling {\ttfamily enable\+Video} or {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 5.\+0 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the image enhancement function\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the image enhancement function.
\item {\ttfamily false}\+: (Default) Disable the image enhancement function. 
\end{DoxyItemize}\\
\hline
{\em options} & The image enhancement options. See {\ttfamily Beauty\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 5.\+0 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaac428e315f77ed8dd3cf671effd17f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaac428e315f77ed8dd3cf671effd17f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setBeautyEffectOptions@{setBeautyEffectOptions}}
\index{setBeautyEffectOptions@{setBeautyEffectOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setBeautyEffectOptions()}{setBeautyEffectOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Beauty\+Effect\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the image enhancement options and specifies the media source. 

\begin{DoxySince}{Since}
v2.\+4.\+0.
\end{DoxySince}
Enables or disables image enhancement, and sets the options. Both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}{set\+Beauty\+Effect\+Options(boolean enabled, Beauty\+Options options)}}} set image enhancement options, but this method allows you to specify the media source to which the image enhancement is applied. Call timing\+: Call this method after calling {\ttfamily enable\+Video} or {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)}.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the image enhancement function\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the image enhancement function.
\item {\ttfamily false}\+: (Default) Disable the image enhancement function. 
\end{DoxyItemize}\\
\hline
{\em options} & The image enhancement options. See {\ttfamily Beauty\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item The default value is {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE}.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 5.\+0 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}}
\index{setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeBeautyOptions()}{setFaceShapeBeautyOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the face shape beauty options. 

@technical preview

Calling this method allows for adjusting specific parts of the face, achieving effects such as slimming the face, enlarging the eyes, and slimming the nose through minor cosmetic procedures. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 4.\+4 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the face shape effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the face shape effect.
\item {\ttfamily false}\+: (Default) Disable the face shape effect. 
\end{DoxyItemize}\\
\hline
{\em options} & Face shaping style options, see {\ttfamily Face\+Shape\+Beauty\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 4.\+4 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e23beb2cfe8a2dffb46801e21f34150}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e23beb2cfe8a2dffb46801e21f34150}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}}
\index{setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeBeautyOptions()}{setFaceShapeBeautyOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the face shape options and specifies the media source. 

@technical preview

Calling this method allows for modifying various parts of the face, achieving slimming, enlarging eyes, slimming nose, and other minor cosmetic effects all at once using preset parameters, supporting fine-\/tuning the overall modification intensity. Both this methods and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}{set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options)}}} can be used to set beauty effects options, the difference is that this method supports specifying the media source to apply the beauty effects. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 4.\+4 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the face shape effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the face shape effect.
\item {\ttfamily false}\+: (Default) Disable the face shape effect. 
\end{DoxyItemize}\\
\hline
{\em options} & Face shaping style options, see {\ttfamily Face\+Shape\+Beauty\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item Use the default value {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE} if you use camera to capture local video.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 4.\+4 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a037185699632c8adba8f4d33554cc09d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a037185699632c8adba8f4d33554cc09d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}}
\index{getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeBeautyOptions()}{getFaceShapeBeautyOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the beauty effect options. 

@technical preview

Calling this method can retrieve the current settings of the beauty effect. Applicable scenarios\+: When the user opens the beauty style and style intensity menu in the app, you can call this method to get the current beauty effect options, then refresh the menu in the user interface according to the results, and update the UI. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item A pointer to the {\ttfamily Face\+Shape\+Beauty\+Options} instance, if the method call succeeds.
\item N\+U\+LL is returned, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af164fff877bf1789054d57ab3e6b6597}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af164fff877bf1789054d57ab3e6b6597}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}}
\index{getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeBeautyOptions()}{getFaceShapeBeautyOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the beauty effect options. 

@technical preview

Calling this method can retrieve the current settings of the beauty effect. Applicable scenarios\+: When the user opens the beauty style and style intensity menu in the app, you can call this method to get the current beauty effect options, then refresh the menu in the user interface according to the results, and update the UI. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item Use the default value {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE} if you use camera to capture local video.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item A pointer to the {\ttfamily Face\+Shape\+Beauty\+Options} instance, if the method call succeeds.
\item N\+U\+LL is returned, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a44b12c841a6cb96f75a73a433684c091}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a44b12c841a6cb96f75a73a433684c091}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFaceShapeAreaOptions@{setFaceShapeAreaOptions}}
\index{setFaceShapeAreaOptions@{setFaceShapeAreaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeAreaOptions()}{setFaceShapeAreaOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the options for beauty enhancement facial areas. 

@technical preview

If the preset beauty effects implemented in the {\ttfamily set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)} method do not meet expectations, you can use this method to set beauty area options, individually fine-\/tune each part of the face, and achieve a more refined beauty effect. Call timing\+: Call this method after calling {\ttfamily set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)} or {\ttfamily set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 4.\+4 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & Facial enhancement areas, see {\ttfamily Face\+Shape\+Area\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 4.\+4 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a37eb5991a88212efdcfb5adc9b5b1ec9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a37eb5991a88212efdcfb5adc9b5b1ec9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFaceShapeAreaOptions@{setFaceShapeAreaOptions}}
\index{setFaceShapeAreaOptions@{setFaceShapeAreaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeAreaOptions()}{setFaceShapeAreaOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the image enhancement options for facial areas and specifies the media source. 

@technical preview

If the preset beauty effects implemented in the {\ttfamily set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)} method do not meet expectations, you can use this method to set beauty area options, individually fine-\/tune each part of the face, and achieve a more refined beauty effect. Both this methods and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a44b12c841a6cb96f75a73a433684c091}{set\+Face\+Shape\+Area\+Options(\+Face\+Shape\+Area\+Options options)}}} can be used to set beauty effects options, the difference is that this method supports specifying the media source to apply the beauty effects. Call timing\+: Call this method after calling {\ttfamily set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)} or {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}{set\+Face\+Shape\+Beauty\+Options(boolean enabled, Face\+Shape\+Beauty\+Options options)}}}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 4.\+4 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & Facial enhancement areas, see {\ttfamily Face\+Shape\+Area\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item Use the default value {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE} if you use camera to capture local video.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The current device does not support this feature. Possible reasons include\+:
\begin{DoxyItemize}
\item The current device capabilities do not meet the requirements for image enhancement. Agora recommends you replace it with a high-\/performance device.
\item The current device version is lower than Android 4.\+4 and does not support this feature. Agora recommends you replace the device or upgrade the operating system. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf5284e278a6d41c6e6b5f7b35153f53}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf5284e278a6d41c6e6b5f7b35153f53}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getFaceShapeAreaOptions@{getFaceShapeAreaOptions}}
\index{getFaceShapeAreaOptions@{getFaceShapeAreaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeAreaOptions()}{getFaceShapeAreaOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{int}]{shape\+Area }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the facial beauty area options. 

@technical preview

Calling this method can retrieve the current settings of the beauty effect. Applicable scenarios\+: When the user opens the facial beauty area and shaping intensity menu in the app, you can call this method to get the current beauty effect options, then refresh the menu in the user interface according to the results, and update the UI. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.


\begin{DoxyParams}{Parameters}
{\em shape\+Area} & Facial enhancement areas.
\begin{DoxyItemize}
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+NE (-\/1)\+: (Default) Invalid area, no beauty effect applied.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+H\+E\+A\+D\+S\+C\+A\+LE (100)\+: Head, used to achieve a smaller head effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the smaller the head becomes, with a preset value of 100.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+O\+R\+E\+H\+E\+AD (101)\+: Forehead, used to adjust the hairline height. The adjustment strength ranges from \mbox{[}-\/100,100\mbox{]}, with positive values raising and negative values lowering the hairline. The greater the absolute value, the stronger the effect. The default value is 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+C\+O\+N\+T\+O\+UR (102)\+: Face contour, used to achieve a slimmer face effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the stronger the slimming effect, with a preset value of 10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+L\+E\+N\+G\+TH (103)\+: Face length, used to achieve a longer face effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the face, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of 0.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+W\+I\+D\+TH (104)\+: Face width, used to achieve a narrower face effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the stronger the narrowing effect, with a preset value of 10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+E\+E\+K\+B\+O\+NE (105)\+: Cheekbone, used to adjust cheekbone width. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the narrower the cheekbones, with a preset set value of 43.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+E\+EK (106)\+: Cheeks, used to adjust the cheeks width. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the narrower the cheeks, with a preset value of 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+IN (108)\+: Chin, used to adjust the chin length. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the chin, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of -\/20.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+S\+C\+A\+LE (200)\+:Eyes, used to achieve a larger eye effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the larger the eye size, with a preset value of 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+D\+I\+S\+T\+A\+N\+CE (201)\+: Eye distance adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+P\+O\+S\+I\+T\+I\+ON (202)\+: Eye position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+L\+O\+W\+E\+R\+E\+Y\+E\+L\+ID (203)\+: Lower eyelid adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+P\+U\+P\+I\+LS (204)\+: Pupil size adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+I\+N\+N\+E\+R\+C\+O\+R\+N\+ER (205)\+: Inner eye corner adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+O\+U\+T\+E\+R\+C\+O\+R\+N\+ER (206)\+: Outer eye corner adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+L\+E\+N\+G\+TH (300)\+: Nose length, used to achieve a longer nose effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the nose, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of -\/10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+W\+I\+D\+TH (301)\+: Nose width, used to achieve a slimmer nose effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values make the nose wider, while negative values make it narrower. The larger the value, the stronger the enhancement effect, with a preset value of 72.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+W\+I\+NG (302)\+: Nose wing adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+R\+O\+OT (303)\+: Nose root adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+B\+R\+I\+D\+GE (304)\+: Nose bridge adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+T\+IP (305)\+: Nose tip adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+G\+E\+N\+E\+R\+AL (306)\+: Overall nose adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+S\+C\+A\+LE (400)\+: Mouth, used to achieve a larger mouth effect. The adjustment strength ranges from \mbox{[}0,100\mbox{]}, with larger values resulting in a larger mouth. The default value is 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+P\+O\+S\+I\+T\+I\+ON (401)\+: Mouth position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+S\+M\+I\+LE (402)\+: Mouth smile adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+L\+IP (403)\+: Lip shape adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+B\+R\+O\+W\+P\+O\+S\+I\+T\+I\+ON (500)\+: Eyebrow position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+B\+R\+O\+W\+T\+H\+I\+C\+K\+N\+E\+SS (501)\+: Eyebrow thickness adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item A pointer to the {\ttfamily Face\+Shape\+Area\+Options} instance, if the method call succeeds.
\item N\+U\+LL is returned, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac56a0950540ce606c10a508d316911b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac56a0950540ce606c10a508d316911b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getFaceShapeAreaOptions@{getFaceShapeAreaOptions}}
\index{getFaceShapeAreaOptions@{getFaceShapeAreaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeAreaOptions()}{getFaceShapeAreaOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{int}]{shape\+Area,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the facial beauty area options. 

@technical preview

Calling this method can retrieve the current settings of the beauty effect. Applicable scenarios\+: When the user opens the facial beauty area and shaping intensity menu in the app, you can call this method to get the current beauty effect options, then refresh the menu in the user interface according to the results, and update the UI. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.


\begin{DoxyParams}{Parameters}
{\em shape\+Area} & Facial enhancement areas.
\begin{DoxyItemize}
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+NE (-\/1)\+: (Default) Invalid area, no beauty effect applied.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+H\+E\+A\+D\+S\+C\+A\+LE (100)\+: Head, used to achieve a smaller head effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the smaller the head becomes, with a preset value of 100.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+O\+R\+E\+H\+E\+AD (101)\+: Forehead, used to adjust the hairline height. The adjustment strength ranges from \mbox{[}-\/100,100\mbox{]}, with positive values raising and negative values lowering the hairline. The greater the absolute value, the stronger the effect. The default value is 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+C\+O\+N\+T\+O\+UR (102)\+: Face contour, used to achieve a slimmer face effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the stronger the slimming effect, with a preset value of 10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+L\+E\+N\+G\+TH (103)\+: Face length, used to achieve a longer face effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the face, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of 0.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+F\+A\+C\+E\+W\+I\+D\+TH (104)\+: Face width, used to achieve a narrower face effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the stronger the narrowing effect, with a preset value of 10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+E\+E\+K\+B\+O\+NE (105)\+: Cheekbone, used to adjust cheekbone width. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the narrower the cheekbones, with a preset set value of 43.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+E\+EK (106)\+: Cheeks, used to adjust the cheeks width. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the narrower the cheeks, with a preset value of 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+C\+H\+IN (108)\+: Chin, used to adjust the chin length. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the chin, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of -\/20.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+S\+C\+A\+LE (200)\+:Eyes, used to achieve a larger eye effect. The adjustment range is \mbox{[}0,100\mbox{]}; the larger the value, the larger the eye size, with a preset value of 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+D\+I\+S\+T\+A\+N\+CE (201)\+: Eye distance adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+P\+O\+S\+I\+T\+I\+ON (202)\+: Eye position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+L\+O\+W\+E\+R\+E\+Y\+E\+L\+ID (203)\+: Lower eyelid adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+P\+U\+P\+I\+LS (204)\+: Pupil size adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+I\+N\+N\+E\+R\+C\+O\+R\+N\+ER (205)\+: Inner eye corner adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+O\+U\+T\+E\+R\+C\+O\+R\+N\+ER (206)\+: Outer eye corner adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+L\+E\+N\+G\+TH (300)\+: Nose length, used to achieve a longer nose effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values elongate the nose, while negative values shorten it. The larger the value, the stronger the enhancement effect, with a preset value of -\/10.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+W\+I\+D\+TH (301)\+: Nose width, used to achieve a slimmer nose effect. The adjustment range is \mbox{[}-\/100,100\mbox{]}; positive values make the nose wider, while negative values make it narrower. The larger the value, the stronger the enhancement effect, with a preset value of 72.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+W\+I\+NG (302)\+: Nose wing adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+R\+O\+OT (303)\+: Nose root adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+B\+R\+I\+D\+GE (304)\+: Nose bridge adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+T\+IP (305)\+: Nose tip adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+N\+O\+S\+E\+G\+E\+N\+E\+R\+AL (306)\+: Overall nose adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+S\+C\+A\+LE (400)\+: Mouth, used to achieve a larger mouth effect. The adjustment strength ranges from \mbox{[}0,100\mbox{]}, with larger values resulting in a larger mouth. The default value is 50.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+P\+O\+S\+I\+T\+I\+ON (401)\+: Mouth position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+S\+M\+I\+LE (402)\+: Mouth smile adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+M\+O\+U\+T\+H\+L\+IP (403)\+: Lip shape adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+B\+R\+O\+W\+P\+O\+S\+I\+T\+I\+ON (500)\+: Eyebrow position adjustment. The range is \mbox{[}-\/100, 100\mbox{]}, with a default value of 0. The greater the absolute value, the more noticeable the adjustment. Negative values indicate the opposite direction.
\item F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+E\+A\+\_\+\+E\+Y\+E\+B\+R\+O\+W\+T\+H\+I\+C\+K\+N\+E\+SS (501)\+: Eyebrow thickness adjustment. The range is \mbox{[}0, 100\mbox{]}, with a default value of 0. The larger the value, the more noticeable the adjustment. 
\end{DoxyItemize}\\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item Use the default value {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE} if you use camera to capture local video.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item A pointer to the {\ttfamily Face\+Shape\+Area\+Options} instance, if the method call succeeds.
\item N\+U\+LL is returned, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43148bccc5d86545500c2e367ba34698}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43148bccc5d86545500c2e367ba34698}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFilterEffectOptions@{setFilterEffectOptions}}
\index{setFilterEffectOptions@{setFilterEffectOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFilterEffectOptions()}{setFilterEffectOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Filter\+Effect\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the filter effect options. 

\begin{DoxySince}{Since}
v4.\+4.\+1
\end{DoxySince}
Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 5.\+0 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the filter effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Yes.
\item {\ttfamily false}\+: (Default) No. 
\end{DoxyItemize}\\
\hline
{\em options} & The filter effect options. See {\ttfamily Filter\+Effect\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5d215beb08dda637ed4773f319dd3ac9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5d215beb08dda637ed4773f319dd3ac9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setFilterEffectOptions@{setFilterEffectOptions}}
\index{setFilterEffectOptions@{setFilterEffectOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setFilterEffectOptions()}{setFilterEffectOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Filter\+Effect\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the filter effect options and specifies the media source. 

\begin{DoxySince}{Since}
v4.\+4.\+1.
\end{DoxySince}
Both this method and {\ttfamily set\+Beauty\+Effect\+Options(boolean enabled, Beauty\+Options options, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{Constants.\+Media\+Source\+Type}} source\+Type)} set filter effect options. The difference is that this method allows you to specify the media source to which the filter effect option is applied. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only applies to Android 5.\+0 or later.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the filter effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Yes.
\item {\ttfamily false}\+: (Default) No. 
\end{DoxyItemize}\\
\hline
{\em options} & The filter effect options. See {\ttfamily Filter\+Effect\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item Use the default value {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE} if you use camera to capture local video.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f3f92c762fe9773fb61a2118a4f8504}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f3f92c762fe9773fb61a2118a4f8504}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLowlightEnhanceOptions@{setLowlightEnhanceOptions}}
\index{setLowlightEnhanceOptions@{setLowlightEnhanceOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLowlightEnhanceOptions()}{setLowlightEnhanceOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Lowlight\+Enhance\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_low_light_enhance_options}{Low\+Light\+Enhance\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets low-\/light enhancement. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
You can call this method to enable the color enhancement feature and set the options of the color enhancement effect. Applicable scenarios\+: The low-\/light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item Dark light enhancement has certain requirements for equipment performance. The low-\/light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-\/light enhancement, Agora recommends modifying the low-\/light enhancement options to a less performance-\/consuming level or disabling low-\/light enhancement entirely.
\item If you want to prioritize image quality ( L\+O\+W\+\_\+\+L\+I\+G\+H\+T\+\_\+\+E\+N\+H\+A\+N\+C\+E\+\_\+\+L\+E\+V\+E\+L\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY ) when using the low-\/light enhancement function, you need to first call {\ttfamily set\+Video\+Denoiser\+Options(boolean enabled, Video\+Denoiser\+Options options)} to achieve video noise reduction, the specific corresponding relationship is as follows\+:
\begin{DoxyItemize}
\item When low light enhancement is set to automatic mode ( L\+O\+W\+\_\+\+L\+I\+G\+H\+T\+\_\+\+E\+N\+H\+A\+N\+C\+E\+\_\+\+A\+U\+TO ), video noise reduction needs to be set to prioritize image quality ( V\+I\+D\+E\+O\+\_\+\+D\+E\+N\+O\+I\+S\+E\+R\+\_\+\+L\+E\+V\+E\+L\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY ) and automatic mode ( V\+I\+D\+E\+O\+\_\+\+D\+E\+N\+O\+I\+S\+E\+R\+\_\+\+A\+U\+TO ).
\item When low-\/light enhancement is set to manual mode ( L\+O\+W\+\_\+\+L\+I\+G\+H\+T\+\_\+\+E\+N\+H\+A\+N\+C\+E\+\_\+\+M\+A\+N\+U\+AL ), video noise reduction needs to be set to prioritize image quality ( V\+I\+D\+E\+O\+\_\+\+D\+E\+N\+O\+I\+S\+E\+R\+\_\+\+L\+E\+V\+E\+L\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY ) and manual mode ( V\+I\+D\+E\+O\+\_\+\+D\+E\+N\+O\+I\+S\+E\+R\+\_\+\+M\+A\+N\+U\+AL ).
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable low-\/light enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable low-\/light enhancement.
\item {\ttfamily false}\+: (Default) Disable low-\/light enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The low-\/light enhancement options. See {\ttfamily Low\+Light\+Enhance\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae8fdd7884e964fd98669e6158b282e51}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae8fdd7884e964fd98669e6158b282e51}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLowlightEnhanceOptions@{setLowlightEnhanceOptions}}
\index{setLowlightEnhanceOptions@{setLowlightEnhanceOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLowlightEnhanceOptions()}{setLowlightEnhanceOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Lowlight\+Enhance\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_low_light_enhance_options}{Low\+Light\+Enhance\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets low light enhance options and specifies the media source. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
This method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f3f92c762fe9773fb61a2118a4f8504}{set\+Lowlight\+Enhance\+Options(boolean enabled, Low\+Light\+Enhance\+Options options)}}} both set low light enhance options, but this method allows you to specify the media source to which the low light enhance options are applied. Applicable scenarios\+: dark environments and low-\/end video capture devices can cause video images to contain significant noise, which affects video quality. In real-\/time interactive scenarios, video noise also consumes bitstream resources and reduces encoding efficiency during encoding. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item Video noise reduction has certain requirements for equipment performance. If your device overheats after you enable video noise reduction, Agora recommends modifying the video noise reduction options to a less performance-\/consuming level or disabling video noise reduction entirely.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable low-\/light enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable low-\/light enhancement.
\item {\ttfamily false}\+: (Default) Disable low-\/light enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The low-\/light enhancement options. See {\ttfamily Low\+Light\+Enhance\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item The default value is {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE}.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abcea923e468e6bce9d6c77469fd7774a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abcea923e468e6bce9d6c77469fd7774a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoDenoiserOptions@{setVideoDenoiserOptions}}
\index{setVideoDenoiserOptions@{setVideoDenoiserOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoDenoiserOptions()}{setVideoDenoiserOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Denoiser\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_denoiser_options}{Video\+Denoiser\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets video noise reduction. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
You can call this method to enable the video noise reduction feature and set the options of the video noise reduction effect. Applicable scenarios\+: dark environments and low-\/end video capture devices can cause video images to contain significant noise, which affects video quality. In real-\/time interactive scenarios, video noise also consumes bitstream resources and reduces encoding efficiency during encoding. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item Video noise reduction has certain requirements for equipment performance. If your device overheats after you enable video noise reduction, Agora recommends modifying the video noise reduction options to a less performance-\/consuming level or disabling video noise reduction entirely. If the noise reduction implemented by this method does not meet your needs, Agora recommends that you call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}{set\+Beauty\+Effect\+Options(boolean enabled, Beauty\+Options options)}}} method to enable the beauty and skin smoothing function to achieve better video noise reduction effects. The recommended {\ttfamily Beauty\+Options} settings for intense noise reduction effect are as follows\+:
\item {\ttfamily lightening\+Contrast\+Level} L\+I\+G\+H\+T\+E\+N\+I\+N\+G\+\_\+\+C\+O\+N\+T\+R\+A\+S\+T\+\_\+\+N\+O\+R\+M\+AL
\item {\ttfamily lightening\+Level}\+: 0.\+0
\item {\ttfamily smoothness\+Level}\+: 0.\+5
\item {\ttfamily redness\+Level}\+: 0.\+0
\item {\ttfamily sharpness\+Level}\+: 0.\+1
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable video noise reduction\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable video noise reduction.
\item {\ttfamily false}\+: (Default) Disable video noise reduction. 
\end{DoxyItemize}\\
\hline
{\em options} & The video noise reduction options. See {\ttfamily Video\+Denoiser\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6309e3b0960cd680cd6464e52566ea9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6309e3b0960cd680cd6464e52566ea9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoDenoiserOptions@{setVideoDenoiserOptions}}
\index{setVideoDenoiserOptions@{setVideoDenoiserOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoDenoiserOptions()}{setVideoDenoiserOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Denoiser\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_denoiser_options}{Video\+Denoiser\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets video noise reduction and specifies the media source. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
You can call this method to enable the video noise reduction feature and set the options of the video noise reduction effect. Both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abcea923e468e6bce9d6c77469fd7774a}{set\+Video\+Denoiser\+Options(boolean enabled, Video\+Denoiser\+Options options)}}} set video noise reduction, but this method allows you to specify the media source to which the noise reduction is applied. Applicable scenarios\+: dark environments and low-\/end video capture devices can cause video images to contain significant noise, which affects video quality. In real-\/time interactive scenarios, video noise also consumes bitstream resources and reduces encoding efficiency during encoding. Call timing\+: Call this method after calling {\ttfamily enable\+Video}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\item Video noise reduction has certain requirements for equipment performance. If your device overheats after you enable video noise reduction, Agora recommends modifying the video noise reduction options to a less performance-\/consuming level or disabling video noise reduction entirely. If the noise reduction implemented by this method does not meet your needs, Agora recommends that you call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac05478917ee36cbb1ac7e6b2984c923a}{set\+Beauty\+Effect\+Options(boolean enabled, Beauty\+Options options)}}} method to enable the beauty and skin smoothing function to achieve better video noise reduction effects. The recommended {\ttfamily Beauty\+Options} settings for intense noise reduction effect are as follows\+:
\item {\ttfamily lightening\+Contrast\+Level} L\+I\+G\+H\+T\+E\+N\+I\+N\+G\+\_\+\+C\+O\+N\+T\+R\+A\+S\+T\+\_\+\+N\+O\+R\+M\+AL
\item {\ttfamily lightening\+Level}\+: 0.\+0
\item {\ttfamily smoothness\+Level}\+: 0.\+5
\item {\ttfamily redness\+Level}\+: 0.\+0
\item {\ttfamily sharpness\+Level}\+: 0.\+1
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable video noise reduction\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable video noise reduction.
\item {\ttfamily false}\+: (Default) Disable video noise reduction. 
\end{DoxyItemize}\\
\hline
{\em options} & The video noise reduction options. See {\ttfamily Video\+Denoiser\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item The default value is {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE}.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83a2353ebb342c293c6dda4d98a5f1c1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83a2353ebb342c293c6dda4d98a5f1c1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setColorEnhanceOptions@{setColorEnhanceOptions}}
\index{setColorEnhanceOptions@{setColorEnhanceOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setColorEnhanceOptions()}{setColorEnhanceOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Color\+Enhance\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_color_enhance_options}{Color\+Enhance\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets color enhancement. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
The video images captured by the camera can have color distortion. The color enhancement feature intelligently adjusts video characteristics such as saturation and contrast to enhance the video color richness and color reproduction, making the video more vivid. You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling {\ttfamily enable\+Video}.
\item The color enhancement feature has certain performance requirements on devices. With color enhancement turned on, Agora recommends that you change the color enhancement level to one that consumes less performance or turn off color enhancement if your device is experiencing severe heat problems.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable color enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true} Enable color enhancement.
\item {\ttfamily false}\+: (Default) Disable color enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The color enhancement options. See {\ttfamily Color\+Enhance\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af496272f593d01fad73630254e4ad175}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af496272f593d01fad73630254e4ad175}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setColorEnhanceOptions@{setColorEnhanceOptions}}
\index{setColorEnhanceOptions@{setColorEnhanceOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setColorEnhanceOptions()}{setColorEnhanceOptions()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Color\+Enhance\+Options (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_color_enhance_options}{Color\+Enhance\+Options}}}]{options,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets color enhance options and specifies the media source. 

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
The video images captured by the camera can have color distortion. The color enhancement feature intelligently adjusts video characteristics such as saturation and contrast to enhance the video color richness and color reproduction, making the video more vivid. Both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a83a2353ebb342c293c6dda4d98a5f1c1}{set\+Color\+Enhance\+Options(boolean enabled, Color\+Enhance\+Options options)}}} set color enhancement options, but this method allows you to specify the media source to which the color enhance options are applied.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling {\ttfamily enable\+Video}.
\item The color enhancement feature has certain performance requirements on devices. With color enhancement turned on, Agora recommends that you change the color enhancement level to one that consumes less performance or turn off color enhancement if your device is experiencing severe heat problems.
\item This method relies on the image enhancement dynamic library {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable color enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true} Enable color enhancement.
\item {\ttfamily false}\+: (Default) Disable color enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The color enhancement options. See {\ttfamily Color\+Enhance\+Options}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item The default value is {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE}.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33b263df955fe8ef32504d576300d8a1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33b263df955fe8ef32504d576300d8a1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createVideoEffectObject@{createVideoEffectObject}}
\index{createVideoEffectObject@{createVideoEffectObject}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createVideoEffectObject()}{createVideoEffectObject()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Video\+Effect\+Object (\begin{DoxyParamCaption}\item[{String}]{bundle\+Path,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a video effect object. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
Creates an {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}}} video effect object and returns its pointer.

\begin{DoxyNote}{Note}
You must call the {\ttfamily enable\+Video} method before calling this method. This method applies to Android 4.\+4 and later.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em bundle\+Path} & The path to the video effect resource package. \\
\hline
{\em source\+Type} & The media source type, such as P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE. See {\ttfamily Media\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}}} object, if the method call succeeds.
\item {\ttfamily null}, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a84fea84319c101eb815b699b5769114f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a84fea84319c101eb815b699b5769114f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroyVideoEffectObject@{destroyVideoEffectObject}}
\index{destroyVideoEffectObject@{destroyVideoEffectObject}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyVideoEffectObject()}{destroyVideoEffectObject()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy\+Video\+Effect\+Object (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}}}]{video\+Effect\+Object }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Destroys a video effect object. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
\begin{DoxyNote}{Note}
You must call the {\ttfamily enable\+Video} method before using this method. This method is applicable to Android 4.\+4 and later.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em video\+Effect\+Object} & The video effect object to be destroyed. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_video_effect_object}{I\+Video\+Effect\+Object}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f86af9f11bd4498fcbd913af2572cb5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f86af9f11bd4498fcbd913af2572cb5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableVirtualBackground@{enableVirtualBackground}}
\index{enableVirtualBackground@{enableVirtualBackground}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVirtualBackground()}{enableVirtualBackground()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Virtual\+Background (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_virtual_background_source}{Virtual\+Background\+Source}}}]{background\+Source,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_segmentation_property}{Segmentation\+Property}}}]{segproperty }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables/\+Disables the virtual background. 

The virtual background feature enables the local user to replace their original background with a static image, dynamic video, blurred background, or portrait-\/background segmentation to achieve picture-\/in-\/picture effect. Once the virtual background feature is enabled, all users in the channel can see the custom background. Call this method after calling {\ttfamily enable\+Video} or {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Using a video as a your virtual background will lead to continuous increase in memory usage, which may cause issues such as app crashes. Therefore,it is recommended to reduce the resolution and frame rate of the video when using it.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device. Agora recommends you use virtual background on devices with the following processors\+:
\begin{DoxyItemize}
\item Snapdragon 700 series 750G and later
\item Snapdragon 800 series 835 and later
\item Dimensity 700 series 720 and later
\item Kirin 800 series 810 and later
\item Kirin 900 series 980 and later
\end{DoxyItemize}
\item Agora recommends that you use this feature in scenarios that meet the following conditions\+:
\begin{DoxyItemize}
\item A high-\/definition camera device is used, and the environment is uniformly lit.
\item There are few objects in the captured video. Portraits are half-\/length and unobstructed. Ensure that the background is a solid color that is different from the color of the user\textquotesingle{}s clothing.
\end{DoxyItemize}
\item This method relies on the virtual background dynamic library {\ttfamily libagora\+\_\+segmentation\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable virtual background\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable virtual background.
\item {\ttfamily false}\+: Disable virtual background. 
\end{DoxyItemize}\\
\hline
{\em background\+Source} & The custom background. See {\ttfamily Virtual\+Background\+Source}. To adapt the resolution of the custom background image to that of the video captured by the S\+DK, the S\+DK scales and crops the custom background image while ensuring that the content of the custom background image is not distorted. \\
\hline
{\em segproperty} & Processing properties for background images. See {\ttfamily Segmentation\+Property}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The device capabilities do not meet the requirements for the virtual background feature. Agora recommends you try it on devices with higher performance. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaef56d7becd92afbc402d8592c6f3273}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaef56d7becd92afbc402d8592c6f3273}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableVirtualBackground@{enableVirtualBackground}}
\index{enableVirtualBackground@{enableVirtualBackground}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVirtualBackground()}{enableVirtualBackground()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Virtual\+Background (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_virtual_background_source}{Virtual\+Background\+Source}}}]{background\+Source,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_segmentation_property}{Segmentation\+Property}}}]{segproperty,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables virtual background and specify the media source, or disables virtual background. 

The virtual background feature enables the local user to replace their original background with a static image, dynamic video, blurred background, or portrait-\/background segmentation to achieve picture-\/in-\/picture effect. Once the virtual background feature is enabled, all users in the channel can see the custom background. Both this method and {\ttfamily enable\+Virtual\+Background(boolean enabled, Virtual\+Background\+Source background\+Source, Segmentation\+Property segproperty)} enable/disable virtual background, but this method allows you to specify the media source to which the virtual background is applied. Call this method after calling {\ttfamily enable\+Video} or {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Using a video as a your virtual background will lead to continuous increase in memory usage, which may cause issues such as app crashes. Therefore,it is recommended to reduce the resolution and frame rate of the video when using it.
\item This feature has high requirements on device performance. When calling this method, the S\+DK automatically checks the capabilities of the current device. Agora recommends you use virtual background on devices with the following processors\+:
\begin{DoxyItemize}
\item Snapdragon 700 series 750G and later
\item Snapdragon 800 series 835 and later
\item Dimensity 700 series 720 and later
\item Kirin 800 series 810 and later
\item Kirin 900 series 980 and later
\end{DoxyItemize}
\item Agora recommends that you use this feature in scenarios that meet the following conditions\+:
\begin{DoxyItemize}
\item A high-\/definition camera device is used, and the environment is uniformly lit.
\item There are few objects in the captured video. Portraits are half-\/length and unobstructed. Ensure that the background is a solid color that is different from the color of the user\textquotesingle{}s clothing.
\end{DoxyItemize}
\item This method relies on the virtual background dynamic library {\ttfamily libagora\+\_\+segmentation\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable virtual background\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable virtual background.
\item {\ttfamily false}\+: Disable virtual background. 
\end{DoxyItemize}\\
\hline
{\em background\+Source} & The custom background. See {\ttfamily Virtual\+Background\+Source}. To adapt the resolution of the custom background image to that of the video captured by the S\+DK, the S\+DK scales and crops the custom background image while ensuring that the content of the custom background image is not distorted. \\
\hline
{\em segproperty} & Processing properties for background images. See {\ttfamily Segmentation\+Property}. \\
\hline
{\em source\+Type} & The type of the media source to which the filter effect is applied. See {\ttfamily Media\+Source\+Type}.Attention\+: In this method, this parameter supports only the following two settings\+:
\begin{DoxyItemize}
\item The default value is {\ttfamily P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE}.
\item Set this parameter to {\ttfamily C\+U\+S\+T\+O\+M\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+CE} if you use custom video source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: The device capabilities do not meet the requirements for the virtual background feature. Agora recommends you try it on devices with higher performance. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5861f16ae4025a0bee7eb8b4e5096d86}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5861f16ae4025a0bee7eb8b4e5096d86}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setDefaultAudioRoutetoSpeakerphone@{setDefaultAudioRoutetoSpeakerphone}}
\index{setDefaultAudioRoutetoSpeakerphone@{setDefaultAudioRoutetoSpeakerphone}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setDefaultAudioRoutetoSpeakerphone()}{setDefaultAudioRoutetoSpeakerphone()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Default\+Audio\+Routeto\+Speakerphone (\begin{DoxyParamCaption}\item[{boolean}]{default\+To\+Speaker }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the default audio playback route. 

Most mobile phones have two audio routes\+: an earpiece at the top, and a speakerphone at the bottom. The earpiece plays at a lower volume, and the speakerphone at a higher volume. When setting the default audio route, you determine whether audio playback comes through the earpiece or speakerphone when no external audio device is connected. In different scenarios, the default audio routing of the system is also different. See the following\+:
\begin{DoxyItemize}
\item Voice call\+: Earpiece.
\item Audio broadcast\+: Speakerphone.
\item Video call\+: Speakerphone.
\item Video broadcast\+: Speakerphone. You can call this method to change the default audio route. Call timing\+: Call this method before joining a channel. If you need to change the audio route after joining a channel, call {\ttfamily set\+Enable\+Speakerphone}. Related callbacks\+: After successfully calling this method, the S\+DK triggers the {\ttfamily on\+Audio\+Route\+Changed} callback to report the current audio route.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
After calling this method to set the default audio route, the actual audio route of the system will change with the connection of external audio devices (wired headphones or Bluetooth headphones). See .
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em default\+To\+Speaker} & Whether to set the speakerphone as the default audio route\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Set the speakerphone as the default audio route.
\item {\ttfamily false}\+: Set the earpiece as the default audio route.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5dce9e487806eb87da6c142450498f61}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5dce9e487806eb87da6c142450498f61}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setEnableSpeakerphone@{setEnableSpeakerphone}}
\index{setEnableSpeakerphone@{setEnableSpeakerphone}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setEnableSpeakerphone()}{setEnableSpeakerphone()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Enable\+Speakerphone (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables/\+Disables the audio route to the speakerphone. 

Applicable scenarios\+: If the default audio route of the S\+DK or the setting in {\ttfamily set\+Default\+Audio\+Route\+To\+Speakerphone} cannot meet your requirements, you can call this method to switch the current audio route. Call timing\+: Call this method after joining a channel. Related callbacks\+: After successfully calling this method, the S\+DK triggers the {\ttfamily on\+Audio\+Route\+Changed} callback to report the current audio route.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method only sets the audio route in the current channel and does not influence the default audio route. If the user leaves the current channel and joins another channel, the default audio route is used.
\item If the user uses an external audio playback device such as a Bluetooth or wired headset, this method does not take effect, and the S\+DK plays audio through the external device. When the user uses multiple external devices, the S\+DK plays audio through the last connected device.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable the speakerphone or earpiece\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable device state monitoring. The audio route is the speakerphone.
\item {\ttfamily false}\+: Disable device state monitoring. The audio route is the earpiece.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1949e03a3c541d8e3ee5f57b9b51201f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1949e03a3c541d8e3ee5f57b9b51201f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRouteInCommunicationMode@{setRouteInCommunicationMode}}
\index{setRouteInCommunicationMode@{setRouteInCommunicationMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRouteInCommunicationMode()}{setRouteInCommunicationMode()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Route\+In\+Communication\+Mode (\begin{DoxyParamCaption}\item[{int}]{route }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Selects the audio playback route in communication audio mode. 

This method is used to switch the audio route from Bluetooth headphones to earpiece, wired headphones or speakers in communication audio mode ( {\ttfamily M\+O\+D\+E\+\_\+\+I\+N\+\_\+\+C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} ). Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: After successfully calling this method, the S\+DK triggers the {\ttfamily on\+Audio\+Route\+Changed} callback to report the current audio route.

\begin{DoxyNote}{Note}
Using this method and the {\ttfamily set\+Enable\+Speakerphone} method at the same time may cause conflicts. Agora recommends that you use the {\ttfamily set\+Route\+In\+Communication\+Mode} method alone.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em route} & The audio playback route you want to use\+:
\begin{DoxyItemize}
\item -\/1\+: The default audio route.
\item 0\+: Headphones with microphone.
\item 1\+: Handset.
\item 2\+: Headphones without microphone.
\item 3\+: Device\textquotesingle{}s built-\/in speaker.
\item 4\+: (Not supported yet) External speakers.
\item 5\+: Bluetooth headphones.
\item 6\+: U\+SB device.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Without practical meaning. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5916d5e8b659ef49a8c1ec9ff54d8dc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5916d5e8b659ef49a8c1ec9ff54d8dc}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isSpeakerphoneEnabled@{isSpeakerphoneEnabled}}
\index{isSpeakerphoneEnabled@{isSpeakerphoneEnabled}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isSpeakerphoneEnabled()}{isSpeakerphoneEnabled()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Speakerphone\+Enabled (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the speakerphone is enabled. 

Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The speakerphone is enabled, and the audio plays from the speakerphone.
\item {\ttfamily false}\+: The speakerphone is not enabled, and the audio plays from devices other than the speakerphone. For example, the headset or earpiece. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d5a12ef14d4134ac17d3f48faea0feb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d5a12ef14d4134ac17d3f48faea0feb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableInEarMonitoring@{enableInEarMonitoring}}
\index{enableInEarMonitoring@{enableInEarMonitoring}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableInEarMonitoring()}{enableInEarMonitoring()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+In\+Ear\+Monitoring (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables in-\/ear monitoring. 

This method enables or disables in-\/ear monitoring. Call timing\+: This method can be called either before or after joining the channel.

\begin{DoxyNote}{Note}
Users must use earphones (wired or Bluetooth) to hear the in-\/ear monitoring effect.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Enables or disables in-\/ear monitoring.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables in-\/ear monitoring.
\item {\ttfamily false}\+: (Default) Disables in-\/ear monitoring.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/ 8\+: Make sure the current audio routing is Bluetooth or headset. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac713dba8f2c8d68dcbb549de5060b1e4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac713dba8f2c8d68dcbb549de5060b1e4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableInEarMonitoring@{enableInEarMonitoring}}
\index{enableInEarMonitoring@{enableInEarMonitoring}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableInEarMonitoring()}{enableInEarMonitoring()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+In\+Ear\+Monitoring (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{int}]{include\+Audio\+Filters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables in-\/ear monitoring. 

This method enables or disables in-\/ear monitoring. Call timing\+: This method can be called either before or after joining the channel.

\begin{DoxyNote}{Note}
Users must use earphones (wired or Bluetooth) to hear the in-\/ear monitoring effect.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Enables or disables in-\/ear monitoring.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables in-\/ear monitoring.
\item {\ttfamily false}\+: (Default) Disables in-\/ear monitoring. 
\end{DoxyItemize}\\
\hline
{\em include\+Audio\+Filters} & The audio filter types of in-\/ear monitoring\+:
\begin{DoxyItemize}
\item E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+N\+O\+NE (1 $<$$<$ 0)\+: No audio filter added to in-\/ear monitoring.
\item E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+B\+U\+I\+L\+T\+\_\+\+I\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+I\+L\+T\+E\+RS (1 $<$$<$ 1)\+: Add vocal effects audio filter to in-\/ear monitoring. If you implement functions such as voice beautifier and audio effect, users can hear the voice after adding these effects. This enumerator supports combination using the bitwise OR operator ($\vert$).
\item E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+N\+O\+I\+S\+E\+\_\+\+S\+U\+P\+P\+R\+E\+S\+S\+I\+ON (1 $<$$<$ 2)\+: Add noise suppression audio filter to in-\/ear monitoring. This enumerator supports combination using the bitwise OR operator ($\vert$).
\item E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+R\+E\+U\+S\+E\+\_\+\+P\+O\+S\+T\+\_\+\+P\+R\+O\+C\+E\+S\+S\+I\+N\+G\+\_\+\+F\+I\+L\+T\+ER (1 $<$$<$15)： Reuse the audio filter that has been processed on the sending end for in-\/ear monitoring. This enumerator reduces C\+PU usage while increasing in-\/ear monitoring latency, which is suitable for latency-\/tolerant scenarios requiring low C\+PU consumption. This enumerator is only supported for standalone use. Once selected, other audio filter configurations will be automatically disabled. Attention\+: This parameter only takes effect when {\ttfamily enabled} is set as {\ttfamily true}.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/ 8\+: Make sure the current audio routing is Bluetooth or headset. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d6b079b986dacc6d010fc0322a4b48c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d6b079b986dacc6d010fc0322a4b48c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setInEarMonitoringVolume@{setInEarMonitoringVolume}}
\index{setInEarMonitoringVolume@{setInEarMonitoringVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setInEarMonitoringVolume()}{setInEarMonitoringVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+In\+Ear\+Monitoring\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the volume of the in-\/ear monitor. 

Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of the user. The value range is \mbox{[}0,400\mbox{]}.
\begin{DoxyItemize}
\item 0\+: Mute.
\item 100\+: (Default) The original volume.
\item 400\+: Four times the original volume (amplifying the audio signals by four times).
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: Invalid parameter settings, such as in-\/ear monitoring volume exceeding the valid range ($<$ 0 or $>$ 400). 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalVoicePitch@{setLocalVoicePitch}}
\index{setLocalVoicePitch@{setLocalVoicePitch}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoicePitch()}{setLocalVoicePitch()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Voice\+Pitch (\begin{DoxyParamCaption}\item[{double}]{pitch }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Changes the voice pitch of the local speaker. 

Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em pitch} & The local voice pitch. The value range is \mbox{[}0.\+5,2.\+0\mbox{]}. The lower the value, the lower the pitch. The default value is 1.\+0 (no change to the pitch).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalVoiceFormant@{setLocalVoiceFormant}}
\index{setLocalVoiceFormant@{setLocalVoiceFormant}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceFormant()}{setLocalVoiceFormant()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Voice\+Formant (\begin{DoxyParamCaption}\item[{double}]{formant\+Ratio }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the formant ratio to change the timbre of human voice. 

Formant ratio affects the timbre of voice. The smaller the value, the deeper the sound will be, and the larger, the sharper. After you set the formant ratio, all users in the channel can hear the changed voice. If you want to change the timbre and pitch of voice at the same time, Agora recommends using this method together with {\ttfamily set\+Local\+Voice\+Pitch}. Applicable scenarios\+: You can call this method to set the formant ratio of local audio to change the timbre of human voice. Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em formant\+Ratio} & The formant ratio. The value range is \mbox{[}-\/1.\+0, 1.\+0\mbox{]}. The default value is 0.\+0, which means do not change the timbre of the voice.\+Note\+: Agora recommends setting this value within the range of \mbox{[}-\/0.\+4, 0.\+6\mbox{]}. Otherwise, the voice may be seriously distorted.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e707946700a15c2b7d99177db830a54}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e707946700a15c2b7d99177db830a54}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalVoiceEqualization@{setLocalVoiceEqualization}}
\index{setLocalVoiceEqualization@{setLocalVoiceEqualization}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceEqualization()}{setLocalVoiceEqualization()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Voice\+Equalization (\begin{DoxyParamCaption}\item[{Constants.\+A\+U\+D\+I\+O\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+A\+T\+I\+O\+N\+\_\+\+B\+A\+N\+D\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+CY}]{band\+Frequency,  }\item[{int}]{band\+Gain }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the local voice equalization effect. 

Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em band\+Frequency} & The band frequency. The value ranges between 0 and 9; representing the respective 10-\/band center frequencies of the voice effects, including 31, 62, 125, 250, 500, 1k, 2k, 4k, 8k, and 16k Hz. See {\ttfamily A\+U\+D\+I\+O\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+A\+T\+I\+O\+N\+\_\+\+B\+A\+N\+D\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+CY}. \\
\hline
{\em band\+Gain} & The gain of each band in dB. The value ranges between -\/15 and 15. The default value is 0.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac955fd38973b32c629cdfa1566e52fc6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac955fd38973b32c629cdfa1566e52fc6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalVoiceReverb@{setLocalVoiceReverb}}
\index{setLocalVoiceReverb@{setLocalVoiceReverb}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceReverb()}{setLocalVoiceReverb()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Voice\+Reverb (\begin{DoxyParamCaption}\item[{Constants.\+A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE}]{reverb\+Key,  }\item[{int}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the local voice reverberation. 

The S\+DK provides an easier-\/to-\/use method, {\ttfamily set\+Audio\+Effect\+Preset}, to directly implement preset reverb effects for such as pop, R\&B, and K\+TV.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em reverb\+Key} & The reverberation key. Agora provides five reverberation keys, see {\ttfamily A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE}. \\
\hline
{\em value} & The value of the reverberation key.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac7573d0f4cbfbcb1e6564048142cb5d0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac7573d0f4cbfbcb1e6564048142cb5d0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setHeadphoneEQPreset@{setHeadphoneEQPreset}}
\index{setHeadphoneEQPreset@{setHeadphoneEQPreset}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setHeadphoneEQPreset()}{setHeadphoneEQPreset()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Headphone\+E\+Q\+Preset (\begin{DoxyParamCaption}\item[{int}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the preset headphone equalization effect. 

This method is mainly used in spatial audio effect scenarios. You can select the preset headphone equalizer to listen to the audio to achieve the expected audio experience.

\begin{DoxyNote}{Note}
If the headphones you use already have a good equalization effect, you may not get a significant improvement when you call this method, and could even diminish the experience.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The preset headphone equalization effect\+:
\begin{DoxyItemize}
\item H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+O\+FF\+: The headphone equalizer is disabled, and the original audio is heard.
\item H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+O\+V\+E\+R\+E\+AR\+: An equalizer is used for headphones.
\item H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+I\+N\+E\+AR\+: An equalizer is used for in-\/ear headphones.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason). 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acdfd1a0eef6fd2456cffede678664001}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acdfd1a0eef6fd2456cffede678664001}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setHeadphoneEQParameters@{setHeadphoneEQParameters}}
\index{setHeadphoneEQParameters@{setHeadphoneEQParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setHeadphoneEQParameters()}{setHeadphoneEQParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Headphone\+E\+Q\+Parameters (\begin{DoxyParamCaption}\item[{int}]{low\+Gain,  }\item[{int}]{high\+Gain }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the low-\/ and high-\/frequency parameters of the headphone equalizer. 

In a spatial audio effect scenario, if the preset headphone equalization effect is not achieved after calling the {\ttfamily set\+Headphone\+E\+Q\+Preset} method, you can further adjust the headphone equalization effect by calling this method.


\begin{DoxyParams}{Parameters}
{\em low\+Gain} & The low-\/frequency parameters of the headphone equalizer. The value range is \mbox{[}-\/10,10\mbox{]}. The larger the value, the deeper the sound. \\
\hline
{\em high\+Gain} & The high-\/frequency parameters of the headphone equalizer. The value range is \mbox{[}-\/10,10\mbox{]}. The larger the value, the sharper the sound.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason). 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioEffectPreset@{setAudioEffectPreset}}
\index{setAudioEffectPreset@{setAudioEffectPreset}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioEffectPreset()}{setAudioEffectPreset()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Effect\+Preset (\begin{DoxyParamCaption}\item[{int}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets an S\+DK preset audio effect. 

\begin{DoxySince}{Since}
v3.\+2.\+0
\end{DoxySince}
Call this method to set an S\+DK preset audio effect for the local user who sends an audio stream. This audio effect does not change the gender characteristics of the original voice. After setting an audio effect, all users in the channel can hear the effect. Call timing\+: This method can be called either before or after joining the channel. To achieve better vocal effects, it is recommended that you call the following A\+P\+Is before calling this method\+:
\begin{DoxyItemize}
\item Call {\ttfamily set\+Audio\+Scenario} to set the audio scenario to high-\/quality audio scenario, namely {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3).
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to set the {\ttfamily profile} parameter to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Do not set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD} (1), or the method does not take effect.
\item If you call {\ttfamily set\+Audio\+Effect\+Preset} and set enumerators except for {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE} or {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, do not call {\ttfamily set\+Audio\+Effect\+Parameters}; otherwise, {\ttfamily set\+Audio\+Effect\+Preset} is overridden.
\item After calling {\ttfamily set\+Audio\+Effect\+Preset}, Agora does not recommend you to call the following methods, otherwise the effect set by {\ttfamily set\+Audio\+Effect\+Preset} will be overwritten\+:
\begin{DoxyItemize}
\item {\ttfamily set\+Voice\+Beautifier\+Preset}
\item {\ttfamily set\+Local\+Voice\+Pitch}
\item {\ttfamily set\+Local\+Voice\+Equalization}
\item {\ttfamily set\+Local\+Voice\+Reverb}
\item {\ttfamily set\+Voice\+Beautifier\+Parameters}
\item {\ttfamily set\+Voice\+Conversion\+Preset}
\end{DoxyItemize}
\item This method relies on the voice beautifier dynamic library {\ttfamily libagora\+\_\+audio\+\_\+beauty\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & Preset audio effects.
\begin{DoxyItemize}
\item A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+FF\+: Turn off audio effects and use the original voice.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+K\+TV\+: The reverberation style typical of a K\+TV venue.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+V\+O\+C\+A\+L\+\_\+\+C\+O\+N\+C\+E\+RT\+: The reverberation style typical of a concert hall.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+T\+U\+D\+IO\+: The reverberation style typical of a recording studio.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+P\+H\+O\+N\+O\+G\+R\+A\+PH\+: The reverberation style typical of the vintage phonograph.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+V\+I\+R\+T\+U\+A\+L\+\_\+\+S\+T\+E\+R\+EO\+: A virtual stereo effect that renders monophonic audio as stereo audio. Before using this preset, set the {\ttfamily profile} parameter of {\ttfamily set\+Audio\+Profile(int profile)} to M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY (4) or M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO (5) ; otherwise, the preset setting is invalid.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+P\+A\+C\+I\+AL\+: A more spatial audio effect.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+E\+T\+H\+E\+R\+E\+AL\+: A more ethereal audio effect.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+V\+I\+R\+T\+U\+A\+L\+\_\+\+S\+U\+R\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+ND\+: Virtual surround sound, that is, the S\+DK generates a simulated surround sound field on the basis of stereo channels, thereby creating a surround sound effect. Attention\+: If the virtual surround sound is enabled, users need to use stereo audio playback devices to hear the anticipated audio effect.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+C\+H\+O\+R\+US\+: A chorus audio effect. Agora recommends using this effect in chorus scenarios to enhance the sense of depth and dimension in the vocals.
\item R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE\+: A 3D voice effect that makes the voice appear to be moving around the user. The default cycle period is 10 seconds. After setting this effect, you can call {\ttfamily set\+Audio\+Effect\+Parameters} to modify the movement period.
\begin{DoxyItemize}
\item Before using this preset, set the {\ttfamily profile} parameter of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+EO (3) or M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO (5); otherwise, the preset setting is invalid.
\item If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.
\end{DoxyItemize}
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+U\+N\+C\+LE\+: The reverberation style typical of an uncle\textquotesingle{}s voice. Agora recommends using this preset to process a male-\/sounding voice; otherwise, you may not hear the anticipated voice effect.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+L\+D\+M\+AN\+: The voice of an old man. Agora recommends using this preset to process a male-\/sounding voice; otherwise, you may not hear the anticipated voice effect.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+B\+OY\+: The voice of a boy. Agora recommends using this preset to process a male-\/sounding voice; otherwise, you may not hear the anticipated voice effect.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+S\+I\+S\+T\+ER\+: The voice of a young woman. Agora recommends using this preset to process a female-\/sounding voice; otherwise, you may not hear the anticipated voice effect.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+G\+I\+RL\+: The voice of a girl. Agora recommends using this preset to process a female-\/sounding voice; otherwise, you may not hear the anticipated voice effect.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+I\+G\+K\+I\+NG\+: The voice of Pig King, a character in Journey to the West who has a voice like a growling bear.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+H\+U\+LK\+: The voice of the Hulk.
\item S\+T\+Y\+L\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+R\+NB\+: The reverberation style typical of R\&B music. Before using this preset, set the {\ttfamily profile} parameter of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY (4) or M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO (5) ; otherwise, the preset setting is invalid.
\item S\+T\+Y\+L\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+P\+O\+P\+U\+L\+AR\+: The reverberation style typical of popular music. Before using this preset, set the {\ttfamily profile} parameter of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY (4) or M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO (5) ; otherwise, the preset setting is invalid.
\item P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON\+: A pitch correction effect that corrects the user\textquotesingle{}s pitch based on the pitch of the natural C major scale. After setting this voice effect, you can call {\ttfamily set\+Audio\+Effect\+Parameters} to adjust the basic mode of tuning and the pitch of the main tone.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVoiceBeautifierPreset@{setVoiceBeautifierPreset}}
\index{setVoiceBeautifierPreset@{setVoiceBeautifierPreset}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceBeautifierPreset()}{setVoiceBeautifierPreset()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Voice\+Beautifier\+Preset (\begin{DoxyParamCaption}\item[{int}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets a preset voice beautifier effect. 

\begin{DoxySince}{Since}
v3.\+2.\+0
\end{DoxySince}
Call this method to set a preset voice beautifier effect for the local user who sends an audio stream. After setting a voice beautifier effect, all users in the channel can hear the effect. You can set different voice beautifier effects for different scenarios. Call timing\+: This method can be called either before or after joining the channel. To achieve better vocal effects, it is recommended that you call the following A\+P\+Is before calling this method\+:
\begin{DoxyItemize}
\item Call {\ttfamily set\+Audio\+Scenario} to set the audio scenario to high-\/quality audio scenario, namely {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3).
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to set the {\ttfamily profile} parameter to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Do not set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD} (1), or the method does not take effect.
\item This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.
\item After calling {\ttfamily set\+Voice\+Beautifier\+Preset}, Agora does not recommend calling the following methods, otherwise the effect set by {\ttfamily set\+Voice\+Beautifier\+Preset} will be overwritten\+:
\begin{DoxyItemize}
\item {\ttfamily set\+Audio\+Effect\+Preset}
\item {\ttfamily set\+Audio\+Effect\+Parameters}
\item {\ttfamily set\+Local\+Voice\+Pitch}
\item {\ttfamily set\+Local\+Voice\+Equalization}
\item {\ttfamily set\+Local\+Voice\+Reverb}
\item {\ttfamily set\+Voice\+Beautifier\+Parameters}
\item {\ttfamily set\+Voice\+Conversion\+Preset}
\end{DoxyItemize}
\item This method relies on the voice beautifier dynamic library {\ttfamily libagora\+\_\+audio\+\_\+beauty\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The preset voice beautifier effect options.
\begin{DoxyItemize}
\item V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+O\+FF\+: Turn off voice beautifier effects and use the original voice.
\item C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+M\+A\+G\+N\+E\+T\+IC\+: A more magnetic voice (Male only).
\item C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+F\+R\+E\+SH\+: A fresher voice (Female only).
\item C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+V\+I\+T\+A\+L\+I\+TY\+: A more vital voice (Female only).
\item S\+I\+N\+G\+I\+N\+G\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+ER\+: The singing beautifier effect.
\begin{DoxyItemize}
\item If you call {\ttfamily set\+Voice\+Beautifier\+Preset} ( S\+I\+N\+G\+I\+N\+G\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+ER ), you can beautify a male-\/sounding voice and add a reverberation effect that sounds like singing in a small room. Agora recommends using this enumerator to process a male-\/sounding voice; otherwise, you might experience vocal distortion.
\item If you call {\ttfamily set\+Voice\+Beautifier\+Parameters} ( S\+I\+N\+G\+I\+N\+G\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+ER, param1, param2), you can beautify a male-\/ or female-\/sounding voice and add a reverberation effect.
\end{DoxyItemize}
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+V\+I\+G\+O\+R\+O\+US\+: A more rigorous vice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+D\+E\+EP\+: A deep voice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+M\+E\+L\+L\+OW\+: A mellower voice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+F\+A\+L\+S\+E\+T\+TO\+: Falsetto.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+F\+U\+LL\+: A fuller voice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+C\+L\+E\+AR\+: A clearer voice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+R\+E\+S\+O\+U\+N\+D\+I\+NG\+: A resounding voice.
\item T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+R\+I\+N\+G\+I\+NG\+: A more ringing voice.
\item U\+L\+T\+R\+A\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+V\+O\+I\+CE\+: Ultra-\/high quality voice, which makes the audio clearer and restores more details.
\begin{DoxyItemize}
\item To achieve better audio effect quality, Agora recommends that you call {\ttfamily set\+Audio\+Profile(int profile)} and set the {\ttfamily profile} to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5) and {\ttfamily scenario} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3) before calling this method.
\item If you have an audio capturing device that can already restore audio details to a high degree, Agora recommends that you do not enable ultra-\/high quality; otherwise, the S\+DK may over-\/restore audio details, and you may not hear the anticipated voice effect.
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVoiceConversionPreset@{setVoiceConversionPreset}}
\index{setVoiceConversionPreset@{setVoiceConversionPreset}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceConversionPreset()}{setVoiceConversionPreset()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Voice\+Conversion\+Preset (\begin{DoxyParamCaption}\item[{int}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets a preset voice beautifier effect. 

\begin{DoxySince}{Since}
v3.\+3.\+1
\end{DoxySince}
Call this method to set a preset voice changing effect for the local user who publishes an audio stream in a channel. After setting the voice changing effect, all users in the channel can hear the effect. You can set different voice changing effects for the user depending on different scenarios. Call timing\+: This method can be called either before or after joining the channel. To achieve better vocal effects, it is recommended that you call the following A\+P\+Is before calling this method\+:
\begin{DoxyItemize}
\item Call {\ttfamily set\+Audio\+Scenario} to set the audio scenario to high-\/quality audio scenario, namely {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3).
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to set the {\ttfamily profile} parameter to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Do not set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD} (1), or the method does not take effect.
\item This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.
\item After calling {\ttfamily set\+Voice\+Conversion\+Preset}, Agora does not recommend you to call the following methods, otherwise the effect set by {\ttfamily set\+Voice\+Conversion\+Preset} will be overwritten\+:
\begin{DoxyItemize}
\item {\ttfamily set\+Audio\+Effect\+Preset}
\item {\ttfamily set\+Audio\+Effect\+Parameters}
\item {\ttfamily set\+Voice\+Beautifier\+Preset}
\item {\ttfamily set\+Voice\+Beautifier\+Parameters}
\item {\ttfamily set\+Local\+Voice\+Pitch}
\item {\ttfamily set\+Local\+Voice\+Formant}
\item {\ttfamily set\+Local\+Voice\+Equalization}
\item {\ttfamily set\+Local\+Voice\+Reverb}
\end{DoxyItemize}
\item This method relies on the voice beautifier dynamic library {\ttfamily libagora\+\_\+audio\+\_\+beauty\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset voice conversion effects.
\begin{DoxyItemize}
\item V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+O\+FF\+: Turn off voice conversion effects and use the original voice.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+N\+E\+U\+T\+R\+AL\+: A gender-\/neutral voice. To avoid audio distortion, ensure that you use this enumerator to process a female-\/sounding voice.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+W\+E\+ET\+: A sweet voice. To avoid audio distortion, ensure that you use this enumerator to process a female-\/sounding voice.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+O\+L\+ID\+: A steady voice. To avoid audio distortion, ensure that you use this enumerator to process a male-\/sounding voice.
\item V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+B\+A\+SS\+: A deep voice. To avoid audio distortion, ensure that you use this enumerator to process a male-\/sounding voice.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf70d13931b9a2194cd96284b37dc071}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf70d13931b9a2194cd96284b37dc071}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioEffectParameters@{setAudioEffectParameters}}
\index{setAudioEffectParameters@{setAudioEffectParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioEffectParameters()}{setAudioEffectParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Effect\+Parameters (\begin{DoxyParamCaption}\item[{int}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets parameters for S\+DK preset audio effects. 

\begin{DoxySince}{Since}
v3.\+2.\+0
\end{DoxySince}
Call this method to set the following parameters for the local user who sends an audio stream\+:
\begin{DoxyItemize}
\item 3D voice effect\+: Sets the cycle period of the 3D voice effect.
\item Pitch correction effect\+: Sets the basic mode and tonic pitch of the pitch correction effect. Different songs have different modes and tonic pitches. Agora recommends bounding this method with interface elements to enable users to adjust the pitch correction interactively. After setting the audio parameters, all users in the channel can hear the effect. To achieve better vocal effects, it is recommended that you call the following A\+P\+Is before calling this method\+:
\item Call {\ttfamily set\+Audio\+Scenario} to set the audio scenario to high-\/quality audio scenario, namely {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3).
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to set the {\ttfamily profile} parameter to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item Do not set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD} (1), or the method does not take effect.
\item This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.
\item After calling {\ttfamily set\+Audio\+Effect\+Parameters}, Agora does not recommend you to call the following methods, otherwise the effect set by {\ttfamily set\+Audio\+Effect\+Parameters} will be overwritten\+:
\begin{DoxyItemize}
\item {\ttfamily set\+Audio\+Effect\+Preset}
\item {\ttfamily set\+Voice\+Beautifier\+Preset}
\item {\ttfamily set\+Local\+Voice\+Pitch}
\item {\ttfamily set\+Local\+Voice\+Equalization}
\item {\ttfamily set\+Local\+Voice\+Reverb}
\item {\ttfamily set\+Voice\+Beautifier\+Parameters}
\item {\ttfamily set\+Voice\+Conversion\+Preset}
\end{DoxyItemize}
\item This method relies on the voice beautifier dynamic library {\ttfamily libagora\+\_\+audio\+\_\+beauty\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset audio effects\+:
\begin{DoxyItemize}
\item {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE}, 3D voice effect\+:
\begin{DoxyItemize}
\item You need to set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+EO} (3) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5) before setting this enumerator; otherwise, the enumerator setting does not take effect.
\item If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.
\end{DoxyItemize}
\item {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, Pitch correction effect\+: 
\end{DoxyItemize}\\
\hline
{\em param1} & -\/ If you set {\ttfamily preset} to {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE}, {\ttfamily param1} sets the cycle period of the 3D voice effect. The value range is \mbox{[}1,60\mbox{]} and the unit is seconds. The default value is 10, indicating that the voice moves around you every 10 seconds.
\begin{DoxyItemize}
\item If you set {\ttfamily preset} to {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, {\ttfamily param1} indicates the basic mode of the pitch correction effect\+:
\begin{DoxyItemize}
\item {\ttfamily 1}\+: (Default) Natural major scale.
\item {\ttfamily 2}\+: Natural minor scale.
\item {\ttfamily 3}\+: Japanese pentatonic scale. 
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
{\em param2} & -\/ If you set {\ttfamily preset} to {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE} , you need to set {\ttfamily param2} to {\ttfamily 0}.
\begin{DoxyItemize}
\item If you set {\ttfamily preset} to {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, {\ttfamily param2} indicates the tonic pitch of the pitch correction effect\+:
\begin{DoxyItemize}
\item {\ttfamily 1}\+: A
\item {\ttfamily 2}\+: A\#
\item {\ttfamily 3}\+: B
\item {\ttfamily 4}\+: (Default) C
\item {\ttfamily 5}\+: C\#
\item {\ttfamily 6}\+: D
\item {\ttfamily 7}\+: D\#
\item {\ttfamily 8}\+: E
\item {\ttfamily 9}\+: F
\item {\ttfamily 10}\+: F\#
\item {\ttfamily 11}\+: G
\item {\ttfamily 12}\+: G\#
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af712699445c8ff8118f5d1027dc636ca}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af712699445c8ff8118f5d1027dc636ca}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVoiceBeautifierParameters@{setVoiceBeautifierParameters}}
\index{setVoiceBeautifierParameters@{setVoiceBeautifierParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceBeautifierParameters()}{setVoiceBeautifierParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Voice\+Beautifier\+Parameters (\begin{DoxyParamCaption}\item[{int}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets parameters for the preset voice beautifier effects. 

\begin{DoxySince}{Since}
3.\+3.\+0.
\end{DoxySince}
Call this method to set a gender characteristic and a reverberation effect for the singing beautifier effect. This method sets parameters for the local user who sends an audio stream. After setting the audio parameters, all users in the channel can hear the effect. To achieve better vocal effects, it is recommended that you call the following A\+P\+Is before calling this method\+:
\begin{DoxyItemize}
\item Call {\ttfamily set\+Audio\+Scenario} to set the audio scenario to high-\/quality audio scenario, namely {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} (3).
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to set the {\ttfamily profile} parameter to {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY} (4) or {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO} (5).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item Do not set the {\ttfamily profile} parameter in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile(int profile)}}} to {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD} (1), or the method does not take effect.
\item This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.
\item After calling {\ttfamily set\+Voice\+Beautifier\+Parameters}, Agora does not recommend calling the following methods, otherwise the effect set by {\ttfamily set\+Voice\+Beautifier\+Parameters} will be overwritten\+:
\begin{DoxyItemize}
\item {\ttfamily set\+Audio\+Effect\+Preset}
\item {\ttfamily set\+Audio\+Effect\+Parameters}
\item {\ttfamily set\+Voice\+Beautifier\+Preset}
\item {\ttfamily set\+Local\+Voice\+Pitch}
\item {\ttfamily set\+Local\+Voice\+Equalization}
\item {\ttfamily set\+Local\+Voice\+Reverb}
\item {\ttfamily set\+Voice\+Conversion\+Preset}
\end{DoxyItemize}
\item This method relies on the voice beautifier dynamic library {\ttfamily libagora\+\_\+audio\+\_\+beauty\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The option for the preset audio effect\+:
\begin{DoxyItemize}
\item {\ttfamily S\+I\+N\+G\+I\+N\+G\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+ER}\+: The singing beautifier effect. 
\end{DoxyItemize}\\
\hline
{\em param1} & The gender characteristics options for the singing voice\+:
\begin{DoxyItemize}
\item {\ttfamily 1}\+: A male-\/sounding voice.
\item {\ttfamily 2}\+: A female-\/sounding voice. 
\end{DoxyItemize}\\
\hline
{\em param2} & The reverberation effect options for the singing voice\+:
\begin{DoxyItemize}
\item {\ttfamily 1}\+: The reverberation effect sounds like singing in a small room.
\item {\ttfamily 2}\+: The reverberation effect sounds like singing in a large room.
\item {\ttfamily 3}\+: The reverberation effect sounds like singing in a hall.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a788c6bfca053863f685af72879540e58}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a788c6bfca053863f685af72879540e58}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVoiceConversionParameters@{setVoiceConversionParameters}}
\index{setVoiceConversionParameters@{setVoiceConversionParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceConversionParameters()}{setVoiceConversionParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Voice\+Conversion\+Parameters (\begin{DoxyParamCaption}\item[{int}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Set parameters for S\+DK preset voice conversion.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item reserved interface
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset audio effects. See \#\+V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+R\+E\+S\+ET. \\
\hline
{\em param1} & reserved. \\
\hline
{\em param2} & reserved. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43d9d2c9264cd08d6e89ebba43ffc1c3}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a43d9d2c9264cd08d6e89ebba43ffc1c3}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableSoundPositionIndication@{enableSoundPositionIndication}}
\index{enableSoundPositionIndication@{enableSoundPositionIndication}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableSoundPositionIndication()}{enableSoundPositionIndication()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Sound\+Position\+Indication (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables stereo panning for remote users. 

Ensure that you call this method before joining a channel to enable stereo panning for remote users so that the local user can track the position of a remote user by calling {\ttfamily set\+Remote\+Voice\+Position}.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable stereo panning for remote users\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable stereo panning.
\item {\ttfamily false}\+: Disable stereo panning.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf43fddf9cb4e3b76f5407ff6f6d57a4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf43fddf9cb4e3b76f5407ff6f6d57a4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteVoicePosition@{setRemoteVoicePosition}}
\index{setRemoteVoicePosition@{setRemoteVoicePosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVoicePosition()}{setRemoteVoicePosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Voice\+Position (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{double}]{pan,  }\item[{double}]{gain }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the 2D position (the position on the horizontal plane) of the remote user\textquotesingle{}s voice. 

This method sets the 2D position and volume of a remote user, so that the local user can easily hear and identify the remote user\textquotesingle{}s position. When the local user calls this method to set the voice position of a remote user, the voice difference between the left and right channels allows the local user to track the real-\/time position of the remote user, creating a sense of space. This method applies to massive multiplayer online games, such as Battle Royale games.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item For this method to work, enable stereo panning for remote users by calling the {\ttfamily enable\+Sound\+Position\+Indication} method before joining a channel.
\item For the best voice positioning, Agora recommends using a wired headset.
\item Call this method after joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the remote user. \\
\hline
{\em pan} & The voice position of the remote user. The value ranges from -\/1.\+0 to 1.\+0\+:
\begin{DoxyItemize}
\item 0.\+0\+: (Default) The remote voice comes from the front.
\item -\/1.\+0\+: The remote voice comes from the left.
\item 1.\+0\+: The remote voice comes from the right. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the remote user. The value ranges from 0.\+0 to 100.\+0. The default value is 100.\+0 (the original volume of the remote user). The smaller the value, the lower the volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae2258c8955f81bd5a6f2fc8a955af918}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae2258c8955f81bd5a6f2fc8a955af918}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableVoiceAITuner@{enableVoiceAITuner}}
\index{enableVoiceAITuner@{enableVoiceAITuner}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVoiceAITuner()}{enableVoiceAITuner()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Voice\+A\+I\+Tuner (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{Constants.\+V\+O\+I\+C\+E\+\_\+\+A\+I\+\_\+\+T\+U\+N\+E\+R\+\_\+\+T\+Y\+PE}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables the voice AI tuner. 

The voice AI tuner supports enhancing sound quality and adjusting tone style. Applicable scenarios\+: Social entertainment scenes including online K\+TV, online podcast and live streaming in showrooms, where high sound quality is required. Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the voice AI tuner\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables the voice AI tuner.
\item {\ttfamily false}\+: (Default) Disable the voice AI tuner. 
\end{DoxyItemize}\\
\hline
{\em type} & Voice AI tuner sound types, see {\ttfamily V\+O\+I\+C\+E\+\_\+\+A\+I\+\_\+\+T\+U\+N\+E\+R\+\_\+\+T\+Y\+PE}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a18c4fcacfc39625ae8a47e66564bd8f4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a18c4fcacfc39625ae8a47e66564bd8f4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startAudioMixing@{startAudioMixing}}
\index{startAudioMixing@{startAudioMixing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioMixing()}{startAudioMixing()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Audio\+Mixing (\begin{DoxyParamCaption}\item[{String}]{file\+Path,  }\item[{boolean}]{loopback,  }\item[{int}]{cycle }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts playing the music file. 

This method supports playing U\+RI files starting with {\ttfamily content\+://}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. If the local music file does not exist, the S\+DK does not support the file format, or the the S\+DK cannot access the music file U\+RL, the S\+DK reports A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+A\+N\+\_\+\+N\+O\+T\+\_\+\+O\+P\+EN. Call timing\+: You can call this method either before or after joining a channel. Related callbacks\+: A successful method call triggers the {\ttfamily on\+Audio\+Mixing\+State\+Changed} ({\ttfamily A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG}) callback. When the audio mixing file playback finishes, the S\+DK triggers the {\ttfamily on\+Audio\+Mixing\+State\+Changed} ({\ttfamily A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+O\+P\+P\+ED}) callback on the local client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you call this method to play short sound effect files, you may encounter playback failure. Agora recommends using {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)} instead to play such files.
\item If you need to call this method multiple times, ensure that the time interval between calling this method is more than 500 ms.
\item On Android, there are following considerations\+:
\begin{DoxyItemize}
\item To use this method, ensure that the Android device is v4.\+2 or later, and the A\+PI version is v16 or later.
\item If you need to play an online music file, Agora does not recommend using the redirected U\+RL address. Some Android devices may fail to open a redirected U\+RL address.
\item If you call this method on an emulator, ensure that the music file is in the {\ttfamily /sdcard/} directory and the format is M\+P3.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & The file path. The S\+DK supports U\+RI addresses starting with {\ttfamily content\+://}, paths starting with {\ttfamily /assets/}, U\+R\+Ls and absolute paths of local files. The absolute path needs to be accurate to the file name and extension. Supported audio formats include M\+P3, A\+AC, M4A, M\+P4, W\+AV, and 3GP. See {\ttfamily Supported Audio Formats}. Attention\+: If you have preloaded an audio effect into memory by calling {\ttfamily preload\+Effect}, ensure that the value of this parameter is the same as that of {\ttfamily file\+Path} in {\ttfamily preload\+Effect}. \\
\hline
{\em loopback} & Whether to only play music files on the local client\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Only play music files on the local client so that only the local user can hear the music.
\item {\ttfamily false}\+: Publish music files to remote clients so that both the local user and remote users can hear the music. 
\end{DoxyItemize}\\
\hline
{\em cycle} & The number of times the music file plays.
\begin{DoxyItemize}
\item $>$ 0\+: The number of times for playback. For example, 1 represents playing 1 time.
\item -\/1\+: Play the audio file in an infinite loop.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/3\+: The S\+DK is not ready.
\begin{DoxyItemize}
\item The audio module is disabled.
\item The program is not complete.
\item The initialization of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} fails. Reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8c0a30cd46f79dcb24d6e91540270142}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8c0a30cd46f79dcb24d6e91540270142}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableSpatialAudio@{enableSpatialAudio}}
\index{enableSpatialAudio@{enableSpatialAudio}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableSpatialAudio()}{enableSpatialAudio()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Spatial\+Audio (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables the spatial audio effect. 

After enabling the spatial audio effect, you can call {\ttfamily set\+Remote\+User\+Spatial\+Audio\+Params} to set the spatial audio effect parameters of the remote user.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item This method relies on the spatial audio dynamic library {\ttfamily libagora\+\_\+spatial\+\_\+audio\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled normally.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the spatial audio effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the spatial audio effect.
\item {\ttfamily false}\+: Disable the spatial audio effect.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7c83d6073cb7d5b3144a1581ff9463b1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7c83d6073cb7d5b3144a1581ff9463b1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteUserSpatialAudioParams@{setRemoteUserSpatialAudioParams}}
\index{setRemoteUserSpatialAudioParams@{setRemoteUserSpatialAudioParams}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteUserSpatialAudioParams()}{setRemoteUserSpatialAudioParams()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+User\+Spatial\+Audio\+Params (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_spatial_audio_params}{Spatial\+Audio\+Params}}}]{params }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the spatial audio effect parameters of the remote user. 

Call this method after {\ttfamily enable\+Spatial\+Audio}. After successfully setting the spatial audio effect parameters of the remote user, the local user can hear the remote user with a sense of space.


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. This parameter must be the same as the user ID passed in when the user joined the channel. \\
\hline
{\em params} & The spatial audio parameters. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_spatial_audio_params}{Spatial\+Audio\+Params}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63d7b44e0c112170d94c3271e05fcb6f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63d7b44e0c112170d94c3271e05fcb6f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteVideoSubscriptionOptions@{setRemoteVideoSubscriptionOptions}}
\index{setRemoteVideoSubscriptionOptions@{setRemoteVideoSubscriptionOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVideoSubscriptionOptions()}{setRemoteVideoSubscriptionOptions()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Video\+Subscription\+Options (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_subscription_options}{Video\+Subscription\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Options for subscribing to remote video streams. 

When a remote user has enabled dual-\/stream mode, you can call this method to choose the option for subscribing to the video streams sent by the remote user. The default subscription behavior of the S\+DK for remote video streams depends on the type of registered video observer\+:
\begin{DoxyItemize}
\item If the {\ttfamily I\+Video\+Frame\+Observer} observer is registered, the default is to subscribe to both raw data and encoded data.
\item If the {\ttfamily I\+Video\+Encoded\+Frame\+Observer} observer is registered, the default is to subscribe only to the encoded data.
\item If both types of observers are registered, the default behavior follows the last registered video observer. For example, if the last registered observer is the {\ttfamily I\+Video\+Frame\+Observer} observer, the default is to subscribe to both raw data and encoded data. If you want to modify the default behavior, or set different subscription options for different {\ttfamily uids}, you can call this method to set it.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the remote user. \\
\hline
{\em options} & The video subscription options. See {\ttfamily Video\+Subscription\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeed0db7baf58dae9cb35be092b7b7af7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeed0db7baf58dae9cb35be092b7b7af7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAINSMode@{setAINSMode}}
\index{setAINSMode@{setAINSMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAINSMode()}{setAINSMode()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+A\+I\+N\+S\+Mode (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{int}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets whether to enable the AI ​​noise suppression function and set the noise suppression mode. 

You can call this method to enable AI noise suppression function. Once enabled, the S\+DK automatically detects and reduces stationary and non-\/stationary noise from your audio on the premise of ensuring the quality of human voice. Stationary noise refers to noise signal with constant average statistical properties and negligibly small fluctuations of level within the period of observation. Common sources of stationary noises are\+:
\begin{DoxyItemize}
\item Television;
\item Air conditioner;
\item Machinery, etc. Non-\/stationary noise refers to noise signal with huge fluctuations of level within the period of observation; common sources of non-\/stationary noises are\+:
\item Thunder;
\item Explosion;
\item Cracking, etc. Applicable scenarios\+: In scenarios such as co-\/streaming, online education and video meeting, this function can detect and reduce background noises to improve experience. Call timing\+: You can call this method either before or after joining a channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method relies on the AI noise suppression dynamic library {\ttfamily libagora\+\_\+ai\+\_\+noise\+\_\+suppression\+\_\+extension.\+so}. If the dynamic library is deleted, the function cannot be enabled.
\item Agora does not recommend enabling this function on devices running Android 6.\+0 and below.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the AI noise suppression function\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the AI noise suppression.
\item {\ttfamily false}\+: (Default) Disable the AI noise suppression. 
\end{DoxyItemize}\\
\hline
{\em mode} & The AI noise suppression modes\+:
\begin{DoxyItemize}
\item 0\+: (Default) Balance mode. This mode allows for a balanced performance on noice suppression and time delay.
\item 1\+: Aggressive mode. In scenarios where high performance on noise suppression is required, such as live streaming outdoor events, this mode reduces nosies more dramatically, but sometimes may affect the original character of the audio.
\item 2\+: Aggressive mode with low latency. The noise suppression delay of this mode is about only half of that of the balance and aggressive modes. It is suitable for scenarios that have high requirements on noise suppression with low latency, such as sing together online in real time.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startAudioMixing@{startAudioMixing}}
\index{startAudioMixing@{startAudioMixing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioMixing()}{startAudioMixing()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Audio\+Mixing (\begin{DoxyParamCaption}\item[{String}]{file\+Path,  }\item[{boolean}]{loopback,  }\item[{int}]{cycle,  }\item[{int}]{start\+Pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts playing the music file. 

This method supports playing U\+RI files starting with {\ttfamily content\+://}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. If the local music file does not exist, the S\+DK does not support the file format, or the the S\+DK cannot access the music file U\+RL, the S\+DK reports A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+A\+N\+\_\+\+N\+O\+T\+\_\+\+O\+P\+EN. Call timing\+: You can call this method either before or after joining a channel. Related callbacks\+: A successful method call triggers the {\ttfamily on\+Audio\+Mixing\+State\+Changed} ({\ttfamily A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG}) callback. When the audio mixing file playback finishes, the S\+DK triggers the {\ttfamily on\+Audio\+Mixing\+State\+Changed} ({\ttfamily A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+O\+P\+P\+ED}) callback on the local client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you call this method to play short sound effect files, you may encounter playback failure. Agora recommends using {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)} instead to play such files.
\item If you need to call this method multiple times, ensure that the time interval between calling this method is more than 500 ms.
\item On Android, there are following considerations\+:
\begin{DoxyItemize}
\item To use this method, ensure that the Android device is v4.\+2 or later, and the A\+PI version is v16 or later.
\item If you need to play an online music file, Agora does not recommend using the redirected U\+RL address. Some Android devices may fail to open a redirected U\+RL address.
\item If you call this method on an emulator, ensure that the music file is in the {\ttfamily /sdcard/} directory and the format is M\+P3.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & File path\+:
\begin{DoxyItemize}
\item Android\+: The file path, which needs to be accurate to the file name and suffix. Agora supports U\+RL addresses, absolute paths, or file paths that start with {\ttfamily /assets/}. You might encounter permission issues if you use an absolute path to access a local file, so Agora recommends using a U\+RI address instead. For example\+: {\ttfamily content\+://com.android.\+providers.\+media.\+documents/document/audio\%3A14441} 
\end{DoxyItemize}\\
\hline
{\em loopback} & Whether to only play music files on the local client\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Only play music files on the local client so that only the local user can hear the music.
\item {\ttfamily false}\+: Publish music files to remote clients so that both the local user and remote users can hear the music. 
\end{DoxyItemize}\\
\hline
{\em cycle} & The number of times the music file plays.
\begin{DoxyItemize}
\item $>$ 0\+: The number of times for playback. For example, 1 represents playing 1 time.
\item -\/1\+: Play the audio file in an infinite loop. 
\end{DoxyItemize}\\
\hline
{\em start\+Pos} & The playback position (ms) of the music file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/3\+: The S\+DK is not ready.
\begin{DoxyItemize}
\item The audio module is disabled.
\item The program is not complete.
\item The initialization of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} fails. Reinitialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d9f13f4f48f9a2737a27c1b55ac6145}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d9f13f4f48f9a2737a27c1b55ac6145}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopAudioMixing@{stopAudioMixing}}
\index{stopAudioMixing@{stopAudioMixing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAudioMixing()}{stopAudioMixing()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops playing the music file. 

After calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing(\+String file\+Path, boolean loopback, int cycle, int start\+Pos)}}} to play a music file, you can call this method to stop the playing. If you only need to pause the playback, call {\ttfamily pause\+Audio\+Mixing}. Call timing\+: Call this method after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3c26a5f7908c84557180af289301457}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3c26a5f7908c84557180af289301457}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pauseAudioMixing@{pauseAudioMixing}}
\index{pauseAudioMixing@{pauseAudioMixing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAudioMixing()}{pauseAudioMixing()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pause\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pauses playing and mixing the music file. 

After calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing(\+String file\+Path, boolean loopback, int cycle, int start\+Pos)}}} to play a music file, you can call this method to pause the playing. If you need to stop the playback, call {\ttfamily stop\+Audio\+Mixing}. Call timing\+: Call this method after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1b2b908018d836a60de5495b5db8adb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1b2b908018d836a60de5495b5db8adb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!resumeAudioMixing@{resumeAudioMixing}}
\index{resumeAudioMixing@{resumeAudioMixing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAudioMixing()}{resumeAudioMixing()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+resume\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Resumes playing and mixing the music file. 

After calling {\ttfamily pause\+Audio\+Mixing} to pause the playback, you can call this method to resume the playback. Call timing\+: Call this method after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4c5538d92e250748052d7617876526ea}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4c5538d92e250748052d7617876526ea}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustAudioMixingVolume@{adjustAudioMixingVolume}}
\index{adjustAudioMixingVolume@{adjustAudioMixingVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingVolume()}{adjustAudioMixingVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Audio\+Mixing\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the volume during audio mixing. 

This method adjusts the audio mixing volume on both the local client and remote clients. Call timing\+: Call this method after {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)}.

\begin{DoxyNote}{Note}
This method does not affect the volume of the audio file set in the \`{}play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)\`{} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em volume} & Audio mixing volume. The value ranges between 0 and 100. The default value is 100, which means the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8884d20e687221f4f1ae8315cd172d8d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8884d20e687221f4f1ae8315cd172d8d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustAudioMixingPlayoutVolume@{adjustAudioMixingPlayoutVolume}}
\index{adjustAudioMixingPlayoutVolume@{adjustAudioMixingPlayoutVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingPlayoutVolume()}{adjustAudioMixingPlayoutVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Audio\+Mixing\+Playout\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the volume of audio mixing for local playback. 

Call timing\+: You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of audio mixing for local playback. The value ranges between 0 and 100 (default). 100 represents the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb4c28214a9adc6f49192d53a757911c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb4c28214a9adc6f49192d53a757911c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustAudioMixingPublishVolume@{adjustAudioMixingPublishVolume}}
\index{adjustAudioMixingPublishVolume@{adjustAudioMixingPublishVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingPublishVolume()}{adjustAudioMixingPublishVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Audio\+Mixing\+Publish\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the volume of audio mixing for publishing. 

This method adjusts the volume of audio mixing for publishing (sending to other users). Call timing\+: Call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of audio mixing for local playback. The value ranges between 0 and 100 (default). 100 represents the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad4bf1c84245a27aa1300e2dc394a827e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad4bf1c84245a27aa1300e2dc394a827e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioMixingPlayoutVolume@{getAudioMixingPlayoutVolume}}
\index{getAudioMixingPlayoutVolume@{getAudioMixingPlayoutVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingPlayoutVolume()}{getAudioMixingPlayoutVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Mixing\+Playout\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the audio mixing volume for local playback. 

You can call this method to get the local playback volume of the mixed audio file, which helps in troubleshooting volume‑related issues. Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing(\+String file\+Path, boolean loopback, int cycle, int start\+Pos)}}} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The audio mixing volume, if this method call succeeds. The value range is \mbox{[}0,100\mbox{]}.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7711fae2a3361f8fe6b47915228a5de2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7711fae2a3361f8fe6b47915228a5de2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioMixingPublishVolume@{getAudioMixingPublishVolume}}
\index{getAudioMixingPublishVolume@{getAudioMixingPublishVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingPublishVolume()}{getAudioMixingPublishVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Mixing\+Publish\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the audio mixing volume for publishing. 

This method helps troubleshoot audio volume‑related issues.

\begin{DoxyNote}{Note}
You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The audio mixing volume, if this method call succeeds. The value range is \mbox{[}0,100\mbox{]}.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6a866bfaa0cdf575feaf82e899bb740b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6a866bfaa0cdf575feaf82e899bb740b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioMixingDuration@{getAudioMixingDuration}}
\index{getAudioMixingDuration@{getAudioMixingDuration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingDuration()}{getAudioMixingDuration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Mixing\+Duration (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the duration (ms) of the music file. 

Retrieves the total duration (ms) of the audio. Call timing\+: Call this method after {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The audio mixing duration, if this method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a69d5eed20fd0b6462a2a83fd8592ec24}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a69d5eed20fd0b6462a2a83fd8592ec24}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioMixingCurrentPosition@{getAudioMixingCurrentPosition}}
\index{getAudioMixingCurrentPosition@{getAudioMixingCurrentPosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingCurrentPosition()}{getAudioMixingCurrentPosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Mixing\+Current\+Position (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the playback position (ms) of the music file. 

Retrieves the playback position (ms) of the audio.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.
\item If you need to call {\ttfamily get\+Audio\+Mixing\+Current\+Position} multiple times, ensure that the time interval between calling this method is more than 500 ms.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The current playback position (ms) of the audio mixing, if this method call succeeds. 0 represents that the current music file does not start playing.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae0ea7cd0f5f45044a1378a2ed5c9cd1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae0ea7cd0f5f45044a1378a2ed5c9cd1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioMixingPosition@{setAudioMixingPosition}}
\index{setAudioMixingPosition@{setAudioMixingPosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingPosition()}{setAudioMixingPosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Mixing\+Position (\begin{DoxyParamCaption}\item[{int}]{pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the audio mixing position. 

Call this method to set the playback position of the music file to a different starting position (the default plays from the beginning). Call timing\+: Call this method after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing(\+String file\+Path, boolean loopback, int cycle, int start\+Pos)}}} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.


\begin{DoxyParams}{Parameters}
{\em pos} & Integer. The playback position (ms).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aabb75250d3a6f15dfa888d867cffe90d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aabb75250d3a6f15dfa888d867cffe90d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioMixingDualMonoMode@{setAudioMixingDualMonoMode}}
\index{setAudioMixingDualMonoMode@{setAudioMixingDualMonoMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingDualMonoMode()}{setAudioMixingDualMonoMode()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Mixing\+Dual\+Mono\+Mode (\begin{DoxyParamCaption}\item[{Constants.\+Audio\+Mixing\+Dual\+Mono\+Mode}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the channel mode of the current audio file. 

In a stereo music file, the left and right channels can store different audio data. According to your needs, you can set the channel mode to original mode, left channel mode, right channel mode, or mixed channel mode. Applicable scenarios\+: For example, in the K\+TV scenario, the left channel of the music file stores the musical accompaniment, and the right channel stores the original singer\textquotesingle{}s vocals. You can set according to actual needs\+:
\begin{DoxyItemize}
\item If you only want to hear the accompaniment, use this method to set the audio file\textquotesingle{}s channel mode to left channel mode.
\item If you need to hear both the accompaniment and the original vocals simultaneously, call this method to set the channel mode to mixed mode. Call timing\+: Call this method after {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
This method only applies to stereo audio files.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mode} & The channel mode. See {\ttfamily Audio\+Mixing\+Dual\+Mono\+Mode}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7aae18cb7483e2eecd184896cd23cbdc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7aae18cb7483e2eecd184896cd23cbdc}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioMixingPitch@{setAudioMixingPitch}}
\index{setAudioMixingPitch@{setAudioMixingPitch}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingPitch()}{setAudioMixingPitch()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Mixing\+Pitch (\begin{DoxyParamCaption}\item[{int}]{pitch }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the pitch of the local music file. 

When a local music file is mixed with a local human voice, call this method to set the pitch of the local music file only. Call timing\+: You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.


\begin{DoxyParams}{Parameters}
{\em pitch} & Sets the pitch of the local music file by the chromatic scale. The default value is 0, which means keeping the original pitch. The value ranges from -\/12 to 12, and the pitch value between consecutive values is a chromatic value. The greater the absolute value of this parameter, the higher or lower the pitch of the local music file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e8317f510164a2b313accba8a26dd5d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e8317f510164a2b313accba8a26dd5d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAudioMixingPlaybackSpeed@{setAudioMixingPlaybackSpeed}}
\index{setAudioMixingPlaybackSpeed@{setAudioMixingPlaybackSpeed}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingPlaybackSpeed()}{setAudioMixingPlaybackSpeed()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Audio\+Mixing\+Playback\+Speed (\begin{DoxyParamCaption}\item[{int}]{speed }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the playback speed of the current audio file. 

Ensure you call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} callback reporting the state as {\ttfamily A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG}.


\begin{DoxyParams}{Parameters}
{\em speed} & The playback speed. Agora recommends that you set this to a value between 50 and 400, defined as follows\+:
\begin{DoxyItemize}
\item 50\+: Half the original speed.
\item 100\+: The original speed.
\item 400\+: 4 times the original speed.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1372d948223d44bc834243eea0ff8114}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1372d948223d44bc834243eea0ff8114}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!selectAudioTrack@{selectAudioTrack}}
\index{selectAudioTrack@{selectAudioTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{selectAudioTrack()}{selectAudioTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+select\+Audio\+Track (\begin{DoxyParamCaption}\item[{int}]{audio\+Index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Selects the audio track used during playback. 

After getting the track index of the audio file, you can call this method to specify any track to play. For example, if different tracks of a multi-\/track file store songs in different languages, you can call this method to set the playback language.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item For the supported formats of audio files, see {\ttfamily \href{https://docs.agora.io/en/help/general-product-inquiry/audio_format}{\texttt{ https\+://docs.\+agora.\+io/en/help/general-\/product-\/inquiry/audio\+\_\+format}}\#extended-\/audio-\/file-\/formats}.
\item You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em audio\+Index} & The audio track you want to specify. The value should be greater than 0 and less than that of returned by {\ttfamily get\+Audio\+Track\+Count}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab9319a3aa51fbef5baab307bbff61e4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab9319a3aa51fbef5baab307bbff61e4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioTrackCount@{getAudioTrackCount}}
\index{getAudioTrackCount@{getAudioTrackCount}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioTrackCount()}{getAudioTrackCount()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Track\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the index of audio tracks of the current music file. 

\begin{DoxyNote}{Note}
You need to call this method after calling {\ttfamily start\+Audio\+Mixing(String file\+Path, boolean loopback, int cycle, int start\+Pos)} and receiving the {\ttfamily on\+Audio\+Mixing\+State\+Changed} {\ttfamily (A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG)} callback.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The S\+DK returns the index of the audio tracks if the method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a566145bbefcc8f58a67c20b1ea2e4054}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a566145bbefcc8f58a67c20b1ea2e4054}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getAudioEffectManager@{getAudioEffectManager}}
\index{getAudioEffectManager@{getAudioEffectManager}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioEffectManager()}{getAudioEffectManager()}}
{\footnotesize\ttfamily abstract I\+Audio\+Effect\+Manager io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Audio\+Effect\+Manager (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the {\ttfamily I\+Audio\+Effect\+Manager} class to manage the audio effect files. 

\begin{DoxyReturn}{Returns}
{\ttfamily I\+Audio\+Effect\+Manager} 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8a868bc783c424a88c02fee7e9d4dbed}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8a868bc783c424a88c02fee7e9d4dbed}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startAudioRecording@{startAudioRecording}}
\index{startAudioRecording@{startAudioRecording}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioRecording()}{startAudioRecording()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Audio\+Recording (\begin{DoxyParamCaption}\item[{String}]{file\+Path,  }\item[{int}]{quality }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts client-\/side recording. 

The S\+DK supports recording on the client side during a call. This method records the audio of all users in the channel and generates a recording file that contains all users\textquotesingle{} voices. The recording file only supports the following formats\+:
\begin{DoxyItemize}
\item {\ttfamily .wav}\+: Large file size with high audio fidelity.
\item {\ttfamily .aac}\+: Smaller file size with some loss of audio fidelity.
\end{DoxyItemize}

Make sure that the specified directory exists and is writable. You must call this A\+PI after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}}. If you call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab4af0c1df4b68eb898b1843dd0671702}{leave\+Channel(\+Leave\+Channel\+Options options)}}} while recording is in progress, the recording stops automatically.

\begin{DoxyNote}{Note}
When you call this method, the default recording sample rate is 32 k\+Hz and cannot be changed.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & The absolute path where the recording file is saved locally, including the file name and extension. For example\+: {\ttfamily /sdcard/emulated/0/audio.aac}. Note\+: Make sure that the specified path exists and is writable. \\
\hline
{\em quality} & Recording quality.
\begin{DoxyItemize}
\item 0\+: Low quality. Sample rate is 32 k\+Hz. The file size for 10 minutes of recording is approximately 1.\+2 MB.
\item 1\+: Medium quality. Sample rate is 32 k\+Hz. The file size for 10 minutes of recording is approximately 2 MB.
\item 2\+: High quality. Sample rate is 32 k\+Hz. The file size for 10 minutes of recording is approximately 3.\+75 MB.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Codes} for details and troubleshooting. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedb9b84a3afd1c5b7316112710b21d8f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedb9b84a3afd1c5b7316112710b21d8f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startAudioRecording@{startAudioRecording}}
\index{startAudioRecording@{startAudioRecording}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioRecording()}{startAudioRecording()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Audio\+Recording (\begin{DoxyParamCaption}\item[{Audio\+Recording\+Configuration}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts client-\/side recording and applies recording configurations. 

The S\+DK supports recording on the client side during a voice calling, voice-\/only interaction. After calling this method, you can record the audio of users in the channel and obtain a recording file. The recording file supports the following formats only\+:
\begin{DoxyItemize}
\item W\+AV\+: Higher audio fidelity with larger file size. For example, with a sampling rate of 32000 Hz, a 10-\/minute recording results in a file of approximately 73 MB.
\item A\+AC\+: Lower audio fidelity with smaller file size. For example, with a sampling rate of 32000 Hz and a recording quality of {\ttfamily A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+M\+E\+D\+I\+UM}, a 10-\/minute recording results in a file of approximately 2 MB. Recording automatically stops when the user leaves the channel. Call timing\+: You must call this method after joining the channel.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em config} & Recording configuration. See {\ttfamily Audio\+Recording\+Configuration} for details.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Code} for details and troubleshooting tips. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60a05708b6b2d40b9f3e2bd7aadda143}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60a05708b6b2d40b9f3e2bd7aadda143}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopAudioRecording@{stopAudioRecording}}
\index{stopAudioRecording@{stopAudioRecording}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAudioRecording()}{stopAudioRecording()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Audio\+Recording (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops client-\/side recording. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Codes} for details and troubleshooting suggestions. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7213f4169e8c3425fc3f6876bf8a1cdc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7213f4169e8c3425fc3f6876bf8a1cdc}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startEchoTest@{startEchoTest}}
\index{startEchoTest@{startEchoTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startEchoTest()}{startEchoTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Echo\+Test (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_echo_test_configuration}{Echo\+Test\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts an audio device loopback test. 

To test whether the user\textquotesingle{}s local sending and receiving streams are normal, you can call this method to perform an audio and video call loop test, which tests whether the audio and video devices and the user\textquotesingle{}s upstream and downstream networks are working properly. After starting the test, the user needs to make a sound or face the camera. The audio or video is output after about two seconds. If the audio playback is normal, the audio device and the user\textquotesingle{}s upstream and downstream networks are working properly; if the video playback is normal, the video device and the user\textquotesingle{}s upstream and downstream networks are working properly. Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item When calling in a channel, make sure that no audio or video stream is being published.
\item After calling this method, call {\ttfamily stop\+Echo\+Test} to end the test; otherwise, the user cannot perform the next audio and video call loop test and cannot join the channel.
\item In live streaming scenarios, this method only applies to hosts.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The configuration of the audio and video call loop test. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_echo_test_configuration}{Echo\+Test\+Configuration}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf712c76582d770457bf8f0b773312fe}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf712c76582d770457bf8f0b773312fe}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopEchoTest@{stopEchoTest}}
\index{stopEchoTest@{stopEchoTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopEchoTest()}{stopEchoTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Echo\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the audio call test. 

After calling {\ttfamily start\+Echo\+Test}, you must call this method to end the test; otherwise, the user cannot perform the next audio and video call loop test and cannot join the channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/5(E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED)\+: Failed to stop the echo test. The echo test may not be running. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad00ae90f0aa7008e0008fe6fcc547f22}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad00ae90f0aa7008e0008fe6fcc547f22}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startLastmileProbeTest@{startLastmileProbeTest}}
\index{startLastmileProbeTest@{startLastmileProbeTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startLastmileProbeTest()}{startLastmileProbeTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Lastmile\+Probe\+Test (\begin{DoxyParamCaption}\item[{Lastmile\+Probe\+Config}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts the last mile network probe test. 

This method starts the last-\/mile network probe test before joining a channel to get the uplink and downlink last mile network statistics, including the bandwidth, packet loss, jitter, and round-\/trip time (R\+TT). Call timing\+: Do not call other methods before receiving the {\ttfamily on\+Lastmile\+Quality} and {\ttfamily on\+Lastmile\+Probe\+Result} callbacks. Otherwise, the callbacks may be interrupted. Related callbacks\+: After successfully calling this method, the S\+DK sequentially triggers the following 2 callbacks\+:
\begin{DoxyItemize}
\item {\ttfamily on\+Lastmile\+Quality}\+: The S\+DK triggers this callback within two seconds depending on the network conditions. This callback rates the network conditions and is more closely linked to the user experience.
\item {\ttfamily on\+Lastmile\+Probe\+Result}\+: The S\+DK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-\/time statistics of the network conditions and is more objective.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em config} & The configurations of the last-\/mile network probe test. See {\ttfamily Lastmile\+Probe\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae557f56f8fd4b808bb5c5902d0f1acc5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae557f56f8fd4b808bb5c5902d0f1acc5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopLastmileProbeTest@{stopLastmileProbeTest}}
\index{stopLastmileProbeTest@{stopLastmileProbeTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopLastmileProbeTest()}{stopLastmileProbeTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Lastmile\+Probe\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the last mile network probe test. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab202ce0e42ee7e6674d04da41052541}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab202ce0e42ee7e6674d04da41052541}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalAudioSource@{setExternalAudioSource}}
\index{setExternalAudioSource@{setExternalAudioSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalAudioSource()}{setExternalAudioSource()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Audio\+Source (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{int}]{sample\+Rate,  }\item[{int}]{channels }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the external audio source. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000041}{Deprecated}}]This method is deprecated. Use create\+Custom\+Audio\+Track(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_track_type}{Constants.\+Audio\+Track\+Type}} track\+Type, Audio\+Track\+Config config) instead.\end{DoxyRefDesc}


Call this method before calling {\ttfamily join\+Channel(String token, String channel\+Id, String optional\+Info, int uid)} and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}{start\+Preview()}}}.


\begin{DoxyParams}{Parameters}
{\em enabled} & -\/ {\ttfamily true}\+: Enable the external audio source.
\begin{DoxyItemize}
\item {\ttfamily false}\+: (Default) Disable the external audio source. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The sample rate (Hz) of the external audio source, which can be set as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channels} & The number of audio channels of the external audio source\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalAudioSink@{setExternalAudioSink}}
\index{setExternalAudioSink@{setExternalAudioSink}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalAudioSink()}{setExternalAudioSink()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Audio\+Sink (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{int}]{sample\+Rate,  }\item[{int}]{channels }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the external audio sink. 

After enabling the external audio sink, you can call {\ttfamily pull\+Playback\+Audio\+Frame(byte\mbox{[}\mbox{]} data, int length\+In\+Byte)} to pull remote audio frames. The app can process the remote audio and play it with the audio effects that you want. Applicable scenarios\+: This method applies to scenarios where you want to use external audio data for playback. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}
Once you enable the external audio sink, the app will not retrieve any audio data from the {\ttfamily on\+Playback\+Audio\+Frame} callback.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable or disable the external audio sink\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables the external audio sink.
\item {\ttfamily false}\+: (Default) Disables the external audio sink. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The sample rate (Hz) of the external audio sink, which can be set as 16000, 32000, 44100, or 48000. \\
\hline
{\em channels} & The number of audio channels of the external audio sink\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7ffbff878b86717e801cc7ef2b338b2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7ffbff878b86717e801cc7ef2b338b2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalRemoteEglContext@{setExternalRemoteEglContext}}
\index{setExternalRemoteEglContext@{setExternalRemoteEglContext}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalRemoteEglContext()}{setExternalRemoteEglContext()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Remote\+Egl\+Context (\begin{DoxyParamCaption}\item[{Object}]{egl\+Context }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the E\+GL context for rendering remote video streams. 

This method can replace the default remote E\+GL context within the S\+DK, making it easier to manage the E\+GL context. When the engine is destroyed, the S\+DK will automatically release the E\+GL context. Applicable scenarios\+: This method is suitable for using a custom video rendering method instead of the default S\+DK rendering method to render remote video frames in Texture format. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em egl\+Context} & The E\+GL context for rendering remote video streams.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae60153bc207ded1ced8773eb797b8b26}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae60153bc207ded1ced8773eb797b8b26}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pullPlaybackAudioFrame@{pullPlaybackAudioFrame}}
\index{pullPlaybackAudioFrame@{pullPlaybackAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pullPlaybackAudioFrame()}{pullPlaybackAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pull\+Playback\+Audio\+Frame (\begin{DoxyParamCaption}\item[{byte\mbox{[}$\,$\mbox{]}}]{data,  }\item[{int}]{length\+In\+Byte }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pulls the remote audio data. 

After a successful call of this method, the app pulls the decoded and mixed audio data for playback. Call timing\+: Call this method after joining a channel. Before calling this method, call {\ttfamily set\+External\+Audio\+Sink} {\ttfamily (enabled\+: true)} to notify the app to enable and set the external audio rendering.

\begin{DoxyNote}{Note}
Both this method and the {\ttfamily on\+Playback\+Audio\+Frame} callback can be used to get audio data after remote mixing. After calling {\ttfamily set\+External\+Audio\+Sink} to enable external audio rendering, the app will no longer be able to obtain data from the {\ttfamily on\+Playback\+Audio\+Frame} callback. Therefore, you should choose between this method and the {\ttfamily on\+Playback\+Audio\+Frame} callback based on your actual business requirements. The specific distinctions between them are as follows\+:
\begin{DoxyItemize}
\item After calling this method, the app automatically pulls the audio data from the S\+DK. By setting the audio data parameters, the S\+DK adjusts the frame buffer to help the app handle latency, effectively avoiding audio playback jitter.
\item After registering the {\ttfamily on\+Playback\+Audio\+Frame} callback, the S\+DK sends the audio data to the app through the callback. Any delay in processing the audio frames may result in audio jitter. This method is only used for retrieving audio data after remote mixing. If you need to get audio data from different audio processing stages such as capture and playback, you can register the corresponding callbacks by calling {\ttfamily register\+Audio\+Frame\+Observer}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em data} & The remote audio data to be pulled. The data type is {\ttfamily byte\mbox{[}\mbox{]}}. \\
\hline
{\em length\+In\+Byte} & The data length (byte). The value of this parameter is related to the audio duration, and the values of the {\ttfamily sample\+Rate} and {\ttfamily channels} parameters that you set in {\ttfamily set\+External\+Audio\+Sink}. {\ttfamily length\+In\+Byte} = {\ttfamily sample\+Rate}/1000 × 2 × {\ttfamily channels} × audio duration (ms).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2daa2138791b3225790d640d009e7b50}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2daa2138791b3225790d640d009e7b50}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pullPlaybackAudioFrame@{pullPlaybackAudioFrame}}
\index{pullPlaybackAudioFrame@{pullPlaybackAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pullPlaybackAudioFrame()}{pullPlaybackAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pull\+Playback\+Audio\+Frame (\begin{DoxyParamCaption}\item[{Byte\+Buffer}]{data,  }\item[{int}]{length\+In\+Byte }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pulls the remote audio data. 

Before calling this method, call the {\ttfamily set\+External\+Audio\+Sink(enabled\+: true)} method to notify the app to enable and set the external audio sink. After a successful method call, the app pulls the decoded and mixed audio data for playback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\item The difference between this method and the {\ttfamily on\+Playback\+Audio\+Frame} callback is as follows\+:
\begin{DoxyItemize}
\item {\ttfamily on\+Playback\+Audio\+Frame}\+: The S\+DK sends the audio data to the app through this callback. Any delay in processing the audio frames may result in audio jitter.
\item {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae60153bc207ded1ced8773eb797b8b26}{pull\+Playback\+Audio\+Frame(byte\mbox{[}$\,$\mbox{]} data, int length\+In\+Byte)}}}\+: The app pulls the remote audio data. After setting the audio data parameters, the S\+DK adjusts the frame buffer and avoids problems caused by jitter in the external audio playback.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em data} & The remote audio data to be pulled. The data type is {\ttfamily Byte\+Buffer}. \\
\hline
{\em length\+In\+Byte} & The length (in bytes) of the remote audio data. The value of this parameter is related to the audio duration,and the values of the {\ttfamily sample\+Rate} and {\ttfamily channels} parameters that you set in {\ttfamily set\+External\+Audio\+Sink}. {\ttfamily length\+In\+Byte} = {\ttfamily sample\+Rate} /1000 × 2 × {\ttfamily channels} × audio duration (ms).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa207c4859ffe0069ae34e9fc25bc93ff}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa207c4859ffe0069ae34e9fc25bc93ff}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startRecordingDeviceTest@{startRecordingDeviceTest}}
\index{startRecordingDeviceTest@{startRecordingDeviceTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startRecordingDeviceTest()}{startRecordingDeviceTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Recording\+Device\+Test (\begin{DoxyParamCaption}\item[{int}]{indication\+Interval }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts the audio capturing device test. 

This method tests whether the audio capturing device works properly. After calling this method, the S\+DK triggers the {\ttfamily on\+Audio\+Volume\+Indication} callback at the time interval set in this method, which reports {\ttfamily uid} = 0 and the volume information of the capturing device. The difference between this method and the {\ttfamily start\+Echo\+Test} method is that the former checks if the local audio capturing device is working properly, while the latter can check the audio and video devices and network conditions.

\begin{DoxyNote}{Note}
Call this method before joining a channel. After the test is completed, call {\ttfamily stop\+Recording\+Device\+Test} to stop the test before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em indication\+Interval} & The interval (ms) for triggering the {\ttfamily on\+Audio\+Volume\+Indication} callback. This value should be set to greater than 10, otherwise, you will not receive the {\ttfamily on\+Audio\+Volume\+Indication} callback and the S\+DK returns the error code {\ttfamily -\/2}. Agora recommends that you set this value to 100.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: Invalid parameters. Check your parameter settings. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a656bea04193aa7b46643e1029336d2db}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a656bea04193aa7b46643e1029336d2db}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopRecordingDeviceTest@{stopRecordingDeviceTest}}
\index{stopRecordingDeviceTest@{stopRecordingDeviceTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopRecordingDeviceTest()}{stopRecordingDeviceTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Recording\+Device\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the audio capturing device test. 

This method stops the audio capturing device test. You must call this method to stop the test after calling the {\ttfamily start\+Recording\+Device\+Test} method.

\begin{DoxyNote}{Note}
Call this method before joining a channel.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf15918db9c0585578536e3302b7b2a0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf15918db9c0585578536e3302b7b2a0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startPlaybackDeviceTest@{startPlaybackDeviceTest}}
\index{startPlaybackDeviceTest@{startPlaybackDeviceTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startPlaybackDeviceTest()}{startPlaybackDeviceTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Playback\+Device\+Test (\begin{DoxyParamCaption}\item[{String}]{audio\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts the audio playback device test. 

This method tests whether the audio device for local playback works properly. Once a user starts the test, the S\+DK plays an audio file specified by the user. If the user can hear the audio, the playback device works properly. After calling this method, the S\+DK triggers the {\ttfamily on\+Audio\+Volume\+Indication} callback every 100 ms, reporting {\ttfamily uid} = 1 and the volume information of the playback device. The difference between this method and the {\ttfamily start\+Echo\+Test} method is that the former checks if the local audio playback device is working properly, while the latter can check the audio and video devices and network conditions.

\begin{DoxyNote}{Note}
Call this method before joining a channel. After the test is completed, call {\ttfamily stop\+Playback\+Device\+Test} to stop the test before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em audio\+File\+Name} & The path of the audio file. The data format is string in U\+T\+F-\/8.
\begin{DoxyItemize}
\item Supported file formats\+: wav, mp3, m4a, and aac.
\item Supported file sample rates\+: 8000, 16000, 32000, 44100, and 48000 Hz.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a71059caa6c3cde61f5015666922089df}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a71059caa6c3cde61f5015666922089df}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopPlaybackDeviceTest@{stopPlaybackDeviceTest}}
\index{stopPlaybackDeviceTest@{stopPlaybackDeviceTest}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopPlaybackDeviceTest()}{stopPlaybackDeviceTest()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Playback\+Device\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the audio playback device test. 

This method stops the audio playback device test. You must call this method to stop the test after calling the {\ttfamily start\+Playback\+Device\+Test} method.

\begin{DoxyNote}{Note}
Call this method before joining a channel.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac9062e82b4bb3eb772f7bbc96a6de1f6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac9062e82b4bb3eb772f7bbc96a6de1f6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createCustomAudioTrack@{createCustomAudioTrack}}
\index{createCustomAudioTrack@{createCustomAudioTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createCustomAudioTrack()}{createCustomAudioTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Custom\+Audio\+Track (\begin{DoxyParamCaption}\item[{Constants.\+Audio\+Track\+Type}]{track\+Type,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_audio_track_config}{Audio\+Track\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a custom audio track. 

To publish a custom audio source, see the following steps\+:1. Call this method to create a custom audio track and get the audio track ID.
\begin{DoxyEnumerate}
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel. In {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}, set {\ttfamily publish\+Custom\+Audio\+Track\+Id} to the audio track ID that you want to publish, and set {\ttfamily publish\+Custom\+Audio\+Track} to {\ttfamily true}.
\item Call {\ttfamily push\+External\+Audio\+Frame} and specify {\ttfamily track\+Id} as the audio track ID set in step 2. You can then publish the corresponding custom audio source in the channel.
\end{DoxyEnumerate}

\begin{DoxyNote}{Note}
Call this method before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Type} & The type of the custom audio track. See {\ttfamily Audio\+Track\+Type}.Attention\+: If {\ttfamily A\+U\+D\+I\+O\+\_\+\+T\+R\+A\+C\+K\+\_\+\+D\+I\+R\+E\+CT} is specified for this parameter, you must set {\ttfamily publish\+Microphone\+Track} to {\ttfamily false} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} when calling {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} to join the channel; otherwise, joining the channel fails and returns the error code -\/2. \\
\hline
{\em config} & The configuration of the custom audio track. See {\ttfamily Audio\+Track\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item If the method call is successful, the audio track ID is returned as the unique identifier of the audio track.
\item If the method call fails, 0xffffffff is returned. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a616d3425adda32ead9409eda5b258a9b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a616d3425adda32ead9409eda5b258a9b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroyCustomAudioTrack@{destroyCustomAudioTrack}}
\index{destroyCustomAudioTrack@{destroyCustomAudioTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyCustomAudioTrack()}{destroyCustomAudioTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy\+Custom\+Audio\+Track (\begin{DoxyParamCaption}\item[{int}]{track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Destroys the specified audio track. 


\begin{DoxyParams}{Parameters}
{\em track\+Id} & The custom audio track ID returned in {\ttfamily create\+Custom\+Audio\+Track}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0448dfe93f92836b8c9724b1a3f9227b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0448dfe93f92836b8c9724b1a3f9227b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalAudioSource@{setExternalAudioSource}}
\index{setExternalAudioSource@{setExternalAudioSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalAudioSource()}{setExternalAudioSource()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Audio\+Source (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{int}]{sample\+Rate,  }\item[{int}]{channels,  }\item[{boolean}]{local\+Playback,  }\item[{boolean}]{publish }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the external audio source parameters. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000042}{Deprecated}}]This method is deprecated. Use create\+Custom\+Audio\+Track(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_track_type}{Constants.\+Audio\+Track\+Type}} track\+Type, Audio\+Track\+Config config) instead.\end{DoxyRefDesc}


Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the external audio source\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the external audio source.
\item {\ttfamily false}\+: (Default) Disable the external audio source. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The sample rate (Hz) of the external audio source which can be set as {\ttfamily 8000}, {\ttfamily 16000}, {\ttfamily 32000}, {\ttfamily 44100}, or {\ttfamily 48000}. \\
\hline
{\em channels} & The number of channels of the external audio source, which can be set as {\ttfamily 1} (Mono) or {\ttfamily 2} (Stereo). \\
\hline
{\em local\+Playback} & Whether to play the external audio source\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Play the external audio source.
\item {\ttfamily false}\+: (Default) Do not play the external source. 
\end{DoxyItemize}\\
\hline
{\em publish} & Whether to publish audio to the remote users\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: (Default) Publish audio to the remote users.
\item {\ttfamily false}\+: Do not publish audio to the remote users.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7d3fb043b5e6110aaf1dbb79bdf1e443}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7d3fb043b5e6110aaf1dbb79bdf1e443}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalAudioFrame@{pushExternalAudioFrame}}
\index{pushExternalAudioFrame@{pushExternalAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalAudioFrame()}{pushExternalAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Audio\+Frame (\begin{DoxyParamCaption}\item[{byte\mbox{[}$\,$\mbox{]}}]{data,  }\item[{long}]{timestamp }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the external audio data to the app. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000043}{Deprecated}}]This method is deprecated. Use push\+External\+Audio\+Frame(byte\mbox{[}\mbox{]} data, long timestamp, int sample\+Rate, int channels, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_bytes_per_sample}{Constants.\+Bytes\+Per\+Sample}} bytes\+Per\+Sample, int track\+Id) instead.\end{DoxyRefDesc}



\begin{DoxyParams}{Parameters}
{\em data} & The audio buffer data. \\
\hline
{\em timestamp} & The timestamp of the audio data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f0b6f1a4844846a681557f51e22c262}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f0b6f1a4844846a681557f51e22c262}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalAudioFrame@{pushExternalAudioFrame}}
\index{pushExternalAudioFrame@{pushExternalAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalAudioFrame()}{pushExternalAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Audio\+Frame (\begin{DoxyParamCaption}\item[{Byte\+Buffer}]{data,  }\item[{long}]{timestamp,  }\item[{int}]{track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the external audio data to the app. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000044}{Deprecated}}]This method is deprecated. Use push\+External\+Audio\+Frame(Byte\+Buffer\mbox{[}\mbox{]} data, long timestamp, int sample\+Rate, int channels, \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_bytes_per_sample}{Constants.\+Bytes\+Per\+Sample}} bytes\+Per\+Sample, int track\+Id) instead.\end{DoxyRefDesc}



\begin{DoxyParams}{Parameters}
{\em data} & The audio buffer data. \\
\hline
{\em timestamp} & The timestamp of the audio data. \\
\hline
{\em track\+Id} & The audio track ID. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a431e4482d6051a83738cf958e50f8a2d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a431e4482d6051a83738cf958e50f8a2d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalAudioFrame@{pushExternalAudioFrame}}
\index{pushExternalAudioFrame@{pushExternalAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalAudioFrame()}{pushExternalAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Audio\+Frame (\begin{DoxyParamCaption}\item[{byte\mbox{[}$\,$\mbox{]}}]{data,  }\item[{long}]{timestamp,  }\item[{int}]{sample\+Rate,  }\item[{int}]{channels,  }\item[{Constants.\+Bytes\+Per\+Sample}]{bytes\+Per\+Sample,  }\item[{int}]{track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pushes the external audio frame to the S\+DK. 

Call this method to push external audio frames through the audio track. Call timing\+: Before calling this method to push external audio data, perform the following steps\+:1. Call {\ttfamily create\+Custom\+Audio\+Track} to create a custom audio track and get the audio track ID.
\begin{DoxyEnumerate}
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel. In {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}, set {\ttfamily publish\+Custom\+Audio\+Track\+Id} to the audio track ID that you want to publish, and set {\ttfamily publish\+Custom\+Audio\+Track} to {\ttfamily true}.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em data} & The external audio data. \\
\hline
{\em timestamp} & The timestamp (ms) of the external audio frame. This parameter is required. You can use it to restore the order of the captured audio frames, or synchronize audio and video frames in video-\/related scenarios (including scenarios where external video sources are used). \\
\hline
{\em sample\+Rate} & The sample rate (Hz) of the external audio source which can be set as {\ttfamily 8000}, {\ttfamily 16000}, {\ttfamily 32000}, {\ttfamily 44100}, or {\ttfamily 48000}. \\
\hline
{\em channels} & The number of channels of the external audio source, which can be set as {\ttfamily 1} (Mono) or {\ttfamily 2} (Stereo). \\
\hline
{\em bytes\+Per\+Sample} & The number of bytes per sample. For P\+CM, this parameter is generally set to 16 bits (2 bytes). \\
\hline
{\em track\+Id} & The audio track ID. Set this parameter to the custom audio track ID returned in {\ttfamily create\+Custom\+Audio\+Track}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0eedda4cc4b1a0563180b58046551626}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0eedda4cc4b1a0563180b58046551626}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalAudioFrame@{pushExternalAudioFrame}}
\index{pushExternalAudioFrame@{pushExternalAudioFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalAudioFrame()}{pushExternalAudioFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Audio\+Frame (\begin{DoxyParamCaption}\item[{Byte\+Buffer}]{data,  }\item[{long}]{timestamp,  }\item[{int}]{sample\+Rate,  }\item[{int}]{channels,  }\item[{Constants.\+Bytes\+Per\+Sample}]{bytes\+Per\+Sample,  }\item[{int}]{track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the external audio data to the app.


\begin{DoxyParams}{Parameters}
{\em data} & The audio buffer data. \\
\hline
{\em timestamp} & The timestamp of the audio data. \\
\hline
{\em sample\+Rate} & Sets the sample rate, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Sets the number of audio channels
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em bytes\+Per\+Sample} & bytes per sample \\
\hline
{\em track\+Id} & The audio track ID. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalVideoSource@{setExternalVideoSource}}
\index{setExternalVideoSource@{setExternalVideoSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalVideoSource()}{setExternalVideoSource()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Video\+Source (\begin{DoxyParamCaption}\item[{boolean}]{enable,  }\item[{boolean}]{use\+Texture,  }\item[{Constants.\+External\+Video\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Configures the external video source. 

After calling this method to enable an external video source, you can call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4425a1ab6b833b21e200e39b2c9d61}{push\+External\+Video\+Frame\+By\+Id(\+Agora\+Video\+Frame frame, int video\+Track\+Id)}}} to push external video data to the S\+DK. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}
Dynamic switching of video sources is not supported within the channel. To switch from an external video source to an internal video source, you must first leave the channel, call this method to disable the external video source, and then rejoin the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enable} & Whether to use the external video source\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Use the external video source. The S\+DK prepares to accept the external video frame.
\item {\ttfamily false}\+: (Default) Do not use the external video source. 
\end{DoxyItemize}\\
\hline
{\em use\+Texture} & Whether to use the external video frame in the Texture format.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Use the external video frame in the Texture format.
\item {\ttfamily false}\+: (Default) Do not use the external video frame in the Texture format. 
\end{DoxyItemize}\\
\hline
{\em source\+Type} & Whether the external video frame is encoded. See {\ttfamily External\+Video\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ade238d422f27dddf80f09c4c28c0037e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ade238d422f27dddf80f09c4c28c0037e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalVideoSource@{setExternalVideoSource}}
\index{setExternalVideoSource@{setExternalVideoSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalVideoSource()}{setExternalVideoSource()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Video\+Source (\begin{DoxyParamCaption}\item[{boolean}]{enable,  }\item[{boolean}]{use\+Texture,  }\item[{Constants.\+External\+Video\+Source\+Type}]{source\+Type,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_encoded_video_track_options}{Encoded\+Video\+Track\+Options}}}]{encoded\+Opt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the external video source.

Once the external video source is enabled, the S\+DK prepares to accept the external video frame.


\begin{DoxyParams}{Parameters}
{\em enable} & Determines whether to enable the external video source.
\begin{DoxyItemize}
\item true\+: Enable the external video source. Once set, the S\+DK creates the external source and prepares video data from {\ttfamily push\+External\+Video\+Frame} or {\ttfamily push\+External\+Encoded\+Video\+Frame}.
\item false\+: Disable the external video source. 
\end{DoxyItemize}\\
\hline
{\em use\+Texture} & Determines whether to use textured video data.
\begin{DoxyItemize}
\item true\+: Use texture, which is not supported now.
\item False\+: Do not use texture. 
\end{DoxyItemize}\\
\hline
{\em source\+Type} & Determines whether the external video source is encoded.
\begin{DoxyItemize}
\item \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_external_video_source_type}{V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E(0)}}\+: The external video source is not encoded.
\item \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_external_video_source_type}{E\+N\+C\+O\+D\+E\+D\+\_\+\+V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E(1)}}\+: The external video source is encoded. 
\end{DoxyItemize}\\
\hline
{\em encoded\+Opt} & Determine encoded video track options including codec type, cc mode and target bitrate. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e84e4ede445e1b024bf3836fae61d26}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e84e4ede445e1b024bf3836fae61d26}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalVideoFrame@{pushExternalVideoFrame}}
\index{pushExternalVideoFrame@{pushExternalVideoFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalVideoFrame()}{pushExternalVideoFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Video\+Frame (\begin{DoxyParamCaption}\item[{Video\+Frame}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pushes the external raw video frame to the S\+DK. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000045}{Deprecated}}]This method is deprecated.\end{DoxyRefDesc}


After calling the {\ttfamily set\+External\+Video\+Source} method and setting the {\ttfamily enabled} parameter to {\ttfamily true}, and the {\ttfamily encoded\+Frame} parameter to {\ttfamily false}, you can use this method to push the raw external video frame to the S\+DK. You can push the video frame either by calling this method or by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a139283543acaa618638acd57a9195607}{push\+External\+Video\+Frame(\+Agora\+Video\+Frame frame)}}} . The difference is that this method supports video data in the texture format.


\begin{DoxyParams}{Parameters}
{\em frame} & Video frame to be pushed. See {\ttfamily Video\+Frame}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: Success.
\item {\ttfamily false}\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa846bf55e5224c170493ff98f49fcc16}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa846bf55e5224c170493ff98f49fcc16}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalVideoFrameById@{pushExternalVideoFrameById}}
\index{pushExternalVideoFrameById@{pushExternalVideoFrameById}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalVideoFrameById()}{pushExternalVideoFrameById()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Video\+Frame\+By\+Id (\begin{DoxyParamCaption}\item[{Video\+Frame}]{frame,  }\item[{int}]{video\+Track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pushes the external raw video frame to the S\+DK through video tracks. 

To publish a custom video source, see the following steps\+:1. Call {\ttfamily create\+Custom\+Video\+Track} to create a video track and get the video track ID.
\begin{DoxyEnumerate}
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel. In {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}, set {\ttfamily custom\+Video\+Track\+Id} to the video track ID that you want to publish, and set {\ttfamily publish\+Custom\+Video\+Track} to {\ttfamily true}.
\item Call this method and specify {\ttfamily video\+Track\+Id} as the video track ID set in step 2. You can then publish the corresponding custom video source in the channel. You can push the video frame either by calling this method or by calling {\ttfamily push\+External\+Video\+Frame\+By\+Id(Agora\+Video\+Frame frame, int video\+Track\+Id)}. The difference is that this method supports video data in the texture format.
\end{DoxyEnumerate}

\begin{DoxyNote}{Note}
If you only need to push one custom video source to the channel, you can directly call the {\ttfamily set\+External\+Video\+Source} method and the S\+DK will automatically create a video track with the {\ttfamily video\+Track\+Id} set to 0. D\+A\+N\+G\+ER\+: After calling this method, even if you stop pushing external video frames to the S\+DK, the custom video stream will still be counted as the video duration usage and incur charges. Agora recommends that you take appropriate measures based on the actual situation to avoid such video billing.
\begin{DoxyItemize}
\item If you no longer need to capture external video data, you can call {\ttfamily destroy\+Custom\+Video\+Track} to destroy the custom video track.
\item If you only want to use the external video data for local preview and not publish it in the channel, you can call {\ttfamily mute\+Local\+Video\+Stream} to cancel sending video stream or call {\ttfamily update\+Channel\+Media\+Options} to set {\ttfamily publish\+Custom\+Video\+Track} to {\ttfamily false}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em frame} & Video frame to be pushed. See {\ttfamily Video\+Frame}. \\
\hline
{\em video\+Track\+Id} & The video track ID returned by calling the {\ttfamily create\+Custom\+Video\+Track} method.\+Note\+: If you only need to push one custom video source, set {\ttfamily video\+Track\+Id} to 0.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Pushes the external encoded video frame to the S\+DK successfully.
\item $<$ 0\+: Fails to push external encoded video frames to the S\+DK. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4425a1ab6b833b21e200e39b2c9d61}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4425a1ab6b833b21e200e39b2c9d61}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalVideoFrameById@{pushExternalVideoFrameById}}
\index{pushExternalVideoFrameById@{pushExternalVideoFrameById}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalVideoFrameById()}{pushExternalVideoFrameById()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Video\+Frame\+By\+Id (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_video_frame}{Agora\+Video\+Frame}}}]{frame,  }\item[{int}]{video\+Track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pushes the external raw video frame to the S\+DK through video tracks. 

To publish a custom video source, see the following steps\+:1. Call {\ttfamily create\+Custom\+Video\+Track} to create a video track and get the video track ID.
\begin{DoxyEnumerate}
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel. In {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}, set {\ttfamily custom\+Video\+Track\+Id} to the video track ID that you want to publish, and set {\ttfamily publish\+Custom\+Video\+Track} to {\ttfamily true}.
\item Call this method and specify {\ttfamily video\+Track\+Id} as the video track ID set in step 2. You can then publish the corresponding custom video source in the channel. You can push the video frame either by calling this method or by calling {\ttfamily push\+External\+Video\+Frame\+By\+Id(Video\+Frame frame, int video\+Track\+Id)}. The difference is that this method does not support video data in Texture format.
\end{DoxyEnumerate}

\begin{DoxyNote}{Note}
If you only need to push one custom video source to the channel, you can directly call the {\ttfamily set\+External\+Video\+Source} method and the S\+DK will automatically create a video track with the {\ttfamily video\+Track\+Id} set to 0. D\+A\+N\+G\+ER\+: After calling this method, even if you stop pushing external video frames to the S\+DK, the custom video stream will still be counted as the video duration usage and incur charges. Agora recommends that you take appropriate measures based on the actual situation to avoid such video billing.
\begin{DoxyItemize}
\item If you no longer need to capture external video data, you can call {\ttfamily destroy\+Custom\+Video\+Track} to destroy the custom video track.
\item If you only want to use the external video data for local preview and not publish it in the channel, you can call {\ttfamily mute\+Local\+Video\+Stream} to cancel sending video stream or call {\ttfamily update\+Channel\+Media\+Options} to set {\ttfamily publish\+Custom\+Video\+Track} to {\ttfamily false}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em frame} & The external raw video frame to be pushed. See {\ttfamily Agora\+Video\+Frame}. \\
\hline
{\em video\+Track\+Id} & The video track ID returned by calling the {\ttfamily create\+Custom\+Video\+Track} method.\+Note\+: If you only need to push one custom video source, set {\ttfamily video\+Track\+Id} to 0.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2502e34dd73becfa8d13104e5038e021}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2502e34dd73becfa8d13104e5038e021}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalEncodedVideoFrame@{pushExternalEncodedVideoFrame}}
\index{pushExternalEncodedVideoFrame@{pushExternalEncodedVideoFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalEncodedVideoFrame()}{pushExternalEncodedVideoFrame()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Encoded\+Video\+Frame (\begin{DoxyParamCaption}\item[{Byte\+Buffer}]{data,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info}}}]{frame\+Info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the encoded external video frame to Agora S\+DK. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000046}{Deprecated}}]This method is deprecated.\end{DoxyRefDesc}


\begin{DoxyNote}{Note}
Ensure that you call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}{set\+External\+Video\+Source}} before calling this method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em data} & The encoded external video data, which must be the direct buffer. \\
\hline
{\em frame\+Info} & The encoded external video frame info\+: \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info\}. 0\+: Success, which means that the encoded external video frame is pushed successfully.$<$ 0\+: Failure, which means that the encoded external video frame fails to be pushed.  preview }}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af1630bcbdc9fb71618b7745ad612e502}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af1630bcbdc9fb71618b7745ad612e502}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalEncodedVideoFrameById@{pushExternalEncodedVideoFrameById}}
\index{pushExternalEncodedVideoFrameById@{pushExternalEncodedVideoFrameById}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalEncodedVideoFrameById()}{pushExternalEncodedVideoFrameById()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Encoded\+Video\+Frame\+By\+Id (\begin{DoxyParamCaption}\item[{Byte\+Buffer}]{data,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info}}}]{frame\+Info,  }\item[{int}]{video\+Track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the encoded external video frame to the app with specified connection.

\begin{DoxyNote}{Note}
Ensure that you call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}{set\+External\+Video\+Source}} before calling this method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em data} & The encoded external video data, which must be the direct buffer. \\
\hline
{\em frame\+Info} & The encoded external video frame info\+: \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_encoded_video_frame_info}{Encoded\+Video\+Frame\+Info\}.  video\+Track\+Id The id of the video track. 0\+: Success, which means that the encoded external video frame is pushed successfully.$<$ 0\+: Failure, which means that the encoded external video frame fails to be pushed.  preview }}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a139283543acaa618638acd57a9195607}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a139283543acaa618638acd57a9195607}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pushExternalVideoFrame@{pushExternalVideoFrame}}
\index{pushExternalVideoFrame@{pushExternalVideoFrame}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pushExternalVideoFrame()}{pushExternalVideoFrame()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+push\+External\+Video\+Frame (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_video_frame}{Agora\+Video\+Frame}}}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pushes the external raw video frame to the S\+DK. 

After calling the {\ttfamily set\+External\+Video\+Source} method and setting the {\ttfamily enabled} parameter to {\ttfamily true}, and the {\ttfamily encoded\+Frame} parameter to {\ttfamily false}, you can use this method to push the raw external video frame to the S\+DK. You can push the video frame either by calling this method or by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e84e4ede445e1b024bf3836fae61d26}{push\+External\+Video\+Frame(\+Video\+Frame frame)}}} . The difference is that this method does not support video data in Texture format.


\begin{DoxyParams}{Parameters}
{\em frame} & The external raw video frame to be pushed. See {\ttfamily Agora\+Video\+Frame}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: Success.
\item {\ttfamily false}\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1f7cabb6523f481f407a33cee41112b8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1f7cabb6523f481f407a33cee41112b8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isTextureEncodeSupported@{isTextureEncodeSupported}}
\index{isTextureEncodeSupported@{isTextureEncodeSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isTextureEncodeSupported()}{isTextureEncodeSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Texture\+Encode\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Check whether the video supports the Texture encoding. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: Supports the Texture encoding.
\item {\ttfamily false}\+: Does not support the Texture encoding. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ca9abd0f13dd5cdbbad54dc1fa23786}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ca9abd0f13dd5cdbbad54dc1fa23786}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerAudioFrameObserver@{registerAudioFrameObserver}}
\index{registerAudioFrameObserver@{registerAudioFrameObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerAudioFrameObserver()}{registerAudioFrameObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Audio\+Frame\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer}{I\+Audio\+Frame\+Observer}}}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers an audio frame observer object. 

Call this method to register an audio frame observer object (register a callback). When you need the S\+DK to trigger the {\ttfamily on\+Mixed\+Audio\+Frame}, {\ttfamily on\+Record\+Audio\+Frame}, {\ttfamily on\+Playback\+Audio\+Frame}, {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} or {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, you need to use this method to register the callbacks. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em observer} & The observer instance. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer}{I\+Audio\+Frame\+Observer}}}. Set the value as N\+U\+LL to release the instance. Agora recommends calling this method after receiving {\ttfamily on\+Leave\+Channel} to release the audio observer object.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c62e328822d8b98608726426cf6416c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c62e328822d8b98608726426cf6416c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerAudioEncodedFrameObserver@{registerAudioEncodedFrameObserver}}
\index{registerAudioEncodedFrameObserver@{registerAudioEncodedFrameObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerAudioEncodedFrameObserver()}{registerAudioEncodedFrameObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Audio\+Encoded\+Frame\+Observer (\begin{DoxyParamCaption}\item[{Audio\+Encoded\+Frame\+Observer\+Config}]{config,  }\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}}}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers an encoded audio observer. 

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\item You can call this method or {\ttfamily start\+Audio\+Recording \mbox{[}2/2\mbox{]}} to set the recording type and quality of audio files, but Agora does not recommend using this method and {\ttfamily start\+Audio\+Recording \mbox{[}2/2\mbox{]}} at the same time. Only the method called later will take effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Observer settings for the encoded audio. See {\ttfamily Audio\+Encoded\+Frame\+Observer\+Config}. \\
\hline
{\em observer} & The encoded audio observer. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af4315d888d60b756a9da1ccbfa472032}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af4315d888d60b756a9da1ccbfa472032}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRecordingAudioFrameParameters@{setRecordingAudioFrameParameters}}
\index{setRecordingAudioFrameParameters@{setRecordingAudioFrameParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRecordingAudioFrameParameters()}{setRecordingAudioFrameParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Recording\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{int}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of the captured raw audio data. 

The S\+DK calculates the sampling interval based on the {\ttfamily samples\+Per\+Call}, {\ttfamily sample\+Rate} and {\ttfamily channel} parameters set in this method.\+Sample interval (sec) = {\ttfamily sample\+Per\+Call} /( {\ttfamily sample\+Rate} × {\ttfamily channel} ). Ensure that the sample interval ≥ 0.\+01 (s). The S\+DK triggers the {\ttfamily on\+Record\+Audio\+Frame} callback according to the sampling interval. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate returned in the callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & The number of audio channels. You can set the value as 1 or 2.
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & The use mode of the audio frame\+:
\begin{DoxyItemize}
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+O\+N\+LY (0)\+: (Default) Read only mode. For example, when users acquire the data with the Agora S\+DK, then push the R\+T\+MP or R\+T\+M\+PS streams.
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+W\+R\+I\+TE (2)\+: Read and write mode\+: Users read the data from Audio\+Frame, modify it, and then play it. For example, when users have their own audio-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & The number of data samples, such as 1024 for the Media Push.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af863694d368e643cb1d055f8bc0d1af5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af863694d368e643cb1d055f8bc0d1af5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setPlaybackAudioFrameParameters@{setPlaybackAudioFrameParameters}}
\index{setPlaybackAudioFrameParameters@{setPlaybackAudioFrameParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setPlaybackAudioFrameParameters()}{setPlaybackAudioFrameParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Playback\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{int}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of the raw audio playback data. 

The S\+DK calculates the sampling interval based on the {\ttfamily samples\+Per\+Call}, {\ttfamily sample\+Rate} and {\ttfamily channel} parameters set in this method.\+Sample interval (sec) = {\ttfamily sample\+Per\+Call} /( {\ttfamily sample\+Rate} × {\ttfamily channel} ). Ensure that the sample interval ≥ 0.\+01 (s). The S\+DK triggers the {\ttfamily on\+Playback\+Audio\+Frame} callback according to the sampling interval. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate returned in the callback, which can be set as 8000, 16000, 24000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & The number of audio channels. You can set the value as 1 or 2.
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & The use mode of the audio frame\+:
\begin{DoxyItemize}
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+O\+N\+LY (0)\+: (Default) Read only mode. For example, when users acquire the data with the Agora S\+DK, then push the R\+T\+MP or R\+T\+M\+PS streams.
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+W\+R\+I\+TE (2)\+: Read and write mode\+: Users read the data from Audio\+Frame, modify it, and then play it. For example, when users have their own audio-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & The number of data samples, such as 1024 for the Media Push.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4bbeaa31598a8546cdd544af8846bbf8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4bbeaa31598a8546cdd544af8846bbf8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setMixedAudioFrameParameters@{setMixedAudioFrameParameters}}
\index{setMixedAudioFrameParameters@{setMixedAudioFrameParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setMixedAudioFrameParameters()}{setMixedAudioFrameParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Mixed\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of the raw audio data after mixing for audio capture and playback. 

The S\+DK calculates the sampling interval based on the {\ttfamily samples\+Per\+Call}, {\ttfamily sample\+Rate} and {\ttfamily channel} parameters set in this method.\+Sample interval (sec) = {\ttfamily sample\+Per\+Call} /( {\ttfamily sample\+Rate} × {\ttfamily channel} ). Ensure that the sample interval ≥ 0.\+01 (s). The S\+DK triggers the {\ttfamily on\+Mixed\+Audio\+Frame} callback according to the sampling interval. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate returned in the callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & The number of audio channels. You can set the value as 1 or 2.
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & The number of data samples, such as 1024 for the Media Push.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70e4c68451db9d2dd7fe111b5e68ae12}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70e4c68451db9d2dd7fe111b5e68ae12}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setEarMonitoringAudioFrameParameters@{setEarMonitoringAudioFrameParameters}}
\index{setEarMonitoringAudioFrameParameters@{setEarMonitoringAudioFrameParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setEarMonitoringAudioFrameParameters()}{setEarMonitoringAudioFrameParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Ear\+Monitoring\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{int}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of the in-\/ear monitoring raw audio data. 

This method is used to set the in-\/ear monitoring audio data format reported by the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, you need to call {\ttfamily enable\+In\+Ear\+Monitoring(boolean enabled, int include\+Audio\+Filters)}, and set {\ttfamily include\+Audio\+Filters} to {\ttfamily E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+B\+U\+I\+L\+T\+\_\+\+I\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+I\+L\+T\+E\+RS} or {\ttfamily E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+N\+O\+I\+S\+E\+\_\+\+S\+U\+P\+P\+R\+E\+S\+S\+I\+ON}.
\item The S\+DK calculates the sampling interval based on the {\ttfamily samples\+Per\+Call}, {\ttfamily sample\+Rate} and {\ttfamily channel} parameters set in this method.\+Sample interval (sec) = {\ttfamily sample\+Per\+Call} /( {\ttfamily sample\+Rate} × {\ttfamily channel} ). Ensure that the sample interval ≥ 0.\+01 (s). The S\+DK triggers the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback according to the sampling interval.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate of the audio data reported in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, which can be set as 8,000, 16,000, 32,000, 44,100, or 48,000 Hz. \\
\hline
{\em channel} & The number of audio channels reported in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback.
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & The use mode of the audio frame\+:
\begin{DoxyItemize}
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+O\+N\+LY (0)\+: (Default) Read only mode. For example, when users acquire the data with the Agora S\+DK, then push the R\+T\+MP or R\+T\+M\+PS streams.
\item R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+W\+R\+I\+TE (2)\+: Read and write mode\+: Users read the data from Audio\+Frame, modify it, and then play it. For example, when users have their own audio-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & The number of data samples reported in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, such as 1,024 for the Media Push.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a68b9c77f4879d0c3a9c23b608fb34f0b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a68b9c77f4879d0c3a9c23b608fb34f0b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!addVideoWatermark@{addVideoWatermark}}
\index{addVideoWatermark@{addVideoWatermark}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{addVideoWatermark()}{addVideoWatermark()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+add\+Video\+Watermark (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_image}{Agora\+Image}}}]{watermark }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adds a watermark image to the local video. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000047}{Deprecated}}]From v2.\+9.\+1. We recommend using the \mbox{\hyperlink{}{Watermark\+Options) add\+Video\+Watermark}}2 method instead.\end{DoxyRefDesc}


This method adds a P\+NG watermark image to the local video stream in a live streaming session. Once the watermark image is added, all the users in the channel (C\+DN audience included) and the video capturing device can see and capture it. If you only want to add a watermark to the C\+DN live streaming, see {\ttfamily start\+Rtmp\+Stream\+With\+Transcoding}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The U\+RL descriptions are different for the local video and C\+DN live streaming\+: In a local video stream, U\+RL refers to the absolute path of the added watermark image file in the local video stream. In a C\+DN live stream, U\+RL refers to the U\+RL address of the added watermark image in the C\+DN live streaming.
\item The source file of the watermark image must be in the P\+NG file format. If the width and height of the P\+NG file differ from your settings in this method, the P\+NG file will be cropped to conform to your settings.
\item The Agora S\+DK supports adding only one watermark image onto a local video or C\+DN live stream. The newly added watermark image replaces the previous one.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em watermark} & The watermark image to be added to the local live streaming\+: {\ttfamily Agora\+Image}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a93cead22d8e71234dce89d55655bac90}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a93cead22d8e71234dce89d55655bac90}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!addVideoWatermark@{addVideoWatermark}}
\index{addVideoWatermark@{addVideoWatermark}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{addVideoWatermark()}{addVideoWatermark()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+add\+Video\+Watermark (\begin{DoxyParamCaption}\item[{String}]{watermark\+Url,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_watermark_options}{Watermark\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adds a watermark image to the local video. 

\begin{DoxySince}{Since}
v2.\+9.\+1 
\end{DoxySince}
\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000048}{Deprecated}}]From v4.\+6.\+0. We recommend using the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ace0fe42d41b1c09e6243ecf04d62719d}{add\+Video\+Watermark\}2 method instead.}}\end{DoxyRefDesc}


This method adds a P\+NG watermark image to the local video in the live streaming. Once the watermark image is added, all the audience in the channel (C\+DN audience included), and the capturing device can see and capture it. The Agora S\+DK supports adding only one watermark image onto a live video stream. The newly added watermark image replaces the previous one. The watermark coordinates are dependent on the settings in the {\ttfamily set\+Video\+Encoder\+Configuration} method\+:
\begin{DoxyItemize}
\item If the orientation mode of the encoding video ( {\ttfamily O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+DE} ) is fixed landscape mode or the adaptive landscape mode, the watermark uses the landscape orientation.
\item If the orientation mode of the encoding video ( {\ttfamily O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+DE} ) is fixed portrait mode or the adaptive portrait mode, the watermark uses the portrait orientation.
\item When setting the watermark position, the region must be less than the dimensions set in the {\ttfamily set\+Video\+Encoder\+Configuration} method; otherwise, the watermark image will be cropped. You can control the visibility of the watermark during preview by setting the {\ttfamily visible\+In\+Preview} parameter when calling this method. However, whether it ultimately takes effect also depends on the position parameter you set when calling {\ttfamily setup\+Local\+Video} (the {\ttfamily  position} of the video frame in the video link). Refer to the table below for details. $\vert$ Observation position $\vert$ visible\+In\+Preview value $\vert$ Watermark visibility $\vert$ $\vert$ -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/--- $\vert$ -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/--- $\vert$ -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/--- $\vert$ $\vert$ (Default) {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+P\+O\+S\+I\+T\+I\+O\+N\+\_\+\+P\+O\+S\+T\+\_\+\+C\+A\+P\+T\+U\+R\+ER} $\vert$ {\ttfamily true} $\vert$ Yes $\vert$ $\vert$ $\vert$ {\ttfamily false} $\vert$ No $\vert$ $\vert$ {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+P\+O\+S\+I\+T\+I\+O\+N\+\_\+\+P\+R\+E\+\_\+\+E\+N\+C\+O\+D\+ER} $\vert$ {\ttfamily true} $\vert$ Yes $\vert$ $\vert$ $\vert$ {\ttfamily false} $\vert$ Yes $\vert$
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that calling this method after {\ttfamily enable\+Video}.
\item If you only want to add a watermark to the media push, you can call this method or the {\ttfamily start\+Rtmp\+Stream\+With\+Transcoding} method.
\item This method supports adding a watermark image in the P\+NG file format only. Supported pixel formats of the P\+NG image are R\+G\+BA, R\+GB, Palette, Gray, and Alpha\+\_\+gray.
\item If the dimensions of the P\+NG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.
\item If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em watermark\+Url} & The local file path of the watermark image to be added. This method supports adding a watermark image from the local absolute or relative file path. \\
\hline
{\em options} & The options of the watermark image to be added. See {\ttfamily Watermark\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ace0fe42d41b1c09e6243ecf04d62719d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ace0fe42d41b1c09e6243ecf04d62719d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!addVideoWatermark@{addVideoWatermark}}
\index{addVideoWatermark@{addVideoWatermark}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{addVideoWatermark()}{addVideoWatermark()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+add\+Video\+Watermark (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_watermark_config}{Watermark\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adds a watermark image to the local video. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
You can use this method to overlay a watermark image on the local video stream, and configure the watermark\textquotesingle{}s position, size, and visibility in the preview using {\ttfamily Watermark\+Config}.


\begin{DoxyParams}{Parameters}
{\em config} & Watermark configuration. See {\ttfamily Watermark\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c7f3411c243d68b8796959957ffa807}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c7f3411c243d68b8796959957ffa807}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!removeVideoWatermark@{removeVideoWatermark}}
\index{removeVideoWatermark@{removeVideoWatermark}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{removeVideoWatermark()}{removeVideoWatermark()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+remove\+Video\+Watermark (\begin{DoxyParamCaption}\item[{String}]{id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Removes the watermark image from the local video. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
This method removes a previously added watermark image from the local video stream using the specified unique ID.


\begin{DoxyParams}{Parameters}
{\em id} & The ID of the watermark image to be removed.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a88d1a9288aea4e51966090d0f5f3d9cf}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a88d1a9288aea4e51966090d0f5f3d9cf}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!clearVideoWatermarks@{clearVideoWatermarks}}
\index{clearVideoWatermarks@{clearVideoWatermarks}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{clearVideoWatermarks()}{clearVideoWatermarks()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+clear\+Video\+Watermarks (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Removes the watermark image from the video stream. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9793a467418b54eef7cc202a2ee38291}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9793a467418b54eef7cc202a2ee38291}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteUserPriority@{setRemoteUserPriority}}
\index{setRemoteUserPriority@{setRemoteUserPriority}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteUserPriority()}{setRemoteUserPriority()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+User\+Priority (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{user\+Priority }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the priority of a remote user\textquotesingle{}s media stream.

\begin{DoxySince}{Since}
v2.\+4.\+0. 
\end{DoxySince}
Use this method with the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aeb5327eea26b97b67bcf41d6021920}{set\+Remote\+Subscribe\+Fallback\+Option}} method. If the fallback function is enabled for a subscribed stream, the S\+DK ensures the high-\/priority user gets the best possible stream quality.

\begin{DoxyNote}{Note}
The S\+DK supports setting user\+Priority as high for one user only.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the remote user. \\
\hline
{\em user\+Priority} & The priority of the remote user\+: 
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a76a37ca249bb48c04ab0723016a1cf41}{U\+S\+E\+R\+\_\+\+P\+R\+I\+O\+R\+I\+T\+Y\+\_\+\+H\+I\+G\+H(50)}}\+: the user\textquotesingle{}s priority is high. 
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_ac87dc70bb144efc48cdaaddf1b3c47cf}{U\+S\+E\+R\+\_\+\+P\+R\+I\+O\+R\+I\+T\+Y\+\_\+\+N\+O\+R\+A\+N\+L(100)}}\+: (default) the user\textquotesingle{}s priority is normal. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aeb5327eea26b97b67bcf41d6021920}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aeb5327eea26b97b67bcf41d6021920}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}}
\index{setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteSubscribeFallbackOption()}{setRemoteSubscribeFallbackOption()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Subscribe\+Fallback\+Option (\begin{DoxyParamCaption}\item[{Constants.\+Stream\+Fallback\+Options}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the fallback option for the subscribed video stream based on the network conditions. 

An unstable network affects the audio and video quality in a video call or interactive live video streaming. If {\ttfamily option} is set as {\ttfamily S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+L\+OW} or {\ttfamily S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY}, the S\+DK automatically switches the video from a high-\/quality stream to a low-\/quality stream or disables the video when the downlink network conditions cannot support both audio and video to guarantee the quality of the audio. Meanwhile, the S\+DK continuously monitors network quality and resumes subscribing to audio and video streams when the network quality improves. When the subscribed video stream falls back to an audio-\/only stream, or recovers from an audio-\/only stream to an audio-\/video stream, the S\+DK triggers the {\ttfamily on\+Remote\+Subscribe\+Fallback\+To\+Audio\+Only} callback.


\begin{DoxyParams}{Parameters}
{\em option} & Fallback options for the subscribed stream. See {\ttfamily Stream\+Fallback\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa0ca8a4b071602eeca1fca6795e353}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa0ca8a4b071602eeca1fca6795e353}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}}
\index{setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteSubscribeFallbackOption()}{setRemoteSubscribeFallbackOption()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Subscribe\+Fallback\+Option (\begin{DoxyParamCaption}\item[{int}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the fallback option for the subscribed video stream based on the network conditions. 

An unstable network affects the audio and video quality in a video call or interactive live video streaming. If {\ttfamily option} is set as {\ttfamily S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+L\+OW} or {\ttfamily S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY}, the S\+DK automatically switches the video from a high-\/quality stream to a low-\/quality stream or disables the video when the downlink network conditions cannot support both audio and video to guarantee the quality of the audio. Meanwhile, the S\+DK continuously monitors network quality and resumes subscribing to audio and video streams when the network quality improves. When the subscribed video stream falls back to an audio-\/only stream, or recovers from an audio-\/only stream to an audio-\/video stream, the S\+DK triggers the {\ttfamily on\+Remote\+Subscribe\+Fallback\+To\+Audio\+Only} callback.


\begin{DoxyParams}{Parameters}
{\em option} & Fallback options for the subscribed stream.
\begin{DoxyItemize}
\item S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+D\+I\+S\+A\+B\+L\+ED (0)\+: No fallback processing is performed on audio and video streams, and the quality of the audio and video streams cannot be guaranteed.
\item S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+L\+OW (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.
\item S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY (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.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab31a26080ec40a489d35140b7a2bf3a6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab31a26080ec40a489d35140b7a2bf3a6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setHighPriorityUserList@{setHighPriorityUserList}}
\index{setHighPriorityUserList@{setHighPriorityUserList}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setHighPriorityUserList()}{setHighPriorityUserList()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+High\+Priority\+User\+List (\begin{DoxyParamCaption}\item[{int\mbox{[}$\,$\mbox{]}}]{uid\+List,  }\item[{int}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the high priority user list and related fallback option for the remotely subscribed video stream based on the network conditions in N\+A\+S\+A2.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of high priority users. \\
\hline
{\em option} & The remote subscribe fallback option of high priority users.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableDualStreamMode@{enableDualStreamMode}}
\index{enableDualStreamMode@{enableDualStreamMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableDualStreamMode()}{enableDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables dual-\/stream mode on the sender side. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000049}{Deprecated}}]v4.\+2.\+0. This method is deprecated. Use set\+Dual\+Stream\+Mode instead.\end{DoxyRefDesc}


Dual streams are a pairing of a high-\/quality video stream and a low-\/quality video stream\+:
\begin{DoxyItemize}
\item High-\/quality video stream\+: High bitrate, high resolution.
\item Low-\/quality video stream\+: Low bitrate, low resolution. After you enable dual-\/stream mode, you can call {\ttfamily set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)} to choose to receive either the high-\/quality video stream or the low-\/quality video stream on the subscriber side.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-\/collected video streams.
\item If you need to enable dual video streams in a multi-\/channel scenario, you can call the {\ttfamily enable\+Dual\+Stream\+Mode\+Ex} method.
\item You can call this method either before or after joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable dual-\/stream mode\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable dual-\/stream mode.
\item {\ttfamily false}\+: (Default) Disable dual-\/stream mode.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aea4bf3f92298a40c7b83be2fe3e52144}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aea4bf3f92298a40c7b83be2fe3e52144}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableDualStreamMode@{enableDualStreamMode}}
\index{enableDualStreamMode@{enableDualStreamMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableDualStreamMode()}{enableDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}}]{stream\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the dual-\/stream mode on the sender side and the low-\/quality video stream. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000050}{Deprecated}}]v4.\+2.\+0. This method is deprecated. Use set\+Dual\+Stream\+Mode instead.\end{DoxyRefDesc}


You can call this method to enable or disable the dual-\/stream mode on the publisher side. Dual streams are a pairing of a high-\/quality video stream and a low-\/quality video stream\+:
\begin{DoxyItemize}
\item High-\/quality video stream\+: High bitrate, high resolution.
\item Low-\/quality video stream\+: Low bitrate, low resolution. After you enable dual-\/stream mode, you can call {\ttfamily set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)} to choose to receive either the high-\/quality video stream or the low-\/quality video stream on the subscriber side.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-\/collected video streams.
\item If you need to enable dual video streams in a multi-\/channel scenario, you can call the {\ttfamily enable\+Dual\+Stream\+Mode\+Ex} method.
\item You can call this method either before or after joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable dual-\/stream mode\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable dual-\/stream mode.
\item {\ttfamily false}\+: (Default) Disable dual-\/stream mode. 
\end{DoxyItemize}\\
\hline
{\em stream\+Config} & The configuration of the low-\/quality video stream. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}}.Note\+: When setting {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, setting {\ttfamily stream\+Config} will not take effect.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6bc02edcdda8dc4c0c2a3d51ba85199}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6bc02edcdda8dc4c0c2a3d51ba85199}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setDualStreamMode@{setDualStreamMode}}
\index{setDualStreamMode@{setDualStreamMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setDualStreamMode()}{setDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{Constants.\+Simulcast\+Stream\+Mode}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the dual-\/stream mode on the sender side. 

The S\+DK defaults to enabling low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side, which means the sender does not actively send low-\/quality video stream. The receiving end with the role of the {\bfseries{host}} can initiate a low-\/quality video stream request by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}}, and upon receiving the request, the sending end automatically starts sending low-\/quality stream.
\begin{DoxyItemize}
\item If you want to modify this behavior, you can call this method and set {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video streams) or {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video streams).
\item If you want to restore the default behavior after making changes, you can call this method again with {\ttfamily mode} set to {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
The difference and connection between this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}{enable\+Dual\+Stream\+Mode(boolean enabled)}}} is as follows\+:
\begin{DoxyItemize}
\item When calling this method and setting {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, it has the same effect as {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}{enable\+Dual\+Stream\+Mode(boolean enabled)}}} {\ttfamily (false)}.
\item When calling this method and setting {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, it has the same effect as {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}{enable\+Dual\+Stream\+Mode(boolean enabled)}}} {\ttfamily (true)}.
\item Both methods can be called before and after joining a channel. If both methods are used, the settings in the method called later takes precedence.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mode} & The mode in which the video stream is sent. See {\ttfamily Simulcast\+Stream\+Mode}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3f67968e38500bcac10b88fa63cb74a7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3f67968e38500bcac10b88fa63cb74a7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setDualStreamMode@{setDualStreamMode}}
\index{setDualStreamMode@{setDualStreamMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setDualStreamMode()}{setDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{Constants.\+Simulcast\+Stream\+Mode}]{mode,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}}]{stream\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets dual-\/stream mode configuration on the sender side. 

The S\+DK defaults to enabling low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side, which means the sender does not actively send low-\/quality video stream. The receiving end with the role of the {\bfseries{host}} can initiate a low-\/quality video stream request by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}}, and upon receiving the request, the sending end automatically starts sending low-\/quality stream.
\begin{DoxyItemize}
\item If you want to modify this behavior, you can call this method and set {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video streams) or {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video streams).
\item If you want to restore the default behavior after making changes, you can call this method again with {\ttfamily mode} set to {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}. The difference between this method and {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode)} is that this method can also configure the low-\/quality video stream, and the S\+DK sends the stream according to the configuration in {\ttfamily stream\+Config}.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
The difference and connection between this method and {\ttfamily enable\+Dual\+Stream\+Mode(boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} is as follows\+:
\begin{DoxyItemize}
\item When calling this method and setting {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, it has the same effect as calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aea4bf3f92298a40c7b83be2fe3e52144}{enable\+Dual\+Stream\+Mode(boolean enabled, Simulcast\+Stream\+Config stream\+Config)}}} and setting {\ttfamily enabled} to {\ttfamily false}.
\item When calling this method and setting {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, it has the same effect as calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aea4bf3f92298a40c7b83be2fe3e52144}{enable\+Dual\+Stream\+Mode(boolean enabled, Simulcast\+Stream\+Config stream\+Config)}}} and setting {\ttfamily enabled} to {\ttfamily true}.
\item Both methods can be called before and after joining a channel. If both methods are used, the settings in the method called later takes precedence.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mode} & The mode in which the video stream is sent. See {\ttfamily Simulcast\+Stream\+Mode}. \\
\hline
{\em stream\+Config} & The configuration of the low-\/quality video stream. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}}.Note\+: When setting {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM}, setting {\ttfamily stream\+Config} will not take effect.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1560ec915e310cb6d5139994b9697a7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1560ec915e310cb6d5139994b9697a7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setSimulcastConfig@{setSimulcastConfig}}
\index{setSimulcastConfig@{setSimulcastConfig}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setSimulcastConfig()}{setSimulcastConfig()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Simulcast\+Config (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_config}{Simulcast\+Config}}}]{simulcast\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the simulcast video stream configuration. 

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
You can call this method to set video streams with different resolutions for the same video source. The subscribers can call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}} to select which stream layer to receive. The broadcaster can publish up to four layers of video streams\+: one main stream (highest resolution) and three additional streams of different quality levels.


\begin{DoxyParams}{Parameters}
{\em simulcast\+Config} & Configuration for different video steam layers. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_config}{Simulcast\+Config}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab7a60a6f83b8dc876f83adaaa8b40ec9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab7a60a6f83b8dc876f83adaaa8b40ec9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalRenderTargetFps@{setLocalRenderTargetFps}}
\index{setLocalRenderTargetFps@{setLocalRenderTargetFps}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderTargetFps()}{setLocalRenderTargetFps()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Render\+Target\+Fps (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Source\+Type}]{source\+Type,  }\item[{int}]{target\+Fps }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the maximum frame rate for rendering local video. 

Applicable scenarios\+: In scenarios where the requirements for video rendering frame rate are not high (such as screen sharing or online education), you can call this method to set the maximum frame rate for local video rendering. The S\+DK will attempt to keep the actual frame rate of local rendering close to this value, which helps to reduce C\+PU consumption and improving system performance. Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of the video source. See {\ttfamily Video\+Source\+Type}. \\
\hline
{\em target\+Fps} & The capture frame rate (fps) of the local video. Sopported values are\+: 1, 7, 10, 15, 24, 30, 60.\+C\+A\+U\+T\+I\+ON\+: Set this parameter to a value lower than the actual video frame rate; otherwise, the settings do not take effect.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a214fd18d9efe6958c4fd295fd9e45545}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a214fd18d9efe6958c4fd295fd9e45545}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteRenderTargetFps@{setRemoteRenderTargetFps}}
\index{setRemoteRenderTargetFps@{setRemoteRenderTargetFps}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteRenderTargetFps()}{setRemoteRenderTargetFps()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Render\+Target\+Fps (\begin{DoxyParamCaption}\item[{int}]{target\+Fps }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the maximum frame rate for rendering remote video. 

Applicable scenarios\+: In scenarios where the video rendering frame rate is not critical (e.\+g., screen sharing, online education) or when the remote users are using mid-\/to-\/low-\/end devices, you can call this method to set the maximum frame rate for video rendering on the remote client. The S\+DK will attempt to render the actual frame rate as close as possible to this value, which helps to reduce C\+PU consumption and improve system performance. Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em target\+Fps} & The capture frame rate (fps) of the local video. Sopported values are\+: 1, 7, 10, 15, 24, 30, 60.\+C\+A\+U\+T\+I\+ON\+: Set this parameter to a value lower than the actual video frame rate; otherwise, the settings do not take effect.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteVideoStreamType@{setRemoteVideoStreamType}}
\index{setRemoteVideoStreamType@{setRemoteVideoStreamType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVideoStreamType()}{setRemoteVideoStreamType()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{Constants.\+Video\+Stream\+Type}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the video stream type to subscribe to. 

Depending on the default behavior of the sender and the specific settings when calling {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)}, the scenarios for the receiver calling this method are as follows\+:
\begin{DoxyItemize}
\item The S\+DK enables low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side by default, meaning only the high-\/quality video stream is transmitted. Only the receiver with the role of the $\ast$$\ast$host$\ast$$\ast$can call this method to initiate a low-\/quality video stream request. Once the sender receives the request, it starts automatically sending the low-\/quality video stream. At this point, all users in the channel can call this method to switch to low-\/quality video stream subscription mode.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video stream), then calling this method will have no effect.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video stream), both the host and audience receivers can call this method to switch to low-\/quality video stream subscription mode. The S\+DK will dynamically adjust the size of the corresponding video stream based on the size of the video window to save bandwidth and computing resources. The default aspect ratio of the low-\/quality video stream is the same as that of the high-\/quality video stream. According to the current aspect ratio of the high-\/quality video stream, the system will automatically allocate the resolution, frame rate, and bitrate of the low-\/quality video stream.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item If you call both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}{set\+Remote\+Default\+Video\+Stream\+Type(int stream\+Type)}}}, the setting of this method takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. \\
\hline
{\em stream\+Type} & The video stream type, see {\ttfamily Video\+Stream\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteVideoStreamType@{setRemoteVideoStreamType}}
\index{setRemoteVideoStreamType@{setRemoteVideoStreamType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVideoStreamType()}{setRemoteVideoStreamType()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the video stream type to subscribe to. 

Depending on the default behavior of the sender and the specific settings when calling {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)}, the scenarios for the receiver calling this method are as follows\+:
\begin{DoxyItemize}
\item The S\+DK enables low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side by default, meaning only the high-\/quality video stream is transmitted. Only the receiver with the role of the $\ast$$\ast$host$\ast$$\ast$can call this method to initiate a low-\/quality video stream request. Once the sender receives the request, it starts automatically sending the low-\/quality video stream. At this point, all users in the channel can call this method to switch to low-\/quality video stream subscription mode.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video stream), then calling this method will have no effect.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video stream), both the host and audience receivers can call this method to switch to low-\/quality video stream subscription mode. The S\+DK will dynamically adjust the size of the corresponding video stream based on the size of the video window to save bandwidth and computing resources. The default aspect ratio of the low-\/quality video stream is the same as that of the high-\/quality video stream. According to the current aspect ratio of the high-\/quality video stream, the system will automatically allocate the resolution, frame rate, and bitrate of the low-\/quality video stream.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item If you call both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}{set\+Remote\+Default\+Video\+Stream\+Type(int stream\+Type)}}}, the setting of this method takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. \\
\hline
{\em stream\+Type} & The video stream type\+:
\begin{DoxyItemize}
\item 0\+: High-\/quality video stream.
\item 1\+: Low-\/quality video stream.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae4f88a38935a22e30cb023c7db6f86af}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae4f88a38935a22e30cb023c7db6f86af}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}}
\index{setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteDefaultVideoStreamType()}{setRemoteDefaultVideoStreamType()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Default\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Stream\+Type}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the default video stream type to subscribe to. 

Depending on the default behavior of the sender and the specific settings when calling {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)}, the scenarios for the receiver calling this method are as follows\+:
\begin{DoxyItemize}
\item The S\+DK enables low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side by default, meaning only the high-\/quality video stream is transmitted. Only the receiver with the role of the $\ast$$\ast$host$\ast$$\ast$can call this method to initiate a low-\/quality video stream request. Once the sender receives the request, it starts automatically sending the low-\/quality video stream. At this point, all users in the channel can call this method to switch to low-\/quality video stream subscription mode.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video stream), then calling this method will have no effect.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video stream), both the host and audience receivers can call this method to switch to low-\/quality video stream subscription mode. The S\+DK will dynamically adjust the size of the corresponding video stream based on the size of the video window to save bandwidth and computing resources. The default aspect ratio of the low-\/quality video stream is the same as that of the high-\/quality video stream. According to the current aspect ratio of the high-\/quality video stream, the system will automatically allocate the resolution, frame rate, and bitrate of the low-\/quality video stream. Call timing\+: Call this method before joining a channel. The S\+DK does not support changing the default subscribed video stream type after joining a channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
If you call both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}}, the setting of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}} takes effect.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em stream\+Type} & The video stream type, see {\ttfamily Video\+Stream\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}}
\index{setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteDefaultVideoStreamType()}{setRemoteDefaultVideoStreamType()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Remote\+Default\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{int}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the default video stream type to subscribe to. 

Depending on the default behavior of the sender and the specific settings when calling {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)}, the scenarios for the receiver calling this method are as follows\+:
\begin{DoxyItemize}
\item The S\+DK enables low-\/quality video stream adaptive mode ( {\ttfamily A\+U\+T\+O\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ) on the sender side by default, meaning only the high-\/quality video stream is transmitted. Only the receiver with the role of the $\ast$$\ast$host$\ast$$\ast$can call this method to initiate a low-\/quality video stream request. Once the sender receives the request, it starts automatically sending the low-\/quality video stream. At this point, all users in the channel can call this method to switch to low-\/quality video stream subscription mode.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (never send low-\/quality video stream), then calling this method will have no effect.
\item If the sender calls {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} and sets {\ttfamily mode} to {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} (always send low-\/quality video stream), both the host and audience receivers can call this method to switch to low-\/quality video stream subscription mode. The S\+DK will dynamically adjust the size of the corresponding video stream based on the size of the video window to save bandwidth and computing resources. The default aspect ratio of the low-\/quality video stream is the same as that of the high-\/quality video stream. According to the current aspect ratio of the high-\/quality video stream, the system will automatically allocate the resolution, frame rate, and bitrate of the low-\/quality video stream. Call timing\+: Call this method before joining a channel. The S\+DK does not support changing the default subscribed video stream type after joining a channel.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
If you call both this method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}}, the setting of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}{set\+Remote\+Video\+Stream\+Type(int uid, int stream\+Type)}}} takes effect.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em stream\+Type} & The default video-\/stream type\+:
\begin{DoxyItemize}
\item V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+H\+I\+GH (0)\+: High-\/quality stream, that is, a high-\/resolution and high-\/bitrate video stream.
\item V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+L\+OW (1)\+: Low-\/quality stream, that is, a low-\/resolution and low-\/bitrate video stream.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abca64dd09b9fb1a034ff1e9a617df7f1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abca64dd09b9fb1a034ff1e9a617df7f1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setSubscribeAudioBlocklist@{setSubscribeAudioBlocklist}}
\index{setSubscribeAudioBlocklist@{setSubscribeAudioBlocklist}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeAudioBlocklist()}{setSubscribeAudioBlocklist()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Subscribe\+Audio\+Blocklist (\begin{DoxyParamCaption}\item[{int\mbox{[}$\,$\mbox{]}}]{uid\+List }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the blocklist of subscriptions for audio streams. 

You can call this method to specify the audio streams of a user that you do not want to subscribe to.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item The blocklist is not affected by the setting in {\ttfamily mute\+Remote\+Audio\+Stream}, {\ttfamily mute\+All\+Remote\+Audio\+Streams}, and {\ttfamily auto\+Subscribe\+Audio} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\item Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.
\item If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid\+List} & The user ID list of users that you do not want to subscribe to. If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the {\ttfamily set\+Subscribe\+Audio\+Blocklist} method to update the user ID list; this means you only add the {\ttfamily uid} of users that you do not want to subscribe to in the new user ID list.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e0cb141e957f69179395c566afc9a20}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e0cb141e957f69179395c566afc9a20}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setSubscribeAudioAllowlist@{setSubscribeAudioAllowlist}}
\index{setSubscribeAudioAllowlist@{setSubscribeAudioAllowlist}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeAudioAllowlist()}{setSubscribeAudioAllowlist()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Subscribe\+Audio\+Allowlist (\begin{DoxyParamCaption}\item[{int\mbox{[}$\,$\mbox{]}}]{uid\+List }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the allowlist of subscriptions for audio streams. 

You can call this method to specify the audio streams of a user that you want to subscribe to.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item The allowlist is not affected by the setting in {\ttfamily mute\+Remote\+Audio\+Stream}, {\ttfamily mute\+All\+Remote\+Audio\+Streams} and {\ttfamily auto\+Subscribe\+Audio} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\item Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.
\item If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid\+List} & The user ID list of users that you want to subscribe to. If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the {\ttfamily set\+Subscribe\+Audio\+Allowlist} method to update the user ID list; this means you only add the {\ttfamily uid} of users that you want to subscribe to in the new user ID list.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3cb5999d288bbc5e81902af945f011ed}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3cb5999d288bbc5e81902af945f011ed}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setSubscribeVideoBlocklist@{setSubscribeVideoBlocklist}}
\index{setSubscribeVideoBlocklist@{setSubscribeVideoBlocklist}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeVideoBlocklist()}{setSubscribeVideoBlocklist()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Subscribe\+Video\+Blocklist (\begin{DoxyParamCaption}\item[{int\mbox{[}$\,$\mbox{]}}]{uid\+List }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the blocklist of subscriptions for video streams. 

You can call this method to specify the video streams of a user that you do not want to subscribe to.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item The blocklist is not affected by the setting in {\ttfamily mute\+Remote\+Video\+Stream}, {\ttfamily mute\+All\+Remote\+Video\+Streams} and {\ttfamily auto\+Subscribe\+Audio} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\item Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.
\item If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid\+List} & The user ID list of users that you do not want to subscribe to. If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the {\ttfamily set\+Subscribe\+Video\+Blocklist} method to update the user ID list; this means you only add the {\ttfamily uid} of users that you do not want to subscribe to in the new user ID list.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36193f0cdd42c18ab82e9f7bc78717c6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36193f0cdd42c18ab82e9f7bc78717c6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setSubscribeVideoAllowlist@{setSubscribeVideoAllowlist}}
\index{setSubscribeVideoAllowlist@{setSubscribeVideoAllowlist}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeVideoAllowlist()}{setSubscribeVideoAllowlist()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Subscribe\+Video\+Allowlist (\begin{DoxyParamCaption}\item[{int\mbox{[}$\,$\mbox{]}}]{uid\+List }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the allowlist of subscriptions for video streams. 

You can call this method to specify the video streams of a user that you want to subscribe to.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item The allowlist is not affected by the setting in {\ttfamily mute\+Remote\+Video\+Stream}, {\ttfamily mute\+All\+Remote\+Video\+Streams} and {\ttfamily auto\+Subscribe\+Audio} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\item Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.
\item If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid\+List} & The user ID list of users that you want to subscribe to. If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the {\ttfamily set\+Subscribe\+Video\+Allowlist} method to update the user ID list; this means you only add the {\ttfamily uid} of users that you want to subscribe to in the new user ID list.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a840d57b187d64b8903078a6dcc879c67}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a840d57b187d64b8903078a6dcc879c67}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableEncryption@{enableEncryption}}
\index{enableEncryption@{enableEncryption}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableEncryption()}{enableEncryption()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Encryption (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{Encryption\+Config}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables the built-\/in encryption. 

After the user leaves the channel, the S\+DK automatically disables the built-\/in encryption. To enable the built-\/in encryption, call this method before the user joins the channel again. Applicable scenarios\+: Scenarios with higher security requirements. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item All users within the same channel must set the same encryption configurations when calling this method.
\item If you enable the built-\/in encryption, you cannot use the Media Push function.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable built-\/in encryption\+:
\begin{DoxyItemize}
\item true\+: Enable the built-\/in encryption.
\item false\+: (Default) Disable the built-\/in encryption. 
\end{DoxyItemize}\\
\hline
{\em config} & Built-\/in encryption configurations. See {\ttfamily Encryption\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: An invalid parameter is used. Set the parameter with a valid value.
\item -\/4\+: The built-\/in encryption mode is incorrect or the S\+DK fails to load the external encryption library. Check the enumeration or reload the external encryption library.
\item -\/7\+: The S\+DK is not initialized. Initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} instance before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61e6a515d2c687ae3879e46c804073f4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61e6a515d2c687ae3879e46c804073f4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startRtmpStreamWithoutTranscoding@{startRtmpStreamWithoutTranscoding}}
\index{startRtmpStreamWithoutTranscoding@{startRtmpStreamWithoutTranscoding}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startRtmpStreamWithoutTranscoding()}{startRtmpStreamWithoutTranscoding()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Rtmp\+Stream\+Without\+Transcoding (\begin{DoxyParamCaption}\item[{String}]{url }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts pushing media streams to a C\+DN without transcoding. 

Agora recommends that you use the server-\/side Media Push function. For details, see {\ttfamily Use R\+E\+S\+Tful A\+PI}. You can call this method to push an audio or video stream to the specified C\+DN address. This method can push media streams to only one C\+DN address at a time, so if you need to push streams to multiple addresses, call this method multiple times. After you call this method, the S\+DK triggers the {\ttfamily on\+Rtmp\+Streaming\+State\+Changed} callback on the local client to report the state of the streaming.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\item Only hosts in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile can call this method.
\item If you want to retry pushing streams after a failed push, make sure to call {\ttfamily stop\+Rtmp\+Stream} first, then call this method to retry pushing streams; otherwise, the S\+DK returns the same error code as the last failed push.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em url} & The address of Media Push. The format is R\+T\+MP or R\+T\+M\+PS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The U\+RL or configuration of transcoding is invalid; check your U\+RL and transcoding configurations.
\item -\/7\+: The S\+DK is not initialized before calling this method.
\item -\/19\+: The Media Push U\+RL is already in use; use another U\+RL instead. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a556d466c4b0ee61888bb459810c8ded8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a556d466c4b0ee61888bb459810c8ded8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startRtmpStreamWithTranscoding@{startRtmpStreamWithTranscoding}}
\index{startRtmpStreamWithTranscoding@{startRtmpStreamWithTranscoding}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startRtmpStreamWithTranscoding()}{startRtmpStreamWithTranscoding()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Rtmp\+Stream\+With\+Transcoding (\begin{DoxyParamCaption}\item[{String}]{url,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1live_1_1_live_transcoding}{Live\+Transcoding}}}]{transcoding }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts Media Push and sets the transcoding configuration. 

Agora recommends that you use the server-\/side Media Push function. For details, see {\ttfamily Use R\+E\+S\+Tful A\+PI}. You can call this method to push a live audio-\/and-\/video stream to the specified C\+DN address and set the transcoding configuration. This method can push media streams to only one C\+DN address at a time, so if you need to push streams to multiple addresses, call this method multiple times. Under one Agora project, the maximum number of concurrent tasks to push media streams is 200 by default. If you need a higher quota, contact {\ttfamily technical support}. After you call this method, the S\+DK triggers the {\ttfamily on\+Rtmp\+Streaming\+State\+Changed} callback on the local client to report the state of the streaming.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\item Only hosts in the L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG profile can call this method.
\item If you want to retry pushing streams after a failed push, make sure to call {\ttfamily stop\+Rtmp\+Stream} first, then call this method to retry pushing streams; otherwise, the S\+DK returns the same error code as the last failed push.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em url} & The address of Media Push. The format is R\+T\+MP or R\+T\+M\+PS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported. \\
\hline
{\em transcoding} & The transcoding configuration for Media Push. See {\ttfamily Live\+Transcoding}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The U\+RL or configuration of transcoding is invalid; check your U\+RL and transcoding configurations.
\item -\/7\+: The S\+DK is not initialized before calling this method.
\item -\/19\+: The Media Push U\+RL is already in use; use another U\+RL instead. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ff6d0920a8fd7df441745506a0d0a0f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ff6d0920a8fd7df441745506a0d0a0f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateRtmpTranscoding@{updateRtmpTranscoding}}
\index{updateRtmpTranscoding@{updateRtmpTranscoding}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateRtmpTranscoding()}{updateRtmpTranscoding()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Rtmp\+Transcoding (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1live_1_1_live_transcoding}{Live\+Transcoding}}}]{transcoding }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the transcoding configuration. 

Agora recommends that you use the server-\/side Media Push function. For details, see {\ttfamily Use R\+E\+S\+Tful A\+PI}. After you start pushing media streams to C\+DN with transcoding, you can dynamically update the transcoding configuration according to the scenario. The S\+DK triggers the {\ttfamily on\+Transcoding\+Updated} callback after the transcoding configuration is updated.


\begin{DoxyParams}{Parameters}
{\em transcoding} & The transcoding configuration for Media Push. See {\ttfamily Live\+Transcoding}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7e257e16fd020dba728407e2151139e6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7e257e16fd020dba728407e2151139e6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopRtmpStream@{stopRtmpStream}}
\index{stopRtmpStream@{stopRtmpStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopRtmpStream()}{stopRtmpStream()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Rtmp\+Stream (\begin{DoxyParamCaption}\item[{String}]{url }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops pushing media streams to a C\+DN. 

Agora recommends that you use the server-\/side Media Push function. For details, see {\ttfamily Use R\+E\+S\+Tful A\+PI}. You can call this method to stop the live stream on the specified C\+DN address. This method can stop pushing media streams to only one C\+DN address at a time, so if you need to stop pushing streams to multiple addresses, call this method multiple times. After you call this method, the S\+DK triggers the {\ttfamily on\+Rtmp\+Streaming\+State\+Changed} callback on the local client to report the state of the streaming.


\begin{DoxyParams}{Parameters}
{\em url} & The address of Media Push. The format is R\+T\+MP or R\+T\+M\+PS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createDataStream@{createDataStream}}
\index{createDataStream@{createDataStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createDataStream()}{createDataStream()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Data\+Stream (\begin{DoxyParamCaption}\item[{boolean}]{reliable,  }\item[{boolean}]{ordered }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a data stream. 

You can call this method to create a data stream and improve the reliability and ordering of data transmission. Call timing\+: You can call this method either before or after joining a channel. Related callbacks\+: After setting {\ttfamily reliable} to {\ttfamily true}, if the recipient does not receive the data within five seconds, the S\+DK triggers the {\ttfamily on\+Stream\+Message\+Error} callback and returns an error code.

\begin{DoxyNote}{Note}
Each user can create up to five data streams during the lifecycle of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. The data stream will be destroyed when leaving the channel, and the data stream needs to be recreated if needed. If you need a more comprehensive solution for low-\/latency, high-\/concurrency, and scalable real-\/time messaging and status synchronization, it is recommended to use {\ttfamily Signaling}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em reliable} & Sets whether the recipients are guaranteed to receive the data stream within five seconds\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: The recipients receive the data from the sender within five seconds. If the recipient does not receive the data within five seconds, the S\+DK triggers the {\ttfamily on\+Stream\+Message\+Error} callback and returns an error code.
\item {\ttfamily false}\+: There is no guarantee that the recipients receive the data stream within five seconds and no error message is reported for any delay or missing data stream. Attention\+: Please ensure that {\ttfamily reliable} and {\ttfamily ordered} are either both set to{\ttfamily true} or both set to {\ttfamily false}. 
\end{DoxyItemize}\\
\hline
{\em ordered} & Sets whether the recipients receive the data stream in the sent order\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: The recipients receive the data in the sent order.
\item {\ttfamily false}\+: The recipients do not receive the data in the sent order.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ID of the created data stream, if the method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createDataStream@{createDataStream}}
\index{createDataStream@{createDataStream}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createDataStream()}{createDataStream()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Data\+Stream (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_data_stream_config}{Data\+Stream\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a data stream. 

Compared to {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}{create\+Data\+Stream(boolean reliable, boolean ordered)}}}, this method does not guarantee the reliability of data transmission. If a data packet is not received five seconds after it was sent, the S\+DK directly discards the data. Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyNote}{Note}
Each user can create up to five data streams during the lifecycle of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. The data stream will be destroyed when leaving the channel, and the data stream needs to be recreated if needed. If you need a more comprehensive solution for low-\/latency, high-\/concurrency, and scalable real-\/time messaging and status synchronization, it is recommended to use {\ttfamily Signaling}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The configurations for the data stream. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_data_stream_config}{Data\+Stream\+Config}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ID of the created data stream, if the method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a08e5c46d5b2eaf8fa96f43f7bb4002c8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a08e5c46d5b2eaf8fa96f43f7bb4002c8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!sendStreamMessage@{sendStreamMessage}}
\index{sendStreamMessage@{sendStreamMessage}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{sendStreamMessage()}{sendStreamMessage()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+send\+Stream\+Message (\begin{DoxyParamCaption}\item[{int}]{stream\+Id,  }\item[{byte\mbox{[}$\,$\mbox{]}}]{message }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sends data stream messages. 

After calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}{create\+Data\+Stream(\+Data\+Stream\+Config config)}}}, you can call this method to send data stream messages to all users in the channel. The S\+DK has the following restrictions on this method\+:
\begin{DoxyItemize}
\item Each client within the channel can have up to 5 data channels simultaneously, with a total shared packet bitrate limit of 30 K\+B/s for all data channels.
\item Each data channel can send up to 60 packets per second, with each packet being a maximum of 1 KB. A successful method call triggers the {\ttfamily on\+Stream\+Message} callback on the remote client, from which the remote user gets the stream message. A failed method call triggers the {\ttfamily on\+Stream\+Message\+Error} callback on the remote client.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
If you need a more comprehensive solution for low-\/latency, high-\/concurrency, and scalable real-\/time messaging and status synchronization, it is recommended to use {\ttfamily Signaling}.
\begin{DoxyItemize}
\item This method needs to be called after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}{create\+Data\+Stream(\+Data\+Stream\+Config config)}}} and joining the channel.
\item This method applies to broadcasters only.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em stream\+Id} & The data stream ID. You can get the data stream ID by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a32f33f1ffad6dac643490c2c6fdf938f}{create\+Data\+Stream(\+Data\+Stream\+Config config)}}}\\
\hline
{\em message} & The message to be sent.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a94ee49a5a2257fd047fb2e2d10f57c7d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a94ee49a5a2257fd047fb2e2d10f57c7d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!sendRdtMessage@{sendRdtMessage}}
\index{sendRdtMessage@{sendRdtMessage}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{sendRdtMessage()}{sendRdtMessage()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+send\+Rdt\+Message (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{int}]{type,  }\item[{byte\mbox{[}$\,$\mbox{]}}]{message }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Send Reliable message to remote uid in channel. 

@technical preview


\begin{DoxyParams}{Parameters}
{\em uid} & remote user id. \\
\hline
{\em type} & Reliable Data Transmission tunnel message type. \\
\hline
{\em message} & The sent data. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdc25117a46361b6f7dc1023e9a81332}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdc25117a46361b6f7dc1023e9a81332}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!sendMediaControlMessage@{sendMediaControlMessage}}
\index{sendMediaControlMessage@{sendMediaControlMessage}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{sendMediaControlMessage()}{sendMediaControlMessage()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+send\+Media\+Control\+Message (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{byte\mbox{[}$\,$\mbox{]}}]{message }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Send media control message. 

@technical preview


\begin{DoxyParams}{Parameters}
{\em uid} & remote user id. In particular, if the uid is set to 0, it means broadcasting the message to the entire channel. \\
\hline
{\em message} & The sent data, max 1024 Bytes. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc13362ddd02df1d4215b97d3c65a4da}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc13362ddd02df1d4215b97d3c65a4da}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoQualityParameters@{setVideoQualityParameters}}
\index{setVideoQualityParameters@{setVideoQualityParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoQualityParameters()}{setVideoQualityParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Quality\+Parameters (\begin{DoxyParamCaption}\item[{boolean}]{prefer\+Frame\+Rate\+Over\+Image\+Quality }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the video quality preferences.


\begin{DoxyParams}{Parameters}
{\em prefer\+Frame\+Rate\+Over\+Image\+Quality} & The video preference to be set\+: 
\begin{DoxyItemize}
\item True\+: Frame rate over image quality 
\item False\+: Image quality over frame rate (default) 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8841e236cb3fec44d2ab1085d2ceaacf}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8841e236cb3fec44d2ab1085d2ceaacf}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalVideoMirrorMode@{setLocalVideoMirrorMode}}
\index{setLocalVideoMirrorMode@{setLocalVideoMirrorMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVideoMirrorMode()}{setLocalVideoMirrorMode()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Video\+Mirror\+Mode (\begin{DoxyParamCaption}\item[{int}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the local video mirror mode. 


\begin{DoxyParams}{Parameters}
{\em mode} & The local video mirror mode\+:
\begin{DoxyItemize}
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+U\+TO (0)\+: The S\+DK determines whether to enable the mirror mode. If you use a front camera, the S\+DK enables the mirror mode by default; if you use a rear camera, the S\+DK disables the mirror mode by default.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+ED (1)\+: Enable the mirroring mode of the local view.
\item V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+ED (2)\+: Disable the mirroring mode of the local view.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6186606062e5fbe0ff3c6d67c50e68aa}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6186606062e5fbe0ff3c6d67c50e68aa}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getRecommendedEncoderType@{getRecommendedEncoderType}}
\index{getRecommendedEncoderType@{getRecommendedEncoderType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getRecommendedEncoderType()}{getRecommendedEncoderType()}}
{\footnotesize\ttfamily static int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Recommended\+Encoder\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

Gets the recommended encoder type. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000051}{Deprecated}}]This method is deprecated.\end{DoxyRefDesc}


\begin{DoxyReturn}{Returns}
The encoder type\+: 
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_af69726d8db6f55da1ea4a44a96a1ae1d}{H\+A\+R\+D\+W\+A\+RE E\+N\+C\+O\+D\+E\+R(1)}}\+: The hardware encoder. 
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a6b444a64718bcaf38e1da20a8fb5d6b7}{S\+O\+F\+T\+W\+A\+RE E\+N\+C\+O\+D\+E\+R(2)}}\+: The software encoder. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!switchCamera@{switchCamera}}
\index{switchCamera@{switchCamera}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{switchCamera()}{switchCamera()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+switch\+Camera (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Switches between front and rear cameras. 

You can call this method to dynamically switch cameras based on the actual camera availability during the app\textquotesingle{}s runtime, without having to restart the video stream or reconfigure the video source. This method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}{switch\+Camera(\+String camera\+Id)}}} are both used to switch cameras. The difference is that {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}{switch\+Camera(\+String camera\+Id)}}} switches to a specific camera by specifying the camera ID, while this method switches the direction of the camera (front or rear). Call timing\+: This method must be called after the camera is successfully enabled, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).

\begin{DoxyNote}{Note}
This method only switches the camera for the video stream captured by the first camera, that is, the video source set to {\ttfamily V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+P\+R\+I\+M\+A\+RY} (0) when calling {\ttfamily start\+Camera\+Capture}.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!switchCamera@{switchCamera}}
\index{switchCamera@{switchCamera}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{switchCamera()}{switchCamera()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+switch\+Camera (\begin{DoxyParamCaption}\item[{String}]{camera\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Switches cameras by camera ID. 

You can call this method to dynamically switch cameras based on the actual camera availability during the app\textquotesingle{}s runtime, without having to restart the video stream or reconfigure the video source. This method and {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}{switch\+Camera()}}} both are used to switch cameras. The difference is that {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}{switch\+Camera()}}} switches the camera direction (front or rear), while this method switches to a specific camera by specifying the camera ID. Call timing\+: This method must be called after the camera is successfully enabled, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).

\begin{DoxyNote}{Note}
This method only switches the camera for the video stream captured by the first camera, that is, the video source set to {\ttfamily V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+P\+R\+I\+M\+A\+RY} (0) when calling {\ttfamily start\+Camera\+Capture}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em camera\+Id} & The camera ID. You can get the camera ID through the Android native system A\+PI, see {\ttfamily Camera.\+open()} and {\ttfamily Camera\+Manager.\+get\+Camera\+Id\+List()} for details.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b18c80dc7b0a0b54adf9bc85cc05a01}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b18c80dc7b0a0b54adf9bc85cc05a01}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraZoomSupported@{isCameraZoomSupported}}
\index{isCameraZoomSupported@{isCameraZoomSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraZoomSupported()}{isCameraZoomSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Zoom\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device supports camera zoom. 

Call timing\+: This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device supports camera zoom.
\item {\ttfamily false}\+: The device does not support camera zoom. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9bf739195b960ecae53dbdce21804bbe}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9bf739195b960ecae53dbdce21804bbe}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraTorchSupported@{isCameraTorchSupported}}
\index{isCameraTorchSupported@{isCameraTorchSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraTorchSupported()}{isCameraTorchSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Torch\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device supports camera flash. 

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\item The app enables the front camera by default. If your front camera does not support flash, this method returns false. If you want to check whether the rear camera supports the flash function, call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}{switch\+Camera()}}} before this method.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device supports camera flash.
\item {\ttfamily false}\+: The device does not support camera flash. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a299e0a04059c8cebdeea96d9e2053e78}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a299e0a04059c8cebdeea96d9e2053e78}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraFocusSupported@{isCameraFocusSupported}}
\index{isCameraFocusSupported@{isCameraFocusSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraFocusSupported()}{isCameraFocusSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Focus\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Check whether the device supports the manual focus function. 

\begin{DoxyNote}{Note}
This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device supports the manual focus function.
\item {\ttfamily false}\+: The device does not support the manual focus function. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a28b7f4f98affcd7642254bb508bd97c2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a28b7f4f98affcd7642254bb508bd97c2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraExposurePositionSupported@{isCameraExposurePositionSupported}}
\index{isCameraExposurePositionSupported@{isCameraExposurePositionSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraExposurePositionSupported()}{isCameraExposurePositionSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Exposure\+Position\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device supports manual exposure. 

\begin{DoxySince}{Since}
v2.\+3.\+2.
\end{DoxySince}
\begin{DoxyNote}{Note}
This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device supports manual exposure.
\item {\ttfamily false}\+: The device does not support manual exposure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aff8c36abfbc340d26cf6a5b01f787061}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aff8c36abfbc340d26cf6a5b01f787061}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraAutoFocusFaceModeSupported@{isCameraAutoFocusFaceModeSupported}}
\index{isCameraAutoFocusFaceModeSupported@{isCameraAutoFocusFaceModeSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraAutoFocusFaceModeSupported()}{isCameraAutoFocusFaceModeSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Auto\+Focus\+Face\+Mode\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device supports the face auto-\/focus function. 

\begin{DoxyNote}{Note}
This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device supports the face auto-\/focus function.
\item {\ttfamily false}\+: The device does not support the face auto-\/focus function. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab614e59770986be217d84726b0eb069c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab614e59770986be217d84726b0eb069c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraFaceDetectSupported@{isCameraFaceDetectSupported}}
\index{isCameraFaceDetectSupported@{isCameraFaceDetectSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraFaceDetectSupported()}{isCameraFaceDetectSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Face\+Detect\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device camera supports face detection. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The device camera supports face detection.
\item {\ttfamily false}\+: The device camera does not support face detection. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa96bcfadebbaba6e9b82064e58b196a8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa96bcfadebbaba6e9b82064e58b196a8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isCameraExposureSupported@{isCameraExposureSupported}}
\index{isCameraExposureSupported@{isCameraExposureSupported}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isCameraExposureSupported()}{isCameraExposureSupported()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Camera\+Exposure\+Supported (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Queries whether the current camera supports adjusting exposure value. 

\begin{DoxySince}{Since}
v4.\+2.\+2
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\item Before calling {\ttfamily set\+Camera\+Exposure\+Factor}, Agora recoomends that you call this method to query whether the current camera supports adjusting the exposure value.
\item By calling this method, you adjust the exposure value of the currently active camera, that is, the camera specified when calling {\ttfamily set\+Camera\+Capturer\+Configuration}.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: Success.
\item {\ttfamily false}\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3112cd22c82fbdab18306a3706cefb45}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3112cd22c82fbdab18306a3706cefb45}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraZoomFactor@{setCameraZoomFactor}}
\index{setCameraZoomFactor@{setCameraZoomFactor}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraZoomFactor()}{setCameraZoomFactor()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Zoom\+Factor (\begin{DoxyParamCaption}\item[{float}]{factor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the camera zoom factor. 

\begin{DoxyNote}{Note}
You must call this method after {\ttfamily enable\+Video}. The setting result will take effect after the camera is successfully turned on, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em factor} & Camera zoom factor. You can get the maximum zoom factor supported by the device by calling the {\ttfamily get\+Camera\+Max\+Zoom\+Factor} method.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The camera zoom {\ttfamily factor} value, if successful.
\item $<$ 0\+: if the method if failed. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac385178dddfd07f28c690a41a4de6bff}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac385178dddfd07f28c690a41a4de6bff}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getCameraMaxZoomFactor@{getCameraMaxZoomFactor}}
\index{getCameraMaxZoomFactor@{getCameraMaxZoomFactor}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getCameraMaxZoomFactor()}{getCameraMaxZoomFactor()}}
{\footnotesize\ttfamily abstract float io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Camera\+Max\+Zoom\+Factor (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the maximum zoom ratio supported by the camera. 

\begin{DoxyNote}{Note}
This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}
\begin{DoxyReturn}{Returns}
The maximum zoom ratio supported by the camera. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0efc30c502ef3c7af0a2f3f6131801a2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0efc30c502ef3c7af0a2f3f6131801a2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraFocusPositionInPreview@{setCameraFocusPositionInPreview}}
\index{setCameraFocusPositionInPreview@{setCameraFocusPositionInPreview}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraFocusPositionInPreview()}{setCameraFocusPositionInPreview()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Focus\+Position\+In\+Preview (\begin{DoxyParamCaption}\item[{float}]{positionX,  }\item[{float}]{positionY }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the camera manual focus position. 

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You must call this method after {\ttfamily enable\+Video}. The setting result will take effect after the camera is successfully turned on, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\item After a successful method call, the S\+DK triggers the {\ttfamily on\+Camera\+Focus\+Area\+Changed} callback.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em positionX} & The horizontal coordinate of the touchpoint in the view. \\
\hline
{\em positionY} & The vertical coordinate of the touchpoint in the view.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aaa1ddf935a415b78884d97dfa866c9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3aaa1ddf935a415b78884d97dfa866c9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraExposurePosition@{setCameraExposurePosition}}
\index{setCameraExposurePosition@{setCameraExposurePosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraExposurePosition()}{setCameraExposurePosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Exposure\+Position (\begin{DoxyParamCaption}\item[{float}]{position\+Xin\+View,  }\item[{float}]{position\+Yin\+View }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the camera exposure position. 

\begin{DoxySince}{Since}
v2.\+3.\+2.
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You must call this method after {\ttfamily enable\+Video}. The setting result will take effect after the camera is successfully turned on, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\item After a successful method call, the S\+DK triggers the {\ttfamily on\+Camera\+Exposure\+Area\+Changed} callback.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em position\+Xin\+View} & The horizontal coordinate of the touchpoint in the view. \\
\hline
{\em position\+Yin\+View} & The vertical coordinate of the touchpoint in the view.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abc1fce0299f1972f78c63b45c5dcab79}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abc1fce0299f1972f78c63b45c5dcab79}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableFaceDetection@{enableFaceDetection}}
\index{enableFaceDetection@{enableFaceDetection}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableFaceDetection()}{enableFaceDetection()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Face\+Detection (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables face detection for the local user. 

Call timing\+: This method needs to be called after the camera is started (for example, by calling {\ttfamily start\+Preview(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_video_source_type}{Constants.\+Video\+Source\+Type}} source\+Type)} or {\ttfamily enable\+Video} ). Related callbacks\+: Once face detection is enabled, the S\+DK triggers the {\ttfamily on\+Face\+Position\+Changed} callback to report the face information of the local user, which includes the following\+:
\begin{DoxyItemize}
\item The width and height of the local video.
\item The position of the human face in the local view.
\item The distance between the human face and the screen.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable face detection for the local user\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable face detection.
\item {\ttfamily false}\+: (Default) Disable face detection.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2c7ee5480582f6f2e2160b09cc8d6f0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2c7ee5480582f6f2e2160b09cc8d6f0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraTorchOn@{setCameraTorchOn}}
\index{setCameraTorchOn@{setCameraTorchOn}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraTorchOn()}{setCameraTorchOn()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Torch\+On (\begin{DoxyParamCaption}\item[{boolean}]{is\+On }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the camera flash. 

\begin{DoxyNote}{Note}
You must call this method after {\ttfamily enable\+Video}. The setting result will take effect after the camera is successfully turned on, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em is\+On} & Whether to turn on the camera flash\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Turn on the flash.
\item {\ttfamily false}\+: (Default) Turn off the flash.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13368ea66c71ed9dc187048f2b8205c2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13368ea66c71ed9dc187048f2b8205c2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraAutoFocusFaceModeEnabled@{setCameraAutoFocusFaceModeEnabled}}
\index{setCameraAutoFocusFaceModeEnabled@{setCameraAutoFocusFaceModeEnabled}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraAutoFocusFaceModeEnabled()}{setCameraAutoFocusFaceModeEnabled()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Auto\+Focus\+Face\+Mode\+Enabled (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the camera auto-\/face focus function. 

The S\+DK disables face autofocus by default. To enable face autofocus, call this method. Call timing\+: This method must be called after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable face autofocus\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the camera auto-\/face focus function.
\item {\ttfamily false}\+: Disable face auto-\/focus.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2721050e0ab83699a607beb25e919262}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2721050e0ab83699a607beb25e919262}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCameraExposureFactor@{setCameraExposureFactor}}
\index{setCameraExposureFactor@{setCameraExposureFactor}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraExposureFactor()}{setCameraExposureFactor()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Camera\+Exposure\+Factor (\begin{DoxyParamCaption}\item[{int}]{factor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the camera exposure value. 

\begin{DoxySince}{Since}
v4.\+2.\+2
\end{DoxySince}
Insufficient or excessive lighting in the shooting environment can affect the image quality of video capture. To achieve optimal video quality, you can use this method to adjust the camera\textquotesingle{}s exposure value.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You must call this method after {\ttfamily enable\+Video}. The setting result will take effect after the camera is successfully turned on, that is, after the S\+DK triggers the {\ttfamily on\+Local\+Video\+State\+Changed} callback and returns the local video state as {\ttfamily L\+O\+C\+A\+L\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+A\+P\+T\+U\+R\+I\+NG} (1).
\item Before calling this method, Agora recommends calling {\ttfamily is\+Camera\+Exposure\+Supported} to check whether the current camera supports adjusting the exposure value.
\item By calling this method, you adjust the exposure value of the currently active camera, that is, the camera specified when calling {\ttfamily set\+Camera\+Capturer\+Configuration}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em factor} & The camera exposure value. The default value is 0, which means using the default exposure of the camera. The larger the value, the greater the exposure. When the video image is overexposed, you can reduce the exposure value; when the video image is underexposed and the dark details are lost, you can increase the exposure value. If the exposure value you specified is beyond the range supported by the device, the S\+DK will automatically adjust it to the actual supported range of the device. The value range is \mbox{[}-\/20, 20\mbox{]}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8878aa59bdf6e8f328ebadf32ec40273}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8878aa59bdf6e8f328ebadf32ec40273}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getCallId@{getCallId}}
\index{getCallId@{getCallId}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getCallId()}{getCallId()}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Call\+Id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the call ID. 

When a user joins a channel on a client, a {\ttfamily call\+Id} is generated to identify the call from the client. You can call this method to get {\ttfamily call\+Id}, and pass it in when calling methods such as {\ttfamily rate} and {\ttfamily complain}. Call timing\+: Call this method after joining a channel.


\begin{DoxyParams}{Parameters}
{\em call\+Id} & Output parameter, the current call ID.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The current call ID. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afb97d530cdc8295043ab074d89d5f54c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afb97d530cdc8295043ab074d89d5f54c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!rate@{rate}}
\index{rate@{rate}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{rate()}{rate()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+rate (\begin{DoxyParamCaption}\item[{String}]{call\+Id,  }\item[{int}]{rating,  }\item[{String}]{description }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Allows a user to rate a call after the call ends. 

\begin{DoxyNote}{Note}
Ensure that you call this method after leaving a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em call\+Id} & The current call ID. You can get the call ID by calling {\ttfamily get\+Call\+Id}. \\
\hline
{\em rating} & The value is between 1 (the lowest score) and 5 (the highest score). \\
\hline
{\em description} & (Optional) A description of the call. The string length should be less than 800 bytes.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c22a74f586b6169c48358d64bed1b07}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c22a74f586b6169c48358d64bed1b07}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!complain@{complain}}
\index{complain@{complain}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{complain()}{complain()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+complain (\begin{DoxyParamCaption}\item[{String}]{call\+Id,  }\item[{String}]{description }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Allows a user to complain about the call quality after a call ends. 

This method allows users to complain about the quality of the call. Call this method after the user leaves the channel.


\begin{DoxyParams}{Parameters}
{\em call\+Id} & The current call ID. You can get the call ID by calling {\ttfamily get\+Call\+Id}. \\
\hline
{\em description} & (Optional) A description of the call. The string length should be less than 800 bytes.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/7\+: The method is called before {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} is initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a16cac8571a53394289669f07047cc94c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a16cac8571a53394289669f07047cc94c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getSdkVersion@{getSdkVersion}}
\index{getSdkVersion@{getSdkVersion}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getSdkVersion()}{getSdkVersion()}}
{\footnotesize\ttfamily static String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Sdk\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Gets the S\+DK version. 

\begin{DoxyReturn}{Returns}
The S\+DK version number. The format is a string. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf1d443e3b29be1c27994b5d09a5bef4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf1d443e3b29be1c27994b5d09a5bef4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getMediaEngineVersion@{getMediaEngineVersion}}
\index{getMediaEngineVersion@{getMediaEngineVersion}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getMediaEngineVersion()}{getMediaEngineVersion()}}
{\footnotesize\ttfamily static String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Media\+Engine\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

Returns the media engine version.

\begin{DoxyReturn}{Returns}
The string of the version number in char format. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4fa5f803c59e1bc2d816511f5f5bbbc1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4fa5f803c59e1bc2d816511f5f5bbbc1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLogFile@{setLogFile}}
\index{setLogFile@{setLogFile}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFile()}{setLogFile()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Log\+File (\begin{DoxyParamCaption}\item[{String}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the log file. 

Specifies an S\+DK output log file. The log file records all log data for the S\+D\+K’s operation. Call timing\+: This method needs to be called immediately after {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create(\+Rtc\+Engine\+Config config)}}}, otherwise the output log may be incomplete.

\begin{DoxyNote}{Note}
Ensure that the directory for the log file exists and is writable.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & The complete path of the log files. These log files are encoded in U\+T\+F-\/8.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdab41e7cb1d8c8549ca7db248a78216}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdab41e7cb1d8c8549ca7db248a78216}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLogFilter@{setLogFilter}}
\index{setLogFilter@{setLogFilter}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFilter()}{setLogFilter()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Log\+Filter (\begin{DoxyParamCaption}\item[{int}]{filter }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the log output level of the S\+DK. 

This method sets the output log level of the S\+DK. You can use one or a combination of the log filter levels. The log level follows the sequence of {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+O\+FF}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+I\+N\+FO}, and {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+D\+E\+B\+UG}. Choose a level to see the logs preceding that level. If, for example, you set the log level to {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN}, you see the logs within levels {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR} and {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN}.


\begin{DoxyParams}{Parameters}
{\em filter} & The output log level of the S\+DK.
\begin{DoxyItemize}
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+O\+FF (0)\+: Do not output any log information.
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+D\+E\+B\+UG (0x080f)\+: Output all log information. Set your log filter as D\+E\+B\+UG if you want to get the most complete log file.
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+I\+N\+FO (0x0f)\+: Output {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN}, and {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+I\+N\+FO} level log information. Agora recommends that you set the log level to this level.
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN (0x0e)\+: Output {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL}, {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR} and {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+RN} level log information.
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR (0x0c)\+: Output {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL} and {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+OR} level log information.
\item L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL (0x08)\+: Output {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+AL} level log information.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55e1c586d3885c4f0d43aecfbd3729f2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55e1c586d3885c4f0d43aecfbd3729f2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLogLevel@{setLogLevel}}
\index{setLogLevel@{setLogLevel}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogLevel()}{setLogLevel()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Log\+Level (\begin{DoxyParamCaption}\item[{int}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the output log level of the S\+DK. 

Choose a level to see the logs preceding that level.


\begin{DoxyParams}{Parameters}
{\em level} & The log level. See {\ttfamily Log\+Level}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5595061ecba8d52cf14719976c5805ab}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5595061ecba8d52cf14719976c5805ab}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLogFileSize@{setLogFileSize}}
\index{setLogFileSize@{setLogFileSize}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFileSize()}{setLogFileSize()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Log\+File\+Size (\begin{DoxyParamCaption}\item[{long}]{file\+Size\+In\+K\+Bytes }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the log file size. 

By default, the S\+DK generates five S\+DK log files and five A\+PI call log files with the following rules\+:
\begin{DoxyItemize}
\item The S\+DK log files are\+: {\ttfamily agorasdk.\+log}, {\ttfamily agorasdk.\+1.\+log}, {\ttfamily agorasdk.\+2.\+log}, {\ttfamily agorasdk.\+3.\+log}, and {\ttfamily agorasdk.\+4.\+log}.
\item The A\+PI call log files are\+: {\ttfamily agoraapi.\+log}, {\ttfamily agoraapi.\+1.\+log}, {\ttfamily agoraapi.\+2.\+log}, {\ttfamily agoraapi.\+3.\+log}, and {\ttfamily agoraapi.\+4.\+log}.
\item The default size of each S\+DK log file and A\+PI log file is 2,048 KB. These log files are encoded in U\+T\+F-\/8.
\item The S\+DK writes the latest logs in {\ttfamily agorasdk.\+log} or {\ttfamily agoraapi.\+log}.
\item When {\ttfamily agorasdk.\+log} is full, the S\+DK processes the log files in the following order\+:1. Delete the {\ttfamily agorasdk.\+4.\+log} file (if any).
\end{DoxyItemize}
\begin{DoxyEnumerate}
\item Rename {\ttfamily agorasdk.\+3.\+log} to {\ttfamily agorasdk.\+4.\+log}.
\item Rename {\ttfamily agorasdk.\+2.\+log} to {\ttfamily agorasdk.\+3.\+log}.
\item Rename {\ttfamily agorasdk.\+1.\+log} to {\ttfamily agorasdk.\+2.\+log}.
\item Create a new {\ttfamily agorasdk.\+log} file.
\end{DoxyEnumerate}
\begin{DoxyItemize}
\item The overwrite rules for the {\ttfamily agoraapi.\+log} file are the same as for {\ttfamily agorasdk.\+log}.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
This method is used to set the size of the {\ttfamily agorasdk.\+log} file only and does not effect the {\ttfamily agoraapi.\+log file}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Size\+In\+K\+Bytes} & The size (KB) of an {\ttfamily agorasdk.\+log} file. The value range is \mbox{[}128,20480\mbox{]}. The default value is 2,048 KB. If you set {\ttfamily file\+Size\+In\+K\+Byte} smaller than 128 KB, the S\+DK automatically adjusts it to 128 KB; if you set {\ttfamily file\+Size\+In\+K\+Byte} greater than 20,480 KB, the S\+DK automatically adjusts it to 20,480 KB.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed3cf22474a862b8e75dc4a2eab68f2f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed3cf22474a862b8e75dc4a2eab68f2f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!uploadLogFile@{uploadLogFile}}
\index{uploadLogFile@{uploadLogFile}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{uploadLogFile()}{uploadLogFile()}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+upload\+Log\+File (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Upload current log file immediately to server. only use this when an error occurs block before log file upload success or timeout.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59b77fa66a969307df93ad842b63b02d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59b77fa66a969307df93ad842b63b02d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!writeLog@{writeLog}}
\index{writeLog@{writeLog}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{writeLog()}{writeLog()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+write\+Log (\begin{DoxyParamCaption}\item[{int}]{level,  }\item[{String}]{format,  }\item[{Object...}]{args }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Write the log to S\+DK . @technical preview

You can use one of the level defined in Log\+Level.


\begin{DoxyParams}{Parameters}
{\em level} & Sets the log level\+: \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_log_level}{Log\+Level}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a045a0762442c7b7ca8955d08b8aec397}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a045a0762442c7b7ca8955d08b8aec397}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getNativeHandle@{getNativeHandle}}
\index{getNativeHandle@{getNativeHandle}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getNativeHandle()}{getNativeHandle()}}
{\footnotesize\ttfamily abstract long io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Native\+Handle (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the C++ handle of the Native S\+DK. 

This method retrieves the C++ handle of the S\+DK, which is used for registering the audio and video frame observer.

\begin{DoxyReturn}{Returns}
The native handle of the S\+DK. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13e66c39d0c3c1395c54172b344e8eb8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13e66c39d0c3c1395c54172b344e8eb8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!addHandler@{addHandler}}
\index{addHandler@{addHandler}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{addHandler()}{addHandler()}}
{\footnotesize\ttfamily void io.\+agora.\+rtc2.\+Rtc\+Engine.\+add\+Handler (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}]{handler }\end{DoxyParamCaption})}



Adds event handlers. 

The S\+DK uses the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}} class to send callbacks to the app. The app inherits the methods of this class to receive these callbacks. All methods in this class have default (empty) implementations. Therefore, apps only need to inherits callbacks according to the scenarios. In the callbacks, avoid time-\/consuming tasks or calling A\+P\+Is that can block the thread, such as the send\+Stream\+Message method. Otherwise, the S\+DK may not work properly.


\begin{DoxyParams}{Parameters}
{\em handler} & Callback events to be added. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a263e03bf1292625b2a28daac4ba34538}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a263e03bf1292625b2a28daac4ba34538}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!removeHandler@{removeHandler}}
\index{removeHandler@{removeHandler}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{removeHandler()}{removeHandler()}}
{\footnotesize\ttfamily void io.\+agora.\+rtc2.\+Rtc\+Engine.\+remove\+Handler (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}]{handler }\end{DoxyParamCaption})}



Removes the specified \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} instance. 

This method removes the specified callback handler. For callback events that you want to listen for only once, call this method to remove the relevant callback handler after you have received them.


\begin{DoxyParams}{Parameters}
{\em handler} & The callback handler to be deleted. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdacfc92faddfb139a7494994f7eb54a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdacfc92faddfb139a7494994f7eb54a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableHighPerfWifiMode@{enableHighPerfWifiMode}}
\index{enableHighPerfWifiMode@{enableHighPerfWifiMode}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableHighPerfWifiMode()}{enableHighPerfWifiMode()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+High\+Perf\+Wifi\+Mode (\begin{DoxyParamCaption}\item[{boolean}]{enable }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Enables the Wi-\/\+Fi mode. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000052}{Deprecated}}]This method is deprecated. \end{DoxyRefDesc}

\begin{DoxyParams}{Parameters}
{\em enable} & Whether to enable/disable the Wi-\/\+Fi mode\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the Wi-\/\+Fi mode.
\item {\ttfamily false}\+: Disable the Wi-\/\+Fi mode. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab5e001e90eb21e35d7c1454bfeb279ac}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab5e001e90eb21e35d7c1454bfeb279ac}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getNativeMediaPlayer@{getNativeMediaPlayer}}
\index{getNativeMediaPlayer@{getNativeMediaPlayer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getNativeMediaPlayer()}{getNativeMediaPlayer()}}
{\footnotesize\ttfamily abstract long io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Native\+Media\+Player (\begin{DoxyParamCaption}\item[{int}]{source\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Returns the native handler of the mediaplayer. \mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1da04565c3a6dcece43877e242558217}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1da04565c3a6dcece43877e242558217}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getErrorDescription@{getErrorDescription}}
\index{getErrorDescription@{getErrorDescription}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getErrorDescription()}{getErrorDescription()}}
{\footnotesize\ttfamily static String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Error\+Description (\begin{DoxyParamCaption}\item[{int}]{error }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Gets the warning or error description. 


\begin{DoxyParams}{Parameters}
{\em error} & The error code reported by the S\+DK.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The specific error description. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c6b90f7287c07b3de132671ba247152}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c6b90f7287c07b3de132671ba247152}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!queryHDRCapability@{queryHDRCapability}}
\index{queryHDRCapability@{queryHDRCapability}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{queryHDRCapability()}{queryHDRCapability()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+query\+H\+D\+R\+Capability (\begin{DoxyParamCaption}\item[{Constants.\+V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+T\+Y\+PE}]{module\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Queries the H\+DR capability of the video module.

\begin{DoxySince}{Since}
v4.\+6.\+0
\end{DoxySince}
@technical preview

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Unsupported.
\item 1\+: Supported.
\item $<$ 0\+: Unknown. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59f337c7cd25292a08885aaa70e24a08}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a59f337c7cd25292a08885aaa70e24a08}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!queryScreenCaptureCapability@{queryScreenCaptureCapability}}
\index{queryScreenCaptureCapability@{queryScreenCaptureCapability}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{queryScreenCaptureCapability()}{queryScreenCaptureCapability()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+query\+Screen\+Capture\+Capability (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Queries the highest frame rate supported by the device during screen sharing. 

\begin{DoxySince}{Since}
v4.\+2.\+0
\end{DoxySince}
Applicable scenarios\+: To ensure optimal screen sharing performance, particularly in enabling high frame rates like 60 fps, Agora recommends you to query the device\textquotesingle{}s maximum supported frame rate using this method beforehand. This way, if the device cannot support such a high frame rate, you can adjust the screen sharing stream accordingly to avoid any negative impact on the sharing quality. If the device does not support high frame rate, you can reduce the frame rate of the screen sharing stream appropriately when sharing the screen to ensure that the sharing effect meets your expectation.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The highest frame rate supported by the device, if the method is called successfully.
\begin{DoxyItemize}
\item 0\+: The device supports the frame rate of up to 15 fps.
\item 1\+: The device supports the frame rate of up to 30 fps.
\item 2\+: The device supports the frame rate of up to 60 fps.
\end{DoxyItemize}
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa61bae7d31a052043c3bb831ff2899}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa61bae7d31a052043c3bb831ff2899}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!monitorHeadsetEvent@{monitorHeadsetEvent}}
\index{monitorHeadsetEvent@{monitorHeadsetEvent}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{monitorHeadsetEvent()}{monitorHeadsetEvent()}}
{\footnotesize\ttfamily abstract void io.\+agora.\+rtc2.\+Rtc\+Engine.\+monitor\+Headset\+Event (\begin{DoxyParamCaption}\item[{boolean}]{monitor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Monitors external headset device events.


\begin{DoxyParams}{Parameters}
{\em monitor} & Whether to enable monitoring external headset device events. True/\+False. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaaf9fc82bfea34039891aa977f8d2732}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaaf9fc82bfea34039891aa977f8d2732}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!monitorBluetoothHeadsetEvent@{monitorBluetoothHeadsetEvent}}
\index{monitorBluetoothHeadsetEvent@{monitorBluetoothHeadsetEvent}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{monitorBluetoothHeadsetEvent()}{monitorBluetoothHeadsetEvent()}}
{\footnotesize\ttfamily abstract void io.\+agora.\+rtc2.\+Rtc\+Engine.\+monitor\+Bluetooth\+Headset\+Event (\begin{DoxyParamCaption}\item[{boolean}]{monitor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Monitors Bluetooth headset device events.


\begin{DoxyParams}{Parameters}
{\em monitor} & Whether to enable monitoring Bluetooth headset device events. True/\+False. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13c23e98808f778c48dcd1eb03d4062b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13c23e98808f778c48dcd1eb03d4062b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setPreferHeadset@{setPreferHeadset}}
\index{setPreferHeadset@{setPreferHeadset}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setPreferHeadset()}{setPreferHeadset()}}
{\footnotesize\ttfamily abstract void io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Prefer\+Headset (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the default audio route to the headset.

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000053}{Deprecated}}]This method is deprecated. \end{DoxyRefDesc}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not the default audio route is to the headset\+: 
\begin{DoxyItemize}
\item true\+: Set the default audio route to the headset. 
\item false\+: Do not set the default audio route to the headset. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa4af1f6a2f9a53e0b0652d3902286604}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa4af1f6a2f9a53e0b0652d3902286604}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setParameters@{setParameters}}
\index{setParameters@{setParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setParameters()}{setParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Parameters (\begin{DoxyParamCaption}\item[{String}]{parameters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Provides technical preview functionalities or special customizations by configuring the S\+DK with J\+S\+ON options. 


\begin{DoxyParams}{Parameters}
{\em parameters} & Pointer to the set parameters in a J\+S\+ON string.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae3994b04c05a47590322b5e527c4c288}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae3994b04c05a47590322b5e527c4c288}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getParameters@{getParameters}}
\index{getParameters@{getParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getParameters()}{getParameters()}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Parameters (\begin{DoxyParamCaption}\item[{String}]{parameters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Queries internal states 
\begin{DoxyParams}{Parameters}
{\em parameters} & J\+S\+ON string \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A J\+S\+ON string 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae42d90fa3d5c89dc5e562ca30b7470ce}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae42d90fa3d5c89dc5e562ca30b7470ce}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getParameter@{getParameter}}
\index{getParameter@{getParameter}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getParameter()}{getParameter()}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Parameter (\begin{DoxyParamCaption}\item[{String}]{parameter,  }\item[{String}]{args }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Gets the Agora S\+D\+K’s parameters for customization purposes. This method is not disclosed yet. Contact \href{mailto:support@agora.io}{\texttt{ support@agora.\+io}} for more information. \mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a537716f1117501cdfa7ceb221dbaafb9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a537716f1117501cdfa7ceb221dbaafb9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerMediaMetadataObserver@{registerMediaMetadataObserver}}
\index{registerMediaMetadataObserver@{registerMediaMetadataObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerMediaMetadataObserver()}{registerMediaMetadataObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Media\+Metadata\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}}}]{observer,  }\item[{int}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers the metadata observer. 

You need to implement the {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}}} class and specify the metadata type in this method. This method enables you to add synchronized metadata in the video stream for more diversified live interactive streaming, such as sending shopping links, digital coupons, and online quizzes. A successful call of this method triggers the {\ttfamily get\+Max\+Metadata\+Size} callback. \begin{DoxyNote}{Note}
If your receiving-\/side logic requires metadata to stay synchronized with the current decoded frame, and you send external video frames to the S\+DK while also implementing the video frame observer, prefer attaching metadata to {\ttfamily push\+Video\+Frame} and reading it back from {\ttfamily on\+Render\+Video\+Frame}, instead of relying on this observer callback.

Call this method before {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The metadata observer. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}}}. \\
\hline
{\em type} & The metadata type. The S\+DK currently only supports {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a526ccf46b52f43deb9a37c88abbbac04}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a526ccf46b52f43deb9a37c88abbbac04}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!unregisterMediaMetadataObserver@{unregisterMediaMetadataObserver}}
\index{unregisterMediaMetadataObserver@{unregisterMediaMetadataObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{unregisterMediaMetadataObserver()}{unregisterMediaMetadataObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+unregister\+Media\+Metadata\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}}}]{observer,  }\item[{int}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Unregisters the specified metadata observer. 


\begin{DoxyParams}{Parameters}
{\em observer} & The metadata observer. See {\ttfamily \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}}}. \\
\hline
{\em type} & The metadata type. The S\+DK currently only supports {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6f4c6de494528c49968008a0b89f468}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6f4c6de494528c49968008a0b89f468}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startOrUpdateChannelMediaRelay@{startOrUpdateChannelMediaRelay}}
\index{startOrUpdateChannelMediaRelay@{startOrUpdateChannelMediaRelay}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startOrUpdateChannelMediaRelay()}{startOrUpdateChannelMediaRelay()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Or\+Update\+Channel\+Media\+Relay (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_channel_media_relay_configuration}{Channel\+Media\+Relay\+Configuration}}}]{channel\+Media\+Relay\+Configuration }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts relaying media streams across channels or updates channels for media relay. 

\begin{DoxySince}{Since}
v4.\+2.\+0
\end{DoxySince}
The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels. This feature supports relaying media streams to a maximum of six destination channels. After a successful method call, the S\+DK triggers the {\ttfamily on\+Channel\+Media\+Relay\+State\+Changed} callback, and this callback returns the state of the media stream relay. Common states are as follows\+:
\begin{DoxyItemize}
\item If the {\ttfamily on\+Channel\+Media\+Relay\+State\+Changed} callback returns {\ttfamily R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+U\+N\+N\+I\+NG} (2) and {\ttfamily R\+E\+L\+A\+Y\+\_\+\+OK} (0), it means that the S\+DK starts relaying media streams from the source channel to the destination channel.
\item If the {\ttfamily on\+Channel\+Media\+Relay\+State\+Changed} callback returns {\ttfamily R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+F\+A\+I\+L\+U\+RE} (3), an exception occurs during the media stream relay.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining the channel.
\item This method takes effect only when you are a host in a live streaming channel.
\item The relaying media streams across channels function needs to be enabled by contacting {\ttfamily technical support}.
\item Agora does not support string user accounts in this A\+PI.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em channel\+Media\+Relay\+Configuration} & The configuration of the media stream relay. See {\ttfamily Channel\+Media\+Relay\+Configuration}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/2\+: The parameter is invalid.
\item -\/8\+: Internal state error. Probably because the user is not a broadcaster. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f7f548ec0a720db0e83314755dc5015}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f7f548ec0a720db0e83314755dc5015}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopChannelMediaRelay@{stopChannelMediaRelay}}
\index{stopChannelMediaRelay@{stopChannelMediaRelay}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopChannelMediaRelay()}{stopChannelMediaRelay()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops the media stream relay. Once the relay stops, the host quits all the target channels. 

After a successful method call, the S\+DK triggers the {\ttfamily on\+Channel\+Media\+Relay\+State\+Changed} callback. If the callback reports {\ttfamily R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+I\+D\+LE} (0) and {\ttfamily R\+E\+L\+A\+Y\+\_\+\+OK} (0), the host successfully stops the relay.

\begin{DoxyNote}{Note}
If the method call fails, the S\+DK triggers the {\ttfamily on\+Channel\+Media\+Relay\+State\+Changed} callback with the {\ttfamily R\+E\+L\+A\+Y\+\_\+\+E\+R\+R\+O\+R\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+N\+O\+\_\+\+R\+E\+S\+P\+O\+N\+SE} (2) or {\ttfamily R\+E\+L\+A\+Y\+\_\+\+E\+R\+R\+O\+R\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+L\+O\+ST} (8) status code. You can call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab4af0c1df4b68eb898b1843dd0671702}{leave\+Channel(\+Leave\+Channel\+Options options)}}} method to leave the channel, and the media stream relay automatically stops.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/5\+: The method call was rejected. There is no ongoing channel media relay. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f082ed2fb2bcf8e7e1f5f1a13bd9955}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f082ed2fb2bcf8e7e1f5f1a13bd9955}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pauseAllChannelMediaRelay@{pauseAllChannelMediaRelay}}
\index{pauseAllChannelMediaRelay@{pauseAllChannelMediaRelay}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAllChannelMediaRelay()}{pauseAllChannelMediaRelay()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pause\+All\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pauses the media stream relay to all target channels. 

After the cross-\/channel media stream relay starts, you can call this method to pause relaying media streams to all target channels; after the pause, if you want to resume the relay, call {\ttfamily resume\+All\+Channel\+Media\+Relay}.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily start\+Or\+Update\+Channel\+Media\+Relay}.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/5\+: The method call was rejected. There is no ongoing channel media relay. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a227a56b32e23eb918ef5762522d496b4}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a227a56b32e23eb918ef5762522d496b4}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!resumeAllChannelMediaRelay@{resumeAllChannelMediaRelay}}
\index{resumeAllChannelMediaRelay@{resumeAllChannelMediaRelay}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAllChannelMediaRelay()}{resumeAllChannelMediaRelay()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+resume\+All\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Resumes the media stream relay to all target channels. 

After calling the {\ttfamily pause\+All\+Channel\+Media\+Relay} method, you can call this method to resume relaying media streams to all destination channels.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily pause\+All\+Channel\+Media\+Relay}.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/5\+: The method call was rejected. There is no paused channel media relay. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9753d50d974ab3135d95d254a83383fe}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9753d50d974ab3135d95d254a83383fe}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateChannelMediaOptions@{updateChannelMediaOptions}}
\index{updateChannelMediaOptions@{updateChannelMediaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateChannelMediaOptions()}{updateChannelMediaOptions()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Channel\+Media\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the channel media options after joining the channel. 


\begin{DoxyParams}{Parameters}
{\em options} & The channel media options. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The value of a member in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method.
\item -\/8\+: The internal state of the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object is wrong. The possible reason is that the user is not in the channel. Agora recommends that you use the {\ttfamily on\+Connection\+State\+Changed} callback to see whether the user is in the channel. If you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED} (1) or {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+F\+A\+I\+L\+ED} (5) state, the user is not in the channel. You need to call {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} to join a channel before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a645bd4590504fffc802d01a18e17bf1f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a645bd4590504fffc802d01a18e17bf1f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!muteRecordingSignal@{muteRecordingSignal}}
\index{muteRecordingSignal@{muteRecordingSignal}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRecordingSignal()}{muteRecordingSignal()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+mute\+Recording\+Signal (\begin{DoxyParamCaption}\item[{boolean}]{muted }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Whether to mute the recording signal. 

If you have already called {\ttfamily adjust\+Recording\+Signal\+Volume} to adjust the recording signal volume, when you call this method and set it to {\ttfamily true}, the S\+DK behaves as follows\+:1. Records the adjusted volume.
\begin{DoxyEnumerate}
\item Mutes the recording signal. When you call this method again and set it to {\ttfamily false}, the recording signal volume will be restored to the volume recorded by the S\+DK before muting. Call timing\+: This method can be called either before or after joining the channel.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em muted} & -\/ {\ttfamily true}\+: Mute the recording signal.
\begin{DoxyItemize}
\item {\ttfamily false}\+: (Default) Do not mute the recording signal.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a130ebcb8057eb5e3453aac9665cfb572}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a130ebcb8057eb5e3453aac9665cfb572}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}}
\index{setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setPlaybackAudioFrameBeforeMixingParameters()}{setPlaybackAudioFrameBeforeMixingParameters()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of the raw audio playback data before mixing. 

The S\+DK triggers the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback according to the sampling interval. Call timing\+: Call this method before joining a channel.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate returned in the callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & The number of audio channels. You can set the value as 1 or 2.
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa74fd48a5e84c8a358eb1c2b75c7a2b5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa74fd48a5e84c8a358eb1c2b75c7a2b5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}}
\index{setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setPlaybackAudioFrameBeforeMixingParameters()}{setPlaybackAudioFrameBeforeMixingParameters()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the format of audio data in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback. 

Used to set the sample rate, number of channels, and number of samples per callback for the audio data returned in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Set the sample rate returned in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback. It can be set as the following values\+:
\begin{DoxyItemize}
\item 8000.
\item 16000
\item 32000.
\item 44100
\item 48000 (Hz). 
\end{DoxyItemize}\\
\hline
{\em channel} & Set the number of channels for the audio data returned in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback. It can be set to\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & Set the sample rate of the audio data returned in the {\ttfamily on\+Mixed\+Audio\+Frame} callback. In the R\+T\+MP streaming scenario, it is recommended to set it to 1024.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8fcc7517dd6f95be50d1f273d3f56c32}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8fcc7517dd6f95be50d1f273d3f56c32}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableAudioSpectrumMonitor@{enableAudioSpectrumMonitor}}
\index{enableAudioSpectrumMonitor@{enableAudioSpectrumMonitor}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudioSpectrumMonitor()}{enableAudioSpectrumMonitor()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Audio\+Spectrum\+Monitor (\begin{DoxyParamCaption}\item[{int}]{interval\+In\+MS }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Turns on audio spectrum monitoring. 

If you want to obtain the audio spectrum data of local or remote users, you can register the audio spectrum observer and enable audio spectrum monitoring.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em interval\+In\+MS} & The interval (in milliseconds) at which the S\+DK triggers the {\ttfamily on\+Local\+Audio\+Spectrum} and {\ttfamily on\+Remote\+Audio\+Spectrum} callbacks. The default value is 100. Do not set this parameter to a value less than 10, otherwise calling this method would fail.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: Invalid parameters. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc0518028a558fc6e1934b5767ab614b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc0518028a558fc6e1934b5767ab614b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!disableAudioSpectrumMonitor@{disableAudioSpectrumMonitor}}
\index{disableAudioSpectrumMonitor@{disableAudioSpectrumMonitor}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{disableAudioSpectrumMonitor()}{disableAudioSpectrumMonitor()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+disable\+Audio\+Spectrum\+Monitor (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Disables audio spectrum monitoring. 

After calling {\ttfamily enable\+Audio\+Spectrum\+Monitor}, if you want to disable audio spectrum monitoring, you can call this method.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b242f54d022fc19aa603ece26c08475}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b242f54d022fc19aa603ece26c08475}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerAudioSpectrumObserver@{registerAudioSpectrumObserver}}
\index{registerAudioSpectrumObserver@{registerAudioSpectrumObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerAudioSpectrumObserver()}{registerAudioSpectrumObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Audio\+Spectrum\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1audio_1_1_i_audio_spectrum_observer}{I\+Audio\+Spectrum\+Observer}}}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers an audio spectrum observer. 

After successfully registering the audio spectrum observer and calling {\ttfamily enable\+Audio\+Spectrum\+Monitor} to enable the audio spectrum monitoring, the S\+DK reports the callback that you implement in the {\ttfamily I\+Audio\+Spectrum\+Observer} class according to the time interval you set.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The audio spectrum observer. See {\ttfamily I\+Audio\+Spectrum\+Observer}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a922f6867658c8e7e6821bac4335f7fee}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a922f6867658c8e7e6821bac4335f7fee}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!unRegisterAudioSpectrumObserver@{unRegisterAudioSpectrumObserver}}
\index{unRegisterAudioSpectrumObserver@{unRegisterAudioSpectrumObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{unRegisterAudioSpectrumObserver()}{unRegisterAudioSpectrumObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+un\+Register\+Audio\+Spectrum\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1audio_1_1_i_audio_spectrum_observer}{I\+Audio\+Spectrum\+Observer}}}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Unregisters the audio spectrum observer. 

After calling {\ttfamily register\+Audio\+Spectrum\+Observer}, if you want to disable audio spectrum monitoring, you can call this method.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The audio spectrum observer. See {\ttfamily I\+Audio\+Spectrum\+Observer}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b281f2f1dfa4e8d5eb7664fb0d7322e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b281f2f1dfa4e8d5eb7664fb0d7322e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getEffectsVolume@{getEffectsVolume}}
\index{getEffectsVolume@{getEffectsVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectsVolume()}{getEffectsVolume()}}
{\footnotesize\ttfamily abstract double io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Effects\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the volume of the audio effects. 

The volume is an integer ranging from 0 to 100. The default value is 100, which means the original volume.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Volume of the audio effects, if this method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61f2a4c99febfd709d92296d72d52eea}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61f2a4c99febfd709d92296d72d52eea}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setEffectsVolume@{setEffectsVolume}}
\index{setEffectsVolume@{setEffectsVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setEffectsVolume()}{setEffectsVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Effects\+Volume (\begin{DoxyParamCaption}\item[{double}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the volume of the audio effects. 

Call timing\+: Call this method after {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.


\begin{DoxyParams}{Parameters}
{\em volume} & The playback volume. The value range is \mbox{[}0, 100\mbox{]}. The default value is 100, which represents the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!preloadEffect@{preloadEffect}}
\index{preloadEffect@{preloadEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadEffect()}{preloadEffect()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+preload\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{String}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Preloads a specified audio effect file into the memory. 

Ensure the size of all preloaded files does not exceed the limit. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. Call timing\+: Agora recommends that you call this method before joining a channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If preload\+Effect\+Ex is called before play\+Effect\+Ex is executed, the file resource will not be closed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will directly seek to play at the beginning.
\item If preload\+Effect\+Ex is not called before play\+Effect\+Ex is executed, the resource will be destroyed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will try to reopen the file and play it from the beginning.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique. \\
\hline
{\em file\+Path} & File path\+:
\begin{DoxyItemize}
\item Android\+: The file path, which needs to be accurate to the file name and suffix. Agora supports U\+RL addresses, absolute paths, or file paths that start with {\ttfamily /assets/}. You might encounter permission issues if you use an absolute path to access a local file, so Agora recommends using a U\+RI address instead. For example\+: {\ttfamily content\+://com.android.\+providers.\+media.\+documents/document/audio\%3A14441}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adfec464b6a60ecb5f071df5c44e44954}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adfec464b6a60ecb5f071df5c44e44954}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!preloadEffect@{preloadEffect}}
\index{preloadEffect@{preloadEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadEffect()}{preloadEffect()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+preload\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{String}]{file\+Path,  }\item[{int}]{start\+Pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Preloads a specified audio effect.

This method preloads only one specified audio effect into the memory each time it is called. To preload multiple audio effects, call this method multiple times.

After preloading, you can call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a890999cd19b7dbebececfbb2537637d8}{~play\+Effect}} to play the preloaded audio effect or call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3fdc448786337757f696ecdad4f2fcf1}{~play\+All\+Effects}} to play all the preloaded audio effects.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item To ensure smooth communication, limit the size of the audio effect file.
\item Agora recommends calling this method before joining the channel.
\item If preload\+Effect is called before play\+Effect is executed, the file resource will not be closed after play\+Effect. The next time play\+Effect is executed, it will directly seek to play at the beginning.
\item If preload\+Effect is not called before play\+Effect is executed, the resource will be destroyed after play\+Effect. The next time play\+Effect is executed, it will try to reopen the file and play it from the beginning.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. \\
\hline
{\em file\+Path} & The absolute path of the local audio effect file or the U\+RL \\
\hline
{\em start\+Pos} & The start position of the online audio effect file. Supported audio formats\+: mp3, mp4, m4a, aac, 3gp, mkv and wav.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a890999cd19b7dbebececfbb2537637d8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a890999cd19b7dbebececfbb2537637d8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!playEffect@{playEffect}}
\index{playEffect@{playEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{playEffect()}{playEffect()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+play\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{String}]{file\+Path,  }\item[{int}]{loop\+Count,  }\item[{double}]{pitch,  }\item[{double}]{pan,  }\item[{double}]{gain,  }\item[{boolean}]{publish }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Plays the specified local or online audio effect file. 

This method supports playing U\+RI files starting with {\ttfamily content\+://}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. If the local music file does not exist, the S\+DK does not support the file format, or the the S\+DK cannot access the music file U\+RL, the S\+DK reports A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+A\+N\+\_\+\+N\+O\+T\+\_\+\+O\+P\+EN. To play multiple audio effect files at the same time, call this method multiple times with different {\ttfamily sound\+Id} and {\ttfamily file\+Path}. To achieve the optimal user experience, Agora recommends that you do not playing more than three audio files at the same time. Call timing\+: You can call this method either before or after joining a channel. Related callbacks\+: After the playback of an audio effect file completes, the S\+DK triggers the {\ttfamily on\+Audio\+Effect\+Finished} callback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you need to play an online audio effect file, Agora recommends that you cache the online audio effect file to your local device, call {\ttfamily preload\+Effect} to preload the file into memory, and then call this method to play the audio effect. Otherwise, you might encounter playback failures or no sound during playback due to loading timeouts or failures.
\item If preload\+Effect\+Ex is called before play\+Effect\+Ex is executed, the file resource will not be closed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will directly seek to play at the beginning.
\item If preload\+Effect\+Ex is not called before play\+Effect\+Ex is executed, the resource will be destroyed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will try to reopen the file and play it from the beginning.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique.\+Attention\+: If you have preloaded an audio effect into memory by calling {\ttfamily preload\+Effect}, ensure that the value of this parameter is the same as that of {\ttfamily sound\+Id} in {\ttfamily preload\+Effect}. \\
\hline
{\em file\+Path} & The file path. The S\+DK supports U\+RI addresses starting with {\ttfamily content\+://}, paths starting with {\ttfamily /assets/}, U\+R\+Ls and absolute paths of local files. The absolute path needs to be accurate to the file name and extension. Supported audio formats include M\+P3, A\+AC, M4A, M\+P4, W\+AV, and 3GP. See {\ttfamily Supported Audio Formats}. Attention\+: If you have preloaded an audio effect into memory by calling {\ttfamily preload\+Effect}, ensure that the value of this parameter is the same as that of {\ttfamily file\+Path} in {\ttfamily preload\+Effect}. \\
\hline
{\em loop\+Count} & The number of times the audio effect loops.
\begin{DoxyItemize}
\item ≥ 0\+: The number of playback times. For example, 1 means looping one time, which means playing the audio effect two times in total.
\item -\/1\+: Play the audio file in an infinite loop. 
\end{DoxyItemize}\\
\hline
{\em pitch} & The pitch of the audio effect. The value range is 0.\+5 to 2.\+0. The default value is 1.\+0, which means the original pitch. The lower the value, the lower the pitch. \\
\hline
{\em pan} & The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:
\begin{DoxyItemize}
\item -\/1.\+0\+: The audio effect is heard on the left of the user.
\item 0.\+0\+: The audio effect is heard in front of the user.
\item 1.\+0\+: The audio effect is heard on the right of the user. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the audio effect. The value range is 0.\+0 to 100.\+0. The default value is 100.\+0, which means the original volume. The smaller the value, the lower the volume. \\
\hline
{\em publish} & Whether to publish the audio effect to the remote users.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Publish the audio effect to the remote users. Both the local user and remote users can hear the audio effect.
\item {\ttfamily false}\+: Do not publish the audio effect to the remote users. Only the local user can hear the audio effect.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afae7503ed2b7e1ec963f98774d0d0e16}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afae7503ed2b7e1ec963f98774d0d0e16}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!playEffect@{playEffect}}
\index{playEffect@{playEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{playEffect()}{playEffect()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+play\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{String}]{file\+Path,  }\item[{int}]{loop\+Count,  }\item[{double}]{pitch,  }\item[{double}]{pan,  }\item[{double}]{gain,  }\item[{boolean}]{publish,  }\item[{int}]{start\+Pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Plays the specified local or online audio effect file. 

This method supports playing U\+RI files starting with {\ttfamily content\+://}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. If the local music file does not exist, the S\+DK does not support the file format, or the the S\+DK cannot access the music file U\+RL, the S\+DK reports A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+A\+N\+\_\+\+N\+O\+T\+\_\+\+O\+P\+EN. To play multiple audio effect files at the same time, call this method multiple times with different {\ttfamily sound\+Id} and {\ttfamily file\+Path}. To achieve the optimal user experience, Agora recommends that you do not playing more than three audio files at the same time. Call timing\+: You can call this method either before or after joining a channel. Related callbacks\+: After the playback of an audio effect file completes, the S\+DK triggers the {\ttfamily on\+Audio\+Effect\+Finished} callback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you need to play an online audio effect file, Agora recommends that you cache the online audio effect file to your local device, call {\ttfamily preload\+Effect} to preload the file into memory, and then call this method to play the audio effect. Otherwise, you might encounter playback failures or no sound during playback due to loading timeouts or failures.
\item If preload\+Effect\+Ex is called before play\+Effect\+Ex is executed, the file resource will not be closed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will directly seek to play at the beginning.
\item If preload\+Effect\+Ex is not called before play\+Effect\+Ex is executed, the resource will be destroyed after play\+Effect\+Ex. The next time play\+Effect\+Ex is executed, it will try to reopen the file and play it from the beginning.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique.\+Attention\+: If you have preloaded an audio effect into memory by calling {\ttfamily preload\+Effect}, ensure that the value of this parameter is the same as that of {\ttfamily sound\+Id} in {\ttfamily preload\+Effect}. \\
\hline
{\em file\+Path} & The file path. The S\+DK supports U\+RI addresses starting with {\ttfamily content\+://}, paths starting with {\ttfamily /assets/}, U\+R\+Ls and absolute paths of local files. The absolute path needs to be accurate to the file name and extension. Supported audio formats include M\+P3, A\+AC, M4A, M\+P4, W\+AV, and 3GP. See {\ttfamily Supported Audio Formats}. Attention\+: If you have preloaded an audio effect into memory by calling {\ttfamily preload\+Effect}, ensure that the value of this parameter is the same as that of {\ttfamily file\+Path} in {\ttfamily preload\+Effect}. \\
\hline
{\em loop\+Count} & The number of times the audio effect loops.
\begin{DoxyItemize}
\item ≥ 0\+: The number of playback times. For example, 1 means looping one time, which means playing the audio effect two times in total.
\item -\/1\+: Play the audio file in an infinite loop. 
\end{DoxyItemize}\\
\hline
{\em pitch} & The pitch of the audio effect. The value range is 0.\+5 to 2.\+0. The default value is 1.\+0, which means the original pitch. The lower the value, the lower the pitch. \\
\hline
{\em pan} & The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:
\begin{DoxyItemize}
\item -\/1.\+0\+: The audio effect is heard on the left of the user.
\item 0.\+0\+: The audio effect is heard in front of the user.
\item 1.\+0\+: The audio effect is heard on the right of the user. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the audio effect. The value range is 0.\+0 to 100.\+0. The default value is 100.\+0, which means the original volume. The smaller the value, the lower the volume. \\
\hline
{\em publish} & Whether to publish the audio effect to the remote users\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Publish the audio effect to the remote users. Both the local user and remote users can hear the audio effect.
\item {\ttfamily false}\+: Do not publish the audio effect to the remote users. Only the local user can hear the audio effect. 
\end{DoxyItemize}\\
\hline
{\em start\+Pos} & The playback position (ms) of the audio effect file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3fdc448786337757f696ecdad4f2fcf1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3fdc448786337757f696ecdad4f2fcf1}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!playAllEffects@{playAllEffects}}
\index{playAllEffects@{playAllEffects}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{playAllEffects()}{playAllEffects()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+play\+All\+Effects (\begin{DoxyParamCaption}\item[{int}]{loop\+Count,  }\item[{double}]{pitch,  }\item[{double}]{pan,  }\item[{double}]{gain,  }\item[{boolean}]{publish }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

@breif Plays all audio effects.

After calling {\ttfamily preload\+Effect} multiple times to preload multiple audio effects into the memory, you can call this method to play all the specified audio effects for all users in the channel.


\begin{DoxyParams}{Parameters}
{\em loop\+Count} & The number of times the audio effect loops\+:
\begin{DoxyItemize}
\item {\ttfamily -\/1}\+: Play the audio effect in an indefinite loop until you call {\ttfamily stop\+Effect} or {\ttfamily stop\+All\+Effects. -\/}0{\ttfamily \+: Play the audio effect once. -\/}1\`{}\+: Play the audio effect twice. 
\end{DoxyItemize}\\
\hline
{\em pitch} & The pitch of the audio effect. The value ranges between 0.\+5 and 2.\+0. The default value is 1.\+0 (original pitch). The lower the value, the lower the pitch. \\
\hline
{\em pan} & The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:
\begin{DoxyItemize}
\item -\/1.\+0\+: The audio effect shows on the left.
\item 0.\+0\+: The audio effect shows ahead.
\item 1.\+0\+: The audio effect shows on the right. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the audio effect. The value range is \mbox{[}0, 100\mbox{]}. The default value is 100 (original volume). The lower the value, the lower the volume of the audio effect. \\
\hline
{\em publish} & Whether to publish the specified audio effect to the remote users\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Publish the audio effect to the remote users. Both the local user and remote users can hear the audio effect.
\item {\ttfamily false}\+: (Default) Do not publish the audio effect to the remote users. Only the local user can hear the audio effect. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab3aa021cfc9a2d6d3decfbdf975d5a29}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab3aa021cfc9a2d6d3decfbdf975d5a29}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getVolumeOfEffect@{getVolumeOfEffect}}
\index{getVolumeOfEffect@{getVolumeOfEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getVolumeOfEffect()}{getVolumeOfEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Volume\+Of\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the volume of a specified audio effect file. 


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: Returns the volume of the specified audio effect, if the method call is successful. The value ranges between 0 and 100. 100 represents the original volume.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c73b4a61d30381b75d87ac819df42cb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c73b4a61d30381b75d87ac819df42cb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVolumeOfEffect@{setVolumeOfEffect}}
\index{setVolumeOfEffect@{setVolumeOfEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVolumeOfEffect()}{setVolumeOfEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Volume\+Of\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{double}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the volume of a specified audio effect file. 

Call timing\+: Call this method after {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. The unique ID of each audio effect file. \\
\hline
{\em volume} & The playback volume. The value range is \mbox{[}0, 100\mbox{]}. The default value is 100, which represents the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5dafc037f35c83b4d8ca2b64a6050f3}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5dafc037f35c83b4d8ca2b64a6050f3}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pauseEffect@{pauseEffect}}
\index{pauseEffect@{pauseEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseEffect()}{pauseEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pause\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pauses a specified audio effect file. 


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d48af1ce2e341c54f8bbae686b10975}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d48af1ce2e341c54f8bbae686b10975}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!pauseAllEffects@{pauseAllEffects}}
\index{pauseAllEffects@{pauseAllEffects}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAllEffects()}{pauseAllEffects()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+pause\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Pauses all audio effects. 

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a46fc5d80c6a4fab34a72407431b35e31}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a46fc5d80c6a4fab34a72407431b35e31}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!resumeEffect@{resumeEffect}}
\index{resumeEffect@{resumeEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeEffect()}{resumeEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+resume\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Resumes playing a specified audio effect. 


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a24d7ae60d87cc69c656d5f89cb9fd187}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a24d7ae60d87cc69c656d5f89cb9fd187}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!resumeAllEffects@{resumeAllEffects}}
\index{resumeAllEffects@{resumeAllEffects}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAllEffects()}{resumeAllEffects()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+resume\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Resumes playing all audio effect files. 

After you call {\ttfamily pause\+All\+Effects} to pause the playback, you can call this method to resume the playback. Call timing\+: Call this method after {\ttfamily pause\+All\+Effects}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopEffect@{stopEffect}}
\index{stopEffect@{stopEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopEffect()}{stopEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops playing a specified audio effect. 

When you no longer need to play the audio effect, you can call this method to stop the playback. If you only need to pause the playback, call {\ttfamily pause\+Effect}. Call timing\+: Call this method after the {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish)} or {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. Each audio effect has a unique ID.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a62f806462a9bfcc360ce2fd37d49271a}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a62f806462a9bfcc360ce2fd37d49271a}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopAllEffects@{stopAllEffects}}
\index{stopAllEffects@{stopAllEffects}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAllEffects()}{stopAllEffects()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops playing all audio effects. 

When you no longer need to play the audio effect, you can call this method to stop the playback. If you only need to pause the playback, call {\ttfamily pause\+All\+Effects}. Call timing\+: Call this method after the {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish)} or {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e6f4408aeb348a8cafbc83db301d004}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e6f4408aeb348a8cafbc83db301d004}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!unloadEffect@{unloadEffect}}
\index{unloadEffect@{unloadEffect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{unloadEffect()}{unloadEffect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+unload\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Releases a specified preloaded audio effect from the memory. 

After loading the audio effect file into memory using {\ttfamily preload\+Effect}, if you need to release the audio effect file, call this method. Call timing\+: You can call this method either before or after joining a channel.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. Each audio effect has a unique ID.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a21994fe821124d831ca863d342d3caed}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a21994fe821124d831ca863d342d3caed}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!unloadAllEffects@{unloadAllEffects}}
\index{unloadAllEffects@{unloadAllEffects}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{unloadAllEffects()}{unloadAllEffects()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+unload\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Releases all preloaded audio effects from the memory.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aec00fd4a0787f0010cdbd31189b2ac72}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aec00fd4a0787f0010cdbd31189b2ac72}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getEffectDuration@{getEffectDuration}}
\index{getEffectDuration@{getEffectDuration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectDuration()}{getEffectDuration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Effect\+Duration (\begin{DoxyParamCaption}\item[{String}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the duration of the audio effect file. 

\begin{DoxyNote}{Note}
Call this method after joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & File path\+:
\begin{DoxyItemize}
\item Android\+: The file path, which needs to be accurate to the file name and suffix. Agora supports U\+RL addresses, absolute paths, or file paths that start with {\ttfamily /assets/}. You might encounter permission issues if you use an absolute path to access a local file, so Agora recommends using a U\+RI address instead. For example\+: {\ttfamily content\+://com.android.\+providers.\+media.\+documents/document/audio\%3A14441}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The total duration (ms) of the specified audio effect file, if the method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afe3b84f40dabb97d321a6e8a1a001c7e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afe3b84f40dabb97d321a6e8a1a001c7e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setEffectPosition@{setEffectPosition}}
\index{setEffectPosition@{setEffectPosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setEffectPosition()}{setEffectPosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Effect\+Position (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{int}]{pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the playback position of an audio effect file. 

After a successful setting, the local audio effect file starts playing at the specified position.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily play\+Effect}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique. \\
\hline
{\em pos} & The playback position (ms) of the audio effect file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a172c1995a4000c584cf7d5e15b930cf5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a172c1995a4000c584cf7d5e15b930cf5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getEffectCurrentPosition@{getEffectCurrentPosition}}
\index{getEffectCurrentPosition@{getEffectCurrentPosition}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectCurrentPosition()}{getEffectCurrentPosition()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Effect\+Current\+Position (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Retrieves the playback position of the audio effect file. 

\begin{DoxyNote}{Note}
Call this method after {\ttfamily play\+Effect(int sound\+Id, String file\+Path, int loop\+Count, double pitch, double pan, double gain, boolean publish, int start\+Pos)}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The audio effect ID. The ID of each audio effect file is unique.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The playback position (ms) of the specified audio effect file, if the method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a185eba8f37aeb4b4bfc7761c7631214f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a185eba8f37aeb4b4bfc7761c7631214f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerVideoEncodedFrameObserver@{registerVideoEncodedFrameObserver}}
\index{registerVideoEncodedFrameObserver@{registerVideoEncodedFrameObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerVideoEncodedFrameObserver()}{registerVideoEncodedFrameObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Video\+Encoded\+Frame\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_encoded_frame_observer}{I\+Video\+Encoded\+Frame\+Observer}}}]{receiver }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers a receiver object for the encoded video image. 

If you only want to observe encoded video frames (such as H.\+264 format) without decoding and rendering the video, Agora recommends that you implement one {\ttfamily I\+Video\+Encoded\+Frame\+Observer} class through this method.

\begin{DoxyNote}{Note}
Call this method before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em receiver} & The video frame observer object. See {\ttfamily I\+Video\+Encoded\+Frame\+Observer}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6c3b5c780cad3456815481c128b27fd}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad6c3b5c780cad3456815481c128b27fd}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerFaceInfoObserver@{registerFaceInfoObserver}}
\index{registerFaceInfoObserver@{registerFaceInfoObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerFaceInfoObserver()}{registerFaceInfoObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Face\+Info\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_face_info_observer}{I\+Face\+Info\+Observer}}}]{receiver }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers or unregisters a facial information observer. 

You can call this method to register the {\ttfamily on\+Face\+Info} callback to receive the facial information processed by Agora speech driven extension. When calling this method to register a facial information observer, you can register callbacks in the {\ttfamily I\+Face\+Info\+Observer} class as needed. After successfully registering the facial information observer, the S\+DK triggers the callback you have registered when it captures the facial information converted by the speech driven extension. Applicable scenarios\+: Facial information processed by the Agora speech driven extension is BS (Blend Shape) data that complies with A\+Rkit standards. You can further process the BS data using third-\/party 3D rendering engines, such as driving avatar to make mouth movements corresponding to speech.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before joining a channel.
\item Before calling this method, you need to make sure that the speech driven extension has been enabled by calling {\ttfamily enable\+Extension}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em receiver} & Facial information observer, see {\ttfamily I\+Face\+Info\+Observer}. If you need to unregister a facial information observer, pass in N\+U\+LL.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8ea12ecf93baca6f9e23331f3b1c5a9b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8ea12ecf93baca6f9e23331f3b1c5a9b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!takeSnapshot@{takeSnapshot}}
\index{takeSnapshot@{takeSnapshot}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{takeSnapshot()}{takeSnapshot()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+take\+Snapshot (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{String}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Takes a snapshot of a video stream. 

This method takes a snapshot of a video stream from the specified user, generates a J\+PG image, and saves it to the specified path. Call timing\+: Call this method after joining a channel. Related callbacks\+: After a successful call of this method, the S\+DK triggers the {\ttfamily on\+Snapshot\+Taken} callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The method is asynchronous, and the S\+DK has not taken the snapshot when the method call returns.
\item When used for local video snapshots, this method takes a snapshot for the video streams specified in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\item If the user\textquotesingle{}s video has been preprocessed, for example, watermarked or beautified, the resulting snapshot includes the pre-\/processing effect.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. Set uid as 0 if you want to take a snapshot of the local user\textquotesingle{}s video. \\
\hline
{\em file\+Path} & The local path (including filename extensions) of the snapshot. For example\+:
\begin{DoxyItemize}
\item Android\+: {\ttfamily /storage/emulated/0/\+Android/data/$<$package name$>$/files/example.jpg} Attention\+: Ensure that the path you specify exists and is writable.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0bfa6cb48d1b71f388f87f10069a841f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0bfa6cb48d1b71f388f87f10069a841f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!takeSnapshot@{takeSnapshot}}
\index{takeSnapshot@{takeSnapshot}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{takeSnapshot()}{takeSnapshot()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+take\+Snapshot (\begin{DoxyParamCaption}\item[{int}]{uid,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_snapshot_config}{Snapshot\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Takes a screenshot of the video at the specified observation point. 

This method takes a snapshot of a video stream from the specified user, generates a J\+PG image, and saves it to the specified path. Call timing\+: Call this method after joining a channel. Related callbacks\+: After a successful call of this method, the S\+DK triggers the {\ttfamily on\+Snapshot\+Taken} callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The method is asynchronous, and the S\+DK has not taken the snapshot when the method call returns.
\item When used for local video snapshots, this method takes a snapshot for the video streams specified in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The user ID. Set uid as 0 if you want to take a snapshot of the local user\textquotesingle{}s video. \\
\hline
{\em config} & The configuration of the snaptshot. See {\ttfamily Snapshot\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc64bdcf6c7a298014f84921c50ea7d6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc64bdcf6c7a298014f84921c50ea7d6}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableContentInspect@{enableContentInspect}}
\index{enableContentInspect@{enableContentInspect}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableContentInspect()}{enableContentInspect()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Content\+Inspect (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_content_inspect_config}{Content\+Inspect\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables video screenshot and upload. 

When video screenshot and upload function is enabled, the S\+DK takes screenshots and uploads videos sent by local users based on the type and frequency of the module you set in {\ttfamily Content\+Inspect\+Config}. After video screenshot and upload, the Agora server sends the callback notification to your app server in H\+T\+T\+PS requests and sends all screenshots to the third-\/party cloud storage service. Call timing\+: This method can be called either before or after joining the channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, make sure you have enabled video screenshot and upload on Agora console.
\item When the video moderation module is set to video moderation via Agora self-\/developed extension( {\ttfamily C\+O\+N\+T\+E\+N\+T\+\_\+\+I\+N\+S\+P\+E\+C\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+S\+U\+P\+E\+R\+V\+I\+SE} ), the video screenshot and upload dynamic library {\ttfamily agora\+\_\+content\+\_\+inspect\+\_\+extension.\+so} is required. Deleting this library disables the screenshot and upload feature.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enalbe video screenshot and upload\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables video screenshot and upload.
\item {\ttfamily false}\+: Disables video screenshot and upload. 
\end{DoxyItemize}\\
\hline
{\em config} & Screenshot and upload configuration. See {\ttfamily Content\+Inspect\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abfb75504df0a7a17d6eac70ca231a742}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abfb75504df0a7a17d6eac70ca231a742}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerExtension@{registerExtension}}
\index{registerExtension@{registerExtension}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerExtension()}{registerExtension()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Extension (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers an extension. 

For extensions external to the S\+DK (such as those from Extensions Marketplace and S\+DK Extensions), you need to load them before calling this method. Extensions internal to the S\+DK (those included in the full S\+DK package) are automatically loaded and registered after the initialization of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}}. Call timing\+: -\/ Agora recommends you call this method after the initialization of {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} and before joining a channel.
\begin{DoxyItemize}
\item For video extensions (such as the image enhancement extension), you need to call this method after enabling the video module by calling {\ttfamily enable\+Video} or {\ttfamily enable\+Local\+Video}.
\item Before calling this method, you need to call {\ttfamily add\+Extension} to load the extension first.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you want to register multiple extensions, you need to call this method multiple times.
\item The data processing order of different extensions in the S\+DK is determined by the order in which the extensions are registered. That is, the extension that is registered first will process the data first.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em extension} & The name of the extension. \\
\hline
{\em source\+Type} & Source type of the extension. See {\ttfamily Media\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/3\+: The extension library is not loaded. Agora recommends that you check the storage location or the name of the dynamic library. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3b140b737969f11fbd46a8812f1c3e2c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3b140b737969f11fbd46a8812f1c3e2c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableExtension@{enableExtension}}
\index{enableExtension@{enableExtension}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExtension()}{enableExtension()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Extension (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{boolean}]{enable }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Enable/\+Disable an extension. By calling this function, you can dynamically enable/disable the extension without changing the pipeline. For example, enabling/disabling Extension\+\_\+A means the data will be adapted/bypassed by Extension\+\_\+A.

N\+O\+TE\+: For compatibility reasons, if you haven\textquotesingle{}t call register\+Extension, enable\+Extension will automatically register the specified extension. We suggest you call register\+Extension explicitly.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\hline
{\em extension} & The name of the extension, e.\+g. agora.\+beauty. \\
\hline
{\em enable} & Whether to enable the extension\+:
\begin{DoxyItemize}
\item true\+: (Default) Enable the extension.
\item false\+: Disable the extension.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac1b1caf786a8724395cab25e181a8bd}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aac1b1caf786a8724395cab25e181a8bd}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableExtension@{enableExtension}}
\index{enableExtension@{enableExtension}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExtension()}{enableExtension()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Extension (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{boolean}]{enable,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables or disables extensions. 

Call timing\+: Agora recommends that you call this method after joining a channel. Related callbacks\+: When this method is successfully called within the channel, it triggers {\ttfamily on\+Started\+With\+Context} or {\ttfamily on\+Stopped\+With\+Context}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you want to enable multiple extensions, you need to call this method multiple times.
\item After a successful call of this method, you cannot load other extensions.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em extension} & The name of the extension. \\
\hline
{\em enable} & Whether to enable the extension\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the extension.
\item {\ttfamily false}\+: Disable the extension. 
\end{DoxyItemize}\\
\hline
{\em source\+Type} & Source type of the extension. See {\ttfamily Media\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/3\+: The extension library is not loaded. Agora recommends that you check the storage location or the name of the dynamic library. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a352998d3fe5745ae6b679b3bc0a5a852}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a352998d3fe5745ae6b679b3bc0a5a852}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExtensionProperty@{setExtensionProperty}}
\index{setExtensionProperty@{setExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProperty()}{setExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{String}]{key,  }\item[{String}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the properties of the extension. 

After enabling the extension, you can call this method to set the properties of the extension. Call timing\+: Call this mehtod after calling {\ttfamily enable\+Extension}. Related callbacks\+: After calling this method, it may trigger the {\ttfamily on\+Event\+With\+Context} callback, and the specific triggering logic is related to the extension itself.

\begin{DoxyNote}{Note}
If you want to set properties for multiple extensions, you need to call this method multiple times.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em extension} & The name of the extension. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em value} & The value of the extension key.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73239916872738232ccdb364c4180e8f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73239916872738232ccdb364c4180e8f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExtensionProperty@{setExtensionProperty}}
\index{setExtensionProperty@{setExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProperty()}{setExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{String}]{key,  }\item[{String}]{value,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the properties of an extension.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\hline
{\em extension} & The name of the extension, e.\+g. agora.\+beauty. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em value} & The J\+S\+ON formatted value of the extension key. \\
\hline
{\em source\+Type} & The source type of the extension, e.\+g. P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE. See \{\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_media_source_type}{\}.  true, if get property success, otherwise false }}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a54ff467519122a6dd64b9db845f9e63b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a54ff467519122a6dd64b9db845f9e63b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getExtensionProperty@{getExtensionProperty}}
\index{getExtensionProperty@{getExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getExtensionProperty()}{getExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{String}]{key }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets detailed information on the extensions. 

Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em extension} & The name of the extension. \\
\hline
{\em key} & The key of the extension.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The extension information, if the method call succeeds.
\item An empty string, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeeba30781172e4b0b7a479f5c5948ca2}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeeba30781172e4b0b7a479f5c5948ca2}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getExtensionProperty@{getExtensionProperty}}
\index{getExtensionProperty@{getExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getExtensionProperty()}{getExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{String}]{key,  }\item[{Constants.\+Media\+Source\+Type}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets detailed information on the extensions. 

Call timing\+: This method can be called either before or after joining the channel.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em extension} & The name of the extension. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em source\+Type} & Source type of the extension. See {\ttfamily Media\+Source\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The extension information, if the method call succeeds.
\item An empty string, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9340f504747432241e47402529f2abb0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9340f504747432241e47402529f2abb0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExtensionProviderProperty@{setExtensionProviderProperty}}
\index{setExtensionProviderProperty@{setExtensionProviderProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProviderProperty()}{setExtensionProviderProperty()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Extension\+Provider\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{key,  }\item[{String}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the properties of the extension provider. 

You can call this method to set the attributes of the extension provider and initialize the relevant parameters according to the type of the provider. Call timing\+: Call this method before {\ttfamily enable\+Extension} and after {\ttfamily register\+Extension}.

\begin{DoxyNote}{Note}
If you want to set the properties of the extension provider for multiple extensions, you need to call this method multiple times.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em value} & The value of the extension key.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7fde43abcd44bd22793bc71917050192}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7fde43abcd44bd22793bc71917050192}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableExtension@{enableExtension}}
\index{enableExtension@{enableExtension}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExtension()}{enableExtension()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Extension (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}}]{extension\+Info,  }\item[{boolean}]{enable }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Enable/\+Disable an extension. By calling this function, you can dynamically enable/disable the extension without changing the pipeline. For example, enabling/disabling Extension\+\_\+A means the data will be adapted/bypassed by Extension\+\_\+A.

N\+O\+TE\+: For compatibility reasons, if you haven\textquotesingle{}t call register\+Extension, enable\+Extension will automatically register the specified extension. We suggest you call register\+Extension explicitly.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\hline
{\em extension} & The name of the extension, e.\+g. agora.\+beauty. \\
\hline
{\em extension\+Info} & The information for extension. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}. \\
\hline
{\em enable} & Whether to enable the extension\+:
\begin{DoxyItemize}
\item true\+: (Default) Enable the extension.
\item false\+: Disable the extension.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55c3b490d2cbd4c118bdada7cd86dd4c}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55c3b490d2cbd4c118bdada7cd86dd4c}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExtensionProperty@{setExtensionProperty}}
\index{setExtensionProperty@{setExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProperty()}{setExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}}]{extension\+Info,  }\item[{String}]{key,  }\item[{String}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the properties of an extension.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\hline
{\em extension} & The name of the extension, e.\+g. agora.\+beauty. \\
\hline
{\em extension\+Info} & The information for extension. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em value} & The J\+S\+ON formatted value of the extension key.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a787a8b6960dfe5f5a338483348679054}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a787a8b6960dfe5f5a338483348679054}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getExtensionProperty@{getExtensionProperty}}
\index{getExtensionProperty@{getExtensionProperty}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getExtensionProperty()}{getExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily abstract String io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Extension\+Property (\begin{DoxyParamCaption}\item[{String}]{provider,  }\item[{String}]{extension,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}}]{extension\+Info,  }\item[{String}]{key }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Gets the properties of an extension.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\hline
{\em extension} & The name of the extension, e.\+g. agora.\+beauty. \\
\hline
{\em extension\+Info} & The information for extension. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_extension_info}{Extension\+Info}}. \\
\hline
{\em key} & The key of the extension.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
J\+S\+ON formatted string of property\textquotesingle{}s value; return null if failed 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf71be90a0e958aee09558be1aa225aa}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf71be90a0e958aee09558be1aa225aa}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startScreenCapture@{startScreenCapture}}
\index{startScreenCapture@{startScreenCapture}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startScreenCapture()}{startScreenCapture()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Screen\+Capture (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}}}]{screen\+Capture\+Parameters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts screen capture. 

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
Applicable scenarios\+: In the screen sharing scenario, you need to call this method to start capturing the screen video stream. Call timing\+: You can call this method either before or after joining the channel, with the following differences\+:
\begin{DoxyItemize}
\item Call this method first and then call {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} to join channel and set {\ttfamily publish\+Screen\+Capture\+Video} to {\ttfamily true} to start screen sharing.
\item Call this method after joining a channel, then call {\ttfamily update\+Channel\+Media\+Options} and set {\ttfamily publish\+Screen\+Capture\+Video} to {\ttfamily true} to start screen sharing.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item On the Android platform, if the user has not granted the app screen capture permission, the S\+DK reports the {\ttfamily on\+Permission\+Error} {\ttfamily (2)} callback.
\item On Android 9 and later, to avoid the application being killed by the system after going to the background, Agora recommends you add the foreground service {\ttfamily android.\+permission.\+F\+O\+R\+E\+G\+R\+O\+U\+N\+D\+\_\+\+S\+E\+R\+V\+I\+CE} to the {\ttfamily /app/\+Manifests/\+Android\+Manifest.xml} file.
\item Due to performance limitations, screen sharing is not supported on Android TV.
\item Due to system limitations, if you are using Huawei phones, do not adjust the video encoding resolution of the screen sharing stream during the screen sharing, or you could experience crashes.
\item Due to system limitations, some Xiaomi devices do not support capturing system audio during screen sharing.
\item To avoid system audio capture failure when sharing screen, Agora recommends that you set the audio application scenario to {\ttfamily A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+G\+A\+M\+E\+\_\+\+S\+T\+R\+E\+A\+M\+I\+NG} by using the {\ttfamily set\+Audio\+Scenario} method before joining the channel.
\item The billing for the screen sharing stream is based on the {\ttfamily dimensions} in {\ttfamily Video\+Capture\+Parameters}\+:
\begin{DoxyItemize}
\item When you do not pass in a value, Agora bills you at 1280 × 720.
\item When you pass in a value, Agora bills you at that value.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em screen\+Capture\+Parameters} & The screen sharing encoding parameters. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2 (Android platform)\+: The system version is too low. Ensure that the Android A\+PI level is not lower than 21.
\item -\/3 (Android platform)\+: Unable to capture system audio. Ensure that the Android A\+PI level is not lower than 29. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af959439d3f83247f41087ed653da2b01}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af959439d3f83247f41087ed653da2b01}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setExternalMediaProjection@{setExternalMediaProjection}}
\index{setExternalMediaProjection@{setExternalMediaProjection}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setExternalMediaProjection()}{setExternalMediaProjection()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+External\+Media\+Projection (\begin{DoxyParamCaption}\item[{Media\+Projection}]{media\+Projection }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Configures {\ttfamily Media\+Projection} outside of the S\+DK to capture screen video streams. 

@technical preview

After successfully calling this method, the external {\ttfamily Media\+Projection} you set will replace the {\ttfamily Media\+Projection} requested by the S\+DK to capture the screen video stream. When the screen sharing is stopped or {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} is destroyed, the S\+DK will automatically release the Media\+Projection. Applicable scenarios\+: If you are able to apply for {\ttfamily Media\+Projection}, you can directly use your {\ttfamily Media\+Projection} instead of the one applied for by the S\+DK. The following lists two applicable scenarios\+:\`{}\`{}
\begin{DoxyItemize}
\item On custom system devices, it can avoid system pop-\/ups (such as requiring user permission to capture the screen) and directly start capturing the screen video stream.
\item In a screen sharing process that involves one or more sub-\/processes, it can help avoid errors that might occur when creating objects within these sub-\/processes, which could otherwise lead to failures in screen capturing. Call timing\+: Call this method after {\ttfamily start\+Screen\+Capture}.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
Before calling this method, you must first apply for {\ttfamily Media\+Projection} permission.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em media\+Projection} & An {\ttfamily Media\+Projection} object used to capture screen video streams.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab14b55af7fd174f1e188239fdc157131}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab14b55af7fd174f1e188239fdc157131}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setScreenCaptureScenario@{setScreenCaptureScenario}}
\index{setScreenCaptureScenario@{setScreenCaptureScenario}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setScreenCaptureScenario()}{setScreenCaptureScenario()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Screen\+Capture\+Scenario (\begin{DoxyParamCaption}\item[{Constants.\+Screen\+Scenario\+Type}]{screen\+Scenario }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the screen sharing scenario. 

\begin{DoxySince}{Since}
v4.\+2.\+0
\end{DoxySince}
When you start screen sharing or window sharing, you can call this method to set the screen sharing scenario. The S\+DK adjusts the video quality and experience of the sharing according to the scenario.

\begin{DoxyNote}{Note}
Agora recommends that you call this method before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em screen\+Scenario} & The screen sharing scenario. See {\ttfamily Screen\+Scenario\+Type}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa8a6ef8909cebd023c5c229d35fb472}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa8a6ef8909cebd023c5c229d35fb472}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopScreenCapture@{stopScreenCapture}}
\index{stopScreenCapture@{stopScreenCapture}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopScreenCapture()}{stopScreenCapture()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Screen\+Capture (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops screen capture. 

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
Applicable scenarios\+: If you start screen capture by calling {\ttfamily start\+Screen\+Capture}, you need to call this method to stop screen capture. Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fa00b6bbc373b4479204d789758d63d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fa00b6bbc373b4479204d789758d63d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoScenario@{setVideoScenario}}
\index{setVideoScenario@{setVideoScenario}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoScenario()}{setVideoScenario()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Scenario (\begin{DoxyParamCaption}\item[{Constants.\+Video\+Scenario}]{scenario\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets video application scenarios. 

After successfully calling this method, the S\+DK will automatically enable the best practice strategies and adjust key performance metrics based on the specified scenario, to optimize the video experience.

\begin{DoxyNote}{Note}
Call this method before joining a channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em scenario\+Type} & The type of video application scenario. See {\ttfamily Video\+Scenario}.{\ttfamily A\+P\+P\+L\+I\+C\+A\+T\+I\+O\+N\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+M\+E\+E\+T\+I\+NG} (1) is suitable for meeting scenarios. The S\+DK automatically enables the following strategies\+:
\begin{DoxyItemize}
\item In meeting scenarios where low-\/quality video streams are required to have a high bitrate, the S\+DK automatically enables multiple technologies used to deal with network congestions, to enhance the performance of the low-\/quality streams and to ensure the smooth reception by subscribers.
\item The S\+DK monitors the number of subscribers to the high-\/quality video stream in real time and dynamically adjusts its configuration based on the number of subscribers.
\begin{DoxyItemize}
\item If nobody subscribers to the high-\/quality stream, the S\+DK automatically reduces its bitrate and frame rate to save upstream bandwidth.
\item If someone subscribes to the high-\/quality stream, the S\+DK resets the high-\/quality stream to the {\ttfamily Video\+Encoder\+Configuration} configuration used in the most recent calling of {\ttfamily set\+Video\+Encoder\+Configuration}. If no configuration has been set by the user previously, the following values are used\+:
\begin{DoxyItemize}
\item Resolution\+: 960 × 540
\item Frame rate\+: 15 fps
\item Bitrate\+: 1000 Kbps
\end{DoxyItemize}
\end{DoxyItemize}
\item The S\+DK monitors the number of subscribers to the low-\/quality video stream in real time and dynamically enables or disables it based on the number of subscribers.\+Note\+: If the user has called {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)} to set that never send low-\/quality video stream ( {\ttfamily D\+I\+S\+A\+B\+L\+E\+\_\+\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+AM} ), the dynamic adjustment of the low-\/quality stream in meeting scenarios will not take effect.
\begin{DoxyItemize}
\item If nobody subscribes to the low-\/quality stream, the S\+DK automatically disables it to save upstream bandwidth.
\item If someone subscribes to the low-\/quality stream, the S\+DK enables the low-\/quality stream and resets it to the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}} configuration used in the most recent calling of {\ttfamily set\+Dual\+Stream\+Mode(\mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_simulcast_stream_mode}{Constants.\+Simulcast\+Stream\+Mode}} mode, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} stream\+Config)}. If no configuration has been set by the user previously, the following values are used\+:
\begin{DoxyItemize}
\item Resolution\+: 480 × 272
\item Frame rate\+: 15 fps
\item Bitrate\+: 500 Kbps {\ttfamily A\+P\+P\+L\+I\+C\+A\+T\+I\+O\+N\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+1\+V1} (2) This is applicable to the {\ttfamily one to one live} scenario. To meet the requirements for low latency and high-\/quality video in this scenario, the S\+DK optimizes its strategies, improving performance in terms of video quality, first frame rendering, latency on mid-\/to-\/low-\/end devices, and smoothness under weak network conditions.\+Attention\+: This enumeration value is only applicable to the broadcaster vs. broadcaster scenario. {\ttfamily A\+P\+P\+L\+I\+C\+A\+T\+I\+O\+N\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+L\+I\+V\+E\+S\+H\+OW} (3) This is applicable to the {\ttfamily show room} scenario. In this scenario, fast video rendering and high image quality are crucial. The S\+DK implements several performance optimizations, including automatically enabling accelerated audio and video frame rendering to minimize first-\/frame latency (no need to call {\ttfamily enable\+Instant\+Media\+Rendering} ), and B-\/frame encoding to achieve better image quality and bandwidth efficiency. The S\+DK also provides enhanced video quality and smooth playback, even in poor network conditions or on lower-\/end devices.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1\+: A general error occurs (no specified reason).
\item -\/4\+: Video application scenarios are not supported. Possible reasons include that you use the Voice S\+DK instead of the Video S\+DK.
\item -\/7\+: The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object has not been initialized. You need to initialize the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f75341476b4eebc8ca2533699470a8b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f75341476b4eebc8ca2533699470a8b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setVideoQoEPreference@{setVideoQoEPreference}}
\index{setVideoQoEPreference@{setVideoQoEPreference}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoQoEPreference()}{setVideoQoEPreference()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Video\+Qo\+E\+Preference (\begin{DoxyParamCaption}\item[{Constants.\+Qo\+E\+Preference}]{qoe\+Preference }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Sets the video qoe preference.

\begin{DoxySince}{Since}
v4.\+2.\+1 You can call this method to set the expected QoE Preference. The S\+DK will optimize the video experience for each preference you set.
\end{DoxySince}

\begin{DoxyParams}{Parameters}
{\em qoe\+Preference} & he qoe preference type.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9564ff8ab6950b8ae455884decc239f3}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9564ff8ab6950b8ae455884decc239f3}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateScreenCaptureParameters@{updateScreenCaptureParameters}}
\index{updateScreenCaptureParameters@{updateScreenCaptureParameters}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateScreenCaptureParameters()}{updateScreenCaptureParameters()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Screen\+Capture\+Parameters (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}}}]{screen\+Capture\+Parameters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Updates the screen capturing parameters. 

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
\begin{DoxyNote}{Note}
Call this method after starting screen sharing or window sharing.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em screen\+Capture\+Parameters} & The screen sharing encoding parameters. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}}}.Attention\+: The video properties of the screen sharing stream only need to be set through this parameter, and are unrelated to {\ttfamily set\+Video\+Encoder\+Configuration}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid.
\item -\/8\+: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling {\ttfamily stop\+Screen\+Capture} to stop the current sharing and start sharing the screen again. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20c1dd38e24232e87d536329f556de71}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20c1dd38e24232e87d536329f556de71}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!registerVideoFrameObserver@{registerVideoFrameObserver}}
\index{registerVideoFrameObserver@{registerVideoFrameObserver}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{registerVideoFrameObserver()}{registerVideoFrameObserver()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+register\+Video\+Frame\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_frame_observer}{I\+Video\+Frame\+Observer}}}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Registers a raw video frame observer object. 

If you want to observe raw video frames (such as Y\+UV or R\+G\+BA format), Agora recommends that you implement one {\ttfamily I\+Video\+Frame\+Observer} class with this method. When calling this method to register a video observer, you can register callbacks in the {\ttfamily I\+Video\+Frame\+Observer} class as needed. After you successfully register the video frame observer, the S\+DK triggers the registered callbacks each time a video frame is received. Applicable scenarios\+: After registering the raw video observer, you can use the obtained raw video data in various video pre-\/processing scenarios, such as virtual backgrounds and image enhacement by yourself. Agora provides an open source sample project {\ttfamily beautyapi} on Git\+Hub for your reference. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}
When handling the video data returned in the callbacks, pay attention to the changes in the {\ttfamily width} and {\ttfamily height} parameters, which may be adapted under the following circumstances\+:
\begin{DoxyItemize}
\item When network conditions deteriorate, the video resolution decreases incrementally.
\item If the user adjusts the video profile, the resolution of the video returned in the callbacks also changes.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The observer instance. See {\ttfamily I\+Video\+Frame\+Observer}. To release the instance, set the value as N\+U\+LL.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af2bf8f1e94ec4d4d2a9fdaffb9d520fb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af2bf8f1e94ec4d4d2a9fdaffb9d520fb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createMediaPlayer@{createMediaPlayer}}
\index{createMediaPlayer@{createMediaPlayer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createMediaPlayer()}{createMediaPlayer()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1mediaplayer_1_1_i_media_player}{I\+Media\+Player}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Media\+Player (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a media player object. 

Before calling any A\+P\+Is in the {\ttfamily I\+Media\+Player} class, you need to call this method to create an instance of the media player. If you need to create multiple instances, you can call this method multiple times. Call timing\+: You can call this method either before or after joining a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item An {\ttfamily I\+Media\+Player} object, if the method call succeeds.
\item An empty pointer, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a82eaaee21b41e0ca6bc5c0b1c43043}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a82eaaee21b41e0ca6bc5c0b1c43043}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createMediaRecorder@{createMediaRecorder}}
\index{createMediaRecorder@{createMediaRecorder}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createMediaRecorder()}{createMediaRecorder()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Media\+Recorder (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_recorder_stream_info}{Recorder\+Stream\+Info}}}]{info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a recorder for audio and video. 

Before starting to record audio and video streams, you need to call this method to create a recorder. The S\+DK supports recording multiple audio and video streams from local or remote users. You can call this method multiple times to create multiple recorders, and specify the channel name and the user ID of the stream to be recorded through the {\ttfamily info} parameter.

After successfully creating the recorder, you need to call {\ttfamily set\+Media\+Recorder\+Observer} to register an observer for the recorder to listen for recording-\/related callbacks, and then call {\ttfamily start\+Recording} to start recording.


\begin{DoxyParams}{Parameters}
{\em info} & Information about the audio and video stream to be recorded. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_recorder_stream_info}{Recorder\+Stream\+Info}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item If the method call succeeds\+: Returns an {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}} instance.
\item If the method call fails\+: Returns a null pointer. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf80e430eb3ce8706cc5e116ae79a2d9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acf80e430eb3ce8706cc5e116ae79a2d9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroyMediaRecorder@{destroyMediaRecorder}}
\index{destroyMediaRecorder@{destroyMediaRecorder}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyMediaRecorder()}{destroyMediaRecorder()}}
{\footnotesize\ttfamily abstract void io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy\+Media\+Recorder (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}}]{media\+Recorder }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Destroys the audio and video recording object. 

When you no longer need to record audio and video streams, you can call this method to destroy the corresponding audio and video recording object. If you are currently recording, call {\ttfamily stop\+Recording} to stop the recording before calling this method to destroy the audio and video recording object.


\begin{DoxyParams}{Parameters}
{\em media\+Recorder} & The {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}} object to be destroyed.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Codes} for details and troubleshooting suggestions. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f03ac7f1e60e968c52aae4ee457fd18}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6f03ac7f1e60e968c52aae4ee457fd18}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getMediaPlayerCacheManager@{getMediaPlayerCacheManager}}
\index{getMediaPlayerCacheManager@{getMediaPlayerCacheManager}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getMediaPlayerCacheManager()}{getMediaPlayerCacheManager()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1mediaplayer_1_1_i_media_player_cache_manager}{I\+Media\+Player\+Cache\+Manager}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Media\+Player\+Cache\+Manager (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets one {\ttfamily I\+Media\+Player\+Cache\+Manager} instance. 

Before calling any A\+P\+Is in the {\ttfamily I\+Media\+Player\+Cache\+Manager} class, you need to call this method to get a cache manager instance of a media player. Call timing\+: Make sure the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} is initialized before you call this method.

\begin{DoxyNote}{Note}
The cache manager is a singleton pattern. Therefore, multiple calls to this method returns the same instance.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}
The {\ttfamily I\+Media\+Player\+Cache\+Manager} instance. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedded7eaa7135a5848532c698af03cac}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedded7eaa7135a5848532c698af03cac}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getH265Transcoder@{getH265Transcoder}}
\index{getH265Transcoder@{getH265Transcoder}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getH265Transcoder()}{getH265Transcoder()}}
{\footnotesize\ttfamily abstract \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_h265_transcoder}{I\+H265\+Transcoder}} io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+H265\+Transcoder (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

get an H265\+Transcoder instance, which is used to \begin{DoxyReturn}{Returns}
\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_h265_transcoder}{I\+H265\+Transcoder}} 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a85d5cbe15b4b615def22a5f1e7972aee}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a85d5cbe15b4b615def22a5f1e7972aee}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableExternalAudioSourceLocalPlayback@{enableExternalAudioSourceLocalPlayback}}
\index{enableExternalAudioSourceLocalPlayback@{enableExternalAudioSourceLocalPlayback}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExternalAudioSourceLocalPlayback()}{enableExternalAudioSourceLocalPlayback()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+External\+Audio\+Source\+Local\+Playback (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Enable or disable the external audio source local playback.


\begin{DoxyItemize}
\item 
\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the external audio source local playback\+:\\
\hline
\end{DoxyParams}

\item true\+: Enable the external audio source local playback.
\item false\+: (default) Disable the external audio source local playback. \begin{DoxyReturn}{Returns}

\end{DoxyReturn}

\item 0\+: Success.
\item $<$0\+: Failure. 
\end{DoxyItemize}\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8b5f9a0bd175de8d2929b6e96eaed8b9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8b5f9a0bd175de8d2929b6e96eaed8b9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustCustomAudioPublishVolume@{adjustCustomAudioPublishVolume}}
\index{adjustCustomAudioPublishVolume@{adjustCustomAudioPublishVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustCustomAudioPublishVolume()}{adjustCustomAudioPublishVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Custom\+Audio\+Publish\+Volume (\begin{DoxyParamCaption}\item[{int}]{track\+Id,  }\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the volume of the custom audio track played remotely. 

If you want to change the volume of the audio played remotely, you need to call this method again.

\begin{DoxyNote}{Note}
Ensure you have called the {\ttfamily create\+Custom\+Audio\+Track} method to create a custom audio track before calling this method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Id} & The audio track ID. Set this parameter to the custom audio track ID returned in {\ttfamily create\+Custom\+Audio\+Track}. \\
\hline
{\em volume} & The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2446f78169660ad941fd08ed0264a49e}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2446f78169660ad941fd08ed0264a49e}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!adjustCustomAudioPlayoutVolume@{adjustCustomAudioPlayoutVolume}}
\index{adjustCustomAudioPlayoutVolume@{adjustCustomAudioPlayoutVolume}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustCustomAudioPlayoutVolume()}{adjustCustomAudioPlayoutVolume()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+adjust\+Custom\+Audio\+Playout\+Volume (\begin{DoxyParamCaption}\item[{int}]{track\+Id,  }\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Adjusts the volume of the custom audio track played locally. 

If you want to change the volume of the audio to be played locally, you need to call this method again.

\begin{DoxyNote}{Note}
Ensure you have called the {\ttfamily create\+Custom\+Audio\+Track} method to create a custom audio track before calling this method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Id} & The audio track ID. Set this parameter to the custom audio track ID returned in {\ttfamily create\+Custom\+Audio\+Track}. \\
\hline
{\em volume} & The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac21f0ce46af46c474fc967810b89d771}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac21f0ce46af46c474fc967810b89d771}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startRhythmPlayer@{startRhythmPlayer}}
\index{startRhythmPlayer@{startRhythmPlayer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startRhythmPlayer()}{startRhythmPlayer()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Rhythm\+Player (\begin{DoxyParamCaption}\item[{String}]{sound1,  }\item[{String}]{sound2,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_agora_rhythm_player_config}{Agora\+Rhythm\+Player\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables the virtual metronome. 


\begin{DoxyItemize}
\item After enabling the virtual metronome, the S\+DK plays the specified audio effect file from the beginning, and controls the playback duration of each file according to {\ttfamily beats\+Per\+Minute} you set in {\ttfamily Agora\+Rhythm\+Player\+Config}. For example, if you set {\ttfamily beats\+Per\+Minute} as {\ttfamily 60}, the S\+DK plays one beat every second. If the file duration exceeds the beat duration, the S\+DK only plays the audio within the beat duration.
\item By default, the sound of the virtual metronome is published in the channel. If you want the sound to be heard by the remote users, you can set {\ttfamily publish\+Rhythm\+Player\+Track} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} as {\ttfamily true}. Applicable scenarios\+: In music education, physical education and other scenarios, teachers usually need to use a metronome so that students can practice with the correct beat. The meter is composed of a downbeat and upbeats. The first beat of each measure is called a downbeat, and the rest are called upbeats. Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: After successfully calling this method, the S\+DK triggers the {\ttfamily on\+Rhythm\+Player\+State\+Changed} callback locally to report the status of the virtual metronome.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em sound1} & The absolute path or U\+RL address (including the filename extensions) of the file for the downbeat. For example, {\ttfamily content\+://com.android.\+providers.\+media.\+documents/document/audio\%203A14441}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. \\
\hline
{\em sound2} & The absolute path or U\+RL address (including the filename extensions) of the file for the upbeats. For example, {\ttfamily content\+://com.android.\+providers.\+media.\+documents/document/audio\%203A14441}. For the audio file formats supported by this method, see {\ttfamily What formats of audio files does the Agora R\+TC S\+DK support}. \\
\hline
{\em config} & The metronome configuration. See {\ttfamily Agora\+Rhythm\+Player\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/22\+: Cannot find audio effect files. Please set the correct paths for {\ttfamily sound1} and {\ttfamily sound2}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6c0b5186b0618831994e964c2177ffed}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6c0b5186b0618831994e964c2177ffed}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopRhythmPlayer@{stopRhythmPlayer}}
\index{stopRhythmPlayer@{stopRhythmPlayer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopRhythmPlayer()}{stopRhythmPlayer()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Rhythm\+Player (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Disables the virtual metronome. 

After calling {\ttfamily start\+Rhythm\+Player}, you can call this method to disable the virtual metronome.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaeb6ed4b4ebceff99b542d8f0a7c1f7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aeaeb6ed4b4ebceff99b542d8f0a7c1f7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!configRhythmPlayer@{configRhythmPlayer}}
\index{configRhythmPlayer@{configRhythmPlayer}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{configRhythmPlayer()}{configRhythmPlayer()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+config\+Rhythm\+Player (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_agora_rhythm_player_config}{Agora\+Rhythm\+Player\+Config}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Configures the virtual metronome. 


\begin{DoxyItemize}
\item After calling {\ttfamily start\+Rhythm\+Player}, you can call this method to reconfigure the virtual metronome.
\item After enabling the virtual metronome, the S\+DK plays the specified audio effect file from the beginning, and controls the playback duration of each file according to {\ttfamily beats\+Per\+Minute} you set in {\ttfamily Agora\+Rhythm\+Player\+Config}. For example, if you set {\ttfamily beats\+Per\+Minute} as {\ttfamily 60}, the S\+DK plays one beat every second. If the file duration exceeds the beat duration, the S\+DK only plays the audio within the beat duration.
\item By default, the sound of the virtual metronome is published in the channel. If you want the sound to be heard by the remote users, you can set {\ttfamily publish\+Rhythm\+Player\+Track} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} as {\ttfamily true}. Call timing\+: This method can be called either before or after joining the channel. Related callbacks\+: After successfully calling this method, the S\+DK triggers the {\ttfamily on\+Rhythm\+Player\+State\+Changed} callback locally to report the status of the virtual metronome.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em config} & The metronome configuration. See {\ttfamily Agora\+Rhythm\+Player\+Config}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc15013468e36f69262b10f056c14e55}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc15013468e36f69262b10f056c14e55}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setDirectCdnStreamingAudioConfiguration@{setDirectCdnStreamingAudioConfiguration}}
\index{setDirectCdnStreamingAudioConfiguration@{setDirectCdnStreamingAudioConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setDirectCdnStreamingAudioConfiguration()}{setDirectCdnStreamingAudioConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Direct\+Cdn\+Streaming\+Audio\+Configuration (\begin{DoxyParamCaption}\item[{int}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the audio profile of the audio streams directly pushed to the C\+DN by the host. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000054}{Deprecated}}]v4.\+6.\+0.\end{DoxyRefDesc}


When you set the {\ttfamily publish\+Microphone\+Track} or {\ttfamily publish\+Custom\+Audio\+Track} in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}} as {\ttfamily true} to capture audios, you can call this method to set the audio profile.


\begin{DoxyParams}{Parameters}
{\em profile} & The audio profile, including the sampling rate, bitrate, encoding mode, and the number of channels.
\begin{DoxyItemize}
\item {\ttfamily D\+E\+F\+A\+U\+LT}(0)\+: The default value.
\begin{DoxyItemize}
\item For the interactive streaming profile\+: A sample rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item For the communication profile\+: A sample rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\end{DoxyItemize}
\item {\ttfamily S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(1)\+: A sampling rate of 32 k\+Hz, audio encoding, mono, and a bitrate of up to 18 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+RD}(2)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 64 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+EO}(3)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 80 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4)\+: A sampling rate of 48 k\+Hz, music encoding, mono, and a bitrate of up to 96 Kbps.
\item {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+EO}(5)\+: A sampling rate of 48 k\+Hz, music encoding, stereo, and a bitrate of up to 128 Kbps.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70b9ca001d4ab50e04a8d15bd6043d4b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a70b9ca001d4ab50e04a8d15bd6043d4b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setDirectCdnStreamingVideoConfiguration@{setDirectCdnStreamingVideoConfiguration}}
\index{setDirectCdnStreamingVideoConfiguration@{setDirectCdnStreamingVideoConfiguration}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setDirectCdnStreamingVideoConfiguration()}{setDirectCdnStreamingVideoConfiguration()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Direct\+Cdn\+Streaming\+Video\+Configuration (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets the video profile of the media streams directly pushed to the C\+DN by the host. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000055}{Deprecated}}]v4.\+6.\+0.\end{DoxyRefDesc}


This method only affects video streams captured by cameras or screens, or from custom video capture sources. That is, when you set {\ttfamily publish\+Camera\+Track} or {\ttfamily publish\+Custom\+Video\+Track} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}} as {\ttfamily true} to capture videos, you can call this method to set the video profiles. If your local camera does not support the video resolution you set,the S\+DK automatically adjusts the video resolution to a value that is closest to your settings for capture, encoding or streaming, with the same aspect ratio as the resolution you set. You can get the actual resolution of the video streams through the {\ttfamily on\+Direct\+Cdn\+Streaming\+Stats} callback.


\begin{DoxyParams}{Parameters}
{\em config} & Video profile. See {\ttfamily Video\+Encoder\+Configuration}.Note\+: During C\+DN live streaming, Agora only supports setting {\ttfamily O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+DE} as {\ttfamily O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+D\+E\+\_\+\+F\+I\+X\+E\+D\+\_\+\+L\+A\+N\+D\+S\+C\+A\+PE} or {\ttfamily O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+D\+E\+\_\+\+F\+I\+X\+E\+D\+\_\+\+P\+O\+R\+T\+R\+A\+IT}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7c50fe9a5721e53732023e44bb43ac8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7c50fe9a5721e53732023e44bb43ac8}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getCurrentMonotonicTimeInMs@{getCurrentMonotonicTimeInMs}}
\index{getCurrentMonotonicTimeInMs@{getCurrentMonotonicTimeInMs}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getCurrentMonotonicTimeInMs()}{getCurrentMonotonicTimeInMs()}}
{\footnotesize\ttfamily abstract long io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Current\+Monotonic\+Time\+In\+Ms (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the current Monotonic Time of the S\+DK. 

Monotonic Time refers to a monotonically increasing time series whose value increases over time. The unit is milliseconds. In custom video capture and custom audio capture scenarios, in order to ensure audio and video synchronization, Agora recommends that you call this method to obtain the current Monotonic Time of the S\+DK, and then pass this value into the timestamp parameter in the captured video frame ( {\ttfamily Video\+Frame} ) and audio frame ( {\ttfamily Audio\+Frame} ). Call timing\+: This method can be called either before or after joining the channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The method call is successful, and returns the current Monotonic Time of the S\+DK (in milliseconds).
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8efda37843613bf3ff9241448776bec9}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8efda37843613bf3ff9241448776bec9}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startDirectCdnStreaming@{startDirectCdnStreaming}}
\index{startDirectCdnStreaming@{startDirectCdnStreaming}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startDirectCdnStreaming()}{startDirectCdnStreaming()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Direct\+Cdn\+Streaming (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_direct_cdn_streaming_event_handler}{I\+Direct\+Cdn\+Streaming\+Event\+Handler}}}]{event\+Handler,  }\item[{String}]{publish\+Url,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Starts pushing media streams to the C\+DN directly. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000056}{Deprecated}}]v4.\+6.\+0.\end{DoxyRefDesc}


Aogra does not support pushing media streams to one U\+RL repeatedly. {\bfseries{Media options}} Agora does not support setting the value of {\ttfamily publish\+Camera\+Track} and {\ttfamily publish\+Custom\+Video\+Track} as {\ttfamily true}, or the value of {\ttfamily publish\+Microphone\+Track} and {\ttfamily publish\+Custom\+Audio\+Track} as {\ttfamily true} at the same time. When choosing media setting options ( {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}} ), you can refer to the following examples\+: If you want to push audio and video streams captured by the host from a custom source, the media setting options should be set as follows\+:
\begin{DoxyItemize}
\item {\ttfamily publish\+Custom\+Audio\+Track} is set as {\ttfamily true} and call the {\ttfamily push\+External\+Audio\+Frame} method
\item {\ttfamily publish\+Custom\+Video\+Track} is set as {\ttfamily true} and call the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0a4425a1ab6b833b21e200e39b2c9d61}{push\+External\+Video\+Frame\+By\+Id(\+Agora\+Video\+Frame frame, int video\+Track\+Id)}}} method
\item {\ttfamily publish\+Camera\+Track} is set as {\ttfamily false} (the default value)
\item {\ttfamily publish\+Microphone\+Track} is set as {\ttfamily false} (the default value) As of v4.\+2.\+0, Agora S\+DK supports audio-\/only live streaming. You can set {\ttfamily publish\+Custom\+Audio\+Track} or {\ttfamily publish\+Microphone\+Track} in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}} as {\ttfamily true} and call {\ttfamily push\+External\+Audio\+Frame} to push audio streams.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
Agora only supports pushing one audio and video streams or one audio streams to C\+DN.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em event\+Handler} & See {\ttfamily on\+Direct\+Cdn\+Streaming\+State\+Changed} and {\ttfamily on\+Direct\+Cdn\+Streaming\+Stats}. \\
\hline
{\em publish\+Url} & The C\+DN live streaming U\+RL. \\
\hline
{\em options} & The media setting options for the host. See {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ab7e0ff379f8ad33b86526189071077}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ab7e0ff379f8ad33b86526189071077}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!stopDirectCdnStreaming@{stopDirectCdnStreaming}}
\index{stopDirectCdnStreaming@{stopDirectCdnStreaming}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{stopDirectCdnStreaming()}{stopDirectCdnStreaming()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+stop\+Direct\+Cdn\+Streaming (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Stops pushing media streams to the C\+DN directly. 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000057}{Deprecated}}]v4.\+6.\+0.\end{DoxyRefDesc}


\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad21c9753722bd6d5c782f179bc7385f5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad21c9753722bd6d5c782f179bc7385f5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!updateDirectCdnStreamingMediaOptions@{updateDirectCdnStreamingMediaOptions}}
\index{updateDirectCdnStreamingMediaOptions@{updateDirectCdnStreamingMediaOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{updateDirectCdnStreamingMediaOptions()}{updateDirectCdnStreamingMediaOptions()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+update\+Direct\+Cdn\+Streaming\+Media\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Change the media source during the pushing

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000058}{Deprecated}}]v4.\+6.\+0.\end{DoxyRefDesc}


\begin{DoxyNote}{Note}
This method is temporarily not supported
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & The direct cdn streaming media options\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a00212b2c259519bbf14f4268ac3efa09}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a00212b2c259519bbf14f4268ac3efa09}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createCustomVideoTrack@{createCustomVideoTrack}}
\index{createCustomVideoTrack@{createCustomVideoTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createCustomVideoTrack()}{createCustomVideoTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Custom\+Video\+Track (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Creates a custom video track. 

To publish a custom video source, see the following steps\+:1. Call this method to create a video track and get the video track ID.
\begin{DoxyEnumerate}
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aed8279d06ee29f1cd6c4ca029cb63514}{join\+Channel(\+String token, String channel\+Id, int uid, Channel\+Media\+Options options)}}} to join the channel. In {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}}, set {\ttfamily custom\+Video\+Track\+Id} to the video track ID that you want to publish, and set {\ttfamily publish\+Custom\+Video\+Track} to {\ttfamily true}.
\item Call {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa846bf55e5224c170493ff98f49fcc16}{push\+External\+Video\+Frame\+By\+Id(\+Video\+Frame frame, int video\+Track\+Id)}}} and specify {\ttfamily video\+Track\+Id} as the video track ID set in step 2. You can then publish the corresponding custom video source in the channel.
\end{DoxyEnumerate}

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item If the method call is successful, the video track ID is returned as the unique identifier of the video track.
\item If the method call fails, 0xffffffff is returned. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adf29679eaef7d9b6013b6f49a3680d81}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adf29679eaef7d9b6013b6f49a3680d81}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!createCustomEncodedVideoTrack@{createCustomEncodedVideoTrack}}
\index{createCustomEncodedVideoTrack@{createCustomEncodedVideoTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{createCustomEncodedVideoTrack()}{createCustomEncodedVideoTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+create\+Custom\+Encoded\+Video\+Track (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_encoded_video_track_options}{Encoded\+Video\+Track\+Options}}}]{encoded\+Opt }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Get an custom encoded video track id created by internal,which could used to publish or preview

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item $>$ 0\+: the useable video track id.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0d5411060829c96ad7795d29b53be05d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0d5411060829c96ad7795d29b53be05d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroyCustomVideoTrack@{destroyCustomVideoTrack}}
\index{destroyCustomVideoTrack@{destroyCustomVideoTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyCustomVideoTrack()}{destroyCustomVideoTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy\+Custom\+Video\+Track (\begin{DoxyParamCaption}\item[{int}]{video\+\_\+track\+\_\+id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Destroys the specified video track. 


\begin{DoxyParams}{Parameters}
{\em video\+\_\+track\+\_\+id} & The video track ID returned by calling the {\ttfamily create\+Custom\+Video\+Track} method.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad642edcdd030091932a8595478f72522}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad642edcdd030091932a8595478f72522}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!destroyCustomEncodedVideoTrack@{destroyCustomEncodedVideoTrack}}
\index{destroyCustomEncodedVideoTrack@{destroyCustomEncodedVideoTrack}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyCustomEncodedVideoTrack()}{destroyCustomEncodedVideoTrack()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy\+Custom\+Encoded\+Video\+Track (\begin{DoxyParamCaption}\item[{int}]{video\+\_\+track\+\_\+id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

destroy a created custom encoded video track id


\begin{DoxyParams}{Parameters}
{\em video\+\_\+track\+\_\+id} & The video track id which was created by create\+Custom\+Encoded\+Video\+Track \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1dc1f4c114f5f96dfacfbeedb6959ca7}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1dc1f4c114f5f96dfacfbeedb6959ca7}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setCloudProxy@{setCloudProxy}}
\index{setCloudProxy@{setCloudProxy}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setCloudProxy()}{setCloudProxy()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Cloud\+Proxy (\begin{DoxyParamCaption}\item[{int}]{proxy\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets up cloud proxy service. 

When users\textquotesingle{} network access is restricted by a firewall, configure the firewall to allow specific IP addresses and ports provided by Agora; then, call this method to enable the cloud {\ttfamily proxy\+Type} and set the cloud proxy type with the proxy\+Type parameter. After successfully connecting to the cloud proxy, the S\+DK triggers the {\ttfamily on\+Connection\+State\+Changed} ( C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+NG, C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+C\+H\+A\+N\+G\+E\+D\+\_\+\+S\+E\+T\+T\+I\+N\+G\+\_\+\+P\+R\+O\+X\+Y\+\_\+\+S\+E\+R\+V\+ER ) callback. To disable the cloud proxy that has been set, call the {\ttfamily set\+Cloud\+Proxy(\+T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+O\+N\+E\+\_\+\+P\+R\+O\+X\+Y)}. To change the cloud proxy type that has been set, call the {\ttfamily set\+Cloud\+Proxy} {\ttfamily (T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+O\+N\+E\+\_\+\+P\+R\+O\+XY)} first, and then call the {\ttfamily set\+Cloud\+Proxy} to set the {\ttfamily proxy\+Type} you want.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Agora recommends that you call this method before joining a channel.
\item When a user is behind a firewall and uses the Force U\+DP cloud proxy, the services for Media Push and cohosting across channels are not available.
\item When you use the Force T\+CP cloud proxy, note that an error would occur when calling the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a47d69cd55bd3ec87dfec7060c7b9b045}{start\+Audio\+Mixing(\+String file\+Path, boolean loopback, int cycle, int start\+Pos)}}} method to play online music files in the H\+T\+TP protocol. The services for Media Push and cohosting across channels use the cloud proxy with the T\+CP protocol.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em proxy\+Type} & The type of the cloud proxy.
\begin{DoxyItemize}
\item T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+O\+N\+E\+\_\+\+P\+R\+O\+XY (0)\+: The automatic mode. The S\+DK has this mode enabled by default. In this mode, the S\+DK attempts a direct connection to S\+D-\/\+R\+T\+N™ and automatically switches to T\+C\+P/\+T\+LS 443 if the attempt fails.
\item T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+U\+D\+P\+\_\+\+P\+R\+O\+XY (1)\+: The cloud proxy for the U\+DP protocol, that is, the Force U\+DP cloud proxy mode. In this mode, the S\+DK always transmits data over U\+DP.
\item T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+T\+C\+P\+\_\+\+P\+R\+O\+XY (2)\+: The cloud proxy for the T\+CP (encryption) protocol, that is, the Force T\+CP cloud proxy mode. In this mode, the S\+DK always transmits data over T\+C\+P/\+T\+LS 443. This parameter is mandatory. The S\+DK reports an error if you do not pass in a value.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The parameter is invalid.
\item -\/7\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39207f6b1f7136fe8faf6ef15915b97d}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39207f6b1f7136fe8faf6ef15915b97d}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalAccessPoint@{setLocalAccessPoint}}
\index{setLocalAccessPoint@{setLocalAccessPoint}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalAccessPoint()}{setLocalAccessPoint()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Access\+Point (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1proxy_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}}}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Configures the connection to the Agora private media server access module. 

After successfully deploying the Agora private media server and integrating the 4.\+x R\+TC S\+DK into your internal network client, you can call this method to specify the Local Access Point and assign the access module to the S\+DK. Call timing\+: You must call this method before joining a channel.

\begin{DoxyNote}{Note}
This method takes effect only after deploying the Agora hybrid cloud solution. You can {\ttfamily contact sales} to learn more about and deploy the Agora hybrid cloud.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Local Access Point configuration. See {\ttfamily Local\+Access\+Point\+Configuration} for details.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Codes} for details and troubleshooting suggestions. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa346adbce32299be61c6df4b7bbf104}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa346adbce32299be61c6df4b7bbf104}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableCustomAudioLocalPlayback@{enableCustomAudioLocalPlayback}}
\index{enableCustomAudioLocalPlayback@{enableCustomAudioLocalPlayback}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableCustomAudioLocalPlayback()}{enableCustomAudioLocalPlayback()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Custom\+Audio\+Local\+Playback (\begin{DoxyParamCaption}\item[{int}]{track\+Id,  }\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets whether to enable the local playback of external audio source. 

After calling this method to enable the local playback of external audio source, if you need to stop local playback, you can call this method again and set {\ttfamily enabled} to {\ttfamily false}. You can call {\ttfamily adjust\+Custom\+Audio\+Playout\+Volume} to adjust the local playback volume of the custom audio track.

\begin{DoxyNote}{Note}
Ensure you have called the {\ttfamily create\+Custom\+Audio\+Track} method to create a custom audio track before calling this method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Id} & The audio track ID. Set this parameter to the custom audio track ID returned in {\ttfamily create\+Custom\+Audio\+Track}. \\
\hline
{\em enabled} & Whether to play the external audio source\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Play the external audio source.
\item {\ttfamily false}\+: (Default) Do not play the external source.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0685b074ebd9c6bc68c302d3e4715819}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0685b074ebd9c6bc68c302d3e4715819}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAdvancedAudioOptions@{setAdvancedAudioOptions}}
\index{setAdvancedAudioOptions@{setAdvancedAudioOptions}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAdvancedAudioOptions()}{setAdvancedAudioOptions()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Advanced\+Audio\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1audio_1_1_advanced_audio_options}{Advanced\+Audio\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets audio advanced options. 

If you have advanced audio processing requirements, such as capturing and sending stereo audio, you can call this method to set advanced audio options.

\begin{DoxyNote}{Note}
Call this method after calling {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)}, {\ttfamily enable\+Audio} and {\ttfamily enable\+Local\+Audio}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & The advanced options for audio. See {\ttfamily Advanced\+Audio\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a452919534a48a99e66cc2f1602699d11}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a452919534a48a99e66cc2f1602699d11}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setAVSyncSource@{setAVSyncSource}}
\index{setAVSyncSource@{setAVSyncSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setAVSyncSource()}{setAVSyncSource()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+A\+V\+Sync\+Source (\begin{DoxyParamCaption}\item[{String}]{channel\+Id,  }\item[{int}]{uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets audio-\/video synchronization on the publishing side. 

A single user may use two separate devices to send audio and video streams respectively. To ensure that the audio and video received are synchronized in time, you can call this method on the video publishing device and pass in the channel name and user ID of the audio publishing device. The S\+DK uses the timestamp of the sent audio stream as the reference and automatically adjusts the video stream accordingly. This ensures time synchronization of the received audio and video even if the two publishing devices have different uplink network conditions (e.\+g., one using Wi-\/\+Fi and the other using 4G).

\begin{DoxyNote}{Note}
It is recommended that you call this method before joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em channel\+Id} & The name of the channel where the audio publishing device is located. \\
\hline
{\em uid} & The user ID of the audio publishing device.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails. See {\ttfamily Error Codes} for details and troubleshooting advice. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a7d92023c61cd5fd38cceb5cae6a901}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a7d92023c61cd5fd38cceb5cae6a901}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableVideoImageSource@{enableVideoImageSource}}
\index{enableVideoImageSource@{enableVideoImageSource}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVideoImageSource()}{enableVideoImageSource()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Video\+Image\+Source (\begin{DoxyParamCaption}\item[{boolean}]{enabled,  }\item[{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_image_track_options}{Image\+Track\+Options}}}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Sets whether to replace the current video feeds with images when publishing video streams. 

When publishing video streams, you can call this method to replace the current video feeds with custom images. Once you enable this function, you can select images to replace the video feeds through the {\ttfamily Image\+Track\+Options} parameter. If you disable this function, the remote users see the video feeds that you publish. Call timing\+: Call this method after joining a channel.


\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to replace the current video feeds with custom images\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Replace the current video feeds with custom images.
\item {\ttfamily false}\+: (Default) Do not replace the current video feeds with custom images. 
\end{DoxyItemize}\\
\hline
{\em options} & Image configurations. See {\ttfamily Image\+Track\+Options}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad42e1c1aa220a217f7626579a5a90697}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad42e1c1aa220a217f7626579a5a90697}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getNetworkType@{getNetworkType}}
\index{getNetworkType@{getNetworkType}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getNetworkType()}{getNetworkType()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Network\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the type of the local network connection. 

You can use this method to get the type of network in use at any stage.

\begin{DoxyNote}{Note}
You can call this method either before or after joining a channel.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item ≥ 0\+: The method call is successful, and the local network connection type is returned.
\begin{DoxyItemize}
\item 0\+: The S\+DK disconnects from the network.
\item 1\+: The network type is L\+AN.
\item 2\+: The network type is Wi-\/\+Fi (including hotspots).
\item 3\+: The network type is mobile 2G.
\item 4\+: The network type is mobile 3G.
\item 5\+: The network type is mobile 4G.
\item 6\+: The network type is mobile 5G.
\end{DoxyItemize}
\item $<$ 0\+: The method call failed with an error code.
\begin{DoxyItemize}
\item -\/1\+: The network type is unknown. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a96b09af0aaf427482752380d3722e78b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a96b09af0aaf427482752380d3722e78b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!getNtpWallTimeInMs@{getNtpWallTimeInMs}}
\index{getNtpWallTimeInMs@{getNtpWallTimeInMs}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{getNtpWallTimeInMs()}{getNtpWallTimeInMs()}}
{\footnotesize\ttfamily abstract long io.\+agora.\+rtc2.\+Rtc\+Engine.\+get\+Ntp\+Wall\+Time\+In\+Ms (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Gets the current N\+TP (Network Time Protocol) time. 

In the real-\/time chorus scenario, especially when the downlink connections are inconsistent due to network issues among multiple receiving ends, you can call this method to obtain the current N\+TP time as the reference time, in order to align the lyrics and music of multiple receiving ends and achieve chorus synchronization.

\begin{DoxyReturn}{Returns}
The Unix timestamp (ms) of the current N\+TP time. 
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a954f0e6d1d2576ed719becd55d2526f5}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a954f0e6d1d2576ed719becd55d2526f5}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!startMediaRenderingTracing@{startMediaRenderingTracing}}
\index{startMediaRenderingTracing@{startMediaRenderingTracing}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{startMediaRenderingTracing()}{startMediaRenderingTracing()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+start\+Media\+Rendering\+Tracing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables tracing the video frame rendering process. 

\begin{DoxySince}{Since}
v4.\+1.\+1
\end{DoxySince}
The S\+DK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the {\ttfamily on\+Video\+Rendering\+Tracing\+Result} callback. Applicable scenarios\+: Agora recommends that you use this method in conjunction with the UI settings (such as buttons and sliders) in your app to improve the user experience. For example, call this method when the user clicks the Join Channel button, and then get the time spent during the video frame rendering process through the {\ttfamily on\+Video\+Rendering\+Tracing\+Result} callback, so as to optimize the indicators accordingly.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you have not called this method, the S\+DK tracks the rendering events of the video frames from the moment you call {\ttfamily join\+Channel(String token, String channel\+Id, int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} options)} to join the channel. You can call this method at an appropriate time according to the actual application scenario to set the starting position for tracking video rendering events.
\item After the local user leaves the current channel, the S\+DK automatically tracks the video rendering events from the moment you join a channel.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The method is called before {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} is initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c761e2401bcb64a25af57652954f7d0}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2c761e2401bcb64a25af57652954f7d0}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableInstantMediaRendering@{enableInstantMediaRendering}}
\index{enableInstantMediaRendering@{enableInstantMediaRendering}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableInstantMediaRendering()}{enableInstantMediaRendering()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Instant\+Media\+Rendering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Enables audio and video frame instant rendering. 

\begin{DoxySince}{Since}
v4.\+1.\+1
\end{DoxySince}
After successfully calling this method, the S\+DK enables the instant frame rendering mode, which can speed up the first frame rendering after the user joins the channel. Applicable scenarios\+: Agora recommends that you enable this mode for the audience in a live streaming scenario. Call timing\+: Call this method before joining a channel.

\begin{DoxyNote}{Note}
Both the host and audience member need to call this method in order to experience instant rendering of audio and video frames. Once the method is successfully called, you can only cancel instant rendering by calling {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy()}}} to destroy the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7\+: The method is called before {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} is initialized. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab167f715ce669feff463bfd3c5103d01}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab167f715ce669feff463bfd3c5103d01}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setupAudioAttributes@{setupAudioAttributes}}
\index{setupAudioAttributes@{setupAudioAttributes}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setupAudioAttributes()}{setupAudioAttributes()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+setup\+Audio\+Attributes (\begin{DoxyParamCaption}\item[{Audio\+Attributes}]{attr }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

配置\+Audio\+Attribute

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item 该方法在加入频道前调用
\item 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em Audio\+Attributes} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: 方法调用成功
\end{DoxyItemize}
\end{DoxyReturn}

\begin{DoxyItemize}
\item $<$ 0\+: 方法调用失败 
\end{DoxyItemize}\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a721a8ebf9fc006f6de61f9a8936b531f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a721a8ebf9fc006f6de61f9a8936b531f}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!isFeatureAvailableOnDevice@{isFeatureAvailableOnDevice}}
\index{isFeatureAvailableOnDevice@{isFeatureAvailableOnDevice}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{isFeatureAvailableOnDevice()}{isFeatureAvailableOnDevice()}}
{\footnotesize\ttfamily abstract boolean io.\+agora.\+rtc2.\+Rtc\+Engine.\+is\+Feature\+Available\+On\+Device (\begin{DoxyParamCaption}\item[{int}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Checks whether the device supports the specified advanced feature. 

\begin{DoxySince}{Since}
v4.\+3.\+0
\end{DoxySince}
Checks whether the capabilities of the current device meet the requirements for advanced features such as virtual background and image enhancement. Applicable scenarios\+: 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\textquotesingle{}s capabilities are insufficient.


\begin{DoxyParams}{Parameters}
{\em type} & The type of the advanced feature.
\begin{DoxyItemize}
\item F\+E\+A\+T\+U\+R\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+ND (1)\+: Virutual background.
\item F\+E\+A\+T\+U\+R\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+B\+E\+A\+U\+T\+Y\+\_\+\+E\+F\+F\+E\+CT (2)\+: Image enhancement.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}\+: The current device supports the specified feature.
\item {\ttfamily false}\+: The current device does not support the specified feature. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5cd7e15bca454cdd1d541957a15d40eb}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5cd7e15bca454cdd1d541957a15d40eb}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!sendAudioMetadata@{sendAudioMetadata}}
\index{sendAudioMetadata@{sendAudioMetadata}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{sendAudioMetadata()}{sendAudioMetadata()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+send\+Audio\+Metadata (\begin{DoxyParamCaption}\item[{byte\mbox{[}$\,$\mbox{]}}]{metadata }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}



Send audio metadata. 

\begin{DoxySince}{Since}
v4.\+3.\+1 
\end{DoxySince}

\begin{DoxyParams}{Parameters}
{\em metadata} & Audio Metadata. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. @technical preview 
\end{DoxyItemize}
\end{DoxyReturn}
