\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}{set\+Client\+Role}} (int role)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36f318ebd447878bba6789836cf0f89f}{update\+Preload\+Channel\+Token}} (String token)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c8f9a9cabfb7ac7e71990525910793e}{renew\+Token}} (String token)
\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}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a278f1f8eb83ce0665c4417ac6cfc96d8}{enable\+Web\+Sdk\+Interoperability}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b7763c95e0adf259bc9a2e129678af7}{get\+Connection\+State}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adcfff23cc12e91cde1a7dcddbbcb607c}{enable\+Audio}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae0ab52549f9323ffed182c22354bcd78}{disable\+Audio}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac4d4cabacd4c45dcbb7439ba9d86136e}{set\+Audio\+Profile}} (int profile, int scenario)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a486279ba467cdbd04bb1fbe443dac9ef}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a486279ba467cdbd04bb1fbe443dac9ef}} 
abstract int {\bfseries set\+Audio\+Scenario} (int scenario)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a222d08f40629b38390606a4ee26fc3fb}{adjust\+Playback\+Signal\+Volume}} (int volume)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae48eb47f2af9c3e55d55d1fd0516131}{enable\+Local\+Audio}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2214ae694000345bbeaa9610411e52b7}{mute\+Local\+Audio\+Stream}} (boolean muted)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0608e571f04aac18473c1cefc5bc35db}{mute\+Remote\+Audio\+Stream}} (int uid, boolean muted)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a22fedd8b7c6484918eb7cbdad78ffcee}{adjust\+User\+Playback\+Signal\+Volume}} (int uid, int volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a300aaecf6aba89a95005d3ad6e7957b9}{mute\+All\+Remote\+Audio\+Streams}} (boolean muted)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7dbba3464a6c44818282ad920e4097bc}{disable\+Video}} ()
\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)
\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}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7a5c0d41afd03f4d91df64911ee9eff9}{query\+Device\+Score}} ()
\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}} ()
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}{start\+Preview}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a73e309d45cc7d9b8e657833137ca2bd5}{start\+Preview}} (Constants.\+Video\+Source\+Type source\+Type)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}{stop\+Preview}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9899967cfeed29860bee3b24b5c01eb2}{stop\+Preview}} (Constants.\+Video\+Source\+Type source\+Type)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a80351723711a6f3a66abcc287154eb10}{enable\+Local\+Video}} (boolean enabled)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab13536b8e10175f429d822140de8611c}{stop\+Camera\+Capture}} (Constants.\+Video\+Source\+Type source\+Type)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5f2495ad78475daa85329aea53774023}{stop\+Local\+Video\+Transcoder}} ()
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae6bb70ab022e56eee9141d19acc416e}{stop\+Local\+Audio\+Mixer}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a20fd1bfb77864b47bc264fc370b0fae3}{mute\+Local\+Video\+Stream}} (boolean muted)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac8c1db59fa60aa6c04c40d492a218129}{mute\+Remote\+Video\+Stream}} (int uid, boolean muted)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae74ecd1bf61812930605994bd1bb77c}{mute\+All\+Remote\+Video\+Streams}} (boolean muted)
\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)
\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)
\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)
\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)
\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}} ()
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5861f16ae4025a0bee7eb8b4e5096d86}{set\+Default\+Audio\+Routeto\+Speakerphone}} (boolean default\+To\+Speaker)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5dce9e487806eb87da6c142450498f61}{set\+Enable\+Speakerphone}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1949e03a3c541d8e3ee5f57b9b51201f}{set\+Route\+In\+Communication\+Mode}} (int route)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5916d5e8b659ef49a8c1ec9ff54d8dc}{is\+Speakerphone\+Enabled}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d5a12ef14d4134ac17d3f48faea0feb}{enable\+In\+Ear\+Monitoring}} (boolean enabled)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d6b079b986dacc6d010fc0322a4b48c}{set\+In\+Ear\+Monitoring\+Volume}} (int volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}{set\+Local\+Voice\+Pitch}} (double pitch)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}{set\+Local\+Voice\+Formant}} (double formant\+Ratio)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac7573d0f4cbfbcb1e6564048142cb5d0}{set\+Headphone\+E\+Q\+Preset}} (int preset)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}{set\+Audio\+Effect\+Preset}} (int preset)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}{set\+Voice\+Beautifier\+Preset}} (int preset)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}{set\+Voice\+Conversion\+Preset}} (int preset)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8c0a30cd46f79dcb24d6e91540270142}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8c0a30cd46f79dcb24d6e91540270142}} 
abstract int {\bfseries enable\+Spatial\+Audio} (boolean enabled)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7c83d6073cb7d5b3144a1581ff9463b1}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7c83d6073cb7d5b3144a1581ff9463b1}} 
abstract int {\bfseries set\+Remote\+User\+Spatial\+Audio\+Params} (int uid, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_spatial_audio_params}{Spatial\+Audio\+Params}} params)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63d7b44e0c112170d94c3271e05fcb6f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63d7b44e0c112170d94c3271e05fcb6f}} 
abstract int {\bfseries 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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8d9f13f4f48f9a2737a27c1b55ac6145}{stop\+Audio\+Mixing}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3c26a5f7908c84557180af289301457}{pause\+Audio\+Mixing}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad1b2b908018d836a60de5495b5db8adb}{resume\+Audio\+Mixing}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4c5538d92e250748052d7617876526ea}{adjust\+Audio\+Mixing\+Volume}} (int volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8884d20e687221f4f1ae8315cd172d8d}{adjust\+Audio\+Mixing\+Playout\+Volume}} (int volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acb4c28214a9adc6f49192d53a757911c}{adjust\+Audio\+Mixing\+Publish\+Volume}} (int volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad4bf1c84245a27aa1300e2dc394a827e}{get\+Audio\+Mixing\+Playout\+Volume}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7711fae2a3361f8fe6b47915228a5de2}{get\+Audio\+Mixing\+Publish\+Volume}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6a866bfaa0cdf575feaf82e899bb740b}{get\+Audio\+Mixing\+Duration}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a69d5eed20fd0b6462a2a83fd8592ec24}{get\+Audio\+Mixing\+Current\+Position}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aae0ea7cd0f5f45044a1378a2ed5c9cd1}{set\+Audio\+Mixing\+Position}} (int pos)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7aae18cb7483e2eecd184896cd23cbdc}{set\+Audio\+Mixing\+Pitch}} (int pitch)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e8317f510164a2b313accba8a26dd5d}{set\+Audio\+Mixing\+Playback\+Speed}} (int speed)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1372d948223d44bc834243eea0ff8114}{select\+Audio\+Track}} (int audio\+Index)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aab9319a3aa51fbef5baab307bbff61e4}{get\+Audio\+Track\+Count}} ()
\item 
abstract I\+Audio\+Effect\+Manager \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a566145bbefcc8f58a67c20b1ea2e4054}{get\+Audio\+Effect\+Manager}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8a868bc783c424a88c02fee7e9d4dbed}{start\+Audio\+Recording}} (String file\+Path, int quality)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aedb9b84a3afd1c5b7316112710b21d8f}{start\+Audio\+Recording}} (Audio\+Recording\+Configuration config)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60a05708b6b2d40b9f3e2bd7aadda143}{stop\+Audio\+Recording}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf712c76582d770457bf8f0b773312fe}{stop\+Echo\+Test}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad00ae90f0aa7008e0008fe6fcc547f22}{start\+Lastmile\+Probe\+Test}} (Lastmile\+Probe\+Config config)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae557f56f8fd4b808bb5c5902d0f1acc5}{stop\+Lastmile\+Probe\+Test}} ()
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7ffbff878b86717e801cc7ef2b338b2}{set\+External\+Remote\+Egl\+Context}} (Object egl\+Context)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa207c4859ffe0069ae34e9fc25bc93ff}{start\+Recording\+Device\+Test}} (int indication\+Interval)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a656bea04193aa7b46643e1029336d2db}{stop\+Recording\+Device\+Test}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf15918db9c0585578536e3302b7b2a0}{start\+Playback\+Device\+Test}} (String audio\+File\+Name)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a71059caa6c3cde61f5015666922089df}{stop\+Playback\+Device\+Test}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a616d3425adda32ead9409eda5b258a9b}{destroy\+Custom\+Audio\+Track}} (int track\+Id)
\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)
\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)
\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)
\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}} (\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_video_frame}{Video\+Frame}} frame)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa846bf55e5224c170493ff98f49fcc16}{push\+External\+Video\+Frame\+By\+Id}} (\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_video_frame}{Video\+Frame}} frame, int video\+Track\+Id)
\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)
\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)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1f7cabb6523f481f407a33cee41112b8}{is\+Texture\+Encode\+Supported}} ()
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a88d1a9288aea4e51966090d0f5f3d9cf}{clear\+Video\+Watermarks}} ()
\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_a7a17a38a6ec5a9ef0f8de3304d18e10b}{set\+Local\+Publish\+Fallback\+Option}} (Constants.\+Stream\+Fallback\+Options option)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a036743ea3c7c5850001f5f61ce50b245}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a036743ea3c7c5850001f5f61ce50b245}} 
abstract int {\bfseries set\+Local\+Publish\+Fallback\+Option} (int option)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa0ca8a4b071602eeca1fca6795e353}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1aa0ca8a4b071602eeca1fca6795e353}} 
abstract int {\bfseries set\+Remote\+Subscribe\+Fallback\+Option} (int option)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa6bc02edcdda8dc4c0c2a3d51ba85199}{set\+Dual\+Stream\+Mode}} (Constants.\+Simulcast\+Stream\+Mode mode)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a214fd18d9efe6958c4fd295fd9e45545}{set\+Remote\+Render\+Target\+Fps}} (int target\+Fps)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a56c63259b129c1beeb0ee121b353fc2f}} 
abstract int {\bfseries set\+Remote\+Video\+Stream\+Type} (int uid, int stream\+Type)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a60c6aff8012dae97e75d00322acaa731}} 
abstract int {\bfseries set\+Remote\+Default\+Video\+Stream\+Type} (int stream\+Type)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abca64dd09b9fb1a034ff1e9a617df7f1}{set\+Subscribe\+Audio\+Blocklist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e0cb141e957f69179395c566afc9a20}{set\+Subscribe\+Audio\+Allowlist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3cb5999d288bbc5e81902af945f011ed}{set\+Subscribe\+Video\+Blocklist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a36193f0cdd42c18ab82e9f7bc78717c6}{set\+Subscribe\+Video\+Allowlist}} (int\mbox{[}$\,$\mbox{]} uid\+List)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a840d57b187d64b8903078a6dcc879c67}{enable\+Encryption}} (boolean enabled, Encryption\+Config config)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61e6a515d2c687ae3879e46c804073f4}{start\+Rtmp\+Stream\+Without\+Transcoding}} (String url)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7e257e16fd020dba728407e2151139e6}{stop\+Rtmp\+Stream}} (String url)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}{create\+Data\+Stream}} (boolean reliable, boolean ordered)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1d9a30e7142ab87c824b7fcaf5e5642a}{switch\+Camera}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4ef789d531058d05d8c931efe95a6d28}{switch\+Camera}} (String camera\+Id)
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b18c80dc7b0a0b54adf9bc85cc05a01}{is\+Camera\+Zoom\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9bf739195b960ecae53dbdce21804bbe}{is\+Camera\+Torch\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a299e0a04059c8cebdeea96d9e2053e78}{is\+Camera\+Focus\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a28b7f4f98affcd7642254bb508bd97c2}{is\+Camera\+Exposure\+Position\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aff8c36abfbc340d26cf6a5b01f787061}{is\+Camera\+Auto\+Focus\+Face\+Mode\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab614e59770986be217d84726b0eb069c}{is\+Camera\+Face\+Detect\+Supported}} ()
\item 
abstract boolean \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa96bcfadebbaba6e9b82064e58b196a8}{is\+Camera\+Exposure\+Supported}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3112cd22c82fbdab18306a3706cefb45}{set\+Camera\+Zoom\+Factor}} (float factor)
\item 
abstract float \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac385178dddfd07f28c690a41a4de6bff}{get\+Camera\+Max\+Zoom\+Factor}} ()
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abc1fce0299f1972f78c63b45c5dcab79}{enable\+Face\+Detection}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab2c7ee5480582f6f2e2160b09cc8d6f0}{set\+Camera\+Torch\+On}} (boolean is\+On)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a13368ea66c71ed9dc187048f2b8205c2}{set\+Camera\+Auto\+Focus\+Face\+Mode\+Enabled}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2721050e0ab83699a607beb25e919262}{set\+Camera\+Exposure\+Factor}} (int factor)
\item 
abstract String \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8878aa59bdf6e8f328ebadf32ec40273}{get\+Call\+Id}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afb97d530cdc8295043ab074d89d5f54c}{rate}} (String call\+Id, int rating, String description)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c22a74f586b6169c48358d64bed1b07}{complain}} (String call\+Id, String description)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4fa5f803c59e1bc2d816511f5f5bbbc1}{set\+Log\+File}} (String file\+Path)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abdab41e7cb1d8c8549ca7db248a78216}{set\+Log\+Filter}} (int filter)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a55e1c586d3885c4f0d43aecfbd3729f2}{set\+Log\+Level}} (int level)
\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)
\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}} ()
\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)
\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)
\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_a59f337c7cd25292a08885aaa70e24a08}{query\+Screen\+Capture\+Capability}} ()
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4f7f548ec0a720db0e83314755dc5015}{stop\+Channel\+Media\+Relay}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f082ed2fb2bcf8e7e1f5f1a13bd9955}{pause\+All\+Channel\+Media\+Relay}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a227a56b32e23eb918ef5762522d496b4}{resume\+All\+Channel\+Media\+Relay}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a645bd4590504fffc802d01a18e17bf1f}{mute\+Recording\+Signal}} (boolean muted)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8fcc7517dd6f95be50d1f273d3f56c32}{enable\+Audio\+Spectrum\+Monitor}} (int interval\+In\+MS)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc0518028a558fc6e1934b5767ab614b}{disable\+Audio\+Spectrum\+Monitor}} ()
\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)
\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)
\item 
abstract double \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7b281f2f1dfa4e8d5eb7664fb0d7322e}{get\+Effects\+Volume}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a61f2a4c99febfd709d92296d72d52eea}{set\+Effects\+Volume}} (double volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}} (int sound\+Id, String file\+Path)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9c73b4a61d30381b75d87ac819df42cb}{set\+Volume\+Of\+Effect}} (int sound\+Id, double volume)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae5dafc037f35c83b4d8ca2b64a6050f3}{pause\+Effect}} (int sound\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3d48af1ce2e341c54f8bbae686b10975}{pause\+All\+Effects}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a46fc5d80c6a4fab34a72407431b35e31}{resume\+Effect}} (int sound\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a24d7ae60d87cc69c656d5f89cb9fd187}{resume\+All\+Effects}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}{stop\+Effect}} (int sound\+Id)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a62f806462a9bfcc360ce2fd37d49271a}{stop\+All\+Effects}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5e6f4408aeb348a8cafbc83db301d004}{unload\+Effect}} (int sound\+Id)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afe3b84f40dabb97d321a6e8a1a001c7e}{set\+Effect\+Position}} (int sound\+Id, int pos)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a172c1995a4000c584cf7d5e15b930cf5}{get\+Effect\+Current\+Position}} (int sound\+Id)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8ea12ecf93baca6f9e23331f3b1c5a9b}{take\+Snapshot}} (int uid, String file\+Path)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc64bdcf6c7a298014f84921c50ea7d6}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acc64bdcf6c7a298014f84921c50ea7d6}} 
abstract int {\bfseries enable\+Content\+Inspect} (boolean enabled, \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_content_inspect_config}{Content\+Inspect\+Config}} config)
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af959439d3f83247f41087ed653da2b01}{set\+External\+Media\+Projection}} (Media\+Projection media\+Projection)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaa8a6ef8909cebd023c5c229d35fb472}{stop\+Screen\+Capture}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fa00b6bbc373b4479204d789758d63d}{set\+Video\+Scenario}} (Constants.\+Video\+Scenario scenario\+Type)
\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)
\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)
\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}} ()
\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)
\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)
\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}} ()
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a6c0b5186b0618831994e964c2177ffed}{stop\+Rhythm\+Player}} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_adc15013468e36f69262b10f056c14e55}{set\+Direct\+Cdn\+Streaming\+Audio\+Configuration}} (int profile)
\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)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7c50fe9a5721e53732023e44bb43ac8}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad7c50fe9a5721e53732023e44bb43ac8}} 
abstract long {\bfseries get\+Current\+Monotonic\+Time\+In\+Ms} ()
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a3ab7e0ff379f8ad33b86526189071077}{stop\+Direct\+Cdn\+Streaming}} ()
\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}} ()
\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)
\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)
\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)
\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)
\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)
\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)
\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)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fb7a5aa43a089dc850cef8dd3c04b20}{enable\+Wireless\+Accelerate}} (boolean enabled)
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ad42e1c1aa220a217f7626579a5a90697}{get\+Network\+Type}} ()
\item 
abstract long \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a96b09af0aaf427482752380d3722e78b}{get\+Ntp\+Wall\+Time\+In\+Ms}} ()
\item 
abstract int \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a954f0e6d1d2576ed719becd55d2526f5}{start\+Media\+Rendering\+Tracing}} ()
\begin{DoxyCompactList}\small\item\em Start tracing media rendering events. \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 Enable instant media 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 Whether the target feature is available for the device. \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 
\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 
\item 
static synchronized void \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy}} ()
\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}} ()
\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)
\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 an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance.

Unless otherwise specified, all the methods provided by the \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 You must create an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance before calling any other method.
\item You can create an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance either by calling this method or by calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create2}}. The difference between \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create2}} and this method is that \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create2}} enables you to specify the connection area.
\item The Agora R\+TC Native S\+DK supports creating only one \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance for an app for now.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em context} & The context of Android Activity. \\
\hline
{\em app\+Id} & The App ID issued to you by Agora. See \href{https://docs.agora.io/en/Agora\%20Platform/token\#get-an-app-id}{\texttt{ How to get the App ID}}. Only users in apps with the same App ID can join the same channel and communicate with each other. Use an App ID to create only one \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance. To change your App ID, call destroy to \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy}} the current \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance and then call {\ttfamily create} to create an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance with the new App ID. \\
\hline
{\em handler} & \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} is an abstract class providing default implementation. The S\+DK uses this class to report to the app on S\+DK runtime events. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance, if the method call succeeds.
\item $<$ 0, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}

\begin{DoxyExceptions}{Exceptions}
{\em Exception} & Fails to create an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance. \\
\hline
\end{DoxyExceptions}
\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 an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance.

The Agora Native S\+DK only supports one \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance at a time, therefore the app should create one \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} object only. Unless otherwise specified\+:
\begin{DoxyItemize}
\item All called methods provided by the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} class are executed asynchronously. We recommends calling these methods in the same thread.
\item The following rule applies to all A\+P\+Is whose return values are integer types\+:
\begin{DoxyItemize}
\item 0\+: The method call succeeds.
\item $<$ 0\+: The method call fails.
\end{DoxyItemize}
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you call this method before calling any other A\+PI.
\item Only users with the same App ID can join the same channel and call each other.
\item An App ID can create only one \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} object. For multiple App I\+Ds in an app, you need to create multiple \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} objects. Call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy}} first to destroy the current \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance before calling this method.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Configurations for the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance. For details, see \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_config}{\}.  An Rtc\+Engine object.  Exception Fails to create an Rtc\+Engine instance. }}\\
\hline
\end{DoxyParams}
\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()}}
{\footnotesize\ttfamily static synchronized void io.\+agora.\+rtc2.\+Rtc\+Engine.\+destroy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

Releases all the resources used by the Agora S\+DK.

This method is useful for apps that occasionally make voice or video calls, to free up resources for other operations when not making calls.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Do not immediately uninstall the S\+DK\textquotesingle{}s dynamic library after the call, or it may crash because the S\+DK clean-\/up thread has not quit.
\item Call this method in the sub-\/thread.
\item Once the app destroys the created \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} instance, you cannot use any method or callback in the S\+DK. 
\end{DoxyItemize}
\end{DoxyNote}
\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.

The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} differentiates channel profiles and applies different optimization algorithms accordingly. For example, it prioritizes smoothness and low latency for a video call, and prioritizes video quality for a video broadcast.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item To ensure the quality of real-\/time communication, we recommend that all users in a channel use the same channel profile.
\item Call this method before calling {\ttfamily join\+Channel}. You cannot set the channel profile once you have joined the channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em profile} & The channel profile\+:
\begin{DoxyItemize}
\item {\ttfamily 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. Use this profile when there are two users in the channel.
\item {\ttfamily 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 Broadcast. 
\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_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 role of a user.

This method sets the user role as either B\+R\+O\+A\+D\+C\+A\+S\+T\+ER or A\+U\+D\+I\+E\+N\+CE (default).
\begin{DoxyItemize}
\item The broadcaster sends and receives streams.
\item The audience receives streams only.
\end{DoxyItemize}

By default, all users are audience regardless of the channel profile. Call this method to change the user role to B\+R\+O\+A\+D\+C\+A\+S\+T\+ER so that the user can send a stream.

\begin{DoxyNote}{Note}
After calling the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a079013f8c575a75834e2787ee869413e}{set\+Client\+Role()}} method to C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE, the S\+DK stops audio recording. However, C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE will keep audio recording with A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+C\+H\+A\+T\+R\+O\+O\+M(5). Normally, app developer can also use mute api to achieve the same result, and we implement this \textquotesingle{}non-\/orthogonal\textquotesingle{} behavior only to make A\+PI backward compatible.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em role} & The role of the client\+:
\begin{DoxyItemize}
\item {\ttfamily C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+ER}(1)\+: The broadcaster.
\item {\ttfamily C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+C\+E(2)}\+: The audience. 
\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_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 role of a user ({\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile only).

This method sets the role of a user, such as a host or an audience (default), before joining a channel.

This method can be used to switch the user role after a user joins a channel. In the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile, when a user switches user roles after joining a channel, a successful set\+Client\+Role method call triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a52d541757c833d035dcac245100d8217}{on\+Client\+Role\+Changed}}.
\item The remote client\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a848d29acef97523964bb27dd5b637162}{on\+User\+Joined}} or \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a36dfe32e633612d8e74e1a32c504c817}{on\+User\+Offline\}(U\+S\+E\+R\+\_\+\+O\+F\+F\+L\+I\+N\+E\+\_\+\+B\+E\+C\+O\+M\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE).  role Sets the role of a user\+:{\ttfamily 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.{\ttfamily C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE}(2)\+: Audience, the default role. An audience can only receive streams.  options Client role options of a user, see \#\+Client\+Role\+Options. 0(E\+R\+R\+\_\+\+OK)\+: Success.$<$ 0\+: Failure.-\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: A general error occurs (no specified reason).-\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The parameter is invalid.-\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: The S\+DK is not initialized. }}
\end{DoxyItemize}\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]}}

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.

To try out this function, contact \href{mailto:support@agora.io}{\texttt{ 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]}}

Preload a channel.

This method enables users to preload a channel.

A successful call of this method will reduce the time of joining the same channel.

Note\+:
\begin{DoxyEnumerate}
\item The S\+DK supports preloading up to 20 channels. Once the preloaded channels exceed the limit, the S\+DK will keep the latest 20 available.
\item Renew the token of the preloaded channel by calling this method with the same \textquotesingle{}channel\+Name\textquotesingle{} and \textquotesingle{}uid\textquotesingle{}.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. \\
\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 character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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 unsigned integer. The value range is 1 to 2$<$h$>$32$<$/h$>$-\/1. If the user ID is not assigned (or set to 0), the S\+DK assigns a random user ID and returns it in the on\+Join\+Channel\+Success 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 I\+Rtc\+Engine object has not been initialized. You need to initialize the I\+Rtc\+Engine object before calling this method.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in channel\+Name to preload 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]}}

Preload a channel.

This method enables users to preload a channel.

A successful call of this method will reduce the time of joining the same channel.

Note\+:
\begin{DoxyEnumerate}
\item The S\+DK supports preloading up to 20 channels. Once the preloaded channels exceed the limit, the S\+DK will keep the latest 20 available.
\item Renew the token of the preloaded channel by calling this method with the same \textquotesingle{}channel\+Name\textquotesingle{} and \textquotesingle{}user\+Account\textquotesingle{}.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. \\
\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 character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as null. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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 parameter is empty. You need to pass in a valid parameter and preload the channel again.
\item -\/7\+: The I\+Rtc\+Engine object has not been initialized. You need to initialize the I\+Rtc\+Engine object before calling this method.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in channel\+Name to preload 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]}}

Update token of the preloaded channels.

An easy way to update all preloaded channels\textquotesingle{} tokens, if all preloaded channels use the same token.

If preloaded channels use different tokens, we need to call the \textquotesingle{}preload\+Channel\textquotesingle{} method with the same \textquotesingle{}channel\+Name\textquotesingle{} and \textquotesingle{}uid\textquotesingle{} or \textquotesingle{}user\+Account\textquotesingle{} to update the corresponding token.


\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/2\+: The token is invalid. You need to pass in a valid token and update the token again.
\item -\/7\+: The I\+Rtc\+Engine object has not been initialized. You need to initialize the I\+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.

Users in the same channel can talk to each other; and multiple users in the same channel can start a group chat. Note that users using different App I\+Ds cannot call each other.

Once in a call, the user must call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} method to exit the current call before entering another channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method allows you to join only one channel at a time.
\item A channel does not accept duplicate {\ttfamily uid}s, that is, two users with the same uid. If you set {\ttfamily uid} as 0, the system automatically assigns a user ID.
\item Ensure that the app ID you use to generate the token is the same app ID that you pass in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create}} method.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token for authentication.
\begin{DoxyItemize}
\item In situations not requiring high security\+: You can use the temporary token generated at Console. For details, see \href{https://docs.agora.io/en/Agora\%20Platform/token?platform=All\%20Platforms\#get-a-temporary-token}{\texttt{ Get a temporary token}}.
\item In situations requiring high security\+: Set it as the token generated at you server. For details, see \href{https://docs.agora.io/en/Agora\%20Platform/token?platform=All\%20Platforms\#get-a-token}{\texttt{ Generate a token}}.
\end{DoxyItemize}\\
\hline
{\em channel\+Id} & The unique channel name for the Agora\+R\+TC session in the string format. The string length must be less than 64 bytes. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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) Additional information about the channel that you want to add. It can be set as a N\+U\+LL string or channel related information. Other users in the channel will not receive this message. \\
\hline
{\em uid} & (Optional) User ID\+: A 32-\/bit unsigned integer ranging from 1 to (2$^\wedge$32-\/1). It must be unique. If not assigned (or set to 0), the S\+DK assigns one and reports it in the \mbox{\hyperlink{}{on\+Join\+Channel\+Success}} callback. Your app must record and maintain the returned value as the S\+DK does not maintain 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_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.

Users in the same channel can talk to each other; and multiple users in the same channel can start a group chat. Note that users using different App I\+Ds cannot call each other.

Once in a call, the user must call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} method to exit the current call before entering another channel.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method allows you to join only one channel at a time.
\item A channel does not accept duplicate {\ttfamily uid}s, that is, two users with the same uid. If you set {\ttfamily uid} as 0, the system automatically assigns a user ID.
\item Ensure that the app ID you use to generate the token is the same app ID that you pass in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create}} method.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token for authentication.
\begin{DoxyItemize}
\item In situations not requiring high security\+: You can use the temporary token generated at Console. For details, see \href{https://docs.agora.io/en/Agora\%20Platform/token?platform=All\%20Platforms\#get-a-temporary-token}{\texttt{ Get a temporary token}}.
\item In situations requiring high security\+: Set it as the token generated at you server. For details, see \href{https://docs.agora.io/en/Agora\%20Platform/token?platform=All\%20Platforms\#get-a-token}{\texttt{ Generate a token}}.
\end{DoxyItemize}\\
\hline
{\em channel\+Id} & The unique channel name for the Agora\+R\+TC session in the string format. The string length must be less than 64 bytes. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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} & (Optional) User ID\+: A 32-\/bit unsigned integer ranging from 1 to (2$^\wedge$32-\/1). It must be unique. If not assigned (or set to 0), the S\+DK assigns one and reports it in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a25a599788cbb7d9b97b9f67747c17243}{on\+Join\+Channel\+Success}} callback. Your app must record and maintain the returned value as the S\+DK does not maintain it. \\
\hline
{\em options} & The channel media options\+: \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. 
\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 user successfully registers a user account, the S\+DK triggers the on\+Local\+User\+Registered callback on the local client, reporting the user ID and user account of the local user.

To join a channel with a user account, you can choose either of the following\+:


\begin{DoxyItemize}
\item Call the register\+Local\+User\+Account method to create a user account, and then the join\+Channel\+With\+User\+Account method to join the channel.
\item Call the join\+Channel\+With\+User\+Account method to join the channel.
\end{DoxyItemize}

The difference between the two is that for the former, the time elapsed between calling the join\+Channel\+With\+User\+Account method and joining the channel is shorter than the latter.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you set the {\ttfamily user\+Account} parameter. Otherwise, this method does not take effect.
\item Ensure that the value of the {\ttfamily user\+Account} parameter 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 user ID, then ensure all the other users use the user ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the uid 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. \\
\hline
{\em user\+Account} & The user account. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as null. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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 the channel with a user account.

After the user successfully joins the channel, the S\+DK triggers the following callbacks\+:


\begin{DoxyItemize}
\item The local client\+: on\+Local\+User\+Registered and on\+Join\+Channel\+Success . The remote client\+: on\+User\+Joined and on\+User\+Info\+Updated , if the user joining the channel is in the {\ttfamily C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} profile, or is a host in the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile.
\end{DoxyItemize}

\begin{DoxyNote}{Note}
To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a user ID, then ensure all the other users use the user ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the uid of the user is set to the same parameter type.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated at your server\+:
\begin{DoxyItemize}
\item For low-\/security requirements\+: You can use the temporary token generated at Console. For details, see \href{https://docs.agora.io/en/Voice/token?platform=All\%20Platforms\#get-a-temporary-token}{\texttt{ Get a temporary toke}}.
\item For high-\/security requirements\+: Set it as the token generated at your server. For details, see \href{https://docs.agora.io/en/Voice/token?platform=All\%20Platforms\#get-a-token}{\texttt{ Get a token}}. 
\end{DoxyItemize}\\
\hline
{\em channel\+Name} & The channel name. The maximum length of this parameter is 64 bytes. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as null. Supported character scopes are\+:
\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 The space character.
\item Punctuation characters and other symbols, including\+: \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\+: Channel\+Media\+Options\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT (-\/2)
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+R\+E\+A\+DY (-\/3)
\item \#\+E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED (-\/5) 
\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]}}

Joins the channel with a user account, and configures whether to automatically subscribe to audio or video streams after joining the channel. \begin{DoxySince}{Since}
v3.\+3.\+0.
\end{DoxySince}
After the user successfully joins the channel, the S\+DK triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a8643b8a54c5aa30e22209a54274fbcf3}{on\+Local\+User\+Registered}} and \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a25a599788cbb7d9b97b9f67747c17243}{on\+Join\+Channel\+Success}}.
\item The remote client\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a848d29acef97523964bb27dd5b637162}{on\+User\+Joined}} and \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a0cd49bb3b8733f04ecaacf1df091e07f}{on\+User\+Info\+Updated\}, if the user joining the channel is in the {\ttfamily C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} profile, or is a host in the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile. Compared with  Rtc\+Engine\#join\+Channel\+With\+User\+Account(String token, String channel\+Name, String user\+Account) join\+Channel\+With\+User\+Account\}\mbox{[}1/2\mbox{]}, this method has the {\ttfamily options} parameter to configure whether the end user automatically subscribes to all remote audio and video streams in a channel when joining the channel. By default, the user subscribes to the audio and video streams of all the other users in the channel, thus incurring all associated usage costs. To unsubscribe, set the {\ttfamily options} parameter or call the {\ttfamily mute} methods accordingly.To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a user ID, then ensure all the other users use the user ID too. The same applies to the user account. If a user joins the channel with the Agora Web S\+DK, ensure that the uid of the user is set to the same parameter type.  token The token generated at your server. For details, see }}Generate a token. 
\begin{DoxyParams}{Parameters}
{\em channel\+Name} & The channel name. The maximum length of this parameter is 64 bytes. Supported character scopes are\+:\\
\hline
\end{DoxyParams}

\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item The space character.
\item Punctuation characters and other symbols, including\+: \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`\"{}. 
\begin{DoxyParams}{Parameters}
{\em user\+Account} & The user account. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as null.\\
\hline
\end{DoxyParams}

\item All lowercase English letters\+: a to z.
\item All uppercase English letters\+: A to Z.
\item All numeric characters\+: 0 to 9.
\item The space character.
\item Punctuation characters and other symbols, including\+: \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`\"{}. 
\begin{DoxyParams}{Parameters}
{\em options} & The channel media options\+: \mbox{\hyperlink{}{Channel\+Media\+Options}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\end{DoxyReturn}

\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \mbox{\hyperlink{}{E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT(-\/2)}}
\item \mbox{\hyperlink{}{E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+R\+E\+A\+DY(-\/3)}}
\item \mbox{\hyperlink{}{E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED(-\/5)}} 
\end{DoxyItemize}
\end{DoxyItemize}\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 user ID and user account of the remote user, caches them in a mapping table object ({\ttfamily user\+Info}), and triggers the on\+User\+Info\+Updated callback on the local client.

After receiving the oon\+User\+Info\+Updated callback, you can call this method to get the user ID of the remote user from the {\ttfamily user\+Info} object by passing in the user account.


\begin{DoxyParams}{Parameters}
{\em user\+Account} & The user account of the user. Ensure that you set this parameter. \\
\hline
{\em user\+Info} & A user\+Info object that identifies the user\\
\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_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 user ID and user account of the remote user, caches them in a mapping table object ({\ttfamily user\+Info}), and triggers the on\+User\+Info\+Updated callback on the local client.

After receiving the on\+User\+Info\+Updated callback, you can call this method to get the user account of the remote user from the {\ttfamily user\+Info} object by passing in the user ID.


\begin{DoxyParams}{Parameters}
{\em uid} & The user ID of the remote user. Ensure that you set this parameter. \\
\hline
{\em user\+Info} & A user\+Info object that identifies the user\\
\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 the channel.

This method allows a user to leave the channel, for example, by hanging up or exiting a call.

After joining a channel, the user must call this method to end the current call before joining another one. This method also releases all resources related to the call.

This method is an asynchronous call, which means that the result of this method returns even before the user has not actually left the channel. Once the user successfully leaves the channel, the S\+DK triggers the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{on\+Leave\+Channel}} callback.

\begin{DoxyNote}{Note}
If you call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a87e95e4a63d9f2ff9f04f632ffccfce8}{destroy}} immediately after this method, the leave\+Channel process will be interrupted, and the S\+DK will not trigger the {\ttfamily on\+Leave\+Channel} callback.
\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_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]}}

Leaves the channel.


\begin{DoxyParams}{Parameters}
{\em options} & The leave channel options.\\
\hline
\end{DoxyParams}
This method allows a user to leave the channel, for example, by hanging up or exiting a call.

This method is an asynchronous call, which means that the result of this method returns even before the user has not actually left the channel. Once the user successfully leaves the channel, the S\+DK triggers the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_ae8d95d70238163de3d89399bee8061a1}{on\+Leave\+Channel}} callback.

\begin{DoxyNote}{Note}
If you call release immediately after this method, the leave\+Channel process will be interrupted, and the S\+DK will not trigger the {\ttfamily on\+Leave\+Channel} callback.
\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_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.

Once a token is enabled and used, it expires after a certain period of time.

Under the following circumstances, generate a new token on your server, and then call this method to renew it. Failure to do so results in the S\+DK disconnecting from the server.
\begin{DoxyItemize}
\item The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_ad230797ab45c4307562e1b19519253b5}{on\+Token\+Privilege\+Will\+Expire}} callback is triggered;
\item The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a2585f098b637d03ae3aca03daaca8eef}{on\+Request\+Token}} callback is triggered;
\item The {\ttfamily E\+R\+R\+\_\+\+T\+O\+K\+E\+N\+\_\+\+E\+X\+P\+I\+R\+ED(-\/109)} error is reported.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em token} & The new token. \\
\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_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 the Audio device Info \begin{DoxyReturn}{Returns}
device\+Info
\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 (Live Broadcast only).

Use this method when the channel profile is Live Broadcast. Interoperability with the Agora Web S\+DK is enabled by default when the channel profile is Communication.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable interoperability with the Agora Web S\+DK.
\begin{DoxyItemize}
\item true\+: Enable interoperability with the Agora Native S\+DK.
\item false\+: Disable interoperability with the Agora Native S\+DK.
\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 connection state of the S\+DK. \begin{DoxyReturn}{Returns}
The connection state\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{}{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\+E\+D(1)}}\+: The S\+DK is disconnected from Agora\textquotesingle{}s edge server.
\item \mbox{\hyperlink{}{C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+N\+G(2)}}\+: The S\+DK is connecting to Agora\textquotesingle{}s edge server.
\item \mbox{\hyperlink{}{C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+O\+N\+N\+E\+C\+T\+E\+D(3)}}\+: The S\+DK joined a channel and is connected to Agora\textquotesingle{}s edge server. You can now publish or subscribe to a media stream in the channel.
\item \mbox{\hyperlink{}{C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+C\+O\+N\+N\+E\+C\+T\+I\+N\+G(4)}}\+: The S\+DK keeps rejoining the channel after being disconnected from a joined channel because of network issues.
\item \mbox{\hyperlink{}{C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+F\+A\+I\+L\+E\+D(5)}}\+: The S\+DK fails to join the channel. 
\end{DoxyItemize}
\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.

The audio is enabled by default.

\begin{DoxyNote}{Note}
This method controls the underlying states of the Engine. It is still valid after one leaves 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_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.

\begin{DoxyNote}{Note}
This method controls the underlying states of the Engine. It is still valid after one leaves 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_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.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before calling {\ttfamily join\+Channel} method.
\item In scenarios requiring high-\/quality audio, Agora recommends setting {\ttfamily profile} as {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4).
\item To set the audio scenario, call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_afffd4c0d9b799631ed407c5167b6e09a}{create2}} and pass value in the {\ttfamily m\+Audio\+Scenario} member.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em profile} & Sets the sample rate, bitrate, encoding mode, and the number of channels. See \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_profile}{Audio\+Profile}}.\\
\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 parameters and application scenarios.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before calling {\ttfamily join\+Channel}.
\item In scenarios requiring high-\/quality audio, we recommend setting {\ttfamily profile} as {\ttfamily M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+TY}(4) and {\ttfamily scenario} as {\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).
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em profile} & Sets the sample rate, bitrate, encoding mode, and the number of channels. See \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_profile}{Audio\+Profile}}. \\
\hline
{\em scenario} & Sets the audio application scenarios. See \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_scenario}{Audio\+Scenario}}.\\
\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 recording volume.


\begin{DoxyParams}{Parameters}
{\em volume} & Recording volume, ranges from 0 to 400\+: 
\begin{DoxyItemize}
\item 0\+: Mute 
\item 100\+: Original volume 
\item 400\+: (Maximum) Four times the original volume with signal clipping protection 
\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 volume.


\begin{DoxyParams}{Parameters}
{\em volume} & Playback volume, ranges from 0 to 400\+: 
\begin{DoxyItemize}
\item 0\+: Mute 
\item 100\+: Original volume 
\item 400\+: (Maximum) Four times the original volume with signal clipping protection 
\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 {\ttfamily on\+Audio\+Volume\+Indication} callback to report on which users are speaking and the speakers\textquotesingle{} volume.

Once the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a6b9a1f4de49ef268b2be15b269ee7c47}{on\+Audio\+Volume\+Indication}} callback is enabled, the S\+DK returns the volume indication in the at the time interval set in {\ttfamily enable\+Audio\+Volume\+Indication}, regardless of whether any user is speaking 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, and should be integral multiple of 200 (less than 200 will be set to 200). 
\end{DoxyItemize}\\
\hline
{\em smooth} & The smoothing factor that sets the sensitivity of the audio volume indicator. The value ranges is \mbox{[}0, 10\mbox{]}. The greater the value, the more sensitive the indicator. The recommended value is 3.\\
\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. This method disables or re-\/enables the local audio function, that is, to stop or restart local audio capture and processing.

This method does not affect receiving or playing the remote audio streams, and {\ttfamily enable\+Local\+Audio} (false) is applicable to scenarios where the user wants to receive remote audio streams without sending any audio stream to other users in the channel.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to disable or re-\/enable the local audio function\+:
\begin{DoxyItemize}
\item true\+: (Default) Re-\/enable the local audio function, that is, to start local audio capture and processing.
\item false\+: Disable the local audio function, that is, to stop local audio capture and processing.
\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 sending the local audio stream.


\begin{DoxyParams}{Parameters}
{\em muted} & Determines whether to send or stop sending the local audio stream\+:
\begin{DoxyItemize}
\item true\+: Stop sending the local audio stream.
\item false\+: (Default) Send 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 receiving the audio stream of a specified user.

You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid.


\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the specified user. \\
\hline
{\em muted} & Whether to stop receiving the audio stream of the specified user\+:
\begin{DoxyItemize}
\item true\+: Stop receiving the specified audio stream.
\item false\+: (Default) Receive the specified 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_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]}}

Adjust the playback volume of the user specified by uid.

You can call this method to adjust the playback volume of the user specified by uid in call. If you want to adjust playback volume of the multi user, you can call this this method multi times.

\begin{DoxyNote}{Note}
Please call this method after join channel. This method adjust the playback volume of specified user.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & Remote user ID. \\
\hline
{\em volume} & The playback volume, range is \mbox{[}0,100\mbox{]}\+: 0\+: mute, 100\+: 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_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 receiving all remote audio streams.

This method works for all remote users that join or will join a channel using the {\ttfamily join\+Channel} method. It is equivalent to the {\ttfamily auto\+Subscribe\+Audio} member in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} class.
\begin{DoxyItemize}
\item Ensure that you call this method after joining a channel.
\item If you call {\ttfamily mute\+All\+Remote\+Audio\+Streams(true)} after joining a channel, the local use stops receiving any audio stream from any user in the channel, including any user who joins the channel after you call this method.
\item If you call {\ttfamily mute\+All\+Remote\+Audio\+Streams(true)} after leaving a channel, the local user does not receive any audio stream the next time the user joins a channel.
\end{DoxyItemize}

After you successfully call {\ttfamily mute\+All\+Remote\+Audio\+Streams(true)}, you can take the following actions\+:
\begin{DoxyItemize}
\item To resume receiving all remote audio streams, call {\ttfamily mute\+All\+Remote\+Audio\+Streams(false)}.
\item To resume receiving the audio stream of a specified user, call {\ttfamily mute\+Remote\+Audio\+Stream(uid, false)}, where {\ttfamily uid} is the ID of the user whose audio stream you want to resume receiving.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The result of calling this method is affected by calling {\ttfamily enable\+Audio} and {\ttfamily disable\+Audio}. Settings in {\ttfamily mute\+All\+Remote\+Audio\+Streams} stop taking effect if either of the following occurs\+:
\begin{DoxyItemize}
\item Calling {\ttfamily enable\+Audio} after {\ttfamily mute\+All\+Remote\+Audio\+Streams(true)}.
\item Calling {\ttfamily disable\+Audio} after {\ttfamily mute\+All\+Remote\+Audio\+Streams(false)}.
\end{DoxyItemize}
\item This method only works for the channel created by calling {\ttfamily join\+Channel}. To set whether to receive remote audio streams for a specific channel, Agora recommends using {\ttfamily auto\+Subscribe\+Audio} in the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}}} class.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop receiving remote audio streams\+:
\begin{DoxyItemize}
\item true\+: Stop receiving any remote audio stream.
\item false\+: (Default) Resume receiving all remote audio streams.
\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.

You can call this method either before joining a channel or during a call. If you call this method before entering a channel, the service starts the video; if you call it during a call, the audio call switches to a video call.

\begin{DoxyNote}{Note}
This method controls the underlying states of the Engine. It is still valid after one leaves the 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_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.

This method stops capturing the local video and receiving any remote video. To enable the local preview function, call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a80351723711a6f3a66abcc287154eb10}{enable\+Local\+Video}} (true). \begin{DoxyReturn}{Returns}

\end{DoxyReturn}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}\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.

Each configuration profile corresponds to a set of video parameters, including the resolution, frame rate, and bitrate.

The parameters specified in this method are the maximum values under ideal network conditions. If the video engine cannot render the video using the specified parameters due to poor network conditions, the parameters further down the list are considered until a successful configuration is found.


\begin{DoxyParams}{Parameters}
{\em config} & The local video encoder configuration\+: 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]}}

query\+Codec\+Capability. query current device codec capacity. and will return actual codec\+Cap\+Info. \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 the score of the current device.

\begin{DoxyReturn}{Returns}
\begin{quote}
0\+: The score of the current device. Most devices score between 60-\/100, with higher scores \end{quote}
indicating better performance.
\end{DoxyReturn}
$<$ 0\+: Failure. \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]}}

Query all focal attributes supported by the camera.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Agora\+Focal\+Length\+Info\+: The camera supports the collection of focal segments. 
\end{DoxyItemize}
\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 capturer configuration. 
\begin{DoxyParams}{Parameters}
{\em config} & The camera capturer configuration. For details, see \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration\}.  Call this method before enabling the local camera. That said, you can call this method before calling  Rtc\+Engine\#join\+Channel join\+Channel\},  Rtc\+Engine\#enable\+Video enable\+Video\}, or  Rtc\+Engine\#enable\+Local\+Video enable\+Local\+Video\}, depending on which method you use to turn on your local camera. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 the local stream on the local device. It affects only the video view that the local user sees, not the published local video stream.

To unbind the local video from the view, set {\ttfamily view} in Video\+Canvas as {\ttfamily null}.

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

\begin{DoxyParams}{Parameters}
{\em local} & The local video view setting\+: 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.

Usually the app should specify the {\ttfamily uid} of the remote video in the method call before the remote user joins the channel. If the remote {\ttfamily uid} is unknown to the app, set it later when the app receives the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a848d29acef97523964bb27dd5b637162}{on\+User\+Joined}} callback.

To unbind the remote user from the view, set {\ttfamily view} in Video\+Canvas as {\ttfamily null}.

\begin{DoxyNote}{Note}
Ensure that you call this method in the UI thread.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em remote} & The remote video view settings\+: \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_video_canvas}{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]}}

Updates the display mode of the local video view.

After initializing the local video view, you can call this method to update its rendering mode. It affects only the video view that the local user sees, not the published local video stream.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you have called \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a75485acddd3d8593f8a7403c489c9d7f}{setup\+Local\+Video}} to initialize the local video view before this method.
\item During a call, you can call this method as many times as necessary to update the local video view.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em render\+Mode} & Sets the local 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_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 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
{\em mirror\+Mode} & Sets the remote video mirror mode\+:
\begin{DoxyItemize}
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+E\+D(1)}\+: Enable the mirror mode.
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+E\+D(2)}\+: Disable the mirror 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_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 mode. It affects only the video view that the local user sees, not the published local video stream.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you have called \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a75485acddd3d8593f8a7403c489c9d7f}{setup\+Local\+Video}} to initialize the local video view before this method.
\item During a call, you can call this method as many times as necessary to update the local video view.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em render\+Mode} & Sets the local 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
{\em mirror\+Mode} & Sets the local video mirror mode\+:
\begin{DoxyItemize}
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+U\+T\+O(0)}\+: (Default) The mirror mode determined by the S\+DK. If you use the front camera, the S\+DK enables the mirror mode; if you use the rear camera, the S\+DK disables the mirror mode.
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+E\+D(1)}\+: Enable the mirror mode.
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+E\+D(2)}\+: Disable the mirror 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_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]}}

Starts the local video preview before joining a channel.

Once you call this method to start the local video preview, if you leave the channel by calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}}, the local video preview remains until you call \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2b6f702ce3e43c943836a9dce514a129}{stop\+Preview}} to disable it.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success. 
\item $<$0\+: Failure. 
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_ae1d8856666b5ee1e40e1a6bedc6388c9}{E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED(-\/7)}}. 
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a2552c14c330997328653a41dcd9714dc}{E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+T\+A\+TE(-\/8)}} 
\end{DoxyItemize}
\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]}}

Starts the local video preview before joining a channel. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
\end{DoxyParams}
\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 and the video.

\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 and the video. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
\end{DoxyParams}
\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]}}

Disables or re-\/enables the local video capture.

Once you enable the video using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}, the local video is enabled by default. This method disables or re-\/enables the local video capture.

{\ttfamily enable\+Local\+Video(false)} applies to scenarios when the user wants to watch the remote video without sending any video stream to the other user.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily enable\+Video}. Otherwise, this method may not work properly.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to disable or re-\/enable the local video, including the capturer, renderer, and sender\+:
\begin{DoxyItemize}
\item true\+: (Default) Re-\/enable the local video.
\item false\+: Disable the local video. Once the local video is disabled, the remote users can no longer receive the video stream of this user, while this user can still receive the video streams of other remote users. When you set {\ttfamily enabled} as {\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 video capture with a specified camera. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
{\em config} & -\/ Camera capture configuration. See \#\+Camera\+Capturer\+Configuration. \\
\hline
\end{DoxyParams}
\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 video capture with a specified camera. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
\end{DoxyParams}
\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 with a transcoding video stream. 
\begin{DoxyParams}{Parameters}
{\em config} & Sets the transcoding video stream layout settings. See \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.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\end{DoxyItemize}
\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 a transcoding video stream.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\end{DoxyItemize}
\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]}}

Update the video layout settings for the transcoding video stream.


\begin{DoxyParams}{Parameters}
{\em config} & Update the transcoding video stream layout settings. See \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.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\end{DoxyItemize}
\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 the local audio with a mixed audio stream. 
\begin{DoxyParams}{Parameters}
{\em config} & Sets the mixed audio stream source settings. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\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]}}

Update the source stream settings for the mixed audio stream. 
\begin{DoxyParams}{Parameters}
{\em config} & Update the source audio stream settings. See \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\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 a mixed audio track.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream. 
\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 sending the local video stream.


\begin{DoxyParams}{Parameters}
{\em muted} & Determines whether to send or stop sending the local video stream\+:
\begin{DoxyItemize}
\item true\+: Stop sending the local video stream.
\item false\+: (Default) Send 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 receiving the video stream of a specified user.

You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid.


\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the specified user. \\
\hline
{\em muted} & Whether to stop receiving the video stream of the specified user\+:
\begin{DoxyItemize}
\item true\+: Stop receiving the video stream of the specified user.
\item false\+: (Default) Resume receiving 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 receiving all remote video streams.

This method works for all remote users that join or will join a channel using the {\ttfamily join\+Channel} method. It is equivalent to the {\ttfamily auto\+Subscribe\+Video} member in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} class. Ensure that you call this method after joining a channel.
\begin{DoxyItemize}
\item If you call {\ttfamily mute\+All\+Remote\+Video\+Streams(true)} after joining a channel, the local use stops receiving any video stream from any user in the channel, including any user who joins the channel after you call this method.
\item If you call {\ttfamily mute\+All\+Remote\+Video\+Streams(true)} after leaving a channel, the local user does not receive any video stream the next time the user joins a channel.
\end{DoxyItemize}

After you successfully call {\ttfamily mute\+All\+Remote\+Video\+Streams(true)}, you can take the following actions\+:
\begin{DoxyItemize}
\item To resume receiving all remote video streams, call {\ttfamily mute\+All\+Remote\+Video\+Streams(false)}.
\item To resume receiving the video stream of a specified user, call {\ttfamily mute\+Remote\+Video\+Stream(uid, false)}, where {\ttfamily uid} is the ID of the user whose video stream you want to resume receiving.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item The result of calling this method is affected by calling {\ttfamily enable\+Video} and {\ttfamily disable\+Video}. Settings in {\ttfamily mute\+All\+Remote\+Video\+Streams} stop taking effect if either of the following occurs\+:
\begin{DoxyItemize}
\item Calling {\ttfamily enable\+Video} after {\ttfamily mute\+All\+Remote\+Video\+Streams(true)}.
\item Calling {\ttfamily disable\+Video} after {\ttfamily mute\+All\+Remote\+Video\+Streams(false)}.
\end{DoxyItemize}
\item This method only works for the channel created by calling {\ttfamily join\+Channel}. To set whether to receive remote audio streams for a specific channel, Agora recommends using {\ttfamily auto\+Subscribe\+Video} in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_channel_media_options}{Channel\+Media\+Options}} class.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em muted} & Whether to stop receiving remote video streams\+:
\begin{DoxyItemize}
\item true\+: Stop receiving any remote video stream.
\item false\+: (Default) R\+Resume receiving all remote video streams.
\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]}}

Enables/\+Disables image enhancement and sets the options. \begin{DoxySince}{Since}
v2.\+4.\+0.
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable image enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables image enhancement.
\item {\ttfamily false}\+: Disables image enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The image enhancement options. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. 
\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]}}

Enables/\+Disables image enhancement and sets the options. \begin{DoxySince}{Since}
v2.\+4.\+0.
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable image enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables image enhancement.
\item {\ttfamily false}\+: Disables image enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & The image enhancement options. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_beauty_options}{Beauty\+Options}}. \\
\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}{\}. 0\+: Success.$<$ 0\+: Failure.E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. }}\\
\hline
\end{DoxyParams}
\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]}}

Enables/\+Disables face shape and sets the beauty options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable face shape\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables face shape.
\item {\ttfamily false}\+: Disables face shape. 
\end{DoxyItemize}\\
\hline
{\em options} & The face shape beauty options. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options\}. 0\+: Success.$<$ 0\+: Failure.E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. }}\\
\hline
\end{DoxyParams}
\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]}}

Enables/\+Disables face shape and sets the beauty options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable face shape\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enables face shape.
\item {\ttfamily false}\+: Disables face shape. 
\end{DoxyItemize}\\
\hline
{\em options} & The face shape beauty options. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options\}.  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 \{ Constants\#\+Media\+Source\+Type\}. 0\+: Success.$<$ 0\+: Failure.E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. }}\\
\hline
\end{DoxyParams}
\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 face shape beauty options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}
Face\+Shape\+Beauty\+Options 
\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 face shape beauty options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\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}{\}.  Face\+Shape\+Beauty\+Options }}\\
\hline
\end{DoxyParams}
\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 face shape area options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}{set\+Face\+Shape\+Beauty\+Options}}.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & The face shape area options. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. 
\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 face shape area options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a991f340f2d222cfec9ed965de0c91cc2}{set\+Face\+Shape\+Beauty\+Options}}.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & The face shape area options. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}. \\
\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}{\}. 0\+: Success.$<$ 0\+: Failure.E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(4)\+: The system version is earlier than Android 4.\+4, which does not support this function. }}\\
\hline
\end{DoxyParams}
\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 face shape area options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em shape\+Area} & The face shape area. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{io.\+agora.\+rtc2.\+video.\+Face\+Shape\+Area\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Face\+Shape\+Area\+Options 
\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 face shape area options. @technical preview

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling the enable\+Video method.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em shape\+Area} & The face shape area. See \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_face_shape_area_options}{io.\+agora.\+rtc2.\+video.\+Face\+Shape\+Area\+Options}}. \\
\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}{\}.  Face\+Shape\+Area\+Options }}\\
\hline
\end{DoxyParams}
\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 filter effect option. \begin{DoxySince}{Since}
v4.\+4.\+1
\end{DoxySince}
You can call this method to enable the filter effect feature and set the options of the filter effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after calling the enable\+Video method.
\item You can call this method either before or after joining a channel.
\item The filter effect feature has specific performance requirements for devices. If your device overheats after enabling the filter effect, Agora recommends disabling it entirely.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable filter beauty\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enabled.
\item {\ttfamily false}\+: (Default) Disabled. 
\end{DoxyItemize}\\
\hline
{\em options} & The filter effect options. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 filter effect option. \begin{DoxySince}{Since}
v4.\+4.\+1.
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after calling the enable\+Video method.
\item You can call this method either before or after joining a channel.
\item The filter effect feature has specific performance requirements for devices. If your device overheats after enabling the filter effect, Agora recommends disabling it entirely.
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable filter beauty\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enabled.
\item {\ttfamily false}\+: (Default) Disabled. 
\end{DoxyItemize}\\
\hline
{\em options} & The filter effect options. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_filter_effect_options}{Filter\+Effect\+Options\}.  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 \{ Constants\#\+Media\+Source\+Type\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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}
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.

You can call this method to enable the low-\/light enhancement feature and set the options of the low-\/light enhancement effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item 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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable low-\/light enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The low-\/light enhancement options. See \{\mbox{\hyperlink{}{Low\+Light\+Enhance\+Options\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 enhancement.

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
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.

You can call this method to enable the low-\/light enhancement feature and set the options of the low-\/light enhancement effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item 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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable low-\/light enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The low-\/light enhancement options. See \{\mbox{\hyperlink{}{Low\+Light\+Enhance\+Options\}.  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 \{ Constants\#\+Media\+Source\+Type\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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}
Underlit 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.

You can call this method to enable the video noise reduction feature and set the options of the video noise reduction effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item The video noise reduction feature has certain performance requirements on devices. 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} & Sets whether to enable video noise reduction\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The video noise reduction options. See \{\mbox{\hyperlink{}{Video\+Denoiser\+Options\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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.

\begin{DoxySince}{Since}
v3.\+6.\+2
\end{DoxySince}
Underlit 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.

You can call this method to enable the video noise reduction feature and set the options of the video noise reduction effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item The video noise reduction feature has certain performance requirements on devices. 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} & Sets whether to enable video noise reduction\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The video noise reduction options. See \{\mbox{\hyperlink{}{Video\+Denoiser\+Options\}.  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 \{ Constants\#\+Media\+Source\+Type\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item The color enhancement feature has certain performance requirements on devices. If your device overheats after you enable color enhancement, Agora recommends modifying the color enhancement options to a less performance-\/consuming level or disabling color enhancement entirely.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable color enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The color enhancement options. See \mbox{\hyperlink{}{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 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 Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so} dynamic library.
\item Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7146c53b6fe50980242bdd8dcddf177f}{enable\+Video}}.
\item The color enhancement feature has certain performance requirements on devices. If your device overheats after you enable color enhancement, Agora recommends modifying the color enhancement options to a less performance-\/consuming level or disabling color enhancement entirely.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable color enhancement\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options} & The color enhancement options. See \mbox{\hyperlink{}{Color\+Enhance\+Options}}. \\
\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}{\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 portrait segmentation and repalce the background(not portrait area) with specified source.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable capture image background subtitution\+:
\begin{DoxyItemize}
\item true\+: enables background subtitution.
\item false\+: disables background subtitution. 
\end{DoxyItemize}\\
\hline
{\em background\+Source} & Sets the background source data. See \{\mbox{\hyperlink{}{Virtual\+Background\+Source\}.  segproperty 0\+: Success.$<$ 0\+: Failure. V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+I\+M\+A\+G\+E\+\_\+\+N\+O\+T\+\_\+\+E\+X\+I\+ST = -\/1, V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+O\+L\+O\+R\+\_\+\+F\+O\+R\+M\+A\+T\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED = -\/2, V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+D\+E\+V\+I\+C\+E\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED = -\/3, }}\\
\hline
\end{DoxyParams}
\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/\+Disables portrait segmentation and repalce the background(not portrait area) with specified source.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method applies to Android 4.\+4 or later.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable capture image background subtitution\+:
\begin{DoxyItemize}
\item true\+: enables background subtitution.
\item false\+: disables background subtitution. 
\end{DoxyItemize}\\
\hline
{\em Virtual\+Background\+Source} & Sets the background source data. See \{\mbox{\hyperlink{}{Virtual\+Background\+Source\}.  Segmentation\+Property  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 \{ Constants\#\+Media\+Source\+Type\}. 0\+: Success.$<$ 0\+: Failure. V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+I\+M\+A\+G\+E\+\_\+\+N\+O\+T\+\_\+\+E\+X\+I\+ST = -\/1, V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+C\+O\+L\+O\+R\+\_\+\+F\+O\+R\+M\+A\+T\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED = -\/2, V\+I\+R\+T\+U\+A\+L\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+N\+D\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+D\+E\+V\+I\+C\+E\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED = -\/3, }}\\
\hline
\end{DoxyParams}
\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 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.

Depending on the scenario, Agora uses different default audio routes\+:
\begin{DoxyItemize}
\item Voice call\+: Earpiece.
\item Video call\+: Speakerphone.
\item Audio broadcast\+: Speakerphone.
\item Video broadcast\+: Speakerphone.
\end{DoxyItemize}

Call this method before, during, or after a call, to change the default audio route. When the audio route changes, the S\+DK triggers the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a9685280586a4fce917eac08257fdeaf9}{on\+Audio\+Route\+Changed}} callback.

\begin{DoxyNote}{Note}
The system audio route changes when an external audio device, such as a headphone or a Bluetooth audio device, is connected. See {\itshape Principles for Changing the Audio Route}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em default\+To\+Speaker} & Whether to set the speakerphone as the default audio route\+:
\begin{DoxyItemize}
\item true\+: Set the speakerphone as the default audio route.
\item false\+: Do not set the speakerphone 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 or disables the speakerphone temporarily.

When the audio route changes, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a9685280586a4fce917eac08257fdeaf9}{on\+Audio\+Route\+Changed\} callback. You can call this method before, during, or after a call. However, Agora recommends calling this method only when you are in a channel to change the audio route temporarily.  This method sets the audio route temporarily. Plugging in or unplugging a headphone, or the S\+DK re-\/enabling the audio device module (A\+DM) to adjust the media volume in some scenarios relating to audio, leads to a change in the audio route. See {\itshape Principles for Changing the Audio Route}.  enabled Whether to set the speakerphone as the temporary audio route\+:true\+: Set the speakerphone as the audio route temporarily.false\+: Do not set the speakerphone as the audio route. 0\+: Success.$<$0\+: Failure. }}\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]}}

Select preferred route in android communication mode.


\begin{DoxyParams}{Parameters}
{\em route} & The preferred route. For example, when a Bluetooth headset is connected, you can use this A\+PI to switch the route to a wired headset. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
meanless, route switch result is pass through Callback\+On\+Routing\+Changed 
\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.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The speakerphone is enabled, and the audio plays from the speakerphone.
\item 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.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable in-\/ear monitoring.
\begin{DoxyItemize}
\item true\+: Enable in-\/ear monitoring.
\item false\+: Disable in-\/ear monitoring. 
\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_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.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable in-\/ear monitoring.
\begin{DoxyItemize}
\item true\+: Enable in ear monitoring.
\item false\+: Disable in ear monitoring. 
\end{DoxyItemize}\\
\hline
{\em include\+Audio\+Filters} & The type of the ear monitoring \\
\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_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 monitoring.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of the in-\/ear monitor, ranging from 0 to 100. The default value is 100.\\
\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_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]}}

Sets the voice pitch of the local speaker.


\begin{DoxyParams}{Parameters}
{\em pitch} & Voice frequency, in the range of 0.\+5 to 2.\+0. The default value is 1.\+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_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 voice formant ratio for local speaker.


\begin{DoxyParams}{Parameters}
{\em formant\+Ratio} & Voice frequency, in the range of -\/1.\+0 to 1.\+0. The default value is 0.\+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_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.


\begin{DoxyParams}{Parameters}
{\em band\+Frequency} & The band frequency ranging from 0 to 9; representing the respective 10-\/band center frequencies of voice effects, including 31, 62, 125, 500, 1k, 2k, 4k, 8k, and 16k Hz. \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_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_c_y}{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}} \\
\hline
{\em band\+Gain} & Gain of each band in dB; ranging from -\/15 to 15. \\
\hline
\end{DoxyParams}
\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.


\begin{DoxyParams}{Parameters}
{\em reverb\+Key} & The reverberation key. This method contains five reverberation keys. For details, see the description of each value. \\
\hline
{\em value} & Local voice reverberation value\+: 
\begin{DoxyItemize}
\item \mbox{\hyperlink{}{A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+D\+R\+Y\+\_\+\+L\+E\+V\+E\+L(0)}} 
\item \mbox{\hyperlink{}{A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+W\+E\+T\+\_\+\+L\+E\+V\+E\+L(1)}} 
\item \mbox{\hyperlink{}{A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+R\+O\+O\+M\+\_\+\+S\+I\+Z\+E(2)}} 
\item \mbox{\hyperlink{}{A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+W\+E\+T\+\_\+\+D\+E\+L\+A\+Y(3)}} 
\item \mbox{\hyperlink{}{A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+S\+T\+R\+E\+N\+G\+T\+H(4)}} 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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 preset audio playback effect for remote headphones after remote audio is mixed.


\begin{DoxyParams}{Parameters}
{\em preset} & The preset key\+: \#\+H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+P\+R\+E\+S\+ET.
\begin{DoxyItemize}
\item H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+O\+FF = 0x00000000 \+: Turn off the eualizer effect for headphones.
\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 = 0x04000001 \+: For over-\/ear headphones only.
\item H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+I\+N\+E\+AR = 0x04000002 \+: For in-\/ear headphones only. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: 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 parameters of audio playback effect for remote headphones after remote audio is mixed.


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

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: 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.

You can set different audio effects for different scenarios. See {\itshape Set the Voice Effect}.

To achieve better audio effect quality, Agora recommends calling \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile\} and setting the {\ttfamily scenario} parameter 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\+N\+G(3)} before calling this method. You can call this method either before or after joining a channel.Do not set the profile parameter of {\ttfamily set\+Audio\+Profile} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D(1)}; otherwise, this method call does not take effect.This method works best with the human voice. Agora does not recommend using this method for audio containing music.If you call this method and set the preset parameter to enumerators except {\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  set\+Audio\+Effect\+Parameters set\+Audio\+Effect\+Parameters\}; otherwise, {\ttfamily set\+Audio\+Effect\+Parameters} overrides this method.After calling this method, Agora recommends not calling the following methods, because they can override {\ttfamily set\+Audio\+Effect\+Preset}\+:  Rtc\+Engine\#set\+Voice\+Beautifier\+Preset set\+Voice\+Beautifier\+Preset\} Rtc\+Engine\#set\+Local\+Voice\+Pitch set\+Local\+Voice\+Pitch\} Rtc\+Engine\#set\+Local\+Voice\+Formant set\+Local\+Voice\+Formant\} Rtc\+Engine\#set\+Local\+Voice\+Equalization set\+Local\+Voice\+Equalization\} Rtc\+Engine\#set\+Local\+Voice\+Reverb set\+Local\+Voice\+Reverb\} Rtc\+Engine\#set\+Voice\+Beautifier\+Parameters set\+Voice\+Beautifier\+Parameters\}  preset The options for S\+DK preset audio effects Constants\#\+A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+FF A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+FF\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+K\+TV R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+K\+TV\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+V\+O\+C\+A\+L\+\_\+\+C\+O\+N\+C\+E\+RT R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+V\+O\+C\+A\+L\+\_\+\+C\+O\+N\+C\+E\+RT\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+T\+U\+D\+IO R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+T\+U\+D\+IO\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+P\+H\+O\+N\+O\+G\+R\+A\+PH R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+P\+H\+O\+N\+O\+G\+R\+A\+PH\} Constants\#\+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 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\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+P\+A\+C\+I\+AL R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+S\+P\+A\+C\+I\+AL\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+E\+T\+H\+E\+R\+E\+AL R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+E\+T\+H\+E\+R\+E\+AL\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE\} Constants\#\+R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+C\+H\+O\+R\+US R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+\+C\+H\+O\+R\+US\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+U\+N\+C\+LE V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+U\+N\+C\+LE\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+L\+D\+M\+AN V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+O\+L\+D\+M\+AN\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+B\+OY V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+B\+OY\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+S\+I\+S\+T\+ER V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+S\+I\+S\+T\+ER\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+G\+I\+RL V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+G\+I\+RL\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+I\+G\+K\+I\+NG V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+I\+G\+K\+I\+NG\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+H\+U\+LK V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+H\+U\+LK\} Constants\#\+S\+T\+Y\+L\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+R\+NB S\+T\+Y\+L\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+R\+NB\} Constants\#\+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 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\} Constants\#\+P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON\} 0\+: Success.$<$ 0\+: Failure. }}\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 an S\+DK preset voice beautifier effect.

\begin{DoxySince}{Since}
v3.\+2.\+0
\end{DoxySince}
Call this method to set an S\+DK 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. See {\itshape Set the Voice Effect}.

To achieve better audio effect quality, Agora recommends calling \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile\} and setting the {\ttfamily scenario} parameter 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\+N\+G(3)} and the {\ttfamily profile} parameter to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y(4)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+E\+O(5)} before calling this method. You can call this method either before or after joining a channel.Do not set the profile parameter of {\ttfamily set\+Audio\+Profile} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D(1)}; otherwise, this method call does not take effect.This method works best with the human voice. Agora does not recommend using this method for audio containing music.After calling this method, Agora recommends not calling the following methods, because they can override  Rtc\+Engine\#set\+Voice\+Beautifier\+Preset set\+Voice\+Beautifier\+Preset\}\+: Rtc\+Engine\#set\+Audio\+Effect\+Preset set\+Audio\+Effect\+Preset\} Rtc\+Engine\#set\+Audio\+Effect\+Parameters set\+Audio\+Effect\+Parameters\} Rtc\+Engine\#set\+Local\+Voice\+Pitch set\+Local\+Voice\+Pitch\} Rtc\+Engine\#set\+Local\+Voice\+Formant set\+Local\+Voice\+Formant\} Rtc\+Engine\#set\+Local\+Voice\+Equalization set\+Local\+Voice\+Equalization\} Rtc\+Engine\#set\+Local\+Voice\+Reverb set\+Local\+Voice\+Reverb\} Rtc\+Engine\#set\+Voice\+Beautifier\+Parameters set\+Voice\+Beautifier\+Parameters\} Rtc\+Engine\#set\+Voice\+Conversion\+Preset set\+Voice\+Conversion\+Preset\}  preset The options for S\+DK preset voice beautifier effects\+: Constants\#\+V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+O\+FF V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+O\+FF\} Constants\#\+C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+M\+A\+G\+N\+E\+T\+IC C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+M\+A\+G\+N\+E\+T\+IC\} Constants\#\+C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+F\+R\+E\+SH C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+F\+R\+E\+SH\} Constants\#\+C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+V\+I\+T\+A\+L\+I\+TY C\+H\+A\+T\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+V\+I\+T\+A\+L\+I\+TY\} Constants\#\+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 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\} Constants\#\+T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+D\+E\+EP T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+D\+E\+EP\} Constants\#\+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 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\} Constants\#\+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 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\} Constants\#\+T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+F\+U\+LL T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+F\+U\+LL\} Constants\#\+T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+C\+L\+E\+AR T\+I\+M\+B\+R\+E\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+A\+T\+I\+O\+N\+\_\+\+C\+L\+E\+AR\} Constants\#\+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 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\} Constants\#\+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 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 Constants\#\+U\+L\+T\+R\+A\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+V\+O\+I\+CE U\+L\+T\+R\+A\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+V\+O\+I\+CE\} 0\+: Success.$<$ 0\+: Failure. }}\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 an S\+DK preset voice conversion effect.

\begin{DoxySince}{Since}
v3.\+3.\+1
\end{DoxySince}
Call this method to set an S\+DK preset voice conversion effect for the local user who sends an audio stream. After setting a voice conversion effect, all users in the channel can hear the effect.

You can set different voice conversion effects for different scenarios. See {\itshape Set the Voice Effect}.

To achieve better audio effect quality, Agora recommends calling \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile\} and setting the {\ttfamily scenario} parameter 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\+N\+G(3)} and the {\ttfamily profile} parameter to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y(4)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+E\+O(5)} before calling this method. You can call this method either before or after joining a channel.Do not set the {\ttfamily profile} parameter of {\ttfamily set\+Audio\+Profile} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D(1)}; otherwise, this method call does not take effect.This method works best with the human voice. Agora does not recommend using this method for audio containing music.After calling this method, Agora recommends not calling the following methods, because they can override  Rtc\+Engine\#set\+Voice\+Conversion\+Preset set\+Voice\+Conversion\+Preset\}\+: Rtc\+Engine\#set\+Audio\+Effect\+Preset set\+Audio\+Effect\+Preset\} Rtc\+Engine\#set\+Audio\+Effect\+Parameters set\+Audio\+Effect\+Parameters\} Rtc\+Engine\#set\+Voice\+Beautifier\+Preset set\+Voice\+Beautifier\+Preset\} Rtc\+Engine\#set\+Voice\+Beautifier\+Parameters set\+Voice\+Beautifier\+Parameters\} Rtc\+Engine\#set\+Local\+Voice\+Pitch set\+Local\+Voice\+Pitch\} Rtc\+Engine\#set\+Local\+Voice\+Formant set\+Local\+Voice\+Formant\} Rtc\+Engine\#set\+Local\+Voice\+Equalization set\+Local\+Voice\+Equalization\} Rtc\+Engine\#set\+Local\+Voice\+Reverb set\+Local\+Voice\+Reverb\}  preset The options for S\+DK preset voice conversion effects\+: Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+O\+FF V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+O\+FF\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+N\+E\+U\+T\+R\+AL V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+N\+E\+U\+T\+R\+AL\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+W\+E\+ET V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+W\+E\+ET\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+O\+L\+ID V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+O\+L\+ID\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+B\+A\+SS V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+B\+A\+SS\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+A\+R\+T\+O\+ON V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+A\+R\+T\+O\+ON\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+H\+I\+L\+D\+L\+I\+KE V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+H\+I\+L\+D\+L\+I\+KE\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+P\+H\+O\+N\+E\+\_\+\+O\+P\+E\+R\+A\+T\+OR V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+P\+H\+O\+N\+E\+\_\+\+O\+P\+E\+R\+A\+T\+OR\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+M\+O\+N\+S\+T\+ER V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+M\+O\+N\+S\+T\+ER\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+E\+RS V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+T\+R\+A\+N\+S\+F\+O\+R\+M\+E\+RS\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+G\+R\+O\+OT V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+G\+R\+O\+OT\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+D\+A\+R\+T\+H\+\_\+\+V\+A\+D\+ER V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+D\+A\+R\+T\+H\+\_\+\+V\+A\+D\+ER\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+I\+R\+O\+N\+\_\+\+L\+A\+DY V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+I\+R\+O\+N\+\_\+\+L\+A\+DY\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+H\+I\+N\+\_\+\+C\+H\+AN V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+S\+H\+I\+N\+\_\+\+C\+H\+AN\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+G\+I\+R\+L\+I\+S\+H\+\_\+\+M\+AN V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+G\+I\+R\+L\+I\+S\+H\+\_\+\+M\+AN\} Constants\#\+V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+H\+I\+P\+M\+U\+NK V\+O\+I\+C\+E\+\_\+\+C\+H\+A\+N\+G\+E\+R\+\_\+\+C\+H\+I\+P\+M\+U\+NK\} 0\+: Success.$<$ 0\+: Failure. }}\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.
\end{DoxyItemize}

After setting parameters, all users in the channel can hear the relevant effect.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item To achieve better audio effect quality, Agora recommends calling {\ttfamily set\+Audio\+Profile} and setting the scenario parameter 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\+N\+G(3)} before calling this method.
\item Do not set the profile parameter of set\+Audio\+Profile to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D(1)}; otherwise, this method call does not take effect.
\item This method works best with the human voice. Agora does not recommend using this method for audio containing music.
\item After calling this method, Agora recommends not calling the following methods, because they can override {\ttfamily set\+Audio\+Effect\+Parameters}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}{set\+Local\+Voice\+Formant}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e707946700a15c2b7d99177db830a54}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac955fd38973b32c629cdfa1566e52fc6}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af712699445c8ff8118f5d1027dc636ca}{set\+Voice\+Beautifier\+Parameters}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}{set\+Voice\+Conversion\+Preset}} 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset audio effects\+:
\begin{DoxyItemize}
\item 3D voice effect\+: {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE}
\begin{DoxyItemize}
\item Call {\ttfamily set\+Audio\+Profile} and set the {\ttfamily profile} parameter to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D\+\_\+\+S\+T\+E\+R\+E\+O(3)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+E\+O(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 Pitch correction effect\+: {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}. To achieve better audio effect quality, Agora recommends calling {\ttfamily set\+Audio\+Profile} and setting the {\ttfamily profile} parameter to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y(4)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+E\+O(5)} before setting this enumerator. 
\end{DoxyItemize}\\
\hline
{\em param1} & 
\begin{DoxyItemize}
\item 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}, the {\ttfamily param1} sets the cycle period of the 3D voice effect. The value range is \mbox{[}1, 60\mbox{]} and the unit is a second. The default value is 10 seconds, indicating that the voice moves around you every 10 seconds.
\item If you set {\ttfamily preset} to {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, {\ttfamily param1} sets 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} & 
\begin{DoxyItemize}
\item You need to set {\ttfamily param2} to {\ttfamily 0}.
\item If you set {\ttfamily preset} to {\ttfamily P\+I\+T\+C\+H\+\_\+\+C\+O\+R\+R\+E\+C\+T\+I\+ON}, {\ttfamily param2} sets 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 S\+DK 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 you call this method successfully, all users in the channel can hear the relevant effect.

To achieve better audio effect quality, before you call this method, Agora recommends calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abb4b63716fda137ecd5254137c79547f}{set\+Audio\+Profile}}, and setting the scenario parameter 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\+N\+G(3)} and the profile parameter to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y(4)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+M\+U\+S\+I\+C\+\_\+\+H\+I\+G\+H\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+S\+T\+E\+R\+E\+O(5)}.

\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 of {\ttfamily set\+Audio\+Profile} to {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+S\+P\+E\+E\+C\+H\+\_\+\+S\+T\+A\+N\+D\+A\+R\+D(1)}; otherwise, this method call does not take effect.
\item This method works best with the human voice. Agora does not recommend using this method for audio containing music.
\item After you call this method, Agora recommends not calling the following methods, because they can override {\ttfamily set\+Voice\+Beautifier\+Parameters}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a9f13e2709b7d084ff351c9506d6446d0}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aaf70d13931b9a2194cd96284b37dc071}{set\+Audio\+Effect\+Parameters}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5a866fbb28c34fc38c3f600f78d61e73}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a5415bac7850599bb5b620dc9c6bd4993}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a0340c549ea8bf702a49b46d8f66dc070}{set\+Local\+Voice\+Formant}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4e707946700a15c2b7d99177db830a54}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac955fd38973b32c629cdfa1566e52fc6}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ae9cfcbcb51a1a179a2b57d0f016b400c}{set\+Voice\+Conversion\+Preset}} 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset voice beautifier effects\+:
\begin{DoxyItemize}
\item {\ttfamily S\+I\+N\+G\+I\+N\+G\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+ER}\+: 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 effects options\+:
\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/\+Disables stereo panning for remote users. Ensure that you call this method before join\+Channel to enable stereo panning for remote users so that the local user can track the position of a remote user by calling set\+Remote\+Voice\+Position. 
\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable stereo panning for remote users\+:
\begin{DoxyItemize}
\item true\+: enables stereo panning.
\item false\+: disables 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 sound position and gain of a remote user. When the local user calls this method to set the sound position of a remote user, the sound difference between the left and right channels allows the local user to track the real-\/time position of the remote user, creating a real sense of space. This method applies to massively 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 enable\+Sound\+Position\+Indication method before joining a channel.
\item This method requires hardware support. For the best sound positioning, we recommend using a wired headset.
\item Ensure that you call this method after joining a channel. 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the remote user. \\
\hline
{\em pan} & The sound position of the remote user. The value ranges from -\/1.\+0 to 1.\+0\+:
\begin{DoxyItemize}
\item 0.\+0\+: the remote sound comes from the front.
\item -\/1.\+0\+: the remote sound comes from the left.
\item 1.\+0\+: the remote sound comes from the right. 
\end{DoxyItemize}\\
\hline
{\em gain} & Gain of the remote user. The value ranges from 0.\+0 to 100.\+0. The default value is 100.\+0 (the original gain of the remote user). The smaller the value, the less the gain. \\
\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.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the voice AI tuner\+:
\begin{DoxyItemize}
\item true\+: Enable the voice AI tuner
\item false\+: (default) Disable the voice AI tuner.
\end{DoxyItemize}\\
\hline
{\em type.} & The options for S\+DK voice AI tuner types. See \#\+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 and mixing the music file.

This method mixes the specified local or online audio file with the audio stream from the microphone, or replaces the microphone’s audio stream with the specified local or remote audio file.

You can choose whether the other user can hear the local audio playback and specify the number of playback loops.

A successful {\ttfamily start\+Audio\+Mixing} method call triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_ab432d1b5f1d8efb96a838f8f9388ff07}{on\+Audio\+Mixing\+State\+Changed\}(A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG) callback on the local client. When the audio mixing file playback finishes, the S\+DK triggers the \{ I\+Rtc\+Engine\+Event\+Handler\#on\+Audio\+Mixing\+State\+Changed on\+Audio\+Mixing\+State\+Changed\}(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.  file\+Path Specifies the absolute path (including the suffixes of the filename) of the local or online audio file to be mixed. For example, {\ttfamily /sdcard/emulated/0/audio.mp4}. Supported audio formats\+: mp3, mp4, m4a, aac, 3gp, mkv, and wav.If the path begins with /assets/, the audio file is in the /assets/ directory.Otherwise, the audio file is in the absolute path.  loopback Sets which user can hear the audio mixing\+:true\+: Only the local user can hear the audio mixing.false\+: Both users can hear the audio mixing.  cycle Sets the number of playback loops\+:Positive integer\+: Number of playback loops.-\/1\+: Infinite playback loops. To use this method, ensure that the Android device is v4.\+2 or later, and the A\+PI version is v16 or later.Call this method when you are in the channel, otherwise it may cause issues.If you want to play an online music file, ensure that the time interval between calling this method is more than 100 ms, or the {\ttfamily A\+U\+D\+I\+O\+\_\+\+F\+I\+L\+E\+\_\+\+O\+P\+E\+N\+\_\+\+T\+O\+O\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+T(702)} warning occurs.If you want 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.If you call this method on an emulator, only the M\+P3 file format is supported. 0\+: Success.$<$ 0\+: Failure. Constants\#\+W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR (701)\}\+: If the local audio file does not exist, or the online audio packet is not received within five seconds after it is opened, the S\+DK assumes that the media file cannot be used and returns this warning. }}\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]}}

Enables/\+Disables Agora AI Noise Suppression(\+A\+I\+N\+S) with preset mode. 
\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable A\+I\+NS.
\begin{DoxyItemize}
\item true\+: Enables the A\+I\+NS.
\item false\+: Disables the A\+I\+NS. 
\end{DoxyItemize}\\
\hline
{\em mode} & The preset A\+I\+NS mode, range is \mbox{[}0,1,2\mbox{]}\+: 0\+: A\+I\+NS mode with soft suppression level. 1\+: A\+I\+NS mode with aggressive suppression level. 2\+: A\+I\+NS mode with aggressive suppression level and low algorithm latency. \\
\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 and mixing the music file.

This method mixes the specified local or online audio file with the audio stream from the microphone, or replaces the microphone’s audio stream with the specified local or remote audio file.

You can choose whether the other user can hear the local audio playback and specify the number of playback loops.

A successful {\ttfamily start\+Audio\+Mixing} method call triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_ab432d1b5f1d8efb96a838f8f9388ff07}{on\+Audio\+Mixing\+State\+Changed\}(A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+S\+T\+A\+T\+E\+\_\+\+P\+L\+A\+Y\+I\+NG) callback on the local client. When the audio mixing file playback finishes, the S\+DK triggers the \{ I\+Rtc\+Engine\+Event\+Handler\#on\+Audio\+Mixing\+State\+Changed on\+Audio\+Mixing\+State\+Changed\}(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.  file\+Path Specifies the absolute path (including the suffixes of the filename) of the local or online audio file to be mixed. For example, {\ttfamily /sdcard/emulated/0/audio.mp4}. Supported audio formats\+: mp3, mp4, m4a, aac, 3gp, mkv, and wav.If the path begins with /assets/, the audio file is in the /assets/ directory.Otherwise, the audio file is in the absolute path.  loopback Sets which user can hear the audio mixing\+:true\+: Only the local user can hear the audio mixing.false\+: Both users can hear the audio mixing.  cycle Sets the number of playback loops\+:Positive integer\+: Number of playback loops.-\/1\+: Infinite playback loops.  start\+Pos The playback position (ms) of the music file. To use this method, ensure that the Android device is v4.\+2 or later, and the A\+PI version is v16 or later.Call this method when you are in the channel, otherwise it may cause issues.If you want to play an online music file, ensure that the time interval between calling this method is more than 100 ms, or the {\ttfamily A\+U\+D\+I\+O\+\_\+\+F\+I\+L\+E\+\_\+\+O\+P\+E\+N\+\_\+\+T\+O\+O\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+T(702)} warning occurs.If you want 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.If you call this method on an emulator, only the M\+P3 file format is supported. 0\+: Success.$<$ 0\+: Failure. Constants\#\+W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR (701)\}\+: If the local audio file does not exist, or the online audio packet is not received within five seconds after it is opened, the S\+DK assumes that the media file cannot be used and returns this warning. }}\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 or mixing the music file.

Call this method when you are in 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.

Call this method when you are in 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.

Call this method when you are in 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 of audio mixing.

Call this method when you are in a channel.

\begin{DoxyNote}{Note}
Calling this method does not affect the volume of the audio effect file playback invoked by the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a890999cd19b7dbebececfbb2537637d8}{~play\+Effect}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em volume} & Audio mixing volume. The value ranges between 0 and 100 (default).\\
\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 audio mixing volume for local playback. \begin{DoxyNote}{Note}
Call this method when you are in a channel. 
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em volume} & Audio mixing volume for local playback. The value ranges between 0 and 100 (default). \\
\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 audio mixing volume for publishing (for remote users). \begin{DoxyNote}{Note}
Call this method when you are in a channel. 
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em volume} & Audio mixing volume for publishing. The value ranges between 0 and 100 (default). \\
\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. This method helps troubleshoot audio volume related issues. \begin{DoxyNote}{Note}
Call this method when you are in a channel. 
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 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}
Call this method when you are in a channel. 
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: The audio mixing volume for publishing, 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]}}

Gets the duration (ms) of the music file.

Call this method when you are in a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the audio mixing duration, if the method call is successful.
\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]}}

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

Call this method when you are in a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the current playback position of the audio mixing, if the method call is successful.
\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 playback position (ms) of the music file to a different starting position (the default plays from the beginning).


\begin{DoxyParams}{Parameters}
{\em pos} & The playback starting position (ms) of the audio mixing 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_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]}}

In dual-\/channel music files, different audio data can be stored on the left and right channels. According to actual needs, you can set the channel mode as the original mode, the left channel mode, the right channel mode or the mixed mode


\begin{DoxyParams}{Parameters}
{\em mode} & The mode of channel 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 music file.


\begin{DoxyParams}{Parameters}
{\em pitch} & The pitch of the 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 music file.


\begin{DoxyParams}{Parameters}
{\em speed} & The playback speed. Agora recommends that you limit this value to 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]}}

select the track of the mixing music file.

Call this method after start\+Audio\+Mixing is called.


\begin{DoxyParams}{Parameters}
{\em audio\+Index} & Audio track index. The value begin from 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_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]}}

Get the audio track count of mixing music file.

Call this method After start\+Audio\+Mixing is called.

\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_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 I\+Audio\+Effect\+Manager object associated with the current R\+TC engine.

\begin{DoxyReturn}{Returns}
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 an audio recording.

The S\+DK allows recording during a call, which supports either one of the following formats\+: 
\begin{DoxyItemize}
\item .wav\+: Large file size with high sound fidelity 
\item .aac\+: Small file size with low sound fidelity 
\end{DoxyItemize}

Ensure that the directory to save the recording file exists and is writable. This method is usually called after the \mbox{\hyperlink{}{token, java.\+lang.\+String channel\+Name, java.\+lang.\+String optional\+Info, int optional\+Uid) join\+Channel}} method. The recording automatically stops when the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} method is called.


\begin{DoxyParams}{Parameters}
{\em file\+Path} & Full file path of the recording file. The string of the file name is in U\+T\+F-\/8 code. \\
\hline
{\em quality} & Audio recording quality\+: 
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_ac9a1bb3cc2d54a36332fcbad0f3010e9}{A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+L\+O\+W(0)}} 
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a47fdcd11b12d84dbdc9e5f32d7dddae2}{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\+U\+M(1)}} 
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a9d5dc7cca98bb4d0d86b7f634b5c5e0c}{A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+H\+I\+G\+H(2)}} 
\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_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 an audio recording.

The S\+DK allows recording during a call, which supports either one of the following formats\+: 
\begin{DoxyItemize}
\item .wav\+: Large file size with high sound fidelity 
\item .aac\+: Small file size with low sound fidelity 
\end{DoxyItemize}

Ensure that the directory to save the recording file exists and is writable. This method is usually called after the \mbox{\hyperlink{}{token, java.\+lang.\+String channel\+Name, java.\+lang.\+String optional\+Info, int optional\+Uid) join\+Channel}} method. The recording automatically stops when the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} method is called.


\begin{DoxyParams}{Parameters}
{\em config} & audio file recording 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_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 the audio recording on the client.

Note\+: Call this method before calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}}, otherwise the recording automatically stops when the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_af3fe5d61a9ca8db36b56432273d02307}{leave\+Channel}} method is called.

\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_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 a video call test. \begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before joining a channel. 
\item After calling this method, call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf712c76582d770457bf8f0b773312fe}{stop\+Echo\+Test}} method to end the test. Otherwise, the app cannot run the next echo test, or call the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}{joinchannel\} method. }}In the Live Broadcast profile, only a host can call this method. 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The configuration of the echo test. \\
\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 an audio call test.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Succeeded. 
\item $<$0\+: Failed. 
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_ae85c1fee2c63fec6b9303b930e03572c}{E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED(-\/5)}}. 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 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).

Once this method is enabled, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_adc7bfb05ed741769a1436794926b1cf8}{on\+Lastmile\+Probe\+Result\} callback within 30 seconds, and reports the real-\/time statistics of the network conditions. Call this method to check the uplink network quality before users join a channel or before an audience switches to a host. This method consumes extra network traffic and may affect communication quality.Do not call other methods before receiving the \{ I\+Rtc\+Engine\+Event\+Handler\#on\+Lastmile\+Probe\+Result on\+Lastmile\+Probe\+Result\} callback. Otherwise, the callback may be interrupted by other methods.  config The configurations of the last-\/mile network probe test. For details, see  io.\+agora.\+rtc2.\+internal.\+Lastmile\+Probe\+Config Lastmile\+Probe\+Config\}. 0\+: Success.$<$ 0\+: Failure. }}\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__deprecated000028}{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}


\begin{DoxyNote}{Note}
Ensure that you call this method before calling {\ttfamily join\+Channel}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the external audio source\+:
\begin{DoxyItemize}
\item true\+: Enable the external audio source.
\item false\+: (default) Disable the external audio source. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The Sample rate (Hz) of the external audio source, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channels} & The number of channels of the external audio source, which can be set 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_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. 
\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to the external audio sink.
\begin{DoxyItemize}
\item true\+: Enables the external audio sink.
\item false\+: Disables the external audio sink. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The sample rate (Hz) of the external audio sink. You can set this parameter 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]}}

Set remote egl\+Context.

When engine destroy, the S\+DK will automatically release the egl\+Context internally.


\begin{DoxyParams}{Parameters}
{\em egl\+Context.} & \\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
set\+External\+Remote\+Egl\+Context needs to be called before joining the 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_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 frame.

Before calling this method, call the \mbox{\hyperlink{}{int, int)}} method to enable and set the external audio sink.

Ensure that you call this method after joining a channel.

After a successful method call, the app pulls the decoded and mixed audio data for playback.


\begin{DoxyParams}{Parameters}
{\em data} & The audio data that you want to pull. The data format is in byte\mbox{[}\mbox{]}. \\
\hline
{\em length\+In\+Byte} & The data length (byte) of the external 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 \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}{set\+External\+Audio\+Sink}}. Agora recommends setting the audio duration no shorter than 10 ms. The formula for {\ttfamily length\+In\+Byte} is\+: ~\newline
length\+In\+Byte = sample\+Rate/1000 × 2 × 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 frame.

Before calling this method, call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}{set\+External\+Audio\+Sink}}(enabled\+: true) method to enable and set the external audio sink.

Ensure that you call this method after joining a channel.

After a successful method call, the app pulls the decoded and mixed audio data for playback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Once you call the {\ttfamily pull\+Playback\+Audio\+Frame} method successfully, the app will not retrieve any audio data from the \mbox{\hyperlink{}{int, int, int, int, Byte\+Buffer, long, int)}} on\+Playback\+Frame\} callback.
\item The difference between the {\ttfamily on\+Playback\+Frame} callback and the {\ttfamily pull\+Playback\+Audio\+Frame} method is as follows\+:
\begin{DoxyItemize}
\item {\ttfamily on\+Playback\+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 pull\+Playback\+Audio\+Frame}\+: 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 audio data that you want to pull. The data format is in Byte\+Buffer. \\
\hline
{\em length\+In\+Byte} & The data length (byte) of the external 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 \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a63b1e84833597f73666d858208e0d31e}{set\+External\+Audio\+Sink}}. Agora recommends setting the audio duration no shorter than 10 ms. The formula for {\ttfamily length\+In\+Byte} is\+: ~\newline
length\+In\+Byte = sample\+Rate/1000 × 2 × 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 microphone test.

This method tests whether the microphone works properly. Once the test starts, the S\+DK uses the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a6b9a1f4de49ef268b2be15b269ee7c47}{I\+Rtc\+Engine\+Event\+Handler\+::on\+Audio\+Volume\+Indication()}} callback to notify the application on the volume information.


\begin{DoxyParams}{Parameters}
{\em indication\+Interval} & The time interval (ms) between which the S\+DK triggers the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a6b9a1f4de49ef268b2be15b269ee7c47}{on\+Audio\+Volume\+Indication()}} callback.\\
\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_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 microphone test.

This method stops the microphone test. To stop the test, call this method after calling the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_aa207c4859ffe0069ae34e9fc25bc93ff}{start\+Recording\+Device\+Test()}} method.

\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 a playback device test.

This method tests whether the playback device works properly with the specified playback audio file.


\begin{DoxyParams}{Parameters}
{\em audio\+File\+Name} & File path of the audio file for the test, which is in utf8 absolute path\+:\\
\hline
\end{DoxyParams}

\begin{DoxyItemize}
\item Supported File Format\+: wav, mp3, m4a, and aac
\item Supported File Sampling Rate\+: 8000, 16000, 32000, 44100, and 48000
\end{DoxyItemize}

\begin{DoxyReturn}{Returns}
$\ast$ 0\+: Success. $<$0\+: Failure. 
\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 playback device test.

This method stops testing the playback device. You must call this method to stop the test after calling \mbox{[}start\+Playback\+Device\+Test\mbox{]}(start\+Playback\+Device\+Test\+:).

\begin{DoxyReturn}{Returns}
$\ast$ 0\+: Success. $<$0\+: Failure. 
\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]}}

Create a custom audio track and get the audio track id.

\begin{DoxyNote}{Note}
Ensure that you call this method before calling {\ttfamily join\+Channel}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Type} & The type of custom audio track\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_track_type}{A\+U\+D\+I\+O\+\_\+\+T\+R\+A\+C\+K\+\_\+\+M\+I\+X\+A\+B\+L\+E(0)}}\+: Mixable audio track
\item \mbox{\hyperlink{enumio_1_1agora_1_1rtc2_1_1_constants_1_1_audio_track_type}{A\+U\+D\+I\+O\+\_\+\+T\+R\+A\+C\+K\+\_\+\+D\+I\+R\+E\+C\+T(1)}}\+: direct audio track 
\end{DoxyItemize}\\
\hline
{\em config} & The config of custom audio track\+:\\
\hline
\end{DoxyParams}

\begin{DoxyItemize}
\item \begin{DoxyReturn}{Returns}

\end{DoxyReturn}

\item If the call is successful, S\+DK returns audio track id.
\item If the call fails, S\+DK returns 0xffffffff. 
\end{DoxyItemize}\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]}}

Destroy custom audio track by track\+Id


\begin{DoxyParams}{Parameters}
{\em track\+Id} & The custom 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_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.

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000029}{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}
\begin{DoxyNote}{Note}
Ensure that you call this method before {\ttfamily join\+Channel}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the external audio source\+:
\begin{DoxyItemize}
\item true\+: Enable the external audio source.
\item false\+: (default) Disable the external audio source. 
\end{DoxyItemize}\\
\hline
{\em sample\+Rate} & The Sample rate (Hz) of the external audio source, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channels} & The number of channels of the external audio source, which can be set as 1 or 2\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em local\+Playback} & Enable/\+Disables the local playback of external audio track\+:
\begin{DoxyItemize}
\item true\+: Enable local playback
\item false\+: Do not enable local playback 
\end{DoxyItemize}\\
\hline
{\em publish} & Determines whether to publish the external audio track\+:
\begin{DoxyItemize}
\item true\+: Publish the external audio track.
\item false\+: Don\`{}t publish the external audio track. 
\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__deprecated000030}{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__deprecated000031}{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 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_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]}}

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\+Image}.
\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
\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[{\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_video_frame}{Video\+Frame}}}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the video frame using the {\ttfamily Video\+Frame} class and passes the video frame to the Agora S\+DK. \begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000032}{Deprecated}}]This method is deprecated.\end{DoxyRefDesc}


Call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}{set\+External\+Video\+Source}} method and set {\ttfamily push\+Mode} as {\ttfamily true} before calling this method. Otherwise, a failure returns after calling this method.

\begin{DoxyNote}{Note}
You can push the video frame either by calling this method or by calling \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a139283543acaa618638acd57a9195607}{push\+External\+Video\+Frame(\+Agora\+Video\+Frame frame)\}. For textured video frames, Agora recommends using the  push\+External\+Video\+Frame(Video\+Frame frame) push\+External\+Video\+Frame(\+Video\+Frame frame)\} method, so that the S\+DK can better utilize the hardware performance.  frame Video frame to be pushed. See  Video\+Frame Video\+Frame\}\+:{\ttfamily buffer}\+: {\itshape Buffer} The buffer of the video frame.{\ttfamily rotation}\+: {\itshape int} Rotation of the video frame in degrees.{\ttfamily timestamp\+Ns}\+: {\itshape long} Timestamp of the video frame in nanoseconds.  In the {\ttfamily C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} profile, the S\+DK does not support textured video frames. {\ttfamily true}\+: The frame is pushed successfully.{\ttfamily false}\+: Failed to push the frame. }}
\end{DoxyNote}
\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[{\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_video_frame}{Video\+Frame}}}]{frame,  }\item[{int}]{video\+Track\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Pushes the external video frame to the app.

\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 frame} & The external video frame\+: \mbox{\hyperlink{}{Video\+Frame}}. \\
\hline
{\em video\+Track\+Id} & The id of the 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_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 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 frame} & The external video frame\+: \mbox{\hyperlink{}{External\+Video\+Frame}}. \\
\hline
{\em video\+Track\+Id} & The id of the video track. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success, which means that the external video frame is pushed successfully.
\item $<$ 0\+: Failure, which means that the external video frame fails to be pushed. 
\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__deprecated000033}{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 video frame using the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1video_1_1_agora_video_frame}{Agora\+Video\+Frame}} class and passes the video frame to the Agora S\+DK.

Call the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ac96321fb1017f554bc291a8d08fcefe2}{set\+External\+Video\+Source}} method and set {\ttfamily push\+Mode} as {\ttfamily true} before calling this method. Otherwise, a failure returns after calling this method.

\begin{DoxyNote}{Note}
You can push the video frame either by calling this method or by calling \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a2e84e4ede445e1b024bf3836fae61d26}{push\+External\+Video\+Frame(\+Video\+Frame frame)\}. For textured video frames, Agora recommends using the  push\+External\+Video\+Frame(Video\+Frame frame) push\+External\+Video\+Frame(\+Video\+Frame frame)\} method, so that the S\+DK can better utilize the hardware performance.  frame Video frame to be pushed. See  io.\+agora.\+rtc2.\+video.\+Agora\+Video\+Frame Agora\+Video\+Frame\}.  In the {\ttfamily C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} profile, the S\+DK does not support textured video frames. {\ttfamily true}\+: The frame is pushed successfully.{\ttfamily false}\+: Failed to push the frame. }}
\end{DoxyNote}
\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]}}

Checks whether texture encoding is supported.

\begin{DoxyReturn}{Returns}
True/\+False. 
\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.

\begin{DoxyNote}{Note}
Call this method before calling {\ttfamily join\+Channel}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer}{I\+Audio\+Frame\+Observer}} interface, null means unregistering observer instead. \\
\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 frame observer object.

\begin{DoxyNote}{Note}
Ensure that you call this method before joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & The \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}} interface, null means unregistering observer instead. \\
\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 audio recording format for the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer_a1ee188710b22855bd828a9449fd838d4}{on\+Record\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate ({\ttfamily samples\+Per\+Sec}) returned in the {\ttfamily on\+Record\+Audio\+Frame} callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Sets the number of audio channels (channels) returned in the {\ttfamily on\+Record\+Audio\+Frame} callback\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & Sets the use mode of the on\+Record\+Audio\+Frame callback\+:
\begin{DoxyItemize}
\item {\ttfamily 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\+L\+Y(0)}\+: Read-\/only mode\+: Users only read the audio data without modifying anything. For example, when users acquire the data with the Agora S\+DK then push the R\+T\+MP streams.
\item {\ttfamily 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\+T\+E(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 sound-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & Sets the number of samples the {\ttfamily on\+Record\+Audio\+Frame} callback returns. In R\+T\+MP streaming scenarios, set it as 1024. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\end{DoxyItemize}
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The S\+DK calculates the sample interval according to the value of the {\ttfamily sample\+Rate}, {\ttfamily channel}, and {\ttfamily samples\+Per\+Call} parameters you set in this method. Sample interval (s) = sample\+Per\+Call/(sample\+Rate × channel). Ensure that the value of sample interval $>$= 0.\+01. The S\+DK triggers the {\ttfamily on\+Record\+Audio\+Frame} callback according to the sample interval. 
\end{DoxyNote}
\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 audio recording format for the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer_ab35053c29e69caef0ebd833fac21784f}{on\+Playback\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate ({\ttfamily samples\+Per\+Sec}) returned in the {\ttfamily on\+Playback\+Audio\+Frame} callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Sets the number of audio channels (channels) returned in the {\ttfamily on\+Playback\+Audio\+Frame} callback\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & Sets the use mode of the on\+Playback\+Audio\+Frame callback\+:
\begin{DoxyItemize}
\item {\ttfamily 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\+L\+Y(0)}\+: Read-\/only mode\+: Users only read the audio data without modifying anything. For example, when users acquire the data with the Agora S\+DK then push the R\+T\+MP streams.
\item {\ttfamily 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\+T\+E(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 sound-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & Sets the number of samples the {\ttfamily on\+Playback\+Audio\+Frame} callback returns. In R\+T\+MP streaming scenarios, set it as 1024. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\end{DoxyItemize}
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The S\+DK calculates the sample interval according to the value of the {\ttfamily sample\+Rate}, {\ttfamily channel}, and {\ttfamily samples\+Per\+Call} parameters you set in this method. Sample interval (s) = sample\+Per\+Call/(sample\+Rate × channel). Ensure that the value of sample interval $>$= 0.\+01. The S\+DK triggers the {\ttfamily on\+Playback\+Audio\+Frame} callback according to the sample interval. 
\end{DoxyNote}
\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 mixed audio format for the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer_a2bf1588c6b321f063611356f6f0b8e20}{on\+Mixed\+Audio\+Frame}} callback. 
\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate ({\ttfamily samples\+Per\+Sec}) returned in the {\ttfamily on\+Mixed\+Audio\+Frame} callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Sets the number of audio channels (channels) returned in the {\ttfamily on\+Playback\+Audio\+Frame} callback\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & Sets the number of samples the {\ttfamily on\+Mixed\+Audio\+Frame} callback returns. In R\+T\+MP streaming scenarios, set it as 1024. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\end{DoxyItemize}
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The S\+DK calculates the sample interval according to the value of the {\ttfamily sample\+Rate} and {\ttfamily samples\+Per\+Call} parameters you set in this method. Sample interval (s) = sample\+Per\+Call/(sample\+Rate × channel). Ensure that the value of sample interval $>$= 0.\+01. The S\+DK triggers the {\ttfamily on\+Mixed\+Audio\+Frame} callback according to the sample interval. 
\end{DoxyNote}
\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 audio ear monitoring format for the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer_aca30e6f2a70dbf4e84a577296450ed0a}{on\+Ear\+Monitoring\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate ({\ttfamily samples\+Per\+Sec}) returned in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Sets the number of audio channels (channels) returned in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & Sets the use mode of the on\+Ear\+Monitoring\+Audio\+Frame callback\+:
\begin{DoxyItemize}
\item {\ttfamily 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\+L\+Y(0)}\+: Read-\/only mode\+: Users only read the audio data without modifying anything. For example, when users acquire the data with the Agora S\+DK then push the R\+T\+MP streams.
\item {\ttfamily R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+W\+R\+I\+T\+E\+\_\+\+O\+N\+L\+Y(1)}\+: Write-\/only mode\+: Users replace the audio data with their own data and pass the data to the S\+DK for encoding. For example, when users acquire the data.
\item {\ttfamily 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\+T\+E(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 sound-\/effect processing module and perform some voice pre-\/processing, such as a voice change. 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & Sets the number of samples the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback returns. In R\+T\+MP streaming scenarios, set it as 1024. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\end{DoxyItemize}
\end{DoxyReturn}
\begin{DoxyNote}{Note}
The S\+DK calculates the sample interval according to the value of the {\ttfamily sample\+Rate}, {\ttfamily channel}, and {\ttfamily samples\+Per\+Call} parameters you set in this method. Sample interval (s) = sample\+Per\+Call/(sample\+Rate × channel). Ensure that the value of sample interval $>$= 0.\+01. The S\+DK triggers the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback according to the sample interval. 
\end{DoxyNote}
\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/2]}}
{\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__deprecated000034}{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 for the sampling device, channel audience, or C\+DN live audience to see and capture. To add the P\+NG file to a C\+DN live publishing stream, see the \mbox{\hyperlink{}{set\+Live\+Transcoding}} method.


\begin{DoxyParams}{Parameters}
{\em watermark} & Watermark image to be added to the local video stream. See \{\mbox{\hyperlink{}{Agora Image\}.  }} The U\+RL descriptions are different for the local video and C\+DN live streams\+: 
\begin{DoxyItemize}
\item In a local video stream, {\ttfamily url} in \mbox{\hyperlink{}{Agora Image}} refers to the absolute path of the added watermark image file in the local video stream. 
\item In a C\+DN live stream, {\ttfamily url} in \mbox{\hyperlink{}{Agora Image}} refers to the address of the added watermark image in the C\+DN live streaming. 
\end{DoxyItemize}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 is cropped to conform to your settings. 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. If you set {\ttfamily orientation\+Mode} as Adaptive in the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33af5b77701edea3f565e05e2bd7e9d4}{set\+Video\+Encoder\+Configuration\} method, the watermark image rotates with the video frame around the upper left corner of the watermark 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/2]}}
{\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 to replace \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a68b9c77f4879d0c3a9c23b608fb34f0b}{add\+Video\+Watermark}}1.
\end{DoxySince}
This method adds a P\+NG watermark image to the local video stream in a live streaming. Once the watermark image is added, all the audience in the channel (C\+DN audience included), and the sampling device can see and capture it.

Agora supports adding only one watermark image onto the local video, and the newly watermark image replaces the previous one.

The watermark position depends on the settings in the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a33af5b77701edea3f565e05e2bd7e9d4}{set\+Video\+Encoder\+Configuration\} method\+:If the orientation mode of the encoding video is 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 the landscape mode in O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+D\+E\+\_\+\+A\+D\+A\+P\+T\+I\+VE, the watermark uses the landscape orientation.If the orientation mode of the encoding video is 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, or the portrait mode in O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+M\+O\+D\+E\+\_\+\+A\+D\+A\+P\+T\+I\+VE, the watermark uses the portrait orientation.When setting the watermark position, the region must be less than the dimensions set in the set\+Video\+Encoder\+Configuration method. Otherwise, the watermark image will be cropped. Ensure that you have called the  Rtc\+Engine\#enable\+Video enable\+Video\} method to enable the video module before calling this method.If you only want to add a watermark image to the local video for the audience in the C\+DN live streaming channel to see and capture, you can call this method or the \{ Rtc\+Engine\#set\+Live\+Transcoding set\+Live\+Transcoding\} method.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.If the dimensions the P\+NG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.If you have enabled the local video preview by calling the  Rtc\+Engine\#start\+Preview start\+Preview\} method, you can use the {\ttfamily visible\+In\+Preview} member in the {\ttfamily Watermark\+Options} class to set whether or not the watermark is visible in preview.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.  watermark\+Url The local file path of the watermark image to be added. This method supports adding a watermark image from either the local file path or the assets file path. If you use the assets file path, you need to start with {\ttfamily /assets/} when filling in this parameter.  options The options of the watermark image to be added. See \{ io.\+agora.\+rtc.\+video.\+Watermark\+Options Watermark Options\}. 0\+: Success.$<$ 0\+: Failure. }}\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 added by \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a93cead22d8e71234dce89d55655bac90}{add\+Video\+Watermark\}. 0\+: Success.$<$ 0\+: Failure. }}\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_a7a17a38a6ec5a9ef0f8de3304d18e10b}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7a17a38a6ec5a9ef0f8de3304d18e10b}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!setLocalPublishFallbackOption@{setLocalPublishFallbackOption}}
\index{setLocalPublishFallbackOption@{setLocalPublishFallbackOption}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalPublishFallbackOption()}{setLocalPublishFallbackOption()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+set\+Local\+Publish\+Fallback\+Option (\begin{DoxyParamCaption}\item[{Constants.\+Stream\+Fallback\+Options}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

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

If {\ttfamily option} is set as \mbox{\hyperlink{}{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\+L\+Y(2)}}, the S\+DK will\+: 
\begin{DoxyItemize}
\item Disable the upstream video but enable audio only when the network conditions deteriorate and cannot support both video and audio. 
\item Re-\/enable the video when the network conditions improve. 
\end{DoxyItemize}When the locally published video stream falls back to audio only or when the audio-\/only stream switches back to the video, the S\+DK triggers the \{\mbox{\hyperlink{}{on\+Local\+Publish\+Fallback\+To\+Audio\+Only\}. Ensure that you call this method before joining a channel.  option The fallback option for the locally published video stream\+: io.\+agora.\+rtc.\+Constants\#\+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 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\+E\+D(0)\}\+: (Default) No fallback behavior for the locally published video stream when the uplink network condition is poor. The stream quality is not guaranteed. io.\+agora.\+rtc.\+Constants\#\+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 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\+L\+Y(2)\}\+: The locally published video stream falls back to audio only when the uplink network condition is poor.  Agora does not recommend using this method for C\+DN live streaming, because the remote C\+DN live user will have a noticeable lag when the locally published video stream falls back to audio only. 0\+: Success.$<$ 0\+: Failure. }}\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()}}
{\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 remotely subscribed video stream based on the network conditions.

If {\ttfamily option} is set as \mbox{\hyperlink{}{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\+L\+Y(2)}}, the S\+DK automatically switches the video from a high-\/stream to a low-\/stream, or disables the video when the downlink network condition cannot support both audio and video to guarantee the quality of the audio. The S\+DK monitors the network quality and restores the video stream when the network conditions improve. When the remotely subscribed video stream falls back to audio only, or the audio-\/only stream switches back to the video, the S\+DK triggers the \{\mbox{\hyperlink{}{on\+Remote\+Subscribe\+Fallback\+To\+Audio\+Only\} callback. Ensure that you call this method before joining a channel.  option The fallback option for the remotely subscribed video stream\+: io.\+agora.\+rtc.\+Constants\#\+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 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\+E\+D(0)\}\+: No fallback behavior for the remotely subscribed video stream when the downlink network condition is poor. The quality of the video stream is not guaranteed. io.\+agora.\+rtc.\+Constants\#\+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 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\+O\+W(1)\}\+: (Default) The remotely subscribed video stream falls back to the low-\/stream video when the downlink network condition worsens. This option works only for this method and not for the \{ io.\+agora.\+rtc.\+Rtc\+Engine\#set\+Local\+Publish\+Fallback\+Option(int) set\+Local\+Publish\+Fallback\+Option\} method. io.\+agora.\+rtc.\+Constants\#\+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 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\+L\+Y(2)\}\+: Under poor downlink network conditions, the remotely subscribed video stream first falls back to the low-\/stream video; and then to an audio-\/only stream if the network condition worsens. 0\+: Success.$<$ 0\+: Failure. }}\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 the dual video stream mode.

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


If dual-\/stream mode is enabled, the subscriber can choose to receive the high-\/stream (high-\/resolution high-\/bitrate video stream) or low-\/stream (low-\/resolution low-\/bitrate video stream) video using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em enabled} & 
\begin{DoxyItemize}
\item true\+: Enable the dual-\/stream mode.
\item false\+: (default) Disable the dual-\/stream mode. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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]}}

Enables or disables the dual video stream mode.

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


If dual-\/stream mode is enabled, the subscriber can choose to receive the high-\/stream (high-\/resolution high-\/bitrate video stream) or low-\/stream (low-\/resolution low-\/bitrate video stream) video using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em enabled} & 
\begin{DoxyItemize}
\item true\+: Enable the dual-\/stream mode.
\item false\+: (default) Disable the dual-\/stream mode. 
\end{DoxyItemize}\\
\hline
{\em stream\+Config} & 
\begin{DoxyItemize}
\item The minor stream config 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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]}}

Enables, disables or auto enable the dual video stream mode.

If dual-\/stream mode is enabled, the subscriber can choose to receive the high-\/stream (high-\/resolution high-\/bitrate video stream) or low-\/stream (low-\/resolution low-\/bitrate video stream) video using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em mode} & 
\begin{DoxyItemize}
\item The dual-\/stream mode 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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]}}

Enables, disables or auto enable the dual video stream mode.

If dual-\/stream mode is enabled, the subscriber can choose to receive the high-\/stream (high-\/resolution high-\/bitrate video stream) or low-\/stream (low-\/resolution low-\/bitrate video stream) video using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em mode} & 
\begin{DoxyItemize}
\item The dual-\/stream mode 
\end{DoxyItemize}\\
\hline
{\em stream\+Config} & 
\begin{DoxyItemize}
\item The minor stream config 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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 multi-\/layer video stream configuration.

If multi-\/layer is configured, the subscriber can choose to receive the coresponding layer of video stream using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a7ed9df6f7f9ba8af556bc1e5f0e1decc}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em simulcast\+Config} & 
\begin{DoxyItemize}
\item The configuration for multi-\/layer video stream. It includes seven layers, ranging from S\+T\+R\+E\+A\+M\+\_\+\+L\+A\+Y\+E\+R\+\_\+1 to S\+T\+R\+E\+A\+M\+\_\+\+L\+OW. A maximum of 3 layers can be enabled simultaneously. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. @technical preview 
\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 target frames per second (F\+PS) for the local render target.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & The type of video source. \\
\hline
{\em target\+Fps} & The target frames per second to be set for the local render target. \\
\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 target frames per second (F\+PS) for the remote render target.


\begin{DoxyParams}{Parameters}
{\em target\+Fps} & The target frames per second to be set for the remote render target. \\
\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()}}
{\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 remote video stream type.

If the remote user has enabled the dual-\/stream mode, by default the S\+DK receives the high-\/stream video by Call this method to switch to the low-\/stream video.

\begin{DoxyNote}{Note}
This method applies to scenarios where the remote user has enabled the dual-\/stream mode using \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_ab409b3e574bee1ee8187bf2540236b66}{enable\+Dual\+Stream\+Mode}}(true) before joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & ID of the remote user sending the video stream. \\
\hline
{\em stream\+Type} & Sets the video stream type\+:
\begin{DoxyItemize}
\item 0\+: High-\/stream video.
\item 1\+: Low-\/stream video.
\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()}}
{\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 stream type of the remote video if the remote user has enabled dual-\/stream.


\begin{DoxyParams}{Parameters}
{\em stream\+Type} & Sets the default video stream type\+:
\begin{DoxyItemize}
\item 0\+: High-\/stream video.
\item 1\+: Low-\/stream video.
\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 subscribe remote stream audio.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users who do not subscribe to audio.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
If uid is in uid\+List, the remote user\textquotesingle{}s audio will not be subscribed, even if mute\+Remote\+Audio\+Stream(uid, false) and mute\+All\+Remote\+Audio\+Streams(false) are operated.
\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_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 subscribe remote stream audio.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users who do subscribe to audio.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
If uid is in uid\+List, the remote user\textquotesingle{}s audio will be subscribed, even if mute\+Remote\+Audio\+Stream(uid, true) and mute\+All\+Remote\+Audio\+Streams(true) are operated.
\end{DoxyNote}
If a user is in the blocklist and allowlist at the same time, the user will not subscribe to audio.

\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 subscribe remote stream video.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users who do not subscribe to video.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
If uid is in uid\+List, the remote user\textquotesingle{}s video will not be subscribed, even if mute\+Remote\+Video\+Stream(uid, false) and mute\+All\+Remote\+Video\+Streams(false) are operated.
\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_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 whitelist of subscribe remote stream video.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users who do subscribe to video.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
If uid is in uid\+List, the remote user\textquotesingle{}s video will be subscribed, even if mute\+Remote\+Video\+Stream(uid, true) and mute\+All\+Remote\+Video\+Streams(true) are operated.
\end{DoxyNote}
If a user is in the blacklist and whitelist at the same time, the user will not subscribe to video.

\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/\+Disables the built-\/in encryption.

In scenarios requiring high security, Agora recommends calling {\ttfamily enable\+Encryption} to enable the built-\/in encryption before joining a channel.

All users in the same channel must use the same encryption mode and encryption key. Once all users leave the channel, the encryption key of this channel is automatically cleared.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item If you enable the built-\/in encryption, you cannot use the R\+T\+MP streaming function. 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable the built-\/in encryption.
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the built-\/in encryption.
\item {\ttfamily false}\+: Disable the built-\/in encryption. 
\end{DoxyItemize}\\
\hline
{\em config} & Configurations of built-\/in encryption schemas. See \{\mbox{\hyperlink{}{Encryption\+Config\}. 0\+: Success.$<$ 0\+: Failure.-\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: An invalid parameter is used. Set the parameter with a valid value.-\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+E\+D\+: The S\+DK is not initialized. Initialize the I\+Rtc\+Engine instance before calling this method.-\/4(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED)\+: The encryption mode is incorrect or the S\+DK fails to load the external encryption library. Check the enumeration or reload the external encryption library. }}\\
\hline
\end{DoxyParams}
\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]}}

Publishes the local stream without transcoding to a specified C\+DN live R\+T\+MP address. (C\+DN live only.)

The S\+DK returns the result of this method call in the on\+Stream\+Published callback.

The start\+Rtmp\+Stream\+Without\+Transcoding method call triggers the on\+Rtmp\+Streaming\+State\+Changed callback on the local client to report the state of adding a local stream to the C\+DN. \begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that the user joins the channel before calling this method.
\item This method adds only one stream R\+T\+MP U\+RL address each time it is called.
\item The R\+T\+MP U\+RL address must not contain special characters, such as Chinese language characters.
\item This method applies to Live Broadcast only.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em url} & The C\+DN streaming U\+RL in the R\+T\+MP format. The maximum length of this parameter is 1024 bytes.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT (2)\+: The R\+T\+MP U\+RL address is N\+U\+LL or has a string length of 0.
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream.
\item \#\+E\+R\+R\+\_\+\+A\+L\+R\+E\+A\+D\+Y\+\_\+\+I\+N\+\_\+\+U\+SE (19)\+: This streaming U\+RL is already in use. Use a new streaming U\+RL for C\+DN streaming. 
\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]}}

Publishes the local stream with transcoding to a specified C\+DN live R\+T\+MP address. (C\+DN live only.)

The S\+DK returns the result of this method call in the on\+Stream\+Published callback.

The start\+Rtmp\+Stream\+With\+Transcoding method call triggers the on\+Rtmp\+Streaming\+State\+Changed callback on the local client to report the state of adding a local stream to the C\+DN. \begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that the user joins the channel before calling this method.
\item This method adds only one stream R\+T\+MP U\+RL address each time it is called.
\item The R\+T\+MP U\+RL address must not contain special characters, such as Chinese language characters.
\item This method applies to Live Broadcast only.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em url} & The C\+DN streaming U\+RL in the R\+T\+MP format. The maximum length of this parameter is 1024 bytes. \\
\hline
{\em transcoding\+Enabled} & Sets whether transcoding is enabled/disabled\+:
\begin{DoxyItemize}
\item true\+: Enable transcoding. To \href{https://docs.agora.io/en/Agora\%20Platform/terms?platform=All\%20Platforms\#transcoding}{\texttt{ transcode}} the audio or video streams when publishing them to C\+DN live, often used for combining the audio and video streams of multiple hosts in C\+DN live.
\item false\+: Disable transcoding.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item \#\+E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT (2)\+: The R\+T\+MP U\+RL address is N\+U\+LL or has a string length of 0.
\item \#\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: You have not initialized the R\+TC engine when publishing the stream.
\item \#\+E\+R\+R\+\_\+\+A\+L\+R\+E\+A\+D\+Y\+\_\+\+I\+N\+\_\+\+U\+SE (19)\+: This streaming U\+RL is already in use. Use a new streaming U\+RL for C\+DN streaming. 
\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]}}

Update the video layout and audio settings for C\+DN live. (C\+DN live only.) \begin{DoxyNote}{Note}
This method applies to Live Broadcast only.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em transcoding} & Sets the C\+DN live audio/video transcoding settings. See 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]}}

Stop an R\+T\+MP stream with transcoding or without transcoding from the C\+DN. (C\+DN live only.)

This method removes the R\+T\+MP U\+RL address (added by the start\+Rtmp\+Stream\+Without\+Transcoding method or I\+Rtc\+Engine\+::start\+Rtmp\+Stream\+With\+Transcoding \char`\"{}start\+Rtmp\+Stream\+With\+Transcoding\char`\"{} method) from a C\+DN live stream. The S\+DK returns the result of this method call in the on\+Stream\+Unpublished callback.

The stop\+Rtmp\+Stream method call triggers the on\+Rtmp\+Streaming\+State\+Changed callback on the local client to report the state of removing an R\+T\+MP stream from the C\+DN. \begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method removes only one R\+T\+MP U\+RL address each time it is called.
\item The R\+T\+MP U\+RL address must not contain special characters, such as Chinese language characters.
\item This method applies to Live Broadcast only.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em url} & The R\+T\+MP U\+RL address to be removed. The maximum length of this parameter is 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_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.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you set the same value for {\ttfamily reliable} and {\ttfamily ordered}.
\item Each user can only create a maximum of 5 data streams during an \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}} lifecycle.
\item The data channel allows a data delay of up to 5 seconds. If the receiver does not receive the data stream within 5 seconds, the data channel reports an error.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em reliable} & Sets whether the recipients are guaranteed to receive the data stream from the sender within five seconds\+:
\begin{DoxyItemize}
\item true\+: The recipients receive the data stream from the sender within five seconds. If the recipient does not receive the data stream within five seconds, an error is reported to the application.
\item 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. 
\end{DoxyItemize}\\
\hline
{\em ordered} & Sets whether the recipients receive the data stream in the sent order\+:
\begin{DoxyItemize}
\item true\+: The recipients receive the data stream in the sent order.
\item false\+: The recipients do not receive the data stream in the sent order. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the stream ID, if the method call is successful.
\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.

Each user can create up to five data streams during the lifecycle of the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}.


\begin{DoxyParams}{Parameters}
{\em config} & The config of data stream.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the stream ID, if the method call is successful.
\item $<$ 0\+: Failure. The error code is related to the integer displayed in \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a6944f0b187993f39cf1235cf3bbed949}{Error Codes\}. For example, if it returns -\/2, then it indicates  Constants\#\+E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT(-\/2)\} in \{ I\+Rtc\+Engine\+Event\+Handler\#on\+Error(int) Error Codes\}. }}
\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 a data stream.

After calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a39490ffa0d4312521e6b81c10e9ae03c}{~create\+Data\+Stream}}, you can call this method to send a data stream to all users in the channel.

The S\+DK has the following restrictions on this method\+:
\begin{DoxyItemize}
\item Up to 60 packets can be sent per second in a channel with each packet having a maximum size of 1 KB.
\item Each client can send up to 30 KB of data per second.
\item Each user can have up to five data streams simultaneously.
\end{DoxyItemize}

After the remote user receives the data stream within 5 seconds, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a6f827b82ff6ed61e855bf6315aa4395c}{on\+Stream\+Message\} callback on the remote client. After the remote user does not receive the data stream within 5 seconds, the S\+DK triggers the \{ I\+Rtc\+Engine\+Event\+Handler\#on\+Stream\+Message\+Error() on\+Stream\+Message\+Error\} callback. Call this method after calling  Rtc\+Engine\#create\+Data\+Stream()~create\+Data\+Stream\}.This method applies only to the {\ttfamily C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON} profile or to the hosts in the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile. If an audience in the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile calls this method, the audience may be switched to a host.  stream\+Id ID of the sent data stream returned by the \{ Rtc\+Engine\#create\+Data\+Stream(boolean reliable, boolean ordered) create\+Data\+Stream\} method.  message Sent data. 0\+: Success.$<$ 0\+: Failure. }}\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.

Use this method before calling the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a316bdab24f10e892955571788bbaccc2}{start\+Preview}} method, or the mirror mode does not take effect until you call the {\ttfamily start\+Preview} method again. 
\begin{DoxyParams}{Parameters}
{\em mode} & Sets the local video mirror mode\+:
\begin{DoxyItemize}
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+A\+U\+T\+O(0)}\+: (Default) The mirror mode determined by the S\+DK. If you use the front camera, the S\+DK enables the mirror mode; if you use the rear camera, the S\+DK disables the mirror mode.
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+E\+N\+A\+B\+L\+E\+D(1)}\+: Enable the mirror mode.
\item {\ttfamily V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+D\+I\+S\+A\+B\+L\+E\+D(2)}\+: Disable the mirror 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_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__deprecated000037}{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.

\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 to appoint camera\+Id

\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 camera zoom function is supported.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The camera zoom function is supported.
\item false\+: The camera zoom function is not supported. 
\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 camera flash function is supported.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The camera flash function is supported.
\item false\+: The camera flash function is not supported. 
\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]}}

Checks whether the camera manual focus function is supported.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The camera manual focus function is supported.
\item false\+: The camera manual focus function is not supported. 
\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 camera exposure function is supported.

Ensure that you call this method after the camera starts, for example, by calling {\ttfamily start\+Preview} or {\ttfamily join\+Channel}.

\begin{DoxySince}{Since}
v2.\+3.\+2. 
\end{DoxySince}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The device supports the camera exposure function. 
\item false\+: The device does not support the camera exposure function. 
\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 camera auto focus function is supported.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The camera auto focus function is supported.
\item false\+: The camera auto focus function is not supported. 
\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 camera face detect function is supported.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The camera face detect is supported.
\item false\+: The camera face detect is not supported. 
\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]}}

Checks whether camera supports to set exposure value.

Ensure that you call this method after the camera starts, for example, by calling {\ttfamily start\+Preview} or {\ttfamily join\+Channel}.

\begin{DoxySince}{Since}
v4.\+2.\+2 
\end{DoxySince}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: The device supports the camera exposure function.
\item false\+: The device does not support the camera exposure function. 
\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 ratio.


\begin{DoxyParams}{Parameters}
{\em factor} & The camera zoom factor. It ranges from 1.\+0 to the maximum zoom supported by the camera. \\
\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_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{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 manual focus position.


\begin{DoxyParams}{Parameters}
{\em positionX} & The horizontal coordinate of the touch point in the view. \\
\hline
{\em positionY} & The vertical coordinate of the touch point 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.

Ensure that you call this method after the camera starts, for example, by calling {\ttfamily start\+Preview} or {\ttfamily join\+Channel}.

A successful set\+Camera\+Exposure\+Position method call triggers the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_abb9832896d40cee749866375c84e753b}{on\+Camera\+Exposure\+Area\+Changed}} callback on the local client. \begin{DoxySince}{Since}
v2.\+3.\+2. 
\end{DoxySince}

\begin{DoxyParams}{Parameters}
{\em position\+Xin\+View} & The horizontal coordinate of the touch point in the view. \\
\hline
{\em position\+Yin\+View} & The vertical coordinate of the touch point 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 the camera face detect.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the camera face detect.
\begin{DoxyItemize}
\item true\+: Enable the face detect.
\item false\+: Do not enable the face detect. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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{DoxyParams}{Parameters}
{\em is\+On} & Determines whether to enable the camera flash.
\begin{DoxyItemize}
\item true\+: Enable the flash.
\item false\+: Do not enable the flash. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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 focus face function.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable the camera auto focus face mode.
\begin{DoxyItemize}
\item true\+: Enable the auto focus face function.
\item false\+: Do not enable the auto focus face function. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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 ratio. \begin{DoxySince}{Since}
v4.\+2.\+2 
\end{DoxySince}
\begin{DoxyNote}{Note}
In a general way，range must follow below requirements \mbox{[}-\/20, 20\mbox{]}. but for low machines, the range of support is smaller, or not supported.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em factor} & exposure\+Factor the recommended camera exposure factor ranging from -\/20 to 20 Absolute EV bias will set to camera. \\
\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_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]}}

Gets the current call ID.

When a user joins a channel on a client, a {\ttfamily call\+Id} is generated to identify the call.

After a call ends, you can call {\ttfamily rate} or {\ttfamily complain} to gather feedback from the customer. These methods require a {\ttfamily call\+Id} parameter. To use these feedback methods, call the this method first to retrieve the {\ttfamily call\+Id} during the call, and then pass the value as an argument in the {\ttfamily rate} or {\ttfamily complain} method after the call ends.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The call ID if the method call is successful.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\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 the call.

It is usually called after the call ends.


\begin{DoxyParams}{Parameters}
{\em call\+Id} & The call ID retrieved from the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a8878aa59bdf6e8f328ebadf32ec40273}{get\+Call\+Id}} method. \\
\hline
{\em rating} & The rating of the call between 1 (the lowest score) to 5 (the highest score). \\
\hline
{\em description} & (Optional) The description of the rating. The string length must be less than 800 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_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.

This method is usually called after the call ends.


\begin{DoxyParams}{Parameters}
{\em call\+Id} & The call ID retrieved from the {\ttfamily get\+Call\+Id} method. \\
\hline
{\em description} & (Optional) The description of the complaint. The string length must be less than 800 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_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 version of the current S\+DK in the string format. 
\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]}}

Specifies an S\+DK output log file.

The log file records all log data for the S\+D\+K’s operation. Ensure that the directory for the log file exists and is writable.

\begin{DoxyNote}{Note}
Ensure that you call this method immediately after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a30d9a5c1a0e0500e8f5b94c2063450d5}{create}}, or the output log may not be complete.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & File path of the log file. The string of the log file is 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 output log filter level of the S\+DK.

You can use one or a combination of the filters. The log level follows the sequence of {\ttfamily O\+FF}, {\ttfamily C\+R\+I\+T\+I\+C\+AL}, {\ttfamily E\+R\+R\+OR}, {\ttfamily W\+A\+R\+N\+I\+NG}, {\ttfamily I\+N\+FO}, and {\ttfamily D\+E\+B\+UG}. Choose a level and you will see logs preceding that level. For example, if you set the log level to {\ttfamily W\+A\+R\+N\+I\+NG}, you see the logs within levels {\ttfamily C\+R\+I\+T\+I\+C\+AL}, {\ttfamily E\+R\+R\+OR}, and {\ttfamily W\+A\+R\+N\+I\+NG}.


\begin{DoxyParams}{Parameters}
{\em filter} & Sets the log filter level\+:
\begin{DoxyItemize}
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+D\+E\+B\+U\+G(0x80f)}\+: Output all A\+PI logs. Set your log filter as D\+E\+B\+UG if you want to get the most complete log file.
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+I\+N\+F\+O(0x0f)}\+: Output logs of the C\+R\+I\+T\+I\+C\+AL, E\+R\+R\+OR, W\+A\+R\+N\+I\+NG, and I\+N\+FO level. We recommend setting your log filter as this level.
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+W\+A\+R\+N\+I\+N\+G(0x0e)}\+: Output logs of the C\+R\+I\+T\+I\+C\+AL, E\+R\+R\+OR, and W\+A\+R\+N\+I\+NG level.
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+E\+R\+R\+O\+R(0x0c)}\+: Output logs of the C\+R\+I\+T\+I\+C\+AL and E\+R\+R\+OR level.
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+C\+R\+I\+T\+I\+C\+A\+L(0x08)}\+: Output logs of the C\+R\+I\+T\+I\+C\+AL level.
\item {\ttfamily L\+O\+G\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+O\+F\+F(0)}\+: Do not output any log.
\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.

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_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 (KB).

The S\+DK has two log files, each with a default size of 512 KB. If you set {\ttfamily file\+Size\+In\+Bytes} as 1024 KB, the S\+DK outputs log files with a total maximum size of 2 MB. If the total size of the log files exceed the set value, the new output log files overwrite the old output log files.


\begin{DoxyParams}{Parameters}
{\em file\+Size\+In\+K\+Bytes} & The S\+DK log file size (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]}}

Returns the native handler of the S\+DK Engine.

This interface is used to get native the C++ handler of the S\+DK engine that can be used in special scenarios, such as register the audio and video frame observer.

\begin{DoxyReturn}{Returns}

\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 the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}.


\begin{DoxyParams}{Parameters}
{\em handler} & The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} instance. \\
\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}} object.

For callback events that you only want to listen for once, call this method to remove subsequent \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} objects after you have received them. This interface is used to remove the specific \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} interface class instance. 
\begin{DoxyParams}{Parameters}
{\em handler} & The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} object. \\
\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__deprecated000038}{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 warning or error code. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The detailed warning or error description. 
\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 ability of screen sharing to support the minimum frame rate.

\begin{DoxySince}{Since}
v4.\+2.\+0
\end{DoxySince}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: support 15 fps, this device does not support hardcoding.
\item 1\+: support 30 fps, Usually low -\/ to mid-\/range devices.
\item 2\+: support 60 fps, Advanced devices.
\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__deprecated000039}{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.

The J\+S\+ON options are not public by default. Agora is working on making commonly used J\+S\+ON options public in a standard way.


\begin{DoxyParams}{Parameters}
{\em parameters} & Parameter to be set as a J\+S\+ON string in the specified format. \\
\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 \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 \{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer_a7c56f037df6e7076e32391b32e6e46cd}{get\+Max\+Metadata\+Size\} callback. Call this method before the {\ttfamily join\+Channel} method.This method applies to the Live Broadcast profile.  observer The I\+Metadata\+Observer class.  type The metadata type. Currently, the S\+DK supports \{ io.\+agora.\+rtc2.\+I\+Metadata\+Observer\#\+V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A(0)\} only. io.\+agora.\+rtc2.\+I\+Metadata\+Observer\#\+U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+T\+A\+D\+A\+TA U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+T\+A\+D\+A\+TA(-\/1)\}\+: the metadata type is unknown. io.\+agora.\+rtc2.\+I\+Metadata\+Observer\#\+V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A(0)\}\+: the metadata type is video. 0\+: Success.$<$ 0\+: Failure. }}\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 metadata observer.


\begin{DoxyParams}{Parameters}
{\em observer} & The \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer}{I\+Metadata\+Observer}} class. \\
\hline
{\em type} & The metadata type. Currently, the S\+DK supports \{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_metadata_observer_a4a063c708a21a1f4ec85f518c200a232}{V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A(0)\} only. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 or update to relay media streams across channels.

After a successful method call, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a3d4f978004d0666f26345810dcfe73ac}{on\+Channel\+Media\+Relay\+State\+Changed\} callback, and this callback return the state of the media stream relay.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\+N\+G(2)} and {\ttfamily R\+E\+L\+A\+Y\+\_\+\+O\+K(0)}, the S\+DK starts relaying media streams between the original and the destination channel.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\+R\+E(3)}, an exception occurs during the media stream relay. Contact \href{mailto:sales-us@agora.io}{\texttt{ sales-\/us@agora.\+io}} before implementing this function.We do not support string user accounts in this A\+PI.Call this method after the {\ttfamily join\+Channel} method.This method takes effect only when you are a broadcaster in a Live-\/broadcast channel.  v4.\+2.\+0  channel\+Media\+Relay\+Configuration The configuration of the media stream relay. See \{ io.\+agora.\+rtc2.\+video.\+Channel\+Media\+Relay\+Configuration Channel\+Media\+Relay\+Configuration\}. 0\+: Success.$<$ 0\+: Failure.-\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: A general error occurs (no specified reason).-\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The argument is invalid.-\/5(E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED)\+: The request is rejected.-\/8(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+T\+A\+TE)\+: The current status is invalid, only allowed to be called when the role is the broadcaster. }}\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 broadcaster quits all the destination channels. After a successful method call, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a3d4f978004d0666f26345810dcfe73ac}{on\+Channel\+Media\+Relay\+State\+Changed\} callback. If the callback returns {\ttfamily R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+I\+D\+L\+E(0)} and {\ttfamily R\+E\+L\+A\+Y\+\_\+\+O\+K(0)}, the broadcaster successfully stops the relay.  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\+S\+E(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\+S\+T(8)} state code. You can leave the channel by calling the  leave\+Channel() leave\+Channel\} method, and the media stream relay automatically stops. 0\+: Success.$<$ 0\+: Failure.-\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: A general error occurs (no specified reason).-\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The argument is invalid.-\/5(E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED)\+: The request is rejected.-\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: cross channel media streams are not relayed. }}\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]}}

pause the channels for media stream relay. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: A general error occurs (no specified reason).
\item -\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The argument is invalid.
\item -\/5(E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED)\+: The request is rejected.
\item -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: cross channel media streams are not relayed. 
\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]}}

resume the channels for media stream relay. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/1(E\+R\+R\+\_\+\+F\+A\+I\+L\+ED)\+: A general error occurs (no specified reason).
\item -\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The argument is invalid.
\item -\/5(E\+R\+R\+\_\+\+R\+E\+F\+U\+S\+ED)\+: The request is rejected.
\item -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: cross channel media streams are not relayed. 
\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\+: \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. 
\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]}}

Mute or resume recording signal volume.


\begin{DoxyParams}{Parameters}
{\em muted} & Determines whether to mute or resume the recording signal volume.
\begin{DoxyItemize}
\item true\+: Mute the recording signal volume.
\item false\+: (Default) Resume the recording signal volume.
\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()}}
{\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 audio playback format before mixing for the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1_i_audio_frame_observer_a428eb1b05c51feb2be1488d677ec8498}{on\+Playback\+Audio\+Frame\+Before\+Mixing}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate ({\ttfamily samples\+Per\+Sec}) returned in the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback, which can be set as 8000, 16000, 32000, 44100, or 48000 Hz. \\
\hline
{\em channel} & Number of channels of the audio data returned in {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing}, which can be set 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}
\begin{DoxyNote}{Note}
The S\+DK calculates the sample interval according to the value of the {\ttfamily sample\+Rate} and {\ttfamily channel} parameters you set in this method. Ensure that the value of sample interval $>$= 0.\+01. The S\+DK triggers the {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing} callback according to the sample interval. 
\end{DoxyNote}
\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]}}

Enable the audio spectrum monitor.


\begin{DoxyParams}{Parameters}
{\em interval\+In\+MS} & Sets the time interval(ms) between two consecutive audio spectrum callback. The default value is 100. This param should be larger than 10.\\
\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_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]}}

Disalbe the audio spectrum monitor.

\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.

You need to implement the {\ttfamily I\+Audio\+Spectrum\+Observer} class in this method, and register the following callbacks according to your scenario\+:
\begin{DoxyItemize}
\item on\+Audio\+Spectrum\+Computed\+: Occurs when the S\+DK receives the audio data and at set intervals.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em observer} & A pointer to the audio spectrum observer\+: 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]}}

Releases the audio spectrum observer.


\begin{DoxyParams}{Parameters}
{\em observer} & The pointer to the audio spectrum observer\+: 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]}}

Gets the volume of the audio effects.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the volume of audio effects, if the method call is successful. The value ranges between 0.\+0 and 100.\+0 (original volume).
\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 audio effects.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of audio effects. The value ranges between 0.\+0 and 100.\+0 (default). \\
\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.

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.
\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 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_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.
\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 a specified audio effect.

After calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}}, you can call this method to play the specified audio effect for all users in the channel.

This method plays only one specified audio effect each time it is called. To play multiple audio effects, call this method multiple times.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Agora recommends playing no more than three audio effects at the same time.
\item The ID and file path of the audio effect in this method must be the same as that in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}} method.
\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 of the online audio effect file. Supported audio formats\+: mp3, mp4, m4a, aac, 3gp, mkv and wav. \\
\hline
{\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 \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}{stop\+Effect\} or  Rtc\+Engine\#stop\+All\+Effects() stop\+All\+Effects\}.{\ttfamily 0}\+: Play the audio effect once.{\ttfamily 1}\+: Play the audio effect twice.  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.  pan The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:{\ttfamily -\/1.\+0}\+: The audio effect shows on the left.{\ttfamily 0.\+0}\+: The audio effect shows ahead.{\ttfamily 1.\+0}\+: The audio effect shows on the right.  gain The volume of the audio effect. The value ranges between 0.\+0 and 100.\+0. The default value is 100 (original volume). The lower the value, the lower the volume of the audio effect.  publish Sets whether to publish the specified audio effect to the remote stream\+:True\+: Publish the audio effect to the remote.False\+: false\+: Do not publish the audio effect to the remote. 0\+: Success.$<$ 0\+: Failure. }}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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 a specified audio effect.

After calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}}, you can call this method to play the specified audio effect for all users in the channel.

This method plays only one specified audio effect each time it is called. To play multiple audio effects, call this method multiple times.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Agora recommends playing no more than three audio effects at the same time.
\item The ID and file path of the audio effect in this method must be the same as that in the \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{preload\+Effect}} method.
\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 of the online audio effect file. Supported audio formats\+: mp3, mp4, m4a, aac, 3gp, mkv and wav. \\
\hline
{\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 \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}{stop\+Effect\} or  Rtc\+Engine\#stop\+All\+Effects() stop\+All\+Effects\}.{\ttfamily 0}\+: Play the audio effect once.{\ttfamily 1}\+: Play the audio effect twice.  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.  pan The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:{\ttfamily -\/1.\+0}\+: The audio effect shows on the left.{\ttfamily 0.\+0}\+: The audio effect shows ahead.{\ttfamily 1.\+0}\+: The audio effect shows on the right.  gain The volume of the audio effect. The value ranges between 0.\+0 and 100.\+0. The default value is 100 (original volume). The lower the value, the lower the volume of the audio effect.  publish Sets whether to publish the specified audio effect to the remote stream\+:True\+: Publish the audio effect to the remote.False\+: false\+: Do not publish the audio effect to the remote.  start\+Pos The start position 0\+: Success.$<$ 0\+: Failure. }}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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]}}

Plays all audio effects.

After calling \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abbe5abac7982c43a2333e7af804d387d}{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 \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a4835e9cae6ab8ee92d28384b034e27e5}{stop\+Effect\} or  Rtc\+Engine\#stop\+All\+Effects() stop\+All\+Effects\}.{\ttfamily 0}\+: Play the audio effect once.{\ttfamily 1}\+: Play the audio effect twice.  pitch The pitch of the audio effect. The value ranges between 0.\+5 and 2.\+0. The default value is {\ttfamily 1.\+0} (original pitch). The lower the value, the lower the pitch.  pan The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:{\ttfamily -\/1.\+0}\+: The audio effect shows on the left.{\ttfamily 0.\+0}\+: The audio effect shows ahead.{\ttfamily 1.\+0}\+: The audio effect shows on the right.  gain The volume of the audio effect. The value ranges between 0.\+0 and 100.\+0. The default value is {\ttfamily 100} (original volume). The lower the value, the lower the volume of the audio effect.  publish Sets whether to publish the specified audio effect to the remote stream\+:True\+: Publish the audio effect to the remote.False\+: Do not publish the audio effect to the remote. 0\+: Success.$<$ 0\+: Failure. }}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\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]}}

Get the volume of a specified sound effect.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item Returns the volume of the specified audio effect, if the method call is successful. The value ranges between 0.\+0 and 100.\+0 (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]}}

Sets the volume of the specified audio effect.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio effect. \\
\hline
{\em volume} & The volume of the specified audio effect. The value ranges between 0.\+0 and 100.\+0 (default). \\
\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 playing the specified audio effect.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio 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_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 playing 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 the specified audio effect.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio 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_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 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 the specified audio effect.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio 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_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.

\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 the specific preloaded audio effect from the memory.


\begin{DoxyParams}{Parameters}
{\em sound\+Id} & The ID of the audio 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_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]}}

Gets the duration of the audio effect file.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\item For the audio file formats supported by this method, see \href{https://docs.agora.io/en/faq/audio_format}{\texttt{ What formats of audio files does the Agora R\+TC S\+DK support}}.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & The file path of a local file, including the filename extensions. Agora supports using a U\+RI address, an absolute path, or a path that starts with /assets/. {\bfseries{Note}}\+: 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\+: \char`\"{}content\+://com.\+android.\+providers.\+media.\+documents/document/audio\%3\+A14441\char`\"{}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: A successful method call. Returns the total duration (ms) of the specified audio effect file.
\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} & Audio effect ID. Ensure that this parameter is set to the same value as in {\ttfamily play\+Effect}.\\
\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]}}

Gets the playback position of the audio effect file.

\begin{DoxyNote}{Note}
Call this method after {\ttfamily play\+Effect}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sound\+Id} & Audio effect ID. Ensure that this parameter is set to the same value as in {\ttfamily play\+Effect}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: A successful method call. Returns the playback position (ms) of the specified audio effect file.
\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.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you call this method before joining the channel.
\item If you register a receiver for encoded video data, you cannot register an I\+Video\+Frame\+Observer object.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em receiver} & The I\+Video\+Encoded\+Frame\+Observer object\+: \{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_encoded_frame_observer}{I\+Video\+Encoded\+Frame\+Observer\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 an face info observer object.

\begin{DoxyNote}{Note}
Ensure that you call this method before join\+Channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & A pointer to the face info observer object\+: I\+Face\+Info\+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_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.

The method is asynchronous, and the S\+DK has not taken the snapshot when the method call returns. After a successful method call, 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 Call this method after joining a channel.
\item This method takes a snapshot of the published video stream 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 Windows\+: {\ttfamily C\+:\textbackslash{}Users\textbackslash{}$<$user\+\_\+name$>$\textbackslash{}App\+Data\textbackslash{}Local\textbackslash{}Agora\textbackslash{}$<$process\+\_\+name$>$\textbackslash{}example.\+jpg}
\item i\+OS\+: {\ttfamily /\+App Sandbox/\+Library/\+Caches/example.\+jpg}
\item mac\+OS\+: {\ttfamily ～/\+Library/\+Logs/example.jpg}
\item Android\+: {\ttfamily /storage/emulated/0/\+Android/data/$<$package name$>$/files/example.jpg}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
Ensure that the path you specify exists and is writable. \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 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.

The method is asynchronous, and the S\+DK has not taken the snapshot when the method call returns. After a successful method call, 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 Call this method after joining a channel.
\item This method takes a snapshot of the published video stream 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 for the take snapshot. See Snapshot\+Config.\\
\hline
\end{DoxyParams}
Ensure that the path you specify exists and is writable. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0 \+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/4\+: Incorrect observation position. Modify the input observation position according to the reqiurements specified in Snapshot\+Config. 
\end{DoxyItemize}
\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. Normally, you should call this function immediately after initializing the engine. Once an extension is registered, the S\+DK will automatically create and add it to the pipeline.


\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 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}{\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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]}}

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
{\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}{\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 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
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
true, if get property success, otherwise false 
\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 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
\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_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 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 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}{\}.  J\+S\+ON formatted string of property\textquotesingle{}s value; return null if failed }}\\
\hline
\end{DoxyParams}
\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 provider property of an extension.


\begin{DoxyParams}{Parameters}
{\em provider} & The name of the extension provider, e.\+g. agora.\+io. \\
\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_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 sharing.

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
During screen sharing, make sure the user has granted screen capture permission to the application and the Android A\+PI level is not earlier than 21; otherwise, the S\+DK reports error codes \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_af0814cbea65fa2f4cece1c0b94db7fc3}{E\+R\+R\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+C\+A\+P\+T\+U\+R\+E\+\_\+\+P\+E\+R\+M\+I\+S\+S\+I\+O\+N\+\_\+\+D\+E\+N\+I\+E\+D(16)}} and \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a391b7241b8f5e30396337aa09ed116b1}{E\+R\+R\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(2)}}. To capture system audio during screen sharing, ensure that the Android A\+PI level is not earlier than 29 as well; otherwise, the S\+DK reports the error code \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_af1e60ae87c55b48983e0f6f6ba0c12ec}{E\+R\+R\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+A\+U\+D\+I\+O\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D(3)}}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel.
\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 permission ({\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 The billing of the screen sharing stream is based on the values of width and height in {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters}}}. When you do not pass in these value, Agora bills you at 1280 × 720; when you pass in these values, Agora bills you at those value. For details, see \href{https://docs.agora.io/en/Interactive\%20Broadcast/billing_rtc}{\texttt{ Pricing for Real-\/time Communication}}.
\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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em screen\+Capture\+Parameters} & The configuration of the screen sharing. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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]}}

Sets screen sharing using the Android native class Media\+Projection.

When screen scapture stopped, the S\+DK will automatically release the Media\+Projection internally.


\begin{DoxyParams}{Parameters}
{\em media\+Projection} & Media\+Projection is an Android class that provides access to screen capture and recording capabiliies.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
Additional Media\+Projection is primarily used for specific scenarios, such as I\+OT custom devices or subprocess screen sharing.
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. @technical preview 
\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, 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{DoxyParams}{Parameters}
{\em screen\+Scenario} & The screen sharing scenario. See \#\+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 sharing.

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
After calling this method to stop screen sharing

\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]}}

You can call this method to set the expected video scenario. The S\+DK will optimize the video experience for each scenario you set.


\begin{DoxyParams}{Parameters}
{\em scenario\+Type} & The video application scenario.\\
\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_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 sharing configuration.

\begin{DoxySince}{Since}
v3.\+7.\+0
\end{DoxySince}
\begin{DoxyNote}{Note}
Call this method after \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_abf71be90a0e958aee09558be1aa225aa}{start\+Screen\+Capture}}.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em screen\+Capture\+Parameters} & The configuration of the screen sharing. See \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_screen_capture_parameters}{Screen\+Capture\+Parameters\}. Note\+: This parameter is only available for scenarios where {\ttfamily capture\+Video} is {\ttfamily true}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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 video frame observer object.

You need to implement the \mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_frame_observer}{I\+Video\+Frame\+Observer}} class in this method, and register callbacks according to your scenarios.

After you successfully register the video frame observer, the S\+DK triggers the registered callbacks each time a video frame is received.

\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 the network condition deteriorates, 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} & Video frame observer object instance. See \{\mbox{\hyperlink{interfaceio_1_1agora_1_1rtc2_1_1video_1_1_i_video_frame_observer}{I\+Video\+Frame\+Observer\}. 0\+: Success.$<$ 0\+: Failure. }}\\
\hline
\end{DoxyParams}
\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]}}

Create a media player

You can use this function to create a ffmpeg or simple media player

\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{}{I\+Media\+Player}} 
\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]}}

Create a media recorder

You can use this function to create a media recorder


\begin{DoxyParams}{Parameters}
{\em info} & The \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_recorder_stream_info}{Recorder\+Stream\+Info}} object. It contains user ID and channel name of user.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}} 
\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]}}

Destroy a media player source instance. This method releases the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine}{Rtc\+Engine}}} object and all other resources used by the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}} object. After calling this method, if you want to enable the recording again, you must call \mbox{\hyperlink{}{get\+Media\+Recorder}} to get the {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}} object.


\begin{DoxyParams}{Parameters}
{\em media\+Recorder} & The Object of \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_agora_media_recorder}{Agora\+Media\+Recorder}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item $>$0\+: The id of media player source instance.
\item $<$ 0\+: Failure. 
\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]}}

get an Media\+Player\+Cache\+Manager instance, which is used to set and manage the player cache, implemented in the form of a singleton, independent of the player.

\begin{DoxyReturn}{Returns}
\mbox{\hyperlink{}{I\+Media\+Player}} 
\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]}}

Adjust the custom audio publish volume by source id. 
\begin{DoxyParams}{Parameters}
{\em track\+Id} & The custom audio track id. \\
\hline
{\em volume} & The volume, range is \mbox{[}0,100\mbox{]}\+: 0\+: mute, 100\+: 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]}}

Adjust the custom audio playout volume by source id. 
\begin{DoxyParams}{Parameters}
{\em track\+Id} & The custom audio track id. \\
\hline
{\em volume} & The volume, range is \mbox{[}0,100\mbox{]}\+: 0\+: mute, 100\+: 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 rhythm player.


\begin{DoxyParams}{Parameters}
{\em sound1} & The absolute path or U\+RL address (including the filename extensions) of the file for the downbeat. \\
\hline
{\em sound2} & The absolute path or U\+RL address (including the filename extensions) of the file for the upbeats. \\
\hline
{\em \{} & \\
\hline
\end{DoxyParams}
\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 rhythm player.

\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 rhythm player.


\begin{DoxyParams}{Parameters}
{\em \{} & \\
\hline
\end{DoxyParams}
\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]}}

Set audio parameters for direct streaming to C\+DN

Must call this api before \char`\"{}start\+Direct\+Cdn\+Streaming\char`\"{}


\begin{DoxyParams}{Parameters}
{\em profile} & Sets the sample rate, bitrate, encoding mode, and the number of channels\+: \#\+A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+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_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]}}

Set video parameters for direct streaming to C\+DN

Each configuration profile corresponds to a set of video parameters, including the resolution, frame rate, and bitrate.

\begin{DoxyNote}{Note}
Must call this api before \char`\"{}start\+Direct\+Cdn\+Streaming\char`\"{}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & The local video encoder configuration\+: 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_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]}}

Start direct cdn streaming


\begin{DoxyParams}{Parameters}
{\em event\+Handler} & A pointer to the direct cdn streaming event handler. \char`\"{}\+I\+Direct\+Cdn\+Streaming\+Event\+Handler\char`\"{}. \\
\hline
{\em publish\+Url} & The url of the cdn used to publish the stream. \\
\hline
{\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}}. This A\+PI must pass an audio-\/related option, and temporarily cannot pass more than one. For video-\/related options, you can either choose to not pass any, or only one.\\
\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]}}

Stop direct cdn streaming

\begin{DoxyNote}{Note}
This method is synchronous.
\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_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{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]}}

Get an custom 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_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]}}

destroy a created custom video track id


\begin{DoxyParams}{Parameters}
{\em video\+\_\+track\+\_\+id} & The video track id which was created by create\+Custom\+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_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 the Agora cloud proxy service.

When the user\textquotesingle{}s firewall restricts the IP address and port, refer to {\itshape Use Cloud Proxy} to add the specific IP addresses and ports to the firewall whitelist; then, call this method to enable the cloud proxy and set the {\ttfamily proxy\+Type} parameter as {\ttfamily T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+U\+D\+P\+\_\+\+P\+R\+O\+X\+Y(1)}, which is the cloud proxy for the U\+DP protocol.

After a successfully cloud proxy connection, the S\+DK triggers the \{\mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_acf3ab9feae0d9a6001da31e95363aa22}{on\+Connection\+State\+Changed\}{\ttfamily (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 {\ttfamily set\+Cloud\+Proxy(\+N\+O\+N\+E\+\_\+\+P\+R\+O\+X\+Y)}. To change the cloud proxy type that has been set, call {\ttfamily set\+Cloud\+Proxy(\+N\+O\+N\+E\+\_\+\+P\+R\+O\+X\+Y)} first, and then call {\ttfamily set\+Cloud\+Proxy}, and pass the value that you expect in {\ttfamily proxy\+Type}. Agora recommends that you call this method before joining the channel or after leaving the channel.For the S\+DK v3.\+3.\+x, the services for pushing streams to C\+DN and co-\/hosting across channels are not available when you use the cloud proxy for the U\+DP protocol. For the S\+DK v3.\+4.\+0 and later, the services for pushing streams to C\+DN and co-\/hosting across channels are not available when the user is in a network environment with a firewall and uses the cloud proxy for the U\+DP protocol.  proxy\+Type The cloud proxy type. This parameter is required, and the S\+DK reports an error if you do not pass in a value. The cloud proxy types include\+: Constants\#\+T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+O\+N\+E\+\_\+\+P\+R\+O\+XY T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+O\+N\+E\+\_\+\+P\+R\+O\+X\+Y(0)\} Constants\#\+T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+U\+D\+P\+\_\+\+P\+R\+O\+XY T\+R\+A\+N\+S\+P\+O\+R\+T\+\_\+\+T\+Y\+P\+E\+\_\+\+U\+D\+P\+\_\+\+P\+R\+O\+X\+Y(1)\} 0\+: Success.$<$ 0\+: Failure.{\ttfamily -\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)}\+: The parameter is invalid.{\ttfamily -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)}\+: The S\+DK is not initialized. }}\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]}}

set local access point addresses in local proxy mode, use this method before join channel. 
\begin{DoxyParams}{Parameters}
{\em config} & Configurations for local access point. For details, see \{\mbox{\hyperlink{}{Local\+Access\+Point\+Configuration\} }}\\
\hline
\end{DoxyParams}
\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 the external audio track.

\begin{DoxyNote}{Note}
Ensure that you call this method before joining the channel.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em track\+Id} & custom audio track id. \\
\hline
{\em enabled} & Enable/\+Disables the local playback of external audio track\+:
\begin{DoxyItemize}
\item true\+: Enable local playback
\item false\+: (Default) Do not enable local playback 
\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]}}

set advanced audio option


\begin{DoxyParams}{Parameters}
{\em options} & advanced audio option.\\
\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]}}

Bind local user and a remote user as an audio\&video sync group. The remote user is defined by cid and uid. There’s a usage limit that local user must be a video stream sender. On the receiver side, media streams from same sync group will be time-\/synced


\begin{DoxyParams}{Parameters}
{\em channel\+Id} & The channel id \\
\hline
{\em uid} & The user ID of the remote user to be bound with (local user)\\
\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_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]}}

Enable or disable video image source to replace the current video source published or resume it


\begin{DoxyParams}{Parameters}
{\em enabled} & true for enable, false for disable \\
\hline
{\em options} & options for image track \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fb7a5aa43a089dc850cef8dd3c04b20}\label{classio_1_1agora_1_1rtc2_1_1_rtc_engine_a1fb7a5aa43a089dc850cef8dd3c04b20}} 
\index{io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}!enableWirelessAccelerate@{enableWirelessAccelerate}}
\index{enableWirelessAccelerate@{enableWirelessAccelerate}!io.agora.rtc2.RtcEngine@{io.agora.rtc2.RtcEngine}}
\doxysubsubsection{\texorpdfstring{enableWirelessAccelerate()}{enableWirelessAccelerate()}}
{\footnotesize\ttfamily abstract int io.\+agora.\+rtc2.\+Rtc\+Engine.\+enable\+Wireless\+Accelerate (\begin{DoxyParamCaption}\item[{boolean}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [abstract]}}

Turn W\+I\+FI acceleration on or off.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method is called before and after joining a channel.
\item Users check the W\+I\+FI router app for information about acceleration. Therefore, if this interface is invoked, the caller accepts that the caller\textquotesingle{}s name will be displayed to the user in the W\+I\+FI router application on behalf of the caller.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & 
\begin{DoxyItemize}
\item true：\+Turn W\+I\+FI acceleration on.
\item false：\+Turn W\+I\+FI acceleration off.
\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_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]}}

Get network type

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+ED.
\item 1\+: L\+AN.
\item 2\+: W\+I\+FI.
\item 3\+: M\+O\+B\+I\+L\+E\+\_\+2G
\item 4\+: M\+O\+B\+I\+L\+E\+\_\+3G
\item 5\+: M\+O\+B\+I\+L\+E\+\_\+4G
\item 6\+: M\+O\+B\+I\+L\+E\+\_\+5G
\item -\/1\+: U\+N\+K\+N\+O\+WN 
\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]}}

Return current N\+T\+P(unix timestamp) time in milliseconds. \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]}}



Start tracing media rendering events. 

\begin{DoxySince}{Since}
v4.\+1.\+1 @discussion
\begin{DoxyItemize}
\item S\+DK will trace media rendering events when this A\+PI is called.
\item The tracing result can be obtained through callback {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_i_rtc_engine_event_handler_a33c557a7ed4542fc4561a9d570831073}{I\+Rtc\+Engine\+Event\+Handler.\+on\+Video\+Rendering\+Tracing\+Result}}} 
\end{DoxyItemize}
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item By default, S\+DK will trace media rendering events when {\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_rtc_engine_acd30d6bf3055ccd45d08b34c2e8ac467}{Rtc\+Engine.\+join\+Channel}}} is called.
\item The start point of event tracing will be reset after leaving channel. 
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: 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_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]}}



Enable instant media rendering. 

\begin{DoxySince}{Since}
v4.\+1.\+1 @discussion
\begin{DoxyItemize}
\item This method enable S\+DK to render video or playout audio faster. 
\end{DoxyItemize}
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Once enable this mode, we should destroy rtc engine to disable it.
\item Enable this mode, will sacrifice some part of experience. 
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: 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_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]}}



Whether the target feature is available for the device. 

\begin{DoxySince}{Since}
v4.\+3.\+0 
\end{DoxySince}

\begin{DoxyParams}{Parameters}
{\em type} & The feature type.
\begin{DoxyItemize}
\item \mbox{\hyperlink{classio_1_1agora_1_1rtc2_1_1_constants_a8fde8287388651586e14856e6712c507}{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\+N\+D(1)}}
\item \mbox{\hyperlink{}{F\+E\+A\+T\+U\+R\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+B\+E\+A\+U\+T\+Y\+\_\+\+E\+F\+F\+E\+C\+T(2)}} 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: available.
\item false\+: not available. 
\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}
