\hypertarget{classagora_1_1rtc_1_1_i_rtc_engine}{}\doxysection{agora\+::rtc\+::I\+Rtc\+Engine Class Reference}
\label{classagora_1_1rtc_1_1_i_rtc_engine}\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}


{\ttfamily \#include $<$I\+Agora\+Rtc\+Engine.\+h$>$}

Inheritance diagram for agora\+::rtc\+::I\+Rtc\+Engine\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=3.000000cm]{classagora_1_1rtc_1_1_i_rtc_engine}
\end{center}
\end{figure}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}{initialize}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_engine_context}{Rtc\+Engine\+Context}} \&context)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a72d3f2bd9d94e1013fbf777790ac1447}{query\+Interface}} (I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+I\+D\+\_\+\+T\+Y\+PE iid, void $\ast$$\ast$inter)=0
\item 
virtual const char $\ast$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa5605279f597cca69f77a062045675d6}{get\+Version}} (int $\ast$build)=0
\item 
virtual const char $\ast$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af567b0dd7a1a498319549139fdf13f32}{get\+Error\+Description}} (int code)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a32294dda5cf780cd010dc6f4966957f2}{query\+Codec\+Capability}} (\mbox{\hyperlink{structagora_1_1rtc_1_1_codec_cap_info}{Codec\+Cap\+Info}} $\ast$codec\+Info, int \&size)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a449e18c0f358915d93f33d84ba076aa3}{query\+Device\+Score}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a88bf62cbd6542535f352fd75e69d84fc}{preload\+Channel}} (const char $\ast$token, const char $\ast$channel\+Id, uid\+\_\+t uid)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8a1c886aa13e45a4a10902290b385f4a}{preload\+Channel\+With\+User\+Account}} (const char $\ast$token, const char $\ast$channel\+Id, const char $\ast$user\+Account)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af1191ff4fcea57616ffa1fee5fb12f29}{update\+Preload\+Channel\+Token}} (const char $\ast$token)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel}} (const char $\ast$token, const char $\ast$channel\+Id, const char $\ast$info, uid\+\_\+t uid)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3ea4eb99c644348bb88c91fb539873ae}{join\+Channel}} (const char $\ast$token, const char $\ast$channel\+Id, uid\+\_\+t uid, const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a42055d6697427736a267bf3ba04eb6cf}{update\+Channel\+Media\+Options}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{leave\+Channel}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad5c2ef631e3e4076f6aec96ed1152262}{leave\+Channel}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_leave_channel_options}{Leave\+Channel\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8f25b5ff97e2a070a69102e379295739}{renew\+Token}} (const char $\ast$token)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aab53788c74da25080bad61f0525d12ae}{set\+Channel\+Profile}} (C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE profile)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a89ca6a15d5a388f3c82038e74bad4040}{set\+Client\+Role}} (C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE role)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7f01b7bbf512a041afa99ec7ecfa11c4}{set\+Client\+Role}} (C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE role, const \mbox{\hyperlink{structagora_1_1rtc_1_1_client_role_options}{Client\+Role\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a394c60056c0cd31af48e8015b0c553f4}{start\+Echo\+Test}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_echo_test_configuration}{Echo\+Test\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae779da1c3fe153d73e8dfb2eb59ba9e4}{stop\+Echo\+Test}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac8eca0135b3ab7cecb84e2b81b89a85d}{disable\+Video}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aabd5f0d670a6cd26badc316083519512}{start\+Preview}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad0673c4d00d24983098fb3421bd59e01}{start\+Preview}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab15f532e7a282050721ddcbb2075f27c}{stop\+Preview}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac4382fa969a0f23cbc066f2771f8b0ab}{stop\+Preview}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_adb3ab7a20afca02f5a5ab6fafe026f2b}{start\+Lastmile\+Probe\+Test}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_lastmile_probe_config}{Lastmile\+Probe\+Config}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a94f3494035429684a750e1dee7ef1593}{stop\+Lastmile\+Probe\+Test}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9bcbdcee0b5c52f96b32baec1922cf2e}{set\+Video\+Encoder\+Configuration}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3823039f3d9749fda1c988659a3f3ead}{set\+Beauty\+Effect\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_beauty_options}{Beauty\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2f2ed2bc4e091502857a5a10be604b31}{set\+Face\+Shape\+Beauty\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8a7d8cc8ea8642453cd0fd7cea9c1b36}{set\+Face\+Shape\+Area\+Options}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a35ce3e99fcaecfb6f73e1c07f3edaccc}{get\+Face\+Shape\+Beauty\+Options}} (\mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0c31f6ae7a49d94e70bb50a410e241b3}{get\+Face\+Shape\+Area\+Options}} (\mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options_a97f633a1f186ffda5b0311ab429b4952}{agora\+::rtc\+::\+Face\+Shape\+Area\+Options\+::\+F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+EA}} shape\+Area, \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a60db339363023039dda38600c1e91d20}{set\+Filter\+Effect\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_filter_effect_options}{Filter\+Effect\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_abbc47eef63740189f9ee6a02d8f231da}{set\+Lowlight\+Enhance\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_lowlight_enhance_options}{Lowlight\+Enhance\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab1a6aabdd8a30919cca75ce27fd9f108}{set\+Video\+Denoiser\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_denoiser_options}{Video\+Denoiser\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4275673ad9f1b717222e2339b3aaac2f}{set\+Color\+Enhance\+Options}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_color_enhance_options}{Color\+Enhance\+Options}} \&options, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a704ef3e98e918bb2d3b1740bb2a6f6eb}{enable\+Virtual\+Background}} (bool enabled, \mbox{\hyperlink{structagora_1_1rtc_1_1_virtual_background_source}{Virtual\+Background\+Source}} background\+Source, \mbox{\hyperlink{structagora_1_1rtc_1_1_segmentation_property}{Segmentation\+Property}} segproperty, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+P\+R\+I\+M\+A\+R\+Y\+\_\+\+C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac166814787b0a1d8da5f5c632dd7cdcf}{setup\+Remote\+Video}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}} \&canvas)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a744003a9c0230684e985e42d14361f28}{setup\+Local\+Video}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}} \&canvas)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acfbbb5486c091896605ee94254ab0665}{set\+Video\+Scenario}} (V\+I\+D\+E\+O\+\_\+\+A\+P\+P\+L\+I\+C\+A\+T\+I\+O\+N\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE scenario\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_add24d11a66e2afe95253e01ffe2002a5}{set\+Video\+Qo\+E\+Preference}} (V\+I\+D\+E\+O\+\_\+\+Q\+O\+E\+\_\+\+P\+R\+E\+F\+E\+R\+E\+N\+C\+E\+\_\+\+T\+Y\+PE qoe\+Preference)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a996401c7ba33c6ec59527c5d109f548f}{enable\+Audio}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1929f01411e983ed776275fe8e8ad45e}{disable\+Audio}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{set\+Audio\+Profile}} (A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE profile, A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE scenario) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe8ac8023a1ef976fc983213308b80f3}{set\+Audio\+Profile}} (A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE profile)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a81ae6611cdcdf32cf3e402fd64e364ef}{set\+Audio\+Scenario}} (A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE scenario)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa61051d91823a69fe6b04b5f541a8080}{enable\+Local\+Audio}} (bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a08a34d5b85a225390a18467c92a7b6f9}{mute\+Local\+Audio\+Stream}} (bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac061a3c81eba2d203a7511e59466e6a0}{mute\+All\+Remote\+Audio\+Streams}} (bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3dcf5cb6eea02d3e7b9da2638c510ca3}{mute\+Remote\+Audio\+Stream}} (uid\+\_\+t uid, bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7707fb7110c72637ee98f659e8b796e9}{mute\+Local\+Video\+Stream}} (bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1877bb2aa655bbcbed57ffadd6424e51}{enable\+Local\+Video}} (bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a897a09788641f26252be642bb7045ee4}{mute\+All\+Remote\+Video\+Streams}} (bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9c7430fc0d692ad67e76b2a544deb354}{set\+Remote\+Default\+Video\+Stream\+Type}} (V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE stream\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a00bda165de0a9e8558495bea18b1ee72}{mute\+Remote\+Video\+Stream}} (uid\+\_\+t uid, bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{set\+Remote\+Video\+Stream\+Type}} (uid\+\_\+t uid, V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE stream\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9aa3a3c0ceaeaa889cc73173044c305d}{set\+Remote\+Video\+Subscription\+Options}} (uid\+\_\+t uid, const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_subscription_options}{Video\+Subscription\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1438e53a4bc22443e2918c8b05208222}{set\+Subscribe\+Audio\+Blocklist}} (uid\+\_\+t $\ast$uid\+List, int uid\+Number)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1c67bbf6f21f063db837c8b8a8b3caa4}{set\+Subscribe\+Audio\+Allowlist}} (uid\+\_\+t $\ast$uid\+List, int uid\+Number)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac29e3a697f157afdaf7e5ed831c072a7}{set\+Subscribe\+Video\+Blocklist}} (uid\+\_\+t $\ast$uid\+List, int uid\+Number)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae2f201fe42cb9b580e30b9e638faa4a1}{set\+Subscribe\+Video\+Allowlist}} (uid\+\_\+t $\ast$uid\+List, int uid\+Number)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a23981734852c4171c6e55f3ff910cde3}{enable\+Audio\+Volume\+Indication}} (int interval, int smooth, bool report\+Vad)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2bcdb3713d087c6318a2e1972c1e8cc6}{start\+Audio\+Recording}} (const char $\ast$file\+Path, A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE quality)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3c05d82c97a9d63ebda116b9a1e5ca3f}{start\+Audio\+Recording}} (const char $\ast$file\+Path, int sample\+Rate, A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE quality)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ace2bdbb7456d52e117e80a96c9e9b7b4}{start\+Audio\+Recording}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_audio_recording_configuration}{Audio\+Recording\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a92470d0cf6a44deb6b720faafbca522c}{register\+Audio\+Encoded\+Frame\+Observer}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_audio_encoded_frame_observer_config}{Audio\+Encoded\+Frame\+Observer\+Config}} \&config, \mbox{\hyperlink{classagora_1_1rtc_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}} $\ast$observer)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_adb392026425663e5b9f90fe90130e5a5}{stop\+Audio\+Recording}} ()=0
\item 
virtual \mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ I\+Media\+Player $>$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae5fd78464db9420fdca3d493d7443bd0}{create\+Media\+Player}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a71cb948b53e2d17c13bef4a6bfa57efc}{destroy\+Media\+Player}} (\mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ I\+Media\+Player $>$ media\+\_\+player)=0
\item 
virtual \mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{I\+Media\+Recorder}} $>$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae92091361a67f144662069758bceda5a}{create\+Media\+Recorder}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_recorder_stream_info}{Recorder\+Stream\+Info}} \&info)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac52255dc624918588b73837c07be0ae6}{destroy\+Media\+Recorder}} (\mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{I\+Media\+Recorder}} $>$ media\+Recorder)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8739ebb08c6d97c1ee708889ef834d5f}{start\+Audio\+Mixing}} (const char $\ast$file\+Path, bool loopback, int cycle)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a88a90b9433ec193f9821738ba55e6ec3}{start\+Audio\+Mixing}} (const char $\ast$file\+Path, bool loopback, int cycle, int start\+Pos)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2b90cbf4142c913b3efa795482713b08}{stop\+Audio\+Mixing}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab86885c38e7ee7a4b37d5bbacafcaa24}{pause\+Audio\+Mixing}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5a9606ad7ca4995e0d37fcf1642fe401}{resume\+Audio\+Mixing}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a21e4aa7b76079be0f91f19acd5e9c42b}{select\+Audio\+Track}} (int index)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d365b13d852a46192c663440c598304}{get\+Audio\+Track\+Count}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a544aee96b789ac5a57d26b61b7e1a5fa}{adjust\+Audio\+Mixing\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9fafbaaf39578810ec9c11360fc7f027}{adjust\+Audio\+Mixing\+Publish\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa65e55a9a331cfd32b36d8847a9631a4}{get\+Audio\+Mixing\+Publish\+Volume}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8677c3f3160927d25d9814a88ab06da6}{adjust\+Audio\+Mixing\+Playout\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aed9dda5a7b2683776f41f6ba0e1f281c}{get\+Audio\+Mixing\+Playout\+Volume}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6a87b6b9135a6f45095dcf6aa62295cb}{get\+Audio\+Mixing\+Duration}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aae54b86e9e6a7c0ed955b96f011855cb}{get\+Audio\+Mixing\+Current\+Position}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6c69e2229c438fd587b8f81df34214ad}{set\+Audio\+Mixing\+Position}} (int pos)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4e7f7adc91ae46996f19c975357370e7}{set\+Audio\+Mixing\+Dual\+Mono\+Mode}} (media\+::\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+D\+U\+A\+L\+\_\+\+M\+O\+N\+O\+\_\+\+M\+O\+DE mode)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a26b117f7e097801b03522f7da9257425}{set\+Audio\+Mixing\+Pitch}} (int pitch)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1850045b8ced9a43118b660f808fed9e}{set\+Audio\+Mixing\+Playback\+Speed}} (int speed)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0e9787c57db5b5e8fcc53ef5bb6d24c7}{get\+Effects\+Volume}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_add9a7fd856700acd288d47ff3c7da19d}{set\+Effects\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}{preload\+Effect}} (int sound\+Id, const char $\ast$file\+Path, int start\+Pos=0)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{play\+Effect}} (int sound\+Id, const char $\ast$file\+Path, int loop\+Count, double pitch, double pan, int gain, bool publish=false, int start\+Pos=0)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aba9b070620c7e7659841dd6f94331941}{play\+All\+Effects}} (int loop\+Count, double pitch, double pan, int gain, bool publish=false)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab53220e4d12755dc17410531d2b2eebb}{get\+Volume\+Of\+Effect}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a08287428f277b7bf24d51a86ef61799b}{set\+Volume\+Of\+Effect}} (int sound\+Id, int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3c820db172c7fb43da58d81b7916d174}{pause\+Effect}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad731a94d9db9e2c3390e1443b379095f}{pause\+All\+Effects}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6489955af474172afe4f4b44e4edb38a}{resume\+Effect}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2fc1b5996df964f8e12ce579e0eb5f98}{resume\+All\+Effects}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad74eb7c7799b8762bff2b1e7e7bba8b9}{stop\+Effect}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a888ecfec4fda81831988898420d60e49}{stop\+All\+Effects}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa560240d5994be0c1a7853e96077e5f9}{unload\+Effect}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8d94ddc41717887206a4502c42797919}{unload\+All\+Effects}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d2a31c0016d1da9106222edb6c395fd}{get\+Effect\+Duration}} (const char $\ast$file\+Path)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acc753bf864b6c84d97c2d6778234c36e}{set\+Effect\+Position}} (int sound\+Id, int pos)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_abe60e8ce475a3fef96245ffc47e95e50}{get\+Effect\+Current\+Position}} (int sound\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac3f53f474760a834fef050937c4cf7fa}{enable\+Sound\+Position\+Indication}} (bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac5c3755a1cca201b2a8066af07a653f6}{set\+Remote\+Voice\+Position}} (uid\+\_\+t uid, double pan, double gain)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac710640d68fa42f3130d1aaf3b8d3c4c}{enable\+Spatial\+Audio}} (bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a582150010c3e33a6acc23731c659f28e}{set\+Remote\+User\+Spatial\+Audio\+Params}} (uid\+\_\+t uid, const \mbox{\hyperlink{structagora_1_1_spatial_audio_params}{agora\+::\+Spatial\+Audio\+Params}} \&params)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}} (V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+P\+R\+E\+S\+ET preset)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}} (A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+R\+E\+S\+ET preset)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aee9553948bf2c4e2b79a00cddce41499}{set\+Voice\+Conversion\+Preset}} (V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+R\+E\+S\+ET preset)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}{set\+Audio\+Effect\+Parameters}} (A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+R\+E\+S\+ET preset, int param1, int param2)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}{set\+Voice\+Beautifier\+Parameters}} (V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+P\+R\+E\+S\+ET preset, int param1, int param2)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49e0ab572adf34b1b6be97f564ee5f20}{set\+Voice\+Conversion\+Parameters}} (V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+R\+E\+S\+ET preset, int param1, int param2)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}} (double pitch)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a539a3345c38cc5d1d26edda69cf0661c}{set\+Local\+Voice\+Formant}} (double formant\+Ratio)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}} (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)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}} (A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE reverb\+Key, int value)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3ca3d18cd35b00276d7ab4550805d943}{set\+Headphone\+E\+Q\+Preset}} (H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+P\+R\+E\+S\+ET preset)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4938f94da646d1426aa64f7da7aa7791}{set\+Headphone\+E\+Q\+Parameters}} (int low\+Gain, int high\+Gain)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9dde13a03a2ba63d4ed310a704ce4d9a}{enable\+Voice\+A\+I\+Tuner}} (bool enabled, V\+O\+I\+C\+E\+\_\+\+A\+I\+\_\+\+T\+U\+N\+E\+R\+\_\+\+T\+Y\+PE type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae5a8ef2082a0ac196ecc128ee408def3}{set\+Log\+File}} (const char $\ast$file\+Path)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acfc056b4c693d134bece8e7c0f05e69f}{set\+Log\+Filter}} (unsigned int filter)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af24a402778204b60effc6b3879391c10}{set\+Log\+Level}} (commons\+::\+L\+O\+G\+\_\+\+L\+E\+V\+EL level)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1fa35cd4f874109a26895a95096a873f}{set\+Log\+File\+Size}} (unsigned int file\+Size\+In\+K\+Bytes)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a327761f03992c054589ce6ae3effd9c6}{upload\+Log\+File}} (\mbox{\hyperlink{classagora_1_1util_1_1_copyable_auto_ptr}{agora\+::util\+::\+A\+String}} \&request\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6c08c30ca9b36d84ac42282a4b2bfef3}{write\+Log}} (commons\+::\+L\+O\+G\+\_\+\+L\+E\+V\+EL level, const char $\ast$fmt,...)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad4b4ce6d5fda065b2c1d6aaff8f9884c}{set\+Local\+Render\+Mode}} (media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE render\+Mode, V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mirror\+Mode)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2aae3548ceb92aa929aafb61383a3dd6}{set\+Remote\+Render\+Mode}} (uid\+\_\+t uid, media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE render\+Mode, V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mirror\+Mode)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae1cc7218265d05caa22764091754ebb4}{set\+Local\+Render\+Target\+Fps}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type, int target\+Fps)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a732c9de0735852709030383c731c1042}{set\+Remote\+Render\+Target\+Fps}} (int target\+Fps)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a87f5a5382b0dd7b54f30fc2f0ac83c4a}{set\+Local\+Render\+Mode}} (media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE render\+Mode) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8f088ba753de27002bef49ede9d5ffbc}{set\+Local\+Video\+Mirror\+Mode}} (V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mirror\+Mode) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3f67e39e02e64ffe4197ba243e71a2cf}{enable\+Dual\+Stream\+Mode}} (bool enabled) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9db761169fa8d804d7fb8ea29484121c}{enable\+Dual\+Stream\+Mode}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} \&stream\+Config) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2c0cc7b801522f781bfd0eda3557f854}{set\+Dual\+Stream\+Mode}} (S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+DE mode)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3902458a9581bbc36168518cfd10d19a}{set\+Simulcast\+Config}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_config}{Simulcast\+Config}} \&simulcast\+Config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a33c7eebc75e9a5bbde3904467657eb54}{set\+Dual\+Stream\+Mode}} (S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+DE mode, const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} \&stream\+Config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a14e8afb96a2586a2eec56dec5c5abe45}{enable\+Custom\+Audio\+Local\+Playback}} (track\+\_\+id\+\_\+t track\+Id, bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2c4717760b5fbf1bb8c1a3c16ca67fe5}{set\+Recording\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mode, int samples\+Per\+Call)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa5f2f6eb3db5acaaf8c40818d90694f1}{set\+Playback\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mode, int samples\+Per\+Call)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af94beec91b7fcf0b20414b75b65580ff}{set\+Mixed\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, int samples\+Per\+Call)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a384f37f6a46ed650ca86e144aee9e5b9}{set\+Ear\+Monitoring\+Audio\+Frame\+Parameters}} (int sample\+Rate, int channel, R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mode, int samples\+Per\+Call)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af6acd5694dad022464f21dcc5d0002fc}{set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters}} (int sample\+Rate, int channel)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a719e9cf665fdd4fe4dfef84dd51828e2}{enable\+Audio\+Spectrum\+Monitor}} (int interval\+In\+MS=100)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab00fdf2439e00078f8993cf6f3e38b88}{disable\+Audio\+Spectrum\+Monitor}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a257451a0a792e2d2588154e216c429f6}{register\+Audio\+Spectrum\+Observer}} (\mbox{\hyperlink{classagora_1_1media_1_1_i_audio_spectrum_observer}{agora\+::media\+::\+I\+Audio\+Spectrum\+Observer}} $\ast$observer)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6d6690527d2fcff60d1c2e8e8a74b7f0}{unregister\+Audio\+Spectrum\+Observer}} (\mbox{\hyperlink{classagora_1_1media_1_1_i_audio_spectrum_observer}{agora\+::media\+::\+I\+Audio\+Spectrum\+Observer}} $\ast$observer)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acf94e9e0122f09d0450475d7c5809036}{adjust\+Recording\+Signal\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3d0ebedd137aa0dcc8e8978854c26682}{mute\+Recording\+Signal}} (bool mute)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a98919705c8b2346811f91f9ce5e97a79}{adjust\+Playback\+Signal\+Volume}} (int volume)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_abf7aed322b8f0979cf9313ad99b85775}\label{classagora_1_1rtc_1_1_i_rtc_engine_abf7aed322b8f0979cf9313ad99b85775}} 
virtual int {\bfseries adjust\+User\+Playback\+Signal\+Volume} (uid\+\_\+t uid, int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6f411291eb8b834442b44361f78fa81f}{set\+Local\+Publish\+Fallback\+Option}} (S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS option)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afd251e3f353a31d470ff9e60c3c3c5de}{set\+Remote\+Subscribe\+Fallback\+Option}} (S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS option)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6d91b4c3234f741d1210db9d0c6a96ba}{set\+High\+Priority\+User\+List}} (uid\+\_\+t $\ast$uid\+List, int uid\+Num, S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS option)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac6fc97b54f53ebc5cc28049a04d51170}{enable\+Extension}} (const char $\ast$provider, const char $\ast$extension, const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&extension\+Info, bool enable=true)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afd6dc645147e9d4021dfa7ff673f2b3d}{set\+Extension\+Property}} (const char $\ast$provider, const char $\ast$extension, const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&extension\+Info, const char $\ast$key, const char $\ast$value)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa43c2767b29faee996d99e6d785d13f7}{get\+Extension\+Property}} (const char $\ast$provider, const char $\ast$extension, const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&extension\+Info, const char $\ast$key, char $\ast$value, int buf\+\_\+len)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a86e2db9244c0edc395168a1ab6708102}{enable\+Loopback\+Recording}} (bool enabled, const char $\ast$device\+Name=N\+U\+LL)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a95cdc3a285845cb35d56f470a0b488fb}{adjust\+Loopback\+Signal\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac94bc111056036c08e259c84696bb9bd}{get\+Loopback\+Recording\+Volume}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab4650e81f9f5496f63d472b548e03aaa}{enable\+In\+Ear\+Monitoring}} (bool enabled, int include\+Audio\+Filters)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a407fdc268519a4a23a102afec44bf2e6}{set\+In\+Ear\+Monitoring\+Volume}} (int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a518b9d2f480aa83c4e58cc9992f4cbd0}{set\+Extension\+Provider\+Property}} (const char $\ast$provider, const char $\ast$key, const char $\ast$value)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aaff3d6b73766da76f3a8e8173a901409}{register\+Extension}} (const char $\ast$provider, const char $\ast$extension, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6c4e1fabb81aef573de88a215a19da9b}{enable\+Extension}} (const char $\ast$provider, const char $\ast$extension, bool enable=true, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa268792b9208cf687afff31c106166f9}{set\+Extension\+Property}} (const char $\ast$provider, const char $\ast$extension, const char $\ast$key, const char $\ast$value, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a18ecaaccf0c6ddb32f05a443c0d8c98c}{get\+Extension\+Property}} (const char $\ast$provider, const char $\ast$extension, const char $\ast$key, char $\ast$value, int buf\+\_\+len, agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type=agora\+::media\+::\+U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aaa9b17c5a938b8331dba774f37f94e65}{set\+Camera\+Capturer\+Configuration}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} \&config)=0
\item 
virtual video\+\_\+track\+\_\+id\+\_\+t \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a94236ec10e44896d3a133d411d0b8958}{create\+Custom\+Video\+Track}} ()=0
\item 
virtual video\+\_\+track\+\_\+id\+\_\+t \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad89333616fea3ae501b77000624b95a1}{create\+Custom\+Encoded\+Video\+Track}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_sender_options}{Sender\+Options}} \&sender\+\_\+option)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5adc6cc95c913646b2a993ed21729440}{destroy\+Custom\+Video\+Track}} (video\+\_\+track\+\_\+id\+\_\+t video\+\_\+track\+\_\+id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a84e88acc42701119a7a5d997e3142f5b}{destroy\+Custom\+Encoded\+Video\+Track}} (video\+\_\+track\+\_\+id\+\_\+t video\+\_\+track\+\_\+id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af67688d89526926718edb26938d65541}{get\+Call\+Id}} (\mbox{\hyperlink{classagora_1_1util_1_1_copyable_auto_ptr}{agora\+::util\+::\+A\+String}} \&call\+Id)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a748c30a6339ec9798daa0d1b21585411}{rate}} (const char $\ast$call\+Id, int rating, const char $\ast$description)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab8031b21d72c846e9d501fbe6ca10678}{complain}} (const char $\ast$call\+Id, const char $\ast$description)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acfc4de5d9454cad1dfd1d154e180d78c}{start\+Rtmp\+Stream\+Without\+Transcoding}} (const char $\ast$url)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0f91aa3af0a7c9a8428966028b5a010c}{start\+Rtmp\+Stream\+With\+Transcoding}} (const char $\ast$url, const \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}} \&transcoding)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8689685218a15a34a376944555340261}{update\+Rtmp\+Transcoding}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}} \&transcoding)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3eea37dd1b80a9246816903b965716ca}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3eea37dd1b80a9246816903b965716ca}} 
virtual int {\bfseries start\+Local\+Video\+Transcoder} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}} \&config)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7057d7b1b8b5bca1b622fe10c4e29950}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7057d7b1b8b5bca1b622fe10c4e29950}} 
virtual int {\bfseries update\+Local\+Transcoder\+Configuration} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_transcoder_configuration}{Local\+Transcoder\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab9807b2e5fb708d01066759af02cc630}{stop\+Rtmp\+Stream}} (const char $\ast$url)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a417bb1e2c3564a4c349357cdba1bb11b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a417bb1e2c3564a4c349357cdba1bb11b}} 
virtual int {\bfseries stop\+Local\+Video\+Transcoder} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a3b43b690a4137b0172cd09f70b079a4b}{start\+Local\+Audio\+Mixer}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a24e94ea7f4ec5f5830608d05965eacf4}{update\+Local\+Audio\+Mixer\+Configuration}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afde87fec9cd23387436b5a918975a454}{stop\+Local\+Audio\+Mixer}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad01a4f17cfec60596b5cae7bb59b2394}{start\+Camera\+Capture}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type, const \mbox{\hyperlink{structagora_1_1rtc_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a28bd9fd55b81d3790c8f6792f10ff739}{stop\+Camera\+Capture}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab035f52a3b59ac873e08f792d9e76620}{set\+Camera\+Device\+Orientation}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type, V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON orientation)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae05a33fd4fb688bb24dbbb5162100528}{set\+Screen\+Capture\+Orientation}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE type, V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON orientation)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad984f3f62e584e8909a0491aac41c4e8}{start\+Screen\+Capture}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type, const \mbox{\hyperlink{structagora_1_1rtc_1_1_screen_capture_configuration}{Screen\+Capture\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a93e3f9ae0e115a54d2af79d1b96dda7d}{stop\+Screen\+Capture}} (V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE source\+Type)=0
\item 
virtual C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+T\+Y\+PE \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a512b149d4dc249c04f9e30bd31767362}{get\+Connection\+State}} ()=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae10bc942d2684b474d53b9c0c2d442ab}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae10bc942d2684b474d53b9c0c2d442ab}} 
virtual bool {\bfseries register\+Event\+Handler} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} $\ast$event\+Handler)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aafe546bd6adc0a82847bdcd2f9201823}\label{classagora_1_1rtc_1_1_i_rtc_engine_aafe546bd6adc0a82847bdcd2f9201823}} 
virtual bool {\bfseries unregister\+Event\+Handler} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} $\ast$event\+Handler)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aecb5d85e9b3a60947d569b88253da710}\label{classagora_1_1rtc_1_1_i_rtc_engine_aecb5d85e9b3a60947d569b88253da710}} 
virtual int {\bfseries set\+Remote\+User\+Priority} (uid\+\_\+t uid, P\+R\+I\+O\+R\+I\+T\+Y\+\_\+\+T\+Y\+PE user\+Priority)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a95b53a32d598c3d98a51c24f7f9af4b4}{register\+Packet\+Observer}} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_packet_observer}{I\+Packet\+Observer}} $\ast$observer)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad5ea5f0dfd8117f38d9c4b12fe01fece}{enable\+Encryption}} (bool enabled, const \mbox{\hyperlink{structagora_1_1rtc_1_1_encryption_config}{Encryption\+Config}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5a3f0168ca6e2e298e4677e9a8b9550a}{create\+Data\+Stream}} (int $\ast$stream\+Id, bool reliable, bool ordered)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acf920f7dc761e2d7b7e28006c74238b7}{create\+Data\+Stream}} (int $\ast$stream\+Id, const \mbox{\hyperlink{structagora_1_1rtc_1_1_data_stream_config}{Data\+Stream\+Config}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7006214f7ca3c08d83cc0a4ebcb9febc}{send\+Stream\+Message}} (int stream\+Id, const char $\ast$data, size\+\_\+t length)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4caf3477d91c3aa0ea8b178948cad8d5}{add\+Video\+Watermark}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_image}{Rtc\+Image}} \&watermark) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a36e51346ec3bd5a7370d7c70d58d9394}{add\+Video\+Watermark}} (const char $\ast$watermark\+Url, const \mbox{\hyperlink{structagora_1_1rtc_1_1_watermark_options}{Watermark\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aea42a1ea8b83bc807f68526945f40ec6}{clear\+Video\+Watermarks}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7729c859bb2ae7f565ab7a57cf7b6158}{pause\+Audio}} () \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a566a23231286f5286fdb137966093e9f}{resume\+Audio}} () \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5ac70d12ca9b204410c02a9cc1159606}{enable\+Web\+Sdk\+Interoperability}} (bool enabled) \+\_\+\+\_\+deprecated=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afb6b404d722dd664a39af3919e085213}{send\+Custom\+Report\+Message}} (const char $\ast$id, const char $\ast$category, const char $\ast$event, const char $\ast$label, int value)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a84dbf06de1d769b63200d7ec0289cca0}{register\+Media\+Metadata\+Observer}} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}} $\ast$observer, \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{I\+Metadata\+Observer\+::\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}} type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ace712f59f6fb50d3f9c5f89cffb5e49e}{unregister\+Media\+Metadata\+Observer}} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}} $\ast$observer, \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{I\+Metadata\+Observer\+::\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}} type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_af1e558f8fe811ca501f3c04234053a03}{start\+Audio\+Frame\+Dump}} (const char $\ast$channel\+\_\+id, uid\+\_\+t uid, const char $\ast$location, const char $\ast$uuid, const char $\ast$passwd, long duration\+\_\+ms, bool auto\+\_\+upload)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a273c143c4df3e74b9aea29d4027b2e9c}{stop\+Audio\+Frame\+Dump}} (const char $\ast$channel\+\_\+id, uid\+\_\+t uid, const char $\ast$location)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2a447c3a89480e5bca78af01d3188710}{set\+A\+I\+N\+S\+Mode}} (bool enabled, A\+U\+D\+I\+O\+\_\+\+A\+I\+N\+S\+\_\+\+M\+O\+DE mode)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0d44b74ced4005ee86353c13186f870d}{register\+Local\+User\+Account}} (const char $\ast$app\+Id, const char $\ast$user\+Account)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}{join\+Channel\+With\+User\+Account}} (const char $\ast$token, const char $\ast$channel\+Id, const char $\ast$user\+Account)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac503f610f1d6bdfa1def75a94646b489}{join\+Channel\+With\+User\+Account}} (const char $\ast$token, const char $\ast$channel\+Id, const char $\ast$user\+Account, const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a124148443b2438da668fb683e96a9f41}{join\+Channel\+With\+User\+Account\+Ex}} (const char $\ast$token, const char $\ast$channel\+Id, const char $\ast$user\+Account, const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&options, \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} $\ast$event\+Handler)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acba378be5f666f84c64713197587dc43}{get\+User\+Info\+By\+User\+Account}} (const char $\ast$user\+Account, \mbox{\hyperlink{structagora_1_1rtc_1_1_user_info}{rtc\+::\+User\+Info}} $\ast$user\+Info)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7a34efc30c42f0c200aacd6a6f1dc386}{get\+User\+Info\+By\+Uid}} (uid\+\_\+t uid, \mbox{\hyperlink{structagora_1_1rtc_1_1_user_info}{rtc\+::\+User\+Info}} $\ast$user\+Info)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acba3bb84e41b87472ad9936bde372552}{start\+Or\+Update\+Channel\+Media\+Relay}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_relay_configuration}{Channel\+Media\+Relay\+Configuration}} \&configuration)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab4a1c52a83a08f7dacab6de36f4681b8}{stop\+Channel\+Media\+Relay}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6761e2f090290567d1f592841c40d96c}{pause\+All\+Channel\+Media\+Relay}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a92a74b5b3752d285dfdb769607220e70}{resume\+All\+Channel\+Media\+Relay}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aab97152512979f2a3b23b7e2d725d43c}{set\+Direct\+Cdn\+Streaming\+Audio\+Configuration}} (A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE profile)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6c69261e800f7e7c691bdc439b97d077}{set\+Direct\+Cdn\+Streaming\+Video\+Configuration}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a92946ac873b25e343da2f63b4d421ac6}{start\+Direct\+Cdn\+Streaming}} (\mbox{\hyperlink{classagora_1_1rtc_1_1_i_direct_cdn_streaming_event_handler}{I\+Direct\+Cdn\+Streaming\+Event\+Handler}} $\ast$event\+Handler, const char $\ast$publish\+Url, const \mbox{\hyperlink{structagora_1_1rtc_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1f179ea962004b38b31a43716162bb75}{stop\+Direct\+Cdn\+Streaming}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aaff02b17e9cc532b9ac907059d7926c0}{update\+Direct\+Cdn\+Streaming\+Media\+Options}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} \&options)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2899990fedbf999432466b3f8ddaea1f}{start\+Rhythm\+Player}} (const char $\ast$sound1, const char $\ast$sound2, const Agora\+Rhythm\+Player\+Config \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab20b4c61b34a95b3f5e08dd2da48779e}{stop\+Rhythm\+Player}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab79a8bc476bcc23c81862576bd058d99}{config\+Rhythm\+Player}} (const Agora\+Rhythm\+Player\+Config \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5a751731d775a65b67c52a9e4f167844}{take\+Snapshot}} (uid\+\_\+t uid, const char $\ast$file\+Path)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa2f627ab6af61861628c04066453e8df}{take\+Snapshot}} (uid\+\_\+t uid, const \mbox{\hyperlink{structagora_1_1media_1_1_snapshot_config}{media\+::\+Snapshot\+Config}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac0caaeeaaffaebc35cd2312d05f85b93}{enable\+Content\+Inspect}} (bool enabled, const \mbox{\hyperlink{structagora_1_1media_1_1_content_inspect_config}{media\+::\+Content\+Inspect\+Config}} \&config)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aad25371db340982772decfcf62aa2247}\label{classagora_1_1rtc_1_1_i_rtc_engine_aad25371db340982772decfcf62aa2247}} 
virtual int {\bfseries adjust\+Custom\+Audio\+Publish\+Volume} (track\+\_\+id\+\_\+t track\+Id, int volume)=0
\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6cbbb9eccfa51c5a62664050db67530f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6cbbb9eccfa51c5a62664050db67530f}} 
virtual int {\bfseries adjust\+Custom\+Audio\+Playout\+Volume} (track\+\_\+id\+\_\+t track\+Id, int volume)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aff1329c23bbcaff769101ae08f91b869}{set\+Cloud\+Proxy}} (C\+L\+O\+U\+D\+\_\+\+P\+R\+O\+X\+Y\+\_\+\+T\+Y\+PE proxy\+Type)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a00358b706ea747938165984198b16009}{set\+Local\+Access\+Point}} (const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}} \&config)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa670b2c3dff1726603c3a1a90f1afe49}{set\+Advanced\+Audio\+Options}} (\mbox{\hyperlink{structagora_1_1rtc_1_1_advanced_audio_options}{Advanced\+Audio\+Options}} \&options, int source\+Type=0)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab8ffc1ea81220f8002e4520265ecc93c}{set\+A\+V\+Sync\+Source}} (const char $\ast$channel\+Id, uid\+\_\+t uid)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a38dfb62675bf5d36d13aca09b08753f7}{enable\+Video\+Image\+Source}} (bool enable, const \mbox{\hyperlink{structagora_1_1rtc_1_1_image_track_options}{Image\+Track\+Options}} \&options)=0
\begin{DoxyCompactList}\small\item\em enable or disable video image source to replace the current video source published or resume it \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac584ff03c6ac1f0b23d8bf4d43d99075}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac584ff03c6ac1f0b23d8bf4d43d99075}} 
virtual int64\+\_\+t {\bfseries get\+Current\+Monotonic\+Time\+In\+Ms} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a90cf9cbde4bd5db0eb344e2198e86b29}{enable\+Wireless\+Accelerate}} (bool enabled)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a89cd1b4d85e8eac5e7faf5a199f20884}{get\+Network\+Type}} ()=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae3eb20847152978256482faeefcafb7b}{set\+Parameters}} (const char $\ast$parameters)=0
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a48313e38de920085528b0017cfc91672}{start\+Media\+Rendering\+Tracing}} ()=0
\begin{DoxyCompactList}\small\item\em Start tracing media rendering events. \end{DoxyCompactList}\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab47250a1a4e0e3eb82916ea75017dd4f}{enable\+Instant\+Media\+Rendering}} ()=0
\begin{DoxyCompactList}\small\item\em Enable instant media rendering. \end{DoxyCompactList}\item 
virtual uint64\+\_\+t \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ae5109a2a8ca8a3106961ee783d6c0cf6}{get\+Ntp\+Wall\+Time\+In\+Ms}} ()=0
\item 
virtual bool \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a90aef5ccd7a6002b407925c14ab11131}{is\+Feature\+Available\+On\+Device}} (Feature\+Type type)=0
\begin{DoxyCompactList}\small\item\em Whether the target feature is available for the device. \end{DoxyCompactList}\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aebe07c328e87d4f374b06a437e2bacde}{send\+Audio\+Metadata}} (const char $\ast$metadata, size\+\_\+t length)=0
\begin{DoxyCompactList}\small\item\em send audio metadata \end{DoxyCompactList}\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8ba17007e0e12805eba89378d4c0b0cb}{query\+H\+D\+R\+Capability}} (V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+T\+Y\+PE video\+Module, H\+D\+R\+\_\+\+C\+A\+P\+A\+B\+I\+L\+I\+TY \&capability)=0
\begin{DoxyCompactList}\small\item\em Queries the H\+DR capability of the video module. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static A\+G\+O\+R\+A\+\_\+\+C\+P\+P\+\_\+\+A\+PI void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa8c35637a2a7e6d02ac6330b35cc0b34}{release}} (bool sync=false)
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
The \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} class, which is the basic interface of the Agora S\+DK that implements the core functions of real-\/time communication.

{\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} provides the main methods that your app can call. 

\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa8c35637a2a7e6d02ac6330b35cc0b34}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa8c35637a2a7e6d02ac6330b35cc0b34}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!release@{release}}
\index{release@{release}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{release()}{release()}}
{\footnotesize\ttfamily static A\+G\+O\+R\+A\+\_\+\+C\+P\+P\+\_\+\+A\+PI void agora\+::rtc\+::\+I\+Rtc\+Engine\+::release (\begin{DoxyParamCaption}\item[{bool}]{sync = {\ttfamily false} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

Releases the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object.

This method releases all resources used by the Agora S\+DK. Use this method for apps in which users occasionally make voice or video calls. When users do not make calls, you can free up resources for other operations.

After a successful method call, you can no longer use any method or callback in the S\+DK anymore. If you want to use the real-\/time communication functions again, you must call {\ttfamily create\+Agora\+Rtc\+Engine} and {\ttfamily initialize} to create a new {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance.

\begin{DoxyNote}{Note}
If you want to create a new {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance after destroying the current one, ensure that you wait till the {\ttfamily release} method execution to complete.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em sync} & Determines whether this method is a synchronous call.
\begin{DoxyItemize}
\item {\ttfamily true}\+: This method is a synchronous call, which means that the result of this method call returns after the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object resources are released. Do not call this method in any callback generated by the S\+DK, or it may result in a deadlock.
\item {\ttfamily false}\+: This method is an asynchronous call. The result returns immediately even when the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object resources are not released. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!initialize@{initialize}}
\index{initialize@{initialize}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{initialize()}{initialize()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::initialize (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_engine_context}{Rtc\+Engine\+Context}} \&}]{context }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Initializes {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}}.

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

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling other A\+P\+Is, you must call {\ttfamily create\+Agora\+Rtc\+Engine} and {\ttfamily initialize}to create and initialize the {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} object.
\item The S\+DK supports creating only one {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance for an app.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em context} & The \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_engine_context}{Rtc\+Engine\+Context}} object. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a72d3f2bd9d94e1013fbf777790ac1447}\label{classagora_1_1rtc_1_1_i_rtc_engine_a72d3f2bd9d94e1013fbf777790ac1447}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!queryInterface@{queryInterface}}
\index{queryInterface@{queryInterface}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{queryInterface()}{queryInterface()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::query\+Interface (\begin{DoxyParamCaption}\item[{I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+I\+D\+\_\+\+T\+Y\+PE}]{iid,  }\item[{void $\ast$$\ast$}]{inter }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the pointer to the specified interface.


\begin{DoxyParams}{Parameters}
{\em iid} & The ID of the interface. See \#\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+I\+D\+\_\+\+T\+Y\+PE for details. \\
\hline
{\em inter} & Output parameter. The pointer to the specified interface. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}


Implements \mbox{\hyperlink{classagora_1_1base_1_1_i_engine_base}{agora\+::base\+::\+I\+Engine\+Base}}.

\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa5605279f597cca69f77a062045675d6}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa5605279f597cca69f77a062045675d6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getVersion@{getVersion}}
\index{getVersion@{getVersion}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getVersion()}{getVersion()}}
{\footnotesize\ttfamily virtual const char$\ast$ agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Version (\begin{DoxyParamCaption}\item[{int $\ast$}]{build }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the S\+DK version. 
\begin{DoxyParams}{Parameters}
{\em build} & The build number. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The version of the current S\+DK in the string format. 
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_af567b0dd7a1a498319549139fdf13f32}\label{classagora_1_1rtc_1_1_i_rtc_engine_af567b0dd7a1a498319549139fdf13f32}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getErrorDescription@{getErrorDescription}}
\index{getErrorDescription@{getErrorDescription}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getErrorDescription()}{getErrorDescription()}}
{\footnotesize\ttfamily virtual const char$\ast$ agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Error\+Description (\begin{DoxyParamCaption}\item[{int}]{code }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the warning or error description. 
\begin{DoxyParams}{Parameters}
{\em code} & The error code or warning code reported by the S\+DK. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The specific error or warning description. 
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a32294dda5cf780cd010dc6f4966957f2}\label{classagora_1_1rtc_1_1_i_rtc_engine_a32294dda5cf780cd010dc6f4966957f2}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!queryCodecCapability@{queryCodecCapability}}
\index{queryCodecCapability@{queryCodecCapability}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{queryCodecCapability()}{queryCodecCapability()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::query\+Codec\+Capability (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_codec_cap_info}{Codec\+Cap\+Info}} $\ast$}]{codec\+Info,  }\item[{int \&}]{size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Queries the capacity of the current device codec.


\begin{DoxyParams}{Parameters}
{\em codec\+\_\+info} & An array of the codec cap information\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_codec_cap_info}{Codec\+Cap\+Info}}. \\
\hline
{\em size} & The array size. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
0\+: Success. $<$ 0\+: Failure. 
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a449e18c0f358915d93f33d84ba076aa3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a449e18c0f358915d93f33d84ba076aa3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!queryDeviceScore@{queryDeviceScore}}
\index{queryDeviceScore@{queryDeviceScore}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{queryDeviceScore()}{queryDeviceScore()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::query\+Device\+Score (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Queries the score of the current device.

\begin{DoxyReturn}{Returns}
\begin{quote}
0\+: If the value is greater than 0, it means that the device score has been retrieved and represents the score value. \end{quote}
Most devices score between 60-\/100, with higher scores indicating better performance.
\end{DoxyReturn}
$<$ 0\+: Failure. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a88bf62cbd6542535f352fd75e69d84fc}\label{classagora_1_1rtc_1_1_i_rtc_engine_a88bf62cbd6542535f352fd75e69d84fc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!preloadChannel@{preloadChannel}}
\index{preloadChannel@{preloadChannel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadChannel()}{preloadChannel()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::preload\+Channel (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{uid\+\_\+t}]{uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+Id\textquotesingle{} and \textquotesingle{}uid\textquotesingle{}.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. \\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object has not been initialized. You need to initialize the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{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\+Id to preload the channel again. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8a1c886aa13e45a4a10902290b385f4a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8a1c886aa13e45a4a10902290b385f4a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!preloadChannelWithUserAccount@{preloadChannelWithUserAccount}}
\index{preloadChannelWithUserAccount@{preloadChannelWithUserAccount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadChannelWithUserAccount()}{preloadChannelWithUserAccount()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::preload\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{const char $\ast$}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+Id\textquotesingle{} and \textquotesingle{}user\+Account\textquotesingle{}.
\end{DoxyEnumerate}


\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. \\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object has not been initialized. You need to initialize the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{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\+Id to preload the channel again. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_af1191ff4fcea57616ffa1fee5fb12f29}\label{classagora_1_1rtc_1_1_i_rtc_engine_af1191ff4fcea57616ffa1fee5fb12f29}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!updatePreloadChannelToken@{updatePreloadChannelToken}}
\index{updatePreloadChannelToken@{updatePreloadChannelToken}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{updatePreloadChannelToken()}{updatePreloadChannelToken()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::update\+Preload\+Channel\+Token (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+Id\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object has not been initialized. You need to initialize the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}\label{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!joinChannel@{joinChannel}}
\index{joinChannel@{joinChannel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannel()}{joinChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::join\+Channel (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{const char $\ast$}]{info,  }\item[{uid\+\_\+t}]{uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Joins a channel.

This method enables users to join a channel. Users in the same channel can talk to each other, and multiple users in the same channel can start a group chat. Users with different App I\+Ds cannot call each other.

A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: {\ttfamily on\+User\+Joined}, if the user joining the channel is in the Communication profile or is a host in the Live-\/broadcasting profile.
\end{DoxyItemize}

When the connection between the client and Agora\textquotesingle{}s server is interrupted due to poor network conditions, the S\+DK tries reconnecting to the server. When the local client successfully rejoins the channel, the S\+DK triggers the {\ttfamily on\+Rejoin\+Channel\+Success} callback on the local client.

\begin{DoxyNote}{Note}
Once a user joins the channel, the user subscribes to the audio and video streams of all the other users in the channel by default, giving rise to usage and billing calculation. To stop subscribing to a specified stream or all remote streams, call the corresponding {\ttfamily mute} methods.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication. \\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported 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 info} & (\mbox{\hyperlink{classagora_1_1_optional}{Optional}}) Reserved for future use. \\
\hline
{\em uid} & The user ID. This parameter is used to identify the user in the channel for real-\/time audio and video interaction. You need to set and manage user I\+Ds yourself, and ensure that each user ID in the same channel is unique. This parameter is a 32-\/bit 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 -\/2\+: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in the {\ttfamily \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}}} structure is invalid. You need to pass in a valid parameter and join the channel again.
\item -\/3\+: Failes to initialize the {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} object. You need to reinitialize the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object.
\item -\/7\+: The \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object has not been initialized. You need to initialize the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object before calling this method.
\item -\/8\+: The internal state of the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} object is wrong. The typical cause is that you call this method to join the channel without calling {\ttfamily stop\+Echo\+Test} to stop the test after calling {\ttfamily start\+Echo\+Test} to start a call loop test. You need to call {\ttfamily stop\+Echo\+Test} before calling this method.
\item -\/17\+: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recommends using the {\ttfamily on\+Connection\+State\+Changed} callback to get whether the user is in the channel. Do not call this method to join the channel unless you receive the {\ttfamily C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+I\+S\+C\+O\+N\+N\+E\+C\+T\+E\+D(1)} state.
\item -\/102\+: The channel name is invalid. You need to pass in a valid channel name in channel\+Id to rejoin the channel.
\item -\/121\+: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3ea4eb99c644348bb88c91fb539873ae}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3ea4eb99c644348bb88c91fb539873ae}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!joinChannel@{joinChannel}}
\index{joinChannel@{joinChannel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannel()}{joinChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::join\+Channel (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{uid\+\_\+t}]{uid,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Joins a channel with media options.

This method enables users to join a channel. Users in the same channel can talk to each other, and multiple users in the same channel can start a group chat. Users with different App I\+Ds cannot call each other.

A successful call of this method triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: The {\ttfamily on\+Join\+Channel\+Success} and {\ttfamily on\+Connection\+State\+Changed} callbacks.
\item The remote client\+: {\ttfamily on\+User\+Joined}, if the user joining the channel is in the Communication profile or is a host in the Live-\/broadcasting profile.
\end{DoxyItemize}

When the connection between the client and Agora\textquotesingle{}s server is interrupted due to poor network conditions, the S\+DK tries reconnecting to the server. When the local client successfully rejoins the channel, the S\+DK triggers the {\ttfamily on\+Rejoin\+Channel\+Success} callback on the local client.

Compared to {\ttfamily join\+Channel}, this method adds the options parameter to configure whether to automatically subscribe to all remote audio and video streams in the channel when the user joins the channel. By default, the user subscribes to the audio and video streams of all the other users in the channel, giving rise to usage and billings. To unsubscribe, set the {\ttfamily options} parameter or call the {\ttfamily mute} methods accordingly.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method allows users to join only one channel at a time.
\item Ensure that the app ID you use to generate the token is the same app ID that you pass in the {\ttfamily initialize} method; otherwise, you may fail to join the channel by token.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em token} & The token generated on your server for authentication.\\
\hline
{\em channel\+Id} & The channel name. This parameter signifies the channel in which users engage in real-\/time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported 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 {\ttfamily on\+Join\+Channel\+Success} callback. Your application must record and maintain the returned user ID, because the S\+DK does not do so. \\
\hline
{\em options} & The channel media options\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

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

Updates the channel media options after joining the channel.


\begin{DoxyParams}{Parameters}
{\em options} & The channel media options\+: \mbox{\hyperlink{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}\label{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!leaveChannel@{leaveChannel}}
\index{leaveChannel@{leaveChannel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{leaveChannel()}{leaveChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::leave\+Channel (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Leaves the channel.

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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a98f832d175dfc044b31f0ec5874460fb}{on\+Leave\+Channel}} callback.

\begin{DoxyNote}{Note}
If you call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa8c35637a2a7e6d02ac6330b35cc0b34}{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{classagora_1_1rtc_1_1_i_rtc_engine_ad5c2ef631e3e4076f6aec96ed1152262}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad5c2ef631e3e4076f6aec96ed1152262}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!leaveChannel@{leaveChannel}}
\index{leaveChannel@{leaveChannel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{leaveChannel()}{leaveChannel()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::leave\+Channel (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_leave_channel_options}{Leave\+Channel\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a98f832d175dfc044b31f0ec5874460fb}{on\+Leave\+Channel}} callback.

\begin{DoxyNote}{Note}
If you call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aa8c35637a2a7e6d02ac6330b35cc0b34}{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{classagora_1_1rtc_1_1_i_rtc_engine_a8f25b5ff97e2a070a69102e379295739}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8f25b5ff97e2a070a69102e379295739}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!renewToken@{renewToken}}
\index{renewToken@{renewToken}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{renewToken()}{renewToken()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::renew\+Token (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} on\+Token\+Privilege\+Will\+Expire \char`\"{}on\+Token\+Privilege\+Will\+Expire\char`\"{} callback is triggered;
\item The \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aa7b456b750f56ca8fdfee8611572310e}{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{classagora_1_1rtc_1_1_i_rtc_engine_aab53788c74da25080bad61f0525d12ae}\label{classagora_1_1rtc_1_1_i_rtc_engine_aab53788c74da25080bad61f0525d12ae}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setChannelProfile@{setChannelProfile}}
\index{setChannelProfile@{setChannelProfile}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setChannelProfile()}{setChannelProfile()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Channel\+Profile (\begin{DoxyParamCaption}\item[{C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the channel profile.

The \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+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\+: \#\+C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/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 connection is disconnected. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a89ca6a15d5a388f3c82038e74bad4040}\label{classagora_1_1rtc_1_1_i_rtc_engine_a89ca6a15d5a388f3c82038e74bad4040}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setClientRole@{setClientRole}}
\index{setClientRole@{setClientRole}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setClientRole()}{setClientRole()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Client\+Role (\begin{DoxyParamCaption}\item[{C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE}]{role }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a89ca6a15d5a388f3c82038e74bad4040}{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\+: \#\+C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+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{classagora_1_1rtc_1_1_i_rtc_engine_a7f01b7bbf512a041afa99ec7ecfa11c4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7f01b7bbf512a041afa99ec7ecfa11c4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setClientRole@{setClientRole}}
\index{setClientRole@{setClientRole}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setClientRole()}{setClientRole()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Client\+Role (\begin{DoxyParamCaption}\item[{C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE}]{role,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_client_role_options}{Client\+Role\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the role of the user, such as a host or an audience (default), before joining a channel in the live interactive streaming.

This method can be used to switch the user role in the live interactive streaming after the 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a89ca6a15d5a388f3c82038e74bad4040}{set\+Client\+Role}} method call triggers the following callbacks\+:
\begin{DoxyItemize}
\item The local client\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a62ebb50a33d02175cddb4c655465cf20}{on\+Client\+Role\+Changed}}
\item The remote client\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a985a675469baf9d54feb8781732e0ca8}{on\+User\+Joined}} or \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a9602593c05a16eafa7c094aa330c0719}{on\+User\+Offline}} (B\+E\+C\+O\+M\+E\+\_\+\+A\+U\+D\+I\+E\+N\+CE)
\end{DoxyItemize}

\begin{DoxyNote}{Note}
This method applies only to the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} profile.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em role} & Sets the role of the user. See \#\+C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em options} & Sets the audience latency level of the user. See \#\+Client\+Role\+Options.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0(E\+R\+R\+\_\+\+OK)\+: 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\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)\+: The parameter is invalid.
\item -\/7(E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED)\+: The S\+DK is not initialized.
\item -\/8(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+T\+A\+TE)\+: The channel profile is not {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a394c60056c0cd31af48e8015b0c553f4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a394c60056c0cd31af48e8015b0c553f4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startEchoTest@{startEchoTest}}
\index{startEchoTest@{startEchoTest}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startEchoTest()}{startEchoTest()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Echo\+Test (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_echo_test_configuration}{Echo\+Test\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts a video call test.


\begin{DoxyParams}{Parameters}
{\em config} & configuration for video call test.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae779da1c3fe153d73e8dfb2eb59ba9e4}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae779da1c3fe153d73e8dfb2eb59ba9e4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopEchoTest@{stopEchoTest}}
\index{stopEchoTest@{stopEchoTest}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopEchoTest()}{stopEchoTest()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Echo\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the audio call test. \begin{DoxyReturn}{Returns}
int
\end{DoxyReturn}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableVideo@{enableVideo}}
\index{enableVideo@{enableVideo}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVideo()}{enableVideo()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Video (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ac8eca0135b3ab7cecb84e2b81b89a85d}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac8eca0135b3ab7cecb84e2b81b89a85d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!disableVideo@{disableVideo}}
\index{disableVideo@{disableVideo}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{disableVideo()}{disableVideo()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::disable\+Video (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Disables the video.

This method stops capturing the local video and receiving any remote video. To enable the local preview function, call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1877bb2aa655bbcbed57ffadd6424e51}{enable\+Local\+Video}} (true). \begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aabd5f0d670a6cd26badc316083519512}\label{classagora_1_1rtc_1_1_i_rtc_engine_aabd5f0d670a6cd26badc316083519512}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startPreview@{startPreview}}
\index{startPreview@{startPreview}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startPreview()}{startPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Preview (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{leave\+Channel}}, the local video preview remains until you call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab15f532e7a282050721ddcbb2075f27c}{stop\+Preview}} to disable it.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ad0673c4d00d24983098fb3421bd59e01}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad0673c4d00d24983098fb3421bd59e01}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startPreview@{startPreview}}
\index{startPreview@{startPreview}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startPreview()}{startPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Preview (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts the local video preview for specific source type. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

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

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{classagora_1_1rtc_1_1_i_rtc_engine_ac4382fa969a0f23cbc066f2771f8b0ab}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac4382fa969a0f23cbc066f2771f8b0ab}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopPreview@{stopPreview}}
\index{stopPreview@{stopPreview}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopPreview()}{stopPreview()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Preview (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the local video preview for specific source type. 
\begin{DoxyParams}{Parameters}
{\em source\+Type} & -\/ The video source type. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_adb3ab7a20afca02f5a5ab6fafe026f2b}\label{classagora_1_1rtc_1_1_i_rtc_engine_adb3ab7a20afca02f5a5ab6fafe026f2b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startLastmileProbeTest@{startLastmileProbeTest}}
\index{startLastmileProbeTest@{startLastmileProbeTest}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startLastmileProbeTest()}{startLastmileProbeTest()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Lastmile\+Probe\+Test (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_lastmile_probe_config}{Lastmile\+Probe\+Config}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts the last-\/mile network probe test.

This method starts the last-\/mile network probe test before joining a channel to get the uplink and downlink last-\/mile network statistics, including the bandwidth, packet loss, jitter, and round-\/trip time (R\+TT).

Call this method to check the uplink network quality before users join a channel or before an audience switches to a host. Once this method is enabled, the S\+DK returns the following callbacks\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ac7e14d1a26eb35ef236a0662d28d2b33}{on\+Lastmile\+Quality}}\+: the S\+DK triggers this callback depending on the network conditions. This callback rates the network conditions and is more closely linked to the user experience.
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a44134dfda5d412831fa8e44fa533fca5}{on\+Lastmile\+Probe\+Result}}\+: the S\+DK triggers this callback within 30 seconds depending on the network conditions. This callback returns the real-\/time statistics of the network conditions and is more objective.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Do not call other methods before receiving the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ac7e14d1a26eb35ef236a0662d28d2b33}{on\+Lastmile\+Quality}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a44134dfda5d412831fa8e44fa533fca5}{on\+Lastmile\+Probe\+Result}} callbacks. Otherwise, the callbacks may be interrupted.
\item In the Live-\/broadcast profile, a host should not call this method after joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

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

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a94f3494035429684a750e1dee7ef1593}\label{classagora_1_1rtc_1_1_i_rtc_engine_a94f3494035429684a750e1dee7ef1593}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopLastmileProbeTest@{stopLastmileProbeTest}}
\index{stopLastmileProbeTest@{stopLastmileProbeTest}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopLastmileProbeTest()}{stopLastmileProbeTest()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Lastmile\+Probe\+Test (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the last-\/mile network probe test. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a9bcbdcee0b5c52f96b32baec1922cf2e}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9bcbdcee0b5c52f96b32baec1922cf2e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVideoEncoderConfiguration@{setVideoEncoderConfiguration}}
\index{setVideoEncoderConfiguration@{setVideoEncoderConfiguration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoEncoderConfiguration()}{setVideoEncoderConfiguration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Video\+Encoder\+Configuration (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_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{classagora_1_1rtc_1_1_i_rtc_engine_a3823039f3d9749fda1c988659a3f3ead}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3823039f3d9749fda1c988659a3f3ead}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setBeautyEffectOptions@{setBeautyEffectOptions}}
\index{setBeautyEffectOptions@{setBeautyEffectOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setBeautyEffectOptions()}{setBeautyEffectOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Beauty\+Effect\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_beauty_options}{Beauty\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables/\+Disables image enhancement and sets the options.

\begin{DoxyNote}{Note}
Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable image enhancement\+:
\begin{DoxyItemize}
\item true\+: enables image enhancement.
\item false\+: disables image enhancement. 
\end{DoxyItemize}\\
\hline
{\em options} & Sets the image enhancement option. See \mbox{\hyperlink{structagora_1_1rtc_1_1_beauty_options}{Beauty\+Options}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2f2ed2bc4e091502857a5a10be604b31}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2f2ed2bc4e091502857a5a10be604b31}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}}
\index{setFaceShapeBeautyOptions@{setFaceShapeBeautyOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeBeautyOptions()}{setFaceShapeBeautyOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

\begin{DoxyNote}{Note}
Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether or not to enable face shape\+:
\begin{DoxyItemize}
\item true\+: enables face shape.
\item false\+: disables face shape. 
\end{DoxyItemize}\\
\hline
{\em options} & Sets the face shape beauty option. See \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8a7d8cc8ea8642453cd0fd7cea9c1b36}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8a7d8cc8ea8642453cd0fd7cea9c1b36}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setFaceShapeAreaOptions@{setFaceShapeAreaOptions}}
\index{setFaceShapeAreaOptions@{setFaceShapeAreaOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setFaceShapeAreaOptions()}{setFaceShapeAreaOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables/\+Disables face shape and sets the area options.

\begin{DoxyNote}{Note}
Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a2f2ed2bc4e091502857a5a10be604b31}{set\+Face\+Shape\+Beauty\+Options}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & Sets the face shape area option. See \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a35ce3e99fcaecfb6f73e1c07f3edaccc}\label{classagora_1_1rtc_1_1_i_rtc_engine_a35ce3e99fcaecfb6f73e1c07f3edaccc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}}
\index{getFaceShapeBeautyOptions@{getFaceShapeBeautyOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeBeautyOptions()}{getFaceShapeBeautyOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Face\+Shape\+Beauty\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the face shape beauty options.

\begin{DoxyNote}{Note}
Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em options} & Gets the face shape beauty option. See \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_beauty_options}{Face\+Shape\+Beauty\+Options}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a0c31f6ae7a49d94e70bb50a410e241b3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a0c31f6ae7a49d94e70bb50a410e241b3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getFaceShapeAreaOptions@{getFaceShapeAreaOptions}}
\index{getFaceShapeAreaOptions@{getFaceShapeAreaOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getFaceShapeAreaOptions()}{getFaceShapeAreaOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Face\+Shape\+Area\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options_a97f633a1f186ffda5b0311ab429b4952}{agora\+::rtc\+::\+Face\+Shape\+Area\+Options\+::\+F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+EA}}}]{shape\+Area,  }\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the face shape area options.

\begin{DoxyNote}{Note}
Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} method.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em shape\+Area} & The face area. See \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options_a97f633a1f186ffda5b0311ab429b4952}{Face\+Shape\+Area\+Options\+::\+F\+A\+C\+E\+\_\+\+S\+H\+A\+P\+E\+\_\+\+A\+R\+EA}}. \\
\hline
{\em options} & Gets the face area beauty option. See \mbox{\hyperlink{structagora_1_1rtc_1_1_face_shape_area_options}{Face\+Shape\+Area\+Options}}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a60db339363023039dda38600c1e91d20}\label{classagora_1_1rtc_1_1_i_rtc_engine_a60db339363023039dda38600c1e91d20}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setFilterEffectOptions@{setFilterEffectOptions}}
\index{setFilterEffectOptions@{setFilterEffectOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setFilterEffectOptions()}{setFilterEffectOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Filter\+Effect\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_filter_effect_options}{Filter\+Effect\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets filter effect options.

\begin{DoxySince}{Since}
v4.\+4.\+1 You can call this method to enable the filter effect feature and set the options of the filter effect.
\end{DoxySince}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the following dynamic library into your project\+:
\begin{DoxyItemize}
\item Android\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}
\item i\+O\+S/mac\+OS\+: {\ttfamily Agora\+Clear\+Vision\+Extension.\+xcframework}
\item Windows\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+dll}
\end{DoxyItemize}
\item Call this method after calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled.} & Whether to enable filter effect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable.
\item {\ttfamily false}\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em options.} & Set the filter effect options. See \mbox{\hyperlink{structagora_1_1rtc_1_1_filter_effect_options}{Filter\+Effect\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_abbc47eef63740189f9ee6a02d8f231da}\label{classagora_1_1rtc_1_1_i_rtc_engine_abbc47eef63740189f9ee6a02d8f231da}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLowlightEnhanceOptions@{setLowlightEnhanceOptions}}
\index{setLowlightEnhanceOptions@{setLowlightEnhanceOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLowlightEnhanceOptions()}{setLowlightEnhanceOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Lowlight\+Enhance\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_lowlight_enhance_options}{Lowlight\+Enhance\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets low-\/light enhancement.

\begin{DoxySince}{Since}
v4.\+0.\+0
\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 following dynamic library into your project\+:
\begin{DoxyItemize}
\item Android\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}
\item i\+O\+S/mac\+OS\+: {\ttfamily Agora\+Clear\+Vision\+Extension.\+xcframework}
\item Windows\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+dll}
\end{DoxyItemize}
\item Call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{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{structagora_1_1rtc_1_1_lowlight_enhance_options}{Lowlight\+Enhance\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab1a6aabdd8a30919cca75ce27fd9f108}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab1a6aabdd8a30919cca75ce27fd9f108}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVideoDenoiserOptions@{setVideoDenoiserOptions}}
\index{setVideoDenoiserOptions@{setVideoDenoiserOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoDenoiserOptions()}{setVideoDenoiserOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Video\+Denoiser\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_denoiser_options}{Video\+Denoiser\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets video noise reduction.

\begin{DoxySince}{Since}
v4.\+0.\+0
\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 following dynamic library into your project\+:
\begin{DoxyItemize}
\item Android\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}
\item i\+O\+S/mac\+OS\+: {\ttfamily Agora\+Clear\+Vision\+Extension.\+xcframework}
\item Windows\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+dll}
\end{DoxyItemize}
\item Call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{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{structagora_1_1rtc_1_1_video_denoiser_options}{Video\+Denoiser\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a4275673ad9f1b717222e2339b3aaac2f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4275673ad9f1b717222e2339b3aaac2f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setColorEnhanceOptions@{setColorEnhanceOptions}}
\index{setColorEnhanceOptions@{setColorEnhanceOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setColorEnhanceOptions()}{setColorEnhanceOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Color\+Enhance\+Options (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_color_enhance_options}{Color\+Enhance\+Options}} \&}]{options,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets color enhancement.

\begin{DoxySince}{Since}
v4.\+0.\+0
\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 following dynamic library into your project\+:
\begin{DoxyItemize}
\item Android\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+so}
\item i\+O\+S/mac\+OS\+: {\ttfamily Agora\+Clear\+Vision\+Extension.\+xcframework}
\item Windows\+: {\ttfamily libagora\+\_\+clear\+\_\+vision\+\_\+extension.\+dll}
\end{DoxyItemize}
\item Call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{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{structagora_1_1rtc_1_1_color_enhance_options}{Color\+Enhance\+Options}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a704ef3e98e918bb2d3b1740bb2a6f6eb}\label{classagora_1_1rtc_1_1_i_rtc_engine_a704ef3e98e918bb2d3b1740bb2a6f6eb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableVirtualBackground@{enableVirtualBackground}}
\index{enableVirtualBackground@{enableVirtualBackground}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVirtualBackground()}{enableVirtualBackground()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Virtual\+Background (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_virtual_background_source}{Virtual\+Background\+Source}}}]{background\+Source,  }\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_segmentation_property}{Segmentation\+Property}}}]{segproperty,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:PRIMARY\+\_\+CAMERA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables/\+Disables the virtual background. (beta function)

\begin{DoxySince}{Since}
v3.\+7.\+200
\end{DoxySince}
After enabling the virtual background function, you can replace the original background image of the local user with a custom background image. After the replacement, all users in the channel can see the custom background image.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Before calling this method, ensure that you have integrated the {\ttfamily libagora\+\_\+segmentation\+\_\+extension.\+dll} (Windows)/{\ttfamily Agora\+Video\+Segmentation\+Extension.\+framework} (mac\+OS) dynamic library into the project folder.
\item Call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}}.
\item This function requires a high-\/performance device. Agora recommends that you use this function on devices with an i5 C\+PU and better.
\item Agora recommends that you use this function in scenarios that meet the following conditions\+:
\begin{DoxyItemize}
\item A high-\/definition camera device is used, and the environment is uniformly lit.
\item The captured video image is uncluttered, the user\textquotesingle{}s portrait is half-\/length and largely unobstructed, and the background is a single color that differs from the color of the user\textquotesingle{}s clothing.
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable the virtual background\+:
\begin{DoxyItemize}
\item true\+: Enable.
\item false\+: Disable. 
\end{DoxyItemize}\\
\hline
{\em background\+Source} & The custom background image. See \mbox{\hyperlink{structagora_1_1rtc_1_1_virtual_background_source}{Virtual\+Background\+Source}}. {\bfseries{Note}}\+: To adapt the resolution of the custom background image to the resolution of the S\+DK capturing video, the S\+DK scales and crops the custom background image while ensuring that the content of the custom background image is not distorted.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac166814787b0a1d8da5f5c632dd7cdcf}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac166814787b0a1d8da5f5c632dd7cdcf}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setupRemoteVideo@{setupRemoteVideo}}
\index{setupRemoteVideo@{setupRemoteVideo}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setupRemoteVideo()}{setupRemoteVideo()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::setup\+Remote\+Video (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}} \&}]{canvas }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a985a675469baf9d54feb8781732e0ca8}{on\+User\+Joined}} callback.

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

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

\begin{DoxyParams}{Parameters}
{\em canvas} & The remote video view settings\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int 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\+\_\+\+S\+U\+C\+C\+E\+SS = 0, 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, 
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a744003a9c0230684e985e42d14361f28}\label{classagora_1_1rtc_1_1_i_rtc_engine_a744003a9c0230684e985e42d14361f28}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setupLocalVideo@{setupLocalVideo}}
\index{setupLocalVideo@{setupLocalVideo}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setupLocalVideo()}{setupLocalVideo()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::setup\+Local\+Video (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}} \&}]{canvas }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{structagora_1_1rtc_1_1_video_canvas}{Video\+Canvas}} as {\ttfamily null}.

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

\begin{DoxyParams}{Parameters}
{\em canvas} & The local video view setting\+: \mbox{\hyperlink{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_acfbbb5486c091896605ee94254ab0665}\label{classagora_1_1rtc_1_1_i_rtc_engine_acfbbb5486c091896605ee94254ab0665}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVideoScenario@{setVideoScenario}}
\index{setVideoScenario@{setVideoScenario}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoScenario()}{setVideoScenario()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Video\+Scenario (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+A\+P\+P\+L\+I\+C\+A\+T\+I\+O\+N\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE}]{scenario\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the Video application scenario.

\begin{DoxySince}{Since}
v4.\+2.\+0
\end{DoxySince}
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. See \#\+Application\+Scenario\+Type.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\item E\+R\+R\+\_\+\+F\+A\+I\+L\+ED (1)\+: A general error occurs (no specified reason).
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED (4)\+: Unable to set video application scenario.
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_add24d11a66e2afe95253e01ffe2002a5}\label{classagora_1_1rtc_1_1_i_rtc_engine_add24d11a66e2afe95253e01ffe2002a5}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVideoQoEPreference@{setVideoQoEPreference}}
\index{setVideoQoEPreference@{setVideoQoEPreference}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVideoQoEPreference()}{setVideoQoEPreference()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Video\+Qo\+E\+Preference (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+Q\+O\+E\+\_\+\+P\+R\+E\+F\+E\+R\+E\+N\+C\+E\+\_\+\+T\+Y\+PE}]{qoe\+Preference }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the video qoe preference.

\begin{DoxySince}{Since}
v4.\+2.\+1
\end{DoxySince}
You can call this method to set the expected QoE Preference. The S\+DK will optimize the video experience for each preference you set.


\begin{DoxyParams}{Parameters}
{\em qoe\+Preference} & The qoe preference type. See \#\+V\+I\+D\+E\+O\+\_\+\+Q\+O\+E\+\_\+\+P\+R\+E\+F\+E\+R\+E\+N\+C\+E\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\item E\+R\+R\+\_\+\+F\+A\+I\+L\+ED (1)\+: A general error occurs (no specified reason).
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+ED (4)\+: Unable to set video application scenario.
\item E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+N\+I\+T\+I\+A\+L\+I\+Z\+ED (7)\+: The S\+DK is not initialized. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a996401c7ba33c6ec59527c5d109f548f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a996401c7ba33c6ec59527c5d109f548f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableAudio@{enableAudio}}
\index{enableAudio@{enableAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudio()}{enableAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a1929f01411e983ed776275fe8e8ad45e}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1929f01411e983ed776275fe8e8ad45e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!disableAudio@{disableAudio}}
\index{disableAudio@{disableAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{disableAudio()}{disableAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::disable\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioProfile@{setAudioProfile}}
\index{setAudioProfile@{setAudioProfile}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioProfile()}{setAudioProfile()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Profile (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE}]{profile,  }\item[{A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE}]{scenario }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio parameters and application scenarios.

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000027}{Deprecated}}]This method is deprecated. You can use the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe8ac8023a1ef976fc983213308b80f3}{set\+Audio\+Profile}} method instead. To set the audio scenario, call the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}{initialize}} method and pass value in the {\ttfamily audio\+Scenario} member in the \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_engine_context}{Rtc\+Engine\+Context}} struct.\end{DoxyRefDesc}


\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before calling the {\ttfamily join\+Channel} method.
\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\+: \#\+A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em scenario} & Sets the audio application scenarios\+: \#\+A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_afe8ac8023a1ef976fc983213308b80f3}\label{classagora_1_1rtc_1_1_i_rtc_engine_afe8ac8023a1ef976fc983213308b80f3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioProfile@{setAudioProfile}}
\index{setAudioProfile@{setAudioProfile}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioProfile()}{setAudioProfile()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Profile (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio profile.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before calling the {\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 the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}{initialize}} method and pass value in the {\ttfamily audio\+Scenario} member in the \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_engine_context}{Rtc\+Engine\+Context}} struct.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em profile} & The audio profile, such as the sample rate, bitrate and codec type\+: \#\+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{classagora_1_1rtc_1_1_i_rtc_engine_a81ae6611cdcdf32cf3e402fd64e364ef}\label{classagora_1_1rtc_1_1_i_rtc_engine_a81ae6611cdcdf32cf3e402fd64e364ef}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioScenario@{setAudioScenario}}
\index{setAudioScenario@{setAudioScenario}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioScenario()}{setAudioScenario()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Scenario (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE}]{scenario }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Set the audio scenario.


\begin{DoxyParams}{Parameters}
{\em scenario} & The audio scenario\+: \#\+A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa61051d91823a69fe6b04b5f541a8080}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa61051d91823a69fe6b04b5f541a8080}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableLocalAudio@{enableLocalAudio}}
\index{enableLocalAudio@{enableLocalAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableLocalAudio()}{enableLocalAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Local\+Audio (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a08a34d5b85a225390a18467c92a7b6f9}\label{classagora_1_1rtc_1_1_i_rtc_engine_a08a34d5b85a225390a18467c92a7b6f9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteLocalAudioStream@{muteLocalAudioStream}}
\index{muteLocalAudioStream@{muteLocalAudioStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteLocalAudioStream()}{muteLocalAudioStream()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+Local\+Audio\+Stream (\begin{DoxyParamCaption}\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops or resumes sending the local audio stream.

After calling this method successfully, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aa168380f86f1dc2df1c269a785c56612}{on\+Remote\+Audio\+State\+Changed}} callback with the following parameters\+:
\begin{DoxyItemize}
\item R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+O\+P\+P\+E\+D(0) and R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+M\+U\+T\+E\+D(5).
\item R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+T\+E\+\_\+\+D\+E\+C\+O\+D\+I\+N\+G(2) and R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+R\+E\+A\+S\+O\+N\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+U\+N\+M\+U\+T\+E\+D(6).
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item When {\ttfamily mute} is set as {\ttfamily true}, this method does not disable the microphone, which does not affect any ongoing recording.
\item If you call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aab53788c74da25080bad61f0525d12ae}{set\+Channel\+Profile}} after this method, the S\+DK resets whether or not to mute the local audio according to the channel profile and user role. Therefore, we recommend calling this method after the {\ttfamily set\+Channel\+Profile} method.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mute} & 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{classagora_1_1rtc_1_1_i_rtc_engine_ac061a3c81eba2d203a7511e59466e6a0}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac061a3c81eba2d203a7511e59466e6a0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteAllRemoteAudioStreams@{muteAllRemoteAudioStreams}}
\index{muteAllRemoteAudioStreams@{muteAllRemoteAudioStreams}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteAllRemoteAudioStreams()}{muteAllRemoteAudioStreams()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+All\+Remote\+Audio\+Streams (\begin{DoxyParamCaption}\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops or resumes receiving all remote audio stream.

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{structagora_1_1rtc_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 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 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 mute\+All\+Remote\+Audio\+Streams(true), you can take the following actions\+:
\begin{DoxyItemize}
\item To resume receiving all remote audio streams, call mute\+All\+Remote\+Audio\+Streams(false).
\item To resume receiving the audio stream of a specified user, call mute\+Remote\+Audio\+Stream(uid, false), where 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a996401c7ba33c6ec59527c5d109f548f}{enable\+Audio}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1929f01411e983ed776275fe8e8ad45e}{disable\+Audio}}. Settings in mute\+All\+Remote\+Audio\+Streams stop taking effect if either of the following occurs\+:
\begin{DoxyItemize}
\item Calling {\ttfamily enable\+Audio} after mute\+All\+Remote\+Audio\+Streams(true).
\item Calling {\ttfamily disable\+Audio} after 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 \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} class. 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mute} & 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{classagora_1_1rtc_1_1_i_rtc_engine_a3dcf5cb6eea02d3e7b9da2638c510ca3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3dcf5cb6eea02d3e7b9da2638c510ca3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteRemoteAudioStream@{muteRemoteAudioStream}}
\index{muteRemoteAudioStream@{muteRemoteAudioStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRemoteAudioStream()}{muteRemoteAudioStream()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+Remote\+Audio\+Stream (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops or resumes receiving the audio stream of a specified user.

\begin{DoxyNote}{Note}
You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the specified user. \\
\hline
{\em mute} & Whether to stop receiving the audio stream of the specified user\+:
\begin{DoxyItemize}
\item true\+: Stop receiving the audio stream of the specified user.
\item false\+: (Default) Resume receiving the audio stream of the specified user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7707fb7110c72637ee98f659e8b796e9}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7707fb7110c72637ee98f659e8b796e9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteLocalVideoStream@{muteLocalVideoStream}}
\index{muteLocalVideoStream@{muteLocalVideoStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteLocalVideoStream()}{muteLocalVideoStream()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+Local\+Video\+Stream (\begin{DoxyParamCaption}\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops or resumes sending the local video stream.


\begin{DoxyParams}{Parameters}
{\em mute} & 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{classagora_1_1rtc_1_1_i_rtc_engine_a1877bb2aa655bbcbed57ffadd6424e51}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1877bb2aa655bbcbed57ffadd6424e51}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableLocalVideo@{enableLocalVideo}}
\index{enableLocalVideo@{enableLocalVideo}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableLocalVideo()}{enableLocalVideo()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Local\+Video (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

Once you enable the video using \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{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{classagora_1_1rtc_1_1_i_rtc_engine_a897a09788641f26252be642bb7045ee4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a897a09788641f26252be642bb7045ee4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteAllRemoteVideoStreams@{muteAllRemoteVideoStreams}}
\index{muteAllRemoteVideoStreams@{muteAllRemoteVideoStreams}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteAllRemoteVideoStreams()}{muteAllRemoteVideoStreams()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+All\+Remote\+Video\+Streams (\begin{DoxyParamCaption}\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{structagora_1_1rtc_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 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 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 mute\+All\+Remote\+Video\+Streams(true), you can take the following actions\+:
\begin{DoxyItemize}
\item To resume receiving all remote video streams, call mute\+All\+Remote\+Video\+Streams(false).
\item To resume receiving the video stream of a specified user, call mute\+Remote\+Video\+Stream(uid, false), where 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac8eca0135b3ab7cecb84e2b81b89a85d}{disable\+Video}}. Settings in mute\+All\+Remote\+Video\+Streams stop taking effect if either of the following occurs\+:
\begin{DoxyItemize}
\item Calling {\ttfamily enable\+Video} after mute\+All\+Remote\+Video\+Streams(true).
\item Calling {\ttfamily disable\+Video} after 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{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} class. 
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em mute} & Whether to stop receiving remote video streams\+:
\begin{DoxyItemize}
\item true\+: Stop receiving any remote video stream.
\item false\+: (Default) 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{classagora_1_1rtc_1_1_i_rtc_engine_a9c7430fc0d692ad67e76b2a544deb354}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9c7430fc0d692ad67e76b2a544deb354}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}}
\index{setRemoteDefaultVideoStreamType@{setRemoteDefaultVideoStreamType}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteDefaultVideoStreamType()}{setRemoteDefaultVideoStreamType()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Default\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \#\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a00bda165de0a9e8558495bea18b1ee72}\label{classagora_1_1rtc_1_1_i_rtc_engine_a00bda165de0a9e8558495bea18b1ee72}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteRemoteVideoStream@{muteRemoteVideoStream}}
\index{muteRemoteVideoStream@{muteRemoteVideoStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRemoteVideoStream()}{muteRemoteVideoStream()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+Remote\+Video\+Stream (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops or resumes receiving the video stream of a specified user.

\begin{DoxyNote}{Note}
You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the specified user. \\
\hline
{\em mute} & 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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteVideoStreamType@{setRemoteVideoStreamType}}
\index{setRemoteVideoStreamType@{setRemoteVideoStreamType}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVideoStreamType()}{setRemoteVideoStreamType()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Video\+Stream\+Type (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE}]{stream\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a3f67e39e02e64ffe4197ba243e71a2cf}{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\+: \#\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a9aa3a3c0ceaeaa889cc73173044c305d}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9aa3a3c0ceaeaa889cc73173044c305d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteVideoSubscriptionOptions@{setRemoteVideoSubscriptionOptions}}
\index{setRemoteVideoSubscriptionOptions@{setRemoteVideoSubscriptionOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVideoSubscriptionOptions()}{setRemoteVideoSubscriptionOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Video\+Subscription\+Options (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_subscription_options}{Video\+Subscription\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the remote video subscription options


\begin{DoxyParams}{Parameters}
{\em uid} & ID of the remote user sending the video stream. \\
\hline
{\em options} & Sets the video subscription options. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a1438e53a4bc22443e2918c8b05208222}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1438e53a4bc22443e2918c8b05208222}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setSubscribeAudioBlocklist@{setSubscribeAudioBlocklist}}
\index{setSubscribeAudioBlocklist@{setSubscribeAudioBlocklist}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeAudioBlocklist()}{setSubscribeAudioBlocklist()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Subscribe\+Audio\+Blocklist (\begin{DoxyParamCaption}\item[{uid\+\_\+t $\ast$}]{uid\+List,  }\item[{int}]{uid\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the blocklist of subscribe remote stream audio.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users whose audio you do not want to subscribe to. \\
\hline
{\em uid\+Number} & The number of uid in uid\+List.\\
\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{classagora_1_1rtc_1_1_i_rtc_engine_a1c67bbf6f21f063db837c8b8a8b3caa4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1c67bbf6f21f063db837c8b8a8b3caa4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setSubscribeAudioAllowlist@{setSubscribeAudioAllowlist}}
\index{setSubscribeAudioAllowlist@{setSubscribeAudioAllowlist}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeAudioAllowlist()}{setSubscribeAudioAllowlist()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Subscribe\+Audio\+Allowlist (\begin{DoxyParamCaption}\item[{uid\+\_\+t $\ast$}]{uid\+List,  }\item[{int}]{uid\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the allowlist of subscribe remote stream audio.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users whose audio you want to subscribe to. \\
\hline
{\em uid\+Number} & The number of uid in uid\+List.\\
\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, only the blocklist takes effect.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac29e3a697f157afdaf7e5ed831c072a7}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac29e3a697f157afdaf7e5ed831c072a7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setSubscribeVideoBlocklist@{setSubscribeVideoBlocklist}}
\index{setSubscribeVideoBlocklist@{setSubscribeVideoBlocklist}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeVideoBlocklist()}{setSubscribeVideoBlocklist()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Subscribe\+Video\+Blocklist (\begin{DoxyParamCaption}\item[{uid\+\_\+t $\ast$}]{uid\+List,  }\item[{int}]{uid\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the blocklist of subscribe remote stream video.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users whose video you do not want to subscribe to. \\
\hline
{\em uid\+Number} & The number of uid in uid\+List.\\
\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{classagora_1_1rtc_1_1_i_rtc_engine_ae2f201fe42cb9b580e30b9e638faa4a1}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae2f201fe42cb9b580e30b9e638faa4a1}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setSubscribeVideoAllowlist@{setSubscribeVideoAllowlist}}
\index{setSubscribeVideoAllowlist@{setSubscribeVideoAllowlist}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setSubscribeVideoAllowlist()}{setSubscribeVideoAllowlist()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Subscribe\+Video\+Allowlist (\begin{DoxyParamCaption}\item[{uid\+\_\+t $\ast$}]{uid\+List,  }\item[{int}]{uid\+Number }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the allowlist of subscribe remote stream video.


\begin{DoxyParams}{Parameters}
{\em uid\+List} & The id list of users whose video you want to subscribe to. \\
\hline
{\em uid\+Number} & The number of uid in uid\+List.\\
\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 blocklist and allowlist at the same time, only the blocklist takes effect.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a23981734852c4171c6e55f3ff910cde3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a23981734852c4171c6e55f3ff910cde3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableAudioVolumeIndication@{enableAudioVolumeIndication}}
\index{enableAudioVolumeIndication@{enableAudioVolumeIndication}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudioVolumeIndication()}{enableAudioVolumeIndication()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Audio\+Volume\+Indication (\begin{DoxyParamCaption}\item[{int}]{interval,  }\item[{int}]{smooth,  }\item[{bool}]{report\+Vad }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables the {\ttfamily on\+Audio\+Volume\+Indication} callback to report on which users are speaking and the speakers\textquotesingle{} volume.

Once the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aab1184a2b276f509870c055a9ff8fac4}{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 range is \mbox{[}0, 10\mbox{]}. The greater the value, the more sensitive the indicator. The recommended value is 3. \\
\hline
{\em report\+Vad} & 
\begin{DoxyItemize}
\item {\ttfamily true}\+: Enable the voice activity detection of the local user. Once it is enabled, the {\ttfamily vad} parameter of the {\ttfamily on\+Audio\+Volume\+Indication} callback reports the voice activity status of the local user.
\item {\ttfamily false}\+: (Default) Disable the voice activity detection of the local user. Once it is disabled, the {\ttfamily vad} parameter of the {\ttfamily on\+Audio\+Volume\+Indication} callback does not report the voice activity status of the local user, except for the scenario where the engine automatically detects the voice activity of the local user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2bcdb3713d087c6318a2e1972c1e8cc6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2bcdb3713d087c6318a2e1972c1e8cc6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioRecording@{startAudioRecording}}
\index{startAudioRecording@{startAudioRecording}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioRecording()}{startAudioRecording()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Recording (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path,  }\item[{A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE}]{quality }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts an audio recording.

The S\+DK allows recording during a call, which supports either one of the following two 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{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel()}} method. The recording automatically stops when the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{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} & Sets the audio recording quality\+: \#\+A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3c05d82c97a9d63ebda116b9a1e5ca3f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3c05d82c97a9d63ebda116b9a1e5ca3f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioRecording@{startAudioRecording}}
\index{startAudioRecording@{startAudioRecording}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioRecording()}{startAudioRecording()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Recording (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path,  }\item[{int}]{sample\+Rate,  }\item[{A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE}]{quality }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts an audio recording.

The S\+DK allows recording during a call, which supports either one of the following two 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{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel()}} method. The recording automatically stops when the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{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 sample\+Rate} & Sample rate, value should be 16000, 32000, 44100, or 48000. \\
\hline
{\em quality} & Sets the audio recording quality\+: \#\+A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+Q\+U\+A\+L\+I\+T\+Y\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ace2bdbb7456d52e117e80a96c9e9b7b4}\label{classagora_1_1rtc_1_1_i_rtc_engine_ace2bdbb7456d52e117e80a96c9e9b7b4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioRecording@{startAudioRecording}}
\index{startAudioRecording@{startAudioRecording}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioRecording()}{startAudioRecording()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Recording (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_audio_recording_configuration}{Audio\+Recording\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts an audio recording.

The S\+DK allows recording during a call, which supports either one of the following two 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{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel()}} method. The recording automatically stops when the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{leave\+Channel()}} method is called.


\begin{DoxyParams}{Parameters}
{\em config} & Audio recording config. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a92470d0cf6a44deb6b720faafbca522c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a92470d0cf6a44deb6b720faafbca522c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerAudioEncodedFrameObserver@{registerAudioEncodedFrameObserver}}
\index{registerAudioEncodedFrameObserver@{registerAudioEncodedFrameObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerAudioEncodedFrameObserver()}{registerAudioEncodedFrameObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Audio\+Encoded\+Frame\+Observer (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_audio_encoded_frame_observer_config}{Audio\+Encoded\+Frame\+Observer\+Config}} \&}]{config,  }\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_audio_encoded_frame_observer}{I\+Audio\+Encoded\+Frame\+Observer}} $\ast$}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

register encoded audio frame observer \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_adb392026425663e5b9f90fe90130e5a5}\label{classagora_1_1rtc_1_1_i_rtc_engine_adb392026425663e5b9f90fe90130e5a5}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopAudioRecording@{stopAudioRecording}}
\index{stopAudioRecording@{stopAudioRecording}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAudioRecording()}{stopAudioRecording()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Audio\+Recording (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the audio recording on the client.

The recording automatically stops when the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{leave\+Channel()}} method is called.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae5fd78464db9420fdca3d493d7443bd0}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae5fd78464db9420fdca3d493d7443bd0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createMediaPlayer@{createMediaPlayer}}
\index{createMediaPlayer@{createMediaPlayer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createMediaPlayer()}{createMediaPlayer()}}
{\footnotesize\ttfamily virtual \mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$I\+Media\+Player$>$ agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Media\+Player (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Creates a media player source object and return its pointer. If full featured media player source is supported, it will create it, or it will create a simple media player.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The pointer to \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source}{I\+Media\+Player\+Source}}, if the method call succeeds.
\item The empty pointer N\+U\+LL, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a71cb948b53e2d17c13bef4a6bfa57efc}\label{classagora_1_1rtc_1_1_i_rtc_engine_a71cb948b53e2d17c13bef4a6bfa57efc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!destroyMediaPlayer@{destroyMediaPlayer}}
\index{destroyMediaPlayer@{destroyMediaPlayer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyMediaPlayer()}{destroyMediaPlayer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::destroy\+Media\+Player (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ I\+Media\+Player $>$}]{media\+\_\+player }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Destroy a media player source instance. If a media player source instance is destroyed, the video and audio of it cannot be published.


\begin{DoxyParams}{Parameters}
{\em media\+\_\+player} & The pointer to \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source}{rtc\+::\+I\+Media\+Player\+Source}}.\\
\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{classagora_1_1rtc_1_1_i_rtc_engine_ae92091361a67f144662069758bceda5a}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae92091361a67f144662069758bceda5a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createMediaRecorder@{createMediaRecorder}}
\index{createMediaRecorder@{createMediaRecorder}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createMediaRecorder()}{createMediaRecorder()}}
{\footnotesize\ttfamily virtual \mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$\mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{I\+Media\+Recorder}}$>$ agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Media\+Recorder (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_recorder_stream_info}{Recorder\+Stream\+Info}} \&}]{info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Creates a media recorder object and return its pointer.


\begin{DoxyParams}{Parameters}
{\em info} & The \mbox{\hyperlink{structagora_1_1rtc_1_1_recorder_stream_info}{Recorder\+Stream\+Info}} object. It contains the user ID and the channel name.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The pointer to \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{I\+Media\+Recorder}}, if the method call succeeds.
\item The empty pointer N\+U\+LL, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac52255dc624918588b73837c07be0ae6}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac52255dc624918588b73837c07be0ae6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!destroyMediaRecorder@{destroyMediaRecorder}}
\index{destroyMediaRecorder@{destroyMediaRecorder}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyMediaRecorder()}{destroyMediaRecorder()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::destroy\+Media\+Recorder (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1agora__refptr}{agora\+\_\+refptr}}$<$ \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{I\+Media\+Recorder}} $>$}]{media\+Recorder }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Destroy a media recorder object.


\begin{DoxyParams}{Parameters}
{\em media\+Recorder} & The pointer to \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_recorder}{rtc\+::\+I\+Media\+Recorder}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8739ebb08c6d97c1ee708889ef834d5f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8739ebb08c6d97c1ee708889ef834d5f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioMixing@{startAudioMixing}}
\index{startAudioMixing@{startAudioMixing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioMixing()}{startAudioMixing()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Mixing (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path,  }\item[{bool}]{loopback,  }\item[{int}]{cycle }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts playing and mixing the music file.

This method mixes the specified local audio file with the audio stream from the microphone. You can choose whether the other user can hear the local audio playback and specify the number of playback loops. This method also supports online music playback.

After calling this method successfully, the S\+DK triggers the

\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{on\+Audio\+Mixing\+State\+Changed}} (P\+L\+AY) callback on the local client. When the audio mixing file playback finishes after calling this method, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{on\+Audio\+Mixing\+State\+Changed}} (S\+T\+O\+P\+P\+ED) callback on the local client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel, otherwise issues may occur.
\item If the local audio mixing file does not exist, or if the S\+DK does not support the file format or cannot access the music file U\+RL, the S\+DK returns \#\+W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR (701).
\item 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\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+E\+R\+R\+O\+R\+\_\+\+T\+O\+O\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+T\+\_\+\+C\+A\+L\+L(702)} error code occurs.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & Pointer to the absolute path (including the suffixes of the filename) of the local or online audio file to mix, for example, c\+:/music/au dio.\+mp4. Supported audio formats\+: 3GP, A\+SF, A\+D\+TS, A\+VI, M\+P3, M\+P4, M\+P\+E\+G-\/4, S\+A\+MI, and W\+A\+VE. \\
\hline
{\em loopback} & Sets which user can hear the audio mixing\+:
\begin{DoxyItemize}
\item true\+: Only the local user can hear the audio mixing.
\item false\+: Both users can hear the audio mixing.
\end{DoxyItemize}\\
\hline
{\em cycle} & Sets the number of playback loops\+:
\begin{DoxyItemize}
\item Positive integer\+: Number of playback loops.
\item {\ttfamily -\/1}\+: Infinite playback loops.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a88a90b9433ec193f9821738ba55e6ec3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a88a90b9433ec193f9821738ba55e6ec3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioMixing@{startAudioMixing}}
\index{startAudioMixing@{startAudioMixing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioMixing()}{startAudioMixing()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Mixing (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path,  }\item[{bool}]{loopback,  }\item[{int}]{cycle,  }\item[{int}]{start\+Pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts playing and mixing the music file.

This method mixes the specified local audio file with the audio stream from the microphone. You can choose whether the other user can hear the local audio playback and specify the number of playback loops. This method also supports online music playback.

After calling this method successfully, the S\+DK triggers the

\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{on\+Audio\+Mixing\+State\+Changed}} (P\+L\+AY) callback on the local client. When the audio mixing file playback finishes after calling this method, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{on\+Audio\+Mixing\+State\+Changed}} (S\+T\+O\+P\+P\+ED) callback on the local client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after joining a channel, otherwise issues may occur.
\item If the local audio mixing file does not exist, or if the S\+DK does not support the file format or cannot access the music file U\+RL, the S\+DK returns \#\+W\+A\+R\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+O\+P\+E\+N\+\_\+\+E\+R\+R\+OR (701).
\item 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\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+E\+R\+R\+O\+R\+\_\+\+T\+O\+O\+\_\+\+F\+R\+E\+Q\+U\+E\+N\+T\+\_\+\+C\+A\+L\+L(702)} error code occurs.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em file\+Path} & Pointer to the absolute path (including the suffixes of the filename) of the local or online audio file to mix, for example, c\+:/music/au dio.\+mp4. Supported audio formats\+: 3GP, A\+SF, A\+D\+TS, A\+VI, M\+P3, M\+P4, M\+P\+E\+G-\/4, S\+A\+MI, and W\+A\+VE. \\
\hline
{\em loopback} & Sets which user can hear the audio mixing\+:
\begin{DoxyItemize}
\item true\+: Only the local user can hear the audio mixing.
\item false\+: Both users can hear the audio mixing.
\end{DoxyItemize}\\
\hline
{\em cycle} & Sets the number of playback loops\+:
\begin{DoxyItemize}
\item Positive integer\+: Number of playback loops.
\item {\ttfamily -\/1}\+: Infinite playback loops.
\end{DoxyItemize}\\
\hline
{\em start\+Pos} & The playback position (ms) of the music file.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2b90cbf4142c913b3efa795482713b08}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2b90cbf4142c913b3efa795482713b08}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopAudioMixing@{stopAudioMixing}}
\index{stopAudioMixing@{stopAudioMixing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAudioMixing()}{stopAudioMixing()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops 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{classagora_1_1rtc_1_1_i_rtc_engine_ab86885c38e7ee7a4b37d5bbacafcaa24}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab86885c38e7ee7a4b37d5bbacafcaa24}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!pauseAudioMixing@{pauseAudioMixing}}
\index{pauseAudioMixing@{pauseAudioMixing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAudioMixing()}{pauseAudioMixing()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::pause\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a5a9606ad7ca4995e0d37fcf1642fe401}\label{classagora_1_1rtc_1_1_i_rtc_engine_a5a9606ad7ca4995e0d37fcf1642fe401}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!resumeAudioMixing@{resumeAudioMixing}}
\index{resumeAudioMixing@{resumeAudioMixing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAudioMixing()}{resumeAudioMixing()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::resume\+Audio\+Mixing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a21e4aa7b76079be0f91f19acd5e9c42b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a21e4aa7b76079be0f91f19acd5e9c42b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!selectAudioTrack@{selectAudioTrack}}
\index{selectAudioTrack@{selectAudioTrack}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{selectAudioTrack()}{selectAudioTrack()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::select\+Audio\+Track (\begin{DoxyParamCaption}\item[{int}]{index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Select audio track for 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{classagora_1_1rtc_1_1_i_rtc_engine_a7d365b13d852a46192c663440c598304}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7d365b13d852a46192c663440c598304}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getAudioTrackCount@{getAudioTrackCount}}
\index{getAudioTrackCount@{getAudioTrackCount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioTrackCount()}{getAudioTrackCount()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Audio\+Track\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Get audio track count of the music file.

Call this method when you are in a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: Audio track count of the music file, if the method call is successful.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a544aee96b789ac5a57d26b61b7e1a5fa}\label{classagora_1_1rtc_1_1_i_rtc_engine_a544aee96b789ac5a57d26b61b7e1a5fa}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustAudioMixingVolume@{adjustAudioMixingVolume}}
\index{adjustAudioMixingVolume@{adjustAudioMixingVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingVolume()}{adjustAudioMixingVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Audio\+Mixing\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Adjusts the volume during audio mixing.

Call this method when you are in a channel.

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

\begin{DoxyParams}{Parameters}
{\em volume} & The 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{classagora_1_1rtc_1_1_i_rtc_engine_a9fafbaaf39578810ec9c11360fc7f027}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9fafbaaf39578810ec9c11360fc7f027}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustAudioMixingPublishVolume@{adjustAudioMixingPublishVolume}}
\index{adjustAudioMixingPublishVolume@{adjustAudioMixingPublishVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingPublishVolume()}{adjustAudioMixingPublishVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Audio\+Mixing\+Publish\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_aa65e55a9a331cfd32b36d8847a9631a4}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa65e55a9a331cfd32b36d8847a9631a4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getAudioMixingPublishVolume@{getAudioMixingPublishVolume}}
\index{getAudioMixingPublishVolume@{getAudioMixingPublishVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingPublishVolume()}{getAudioMixingPublishVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Audio\+Mixing\+Publish\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a8677c3f3160927d25d9814a88ab06da6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8677c3f3160927d25d9814a88ab06da6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustAudioMixingPlayoutVolume@{adjustAudioMixingPlayoutVolume}}
\index{adjustAudioMixingPlayoutVolume@{adjustAudioMixingPlayoutVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustAudioMixingPlayoutVolume()}{adjustAudioMixingPlayoutVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Audio\+Mixing\+Playout\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_aed9dda5a7b2683776f41f6ba0e1f281c}\label{classagora_1_1rtc_1_1_i_rtc_engine_aed9dda5a7b2683776f41f6ba0e1f281c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getAudioMixingPlayoutVolume@{getAudioMixingPlayoutVolume}}
\index{getAudioMixingPlayoutVolume@{getAudioMixingPlayoutVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingPlayoutVolume()}{getAudioMixingPlayoutVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Audio\+Mixing\+Playout\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a6a87b6b9135a6f45095dcf6aa62295cb}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6a87b6b9135a6f45095dcf6aa62295cb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getAudioMixingDuration@{getAudioMixingDuration}}
\index{getAudioMixingDuration@{getAudioMixingDuration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingDuration()}{getAudioMixingDuration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Audio\+Mixing\+Duration (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the duration (ms) of the music file.

Call this A\+PI 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{classagora_1_1rtc_1_1_i_rtc_engine_aae54b86e9e6a7c0ed955b96f011855cb}\label{classagora_1_1rtc_1_1_i_rtc_engine_aae54b86e9e6a7c0ed955b96f011855cb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getAudioMixingCurrentPosition@{getAudioMixingCurrentPosition}}
\index{getAudioMixingCurrentPosition@{getAudioMixingCurrentPosition}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getAudioMixingCurrentPosition()}{getAudioMixingCurrentPosition()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Audio\+Mixing\+Current\+Position (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

Call this method when you are in a channel.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: The current playback position of the audio mixing, if this method call succeeds.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6c69e2229c438fd587b8f81df34214ad}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6c69e2229c438fd587b8f81df34214ad}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioMixingPosition@{setAudioMixingPosition}}
\index{setAudioMixingPosition@{setAudioMixingPosition}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingPosition()}{setAudioMixingPosition()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Mixing\+Position (\begin{DoxyParamCaption}\item[{int}]{pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the playback position 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{classagora_1_1rtc_1_1_i_rtc_engine_a4e7f7adc91ae46996f19c975357370e7}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4e7f7adc91ae46996f19c975357370e7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioMixingDualMonoMode@{setAudioMixingDualMonoMode}}
\index{setAudioMixingDualMonoMode@{setAudioMixingDualMonoMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingDualMonoMode()}{setAudioMixingDualMonoMode()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Mixing\+Dual\+Mono\+Mode (\begin{DoxyParamCaption}\item[{media\+::\+A\+U\+D\+I\+O\+\_\+\+M\+I\+X\+I\+N\+G\+\_\+\+D\+U\+A\+L\+\_\+\+M\+O\+N\+O\+\_\+\+M\+O\+DE}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a26b117f7e097801b03522f7da9257425}\label{classagora_1_1rtc_1_1_i_rtc_engine_a26b117f7e097801b03522f7da9257425}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioMixingPitch@{setAudioMixingPitch}}
\index{setAudioMixingPitch@{setAudioMixingPitch}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioMixingPitch()}{setAudioMixingPitch()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Mixing\+Pitch (\begin{DoxyParamCaption}\item[{int}]{pitch }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the pitch of the local music file.

When a local music file is mixed with a local human voice, call this method to set the pitch of the local music file only.

\begin{DoxyNote}{Note}
Call this method after calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8739ebb08c6d97c1ee708889ef834d5f}{start\+Audio\+Mixing}} and receiving the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{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.
\end{DoxyNote}

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

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

Sets the playback speed of the current music file.

\begin{DoxyNote}{Note}
Call this method after calling start\+Audio\+Mixing \mbox{[}2/2\mbox{]} and receiving the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ae2e257d7bbf120b970b600b9b3731a07}{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.
\end{DoxyNote}

\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{classagora_1_1rtc_1_1_i_rtc_engine_a0e9787c57db5b5e8fcc53ef5bb6d24c7}\label{classagora_1_1rtc_1_1_i_rtc_engine_a0e9787c57db5b5e8fcc53ef5bb6d24c7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getEffectsVolume@{getEffectsVolume}}
\index{getEffectsVolume@{getEffectsVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectsVolume()}{getEffectsVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Effects\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the volume of audio effects.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: The volume of audio effects. The value ranges between 0 and 100 (original volume).
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_add9a7fd856700acd288d47ff3c7da19d}\label{classagora_1_1rtc_1_1_i_rtc_engine_add9a7fd856700acd288d47ff3c7da19d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setEffectsVolume@{setEffectsVolume}}
\index{setEffectsVolume@{setEffectsVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setEffectsVolume()}{setEffectsVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Effects\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the volume of audio effects.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of audio effects. The value ranges between 0 and 100 (original volume).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!preloadEffect@{preloadEffect}}
\index{preloadEffect@{preloadEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{preloadEffect()}{preloadEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::preload\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{const char $\ast$}]{file\+Path,  }\item[{int}]{start\+Pos = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{play\+Effect}} to play the preloaded audio effect or call \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aba9b070620c7e7659841dd6f94331941}{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{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}\label{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!playEffect@{playEffect}}
\index{playEffect@{playEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{playEffect()}{playEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::play\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{const char $\ast$}]{file\+Path,  }\item[{int}]{loop\+Count,  }\item[{double}]{pitch,  }\item[{double}]{pan,  }\item[{int}]{gain,  }\item[{bool}]{publish = {\ttfamily false},  }\item[{int}]{start\+Pos = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Plays a specified audio effect.

After calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}{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{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad74eb7c7799b8762bff2b1e7e7bba8b9}{stop\+Effect}} or \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a888ecfec4fda81831988898420d60e49}{stop\+All\+Effects}}
\item {\ttfamily 0}\+: Play the audio effect once.
\item {\ttfamily 1}\+: Play the audio effect twice. 
\end{DoxyItemize}\\
\hline
{\em pitch} & The pitch of the audio effect. The value ranges between 0.\+5 and 2.\+0. The default value is {\ttfamily 1.\+0} (original pitch). The lower the value, the lower the pitch. \\
\hline
{\em pan} & The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:
\begin{DoxyItemize}
\item {\ttfamily -\/1.\+0}\+: The audio effect displays to the left.
\item {\ttfamily 0.\+0}\+: The audio effect displays ahead.
\item {\ttfamily 1.\+0}\+: The audio effect displays to the right. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the audio effect. The value ranges between 0 and 100. The default value is {\ttfamily 100} (original volume). The lower the value, the lower the volume of the audio effect. \\
\hline
{\em publish} & Sets whether to publish the audio effect to the remote\+:
\begin{DoxyItemize}
\item true\+: Publish the audio effect to the remote.
\item false\+: (Default) Do not publish the audio effect to the remote.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aba9b070620c7e7659841dd6f94331941}\label{classagora_1_1rtc_1_1_i_rtc_engine_aba9b070620c7e7659841dd6f94331941}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!playAllEffects@{playAllEffects}}
\index{playAllEffects@{playAllEffects}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{playAllEffects()}{playAllEffects()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::play\+All\+Effects (\begin{DoxyParamCaption}\item[{int}]{loop\+Count,  }\item[{double}]{pitch,  }\item[{double}]{pan,  }\item[{int}]{gain,  }\item[{bool}]{publish = {\ttfamily false} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Plays all audio effects.

After calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a075dd8a712ecd5f610004ca1bc089d4b}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ad74eb7c7799b8762bff2b1e7e7bba8b9}{stop\+Effect}} or \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a888ecfec4fda81831988898420d60e49}{stop\+All\+Effects}}
\item {\ttfamily 0}\+: Play the audio effect once.
\item {\ttfamily 1}\+: Play the audio effect twice. 
\end{DoxyItemize}\\
\hline
{\em pitch} & The pitch of the audio effect. The value ranges between 0.\+5 and 2.\+0. The default value is {\ttfamily 1.\+0} (original pitch). The lower the value, the lower the pitch. \\
\hline
{\em pan} & The spatial position of the audio effect. The value ranges between -\/1.\+0 and 1.\+0\+:
\begin{DoxyItemize}
\item {\ttfamily -\/1.\+0}\+: The audio effect displays to the left.
\item {\ttfamily 0.\+0}\+: The audio effect displays ahead.
\item {\ttfamily 1.\+0}\+: The audio effect displays to the right. 
\end{DoxyItemize}\\
\hline
{\em gain} & The volume of the audio effect. The value ranges between 0 and 100. The default value is {\ttfamily 100} (original volume). The lower the value, the lower the volume of the audio effect. \\
\hline
{\em publish} & Sets whether to publish the audio effect to the remote\+:
\begin{DoxyItemize}
\item true\+: Publish the audio effect to the remote.
\item false\+: (Default) Do not publish the audio effect to the remote.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab53220e4d12755dc17410531d2b2eebb}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab53220e4d12755dc17410531d2b2eebb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getVolumeOfEffect@{getVolumeOfEffect}}
\index{getVolumeOfEffect@{getVolumeOfEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getVolumeOfEffect()}{getVolumeOfEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Volume\+Of\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the volume of 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 {$\ge$} 0\+: The volume of the specified audio effect. The value ranges between 0 and 100 (original volume).
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a08287428f277b7bf24d51a86ef61799b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a08287428f277b7bf24d51a86ef61799b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVolumeOfEffect@{setVolumeOfEffect}}
\index{setVolumeOfEffect@{setVolumeOfEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVolumeOfEffect()}{setVolumeOfEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Volume\+Of\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 and 100 (original volume).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3c820db172c7fb43da58d81b7916d174}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3c820db172c7fb43da58d81b7916d174}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!pauseEffect@{pauseEffect}}
\index{pauseEffect@{pauseEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseEffect()}{pauseEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::pause\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ad731a94d9db9e2c3390e1443b379095f}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad731a94d9db9e2c3390e1443b379095f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!pauseAllEffects@{pauseAllEffects}}
\index{pauseAllEffects@{pauseAllEffects}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAllEffects()}{pauseAllEffects()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::pause\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Pauses playing audio effects.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6489955af474172afe4f4b44e4edb38a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6489955af474172afe4f4b44e4edb38a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!resumeEffect@{resumeEffect}}
\index{resumeEffect@{resumeEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeEffect()}{resumeEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::resume\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a2fc1b5996df964f8e12ce579e0eb5f98}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2fc1b5996df964f8e12ce579e0eb5f98}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!resumeAllEffects@{resumeAllEffects}}
\index{resumeAllEffects@{resumeAllEffects}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAllEffects()}{resumeAllEffects()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::resume\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Resumes playing audio effects.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ad74eb7c7799b8762bff2b1e7e7bba8b9}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad74eb7c7799b8762bff2b1e7e7bba8b9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopEffect@{stopEffect}}
\index{stopEffect@{stopEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopEffect()}{stopEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a888ecfec4fda81831988898420d60e49}\label{classagora_1_1rtc_1_1_i_rtc_engine_a888ecfec4fda81831988898420d60e49}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopAllEffects@{stopAllEffects}}
\index{stopAllEffects@{stopAllEffects}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAllEffects()}{stopAllEffects()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops playing audio effects.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa560240d5994be0c1a7853e96077e5f9}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa560240d5994be0c1a7853e96077e5f9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!unloadEffect@{unloadEffect}}
\index{unloadEffect@{unloadEffect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{unloadEffect()}{unloadEffect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::unload\+Effect (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Releases the specified 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{classagora_1_1rtc_1_1_i_rtc_engine_a8d94ddc41717887206a4502c42797919}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8d94ddc41717887206a4502c42797919}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!unloadAllEffects@{unloadAllEffects}}
\index{unloadAllEffects@{unloadAllEffects}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{unloadAllEffects()}{unloadAllEffects()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::unload\+All\+Effects (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Releases preloaded audio effects from the memory.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a4d2a31c0016d1da9106222edb6c395fd}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4d2a31c0016d1da9106222edb6c395fd}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getEffectDuration@{getEffectDuration}}
\index{getEffectDuration@{getEffectDuration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectDuration()}{getEffectDuration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Effect\+Duration (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 absolute path or U\+RL address (including the filename extensions) of the music file. For example\+: {\ttfamily C\+:\textbackslash{}music\textbackslash{}audio.\+mp4}. When you access a local file on Android, Agora recommends passing a U\+RI address or the path starts with {\ttfamily /assets/} in this parameter.\\
\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.
\begin{DoxyItemize}
\item {\ttfamily -\/22(E\+R\+R\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+L\+I\+M\+I\+T\+ED)}\+: Cannot find the audio effect file. Please set a correct {\ttfamily file\+Path}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_acc753bf864b6c84d97c2d6778234c36e}\label{classagora_1_1rtc_1_1_i_rtc_engine_acc753bf864b6c84d97c2d6778234c36e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setEffectPosition@{setEffectPosition}}
\index{setEffectPosition@{setEffectPosition}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setEffectPosition()}{setEffectPosition()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Effect\+Position (\begin{DoxyParamCaption}\item[{int}]{sound\+Id,  }\item[{int}]{pos }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{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.
\begin{DoxyItemize}
\item {\ttfamily -\/22(E\+R\+R\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+L\+I\+M\+I\+T\+ED)}\+: Cannot find the audio effect file. Please set a correct {\ttfamily sound\+Id}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_abe60e8ce475a3fef96245ffc47e95e50}\label{classagora_1_1rtc_1_1_i_rtc_engine_abe60e8ce475a3fef96245ffc47e95e50}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getEffectCurrentPosition@{getEffectCurrentPosition}}
\index{getEffectCurrentPosition@{getEffectCurrentPosition}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getEffectCurrentPosition()}{getEffectCurrentPosition()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Effect\+Current\+Position (\begin{DoxyParamCaption}\item[{int}]{sound\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Gets the playback position of the audio effect file. \begin{DoxyNote}{Note}
Call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a49de4c18c3fbac4a5e905cd0e0243557}{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.
\begin{DoxyItemize}
\item {\ttfamily -\/22(E\+R\+R\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+L\+I\+M\+I\+T\+ED)}\+: Cannot find the audio effect file. Please set a correct {\ttfamily sound\+Id}. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac3f53f474760a834fef050937c4cf7fa}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac3f53f474760a834fef050937c4cf7fa}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableSoundPositionIndication@{enableSoundPositionIndication}}
\index{enableSoundPositionIndication@{enableSoundPositionIndication}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableSoundPositionIndication()}{enableSoundPositionIndication()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Sound\+Position\+Indication (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac5c3755a1cca201b2a8066af07a653f6}{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{classagora_1_1rtc_1_1_i_rtc_engine_ac5c3755a1cca201b2a8066af07a653f6}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac5c3755a1cca201b2a8066af07a653f6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteVoicePosition@{setRemoteVoicePosition}}
\index{setRemoteVoicePosition@{setRemoteVoicePosition}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteVoicePosition()}{setRemoteVoicePosition()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Voice\+Position (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{double}]{pan,  }\item[{double}]{gain }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ac3f53f474760a834fef050937c4cf7fa}{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{classagora_1_1rtc_1_1_i_rtc_engine_ac710640d68fa42f3130d1aaf3b8d3c4c}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac710640d68fa42f3130d1aaf3b8d3c4c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableSpatialAudio@{enableSpatialAudio}}
\index{enableSpatialAudio@{enableSpatialAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableSpatialAudio()}{enableSpatialAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Spatial\+Audio (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

enable spatial audio


\begin{DoxyParams}{Parameters}
{\em enabled} & enable/disable spatial audio\+:
\begin{DoxyItemize}
\item true\+: enable spatial audio.
\item false\+: disable spatial audio. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a582150010c3e33a6acc23731c659f28e}\label{classagora_1_1rtc_1_1_i_rtc_engine_a582150010c3e33a6acc23731c659f28e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteUserSpatialAudioParams@{setRemoteUserSpatialAudioParams}}
\index{setRemoteUserSpatialAudioParams@{setRemoteUserSpatialAudioParams}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteUserSpatialAudioParams()}{setRemoteUserSpatialAudioParams()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+User\+Spatial\+Audio\+Params (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{const \mbox{\hyperlink{structagora_1_1_spatial_audio_params}{agora\+::\+Spatial\+Audio\+Params}} \&}]{params }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets remote user parameters for spatial audio


\begin{DoxyParams}{Parameters}
{\em uid} & The ID of the remote user. \\
\hline
{\em param} & spatial audio parameters\+: \mbox{\hyperlink{structagora_1_1_spatial_audio_params}{Spatial\+Audio\+Params}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}\label{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVoiceBeautifierPreset@{setVoiceBeautifierPreset}}
\index{setVoiceBeautifierPreset@{setVoiceBeautifierPreset}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceBeautifierPreset()}{setVoiceBeautifierPreset()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Voice\+Beautifier\+Preset (\begin{DoxyParamCaption}\item[{V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+P\+R\+E\+S\+ET}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets an S\+DK preset voice beautifier effect.

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 Beautifier and Audio Effects}.

To achieve better audio effect quality, Agora recommends calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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.

\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+I\+O\+T(6)}; otherwise, this method call fails.
\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}{set\+Audio\+Effect\+Parameters}}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}{set\+Voice\+Beautifier\+Parameters}}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset voice beautifier effects\+: \#\+V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+P\+R\+E\+S\+ET.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioEffectPreset@{setAudioEffectPreset}}
\index{setAudioEffectPreset@{setAudioEffectPreset}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioEffectPreset()}{setAudioEffectPreset()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Effect\+Preset (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+R\+E\+S\+ET}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets an S\+DK preset audio effect.

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 Beautifier and Audio Effects}.

To achieve better audio effect quality, Agora recommends calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item Do not set the profile {\ttfamily 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)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+I\+O\+T(6)}; otherwise, this method call fails.
\item This method works best with the human voice. Agora does not recommend using this method for audio containing music.
\item If you call this method and set the {\ttfamily 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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}{set\+Audio\+Effect\+Parameters}}; otherwise, {\ttfamily set\+Audio\+Effect\+Parameters} overrides this method.
\item After calling this method, Agora recommends not calling the following methods, because they can override {\ttfamily set\+Audio\+Effect\+Preset}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}{set\+Voice\+Beautifier\+Parameters}}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em preset} & The options for S\+DK preset audio effects. See \#\+A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+R\+E\+S\+ET.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aee9553948bf2c4e2b79a00cddce41499}\label{classagora_1_1rtc_1_1_i_rtc_engine_aee9553948bf2c4e2b79a00cddce41499}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVoiceConversionPreset@{setVoiceConversionPreset}}
\index{setVoiceConversionPreset@{setVoiceConversionPreset}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceConversionPreset()}{setVoiceConversionPreset()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Voice\+Conversion\+Preset (\begin{DoxyParamCaption}\item[{V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+R\+E\+S\+ET}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets an S\+DK preset voice conversion.

Call this method to set an S\+DK preset voice conversion for the local user who sends an audio stream. After setting an voice conversion, all users in the channel can hear the effect.

You can set different voice conversion for different scenarios. See {\itshape Set the Voice Beautifier and Audio Effects}.

To achieve better voice conversion quality, Agora recommends calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item You can call this method either before or after joining a channel.
\item Do not set the profile {\ttfamily 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)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+I\+O\+T(6)}; otherwise, this method call fails.
\item This method works best with the human voice. Agora does not recommend using this method for audio containing music.
\item If you call this method and set the {\ttfamily preset} parameter to enumerators,
\item After calling this method, Agora recommends not calling the following methods, because they can override {\ttfamily set\+Voice\+Conversion\+Preset}\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a539a3345c38cc5d1d26edda69cf0661c}{set\+Local\+Voice\+Formant}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}{set\+Voice\+Beautifier\+Parameters}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}{set\+Audio\+Effect\+Parameters}}
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyNote}

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

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAudioEffectParameters@{setAudioEffectParameters}}
\index{setAudioEffectParameters@{setAudioEffectParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAudioEffectParameters()}{setAudioEffectParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Audio\+Effect\+Parameters (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+E\+F\+F\+E\+C\+T\+\_\+\+P\+R\+E\+S\+ET}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets parameters for S\+DK preset audio effects.

Call this method to set the following parameters for the local user who send 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.

You can call this method directly or after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}. If you call this method after \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}, ensure that you set the preset parameter of {\ttfamily set\+Audio\+Effect\+Preset} to {\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} and then call this method to set the same enumerator; otherwise, this method overrides {\ttfamily set\+Audio\+Effect\+Preset}.

\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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.
\item Do not set the {\ttfamily profile} parameter of \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+I\+O\+T(6)}; otherwise, this method call fails.
\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{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}{set\+Voice\+Beautifier\+Parameters}} 
\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{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 If you set {\ttfamily preset} to {\ttfamily R\+O\+O\+M\+\_\+\+A\+C\+O\+U\+S\+T\+I\+C\+S\+\_\+3\+D\+\_\+\+V\+O\+I\+CE}, you need to set {\ttfamily param2} to {\ttfamily 0}.
\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{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}\label{classagora_1_1rtc_1_1_i_rtc_engine_afe1e3302f3d1f670bc5cdaa870fe95e8}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVoiceBeautifierParameters@{setVoiceBeautifierParameters}}
\index{setVoiceBeautifierParameters@{setVoiceBeautifierParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceBeautifierParameters()}{setVoiceBeautifierParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Voice\+Beautifier\+Parameters (\begin{DoxyParamCaption}\item[{V\+O\+I\+C\+E\+\_\+\+B\+E\+A\+U\+T\+I\+F\+I\+E\+R\+\_\+\+P\+R\+E\+S\+ET}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets parameters for S\+DK preset voice beautifier effects.

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{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{set\+Audio\+Profile}}, and setting the {\ttfamily scenario} parameter 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\+N\+G(3)} and the {\ttfamily profile} parameter as {\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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7c9aef3f4c8f9cb62e5ae3c4aa7ed81a}{set\+Audio\+Profile}} as {\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)} or {\ttfamily A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+I\+O\+T(6)}; 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{classagora_1_1rtc_1_1_i_rtc_engine_a6111d2648909601c976b0190fe6de798}{set\+Audio\+Effect\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a9e5a3c34818abd26b0d0a9434f7ce4ca}{set\+Audio\+Effect\+Parameters}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a577b68f53ed63771da80ec8901ed93e5}{set\+Voice\+Beautifier\+Preset}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}{set\+Local\+Voice\+Pitch}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}{set\+Local\+Voice\+Equalization}}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}{set\+Local\+Voice\+Reverb}}
\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{classagora_1_1rtc_1_1_i_rtc_engine_a49e0ab572adf34b1b6be97f564ee5f20}\label{classagora_1_1rtc_1_1_i_rtc_engine_a49e0ab572adf34b1b6be97f564ee5f20}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setVoiceConversionParameters@{setVoiceConversionParameters}}
\index{setVoiceConversionParameters@{setVoiceConversionParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setVoiceConversionParameters()}{setVoiceConversionParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Voice\+Conversion\+Parameters (\begin{DoxyParamCaption}\item[{V\+O\+I\+C\+E\+\_\+\+C\+O\+N\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+R\+E\+S\+ET}]{preset,  }\item[{int}]{param1,  }\item[{int}]{param2 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a43616f919e0906279dff5648830ce31a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalVoicePitch@{setLocalVoicePitch}}
\index{setLocalVoicePitch@{setLocalVoicePitch}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoicePitch()}{setLocalVoicePitch()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Voice\+Pitch (\begin{DoxyParamCaption}\item[{double}]{pitch }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Changes the voice pitch of the local speaker.


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

\begin{DoxyItemize}
\item 0\+: Success.
\item -\/1\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a539a3345c38cc5d1d26edda69cf0661c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a539a3345c38cc5d1d26edda69cf0661c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalVoiceFormant@{setLocalVoiceFormant}}
\index{setLocalVoiceFormant@{setLocalVoiceFormant}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceFormant()}{setLocalVoiceFormant()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Voice\+Formant (\begin{DoxyParamCaption}\item[{double}]{formant\+Ratio }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Changes the voice formant ratio for local speaker.


\begin{DoxyParams}{Parameters}
{\em formant\+Ratio} & The voice formant ratio. The value ranges between -\/1.\+0 and 1.\+0. The lower the value, the deeper the sound, and the higher the value, the more it sounds like a child. The default value is 0.\+0 (the local user\textquotesingle{}s voice will not be changed).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item -\/1\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8c75994eb06ab26a1704715ec76e0189}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalVoiceEqualization@{setLocalVoiceEqualization}}
\index{setLocalVoiceEqualization@{setLocalVoiceEqualization}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceEqualization()}{setLocalVoiceEqualization()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Voice\+Equalization (\begin{DoxyParamCaption}\item[{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 [pure virtual]}}

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 the voice effects, including 31, 62, 125, 500, 1k, 2k, 4k, 8k, and 16k Hz. \\
\hline
{\em band\+Gain} & Gain of each band in dB. The value ranges from -\/15 to 15. The default value is 0. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item -\/1\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4d1d1309f97f3c430a1aa2d060bb7316}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalVoiceReverb@{setLocalVoiceReverb}}
\index{setLocalVoiceReverb@{setLocalVoiceReverb}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVoiceReverb()}{setLocalVoiceReverb()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Voice\+Reverb (\begin{DoxyParamCaption}\item[{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 [pure virtual]}}

Sets the local voice reverberation.


\begin{DoxyParams}{Parameters}
{\em reverb\+Key} & The reverberation key\+: \#\+A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE. \\
\hline
{\em value} & The value of the reverberation key\+: \#\+A\+U\+D\+I\+O\+\_\+\+R\+E\+V\+E\+R\+B\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item -\/1\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3ca3d18cd35b00276d7ab4550805d943}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3ca3d18cd35b00276d7ab4550805d943}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setHeadphoneEQPreset@{setHeadphoneEQPreset}}
\index{setHeadphoneEQPreset@{setHeadphoneEQPreset}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setHeadphoneEQPreset()}{setHeadphoneEQPreset()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Headphone\+E\+Q\+Preset (\begin{DoxyParamCaption}\item[{H\+E\+A\+D\+P\+H\+O\+N\+E\+\_\+\+E\+Q\+U\+A\+L\+I\+Z\+E\+R\+\_\+\+P\+R\+E\+S\+ET}]{preset }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a4938f94da646d1426aa64f7da7aa7791}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4938f94da646d1426aa64f7da7aa7791}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setHeadphoneEQParameters@{setHeadphoneEQParameters}}
\index{setHeadphoneEQParameters@{setHeadphoneEQParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setHeadphoneEQParameters()}{setHeadphoneEQParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Headphone\+E\+Q\+Parameters (\begin{DoxyParamCaption}\item[{int}]{low\+Gain,  }\item[{int}]{high\+Gain }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a9dde13a03a2ba63d4ed310a704ce4d9a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9dde13a03a2ba63d4ed310a704ce4d9a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableVoiceAITuner@{enableVoiceAITuner}}
\index{enableVoiceAITuner@{enableVoiceAITuner}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVoiceAITuner()}{enableVoiceAITuner()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Voice\+A\+I\+Tuner (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{V\+O\+I\+C\+E\+\_\+\+A\+I\+\_\+\+T\+U\+N\+E\+R\+\_\+\+T\+Y\+PE}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ae5a8ef2082a0ac196ecc128ee408def3}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae5a8ef2082a0ac196ecc128ee408def3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLogFile@{setLogFile}}
\index{setLogFile@{setLogFile}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFile()}{setLogFile()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Log\+File (\begin{DoxyParamCaption}\item[{const char $\ast$}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

{\bfseries{D\+E\+P\+R\+E\+C\+A\+T\+ED}} 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{classagora_1_1rtc_1_1_i_rtc_engine_ac71db65e66942e4e0a0550e95c16890f}{initialize}}, 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{classagora_1_1rtc_1_1_i_rtc_engine_acfc056b4c693d134bece8e7c0f05e69f}\label{classagora_1_1rtc_1_1_i_rtc_engine_acfc056b4c693d134bece8e7c0f05e69f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLogFilter@{setLogFilter}}
\index{setLogFilter@{setLogFilter}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFilter()}{setLogFilter()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Log\+Filter (\begin{DoxyParamCaption}\item[{unsigned int}]{filter }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the output log filter level of the S\+DK.

You can use one or a combination of the filters. The log filter 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 filter level and you will see logs preceding that filter level. For example, if you set the log filter 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} & 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{classagora_1_1rtc_1_1_i_rtc_engine_af24a402778204b60effc6b3879391c10}\label{classagora_1_1rtc_1_1_i_rtc_engine_af24a402778204b60effc6b3879391c10}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLogLevel@{setLogLevel}}
\index{setLogLevel@{setLogLevel}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogLevel()}{setLogLevel()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Log\+Level (\begin{DoxyParamCaption}\item[{commons\+::\+L\+O\+G\+\_\+\+L\+E\+V\+EL}]{level }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the output log level of the S\+DK.

You can set the S\+DK to ouput the log files of the specified level.


\begin{DoxyParams}{Parameters}
{\em level} & The log level\+:
\begin{DoxyItemize}
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+N\+O\+NE (0x0000)}\+: Do not output any log file.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+I\+N\+FO (0x0001)}\+: (Recommended) Output log files of the I\+N\+FO level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+W\+A\+RN (0x0002)}\+: Output log files of the W\+A\+RN level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+E\+R\+R\+OR (0x0004)}\+: Output log files of the E\+R\+R\+OR level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+F\+A\+T\+AL (0x0008)}\+: Output log files of the F\+A\+T\+AL level.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a1fa35cd4f874109a26895a95096a873f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1fa35cd4f874109a26895a95096a873f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLogFileSize@{setLogFileSize}}
\index{setLogFileSize@{setLogFileSize}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLogFileSize()}{setLogFileSize()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Log\+File\+Size (\begin{DoxyParamCaption}\item[{unsigned int}]{file\+Size\+In\+K\+Bytes }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a327761f03992c054589ce6ae3effd9c6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a327761f03992c054589ce6ae3effd9c6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!uploadLogFile@{uploadLogFile}}
\index{uploadLogFile@{uploadLogFile}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{uploadLogFile()}{uploadLogFile()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::upload\+Log\+File (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1util_1_1_copyable_auto_ptr}{agora\+::util\+::\+A\+String}} \&}]{request\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a6c08c30ca9b36d84ac42282a4b2bfef3}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6c08c30ca9b36d84ac42282a4b2bfef3}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!writeLog@{writeLog}}
\index{writeLog@{writeLog}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{writeLog()}{writeLog()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::write\+Log (\begin{DoxyParamCaption}\item[{commons\+::\+L\+O\+G\+\_\+\+L\+E\+V\+EL}]{level,  }\item[{const char $\ast$}]{fmt,  }\item[{}]{... }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}


\begin{DoxyItemize}
\item Write the log to S\+DK . @technical preview
\end{DoxyItemize}

You can Write the log to S\+DK log files of the specified level.


\begin{DoxyParams}{Parameters}
{\em level} & The log level\+:
\begin{DoxyItemize}
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+N\+O\+NE (0x0000)}\+: Do not output any log file.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+I\+N\+FO (0x0001)}\+: (Recommended) Output log files of the I\+N\+FO level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+W\+A\+RN (0x0002)}\+: Output log files of the W\+A\+RN level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+E\+R\+R\+OR (0x0004)}\+: Output log files of the E\+R\+R\+OR level.
\item {\ttfamily L\+O\+G\+\_\+\+L\+E\+V\+E\+L\+\_\+\+F\+A\+T\+AL (0x0008)}\+: Output log files of the F\+A\+T\+AL level.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ad4b4ce6d5fda065b2c1d6aaff8f9884c}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad4b4ce6d5fda065b2c1d6aaff8f9884c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalRenderMode@{setLocalRenderMode}}
\index{setLocalRenderMode@{setLocalRenderMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderMode()}{setLocalRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Render\+Mode (\begin{DoxyParamCaption}\item[{media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{render\+Mode,  }\item[{V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mirror\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a744003a9c0230684e985e42d14361f28}{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. See \#\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em mirror\+Mode} & Sets the local mirror mode. See \#\+V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2aae3548ceb92aa929aafb61383a3dd6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2aae3548ceb92aa929aafb61383a3dd6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteRenderMode@{setRemoteRenderMode}}
\index{setRemoteRenderMode@{setRemoteRenderMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteRenderMode()}{setRemoteRenderMode()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Render\+Mode (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{render\+Mode,  }\item[{V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mirror\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ac166814787b0a1d8da5f5c632dd7cdcf}{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. See \#\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em mirror\+Mode} & Sets the mirror type. See \#\+V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae1cc7218265d05caa22764091754ebb4}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae1cc7218265d05caa22764091754ebb4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalRenderTargetFps@{setLocalRenderTargetFps}}
\index{setLocalRenderTargetFps@{setLocalRenderTargetFps}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderTargetFps()}{setLocalRenderTargetFps()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Render\+Target\+Fps (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type,  }\item[{int}]{target\+Fps }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

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

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{classagora_1_1rtc_1_1_i_rtc_engine_a87f5a5382b0dd7b54f30fc2f0ac83c4a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a87f5a5382b0dd7b54f30fc2f0ac83c4a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalRenderMode@{setLocalRenderMode}}
\index{setLocalRenderMode@{setLocalRenderMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalRenderMode()}{setLocalRenderMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Render\+Mode (\begin{DoxyParamCaption}\item[{media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{render\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a744003a9c0230684e985e42d14361f28}{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. See \#\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8f088ba753de27002bef49ede9d5ffbc}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8f088ba753de27002bef49ede9d5ffbc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalVideoMirrorMode@{setLocalVideoMirrorMode}}
\index{setLocalVideoMirrorMode@{setLocalVideoMirrorMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalVideoMirrorMode()}{setLocalVideoMirrorMode()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Video\+Mirror\+Mode (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mirror\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the local video mirror mode.

Use this method before calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aabd5f0d670a6cd26badc316083519512}{start\+Preview}} method, or the mirror mode does not take effect until you call the {\ttfamily start\+Preview} method again. 
\begin{DoxyParams}{Parameters}
{\em mirror\+Mode} & Sets the local video mirror mode. See \#\+V\+I\+D\+E\+O\+\_\+\+M\+I\+R\+R\+O\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3f67e39e02e64ffe4197ba243e71a2cf}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3f67e39e02e64ffe4197ba243e71a2cf}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableDualStreamMode@{enableDualStreamMode}}
\index{enableDualStreamMode@{enableDualStreamMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableDualStreamMode()}{enableDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables or disables 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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{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}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a9db761169fa8d804d7fb8ea29484121c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a9db761169fa8d804d7fb8ea29484121c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableDualStreamMode@{enableDualStreamMode}}
\index{enableDualStreamMode@{enableDualStreamMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableDualStreamMode()}{enableDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} \&}]{stream\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables or disables 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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{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}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2c0cc7b801522f781bfd0eda3557f854}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2c0cc7b801522f781bfd0eda3557f854}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setDualStreamMode@{setDualStreamMode}}
\index{setDualStreamMode@{setDualStreamMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setDualStreamMode()}{setDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+DE}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em mode} & 
\begin{DoxyItemize}
\item The dual stream mode 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3902458a9581bbc36168518cfd10d19a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3902458a9581bbc36168518cfd10d19a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setSimulcastConfig@{setSimulcastConfig}}
\index{setSimulcastConfig@{setSimulcastConfig}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setSimulcastConfig()}{setSimulcastConfig()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Simulcast\+Config (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_config}{Simulcast\+Config}} \&}]{simulcast\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{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{classagora_1_1rtc_1_1_i_rtc_engine_a33c7eebc75e9a5bbde3904467657eb54}\label{classagora_1_1rtc_1_1_i_rtc_engine_a33c7eebc75e9a5bbde3904467657eb54}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setDualStreamMode@{setDualStreamMode}}
\index{setDualStreamMode@{setDualStreamMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setDualStreamMode()}{setDualStreamMode()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Dual\+Stream\+Mode (\begin{DoxyParamCaption}\item[{S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+DE}]{mode,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}} \&}]{stream\+Config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a7c4564b1f4a00658b4f54960ede571a9}{set\+Remote\+Video\+Stream\+Type}}.


\begin{DoxyParams}{Parameters}
{\em mode} & Dual stream mode\+: \#\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+DE. \\
\hline
{\em stream\+Config} & Configurations of the low stream\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_simulcast_stream_config}{Simulcast\+Stream\+Config}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a14e8afb96a2586a2eec56dec5c5abe45}\label{classagora_1_1rtc_1_1_i_rtc_engine_a14e8afb96a2586a2eec56dec5c5abe45}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableCustomAudioLocalPlayback@{enableCustomAudioLocalPlayback}}
\index{enableCustomAudioLocalPlayback@{enableCustomAudioLocalPlayback}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableCustomAudioLocalPlayback()}{enableCustomAudioLocalPlayback()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Custom\+Audio\+Local\+Playback (\begin{DoxyParamCaption}\item[{track\+\_\+id\+\_\+t}]{track\+Id,  }\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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} & Determines whether to local playback the external audio track\+:
\begin{DoxyItemize}
\item true\+: Local playback the external audio track.
\item false\+: Local don\`{}t playback 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{classagora_1_1rtc_1_1_i_rtc_engine_a2c4717760b5fbf1bb8c1a3c16ca67fe5}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2c4717760b5fbf1bb8c1a3c16ca67fe5}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRecordingAudioFrameParameters@{setRecordingAudioFrameParameters}}
\index{setRecordingAudioFrameParameters@{setRecordingAudioFrameParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRecordingAudioFrameParameters()}{setRecordingAudioFrameParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Recording\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio recording format for the \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_aba6a8259228745183105c71efbab86c0}{on\+Record\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate (Hz) of the audio data returned in the {\ttfamily on\+Record\+Audio\+Frame} callback, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channel} & The number of audio channels of the audio data returned in the {\ttfamily on\+Record\+Audio\+Frame} callback, which can be set as 1 or 2\+:
\begin{DoxyItemize}
\item 1\+: Mono.
\item 2\+: Stereo. 
\end{DoxyItemize}\\
\hline
{\em mode} & This mode is deprecated. \\
\hline
{\em samples\+Per\+Call} & not support. Sampling points in the called data returned in on\+Record\+Audio\+Frame(). For example, it is usually set as 1024 for stream pushing. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa5f2f6eb3db5acaaf8c40818d90694f1}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa5f2f6eb3db5acaaf8c40818d90694f1}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setPlaybackAudioFrameParameters@{setPlaybackAudioFrameParameters}}
\index{setPlaybackAudioFrameParameters@{setPlaybackAudioFrameParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setPlaybackAudioFrameParameters()}{setPlaybackAudioFrameParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Playback\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio playback format for the \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_a4687657aed2d1702b07455aa7bdb19d7}{on\+Playback\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate (Hz) of the audio data returned in the {\ttfamily on\+Playback\+Audio\+Frame} callback, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channel} & The number of channels of the audio data returned in the {\ttfamily on\+Playback\+Audio\+Frame} callback, which can be set as 1 or 2\+:
\begin{DoxyItemize}
\item 1\+: Mono
\item 2\+: Stereo 
\end{DoxyItemize}\\
\hline
{\em mode} & Deprecated. The use mode of the on\+Playback\+Audio\+Frame() callback\+: agora\+::rtc\+::\+R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em samples\+Per\+Call} & not support. Sampling points in the called data returned in on\+Playback\+Audio\+Frame(). For example, it is usually set as 1024 for stream pushing. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_af94beec91b7fcf0b20414b75b65580ff}\label{classagora_1_1rtc_1_1_i_rtc_engine_af94beec91b7fcf0b20414b75b65580ff}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setMixedAudioFrameParameters@{setMixedAudioFrameParameters}}
\index{setMixedAudioFrameParameters@{setMixedAudioFrameParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setMixedAudioFrameParameters()}{setMixedAudioFrameParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+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 [pure virtual]}}

Sets the mixed audio format for the \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_aeef4ee74bbec4a46c1c67c3c07a70e6d}{on\+Mixed\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate (Hz) of the audio data returned in the {\ttfamily on\+Mixed\+Audio\+Frame} callback, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channel} & The number of channels of the audio data in {\ttfamily on\+Mixed\+Audio\+Frame} callback, which can be set as 1 or 2\+:
\begin{DoxyItemize}
\item 1\+: Mono
\item 2\+: Stereo 
\end{DoxyItemize}\\
\hline
{\em samples\+Per\+Call} & not support. Sampling points in the called data returned in {\ttfamily on\+Mixed\+Audio\+Frame}. For example, it is usually set as 1024 for stream pushing. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a384f37f6a46ed650ca86e144aee9e5b9}\label{classagora_1_1rtc_1_1_i_rtc_engine_a384f37f6a46ed650ca86e144aee9e5b9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setEarMonitoringAudioFrameParameters@{setEarMonitoringAudioFrameParameters}}
\index{setEarMonitoringAudioFrameParameters@{setEarMonitoringAudioFrameParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setEarMonitoringAudioFrameParameters()}{setEarMonitoringAudioFrameParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Ear\+Monitoring\+Audio\+Frame\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel,  }\item[{R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE}]{mode,  }\item[{int}]{samples\+Per\+Call }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio ear monitoring format for the \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_base_a8595cdf8384578b3a87973f913185bb0}{on\+Ear\+Monitoring\+Audio\+Frame}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & Sets the sample rate (Hz) of the audio data returned in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\hline
{\em channel} & The number of channels of the audio data returned in the {\ttfamily on\+Ear\+Monitoring\+Audio\+Frame} callback, which can be set as 1 or 2\+:
\begin{DoxyItemize}
\item 1\+: Mono
\item 2\+: Stereo 
\end{DoxyItemize}\\
\hline
{\em mode} & Deprecated. The use mode of the on\+Ear\+Monitoring\+Audio\+Frame() callback\+: agora\+::rtc\+::\+R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em samples\+Per\+Call} & not support. Sampling points in the called data returned in on\+Ear\+Monitoring\+Audio\+Frame(). For example, it is usually set as 1024 for stream pushing. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_af6acd5694dad022464f21dcc5d0002fc}\label{classagora_1_1rtc_1_1_i_rtc_engine_af6acd5694dad022464f21dcc5d0002fc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}}
\index{setPlaybackAudioFrameBeforeMixingParameters@{setPlaybackAudioFrameBeforeMixingParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setPlaybackAudioFrameBeforeMixingParameters()}{setPlaybackAudioFrameBeforeMixingParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters (\begin{DoxyParamCaption}\item[{int}]{sample\+Rate,  }\item[{int}]{channel }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the audio playback format before mixing in the \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_frame_observer_add04e053c8a76ea70f4f40c2c7276275}{on\+Playback\+Audio\+Frame\+Before\+Mixing}} callback.


\begin{DoxyParams}{Parameters}
{\em sample\+Rate} & The sample rate (Hz) of the audio data returned in {\ttfamily on\+Playback\+Audio\+Frame\+Before\+Mixing}, which can set be as 8000, 16000, 32000, 44100, or 48000. \\
\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}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a719e9cf665fdd4fe4dfef84dd51828e2}\label{classagora_1_1rtc_1_1_i_rtc_engine_a719e9cf665fdd4fe4dfef84dd51828e2}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableAudioSpectrumMonitor@{enableAudioSpectrumMonitor}}
\index{enableAudioSpectrumMonitor@{enableAudioSpectrumMonitor}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableAudioSpectrumMonitor()}{enableAudioSpectrumMonitor()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Audio\+Spectrum\+Monitor (\begin{DoxyParamCaption}\item[{int}]{interval\+In\+MS = {\ttfamily 100} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ab00fdf2439e00078f8993cf6f3e38b88}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab00fdf2439e00078f8993cf6f3e38b88}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!disableAudioSpectrumMonitor@{disableAudioSpectrumMonitor}}
\index{disableAudioSpectrumMonitor@{disableAudioSpectrumMonitor}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{disableAudioSpectrumMonitor()}{disableAudioSpectrumMonitor()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::disable\+Audio\+Spectrum\+Monitor (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Disalbe the audio spectrum monitor.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a257451a0a792e2d2588154e216c429f6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a257451a0a792e2d2588154e216c429f6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerAudioSpectrumObserver@{registerAudioSpectrumObserver}}
\index{registerAudioSpectrumObserver@{registerAudioSpectrumObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerAudioSpectrumObserver()}{registerAudioSpectrumObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Audio\+Spectrum\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1media_1_1_i_audio_spectrum_observer}{agora\+::media\+::\+I\+Audio\+Spectrum\+Observer}} $\ast$}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{classagora_1_1media_1_1_i_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{classagora_1_1rtc_1_1_i_rtc_engine_a6d6690527d2fcff60d1c2e8e8a74b7f0}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6d6690527d2fcff60d1c2e8e8a74b7f0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!unregisterAudioSpectrumObserver@{unregisterAudioSpectrumObserver}}
\index{unregisterAudioSpectrumObserver@{unregisterAudioSpectrumObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{unregisterAudioSpectrumObserver()}{unregisterAudioSpectrumObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::unregister\+Audio\+Spectrum\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1media_1_1_i_audio_spectrum_observer}{agora\+::media\+::\+I\+Audio\+Spectrum\+Observer}} $\ast$}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Releases the audio spectrum observer.


\begin{DoxyParams}{Parameters}
{\em observer} & The pointer to the audio spectrum observer\+: \mbox{\hyperlink{classagora_1_1media_1_1_i_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{classagora_1_1rtc_1_1_i_rtc_engine_acf94e9e0122f09d0450475d7c5809036}\label{classagora_1_1rtc_1_1_i_rtc_engine_acf94e9e0122f09d0450475d7c5809036}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustRecordingSignalVolume@{adjustRecordingSignalVolume}}
\index{adjustRecordingSignalVolume@{adjustRecordingSignalVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustRecordingSignalVolume()}{adjustRecordingSignalVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Recording\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Adjusts the recording volume.


\begin{DoxyParams}{Parameters}
{\em volume} & The recording volume, which ranges from 0 to 400\+:\\
\hline
\end{DoxyParams}

\begin{DoxyItemize}
\item 0\+: Mute the recording volume.
\item 100\+: The Original volume.
\item 400\+: (Maximum) Four times the original volume with signal clipping protection.
\end{DoxyItemize}

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a3d0ebedd137aa0dcc8e8978854c26682}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3d0ebedd137aa0dcc8e8978854c26682}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!muteRecordingSignal@{muteRecordingSignal}}
\index{muteRecordingSignal@{muteRecordingSignal}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{muteRecordingSignal()}{muteRecordingSignal()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::mute\+Recording\+Signal (\begin{DoxyParamCaption}\item[{bool}]{mute }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Mute or resume recording signal volume.


\begin{DoxyParams}{Parameters}
{\em mute} & 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{classagora_1_1rtc_1_1_i_rtc_engine_a98919705c8b2346811f91f9ce5e97a79}\label{classagora_1_1rtc_1_1_i_rtc_engine_a98919705c8b2346811f91f9ce5e97a79}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustPlaybackSignalVolume@{adjustPlaybackSignalVolume}}
\index{adjustPlaybackSignalVolume@{adjustPlaybackSignalVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustPlaybackSignalVolume()}{adjustPlaybackSignalVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Playback\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Adjusts the playback volume.


\begin{DoxyParams}{Parameters}
{\em volume} & The playback volume, which ranges from 0 to 400\+:\\
\hline
\end{DoxyParams}

\begin{DoxyItemize}
\item 0\+: Mute the recoridng volume.
\item 100\+: The Original volume.
\item 400\+: (Maximum) Four times the original volume with signal clipping protection.
\end{DoxyItemize}

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6f411291eb8b834442b44361f78fa81f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6f411291eb8b834442b44361f78fa81f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalPublishFallbackOption@{setLocalPublishFallbackOption}}
\index{setLocalPublishFallbackOption@{setLocalPublishFallbackOption}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalPublishFallbackOption()}{setLocalPublishFallbackOption()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Publish\+Fallback\+Option (\begin{DoxyParamCaption}\item[{S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

If {\ttfamily option} is set as \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY (2), 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 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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ace4279c4d87c23a1fecc3eb8e862a513}{on\+Local\+Publish\+Fallback\+To\+Audio\+Only}} callback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item 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 published video stream falls back to audio only.
\item Ensure that you call this method before joining a channel.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em option} & Sets the fallback option for the published video stream\+:
\begin{DoxyItemize}
\item \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+D\+I\+S\+A\+B\+L\+ED (0)\+: (Default) No fallback behavior for the published video stream when the uplink network condition is poor. The stream quality is not guaranteed.
\item \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY (2)\+: The published video stream falls back to audio only when the uplink network condition is poor.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_afd251e3f353a31d470ff9e60c3c3c5de}\label{classagora_1_1rtc_1_1_i_rtc_engine_afd251e3f353a31d470ff9e60c3c3c5de}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}}
\index{setRemoteSubscribeFallbackOption@{setRemoteSubscribeFallbackOption}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setRemoteSubscribeFallbackOption()}{setRemoteSubscribeFallbackOption()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Remote\+Subscribe\+Fallback\+Option (\begin{DoxyParamCaption}\item[{S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

The default setting for {\ttfamily option} is \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+L\+OW (1), where the remotely subscribed video stream falls back to the low-\/stream video (low resolution and low bitrate) under poor downlink network conditions.

If {\ttfamily option} is set as \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+N\+\_\+\+A\+U\+D\+I\+O\+\_\+\+O\+N\+LY (2), the S\+DK automatically switches the video from a high-\/stream to a low-\/stream, or disables the video when the downlink network conditions 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 when the audio-\/only stream switches back to the video stream, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a7ee343146ad6e3f120bd04a7a6fdda74}{on\+Remote\+Subscribe\+Fallback\+To\+Audio\+Only}} callback.

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

\begin{DoxyParams}{Parameters}
{\em option} & Sets the fallback option for the remotely subscribed video stream. See \#\+S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6d91b4c3234f741d1210db9d0c6a96ba}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6d91b4c3234f741d1210db9d0c6a96ba}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setHighPriorityUserList@{setHighPriorityUserList}}
\index{setHighPriorityUserList@{setHighPriorityUserList}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setHighPriorityUserList()}{setHighPriorityUserList()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+High\+Priority\+User\+List (\begin{DoxyParamCaption}\item[{uid\+\_\+t $\ast$}]{uid\+List,  }\item[{int}]{uid\+Num,  }\item[{S\+T\+R\+E\+A\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+O\+P\+T\+I\+O\+NS}]{option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the high priority user list and their fallback level in weak network condition. \begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item This method can be called before and after joining a channel.
\item If a subscriber is set to high priority, this stream only fallback to lower stream after all normal priority users fallback to their fallback level on weak network condition if needed.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em uid\+List} & The high priority user list. \\
\hline
{\em uid\+Num} & The size of uid\+List. \\
\hline
{\em option} & The fallback level of high priority users.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0 \+: Success.
\item $<$0 \+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac6fc97b54f53ebc5cc28049a04d51170}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac6fc97b54f53ebc5cc28049a04d51170}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableExtension@{enableExtension}}
\index{enableExtension@{enableExtension}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExtension()}{enableExtension()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Extension (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&}]{extension\+Info,  }\item[{bool}]{enable = {\ttfamily true} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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. \\
\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{classagora_1_1rtc_1_1_i_rtc_engine_afd6dc645147e9d4021dfa7ff673f2b3d}\label{classagora_1_1rtc_1_1_i_rtc_engine_afd6dc645147e9d4021dfa7ff673f2b3d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setExtensionProperty@{setExtensionProperty}}
\index{setExtensionProperty@{setExtensionProperty}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProperty()}{setExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Extension\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&}]{extension\+Info,  }\item[{const char $\ast$}]{key,  }\item[{const char $\ast$}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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. \\
\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{classagora_1_1rtc_1_1_i_rtc_engine_aa43c2767b29faee996d99e6d785d13f7}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa43c2767b29faee996d99e6d785d13f7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getExtensionProperty@{getExtensionProperty}}
\index{getExtensionProperty@{getExtensionProperty}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getExtensionProperty()}{getExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Extension\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_extension_info}{Extension\+Info}} \&}]{extension\+Info,  }\item[{const char $\ast$}]{key,  }\item[{char $\ast$}]{value,  }\item[{int}]{buf\+\_\+len }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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. \\
\hline
{\em key} & The key of the extension. \\
\hline
{\em value} & The value of the extension key. \\
\hline
{\em buf\+\_\+len} & Maximum length of the J\+S\+ON string indicating the extension property.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a86e2db9244c0edc395168a1ab6708102}\label{classagora_1_1rtc_1_1_i_rtc_engine_a86e2db9244c0edc395168a1ab6708102}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableLoopbackRecording@{enableLoopbackRecording}}
\index{enableLoopbackRecording@{enableLoopbackRecording}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableLoopbackRecording()}{enableLoopbackRecording()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Loopback\+Recording (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const char $\ast$}]{device\+Name = {\ttfamily NULL} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables loopback recording.

If you enable loopback recording, the output of the default sound card is mixed into the audio stream sent to the other end.

\begin{DoxyNote}{Note}
This method is for Windows only.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em enabled} & Sets whether to enable/disable loopback recording.
\begin{DoxyItemize}
\item true\+: Enable loopback recording.
\item false\+: (Default) Disable loopback recording. 
\end{DoxyItemize}\\
\hline
{\em device\+Name} & Pointer to the device name of the sound card. The default value is N\+U\+LL (the default sound card).
\begin{DoxyItemize}
\item This method is for mac\+OS and Windows only.
\item mac\+OS does not support loopback capturing of the default sound card. If you need to use this method, please use a virtual sound card and pass its name to the device\+Name parameter. Agora has tested and recommends using soundflower. 
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a95cdc3a285845cb35d56f470a0b488fb}\label{classagora_1_1rtc_1_1_i_rtc_engine_a95cdc3a285845cb35d56f470a0b488fb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!adjustLoopbackSignalVolume@{adjustLoopbackSignalVolume}}
\index{adjustLoopbackSignalVolume@{adjustLoopbackSignalVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{adjustLoopbackSignalVolume()}{adjustLoopbackSignalVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::adjust\+Loopback\+Signal\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Adjusts the loopback recording volume.


\begin{DoxyParams}{Parameters}
{\em volume} & The loopback volume, which ranges from 0 to 100\+:\\
\hline
\end{DoxyParams}

\begin{DoxyItemize}
\item 0\+: Mute the recoridng volume.
\item 100\+: The Original volume. protection.
\end{DoxyItemize}

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac94bc111056036c08e259c84696bb9bd}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac94bc111056036c08e259c84696bb9bd}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getLoopbackRecordingVolume@{getLoopbackRecordingVolume}}
\index{getLoopbackRecordingVolume@{getLoopbackRecordingVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getLoopbackRecordingVolume()}{getLoopbackRecordingVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Loopback\+Recording\+Volume (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Retrieves the audio volume for recording loopback. \begin{DoxyNote}{Note}
Call this method when you are in a channel. 
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {$\ge$} 0\+: The audio volume for loopback, if this method call succeeds. The value range is \mbox{[}0,100\mbox{]}.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab4650e81f9f5496f63d472b548e03aaa}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab4650e81f9f5496f63d472b548e03aaa}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableInEarMonitoring@{enableInEarMonitoring}}
\index{enableInEarMonitoring@{enableInEarMonitoring}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableInEarMonitoring()}{enableInEarMonitoring()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+In\+Ear\+Monitoring (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{int}]{include\+Audio\+Filters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables in-\/ear monitoring.


\begin{DoxyParams}{Parameters}
{\em enabled} & Determines whether to enable in-\/ear monitoring.
\begin{DoxyItemize}
\item true\+: Enable.
\item false\+: (Default) Disable. 
\end{DoxyItemize}\\
\hline
{\em include\+Audio\+Filters} & The type of the ear monitoring\+: \#\+E\+A\+R\+\_\+\+M\+O\+N\+I\+T\+O\+R\+I\+N\+G\+\_\+\+F\+I\+L\+T\+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{classagora_1_1rtc_1_1_i_rtc_engine_a407fdc268519a4a23a102afec44bf2e6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a407fdc268519a4a23a102afec44bf2e6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setInEarMonitoringVolume@{setInEarMonitoringVolume}}
\index{setInEarMonitoringVolume@{setInEarMonitoringVolume}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setInEarMonitoringVolume()}{setInEarMonitoringVolume()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+In\+Ear\+Monitoring\+Volume (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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


\begin{DoxyParams}{Parameters}
{\em volume} & Sets the volume of the in-\/ear monitor. 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{classagora_1_1rtc_1_1_i_rtc_engine_a518b9d2f480aa83c4e58cc9992f4cbd0}\label{classagora_1_1rtc_1_1_i_rtc_engine_a518b9d2f480aa83c4e58cc9992f4cbd0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setExtensionProviderProperty@{setExtensionProviderProperty}}
\index{setExtensionProviderProperty@{setExtensionProviderProperty}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProviderProperty()}{setExtensionProviderProperty()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Extension\+Provider\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{key,  }\item[{const char $\ast$}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_aaff3d6b73766da76f3a8e8173a901409}\label{classagora_1_1rtc_1_1_i_rtc_engine_aaff3d6b73766da76f3a8e8173a901409}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerExtension@{registerExtension}}
\index{registerExtension@{registerExtension}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerExtension()}{registerExtension()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Extension (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:UNKNOWN\+\_\+MEDIA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Registers an extension. Normally you should call this function immediately after engine initialization. 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 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. The default is U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a6c4e1fabb81aef573de88a215a19da9b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6c4e1fabb81aef573de88a215a19da9b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableExtension@{enableExtension}}
\index{enableExtension@{enableExtension}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableExtension()}{enableExtension()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Extension (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{bool}]{enable = {\ttfamily true},  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:UNKNOWN\+\_\+MEDIA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 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. The default is U\+N\+K\+N\+O\+W\+N\+\_\+\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+CE.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa268792b9208cf687afff31c106166f9}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa268792b9208cf687afff31c106166f9}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setExtensionProperty@{setExtensionProperty}}
\index{setExtensionProperty@{setExtensionProperty}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setExtensionProperty()}{setExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Extension\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{const char $\ast$}]{key,  }\item[{const char $\ast$}]{value,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:UNKNOWN\+\_\+MEDIA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a18ecaaccf0c6ddb32f05a443c0d8c98c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a18ecaaccf0c6ddb32f05a443c0d8c98c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getExtensionProperty@{getExtensionProperty}}
\index{getExtensionProperty@{getExtensionProperty}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getExtensionProperty()}{getExtensionProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Extension\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{provider,  }\item[{const char $\ast$}]{extension,  }\item[{const char $\ast$}]{key,  }\item[{char $\ast$}]{value,  }\item[{int}]{buf\+\_\+len,  }\item[{agora\+::media\+::\+M\+E\+D\+I\+A\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type = {\ttfamily agora\+:\+:media\+:\+:UNKNOWN\+\_\+MEDIA\+\_\+SOURCE} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 value} & The value of the extension key. \\
\hline
{\em buf\+\_\+len} & Maximum length of the J\+S\+ON string indicating the extension property.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aaa9b17c5a938b8331dba774f37f94e65}\label{classagora_1_1rtc_1_1_i_rtc_engine_aaa9b17c5a938b8331dba774f37f94e65}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setCameraCapturerConfiguration@{setCameraCapturerConfiguration}}
\index{setCameraCapturerConfiguration@{setCameraCapturerConfiguration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraCapturerConfiguration()}{setCameraCapturerConfiguration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Camera\+Capturer\+Configuration (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the camera capture configuration. \begin{DoxyNote}{Note}
Call this method before enabling the local camera. That said, you can call this method before calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel}}, \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}}, or \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1877bb2aa655bbcbed57ffadd6424e51}{enable\+Local\+Video}}, depending on which method you use to turn on your local camera.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em config} & Sets the camera capturer configuration. See \mbox{\hyperlink{structagora_1_1rtc_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}}. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a94236ec10e44896d3a133d411d0b8958}\label{classagora_1_1rtc_1_1_i_rtc_engine_a94236ec10e44896d3a133d411d0b8958}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createCustomVideoTrack@{createCustomVideoTrack}}
\index{createCustomVideoTrack@{createCustomVideoTrack}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createCustomVideoTrack()}{createCustomVideoTrack()}}
{\footnotesize\ttfamily virtual video\+\_\+track\+\_\+id\+\_\+t agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Custom\+Video\+Track (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ad89333616fea3ae501b77000624b95a1}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad89333616fea3ae501b77000624b95a1}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createCustomEncodedVideoTrack@{createCustomEncodedVideoTrack}}
\index{createCustomEncodedVideoTrack@{createCustomEncodedVideoTrack}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createCustomEncodedVideoTrack()}{createCustomEncodedVideoTrack()}}
{\footnotesize\ttfamily virtual video\+\_\+track\+\_\+id\+\_\+t agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Custom\+Encoded\+Video\+Track (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_sender_options}{Sender\+Options}} \&}]{sender\+\_\+option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a5adc6cc95c913646b2a993ed21729440}\label{classagora_1_1rtc_1_1_i_rtc_engine_a5adc6cc95c913646b2a993ed21729440}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!destroyCustomVideoTrack@{destroyCustomVideoTrack}}
\index{destroyCustomVideoTrack@{destroyCustomVideoTrack}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyCustomVideoTrack()}{destroyCustomVideoTrack()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::destroy\+Custom\+Video\+Track (\begin{DoxyParamCaption}\item[{video\+\_\+track\+\_\+id\+\_\+t}]{video\+\_\+track\+\_\+id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a84e88acc42701119a7a5d997e3142f5b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a84e88acc42701119a7a5d997e3142f5b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!destroyCustomEncodedVideoTrack@{destroyCustomEncodedVideoTrack}}
\index{destroyCustomEncodedVideoTrack@{destroyCustomEncodedVideoTrack}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{destroyCustomEncodedVideoTrack()}{destroyCustomEncodedVideoTrack()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::destroy\+Custom\+Encoded\+Video\+Track (\begin{DoxyParamCaption}\item[{video\+\_\+track\+\_\+id\+\_\+t}]{video\+\_\+track\+\_\+id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_af67688d89526926718edb26938d65541}\label{classagora_1_1rtc_1_1_i_rtc_engine_af67688d89526926718edb26938d65541}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getCallId@{getCallId}}
\index{getCallId@{getCallId}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getCallId()}{getCallId()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Call\+Id (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1util_1_1_copyable_auto_ptr}{agora\+::util\+::\+A\+String}} \&}]{call\+Id }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{DoxyParams}{Parameters}
{\em call\+Id} & The reference to the call ID. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The call ID if the method call is successful.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a748c30a6339ec9798daa0d1b21585411}\label{classagora_1_1rtc_1_1_i_rtc_engine_a748c30a6339ec9798daa0d1b21585411}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!rate@{rate}}
\index{rate@{rate}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{rate()}{rate()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::rate (\begin{DoxyParamCaption}\item[{const char $\ast$}]{call\+Id,  }\item[{int}]{rating,  }\item[{const char $\ast$}]{description }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_af67688d89526926718edb26938d65541}{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} & (\mbox{\hyperlink{classagora_1_1_optional}{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{classagora_1_1rtc_1_1_i_rtc_engine_ab8031b21d72c846e9d501fbe6ca10678}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab8031b21d72c846e9d501fbe6ca10678}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!complain@{complain}}
\index{complain@{complain}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{complain()}{complain()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::complain (\begin{DoxyParamCaption}\item[{const char $\ast$}]{call\+Id,  }\item[{const char $\ast$}]{description }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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} & (\mbox{\hyperlink{classagora_1_1_optional}{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{classagora_1_1rtc_1_1_i_rtc_engine_acfc4de5d9454cad1dfd1d154e180d78c}\label{classagora_1_1rtc_1_1_i_rtc_engine_acfc4de5d9454cad1dfd1d154e180d78c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startRtmpStreamWithoutTranscoding@{startRtmpStreamWithoutTranscoding}}
\index{startRtmpStreamWithoutTranscoding@{startRtmpStreamWithoutTranscoding}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startRtmpStreamWithoutTranscoding()}{startRtmpStreamWithoutTranscoding()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Rtmp\+Stream\+Without\+Transcoding (\begin{DoxyParamCaption}\item[{const char $\ast$}]{url }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acfc4de5d9454cad1dfd1d154e180d78c}{start\+Rtmp\+Stream\+Without\+Transcoding}} method call triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a01f3ce153df3a96703a0c9af934058f6}{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{classagora_1_1rtc_1_1_i_rtc_engine_a0f91aa3af0a7c9a8428966028b5a010c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a0f91aa3af0a7c9a8428966028b5a010c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startRtmpStreamWithTranscoding@{startRtmpStreamWithTranscoding}}
\index{startRtmpStreamWithTranscoding@{startRtmpStreamWithTranscoding}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startRtmpStreamWithTranscoding()}{startRtmpStreamWithTranscoding()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Rtmp\+Stream\+With\+Transcoding (\begin{DoxyParamCaption}\item[{const char $\ast$}]{url,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}} \&}]{transcoding }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0f91aa3af0a7c9a8428966028b5a010c}{start\+Rtmp\+Stream\+With\+Transcoding}} method call triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a01f3ce153df3a96703a0c9af934058f6}{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} & Sets the C\+DN live audio/video transcoding settings. See \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}}.\\
\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{classagora_1_1rtc_1_1_i_rtc_engine_a8689685218a15a34a376944555340261}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8689685218a15a34a376944555340261}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!updateRtmpTranscoding@{updateRtmpTranscoding}}
\index{updateRtmpTranscoding@{updateRtmpTranscoding}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{updateRtmpTranscoding()}{updateRtmpTranscoding()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::update\+Rtmp\+Transcoding (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}} \&}]{transcoding }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{structagora_1_1rtc_1_1_live_transcoding}{Live\+Transcoding}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab9807b2e5fb708d01066759af02cc630}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab9807b2e5fb708d01066759af02cc630}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopRtmpStream@{stopRtmpStream}}
\index{stopRtmpStream@{stopRtmpStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopRtmpStream()}{stopRtmpStream()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Rtmp\+Stream (\begin{DoxyParamCaption}\item[{const char $\ast$}]{url }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_acfc4de5d9454cad1dfd1d154e180d78c}{start\+Rtmp\+Stream\+Without\+Transcoding}} method or \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0f91aa3af0a7c9a8428966028b5a010c}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_ab9807b2e5fb708d01066759af02cc630}{stop\+Rtmp\+Stream}} method call triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a01f3ce153df3a96703a0c9af934058f6}{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{classagora_1_1rtc_1_1_i_rtc_engine_a3b43b690a4137b0172cd09f70b079a4b}\label{classagora_1_1rtc_1_1_i_rtc_engine_a3b43b690a4137b0172cd09f70b079a4b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startLocalAudioMixer@{startLocalAudioMixer}}
\index{startLocalAudioMixer@{startLocalAudioMixer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startLocalAudioMixer()}{startLocalAudioMixer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Local\+Audio\+Mixer (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a24e94ea7f4ec5f5830608d05965eacf4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a24e94ea7f4ec5f5830608d05965eacf4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!updateLocalAudioMixerConfiguration@{updateLocalAudioMixerConfiguration}}
\index{updateLocalAudioMixerConfiguration@{updateLocalAudioMixerConfiguration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{updateLocalAudioMixerConfiguration()}{updateLocalAudioMixerConfiguration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::update\+Local\+Audio\+Mixer\+Configuration (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_audio_mixer_configuration}{Local\+Audio\+Mixer\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_afde87fec9cd23387436b5a918975a454}\label{classagora_1_1rtc_1_1_i_rtc_engine_afde87fec9cd23387436b5a918975a454}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopLocalAudioMixer@{stopLocalAudioMixer}}
\index{stopLocalAudioMixer@{stopLocalAudioMixer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopLocalAudioMixer()}{stopLocalAudioMixer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Local\+Audio\+Mixer (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_ad01a4f17cfec60596b5cae7bb59b2394}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad01a4f17cfec60596b5cae7bb59b2394}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startCameraCapture@{startCameraCapture}}
\index{startCameraCapture@{startCameraCapture}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startCameraCapture()}{startCameraCapture()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Camera\+Capture (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_camera_capturer_configuration}{Camera\+Capturer\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts video capture with a camera.


\begin{DoxyParams}{Parameters}
{\em config} & The configuration of the video capture with a primary camera. For details, see Camera\+Capture\+Configuration. \\
\hline
{\em source\+Type} & Source type of camera. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a28bd9fd55b81d3790c8f6792f10ff739}\label{classagora_1_1rtc_1_1_i_rtc_engine_a28bd9fd55b81d3790c8f6792f10ff739}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopCameraCapture@{stopCameraCapture}}
\index{stopCameraCapture@{stopCameraCapture}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopCameraCapture()}{stopCameraCapture()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Camera\+Capture (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops capturing video through camera.

You can call this method to stop capturing video through the first camera after calling {\ttfamily start\+Camera\+Capture}.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & Source type of camera. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab035f52a3b59ac873e08f792d9e76620}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab035f52a3b59ac873e08f792d9e76620}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setCameraDeviceOrientation@{setCameraDeviceOrientation}}
\index{setCameraDeviceOrientation@{setCameraDeviceOrientation}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setCameraDeviceOrientation()}{setCameraDeviceOrientation()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Camera\+Device\+Orientation (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type,  }\item[{V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON}]{orientation }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the rotation angle of the video captured by the camera.

When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video.


\begin{DoxyParams}{Parameters}
{\em type} & The video source type. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em orientation} & The clockwise rotation angle. See \#\+V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae05a33fd4fb688bb24dbbb5162100528}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae05a33fd4fb688bb24dbbb5162100528}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setScreenCaptureOrientation@{setScreenCaptureOrientation}}
\index{setScreenCaptureOrientation@{setScreenCaptureOrientation}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setScreenCaptureOrientation()}{setScreenCaptureOrientation()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Screen\+Capture\+Orientation (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{type,  }\item[{V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON}]{orientation }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the rotation angle of the video captured by the screen.

When the screen capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video.


\begin{DoxyParams}{Parameters}
{\em type} & The video source type. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
{\em orientation} & The clockwise rotation angle. See \#\+V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ad984f3f62e584e8909a0491aac41c4e8}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad984f3f62e584e8909a0491aac41c4e8}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startScreenCapture@{startScreenCapture}}
\index{startScreenCapture@{startScreenCapture}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startScreenCapture()}{startScreenCapture()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Screen\+Capture (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_screen_capture_configuration}{Screen\+Capture\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts sharing a screen.


\begin{DoxyParams}{Parameters}
{\em config} & The configuration of the captured screen. For details, see \mbox{\hyperlink{structagora_1_1rtc_1_1_screen_capture_configuration}{Screen\+Capture\+Configuration}}. \\
\hline
{\em source\+Type} & source type of screen. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a93e3f9ae0e115a54d2af79d1b96dda7d}\label{classagora_1_1rtc_1_1_i_rtc_engine_a93e3f9ae0e115a54d2af79d1b96dda7d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopScreenCapture@{stopScreenCapture}}
\index{stopScreenCapture@{stopScreenCapture}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopScreenCapture()}{stopScreenCapture()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Screen\+Capture (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE}]{source\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stop sharing the screen.

After calling {\ttfamily start\+Screen\+Capture}, you can call this method to stop sharing the first screen.


\begin{DoxyParams}{Parameters}
{\em source\+Type} & source type of screen. See \#\+V\+I\+D\+E\+O\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+PE. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a512b149d4dc249c04f9e30bd31767362}\label{classagora_1_1rtc_1_1_i_rtc_engine_a512b149d4dc249c04f9e30bd31767362}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getConnectionState@{getConnectionState}}
\index{getConnectionState@{getConnectionState}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getConnectionState()}{getConnectionState()}}
{\footnotesize\ttfamily virtual C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+T\+Y\+PE agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Connection\+State (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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

\begin{DoxyReturn}{Returns}
\#\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+T\+Y\+PE. 
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a95b53a32d598c3d98a51c24f7f9af4b4}\label{classagora_1_1rtc_1_1_i_rtc_engine_a95b53a32d598c3d98a51c24f7f9af4b4}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerPacketObserver@{registerPacketObserver}}
\index{registerPacketObserver@{registerPacketObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerPacketObserver()}{registerPacketObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Packet\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_packet_observer}{I\+Packet\+Observer}} $\ast$}]{observer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Registers a packet observer.

The Agora Native S\+DK allows your app to register a packet observer to receive events whenever a voice or video packet is transmitting.


\begin{DoxyParams}{Parameters}
{\em observer} & The \mbox{\hyperlink{classagora_1_1rtc_1_1_i_packet_observer}{I\+Packet\+Observer}} object. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ad5ea5f0dfd8117f38d9c4b12fe01fece}\label{classagora_1_1rtc_1_1_i_rtc_engine_ad5ea5f0dfd8117f38d9c4b12fe01fece}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableEncryption@{enableEncryption}}
\index{enableEncryption@{enableEncryption}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableEncryption()}{enableEncryption()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Encryption (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_encryption_config}{Encryption\+Config}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables/\+Disables the built-\/in encryption.

In scenarios requiring high security, Agora recommends calling this method 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 true\+: Enable the built-\/in encryption.
\item false\+: Disable the built-\/in encryption. 
\end{DoxyItemize}\\
\hline
{\em config} & Configurations of built-\/in encryption schemas. See \mbox{\hyperlink{structagora_1_1rtc_1_1_encryption_config}{Encryption\+Config}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item -\/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.
\item -\/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.
\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{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a5a3f0168ca6e2e298e4677e9a8b9550a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a5a3f0168ca6e2e298e4677e9a8b9550a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createDataStream@{createDataStream}}
\index{createDataStream@{createDataStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createDataStream()}{createDataStream()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Data\+Stream (\begin{DoxyParamCaption}\item[{int $\ast$}]{stream\+Id,  }\item[{bool}]{reliable,  }\item[{bool}]{ordered }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Creates a data stream.

You can call this method to create a data stream and improve the reliability and ordering of data tranmission.

\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 a 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}[1]{Parameters}
\mbox{\texttt{ out}}  & {\em stream\+Id} & The ID of the stream data. \\
\hline
 & {\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 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_acf920f7dc761e2d7b7e28006c74238b7}\label{classagora_1_1rtc_1_1_i_rtc_engine_acf920f7dc761e2d7b7e28006c74238b7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!createDataStream@{createDataStream}}
\index{createDataStream@{createDataStream}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{createDataStream()}{createDataStream()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::create\+Data\+Stream (\begin{DoxyParamCaption}\item[{int $\ast$}]{stream\+Id,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_data_stream_config}{Data\+Stream\+Config}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Creates a data stream.

Each user can create up to five data streams during the lifecycle of the I\+Channel. 
\begin{DoxyParams}{Parameters}
{\em stream\+Id} & The ID of the created data stream. \\
\hline
{\em config} & The config of data stream. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item Returns 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7006214f7ca3c08d83cc0a4ebcb9febc}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7006214f7ca3c08d83cc0a4ebcb9febc}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!sendStreamMessage@{sendStreamMessage}}
\index{sendStreamMessage@{sendStreamMessage}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{sendStreamMessage()}{sendStreamMessage()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::send\+Stream\+Message (\begin{DoxyParamCaption}\item[{int}]{stream\+Id,  }\item[{const char $\ast$}]{data,  }\item[{size\+\_\+t}]{length }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sends a data stream.

After calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5a3f0168ca6e2e298e4677e9a8b9550a}{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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a0add560882999732aec21098c29280e0}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a3af56e33ca95ccc6b9dce4b2a51c2b33}{on\+Stream\+Message\+Error}} callback on the remote client.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after calling \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a5a3f0168ca6e2e298e4677e9a8b9550a}{create\+Data\+Stream}}.
\item 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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em stream\+Id} & The ID of the stream data. \\
\hline
{\em data} & The data stream. \\
\hline
{\em length} & The length (byte) of the data stream.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a4caf3477d91c3aa0ea8b178948cad8d5}\label{classagora_1_1rtc_1_1_i_rtc_engine_a4caf3477d91c3aa0ea8b178948cad8d5}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!addVideoWatermark@{addVideoWatermark}}
\index{addVideoWatermark@{addVideoWatermark}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{addVideoWatermark()}{addVideoWatermark()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::add\+Video\+Watermark (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_image}{Rtc\+Image}} \&}]{watermark }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

{\bfseries{D\+E\+P\+R\+E\+C\+A\+T\+ED}} Adds a watermark image to the local video or C\+DN live stream.

This method is not recommend, Use \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a36e51346ec3bd5a7370d7c70d58d9394}{add\+Video\+Watermark}}2 instead.

This method adds a P\+NG watermark image to the local video stream for the recording device, channel audience, and C\+DN live audience to view and capture.

To add the P\+NG file to the C\+DN live publishing stream, see the set\+Live\+Transcoding method.


\begin{DoxyParams}{Parameters}
{\em watermark} & Pointer to the watermark image to be added to the local video stream. See \mbox{\hyperlink{structagora_1_1rtc_1_1_rtc_image}{Rtc\+Image}}.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item 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{structagora_1_1rtc_1_1_rtc_image}{Rtc\+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{structagora_1_1rtc_1_1_rtc_image}{Rtc\+Image}} refers to the U\+RL address of the added watermark image in the C\+DN live broadcast.
\end{DoxyItemize}
\item The source file of the watermark image must be in the P\+NG file format. If the width and height of the P\+NG file differ from your settings in this method, the P\+NG file will be cropped to conform to your settings.
\item The Agora S\+DK supports adding only one watermark image onto a local video or C\+DN live stream. The newly added watermark image replaces the previous one.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a36e51346ec3bd5a7370d7c70d58d9394}\label{classagora_1_1rtc_1_1_i_rtc_engine_a36e51346ec3bd5a7370d7c70d58d9394}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!addVideoWatermark@{addVideoWatermark}}
\index{addVideoWatermark@{addVideoWatermark}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{addVideoWatermark()}{addVideoWatermark()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::add\+Video\+Watermark (\begin{DoxyParamCaption}\item[{const char $\ast$}]{watermark\+Url,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_watermark_options}{Watermark\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Adds a watermark image to the local video.

This method adds a P\+NG watermark image to the local video in a live broadcast. Once the watermark image is added, all the audience in the channel (C\+DN audience included), and the recording 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{classagora_1_1rtc_1_1_i_rtc_engine_a9bcbdcee0b5c52f96b32baec1922cf2e}{set\+Video\+Encoder\+Configuration}} method\+:
\begin{DoxyItemize}
\item 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.
\item 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.
\item When setting the watermark position, the region must be less than the dimensions set in the {\ttfamily set\+Video\+Encoder\+Configuration} method. Otherwise, the watermark image will be cropped.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Ensure that you have called the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a7d35fc62d74685d25636f04b04051958}{enable\+Video}} method to enable the video module before calling this method.
\item If you only want to add a watermark image to the local video for the audience in the C\+DN live broadcast channel to see and capture, you can call this method or the set\+Live\+Transcoding method.
\item This method supports adding a watermark image in the P\+NG file format only. Supported pixel formats of the P\+NG image are R\+G\+BA, R\+GB, Palette, Gray, and Alpha\+\_\+gray.
\item If the dimensions of the P\+NG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.
\item If you have enabled the local video preview by calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_aabd5f0d670a6cd26badc316083519512}{start\+Preview}} method, you can use the {\ttfamily visible\+In\+Preview} member in the \mbox{\hyperlink{structagora_1_1rtc_1_1_watermark_options}{Watermark\+Options}} class to set whether or not the watermark is visible in preview.
\item If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em watermark\+Url} & The local file path of the watermark image to be added. This method supports adding a watermark image from the local absolute or relative file path. \\
\hline
{\em options} & Pointer to the watermark\textquotesingle{}s options to be added. See \mbox{\hyperlink{structagora_1_1rtc_1_1_watermark_options}{Watermark\+Options}} for more infomation.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aea42a1ea8b83bc807f68526945f40ec6}\label{classagora_1_1rtc_1_1_i_rtc_engine_aea42a1ea8b83bc807f68526945f40ec6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!clearVideoWatermarks@{clearVideoWatermarks}}
\index{clearVideoWatermarks@{clearVideoWatermarks}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{clearVideoWatermarks()}{clearVideoWatermarks()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::clear\+Video\+Watermarks (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Removes the watermark image on the video stream added by \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a4caf3477d91c3aa0ea8b178948cad8d5}{add\+Video\+Watermark()}}.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7729c859bb2ae7f565ab7a57cf7b6158}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7729c859bb2ae7f565ab7a57cf7b6158}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!pauseAudio@{pauseAudio}}
\index{pauseAudio@{pauseAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAudio()}{pauseAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::pause\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000028}{Deprecated}}]Use \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a1929f01411e983ed776275fe8e8ad45e}{disable\+Audio()}} instead.\end{DoxyRefDesc}


Disables the audio function in the channel.

\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a566a23231286f5286fdb137966093e9f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a566a23231286f5286fdb137966093e9f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!resumeAudio@{resumeAudio}}
\index{resumeAudio@{resumeAudio}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAudio()}{resumeAudio()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::resume\+Audio (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000029}{Deprecated}}]Use \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a996401c7ba33c6ec59527c5d109f548f}{enable\+Audio()}} instead.\end{DoxyRefDesc}


Resumes the audio function in the channel.

\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a5ac70d12ca9b204410c02a9cc1159606}\label{classagora_1_1rtc_1_1_i_rtc_engine_a5ac70d12ca9b204410c02a9cc1159606}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableWebSdkInteroperability@{enableWebSdkInteroperability}}
\index{enableWebSdkInteroperability@{enableWebSdkInteroperability}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableWebSdkInteroperability()}{enableWebSdkInteroperability()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Web\+Sdk\+Interoperability (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables interoperability with the Agora Web S\+DK (Live Broadcast only).

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000030}{Deprecated}}]The Agora NG S\+DK enables the interoperablity with the Web S\+DK.\end{DoxyRefDesc}


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\+: (Default) 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}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_afb6b404d722dd664a39af3919e085213}\label{classagora_1_1rtc_1_1_i_rtc_engine_afb6b404d722dd664a39af3919e085213}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!sendCustomReportMessage@{sendCustomReportMessage}}
\index{sendCustomReportMessage@{sendCustomReportMessage}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{sendCustomReportMessage()}{sendCustomReportMessage()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::send\+Custom\+Report\+Message (\begin{DoxyParamCaption}\item[{const char $\ast$}]{id,  }\item[{const char $\ast$}]{category,  }\item[{const char $\ast$}]{event,  }\item[{const char $\ast$}]{label,  }\item[{int}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a84dbf06de1d769b63200d7ec0289cca0}\label{classagora_1_1rtc_1_1_i_rtc_engine_a84dbf06de1d769b63200d7ec0289cca0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerMediaMetadataObserver@{registerMediaMetadataObserver}}
\index{registerMediaMetadataObserver@{registerMediaMetadataObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerMediaMetadataObserver()}{registerMediaMetadataObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Media\+Metadata\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}} $\ast$}]{observer,  }\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{I\+Metadata\+Observer\+::\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}}}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Registers the metadata observer.

You need to implement the \mbox{\hyperlink{classagora_1_1rtc_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{classagora_1_1rtc_1_1_i_metadata_observer_aa1d7b729f373d985a5bbdd855c4e85d5}{get\+Max\+Metadata\+Size}} callback.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method before the {\ttfamily join\+Channel} method.
\item This method applies to the {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} channel profile.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em observer} & \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}}. \\
\hline
{\em type} & The metadata type. See \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}}. The S\+DK supports V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA (0) only for now.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ace712f59f6fb50d3f9c5f89cffb5e49e}\label{classagora_1_1rtc_1_1_i_rtc_engine_ace712f59f6fb50d3f9c5f89cffb5e49e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!unregisterMediaMetadataObserver@{unregisterMediaMetadataObserver}}
\index{unregisterMediaMetadataObserver@{unregisterMediaMetadataObserver}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{unregisterMediaMetadataObserver()}{unregisterMediaMetadataObserver()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::unregister\+Media\+Metadata\+Observer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}} $\ast$}]{observer,  }\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{I\+Metadata\+Observer\+::\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}}}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Unregisters the metadata observer. 
\begin{DoxyParams}{Parameters}
{\em observer} & \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer}{I\+Metadata\+Observer}}. \\
\hline
{\em type} & The metadata type. See \mbox{\hyperlink{classagora_1_1rtc_1_1_i_metadata_observer_a50ad8779d161456fc709d947b8c7c544}{M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+T\+Y\+PE}}. The S\+DK supports V\+I\+D\+E\+O\+\_\+\+M\+E\+T\+A\+D\+A\+TA (0) only for now.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_af1e558f8fe811ca501f3c04234053a03}\label{classagora_1_1rtc_1_1_i_rtc_engine_af1e558f8fe811ca501f3c04234053a03}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startAudioFrameDump@{startAudioFrameDump}}
\index{startAudioFrameDump@{startAudioFrameDump}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startAudioFrameDump()}{startAudioFrameDump()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Audio\+Frame\+Dump (\begin{DoxyParamCaption}\item[{const char $\ast$}]{channel\+\_\+id,  }\item[{uid\+\_\+t}]{uid,  }\item[{const char $\ast$}]{location,  }\item[{const char $\ast$}]{uuid,  }\item[{const char $\ast$}]{passwd,  }\item[{long}]{duration\+\_\+ms,  }\item[{bool}]{auto\+\_\+upload }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Start audio frame dump.

\mbox{\hyperlink{classagora_1_1_optional}{Optional}} {\ttfamily location} is\+: \char`\"{}pre\+\_\+apm\+\_\+proc\char`\"{}, \char`\"{}apm\char`\"{}, \char`\"{}pre\+\_\+send\+\_\+proc\char`\"{}, \char`\"{}filter\char`\"{}, \char`\"{}enc\char`\"{}, \char`\"{}tx\+\_\+mixer\char`\"{}, \char`\"{}at\+\_\+record\char`\"{}, \char`\"{}atw\+\_\+record\char`\"{} for audio sending. \char`\"{}dec\char`\"{}, \char`\"{}mixed\char`\"{}, \char`\"{}play\char`\"{}, \char`\"{}rx\+\_\+mixer\char`\"{}, \char`\"{}playback\+\_\+mixer\char`\"{}, \char`\"{}pcm\+\_\+source\+\_\+playback\+\_\+mixer\char`\"{}, \char`\"{}pre\+\_\+play\+\_\+proc\char`\"{}, \char`\"{}at\+\_\+playout\char`\"{}, \char`\"{}atw\+\_\+playout\char`\"{} for audio receiving. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a273c143c4df3e74b9aea29d4027b2e9c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a273c143c4df3e74b9aea29d4027b2e9c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopAudioFrameDump@{stopAudioFrameDump}}
\index{stopAudioFrameDump@{stopAudioFrameDump}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopAudioFrameDump()}{stopAudioFrameDump()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Audio\+Frame\+Dump (\begin{DoxyParamCaption}\item[{const char $\ast$}]{channel\+\_\+id,  }\item[{uid\+\_\+t}]{uid,  }\item[{const char $\ast$}]{location }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the audio frame dump. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a2a447c3a89480e5bca78af01d3188710}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2a447c3a89480e5bca78af01d3188710}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAINSMode@{setAINSMode}}
\index{setAINSMode@{setAINSMode}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAINSMode()}{setAINSMode()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+A\+I\+N\+S\+Mode (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{A\+U\+D\+I\+O\+\_\+\+A\+I\+N\+S\+\_\+\+M\+O\+DE}]{mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a0d44b74ced4005ee86353c13186f870d}\label{classagora_1_1rtc_1_1_i_rtc_engine_a0d44b74ced4005ee86353c13186f870d}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!registerLocalUserAccount@{registerLocalUserAccount}}
\index{registerLocalUserAccount@{registerLocalUserAccount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{registerLocalUserAccount()}{registerLocalUserAccount()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::register\+Local\+User\+Account (\begin{DoxyParamCaption}\item[{const char $\ast$}]{app\+Id,  }\item[{const char $\ast$}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a919404869f86412e1945c730e5219b20}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a0d44b74ced4005ee86353c13186f870d}{register\+Local\+User\+Account}} method to create a user account, and then the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}{join\+Channel\+With\+User\+Account}} method to join the channel.
\item Call the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}{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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}{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{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}\label{classagora_1_1rtc_1_1_i_rtc_engine_a14f8c308c6c57c55653552b939a8527a}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!joinChannelWithUserAccount@{joinChannelWithUserAccount}}
\index{joinChannelWithUserAccount@{joinChannelWithUserAccount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannelWithUserAccount()}{joinChannelWithUserAccount()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::join\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{const char $\ast$}]{user\+Account }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a919404869f86412e1945c730e5219b20}{on\+Local\+User\+Registered}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aafceb1f91ae9bd82317bf25981e6851b}{on\+Join\+Channel\+Success}} .
\item The remote client\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a985a675469baf9d54feb8781732e0ca8}{on\+User\+Joined}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{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\+Id} & 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
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ac503f610f1d6bdfa1def75a94646b489}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac503f610f1d6bdfa1def75a94646b489}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!joinChannelWithUserAccount@{joinChannelWithUserAccount}}
\index{joinChannelWithUserAccount@{joinChannelWithUserAccount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannelWithUserAccount()}{joinChannelWithUserAccount()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::join\+Channel\+With\+User\+Account (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{const char $\ast$}]{user\+Account,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a919404869f86412e1945c730e5219b20}{on\+Local\+User\+Registered}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aafceb1f91ae9bd82317bf25981e6851b}{on\+Join\+Channel\+Success}} .
\item The remote client\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a985a675469baf9d54feb8781732e0ca8}{on\+User\+Joined}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{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\+Id} & 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. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a124148443b2438da668fb683e96a9f41}\label{classagora_1_1rtc_1_1_i_rtc_engine_a124148443b2438da668fb683e96a9f41}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!joinChannelWithUserAccountEx@{joinChannelWithUserAccountEx}}
\index{joinChannelWithUserAccountEx@{joinChannelWithUserAccountEx}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{joinChannelWithUserAccountEx()}{joinChannelWithUserAccountEx()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::join\+Channel\+With\+User\+Account\+Ex (\begin{DoxyParamCaption}\item[{const char $\ast$}]{token,  }\item[{const char $\ast$}]{channel\+Id,  }\item[{const char $\ast$}]{user\+Account,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_options}{Channel\+Media\+Options}} \&}]{options,  }\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}} $\ast$}]{event\+Handler }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a919404869f86412e1945c730e5219b20}{on\+Local\+User\+Registered}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_aafceb1f91ae9bd82317bf25981e6851b}{on\+Join\+Channel\+Success}} .
\item The remote client\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a985a675469baf9d54feb8781732e0ca8}{on\+User\+Joined}} and \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{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\+Id} & 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
{\em event\+Handler} & The pointer to the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}} event handler\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler}{I\+Rtc\+Engine\+Event\+Handler}}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_acba378be5f666f84c64713197587dc43}\label{classagora_1_1rtc_1_1_i_rtc_engine_acba378be5f666f84c64713197587dc43}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getUserInfoByUserAccount@{getUserInfoByUserAccount}}
\index{getUserInfoByUserAccount@{getUserInfoByUserAccount}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getUserInfoByUserAccount()}{getUserInfoByUserAccount()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+User\+Info\+By\+User\+Account (\begin{DoxyParamCaption}\item[{const char $\ast$}]{user\+Account,  }\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_user_info}{rtc\+::\+User\+Info}} $\ast$}]{user\+Info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{on\+User\+Info\+Updated}} callback on the local client.

After receiving the o\mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{on\+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}[1]{Parameters}
 & {\em user\+Account} & The user account of the user. Ensure that you set this parameter. \\
\hline
\mbox{\texttt{ in,out}}  & {\em user\+Info} & A user\+Info object that identifies the user\+:
\begin{DoxyItemize}
\item Input\+: A user\+Info object.
\item Output\+: A user\+Info object that contains the user account and user ID of the user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a7a34efc30c42f0c200aacd6a6f1dc386}\label{classagora_1_1rtc_1_1_i_rtc_engine_a7a34efc30c42f0c200aacd6a6f1dc386}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getUserInfoByUid@{getUserInfoByUid}}
\index{getUserInfoByUid@{getUserInfoByUid}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getUserInfoByUid()}{getUserInfoByUid()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+User\+Info\+By\+Uid (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_user_info}{rtc\+::\+User\+Info}} $\ast$}]{user\+Info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{on\+User\+Info\+Updated}} callback on the local client.

After receiving the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_ad086cc4d8e5555cc75a0ab264c16d5ff}{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}[1]{Parameters}
 & {\em uid} & The user ID of the remote user. Ensure that you set this parameter. \\
\hline
\mbox{\texttt{ in,out}}  & {\em user\+Info} & A user\+Info object that identifies the user\+:
\begin{DoxyItemize}
\item Input\+: A user\+Info object.
\item Output\+: A user\+Info object that contains the user account and user ID of the user.
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_acba3bb84e41b87472ad9936bde372552}\label{classagora_1_1rtc_1_1_i_rtc_engine_acba3bb84e41b87472ad9936bde372552}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startOrUpdateChannelMediaRelay@{startOrUpdateChannelMediaRelay}}
\index{startOrUpdateChannelMediaRelay@{startOrUpdateChannelMediaRelay}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startOrUpdateChannelMediaRelay()}{startOrUpdateChannelMediaRelay()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Or\+Update\+Channel\+Media\+Relay (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_relay_configuration}{Channel\+Media\+Relay\+Configuration}} \&}]{configuration }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Starts relaying media streams across channels or updates the channels for media relay.

After a successful method call, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a1891ed124db5f74747e74ca3b3eb23e9}{on\+Channel\+Media\+Relay\+State\+Changed}} callback, and this callback return the state of the media stream relay.
\begin{DoxyItemize}
\item If the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a1891ed124db5f74747e74ca3b3eb23e9}{on\+Channel\+Media\+Relay\+State\+Changed}} callback returns \#\+R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+U\+N\+N\+I\+NG (2) and \#\+R\+E\+L\+A\+Y\+\_\+\+OK (0), the host starts sending data to the destination channel.
\item If the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a1891ed124db5f74747e74ca3b3eb23e9}{on\+Channel\+Media\+Relay\+State\+Changed}} callback returns \#\+R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+F\+A\+I\+L\+U\+RE (3), an exception occurs during the media stream relay.
\end{DoxyItemize}

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Call this method after the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{join\+Channel}} method.
\item This method takes effect only when you are a host in a {\ttfamily L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+NG} channel.
\item Contact \href{mailto:sales-us@agora.io}{\texttt{ sales-\/us@agora.\+io}} before implementing this function.
\item We do not support string user accounts in this A\+PI.
\end{DoxyItemize}
\end{DoxyNote}
\begin{DoxySince}{Since}
v4.\+2.\+0 
\end{DoxySince}

\begin{DoxyParams}{Parameters}
{\em configuration} & The configuration of the media stream relay\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_channel_media_relay_configuration}{Channel\+Media\+Relay\+Configuration}}.\\
\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).
\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 -\/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. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab4a1c52a83a08f7dacab6de36f4681b8}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab4a1c52a83a08f7dacab6de36f4681b8}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopChannelMediaRelay@{stopChannelMediaRelay}}
\index{stopChannelMediaRelay@{stopChannelMediaRelay}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopChannelMediaRelay()}{stopChannelMediaRelay()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Stops the media stream relay.

Once the relay stops, the host quits all the destination channels.

After a successful method call, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a1891ed124db5f74747e74ca3b3eb23e9}{on\+Channel\+Media\+Relay\+State\+Changed}} callback. If the callback returns \#\+R\+E\+L\+A\+Y\+\_\+\+S\+T\+A\+T\+E\+\_\+\+I\+D\+LE (0) and \#\+R\+E\+L\+A\+Y\+\_\+\+OK (0), the host successfully stops the relay.

\begin{DoxyNote}{Note}
If the method call fails, the S\+DK triggers the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_a1891ed124db5f74747e74ca3b3eb23e9}{on\+Channel\+Media\+Relay\+State\+Changed}} callback with the \#\+R\+E\+L\+A\+Y\+\_\+\+E\+R\+R\+O\+R\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+N\+O\+\_\+\+R\+E\+S\+P\+O\+N\+SE (2) or \#\+R\+E\+L\+A\+Y\+\_\+\+E\+R\+R\+O\+R\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+L\+O\+ST (8) state code. You can leave the channel by calling the \mbox{\hyperlink{classagora_1_1rtc_1_1_i_rtc_engine_a51c12d209373650638bfd82e28777081}{leave\+Channel}} method, and the media stream relay automatically stops.
\end{DoxyNote}
\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{classagora_1_1rtc_1_1_i_rtc_engine_a6761e2f090290567d1f592841c40d96c}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6761e2f090290567d1f592841c40d96c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!pauseAllChannelMediaRelay@{pauseAllChannelMediaRelay}}
\index{pauseAllChannelMediaRelay@{pauseAllChannelMediaRelay}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{pauseAllChannelMediaRelay()}{pauseAllChannelMediaRelay()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::pause\+All\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a92a74b5b3752d285dfdb769607220e70}\label{classagora_1_1rtc_1_1_i_rtc_engine_a92a74b5b3752d285dfdb769607220e70}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!resumeAllChannelMediaRelay@{resumeAllChannelMediaRelay}}
\index{resumeAllChannelMediaRelay@{resumeAllChannelMediaRelay}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{resumeAllChannelMediaRelay()}{resumeAllChannelMediaRelay()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::resume\+All\+Channel\+Media\+Relay (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_aab97152512979f2a3b23b7e2d725d43c}\label{classagora_1_1rtc_1_1_i_rtc_engine_aab97152512979f2a3b23b7e2d725d43c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setDirectCdnStreamingAudioConfiguration@{setDirectCdnStreamingAudioConfiguration}}
\index{setDirectCdnStreamingAudioConfiguration@{setDirectCdnStreamingAudioConfiguration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setDirectCdnStreamingAudioConfiguration()}{setDirectCdnStreamingAudioConfiguration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Direct\+Cdn\+Streaming\+Audio\+Configuration (\begin{DoxyParamCaption}\item[{A\+U\+D\+I\+O\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE}]{profile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Set audio parameters for direct streaming to C\+DN

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

\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{classagora_1_1rtc_1_1_i_rtc_engine_a6c69261e800f7e7c691bdc439b97d077}\label{classagora_1_1rtc_1_1_i_rtc_engine_a6c69261e800f7e7c691bdc439b97d077}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setDirectCdnStreamingVideoConfiguration@{setDirectCdnStreamingVideoConfiguration}}
\index{setDirectCdnStreamingVideoConfiguration@{setDirectCdnStreamingVideoConfiguration}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setDirectCdnStreamingVideoConfiguration()}{setDirectCdnStreamingVideoConfiguration()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Direct\+Cdn\+Streaming\+Video\+Configuration (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_video_encoder_configuration}{Video\+Encoder\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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\+: \mbox{\hyperlink{structagora_1_1rtc_1_1_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{classagora_1_1rtc_1_1_i_rtc_engine_a92946ac873b25e343da2f63b4d421ac6}\label{classagora_1_1rtc_1_1_i_rtc_engine_a92946ac873b25e343da2f63b4d421ac6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startDirectCdnStreaming@{startDirectCdnStreaming}}
\index{startDirectCdnStreaming@{startDirectCdnStreaming}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startDirectCdnStreaming()}{startDirectCdnStreaming()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Direct\+Cdn\+Streaming (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classagora_1_1rtc_1_1_i_direct_cdn_streaming_event_handler}{I\+Direct\+Cdn\+Streaming\+Event\+Handler}} $\ast$}]{event\+Handler,  }\item[{const char $\ast$}]{publish\+Url,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Start direct cdn streaming


\begin{DoxyParams}{Parameters}
{\em event\+Handler} & A pointer to the direct cdn streaming event handler\+: \mbox{\hyperlink{classagora_1_1rtc_1_1_i_direct_cdn_streaming_event_handler}{I\+Direct\+Cdn\+Streaming\+Event\+Handler}}. \\
\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{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_a1f179ea962004b38b31a43716162bb75}\label{classagora_1_1rtc_1_1_i_rtc_engine_a1f179ea962004b38b31a43716162bb75}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopDirectCdnStreaming@{stopDirectCdnStreaming}}
\index{stopDirectCdnStreaming@{stopDirectCdnStreaming}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopDirectCdnStreaming()}{stopDirectCdnStreaming()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Direct\+Cdn\+Streaming (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_aaff02b17e9cc532b9ac907059d7926c0}\label{classagora_1_1rtc_1_1_i_rtc_engine_aaff02b17e9cc532b9ac907059d7926c0}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!updateDirectCdnStreamingMediaOptions@{updateDirectCdnStreamingMediaOptions}}
\index{updateDirectCdnStreamingMediaOptions@{updateDirectCdnStreamingMediaOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{updateDirectCdnStreamingMediaOptions()}{updateDirectCdnStreamingMediaOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::update\+Direct\+Cdn\+Streaming\+Media\+Options (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_direct_cdn_streaming_media_options}{Direct\+Cdn\+Streaming\+Media\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_a2899990fedbf999432466b3f8ddaea1f}\label{classagora_1_1rtc_1_1_i_rtc_engine_a2899990fedbf999432466b3f8ddaea1f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startRhythmPlayer@{startRhythmPlayer}}
\index{startRhythmPlayer@{startRhythmPlayer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startRhythmPlayer()}{startRhythmPlayer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Rhythm\+Player (\begin{DoxyParamCaption}\item[{const char $\ast$}]{sound1,  }\item[{const char $\ast$}]{sound2,  }\item[{const Agora\+Rhythm\+Player\+Config \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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 config} & The configuration of rhythm player.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab20b4c61b34a95b3f5e08dd2da48779e}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab20b4c61b34a95b3f5e08dd2da48779e}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!stopRhythmPlayer@{stopRhythmPlayer}}
\index{stopRhythmPlayer@{stopRhythmPlayer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{stopRhythmPlayer()}{stopRhythmPlayer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::stop\+Rhythm\+Player (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Disables the rhythm player.

\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab79a8bc476bcc23c81862576bd058d99}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab79a8bc476bcc23c81862576bd058d99}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!configRhythmPlayer@{configRhythmPlayer}}
\index{configRhythmPlayer@{configRhythmPlayer}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{configRhythmPlayer()}{configRhythmPlayer()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::config\+Rhythm\+Player (\begin{DoxyParamCaption}\item[{const Agora\+Rhythm\+Player\+Config \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Configures the rhythm player.


\begin{DoxyParams}{Parameters}
{\em config} & The configuration of rhythm player.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
int
\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a5a751731d775a65b67c52a9e4f167844}\label{classagora_1_1rtc_1_1_i_rtc_engine_a5a751731d775a65b67c52a9e4f167844}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!takeSnapshot@{takeSnapshot}}
\index{takeSnapshot@{takeSnapshot}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{takeSnapshot()}{takeSnapshot()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::take\+Snapshot (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{const char $\ast$}]{file\+Path }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_aa2f627ab6af61861628c04066453e8df}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa2f627ab6af61861628c04066453e8df}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!takeSnapshot@{takeSnapshot}}
\index{takeSnapshot@{takeSnapshot}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{takeSnapshot()}{takeSnapshot()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::take\+Snapshot (\begin{DoxyParamCaption}\item[{uid\+\_\+t}]{uid,  }\item[{const \mbox{\hyperlink{structagora_1_1media_1_1_snapshot_config}{media\+::\+Snapshot\+Config}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{structagora_1_1rtc_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{classagora_1_1rtc_1_1_i_rtc_engine_ac0caaeeaaffaebc35cd2312d05f85b93}\label{classagora_1_1rtc_1_1_i_rtc_engine_ac0caaeeaaffaebc35cd2312d05f85b93}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableContentInspect@{enableContentInspect}}
\index{enableContentInspect@{enableContentInspect}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableContentInspect()}{enableContentInspect()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Content\+Inspect (\begin{DoxyParamCaption}\item[{bool}]{enabled,  }\item[{const \mbox{\hyperlink{structagora_1_1media_1_1_content_inspect_config}{media\+::\+Content\+Inspect\+Config}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Enables the content inspect. 
\begin{DoxyParams}{Parameters}
{\em enabled} & Whether to enable content inspect\+:
\begin{DoxyItemize}
\item {\ttfamily true}\+: Yes.
\item {\ttfamily false}\+: No. 
\end{DoxyItemize}\\
\hline
{\em config} & The configuration for the content inspection. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aff1329c23bbcaff769101ae08f91b869}\label{classagora_1_1rtc_1_1_i_rtc_engine_aff1329c23bbcaff769101ae08f91b869}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setCloudProxy@{setCloudProxy}}
\index{setCloudProxy@{setCloudProxy}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setCloudProxy()}{setCloudProxy()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Cloud\+Proxy (\begin{DoxyParamCaption}\item[{C\+L\+O\+U\+D\+\_\+\+P\+R\+O\+X\+Y\+\_\+\+T\+Y\+PE}]{proxy\+Type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Sets the Agora cloud proxy service.

\begin{DoxySince}{Since}
v3.\+3.\+0
\end{DoxySince}
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 allowlist; then, call this method to enable the cloud proxy and set the {\ttfamily proxy\+Type} parameter as {\ttfamily 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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_af409b2e721d345a65a2c600cea2f5eb4}{on\+Connection\+State\+Changed}} (C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+S\+T\+A\+T\+E\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+NG, C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+C\+H\+A\+N\+G\+E\+D\+\_\+\+S\+E\+T\+T\+I\+N\+G\+\_\+\+P\+R\+O\+X\+Y\+\_\+\+S\+E\+R\+V\+ER) callback.

To disable the cloud proxy that has been set, call {\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}.

\begin{DoxyNote}{Note}

\begin{DoxyItemize}
\item Agora recommends that you call this method before joining the channel or after leaving the channel.
\item 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.
\end{DoxyItemize}
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em proxy\+Type} & The cloud proxy type, see \#\+C\+L\+O\+U\+D\+\_\+\+P\+R\+O\+X\+Y\+\_\+\+T\+Y\+PE. This parameter is required, and the S\+DK reports an error if you do not pass in a value.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure.
\begin{DoxyItemize}
\item {\ttfamily -\/2(E\+R\+R\+\_\+\+I\+N\+V\+A\+L\+I\+D\+\_\+\+A\+R\+G\+U\+M\+E\+NT)}\+: The parameter is invalid.
\item {\ttfamily -\/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}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a00358b706ea747938165984198b16009}\label{classagora_1_1rtc_1_1_i_rtc_engine_a00358b706ea747938165984198b16009}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setLocalAccessPoint@{setLocalAccessPoint}}
\index{setLocalAccessPoint@{setLocalAccessPoint}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setLocalAccessPoint()}{setLocalAccessPoint()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Local\+Access\+Point (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}} \&}]{config }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

set local access point addresses in local proxy mode. use this method before join channel.


\begin{DoxyParams}{Parameters}
{\em config} & The \mbox{\hyperlink{structagora_1_1rtc_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}} class, See the definition of \mbox{\hyperlink{structagora_1_1rtc_1_1_local_access_point_configuration}{Local\+Access\+Point\+Configuration}} for details.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success
\item $<$ 0\+: Failure 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aa670b2c3dff1726603c3a1a90f1afe49}\label{classagora_1_1rtc_1_1_i_rtc_engine_aa670b2c3dff1726603c3a1a90f1afe49}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAdvancedAudioOptions@{setAdvancedAudioOptions}}
\index{setAdvancedAudioOptions@{setAdvancedAudioOptions}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAdvancedAudioOptions()}{setAdvancedAudioOptions()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Advanced\+Audio\+Options (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structagora_1_1rtc_1_1_advanced_audio_options}{Advanced\+Audio\+Options}} \&}]{options,  }\item[{int}]{source\+Type = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

set advanced audio options. 
\begin{DoxyParams}{Parameters}
{\em options} & The \mbox{\hyperlink{structagora_1_1rtc_1_1_advanced_audio_options}{Advanced\+Audio\+Options}} class, See the definition of \mbox{\hyperlink{structagora_1_1rtc_1_1_advanced_audio_options}{Advanced\+Audio\+Options}} for details.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success
\item $<$ 0\+: Failure 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab8ffc1ea81220f8002e4520265ecc93c}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab8ffc1ea81220f8002e4520265ecc93c}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setAVSyncSource@{setAVSyncSource}}
\index{setAVSyncSource@{setAVSyncSource}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setAVSyncSource()}{setAVSyncSource()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+A\+V\+Sync\+Source (\begin{DoxyParamCaption}\item[{const char $\ast$}]{channel\+Id,  }\item[{uid\+\_\+t}]{uid }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

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{classagora_1_1rtc_1_1_i_rtc_engine_a38dfb62675bf5d36d13aca09b08753f7}\label{classagora_1_1rtc_1_1_i_rtc_engine_a38dfb62675bf5d36d13aca09b08753f7}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableVideoImageSource@{enableVideoImageSource}}
\index{enableVideoImageSource@{enableVideoImageSource}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableVideoImageSource()}{enableVideoImageSource()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Video\+Image\+Source (\begin{DoxyParamCaption}\item[{bool}]{enable,  }\item[{const \mbox{\hyperlink{structagora_1_1rtc_1_1_image_track_options}{Image\+Track\+Options}} \&}]{options }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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


\begin{DoxyParams}{Parameters}
{\em enable} & true for enable, false for disable \\
\hline
{\em options} & options for image track \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a90cf9cbde4bd5db0eb344e2198e86b29}\label{classagora_1_1rtc_1_1_i_rtc_engine_a90cf9cbde4bd5db0eb344e2198e86b29}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableWirelessAccelerate@{enableWirelessAccelerate}}
\index{enableWirelessAccelerate@{enableWirelessAccelerate}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableWirelessAccelerate()}{enableWirelessAccelerate()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Wireless\+Accelerate (\begin{DoxyParamCaption}\item[{bool}]{enabled }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Turns 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{classagora_1_1rtc_1_1_i_rtc_engine_a89cd1b4d85e8eac5e7faf5a199f20884}\label{classagora_1_1rtc_1_1_i_rtc_engine_a89cd1b4d85e8eac5e7faf5a199f20884}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getNetworkType@{getNetworkType}}
\index{getNetworkType@{getNetworkType}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getNetworkType()}{getNetworkType()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Network\+Type (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

get network type value

\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{classagora_1_1rtc_1_1_i_rtc_engine_ae3eb20847152978256482faeefcafb7b}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae3eb20847152978256482faeefcafb7b}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!setParameters@{setParameters}}
\index{setParameters@{setParameters}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{setParameters()}{setParameters()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::set\+Parameters (\begin{DoxyParamCaption}\item[{const char $\ast$}]{parameters }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Provides the technical preview functionalities or special customizations by configuring the S\+DK with J\+S\+ON options.


\begin{DoxyParams}{Parameters}
{\em parameters} & Pointer to the set parameters in a J\+S\+ON string.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: Success.
\item $<$ 0\+: Failure. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a48313e38de920085528b0017cfc91672}\label{classagora_1_1rtc_1_1_i_rtc_engine_a48313e38de920085528b0017cfc91672}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!startMediaRenderingTracing@{startMediaRenderingTracing}}
\index{startMediaRenderingTracing@{startMediaRenderingTracing}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{startMediaRenderingTracing()}{startMediaRenderingTracing()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::start\+Media\+Rendering\+Tracing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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{classagora_1_1rtc_1_1_i_rtc_engine_event_handler_af157b707afd93a5b0ab39569e46a6cd4}{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{classagora_1_1rtc_1_1_i_rtc_engine_adc937172e59bd2695ea171553a88188c}{I\+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{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ab47250a1a4e0e3eb82916ea75017dd4f}\label{classagora_1_1rtc_1_1_i_rtc_engine_ab47250a1a4e0e3eb82916ea75017dd4f}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!enableInstantMediaRendering@{enableInstantMediaRendering}}
\index{enableInstantMediaRendering@{enableInstantMediaRendering}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{enableInstantMediaRendering()}{enableInstantMediaRendering()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::enable\+Instant\+Media\+Rendering (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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{classagora_1_1rtc_1_1_i_rtc_engine}{I\+Rtc\+Engine}}} instance before calling this method. 
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_ae5109a2a8ca8a3106961ee783d6c0cf6}\label{classagora_1_1rtc_1_1_i_rtc_engine_ae5109a2a8ca8a3106961ee783d6c0cf6}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!getNtpWallTimeInMs@{getNtpWallTimeInMs}}
\index{getNtpWallTimeInMs@{getNtpWallTimeInMs}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{getNtpWallTimeInMs()}{getNtpWallTimeInMs()}}
{\footnotesize\ttfamily virtual uint64\+\_\+t agora\+::rtc\+::\+I\+Rtc\+Engine\+::get\+Ntp\+Wall\+Time\+In\+Ms (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Return current N\+T\+P(unix timestamp) time in milliseconds. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a90aef5ccd7a6002b407925c14ab11131}\label{classagora_1_1rtc_1_1_i_rtc_engine_a90aef5ccd7a6002b407925c14ab11131}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!isFeatureAvailableOnDevice@{isFeatureAvailableOnDevice}}
\index{isFeatureAvailableOnDevice@{isFeatureAvailableOnDevice}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{isFeatureAvailableOnDevice()}{isFeatureAvailableOnDevice()}}
{\footnotesize\ttfamily virtual bool agora\+::rtc\+::\+I\+Rtc\+Engine\+::is\+Feature\+Available\+On\+Device (\begin{DoxyParamCaption}\item[{Feature\+Type}]{type }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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. See Feature\+Type. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: available.
\item false\+: not available. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_aebe07c328e87d4f374b06a437e2bacde}\label{classagora_1_1rtc_1_1_i_rtc_engine_aebe07c328e87d4f374b06a437e2bacde}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!sendAudioMetadata@{sendAudioMetadata}}
\index{sendAudioMetadata@{sendAudioMetadata}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{sendAudioMetadata()}{sendAudioMetadata()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::send\+Audio\+Metadata (\begin{DoxyParamCaption}\item[{const char $\ast$}]{metadata,  }\item[{size\+\_\+t}]{length }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



send audio metadata 

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

\begin{DoxyParams}{Parameters}
{\em metadata} & The pointer of metadata \\
\hline
{\em length} & Size of metadata \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: success
\item $<$0\+: failure @technical preview 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_rtc_engine_a8ba17007e0e12805eba89378d4c0b0cb}\label{classagora_1_1rtc_1_1_i_rtc_engine_a8ba17007e0e12805eba89378d4c0b0cb}} 
\index{agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}!queryHDRCapability@{queryHDRCapability}}
\index{queryHDRCapability@{queryHDRCapability}!agora::rtc::IRtcEngine@{agora::rtc::IRtcEngine}}
\doxysubsubsection{\texorpdfstring{queryHDRCapability()}{queryHDRCapability()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Rtc\+Engine\+::query\+H\+D\+R\+Capability (\begin{DoxyParamCaption}\item[{V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+T\+Y\+PE}]{video\+Module,  }\item[{H\+D\+R\+\_\+\+C\+A\+P\+A\+B\+I\+L\+I\+TY \&}]{capability }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Queries the H\+DR capability of the video module. 


\begin{DoxyParams}{Parameters}
{\em video\+Module} & The video module. See V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+T\+Y\+PE \\
\hline
{\em capability} & H\+DR capability of video module. See H\+D\+R\+\_\+\+C\+A\+P\+A\+B\+I\+L\+I\+TY \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item 0\+: success
\item $<$0\+: failure @technical preview 
\end{DoxyItemize}
\end{DoxyReturn}
