{\bfseries{Note}}\+: Please update this file for every Agora A\+PI change you do. Simply fill in your updates in the Working section below.

\doxysection*{Agora Low Level A\+P\+Is (Working) }

\doxysection*{A\+PI (yyyy-\/mm-\/dd) }

Purpose of this change

\doxysubsection*{A\+PI file name \#1 }

{\bfseries{Add\+:}} Short description
\begin{DoxyItemize}
\item Foo()
\item Bar()
\end{DoxyItemize}

{\bfseries{Modified\+:}} Short description
\begin{DoxyItemize}
\item Changes Foo() to Foo1()
\item Changes Bar() to Bar1()
\end{DoxyItemize}

\doxysection*{A\+PI (2025-\/06-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add callback functions of remote audio context info.
\begin{DoxyItemize}
\item virtual void on\+Remote\+Audio\+Context\+Info\+Changed()
\end{DoxyItemize}

\doxysection*{A\+PI (2025-\/04-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int enable\+Audio\+Burst\+Accelerate(bool enable)
\end{DoxyItemize}

\doxysection*{A\+PI (2025-\/03-\/25) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+O\+F\+F\+I\+C\+E\+\_\+\+T\+A\+R\+G\+E\+T\+\_\+\+E\+X\+E\+\_\+\+L\+I\+ST
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+W\+P\+S\+\_\+\+T\+A\+R\+G\+E\+T\+\_\+\+E\+X\+E\+\_\+\+L\+I\+ST
\end{DoxyItemize}

\doxysection*{A\+PI (2025-\/03-\/31) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+H\+O\+W\+\_\+\+A\+G\+O\+R\+A\+\_\+\+B\+O\+R\+D\+E\+R\+\_\+\+W\+H\+E\+N\+\_\+\+W\+I\+N\+D\+O\+W\+\_\+\+M\+A\+X\+I\+M\+I\+Z\+ED
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/12-\/24) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+F\+O\+R\+C\+E\+\_\+\+D\+I\+S\+A\+B\+L\+E\+\_\+\+W\+G\+C\+\_\+\+F\+R\+A\+M\+E\+\_\+\+D\+I\+FF
\end{DoxyItemize}

\doxysection*{A\+PI (2025-\/07-\/15) }

\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} {\bfseries{Add}} add a member(bool disable\+\_\+frame\+\_\+transparent\+\_\+check) for struct Video\+Capture\+Config

\doxysection*{A\+PI (2024-\/10-\/12) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_sync_client_8h_source}{N\+G\+I\+Agora\+Sync\+Client.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add default initialze param in construct
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/09-\/24) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+I\+N\+G\+N\+O\+R\+E\+\_\+\+U\+N\+R\+E\+S\+P\+O\+N\+S\+I\+VE
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/09-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add capture\+Mode in Video\+Capture\+Config
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/09-\/03) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify type of display\+\_\+id from uint32\+\_\+t to int64\+\_\+t
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/08-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add aosl\+\_\+ref\+\_\+t default paramters to I\+Local\+Audio\+Track\+::set\+Max\+Buffered\+Audio\+Frame\+Number
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/06-\/12) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+External\+Remote\+Egl\+Context(void$\ast$ egl\+Context)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/08-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add \char`\"{}virtual int set\+Remote\+Render\+Target\+Fps(int target\+Fps) = 0;\char`\"{}
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/15) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Modified\+:}} -\/Modify a parameter(\+Audio\+Enc\+Frame\+Recv\+Params\& recv\+Params) for method register\+Audio\+Encoded\+Frame\+Receiver

\doxysection*{A\+PI (2024-\/07-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add V\+I\+D\+E\+O\+\_\+\+P\+O\+S\+T\+\_\+\+C\+A\+P\+T\+U\+R\+E\+\_\+\+F\+I\+L\+T\+ER, V\+I\+D\+E\+O\+\_\+\+P\+R\+E\+\_\+\+P\+R\+E\+V\+I\+E\+W\+\_\+\+F\+I\+L\+T\+ER, V\+I\+D\+E\+O\+\_\+\+P\+R\+E\+\_\+\+E\+N\+C\+O\+D\+E\+R\+\_\+\+F\+I\+L\+T\+ER for E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/14) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item new\+\_\+e2e\+\_\+delay\+\_\+ms
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_sync_client_8h_source}{N\+G\+I\+Agora\+Sync\+Client.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add virtual int32\+\_\+t add\+Readable(const char$\ast$ database, const char$\ast$ coll, const char$\ast$ readable, aosl\+\_\+ref\+\_\+t ares = A\+O\+S\+L\+\_\+\+R\+E\+F\+\_\+\+I\+N\+V\+A\+L\+ID) = 0;
\item Add virtual int32\+\_\+t remove\+Readable(const char$\ast$ database, const char$\ast$ coll, const char$\ast$ readable, aosl\+\_\+ref\+\_\+t ares = A\+O\+S\+L\+\_\+\+R\+E\+F\+\_\+\+I\+N\+V\+A\+L\+ID) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/08) }

config\+\_\+engine\+\_\+i.\+h {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+F\+A\+L\+B\+A\+C\+K\+\_\+\+T\+O\+\_\+\+G\+D\+I\+\_\+\+W\+I\+T\+H\+\_\+\+W\+G\+C\+\_\+\+B\+O\+R\+D\+E\+R\+\_\+\+I\+S\+S\+UE
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/05) }

\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} {\bfseries{Add}} add a member(bool disable\+\_\+avf) for struct Video\+Capture\+Config

\doxysection*{A\+PI (2024-\/07-\/02) }

Local\+Audio\+Track add set\+Max\+Buffered\+Audio\+Frame\+Number and Clear\+Sender\+Buffer

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item set\+Max\+Buffered\+Audio\+Frame\+Number
\item Clear\+Sender\+Buffer
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/01) }

\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} {\bfseries{Add\+:}} add a member(decoder\+\_\+type) for struct Remote\+Video\+Track\+Stats
\begin{DoxyItemize}
\item uint32\+\_\+t decoder\+\_\+type
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/06-\/05) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::full\+\_\+frozen\+\_\+time\+\_\+80\+\_\+ms
\item Remote\+Audio\+Track\+Stats\+::full\+\_\+frozen\+\_\+time\+\_\+200\+\_\+ms \doxysection*{A\+PI (2024-\/06-\/06) }
\end{DoxyItemize}

Changes for media recorder

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add create\+Media\+Recorder()
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/06-\/06) }

Changes for media recorder {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add a header\+: \mbox{\hyperlink{_i_agora_media_recorder2_8h_source}{I\+Agora\+Media\+Recorder2.\+h}}
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/05-\/20) }

Changes for Audio\+Session\+Configuration

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item category for struct Audio\+Session\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/05-\/08) }

{\bfseries{Modified\+:}} add ares parameter for media relay interface

\doxysection*{A\+PI (2024-\/04-\/30) }

Adaption for rtm2 in sync interface

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_sync_client_8h_source}{N\+G\+I\+Agora\+Sync\+Client.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add more enum value as return value
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/06-\/04) }

modify create\+Collection

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_sync_client_8h_source}{N\+G\+I\+Agora\+Sync\+Client.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item remove parameter const char$\ast$$\ast$ writable, int write\+Size
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/04-\/02) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add fence\+\_\+object in Texture\+Info
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/04-\/02) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add set\+Log\+Writer \&\& release\+Log\+Writer
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/04-\/02) }

Audio metadata

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add \char`\"{}@technical preview\char`\"{} for audio metadata api
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/4-\/01) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}} ~\newline
 -- Changes virtual bool I\+Audio\+Track\+::add\+Audio\+Filter -- Add I\+Audio\+Filter\+V2 interface -- Add $\ast$\+With\+Context interface in I\+Media\+Extension\+Observer

\doxysection*{A\+PI (2024-\/03-\/25) }

Loopback recording.

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add a parameter for I\+Agora\+Service\+::create\+Recording\+Device\+Audio\+Track()
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/03-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+L\+I\+P\+\_\+\+S\+Y\+N\+C\+\_\+\+P\+R\+O\+C\+E\+S\+S\+I\+N\+G\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider create\+Lip\+Sync\+Filter
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/23) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add struct Stream\+Layer\+Index\+Internal \& Stream\+Layer\+Config\+Internal for simulcast
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/08-\/24) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+D\+O\+\_\+\+N\+O\+T\+\_\+\+S\+K\+I\+P\+\_\+\+S\+Y\+S\+T\+E\+M\+\_\+\+W\+I\+N\+D\+OW
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add one parameters to skip system window or not in Screen\+Source\+List\+Option
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/03-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item remove struct Color\+Space to \mbox{\hyperlink{_agora_media_base_8h_source}{Agora\+Media\+Base.\+h}}
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual int send\+Audio\+Metadata(const char$\ast$ metadata, size\+\_\+t length, aosl\+\_\+ref\+\_\+t ares = A\+O\+S\+L\+\_\+\+R\+E\+F\+\_\+\+I\+N\+V\+A\+L\+ID) = 0;
\item virtual void on\+Audio\+Metadata\+Received(user\+\_\+id\+\_\+t user\+Id, const char$\ast$ metadata, size\+\_\+t length)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Audio\+Device\+Info struct add char device\+Type\+Name\mbox{[}M\+A\+X\+\_\+\+D\+E\+V\+I\+C\+E\+\_\+\+I\+D\+\_\+\+L\+E\+N\+G\+TH\mbox{]}
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/21) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+D\+A\+T\+A\+S\+T\+R\+E\+A\+M\+\_\+\+E\+N\+C\+R\+Y\+P\+T\+I\+O\+N\+\_\+\+E\+N\+A\+B\+L\+ED
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/27) }

\doxysubsection*{packet\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item More value for enum M\+E\+D\+I\+A\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE
\item More value for enum video\+\_\+packet\+\_\+t\+::\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int mute\+Remote\+From\+Timestamp(int timestamp)
\item int unmute\+Remote\+From\+Timestamp(int timestamp)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/01-\/24) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add L\+O\+C\+A\+L\+\_\+\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+L\+O\+C\+A\+L\+\_\+\+C\+O\+U\+N\+T\+E\+R\+\_\+\+L\+I\+P\+\_\+\+S\+Y\+N\+C\+\_\+\+C\+O\+S\+T\+\_\+\+T\+I\+ME to the Local\+Extension\+Counter
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+L\+I\+P\+\_\+\+S\+Y\+N\+C\+\_\+\+P\+R\+O\+C\+E\+S\+S\+I\+N\+G\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider create\+Lip\+Sync\+Filter
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Lip\+Sync\+Filter
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/01-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} ~\newline
 -- Add {\ttfamily virtual int stop\+Video\+Capture\+Async() = 0;} ~\newline


\doxysection*{A\+PI (2024-\/01-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item delete Rtmp\+Connection\+Configuration\+::enable\+Write\+Flv\+File for it is no longer used
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/01-\/03) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+E\+X\+C\+L\+U\+D\+E\+\_\+\+H\+I\+G\+H\+L\+I\+G\+H\+T\+\_\+\+B\+O\+R\+D\+E\+R\+\_\+\+F\+O\+R\+\_\+\+M\+A\+G\+N\+I\+F\+I\+T\+ER
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+F\+O\+R\+C\+E\+\_\+\+U\+S\+E\+\_\+\+B\+I\+T\+B\+L\+T\+\_\+\+O\+N\+\_\+\+W\+I\+N7
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add aosl\+\_\+ref\+\_\+t default paramters to I\+Video\+Track\+::get\+Filter\+Property
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/14) }

\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add {\ttfamily virtual void print\+Log(commons\+::\+L\+O\+G\+\_\+\+L\+E\+V\+E\+L level, const char$\ast$ fromat, va\+\_\+list) = 0;}
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/07) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add \+\_\+\+\_\+deprecated tag to Agora\+Service\+Configuration\+::thread\+Priority
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/10-\/31) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change on\+Local\+Audio\+Track\+State\+Changed\+::\+L\+O\+C\+A\+L\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+E\+R\+R\+OR error\+Code to L\+O\+C\+A\+L\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+R\+E\+A\+S\+ON reason\+Code.
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/10-\/11) }

\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} internal/video\+\_\+track\+\_\+i.\+h internal/local\+\_\+user\+\_\+i.\+h internal/diagnostic\+\_\+service\+\_\+i.\+h internal/common\+\_\+defines.\+h \doxysubsection*{internal/agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add aosl\+\_\+ref\+\_\+t default paramters
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/09-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} Add interface for I\+Screen\+Capture\+Source (Windows)
\begin{DoxyItemize}
\item virtual void recycle\+Video\+Cache() = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/09-\/25) }

\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} \mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Remove depends on aosl\+\_\+ares\+\_\+class
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/09-\/26) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Remove {\ttfamily virtual agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Video\+Track$>$ create\+Screen\+Video\+Track(agora\+\_\+refptr$<$rtc\+::\+I\+Screen\+Capturer$>$ video\+Source, const char$\ast$ id = O\+P\+T\+I\+O\+N\+A\+L\+\_\+\+N\+U\+L\+L\+P\+TR)}
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/08-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Remove create\+Screen\+Capturer() on mobile platform.
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/08-\/28) }

Format N\+A\+I\+Agora\+Config\+Center.\+h

\doxysubsection*{N\+A\+I\+Agora\+Config\+Center.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Format the whole file
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/08-\/15) }

update config for face capture

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+F\+A\+C\+E\+\_\+\+C\+A\+P\+T\+U\+R\+E\+\_\+\+T\+H\+R\+E\+S\+H\+O\+LD
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/08-\/03) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual aosl\+\_\+ref\+\_\+t create\+Rhythm\+Player() = 0;
\item virtual int destroy\+Rhythm\+Player(aosl\+\_\+ref\+\_\+t ref\+\_\+id) = 0;
\item virtual aosl\+\_\+ref\+\_\+t create\+Media\+Player(media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+Y\+P\+E type) = 0;
\item virtual int destroy\+Media\+Player(aosl\+\_\+ref\+\_\+t ref\+\_\+id) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/8-\/1) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item remove default value for parameter $\vert$position$\vert$ of function add\+Renderer and remove\+Renderer
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/07-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add annotations to set\+Audience\+Latency\+Level
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/07-\/04) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+count\+\_\+10\+\_\+ms
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/12-\/20) }

\doxysubsection*{N\+G\+I\+Agora\+Sync\+Clinet.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add I\+Sync\+Clinet
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/12-\/20) }

\doxysubsection*{N\+G\+I\+Agora\+Sync\+Clinet.\+h }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item modify on\+Collection\+Event param name to cur\+Json
\end{DoxyItemize}

I\+Aogra\+Service.\+h {\bfseries{Add}}
\begin{DoxyItemize}
\item add create\+Sync\+Client(const base\+::\+Sync\+Config\& config) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/08-\/21) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item add comment for get\+Agora\+Parameter
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/07-\/03) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes set\+Audience\+Latency\+Level(\+A\+U\+D\+I\+E\+N\+C\+E\+\_\+\+L\+A\+T\+E\+N\+C\+Y\+\_\+\+L\+E\+V\+E\+L\+\_\+\+T\+Y\+P\+E level) to set\+Audience\+Latency\+Level(\+A\+U\+D\+I\+E\+N\+C\+E\+\_\+\+L\+A\+T\+E\+N\+C\+Y\+\_\+\+L\+E\+V\+E\+L\+\_\+\+T\+Y\+P\+E level, int role)
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/07-\/01) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Deprecate parameter $\vert$independent\+\_\+thread$\vert$ in I\+Extension\+Video\+Filter\+::get\+Process\+Mode(...)
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/06-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item virtual agora\+\_\+refptr$<$\+I\+Remote\+Audio\+Mixer\+Source$>$ create\+Remote\+Audio\+Mixer\+Source()
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/07-\/18) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add api virtual agora\+\_\+refptr$<$base\+::\+I\+Agora\+Parameter$>$ get\+Agora\+Parameter() = 0;
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/05-\/10) }

\doxysubsection*{internal/screen\+\_\+capture\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add interface Set\+Capture\+To\+Texture in I\+Screen\+Capturer\+Ex
\item Add interface Get\+Capture\+To\+Texture in I\+Screen\+Capturer\+Ex
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/05-\/16) }

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{A\+DD}}
\begin{DoxyItemize}
\item Add struct {\ttfamily I\+Video\+Renderer\+Ex\+:View\+Option} {\bfseries{Modified\+:}}
\item Change {\ttfamily virtual int add\+View\+Ex(uintptr\+\_\+t handle, const Rectangle\& crop\+Area, bool enable\+Alpha\+Mask)} to {\ttfamily virtual int add\+View\+Ex(uintptr\+\_\+t handle, const View\+Option\& option)}
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/16) }

\doxysubsection*{low level api include aosl using $<$$>$ }

nothing changed else

\doxysection*{A\+PI (2023-\/5-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Video\+Frame\+Meta\+Data\+Type\+::k\+Face\+Capture\+Info
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/05-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add two parameters to get camera device type in I\+Device\+Info\+::\+Get\+Device\+Name(...)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/04-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_data_channel_8h_source}{N\+G\+I\+Agora\+Data\+Channel.\+h}} \& \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} \& \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item take\+Data\+Channel\+Snapshot
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/04-\/26) }

move Set\+Local\+Access\+Point interface to low level module

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_config_center_8h_source}{N\+G\+I\+Agora\+Config\+Center.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add Set\+Local\+Access\+Point interface
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/04-\/12) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}} \doxysection*{-\/ I\+Audio\+Pcm\+Data\+Sender\+::send\+Audio\+Pcm\+Data(...) add a parameter with type of \char`\"{}const int audio\+\_\+track\+\_\+number\char`\"{} }


\begin{DoxyItemize}
\item modify doc of on\+Face\+Position\+Changed()
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/28) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::fec\+\_\+decode\+\_\+ms
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/03-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Pcm\+Data\+Sender\+::send\+Audio\+Pcm\+Data(...) add a parameter (presentation\+\_\+ms) with type of int64\+\_\+t
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/03-\/18) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Update the comment of fill\+Video\+Frame\+Data
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/03-\/16) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add on\+Fetch\+Config\+Result
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/21) }

\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item fix api error
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item modify doc of on\+Face\+Position\+Changed()
\end{DoxyItemize}

\doxysection*{A\+PI(2023-\/02-\/06) }

\mbox{[}F\+E\+AT\mbox{]} C\+S\+D-\/52362\+: provide A\+P\+Is for adjusting acceleration and deceleration speeds during poor network

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int adjust\+Audio\+Acceleration(int percentage)
\item int adjust\+Audio\+Deceleration(int percentage)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/01-\/24) }

Support set video application scenarios

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int I\+Local\+User\+::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 scenario)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/2-\/6) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{M\+O\+D\+I\+FY\+:}}
\begin{DoxyItemize}
\item Modify function void$\ast$ get\+Screen\+Capture\+Sources(const Screen\+Source\+List\+Option\& option)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/02-\/14) }

Support set video qoe preference

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int 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\+P\+E qoe\+Preference)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/12-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{M\+O\+D\+I\+FY\+:}}
\begin{DoxyItemize}
\item Optimize Documents
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/01-\/18) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual int start\+Or\+Update\+Channel\+Media\+Relay(const Channel\+Media\+Relay\+Configuration\& configuration) {\bfseries{Modified\+:}}
\item virtual int start\+Channel\+Media\+Relay(const Channel\+Media\+Relay\+Configuration\& configuration)
\item virtual int update\+Channel\+Media\+Relay(const Channel\+Media\+Relay\+Configuration\& configuration)
\item Deprecated virtual void on\+Channel\+Media\+Relay\+Event(int code)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/05-\/18) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deprecated virtual void on\+Channel\+Media\+Relay\+Event(int code)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/02-\/22) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item supplemental on\+Channel\+Media\+Relay\+Event comments
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/11-\/30) }

Get A\+I-\/\+A\+EC Interface for version

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_ai_aec_8h_source}{N\+G\+I\+Agora\+Extension\+Ai\+Aec.\+h}} }


\begin{DoxyItemize}
\item virtual void Version(char ver\mbox{[}\+M\+A\+X\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+L\+E\+N\mbox{]}) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/12-\/01) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}} modified interface for I\+Screen\+Capture\+Source
\begin{DoxyItemize}
\item virtual int Set\+Content\+Type(int type)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/11-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add k\+I010 in Raw\+Pixel\+Buffer
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/01-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} Add interface for I\+Screen\+Capture\+Source (i\+OS)
\begin{DoxyItemize}
\item virtual int push\+Video\+Frame(\+C\+V\+Pixel\+Buffer\+Ref pixel\+Buffer, int64\+\_\+t timestamp\+\_\+ms, uint32\+\_\+t rotation)
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/12-\/08) }

\mbox{[}F\+E\+AT\mbox{]} N\+M\+S-\/9295\+: provide A\+P\+Is for setting first video frame starting tick

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Local\+User\+Observer\+::on\+Video\+Rendering\+Tracing\+Result(user\+\_\+id\+\_\+t user\+\_\+id, M\+E\+D\+I\+A\+\_\+\+T\+R\+A\+C\+E\+\_\+\+E\+V\+E\+N\+T current\+State, Video\+Rendering\+Tracing\+Info tracing\+Info)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/12-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add Set\+Audio\+Ns\+Mode. \doxysection*{A\+PI (2022-\/12-\/15) }
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/11-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add device\+Type for on\+Volume\+Indication in class I\+Audio\+Device\+Manager\+Observer
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/11-\/09) }

update config for super resolution 3.\+0

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+R\+T\+Y\+P\+E\+\_\+\+B\+I\+T\+M\+AP
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+R\+T\+I\+M\+E\+S\+\_\+\+S\+E\+L\+E\+C\+T\+\_\+\+W\+E\+I\+G\+HT
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+E\+N\+A\+B\+L\+E\+\_\+\+L\+O\+C\+A\+L\+\_\+\+SR
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+L\+O\+C\+A\+L\+\_\+\+S\+R\+T\+Y\+PE
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+R\+\_\+\+P\+A\+D\+D\+I\+NG {\bfseries{Deleted\+:}}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+H\+A\+R\+P\+E\+N\+\_\+\+T\+R\+A\+C\+K\+\_\+\+L\+I\+M\+IT
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+I\+M\+P\+L\+E\+\_\+\+SR
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+M\+A\+N\+A\+G\+E\+R\+\_\+\+P\+O\+L\+I\+C\+Y\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/11-\/09) }

A\+PI changes audio local playback.

\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Modified\+:}}

Main methods\+:


\begin{DoxyItemize}
\item void enable\+Local\+Playback(bool enable, bool sync = true)
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/11-\/7) }

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

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+D\+I\+O\+\_\+\+E\+X\+T\+R\+A\+\_\+\+P\+L\+A\+Y\+O\+U\+T\+\_\+\+L\+A\+T\+E\+N\+CY, C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+D\+I\+O\+\_\+\+E\+X\+T\+R\+A\+\_\+\+R\+E\+C\+O\+R\+D\+\_\+\+L\+A\+T\+E\+N\+CY to adjust adm latency calculation result.
\end{DoxyItemize}

\doxysubsection*{audio\+\_\+options\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add option adm\+\_\+extra\+\_\+playout\+\_\+latency adm\+\_\+extra\+\_\+record\+\_\+latency to adjust adm latency calculation result.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/28) }

\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item rename agora\+::media\+::base\+::\+I\+Audio\+Frame\+Observer to \mbox{\hyperlink{classagora_1_1media_1_1_i_audio_pcm_frame_sink}{agora\+::media\+::\+I\+Audio\+Pcm\+Frame\+Sink}}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/10-\/18) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Delete super\+Resolution\+Type in Remote\+Video\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/10-\/12) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item update default position for add\+Renderer \doxysection*{A\+PI (2022-\/09-\/06) }
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add \char`\"{}k\+Face\+Info\char`\"{} in Video\+Frame\+Meta\+Data\+Type
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/11-\/16) }

\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}}

{\bfseries{Modified\+:}} Rtmp\+Streaming\+Video\+Configuration add encoder\+Bitrate\+Control\+Mode

\doxysection*{A\+PI (2022-\/10-\/11) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add comments for domain\+Limit in Agora\+Service\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/28) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add domain\+Limit in Agora\+Service\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/12) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} }

{\bfseries{Modified\+: adding memver variable}}
\begin{DoxyItemize}
\item add hw\+\_\+encoder\+\_\+accelerating in Local\+Video\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/27) }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\item \mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}}
\item \mbox{\hyperlink{_i_agora_rtc_engine_ex_8h_source}{I\+Agora\+Rtc\+Engine\+Ex.\+h}}
\item Agora\+Rtc\+Engine\+Kit.\+h
\item Agora\+Rtc\+Engine\+Kit\+Ex.\+h
\item Rtc\+Engine.\+java
\item Rtc\+Engine\+Ex.\+java \doxysubsection*{$\ast$ Rtc\+Engine\+Impl.\+java }
\end{DoxyItemize}

{\bfseries{Modified\+:}} set\+Subscribe(audio,video)(Black,white)list api to block,allow

\doxysection*{A\+PI (2022-\/10-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

Add\+:$\ast$$\ast$
\begin{DoxyItemize}
\item Add interface for Data\+Channel
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/26) }

\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item on\+Encoded\+Video\+Frame\+Received
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/10-\/20) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add the description of the cross channel relay return value
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Remove on\+Api\+Call\+Executed from I\+Rtc\+Connection\+Observer
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/22) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+rate\+\_\+by\+\_\+custom\+\_\+plc\+\_\+count
\item Remote\+Audio\+Track\+Stats\+::plc\+\_\+count
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/20) }

Remove unused forward declaration

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Remove I\+Signaling\+Engine
\item Remove I\+Engine\+Base
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/9-\/15) }

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

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+D\+I\+O\+\_\+\+B\+U\+I\+L\+T\+I\+N3\+A\+\_\+\+E\+N\+A\+B\+LE to control builtin 3a for java adm
\end{DoxyItemize}

\doxysubsection*{audio\+\_\+options\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add option adm\+\_\+enable\+\_\+builtin3a to control builtin 3a for java adm
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/01) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual int set\+Camera\+Stabilization\+Mode(\+C\+A\+M\+E\+R\+A\+\_\+\+S\+T\+A\+B\+I\+L\+I\+Z\+A\+T\+I\+O\+N\+\_\+\+M\+O\+D\+E mode)
\item virtual bool is\+Support\+Center\+Stage()
\item virtual int enable\+Center\+Stage(bool enabled)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/14) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual int enable\+Multi\+Camera(bool enabled)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/09-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item on\+Transfer\+Statistics add params (video\+\_\+width video\+\_\+height)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/08-\/30) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Include $<$stdint.\+h$>$ to use fixed width integer types
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/08-\/29) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} Add interface for I\+Screen\+Capture\+Source
\begin{DoxyItemize}
\item virtual int set\+High\+Light(bool is\+High\+Light, unsigned int color, int width)
\item virtual int Set\+Content\+Type(\+Video\+Content\+Sub\+Type type)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/08-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add parameter \textquotesingle{}const Client\+Role\+Options\& new\+Role\+Options\textquotesingle{} for on\+Change\+Role\+Success()
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/08-\/15) }

Add A\+I-\/\+A\+EC Interface

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_ai_aec_8h_source}{N\+G\+I\+Agora\+Extension\+Ai\+Aec.\+h}} }


\begin{DoxyItemize}
\item virtual int Process\+Ai\+Nlp\+Frame(float$\ast$ input, float$\ast$ output) = 0;
\item virtual int Clear\+Hidden\+State(float scale\+\_\+factor = 0.\+0) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/08-\/23) }

\mbox{\hyperlink{_n_g_i_agora_extension_v_q_a_8h_source}{N\+G\+I\+Agora\+Extension\+V\+Q\+A.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Agora\+Video\+Quality\+Analyzer
\end{DoxyItemize}

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item add mos\+Value in Rte\+Remote\+Video\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/8-\/10) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item delete create\+Custom\+Audio\+Track( agora\+\_\+refptr$<$rtc\+::\+I\+Audio\+Pcm\+Data\+Sender$>$ audio\+Source, agora\+\_\+refptr$<$rtc\+::\+I\+Audio\+Pcm\+Data\+Sender$>$ audio\+Reverse\+Source, int audio\+Source\+Delay)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/15) }

Changes for Audio\+Session\+Configuration

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add \mbox{\hyperlink{classagora_1_1_optional}{Optional$<$bool$>$}} allow\+Duck\+Others
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/14) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Remote\+Mixed\+Playback
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+M\+I\+X\+E\+D\+\_\+\+P\+L\+A\+Y\+B\+A\+C\+K\+\_\+\+F\+I\+L\+T\+ER
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/12) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{Modified\+:}} Delete some commented fields in Audio\+Encoder\+Configuration

\doxysection*{A\+PI (2022-\/07-\/12) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}

{\bfseries{Modified\+:}} \doxysubsection*{modify void Set\+All(const Audio\+Session\+Configuration\& change) }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item set \char`\"{}unload\+\_\+after\+\_\+use\char`\"{} false by default in load\+Extension\+Provider
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/04) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add \char`\"{}unload\+\_\+after\+\_\+use\char`\"{} boolean flag in load\+Extension\+Provider
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/08) }

\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}}

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item virtual int update\+Simulcast\+Stream\+Config(const Simulcast\+Stream\+Config\& config) = 0;
\item virtual int enable\+Simulcast\+Stream(bool enabled, const Simulcast\+Stream\+Config\& config) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/06-\/29) }

\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}}

{\bfseries{Modified\+:}} Rtmp\+Streaming\+Video\+Configuration add encoder\+Hw\+Sw\+Mode

\doxysection*{A\+PI (2022-\/06-\/23) }

\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}}

{\bfseries{Modified\+:}} add video source type in meta info

\doxysection*{A\+PI (2022-\/06-\/22) }

\doxysubsection*{N\+G\+I\+Agora\+Mixer\+Source.\+h }

{\bfseries{Add\+:}} Add interface for setting master clock of the mixer int set\+Master\+Clock\+Source(const char$\ast$ id)

\doxysection*{A\+PI (2022-\/06-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{A\+DD\+:}}
\begin{DoxyItemize}
\item virtual int set\+Loopback\+Device(int index) = 0;
\item virtual int follow\+System\+Loopabck\+Device(bool enable) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/06-\/10) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}

{\bfseries{Modified\+:}} Add load\+Extension\+Provider for Android

\doxysection*{A\+PI (2022-\/06-\/06) }

\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}

{\bfseries{Modified\+:}} Add a new Connect() A\+PI. Add T\+Connect\+Settings

\doxysection*{A\+PI (2024-\/08-\/06) }

\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}

{\bfseries{Modified\+:}} Add T\+Connect\+Settings info

\doxysection*{A\+PI (2022-\/06-\/05) }

\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item remove channel from on\+Snapshot\+Taken
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/06-\/01) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} Add interface for I\+Screen\+Capture\+Source
\begin{DoxyItemize}
\item I\+Screen\+Capture\+Source\+List$\ast$ get\+Screen\+Capture\+Sources( int thumb\+\_\+cx, int thumb\+\_\+cy, int icon\+\_\+cx, int icon\+\_\+cy, bool include\+\_\+screen)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/06) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item Delete allow\+Capture\+Current\+App for i\+OS and Android
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/23) }

\doxysubsection*{N\+G\+I\+Video\+Frame.\+h }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item Delete Screen Capture Meta Info
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/31) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+Simulcast\+Stream\+Mode(\+S\+I\+M\+U\+L\+C\+A\+S\+T\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+M\+O\+D\+E mode, const Simulcast\+Stream\+Config\& config)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/18) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Add id for all video track creator
\end{DoxyItemize}

\doxysubsection*{video\+\_\+track\+\_\+i.\+h }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Add id for {\ttfamily prepare\+Nodes}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add set\+Screen\+Capture\+Dimensions for i\+OS and Android
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/05-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item del a parameter with type of \char`\"{}const Audio\+Frame\+Handle\+Info$\ast$\char`\"{} in I\+Audio\+Pcm\+Data\+Sender\+::send\+Audio\+Pcm\+Data(...)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/02-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Video\+Track\+Stats.\+received\+\_\+bytes
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{A\+DD\+:}} Add comments for is\+Camera\+Torch\+Supported set\+Camera\+Torch\+On

\doxysection*{A\+PI (2022-\/05-\/08) }

internal/config\+\_\+engine\+\_\+i.\+h \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{A\+DD\+:}} Add parameter I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+V\+I\+D\+E\+O\+\_\+\+W\+I\+F\+I\+\_\+\+A\+C\+C\+\_\+\+E\+N\+A\+B\+LE.
\begin{DoxyItemize}
\item void on\+Wl\+Acc\+Message(\+W\+L\+A\+C\+C\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+R\+E\+A\+S\+O\+N reason, W\+L\+A\+C\+C\+\_\+\+S\+U\+G\+G\+E\+S\+T\+\_\+\+A\+C\+T\+I\+O\+N action, const char$\ast$ wl\+Acc\+Msg)
\item void on\+Wl\+Acc\+Stats(\+Wl\+Acc\+Stats current\+Stats, Wl\+Acc\+Stats average\+Stats)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/08) }

\doxysubsection*{internal/config\+\_\+engine\+\_\+i.\+h }

{\bfseries{A\+DD\+:}} Add parameter I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+T\+O\+\_\+\+L\+O\+G\+\_\+\+U\+P\+L\+O\+A\+D\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+A\+TH and I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+T\+O\+\_\+\+L\+O\+G\+\_\+\+U\+P\+L\+O\+A\+D\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+C\+O\+N\+F\+IG.

\doxysection*{A\+PI (2022-\/05-\/08) }

A\+PI changes for Screen Capture

\doxysection*{-\/ enable init\+With\+Display\+Id for Windows. }

\doxysection*{A\+PI (2022-\/06-\/07) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+RD
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+S\+D\+K\+\_\+\+I\+N\+\_\+\+B\+A\+C\+K\+G\+R\+O\+U\+ND
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+J\+U\+D\+G\+E\+\_\+\+S\+D\+K\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+\_\+\+V\+E\+R\+S\+I\+ON
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/5-\/7) }

add private parameter to control adm fallback

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+A\+D\+M\+\_\+\+F\+A\+L\+L\+B\+A\+C\+K\+\_\+\+E\+N\+A\+B\+LE to control adm fallback
\end{DoxyItemize}

\doxysubsection*{audio\+\_\+options\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add option adm\+\_\+enable\+\_\+fallback to control adm fallback
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add allow\+Capture\+Current\+App for i\+OS and Android
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/07-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item I\+Rtmp\+Local\+User\+::set\+Audio\+Enabled()
\item I\+Rtmp\+Local\+User\+::publish\+Media\+Player\+Audio()
\item I\+Rtmp\+Local\+User\+::unpublish\+Media\+Player\+Audio()
\end{DoxyItemize}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Rename unregiste\+Rtmp\+User\+Observer() to unregister\+Rtmp\+User\+Observer()
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/02) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Rename create\+Custom\+Extension\+Video\+Track() to create\+Screen\+Capture\+Video\+Track()
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Screen\+Capture\+Audio\+Track for i\+OS and Android
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Add\+:}} Add set\+Audio\+Record\+Config for i\+OS and Android

\doxysection*{A\+PI(2022-\/04-\/30) }

Add Noise Suppresor Interface

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_a_i_noise_suppressor_8h_source}{N\+G\+I\+Agora\+Extension\+A\+I\+Noise\+Suppressor.\+h}} }


\begin{DoxyItemize}
\item virtual int Process\+Denoise\+Frame(float$\ast$ input, float$\ast$ output) = 0;
\item virtual int Clear\+Hidden\+State() = 0;
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/04-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Connection\+Observer\+::on\+Warning(\+W\+A\+R\+N\+\_\+\+C\+O\+D\+E\+\_\+\+T\+Y\+P\+E warning, const char$\ast$ msg)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/4-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+A\+P\+T\+U\+R\+E\+\_\+\+B\+R\+I\+G\+H\+T\+N\+E\+S\+S\+\_\+\+L\+E\+V\+E\+L\+\_\+\+T\+Y\+PE capture\+Brightness\+Level in Local\+Video\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/04-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool is\+Interactive\+Audience in Struct Rtc\+Connection\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/4-\/18) }

Add methods for control to follow default audio device

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int follow\+System\+Playback\+Device(bool enable) = 0;
\item int follow\+System\+Recording\+Device(bool enable) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item change register\+Video\+Encoded\+Image\+Receiver(\+I\+Video\+Encoded\+Image\+Receiver$\ast$ video\+Receiver) to register\+Video\+Encoded\+Frame\+Observer(agora\+::media\+::\+I\+Video\+Encoded\+Frame\+Observer$\ast$ encoded\+Observer)
\item change unregister\+Video\+Encoded\+Image\+Receiver(\+I\+Video\+Encoded\+Image\+Receiver$\ast$ video\+Receiver) to unregister\+Video\+Encoded\+Frame\+Observer(agora\+::media\+::\+I\+Video\+Encoded\+Frame\+Observer$\ast$ encoded\+Observer)
\end{DoxyItemize}

\doxysection*{A\+PI(2022-\/04-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void on\+Audio\+Track\+Publish\+Start(agora\+\_\+refptr$<$\+I\+Local\+Audio\+Track$>$ audio\+Track)
\item void on\+Audio\+Track\+Unpublished(agora\+\_\+refptr$<$\+I\+Local\+Audio\+Track$>$ audio\+Track)
\item void on\+Video\+Track\+Publish\+Start(agora\+\_\+refptr$<$\+I\+Local\+Video\+Track$>$ video\+Track)
\item void on\+Video\+Track\+Unpublished(agora\+\_\+refptr$<$\+I\+Local\+Video\+Track$>$ video\+Track)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void on\+Audio\+Track\+Publish\+Start(agora\+\_\+refptr$<$\+I\+Local\+Audio\+Track$>$ audio\+Track)
\item void on\+Audio\+Track\+Unpublished(agora\+\_\+refptr$<$\+I\+Local\+Audio\+Track$>$ audio\+Track)
\item void on\+Video\+Track\+Publish\+Start(agora\+\_\+refptr$<$\+I\+Local\+Video\+Track$>$ video\+Track)
\item void on\+Video\+Track\+Unpublished(agora\+\_\+refptr$<$\+I\+Local\+Video\+Track$>$ video\+Track)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::downlink\+\_\+effect\+\_\+type
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item set\+Custom\+Context
\item get\+Custom\+Context
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add interface set\+Audio\+Filterabl
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/08-\/15) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{Modified\+:}} Add license field in Agora\+Service\+Configuration

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}} void on\+License\+Validation\+Failure(\+L\+I\+C\+E\+N\+S\+E\+\_\+\+E\+R\+R\+O\+R\+\_\+\+T\+Y\+P\+E error)

\doxysection*{A\+PI (2021-\/04-\/09) }

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats.\+quality\+\_\+changed\+\_\+reason
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/10) }

\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+R\+E\+C\+O\+R\+D\+I\+N\+G\+\_\+\+L\+O\+C\+A\+L\+\_\+\+P\+L\+A\+Y\+B\+A\+C\+K\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+P\+O\+S\+T\+\_\+\+P\+R\+O\+C\+E\+S\+S\+I\+N\+G\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+U\+S\+E\+R\+\_\+\+P\+L\+A\+Y\+B\+A\+C\+K\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+P\+C\+M\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+P\+C\+M\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+S\+E\+N\+D\+I\+N\+G\+\_\+\+F\+I\+L\+T\+ER
\item I\+Extension\+Provider\+::\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+T\+Y\+P\+E.\+A\+U\+D\+I\+O\+\_\+\+P\+C\+M\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+L\+O\+C\+A\+L\+\_\+\+P\+L\+A\+Y\+B\+A\+C\+K\+\_\+\+F\+I\+L\+T\+ER
\end{DoxyItemize}

\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int get\+Filter\+Property(const char$\ast$ id, const char$\ast$ key, char$\ast$ json\+Value, size\+\_\+t buf\+Size, Audio\+Filter\+Position position);
\end{DoxyItemize}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item set\+Filter\+Property(const char$\ast$ id, const char$\ast$ key, const char$\ast$ json\+Value) to set\+Filter\+Property(const char$\ast$ id, const char$\ast$ key, const char$\ast$ json\+Value, Audio\+Filter\+Position position)
\item enable\+Audio\+Filter(const char$\ast$ id, bool enable) to enable\+Audio\+Filter(const char$\ast$ id, bool enable, Audio\+Filter\+Position position)
\end{DoxyItemize}

\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int enable\+Remote\+Audio\+Track\+Filter(user\+\_\+id\+\_\+t user\+Id, const char$\ast$ id, bool enable)
\item int set\+Remote\+Audio\+Track\+Filter\+Property(user\+\_\+id\+\_\+t user\+Id, const char$\ast$ id, const char$\ast$ key, const char$\ast$ json\+Value)
\item int get\+Remote\+Audio\+Track\+Filter\+Property(user\+\_\+id\+\_\+t user\+Id, const char$\ast$ id, const char$\ast$ key, char$\ast$ json\+Value, size\+\_\+t buf\+Size)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/04-\/15) }

{\bfseries{Modified\+:}} \doxysection*{A\+PI (2022-\/09-\/6) }

add counter of neteq burst jitter and burst peak num

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item set Agora\+Service\+Configuration.\+channel\+Profile default to C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+N\+G\+\_\+2.

\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}
\end{DoxyItemize}

\DoxyHorRuler{0}
 {\bfseries{Modified\+:}} \doxysection*{A\+PI (2022-\/06-\/15) }

add counter of neteq packet\+\_\+expired\+\_\+loss adn packet\+\_\+max\+\_\+expired\+\_\+ms because of expired packet

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item set Rtc\+Connection\+Configuration.\+channel\+Profile default to C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+L\+I\+V\+E\+\_\+\+B\+R\+O\+A\+D\+C\+A\+S\+T\+I\+N\+G\+\_\+2.
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/01) }

add counter of neteq accelerate ratio and preemptive expand ratio

\doxysection*{A\+PI(2022-\/03-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item I\+Local\+Usr\+::\+Local\+Audio\+Detailed\+Stats\+::uplink\+\_\+process\+\_\+time\+\_\+ms
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Pcm\+Data\+Sender\+::send\+Audio\+Pcm\+Data(...) add a parameter with type of \char`\"{}const Audio\+Frame\+Handle\+Info$\ast$\char`\"{}
\end{DoxyItemize}

\doxysubsection*{internal/packet\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item S\+Audio\+Frame\+::handle\+\_\+info\+\_\+;
\item S\+Audio\+Packet\+::handle\+\_\+timing\+\_\+
\item Packet\+Options\+::handle\+\_\+info
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Add\+:}} Add loopback recording parameters
\begin{DoxyItemize}
\item int set\+Loopback\+Device\+Parameter(const Loopback\+Recording\+Option \&option)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modify\+: add device\+Name param for class I\+Recording\+Device\+Source}}
\begin{DoxyItemize}
\item int init\+Recording(const char$\ast$ device\+Name = N\+U\+LL)
\item int start\+Recording()
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/08) }

\doxysubsection*{\mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item enum T\+Cc\+Mode
\item struct Sender\+Options
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+Video\+Subscription\+Options(user\+\_\+id\+\_\+t user\+Id, const Video\+Subscription\+Options\& options)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/24) }

Update Screen\+Capture\+Profiling\+Statistics

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item {\ttfamily bool capture\+\_\+mouse\+\_\+cursor}
\item {\ttfamily uint64\+\_\+t per\+\_\+capture\+\_\+cpu\+\_\+cycles}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/11) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify T\+Connection\+Info to include int proxy\+Type, and connection\+Ip
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}} Add interfaces for audio capturing

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Add\+:}} Add I\+Screen\+Capturer2 for i\+OS and Android

\doxysection*{A\+PI (2022-\/03-\/04) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modify\+: add device\+Name param for class I\+Recording\+Device\+Source}}
\begin{DoxyItemize}
\item int start\+Recording(const char$\ast$ device\+Name = N\+U\+LL)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/03) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item virtual void on\+Event(const char$\ast$ provider, const char$\ast$ extension, const char$\ast$ key, const char$\ast$ json\+\_\+value) \{\}
\item virtual void on\+Extension\+Stopped(const char$\ast$ provider, const char$\ast$ extension) \{\}
\item virtual void on\+Extension\+Started(const char$\ast$ provider, const char$\ast$ extension) \{\}
\item virtual void on\+Extension\+Error(const char$\ast$ provider, const char$\ast$ extension, int error, const char$\ast$ message) \{\}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/03) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Modify\+:}} use register\+Provider\+Entry on Windows

\doxysection*{A\+PI (2022-\/03-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

$\ast$$\ast$\+Add\+:
\begin{DoxyItemize}
\item on\+Video\+Size\+Changed for I\+Local\+User\+Observer
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+Video\+Subscription\+Options(user\+\_\+id\+\_\+t user\+Id, const Video\+Subscription\+Options\& options)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Q\+U\+A\+L\+I\+T\+Y\+\_\+\+A\+D\+A\+P\+T\+\_\+\+I\+N\+D\+I\+C\+A\+T\+I\+ON quality\+\_\+adapt\+\_\+indication
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/04) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add super\+Resolution\+Type in Remote\+Video\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/02-\/11) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item remove Video\+Subscription\+Options from I\+Local\+User
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add R\+E\+M\+O\+T\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+I\+M\+A\+G\+E\+\_\+\+T\+R\+A\+CK to Video\+Track\+Type
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/02-\/10) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item agora\+::rtc\+::uid\+\_\+t get\+Uid\+By\+User\+Account(const std\+::string\& app\+\_\+id, const std\+::string\& user\+\_\+account) const
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/02-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

Deprecate k\+Texture in Video\+Frame\+Data\+::\+Type {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add k\+Texture\+O\+ES and k\+Texture2D in Video\+Frame\+Data\+::\+Type.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Q\+U\+A\+L\+I\+T\+Y\+\_\+\+A\+D\+A\+P\+T\+\_\+\+I\+N\+D\+I\+C\+A\+T\+I\+ON quality\+\_\+adapt\+\_\+indication
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/23) }

add H\+K\+MC and US Area Code

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}} add H\+K\+MC and US Area Code

\doxysection*{A\+PI (2022-\/02-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

Add new interfaces for screen capture extension source

\doxysection*{A\+PI (2022-\/01-\/29) }

Add support for encoded frame receiver

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add two functions to register and unregister encoded frame receiver.


\begin{DoxyItemize}
\item int register\+Audio\+Encoded\+Frame\+Receiver(\+I\+Audio\+Encoded\+Frame\+Receiver$\ast$ packet\+Receiver)
\item int unregister\+Audio\+Encoded\+Frame\+Receiver(\+I\+Audio\+Encoded\+Frame\+Receiver$\ast$ packet\+Receiver)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Encoded\+Frame\+Receiver
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool audio\+Recv\+Encoded\+Frame in Struct Rtc\+Connection\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}} Extension video filter support rotation apply
\begin{DoxyItemize}
\item {\ttfamily bool get\+Rotation\+Applied()}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Pcm\+Source
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int int enable\+Spatial\+Audio(bool enabled)
\item int set\+Remote\+User\+Spatial\+Audio\+Params(user\+\_\+id\+\_\+t uid, const agora\+::\+Spatial\+Audio\+Params\& params)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/01) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item I\+Local\+User.\+pull\+Mixed\+Audio\+Pcm\+Data()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Audio\+Subscription\+Options
\item Rtc\+Connection\+Configuration.\+audio\+Subscription\+Options
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item remove {\ttfamily Post\+Audio\+Recording\+Device}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/14) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::target\+\_\+level
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/16) }

add counter and config for super resolution

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+E\+N\+A\+B\+L\+E\+\_\+\+S\+U\+P\+E\+R\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+ON
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+U\+P\+E\+R\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+O\+N\+\_\+\+S\+R\+T\+Y\+PE
\end{DoxyItemize}

\doxysubsection*{video\+\_\+config\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add variable enable\+\_\+sr
\item add variable sr\+\_\+type
\end{DoxyItemize}

\doxysubsection*{extension\+\_\+counter\+\_\+event\+\_\+def.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add enum L\+O\+C\+A\+L\+\_\+\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+C\+O\+U\+N\+T\+E\+R\+\_\+\+S\+U\+P\+E\+R\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+O\+N\+\_\+\+T\+Y\+PE L\+O\+C\+A\+L\+\_\+\+E\+X\+T\+E\+N\+S\+I\+O\+N\+\_\+\+R\+E\+M\+O\+T\+E\+\_\+\+C\+O\+U\+N\+T\+E\+R\+\_\+\+S\+U\+P\+E\+R\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+O\+N\+\_\+\+C\+O\+S\+T\+\_\+\+T\+I\+ME
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item virtual void on\+Change\+Role\+Failure(\+C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+C\+H\+A\+N\+G\+E\+\_\+\+F\+A\+I\+L\+E\+D\+\_\+\+R\+E\+A\+S\+O\+N reason, C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+P\+E current\+Role)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/11) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtmp_streaming_service_8h_source}{I\+Agora\+Rtmp\+Streaming\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int start\+Rtmp\+Stream\+Without\+Transcoding(const char$\ast$ url)
\item int start\+Rtmp\+Stream\+With\+Transcoding(const char$\ast$ url, const Live\+Transcoding\& transcoding)
\item int update\+Rtmp\+Transcoding(const Live\+Transcoding\& transcoding)
\item int stop\+Rtmp\+Stream(const char$\ast$ url)
\item void on\+Rtmp\+Streaming\+Event(const char$\ast$ url, R\+T\+M\+P\+\_\+\+S\+T\+R\+E\+A\+M\+I\+N\+G\+\_\+\+E\+V\+E\+N\+T event\+Code)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item initialize {\ttfamily int regulated\+\_\+frame\+\_\+rate}
\item initialize {\ttfamily int regulated\+\_\+width}
\item initialize {\ttfamily int regulated\+\_\+height}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/30) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Use dummy global var instead of dllmain on windows
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item move enum R\+E\+M\+O\+T\+E\+\_\+\+U\+S\+E\+R\+\_\+\+S\+T\+A\+TE from \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} to \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Replace tab with spaces. {\bfseries{Add\+:}}
\item int int enable\+Spatial\+Audio(bool enabled)
\item int set\+Remote\+User\+Spatial\+Audio\+Params(const agora\+::\+Spatial\+Audio\+Params\& params)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add uint32\+\_\+t audio\+\_\+volume for Local\+Audio\+Track\+Stats struct

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

$\ast$$\ast$\+Modify\+: volume range $\ast$$\ast$
\begin{DoxyItemize}
\item virtual int adjust\+User\+Playback\+Signal\+Volume(unsigned int uid, int volume) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modify\+:}} -\/virtual int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz, R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE mode = R\+A\+W\+\_\+\+A\+U\+D\+I\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+O\+P\+\_\+\+M\+O\+D\+E\+\_\+\+R\+E\+A\+D\+\_\+\+O\+N\+LY, int samples\+Per\+Call = 0)

\doxysection*{A\+PI (2021-\/12-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Remote\+User\+Playback
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/20) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{Add\+:}} Modify Agora\+Service\+Configuration for external egl context
\begin{DoxyItemize}
\item bool use\+External\+Egl\+Context
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/01-\/19) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Pcm\+Source
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Pcm\+Source\+Sending
\item I\+Audio\+Track\+::\+Audio\+Filter\+Position\+::\+Pcm\+Source\+Playback
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/20) }

Add parameter key for trace

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}} Add parameter key
\begin{DoxyItemize}
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+S\+T\+A\+R\+T\+\_\+\+T\+R\+A\+CE
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+S\+T\+O\+P\+\_\+\+T\+R\+A\+CE
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item remove {\ttfamily Post\+Audio\+Recording\+Device}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item virtual void on\+Change\+Role\+Failure(\+C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+C\+H\+A\+N\+G\+E\+\_\+\+F\+A\+I\+L\+E\+D\+\_\+\+R\+E\+A\+S\+O\+N reason, C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+P\+E current\+Role)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/07) }

Add method in I\+Rtmp\+Local\+User class.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item initialize {\ttfamily int regulated\+\_\+frame\+\_\+rate}
\item initialize {\ttfamily int regulated\+\_\+width}
\item initialize {\ttfamily int regulated\+\_\+height}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/01) }

Add support for encoded frame receiver

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add two functions to register and unregister encoded frame receiver.


\begin{DoxyItemize}
\item int register\+Audio\+Encoded\+Frame\+Receiver(\+I\+Audio\+Encoded\+Frame\+Receiver$\ast$ packet\+Receiver)
\item int unregister\+Audio\+Encoded\+Frame\+Receiver(\+I\+Audio\+Encoded\+Frame\+Receiver$\ast$ packet\+Receiver)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Encoded\+Frame\+Receiver
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool audio\+Recv\+Encoded\+Frame in Struct Rtc\+Connection\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Q\+U\+A\+L\+I\+T\+Y\+\_\+\+A\+D\+A\+P\+T\+\_\+\+I\+N\+D\+I\+C\+A\+T\+I\+ON quality\+\_\+adapt\+\_\+indication
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/30) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Use dummy global var instead of dllmain on windows
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item move enum R\+E\+M\+O\+T\+E\+\_\+\+U\+S\+E\+R\+\_\+\+S\+T\+A\+TE from \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} to \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Replace tab with spaces.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/23) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Direct\+Custom\+Audio\+Track(audio\+Source)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/23) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}} Add filed in Local\+Video\+Track\+Stats
\begin{DoxyItemize}
\item {\ttfamily int capture\+\_\+frame\+\_\+rate}
\item {\ttfamily int regulated\+\_\+capture\+\_\+frame\+\_\+rate}
\item {\ttfamily int capture\+\_\+width}
\item {\ttfamily int capture\+\_\+height}
\item {\ttfamily int regulated\+\_\+capture\+\_\+width}
\item {\ttfamily int regulated\+\_\+capture\+\_\+height}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/6) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add fields in Local\+Audio\+Track\+Stats
\begin{DoxyItemize}
\item {\ttfamily uint64\+\_\+t total\+\_\+active\+\_\+time}
\item `uint64\+\_\+t publish\+\_\+duration'
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add fields in I\+Local\+User\+Observer
\begin{DoxyItemize}
\item {\ttfamily on\+First\+Remote\+Audio\+Frame}
\item `on\+First\+Remote\+Audio\+Decoded'
\item {\ttfamily on\+First\+Remote\+Video\+Frame}
\item `on\+First\+Remote\+Video\+Decoded'
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}} Add fields in Local\+Video\+Track\+Stats
\begin{DoxyItemize}
\item {\ttfamily uint64\+\_\+t total\+Active\+Time}
\item `uint64\+\_\+t publish\+Duration'
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/2) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Enable screen capture in Linux
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/03) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item static const char$\ast$ get\+Source\+Version();
\item virtual int panic(void$\ast$ exception) = 0;
\item virtual agora\+::rtc\+::\+Agora\+Generic\+Bridge$\ast$ get\+Bridge() = 0;
\item virtual Base\+Context\& get\+Base\+Context() = 0;
\item virtual void set\+Base\+Context(\+Base\+Context$\ast$ context) = 0;
\item virtual rtc\+::\+Config\+Service$\ast$ get\+Config\+Service() = 0;
\item virtual rtc\+::\+Config\+Source\+AP$\ast$ get\+Config\+Source\+A\+P() = 0;
\item virtual const std\+::string\& get\+App\+Id() const = 0;
\item virtual agora\+\_\+refptr$<$rtc\+::\+Predefine\+Ip\+List$>$ get\+Predefine\+Ip\+List() const = 0;
\item virtual rtc\+::\+Xdump\+Handler$\ast$ get\+Xdump\+Handler() const = 0;
\item virtual const std\+::string\& get\+Service\+Id() const = 0;
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Agora\+Service\+Ex$\ast$ Get\+Service()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/18) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enum R\+T\+M\+P\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+O\+R\+::\+S\+T\+A\+T\+E\+\_\+\+R\+E\+C\+O\+N\+N\+E\+C\+T\+ED
\item class I\+Rtmp\+Connection\+Observer\+:virtual void on\+Reconnected(const Rtmp\+Connection\+Info\& connection\+Info) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI(2021-\/12-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_control_8h_source}{N\+G\+I\+Agora\+Extension\+Control.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item provider\+\_\+name -\/$>$ provider
\item ext\+\_\+name -\/$>$ extension
\item event\+\_\+key -\/$>$ key
\item event\+\_\+json\+\_\+str -\/$>$ value
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/01) }

Add method in I\+Rtmp\+Local\+User class.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int publish\+Media\+Player\+Audio(agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Audio\+Track$>$ audio\+Track, int32\+\_\+t player\+Id).
\item int unpublish\+Media\+Player\+Audio(agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Audio\+Track$>$ audio\+Track, int32\+\_\+t player\+Id).
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Q\+U\+A\+L\+I\+T\+Y\+\_\+\+A\+D\+A\+P\+T\+\_\+\+I\+N\+D\+I\+C\+A\+T\+I\+ON quality\+\_\+adapt\+\_\+indication
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats.\+qoe\+\_\+quality
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Local\+Video\+Track\+Stats.\+tx\+Packet\+Loss\+Rate
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item e2e\+\_\+delay\+\_\+ms
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/03-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Local\+Audio\+Track\+Observer
\item I\+Local\+Audio\+Track\+::register\+Track\+Observer
\item I\+Local\+Audio\+Track\+::unregister\+Track\+Observer
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item I\+Local\+User\+Observer\+::on\+Local\+Audio\+Track\+State\+Changed
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/12-\/12) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item nothing
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/04-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Local\+User\+::set\+Ear\+Monitoring\+Audio\+Frame\+Parameters
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/11-\/27) }

remove enum T\+Cc\+Mode

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item enum T\+Cc\+Mode
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/18) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enum R\+T\+M\+P\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+E\+R\+R\+O\+R\+::\+S\+T\+A\+T\+E\+\_\+\+R\+E\+C\+O\+N\+N\+E\+C\+T\+ED
\item class I\+Rtmp\+Connection\+Observer\+:virtual void on\+Reconnected(const Rtmp\+Connection\+Info\& connection\+Info) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/12) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+E\+N\+A\+B\+L\+E\+\_\+\+S\+Y\+N\+C\+\_\+\+R\+E\+N\+D\+E\+R\+\_\+\+N\+TP \doxysection*{A\+PI (2021-\/09-\/24) }
\end{DoxyItemize}

add Korea Area Code

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}} add Korea Area Code

\doxysection*{A\+PI (2021-\/10-\/14) }


\begin{DoxyItemize}
\item add definition C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+V\+P8\+\_\+\+E\+N\+C\+\_\+\+S\+W\+I\+T\+CH
\item add definition C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+V\+C\+\_\+\+T\+E\+M\+P\+O\+R\+A\+L\+\_\+\+L\+A\+Y\+E\+RS
\item add definition C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+V\+P8\+\_\+\+E\+N\+C\+\_\+\+S\+W\+I\+T\+CH
\item add definition C\+O\+N\+F\+I\+G\+U\+R\+A\+B\+L\+E\+\_\+\+K\+E\+Y\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+V\+C\+\_\+\+T\+E\+M\+P\+O\+R\+A\+L\+\_\+\+L\+A\+Y\+E\+RS
\end{DoxyItemize}

\doxysubsection*{channel\+\_\+capability\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add enum Vp8\+Feature
\item add enum Svc
\item add enum Capability\+Type\+:k\+Vp8\+Feature
\end{DoxyItemize}

\doxysubsection*{video\+\_\+track\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add variable video\+\_\+codec\+\_\+capbits
\item add variable curr\+\_\+temporal\+\_\+layer
\end{DoxyItemize}

\doxysubsection*{packet\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add variable max\+\_\+temporal\+\_\+layers
\item add variable codec\+\_\+type
\end{DoxyItemize}

\doxysubsection*{video\+\_\+config\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add variable svc\+\_\+num\+\_\+temporal\+\_\+layers
\item add variable vp8\+\_\+enc\+\_\+switch
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/09) }

Modify param for Rtmp\+Streaming\+Video\+Configuration

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item modify gop\+\_\+ms to gop\+In\+Ms in Rtmp\+Streaming\+Video\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/09) }

Add param for Rtmp\+Streaming\+Video\+Configuration

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add push\+\_\+video\+\_\+frame\+\_\+cnt、pop\+\_\+video\+\_\+frame\+\_\+cnt in on\+Transfer\+Statistics
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add gop\+\_\+ms in Rtmp\+Streaming\+Video\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/23) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Audio\+Subscription\+Options\& operator=(const Audio\+Subscription\+Options\& rhs)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item fix marco
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Update interface for C++98 standard
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/08) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add Provider\+Interface\+Used argument for providers to declare provider version.
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_agora_extension_version_8h_source}{Agora\+Extension\+Version.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Define extension version and concrete interface versions.
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add Padded\+Raw\+Pixel\+Buffer data structure for padded memory buffer.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/08) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add a create\+Custom\+Audio\+Track() for I\+Agora\+Service.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/07) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add thread priority option
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/03) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add pause\+All\+Channel\+Media\+Relay
\item Add resume\+All\+Channel\+Media\+Relay
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/30) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Use extension provider entry for android extensions too.
\end{DoxyItemize}

\doxysubsection*{extension\+\_\+counter\+\_\+event\+\_\+def.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add enum Local\+Extension\+Counter and struct Video\+Beauty\+Param.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/12) }

Gets the N\+TP time.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1base_1_1_ntp_time}{agora\+::base\+::\+Ntp\+Time}} get\+Ntp\+Time()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/02) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void on\+Audio\+Device\+State\+Changed(const char $<$em$>$device\+Id, int device\+Type, int device\+State) \doxysection*{A\+PI (2021-\/09-\/15) }
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+Render\+Mode(void view, media\+::base\+::\+R\+E\+N\+D\+E\+R\+\_\+\+M\+O\+D\+E\+\_\+\+T\+Y\+PE render\+Mode)
\item int set\+Mirror(void$\ast$ view, bool mirror)
\item int add\+View(void$\ast$ view, const Rectangle\& crop\+Area)
\item int remove\+View(void$\ast$ view)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/30) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int Agora\+Service\+::start\+Trace(uint32\+\_\+t count, uint64\+\_\+t mask)
\item int Agora\+Service\+::stop\+Trace(const char$\ast$ file\+\_\+path)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item on\+Audio\+Device\+Volume\+Changed(int device\+Type, int volume, bool muted)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/27) }

Update class I\+Video\+Sink\+Base

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool apply\+Mirror()
\item bool apply\+Rotation()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/16) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add callback function on\+User\+State\+Changed() and enum R\+E\+M\+O\+T\+E\+\_\+\+U\+S\+E\+R\+\_\+\+S\+T\+A\+TE.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/12) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item on\+Active\+Speaker(user\+\_\+id\+\_\+t user\+Id).
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/11) }

\doxysubsection*{audio\+\_\+track\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add I\+Remote\+Audio\+Track\+Ex Get\+Audio\+Level
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void set\+Screen\+Orientation(\+V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+O\+N orientation)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/11) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}} Deprecate set\+Encryption\+Mode and set\+Encryption\+Secret, correct description of enable\+Encryption
\begin{DoxyItemize}
\item set\+Encryption\+Mode
\item set\+Encryption\+Secret
\item enable\+Encryption
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void on\+Content\+Inspect\+Result(media\+::\+C\+O\+N\+T\+E\+N\+T\+\_\+\+I\+N\+S\+P\+E\+C\+T\+\_\+\+R\+E\+S\+U\+L\+T result) {\bfseries{Add\+:}}
\item void on\+Snapshot\+Taken(const char$\ast$ channel, uid\+\_\+t uid, const char$\ast$ file\+Path, int width, int height, int err\+Code)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/06) }

\doxysubsection*{N\+G\+I\+Video\+Frame.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Matrix\+ID and Transfer\+ID in agora\+::rtc\+::\+Color\+Space
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Enable\+Extension\+: fix comment and use track\+\_\+id instead of id
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item set\+Property\+: set provider-\/wide (key, value) property
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/29) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Disable\+Extension {\bfseries{Modified\+:}}
\item Enable\+Extension\+: use id to identify track and mark if the extension is open automatically on track
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/16) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item on\+Frame(user\+\_\+id\+\_\+t uid, rtc\+::conn\+\_\+id\+\_\+t connection\+Id, const media\+::base\+::\+Video\+Frame$\ast$ frame) to on\+Frame(const char$\ast$ channel\+Id, user\+\_\+id\+\_\+t remote\+Uid, const media\+::base\+::\+Video\+Frame$\ast$ frame)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item on\+First\+Remote\+Video\+Frame\+Rendered()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/09-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Audio\+Filter\+Base\+::get\+Preferred\+Channel\+Numbers()
\item I\+Audio\+Filter\+::get\+Preferred\+Channel\+Numbers()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/29) }

\doxysubsection*{\mbox{\hyperlink{_agora_extension_provider_entry_8h_source}{Agora\+Extension\+Provider\+Entry.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Register entry function while loading windows extension
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/10-\/19) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item struct Audio\+Volume\+Information
\end{DoxyItemize}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item on\+Audio\+Volume\+Indication(const Audio\+Volume\+Info$\ast$ , ...) to on\+Audio\+Volume\+Indication(const Audio\+Volume\+Information$\ast$ , ...)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/29) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item const char$\ast$ get\+Extension\+Id(const char$\ast$ provider\+\_\+name, const char$\ast$ extension\+\_\+name)
\item int load\+Extension\+Provider(const char$\ast$ extension\+\_\+lib\+\_\+path)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/27) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enable\+Extension(const char$\ast$ provider\+\_\+name, const char$\ast$ extension\+\_\+name, bool enable)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void set\+Audience\+Latency\+Level(\+A\+U\+D\+I\+E\+N\+C\+E\+\_\+\+L\+A\+T\+E\+N\+C\+Y\+\_\+\+L\+E\+V\+E\+L\+\_\+\+T\+Y\+P\+E level)
\item A\+U\+D\+I\+E\+N\+C\+E\+\_\+\+L\+A\+T\+E\+N\+C\+Y\+\_\+\+L\+E\+V\+E\+L\+\_\+\+T\+Y\+PE get\+Audience\+Latency\+Level()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/15) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Custom\+Audio\+Track(agora\+\_\+refptr$<$rtc\+::\+I\+Audio\+Pcm\+Data\+Sender$>$ audio\+Source, bool enable\+Aec)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add comments.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/22) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}} has\+Video\+Filter(const char$\ast$ id, media\+::base\+::\+V\+I\+D\+E\+O\+\_\+\+M\+O\+D\+U\+L\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON position = media\+::base\+::\+P\+O\+S\+I\+T\+I\+O\+N\+\_\+\+P\+O\+S\+T\+\_\+\+C\+A\+P\+T\+U\+R\+ER) = 0;

\doxysection*{A\+PI (2021-\/06-\/23) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_control_8h_source}{N\+G\+I\+Agora\+Extension\+Control.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item \mbox{\hyperlink{classagora_1_1rtc_1_1_i_extension_control}{agora\+::rtc\+::\+I\+Extension\+Control}}$\ast$ get\+Agora\+Extension\+Control()
\item int register\+Provider(const char$\ast$ provider\+\_\+name, agora\+\_\+refptr$<$\+I\+Extension\+Provider$>$ provider)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Color\+Space in Video\+Frame\+Info
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enable\+Audio\+Filter(const char$\ast$ id, bool enable)
\item set\+Filter\+Property(const char$\ast$ id, const char$\ast$ key, const char$\ast$ json\+Value)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item V\+I\+D\+E\+O\+\_\+\+O\+R\+I\+E\+N\+T\+A\+T\+I\+ON get\+Device\+Orientation() = 0
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/07-\/19) }

use string uid in I\+Local\+User\+Observer callback

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change on\+Audio\+Subscribe\+State\+Changed(const char$\ast$ channel, uid\+\_\+t uid , ...) to on\+Audio\+Subscribe\+State\+Changed(const char$\ast$ channel, user\+\_\+id\+\_\+t user\+Id , ...)
\item Change on\+Video\+Subscribe\+State\+Changed(const char$\ast$ channel, uid\+\_\+t uid , ...) to on\+Video\+Subscribe\+State\+Changed(const char$\ast$ channel, user\+\_\+id\+\_\+t user\+Id , ...)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add playout\+\_\+audio\+\_\+frames field for I\+Local\+Audio\+Track\+::\+Local\+Audio\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add Local\+Audio\+Track\+Stats.\+hw\+\_\+ear\+\_\+monitor
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/06) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Exchange k\+Gl\+Texture\+Oes \& k\+Gl\+Texture2D in Texture\+Type
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/05-\/25) }


\begin{DoxyEnumerate}
\item add function to update minor stream config
\end{DoxyEnumerate}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual int update\+Simulcast\+Stream\+Config(const Simulcast\+Stream\+Config\& config) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/24) }

Support set audio scenario dynamically.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int I\+Local\+User\+::set\+Audio\+Scenario(\+A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+P\+E scenario)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/02) }

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+E\+N\+A\+B\+L\+E\+\_\+\+C\+R\+Y\+P\+T\+O\+\_\+\+A\+C\+C\+E\+SS
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/10) }

Default value change for Rtmp\+Streaming\+Video\+Configuration

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Rtmp\+Connection\+Observer\+::on\+Transfer\+Statistics
\end{DoxyItemize}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Rtmp\+Streaming\+Video\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/05-\/06) }


\begin{DoxyEnumerate}
\item Add switches for c++11 features.
\item Change display\+Id type from view\+\_\+t to uint32\+\_\+t.
\end{DoxyEnumerate}

\doxysubsection*{N\+G\+I\+Agora\+Screen\+Capture.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item int init\+With\+Display\+Id(uint32\+\_\+t display\+Id, const Rectangle\& region\+Rect)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/05) }

Support R/W recording audio frame observer.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item set\+Playback\+Audio\+Frame\+Parameters()
\item set\+Recording\+Audio\+Frame\+Parameters()
\item set\+Mixed\+Audio\+Frame\+Parameters()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/05-\/06) }

delete on\+Remote\+Video\+Stream\+Info\+Updated.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item delete on\+Remote\+Video\+Stream\+Info\+Updated
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/31) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool is\+Camera\+Face\+Detect\+Supported()
\item int enable\+Face\+Detection(bool enabled)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool is\+Camera\+Auto\+Exposure\+Face\+Mode\+Supported()
\item int set\+Camera\+Auto\+Exposure\+Face\+Mode\+Enabled(bool enabled)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int get\+Preferred\+Sample\+Rate()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/04-\/28) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::mos\+\_\+value
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/04-\/28) }

\doxysubsection*{video\+\_\+track\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enum class Internal\+Video\+Source\+Type
\item I\+Video\+Track\+Observer\+::on\+Encoder\+Configuration\+Changed()
\item I\+Local\+Video\+Track\+Ex\+::get\+Internal\+Video\+Source\+Type()
\item Remote\+Video\+Track\+Stats\+Ex\+::is\+Hardware\+Codec
\end{DoxyItemize}

\doxysubsection*{vide\+\_\+node\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enum Internal\+Renderer\+Type
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/08-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item register\+Audio\+Frame\+Observer(agora\+::media\+::\+I\+Audio\+Frame\+Observer $\ast$) to register\+Audio\+Frame\+Observer(agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base $\ast$)
\item unregister\+Audio\+Frame\+Observer(agora\+::media\+::\+I\+Audio\+Frame\+Observer $\ast$) to register\+Audio\+Frame\+Observer(agora\+::media\+::\+I\+Audio\+Frame\+Observer\+Base $\ast$)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/04-\/27) }

Ensure get correct filter composite from specified position. \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modified\+:}} add position parameter
\begin{DoxyItemize}
\item Changes get\+Audio\+Filter(const char $\ast$name) to get\+Audio\+Filter(const char $\ast$name, Audio\+Filter\+Position position)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/22) }

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

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Video\+Encoded\+Image\+Receiver;
\item class I\+Media\+Packet\+Receiver;
\item class I\+Video\+Sink\+Base;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Local\+User.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Local\+User;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Media\+Player\+Source.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Camera\+Capturer.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Remote\+Audio\+Mixer\+Source.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Screen\+Capturer.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Video\+Mixer\+Source.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Pcm\+Data\+Sender;
\item class I\+Audio\+Encoded\+Frame\+Sender;
\item class I\+Remote\+Audio\+Mixer\+Source;
\item class I\+Camera\+Capturer;
\item class I\+Screen\+Capturer;
\item class I\+Video\+Mixer\+Source;
\item class I\+Video\+Frame\+Transceiver;
\item class I\+Video\+Frame\+Sender;
\item class I\+Video\+Renderer;
\item class I\+Video\+Filter;
\item class I\+Audio\+Filter;
\item class I\+Video\+Sink\+Base;
\item class I\+Video\+Encoded\+Image\+Sender;
\item class I\+Media\+Player\+Source;
\item class I\+Media\+Packet\+Sender;
\item class I\+Media\+Streaming\+Source;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Audio\+Track.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Video\+Track.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Media\+Control\+Packet\+Sender;
\item class I\+Media\+Control\+Packet\+Receiver;
\item struct Audio\+Encoder\+Configuration;
\item struct Video\+Encoder\+Configuration;
\item class I\+Local\+Audio\+Track;
\item struct Remote\+Audio\+Track\+Stats;
\item class I\+Remote\+Audio\+Track;
\item struct Local\+Video\+Track\+Stats;
\item struct Remote\+Video\+Track\+Stats;
\item class I\+Media\+Packet\+Receiver;
\item class I\+Video\+Sink\+Base;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Filter;
\item class I\+Audio\+Sink\+Base;
\item class I\+Media\+Packet\+Receiver;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Extension\+Provider.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Extension\+Provider.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Media\+Extension\+Observer;
\item class I\+Extension\+Provider;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Delete\+:}} \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{} \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h\char`\"{} \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{} {\bfseries{Add\+:}} class I\+Video\+Encoded\+Image\+Receiver; class I\+Media\+Packet\+Receiver; class I\+Video\+Sink\+Base;

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Local\+User.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Local\+User;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Media\+Player\+Source.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Camera\+Capturer.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Remote\+Audio\+Mixer\+Source.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Screen\+Capturer.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Video\+Mixer\+Source.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Pcm\+Data\+Sender;
\item class I\+Audio\+Encoded\+Frame\+Sender;
\item class I\+Remote\+Audio\+Mixer\+Source;
\item class I\+Camera\+Capturer;
\item class I\+Screen\+Capturer;
\item class I\+Video\+Mixer\+Source;
\item class I\+Video\+Frame\+Transceiver;
\item class I\+Video\+Frame\+Sender;
\item class I\+Video\+Renderer;
\item class I\+Video\+Filter;
\item class I\+Audio\+Filter;
\item class I\+Video\+Sink\+Base;
\item class I\+Video\+Encoded\+Image\+Sender;
\item class I\+Media\+Player\+Source;
\item class I\+Media\+Packet\+Sender;
\item class I\+Media\+Streaming\+Source;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Audio\+Track.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Video\+Track.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Media\+Control\+Packet\+Sender;
\item class I\+Media\+Control\+Packet\+Receiver;
\item struct Audio\+Encoder\+Configuration;
\item struct Video\+Encoder\+Configuration;
\item class I\+Local\+Audio\+Track;
\item struct Remote\+Audio\+Track\+Stats;
\item class I\+Remote\+Audio\+Track;
\item struct Local\+Video\+Track\+Stats;
\item struct Remote\+Video\+Track\+Stats;
\item class I\+Media\+Packet\+Receiver;
\item class I\+Video\+Sink\+Base;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+Agora\+Ref\+Ptr.\+h\char`\"{}
\item \#include \char`\"{}\+I\+Agora\+Service.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Audio\+Filter;
\item class I\+Audio\+Sink\+Base;
\item class I\+Media\+Packet\+Receiver;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Delete\+:}}
\begin{DoxyItemize}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Extension\+Provider.\+h\char`\"{}
\item \#include \char`\"{}\+N\+G\+I\+Agora\+Extension\+Provider.\+h\char`\"{}
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Media\+Extension\+Observer;
\item class I\+Extension\+Provider;
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item adjust\+User\+Playback\+Signal\+Volume(uid\+\_\+t uid, int volume) to adjust\+User\+Playback\+Signal\+Volume(user\+\_\+id\+\_\+t user\+Id, int volume)
\item get\+User\+Playback\+Signal\+Volume(uid\+\_\+t uid, int$\ast$ volume) to get\+User\+Playback\+Signal\+Volume(user\+\_\+id\+\_\+t user\+Id, int$\ast$ volume)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int enable\+Sound\+Position\+Indication(bool enabled)
\item int set\+Remote\+Voice\+Position(uid\+\_\+t uid, double pan, double gain)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item int set\+Remote\+Voice\+Position(float pan, float gain)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/06) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add new interface I\+Video\+Frame\+Observer2
\item register\+Video\+Encoded\+Frame\+Observer()
\item unregister\+Video\+Encoded\+Frame\+Observer()
\item register\+Video\+Frame\+Observer()
\item unregister\+Video\+Frame\+Observer()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add new interface I\+Video\+Frame\+Observer2
\item register\+Video\+Encoded\+Frame\+Observer()
\item unregister\+Video\+Encoded\+Frame\+Observer()
\item register\+Video\+Frame\+Observer()
\item unregister\+Video\+Frame\+Observer()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/03-\/31) }

Add media streaming source module

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Agora\+Service\+::create\+Media\+Streaming\+Video\+Track
\item I\+Agora\+Service\+::create\+Media\+Streaming\+Audio\+Track
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Media\+Node\+Factory\+::create\+Media\+Streaming\+Source
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/06) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Camera\+Capturer\+::is\+Camera\+Torch\+Supported()
\item I\+Camera\+Capturer\+::set\+Camera\+Torch\+On(bool is\+On)
\item I\+Camera\+Capturer\+::is\+Camera\+Exposure\+Position\+Supported()
\item I\+Camera\+Capturer\+::set\+Camera\+Exposure\+Position(float position\+Xin\+View, float position\+Yin\+View)
\item I\+Camera\+Capture\+Observer\+::on\+Camera\+Exposure\+Area\+Changed(int x, int y, int width, int height)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/26) }

Refine I\+Video\+Frame interfaces

\doxysubsection*{N\+G\+I\+Video\+Frame.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Refine interfaces to support mempixelbuffer, texture and cvpixelbuffer
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/26) }

Move \textquotesingle{}area\+Code\textquotesingle{} field from \textquotesingle{}Agora\+Service\+Configuration\+Ex\textquotesingle{} to \textquotesingle{}Agora\+Service\+Configuration\textquotesingle{}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item I\+Agora\+Service\+::\+Agora\+Service\+Configuration
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/04-\/12) }

Add parameter key and modify broadcast\+\_\+packet\+\_\+t.

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}} Add parameter key
\begin{DoxyItemize}
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+J\+O\+I\+N\+\_\+\+V\+O\+S\+\_\+\+T\+I\+M\+E\+O\+UT
\end{DoxyItemize}

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Modified\+:}} Modify broadcast\+\_\+packet\+\_\+t.
\begin{DoxyItemize}
\item add \mbox{[}bool need\+\_\+reliable; / bool real\+\_\+quit;\mbox{]} to broadcast\+\_\+packet\+\_\+t.
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/03-\/23) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} rtc\+\_\+engine\+\_\+i.\+h \mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} \doxysubsection*{\mbox{\hyperlink{_i_agora_rtc_engine_ex_8h_source}{I\+Agora\+Rtc\+Engine\+Ex.\+h}} }

\doxysection*{A\+PI (2021-\/02-\/23) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

\doxysubsection*{Agora\+Service\+Configuration }

{\bfseries{Add\+:}} channel\+Profile

\doxysection*{A\+PI (2021-\/01-\/18) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} \mbox{\hyperlink{_n_g_i_agora_extension_provider_8h_source}{N\+G\+I\+Agora\+Extension\+Provider.\+h}} \mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

\doxysection*{A\+PI (2021-\/02-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modify\+:}} Modify Struct Remote\+Audio\+Track\+Stats\+:
\begin{DoxyItemize}
\item Initial audio\+\_\+level in constructor
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/03-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item enable\+Ear\+Monitor(bool enable, bool include\+Audio\+Filter) to enable\+Ear\+Monitor(bool enable, int include\+Audio\+Filters)
\end{DoxyItemize}

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add Audio\+Filter\+Position.\+Recording\+Local\+Playback
\item add Audio\+Filter\+Position.\+Post\+Audio\+Recording\+Device
\item add Audio\+Filter\+Position.\+Post\+Audio\+Processing
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/25) }

Add \char`\"{}\+Safe Deleter\char`\"{} in Register$\ast$\+Observer function argument list

{\bfseries{Modified\+:}} \mbox{\hyperlink{_i_agora_media_relay_service_8h_source}{I\+Agora\+Media\+Relay\+Service.\+h}} \mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} \mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} \mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}}

\doxysection*{A\+PI (2021-\/03-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::delay\+\_\+estimate\+\_\+ms
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Local\+User\+Observer\+::on\+Stream\+Message()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Connection\+::create\+Data\+Stream()
\item I\+Rtc\+Connection\+Observer\+::on\+Stream\+Message()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/23) }

Loopback recording.

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add a parameter for I\+Agora\+Service\+::create\+Recording\+Device\+Audio\+Track()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/19) }

modify to adapt c++ 11

\doxysection*{A\+PI (2020-\/03-\/17) }

Add audio and video downlink and uplink process time stats field

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Local\+Audio\+Detailed\+Stats\+::uplink\+\_\+process\+\_\+time\+\_\+ms
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::downlink\+\_\+process\+\_\+time\+\_\+ms
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Local\+Video\+Track\+Stats\+::uplink\+\_\+cost\+\_\+time\+\_\+ms
\item Remote\+Video\+Track\+Stats\+::downlink\+\_\+process\+\_\+time\+\_\+ms
\item Remote\+Video\+Track\+Stats\+::frame\+\_\+render\+\_\+delay\+\_\+ms;
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/03-\/16) }

\doxysubsection*{\mbox{\hyperlink{_agora_ref_counted_object_8h_source}{Agora\+Ref\+Counted\+Object.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify include path
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/10) }

Add remote video A/V sync offset

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} }

{\bfseries{Modified\+:}} Add {\ttfamily av\+Sync\+Time\+Ms} field for struct {\ttfamily Remote\+Video\+Stats}

\doxysection*{A\+PI (2021-\/03-\/18) }

Modify Rtc\+Connection\+Configuration\+Ex.

\doxysubsection*{rtc\+\_\+connection\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes Rtc\+Connection\+Configuration\+Ex\+::\+Rtc\+Connection\+Configuration\+Ex implement
\end{DoxyItemize}

\doxysubsection*{video\+\_\+track\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes Attach\+Info\+::recv\+\_\+type to Attach\+Info\+::recv\+\_\+media\+\_\+packet
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes Rtc\+Connection\+Configuration\+::recv\+Type to Rtc\+Connection\+Configuration\+::audio/video\+Recv\+Media\+Packet
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deleted enum R\+E\+C\+V\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/22) }

Support for mixed remote audio track

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_remote_audio_mixer_source_8h_source}{N\+G\+I\+Agora\+Remote\+Audio\+Mixer\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item class I\+Remote\+Audio\+Mixer\+Source
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/12) }

Change definition of bytes\+\_\+per\+\_\+sample without channel

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_8h_source}{N\+G\+I\+Agora\+Media\+Node.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item change param type of send\+Audio\+Pcm\+Data\+::bytes\+\_\+per\+\_\+sample from size\+\_\+t to enum B\+Y\+T\+E\+S\+\_\+\+P\+E\+R\+\_\+\+S\+A\+M\+P\+LE
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item change param type of Audio\+Subscription\+Options\+::bytes\+\_\+per\+\_\+sample from size\+\_\+t to enum B\+Y\+T\+E\+S\+\_\+\+P\+E\+R\+\_\+\+S\+A\+M\+P\+LE
\end{DoxyItemize}

\DoxyHorRuler{0}
 \doxysection*{A\+PI (2020-\/10-\/23) }

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

\doxysubsection*{rtc\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item struct Extension
\item Rtc\+Engine\+Context\+Ex\+::extensions
\item Rtc\+Engine\+Context\+Ex\+::num\+Extension
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Engine\+::enable\+Extension
\item I\+Rtc\+Engine\+::set\+Extension\+Property
\end{DoxyItemize}

{\bfseries{Remove\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Engine\+::enable\+Local\+Video\+Filter
\item I\+Rtc\+Engine\+::set\+Local\+Video\+Filter\+Property
\item I\+Rtc\+Engine\+::get\+Local\+Video\+Filter\+Property
\item I\+Rtc\+Engine\+::enable\+Remote\+Video\+Filter
\item I\+Rtc\+Engine\+::set\+Remote\+Video\+Filter\+Property
\item I\+Rtc\+Engine\+::get\+Remote\+Video\+Filter\+Property
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Agora\+Service\+::create\+Custom\+Audio\+Track
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Media\+Node\+Factory\+::create\+Remote\+Audio\+Mixer\+Source
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/03-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+count\+\_\+80\+\_\+ms
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+time\+\_\+80\+\_\+ms
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+count\+\_\+200\+\_\+ms
\item Remote\+Audio\+Track\+Stats\+::frozen\+\_\+time\+\_\+200\+\_\+ms
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/08) }

\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

Fix \char`\"{}warning\+: unused parameter\char`\"{}

\doxysection*{A\+PI (2021-\/02-\/05) }

Add two interface file \mbox{\hyperlink{_n_g_i_agora_rtmp_connection_8h_source}{N\+G\+I\+Agora\+Rtmp\+Connection.\+h}} and \mbox{\hyperlink{_n_g_i_agora_rtmp_local_user_8h_source}{N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h}}.

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Rtmp\+Connection()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/18) }

Add key I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+D\+E\+S\+E\+N\+S\+I\+T\+I\+S\+E\+\_\+\+IP.

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+N\+T\+E\+R\+N\+A\+L\+\_\+\+K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+D\+E\+S\+E\+N\+S\+I\+T\+I\+S\+E\+\_\+\+IP
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modify\+:}} Modify Struct Remote\+Audio\+Track\+Stats\+:
\begin{DoxyItemize}
\item Add int32\+\_\+t audio\+\_\+level
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item changed agora\+::base\+::\+Optional to \mbox{\hyperlink{classagora_1_1_optional}{agora\+::\+Optional}}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/12-\/2) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_remote_audio_mixer_source_8h_source}{N\+G\+I\+Agora\+Remote\+Audio\+Mixer\+Source.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deleted I\+Remote\+Audio\+Mixer\+Source\+::start\+Mixing()
\item Deleted I\+Remote\+Audio\+Mixer\+Source\+::stop\+Mixing()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/02) }

Modify I\+Network\+Observer.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}} Add more callback to I\+Network\+Observer
\begin{DoxyItemize}
\item Changes add on\+Downlink\+Network\+Info\+Updated
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/03) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modify\+:}} Modify Struct Agora\+Service\+Configuration\+:
\begin{DoxyItemize}
\item Remove const char$\ast$ log\+Dir;
\item Add commons\+::\+Log\+Config log\+Config;
\end{DoxyItemize}

{\bfseries{Deleted\+:}} Short description
\begin{DoxyItemize}
\item Deleted Foo()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/02-\/05) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item get\+Raw\+Message\+Data()
\item get\+Raw\+Message\+Length()
\item set\+Message\+Type()
\item set\+Raw\+Message()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item on\+Audio\+Subscribe\+State\+Changed()
\item on\+Video\+Subscribe\+State\+Changed()
\item on\+Audio\+Publish\+State\+Changed()
\item on\+Video\+Publish\+State\+Changed()
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/19) }

Remove K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+L\+O\+S\+T\+\_\+\+P\+E\+R\+I\+OD

\doxysubsection*{config\+\_\+engine\+\_\+i.\+h }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deleted macro K\+E\+Y\+\_\+\+R\+T\+C\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+L\+O\+S\+T\+\_\+\+P\+E\+R\+I\+OD
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes I\+Media\+Control\+Packet\+Receiver\+::on\+Media\+Control\+Packet\+Received(const uint8\+\_\+t $\ast$packet, size\+\_\+t length) to I\+Media\+Control\+Packet\+Receiver\+::on\+Media\+Control\+Packet\+Received(uid\+\_\+t uid, const uint8\+\_\+t $\ast$packet, size\+\_\+t length)
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/01-\/04) }

\doxysubsection*{N\+G\+I\+Agora\+Camera\+Campturer.\+h }

{\bfseries{Added\+:}}
\begin{DoxyItemize}
\item I\+Camera\+Capture\+Observer\+::on\+Camera\+State\+Changed
\item I\+Camera\+Capturer\+::switch\+Camera
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/12-\/24) }

adjust\+User\+Playback\+Signal\+Volume

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item adjust\+User\+Playback\+Signal\+Volume(uid\+\_\+t uid, int volume)
\item get\+User\+Playback\+Signal\+Volume(uid\+\_\+t uid, int$\ast$ volume)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/12-\/17) }

video\+\_\+node\+\_\+i.\+h

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify T\+Connection\+Info to include int uid
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/12-\/09) }

Rename R\+E\+M\+O\+T\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE.

\doxysubsection*{rtc\+\_\+connection\+\_\+i.\+h/\+N\+G\+I\+Agora\+Local\+User.h/\+N\+G\+I\+Agora\+Video\+Track.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes Rename all R\+E\+M\+O\+T\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+P\+E/\+R\+E\+M\+O\+T\+E\+\_\+\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+H\+I\+GH to V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+P\+E/\+V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+H\+I\+GH.
\end{DoxyItemize}

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{Modified\+:}} Modify Video\+Encoded\+Image\+Data.
\begin{DoxyItemize}
\item Changes Add V\+I\+D\+E\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+T\+Y\+PE stream\+Type to Video\+Encoded\+Image\+Data
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/30) }

Refine comments.
\begin{DoxyItemize}
\item I\+Media\+Relay\+Service\+::unregister\+Event\+Handler
\end{DoxyItemize}

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Video\+Filter\+Ex\+::attach\+Stats\+Space
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/11) }

\doxysubsection*{\mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item M\+A\+I\+N\+T\+A\+I\+N\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+ON into D\+E\+G\+R\+A\+D\+A\+T\+I\+O\+N\+\_\+\+P\+R\+E\+F\+E\+R\+E\+N\+CE
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/11) }

\doxysubsection*{\mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item M\+A\+I\+N\+T\+A\+I\+N\+\_\+\+R\+E\+S\+O\+L\+U\+T\+I\+ON into D\+E\+G\+R\+A\+D\+A\+T\+I\+O\+N\+\_\+\+P\+R\+E\+F\+E\+R\+E\+N\+CE
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/09) }

Update A\+PI parameter

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}} Remove elapsed
\begin{DoxyItemize}
\item Changes {\ttfamily void on\+Video\+Track\+Publish\+Success(agora\+\_\+refptr$<$I\+Local\+Video\+Track$>$ video\+Track, int elapsed)} to {\ttfamily void on\+Video\+Track\+Publish\+Success(agora\+\_\+refptr$<$I\+Local\+Video\+Track$>$ video\+Track)}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/11-\/6) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

Refine a inclusion usage of T\+A\+R\+G\+E\+T\+\_\+\+O\+S\+\_\+\+I\+P\+H\+O\+NE

\doxysection*{A\+PI (2023-\/06-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item fix i\+OS platform macro definition
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/10-\/27) }

Add callback for encryption error

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Connection\+Observer\+::on\+Encryption\+Error
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/16) }

fix ios and mac marco

A\+PI (2020-\/10-\/12)

\doxysection*{A\+PI (2020-\/09-\/16) }

Support S\+M4 Encryption.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Rtc\+Connection\+::enable\+Encryption
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/17) }

Add member fields to Remote\+Audio\+Track\+Stats

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::expanded\+\_\+speech\+\_\+samples
\item Remote\+Audio\+Track\+Stats\+::expanded\+\_\+noise\+\_\+samples
\item Remote\+Audio\+Track\+Stats\+::timestamps\+\_\+since\+\_\+last\+\_\+report
\item Remote\+Audio\+Track\+Stats\+::min\+\_\+sequence\+\_\+number
\item Remote\+Audio\+Track\+Stats\+::max\+\_\+sequence\+\_\+number
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/28) }

Modify Video\+Encoded\+Image\+Data.

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{Modify\+:}} Modify Video\+Encoded\+Image\+Data.
\begin{DoxyItemize}
\item Remove packetization\+Mode.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/11) }

\doxysubsection*{Add v2.\+7.\+1 docs for high-\/level apis. For details, see jira M\+S-\/17241. }

Merge docs for low-\/level apis from v2.\+7.\+0.\+2 to v2.\+7.\+1.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify change marco
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes I\+Local\+User\+::send\+Intra\+Request(uid\+\_\+t uid) to I\+Local\+User\+::send\+Intra\+Request(user\+\_\+id\+\_\+t user\+Id)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/07) }

A\+PI (2020-\/09-\/15) Add video engine flags and video track method.

\doxysubsection*{packet\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item k\+Video\+Engine\+Flag\+Scalable\+Delta
\item k\+Video\+Engine\+Flag\+Major\+Stream\+Only
\end{DoxyItemize}

\doxysubsection*{video\+\_\+track\+\_\+i.\+h }

{\bfseries{Add\+:}} Add method to I\+Local\+Video\+Track\+Ex
\begin{DoxyItemize}
\item Get\+Active\+Streams\+Count()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/09) }

Modify enum V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE

\doxysubsection*{packet\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes remove D\+R\+O\+P\+P\+A\+B\+L\+E\+\_\+\+F\+R\+A\+ME from V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}} Add {\ttfamily frame\+Loss\+Rate} field for struct {\ttfamily Remote\+Video\+Track\+Stats}

\doxysection*{A\+PI (2020-\/08-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Delete I\+N\+G\+Audio\+Device\+Manager\+::start\+Microphone\+Test and I\+N\+G\+Audio\+Device\+Manager\+::stop\+Microphone\+Test
\item Delete I\+Audio\+Device\+Manager\+Observer\+::on\+Volume\+Indication
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/09-\/02) }

Modify enum V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE

\doxysubsection*{packet\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes remove D\+R\+O\+P\+P\+A\+B\+L\+E\+\_\+\+F\+R\+A\+ME from V\+I\+D\+E\+O\+\_\+\+F\+R\+A\+M\+E\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/21) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Modified\+:}} Remove dup \textquotesingle{}app\+Id\textquotesingle{}.

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Modified\+:}} Merge changes from arsenal.

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Modified\+:}} Modify macro definition

\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} \mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} }

{\bfseries{Modified\+:}} Refine macro defition and add comments for \#endif.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}} Fix typo.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modified\+:}} Fix return value of set\+Property() and get\+Property().

\doxysection*{A\+PI (2020-\/09-\/04) }

Add new callback to I\+Rtc\+Connection\+Observer.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes add on\+Network\+Type\+Changed to I\+Rtc\+Connection\+Observer
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/13) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes on\+Send\+Message\+State(int64\+\_\+t message\+Id, C\+H\+A\+N\+N\+E\+L\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+T\+A\+T\+E state) to on\+Send\+Message\+State(int64\+\_\+t message\+Id, C\+H\+A\+N\+N\+E\+L\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+T\+A\+T\+E state)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/21) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change add\+Video\+Filter(filter) to add\+Video\+Filter(filter, position)
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/12-\/09) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtmp_streaming_service_8h_source}{I\+Agora\+Rtmp\+Streaming\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Fix return value of start\+Rtmp\+Stream\+With\+Transcoding/start\+Rtmp\+Stream\+Without\+Transcoding
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item {\ttfamily I\+Video\+Frame\+Transceiver}class
\item create\+Video\+Frame\+Transceiver function for I\+Media\+Node\+Factory
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Transcoded\+Video\+Track function for I\+Agora\+Service
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/04) }

A\+PI change to support string U\+ID.

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}} Modify Agora\+Service\+Configuration to include string uid switch
\begin{DoxyItemize}
\item bool use\+String\+Uid {\bfseries{Add\+:}} Add Low level api to I\+Agora\+Service to support register user account
\item I\+Agora\+Service\+::register\+Local\+User\+Account
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/08-\/11) }

Fix return error

\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modify set\+Property and get\+Property return type
\item Fix spell error
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/31) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

Add {\ttfamily mean\+\_\+waiting\+\_\+time} field for Remote\+Audio\+Track\+Stats

\doxysection*{A\+PI (2020-\/07-\/29) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

Add {\ttfamily get\+Playout\+Audio\+Parameters(\+Audio\+Parameters$\ast$ params) const} function for I\+N\+G\+Audio\+Device\+Manager Add {\ttfamily get\+Record\+Audio\+Parameters(\+Audio\+Parameters$\ast$ params) const} function for I\+N\+G\+Audio\+Device\+Manager

\doxysection*{A\+PI (2020-\/08-\/03) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Agora\+Service\+Configuration add log\+Dir
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

Remove free\+\_\+pcm\+\_\+data\+\_\+list\+\_\+size from I\+Local\+Audio\+Track\+::\+Local\+Audio\+Track\+Stats

\doxysection*{A\+PI (2020-\/07-\/17) }

Modify comment.

\mbox{\hyperlink{_agora_ref_counted_object_8h_source}{Agora\+Ref\+Counted\+Object.\+h}} \mbox{\hyperlink{_i_agora_rtmp_streaming_service_8h_source}{I\+Agora\+Rtmp\+Streaming\+Service.\+h}} \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} \mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} \mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} \mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} \mbox{\hyperlink{_n_g_i_agora_extension_control_8h_source}{N\+G\+I\+Agora\+Extension\+Control.\+h}} \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} \mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}} \mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} \mbox{\hyperlink{_n_g_i_agora_video_mixer_source_8h_source}{N\+G\+I\+Agora\+Video\+Mixer\+Source.\+h}} \doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Remove api2 prefix.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/16) }

add on\+Connecting

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}} add on\+Connecting to I\+Rtc\+Connection\+Observer

\doxysection*{A\+PI (2020-\/07-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add \char`\"{}uint32\+\_\+t effect\+\_\+type\char`\"{} member to I\+Local\+Audio\+Track\+::\+Local\+Audio\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/03) }

Modify comment.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modify\+:}} Modify comment.
\begin{DoxyItemize}
\item Changes changes comment about pcm\+Data\+Only.
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modify\+:}} Modify Audio\+Subscription\+Options and Rtc\+Connection\+Configuration.
\begin{DoxyItemize}
\item Changes remove pcm\+Data\+Only from Audio\+Subscription\+Options.
\item Changes add enable\+Audio\+Recording\+Or\+Playout into Rtc\+Connection\+Configuration.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/07-\/01) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modify\+:}} Remove media engine type.

\doxysection*{A\+PI (2020-\/06-\/27) }

Make include path correct

\doxysection*{A\+PI (2020-\/06-\/18) }

Modify Video\+Encoded\+Image\+Data.

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{Modify\+:}} Modify Video\+Encoded\+Image\+Data.
\begin{DoxyItemize}
\item Remove packetization\+Mode.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/18) }

Move Move I\+Recording\+Device\+Source from \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} to \mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}}

\doxysection*{A\+PI (2020-\/06-\/17) }

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Deleted\+:}} Delete unused api
\begin{DoxyItemize}
\item Deleted create\+Local\+Audio\+Track(const rtc\+::\+Audio\+Options\& audio\+Options)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/16) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Modify\+:}} Fix compile error
\begin{DoxyItemize}
\item Remove the incorrect type conversion code in class I\+Channel\+Event\+Handler
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/15) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add create\+Recording\+Device\+Audio\+Track() for I\+Agora\+Service.
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add create\+Recording\+Device\+Source() for I\+Media\+Node\+Factory.
\item Add interface I\+Recording\+Device\+Source
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} }

{\bfseries{Modify\+:}} Fix compile error
\begin{DoxyItemize}
\item unnamed class used in typedef name won\textquotesingle{}t compile in C++20
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/09) }

Modify on\+Media\+Packet\+Received.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modified\+:}} Modify the declaration of on\+Media\+Packet\+Received.
\begin{DoxyItemize}
\item Changes on\+Media\+Packet\+Received(const uint8\+\_\+t $\ast$packet, size\+\_\+t length) to on\+Media\+Packet\+Received(const uint8\+\_\+t $\ast$packet, size\+\_\+t length, const agora\+::media\+::base\+::\+Packet\+Options\& options)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/04) }

Modify the callback on\+Bandwidth\+Estimation\+Updated

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}} Modify the declaration of on\+Bandwidth\+Estimation\+Updated
\begin{DoxyItemize}
\item Changes \char`\"{}virtual void on\+Bandwidth\+Estimation\+Updated(int target\+\_\+bitrate\+\_\+bps)\char`\"{} to \char`\"{}virtual void on\+Bandwidth\+Estimation\+Updated(const Network\+Info\& info)\char`\"{}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/06-\/04) }

Add Sender\+Options and modify create\+Custom\+Video\+Track

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}} Add Sender\+Options
\begin{DoxyItemize}
\item struct Sender\+Options
\end{DoxyItemize}

{\bfseries{Modified\+:}} Change the declaration of create\+Custom\+Video\+Track
\begin{DoxyItemize}
\item Changes \char`\"{}virtual agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Video\+Track$>$ create\+Custom\+Video\+Track(
               agora\+\_\+refptr$<$rtc\+::\+I\+Video\+Encoded\+Image\+Sender$>$ video\+Source, bool sync\+With\+Audio\+Track = false, T\+Cc\+Mode cc\+Mode = C\+C\+\_\+\+E\+N\+A\+B\+L\+E\+D)\char`\"{} To \char`\"{}virtual agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Video\+Track$>$ create\+Custom\+Video\+Track(
          agora\+\_\+refptr$<$rtc\+::\+I\+Video\+Encoded\+Image\+Sender$>$ video\+Source, Sender\+Options\& options)\char`\"{}
\item Remove option sync\+With\+Audio\+Track from all related apis
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/29) }

Updated docs for the following header files\+:
\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}}
\item \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}
\item \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\item \mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Add a parameter for create\+Media\+Player\+Source()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Init Remote\+Audio\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/26) }

Move create\+Observable\+Video\+Sink() from I\+Media\+Node\+Factory to I\+Media\+Node\+Factory\+Ex

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Delete create\+Observable\+Video\+Sink()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/20) }

\doxysubsection*{N\+G\+I\+Agora\+Media\+Player\+Source.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Rename register\+Player\+Observer()/unregister\+Player\+Observer() to register\+Player\+Source\+Observer()/unregister\+Player\+Source\+Observer() in I\+Media\+Player\+Source.
\item Remove \textquotesingle{}const\textquotesingle{} from the parameter of on\+Player\+Source\+State\+Changed(), on\+Position\+Changed() and on\+Player\+Event() in I\+Media\+Player\+Source\+Observer since unnecessary.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change add\+Renderer(renderer) to add\+Renderer(renderer, position)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/19) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item bool is\+External()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item remove \char`\"{}bool internal\char`\"{} parameter form funciton add\+Video\+Filter
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/19) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Delete I\+Camera\+Capture\+Observer interface
\item Delete I\+Camera\+Capture\+Observer\+::register\+Camera\+Capture\+Observer
\item Delete I\+Camera\+Capture\+Observer\+::unregister\+Camera\+Capture\+Observer
\item Delete I\+Camera\+Capture\+Observer\+::get\+Capture\+State
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Annotation of I\+Local\+User\+Observer\+::on\+Local\+Video\+Track\+State\+Changed
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/12) }

Remove illegal header files included and add including header files.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Deleted\+:}} Delete the \mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} included
\begin{DoxyItemize}
\item Deleted \#include \char`\"{}\+I\+Agora\+Rtc\+Engine.\+h\char`\"{}
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Deleted\+:}} Delete the \mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}} included
\begin{DoxyItemize}
\item Deleted \#include \char`\"{}\+I\+Agora\+Rtc\+Engine.\+h\char`\"{}
\end{DoxyItemize}

\doxysubsection*{internal/agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Add\+:}} Add the \mbox{\hyperlink{_i_agora_log_8h_source}{I\+Agora\+Log.\+h}} including
\begin{DoxyItemize}
\item \#include \char`\"{}base/\+I\+Agora\+Log.\+h\char`\"{}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/09) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}

Add A\+U\+D\+I\+O\+\_\+\+S\+C\+E\+N\+A\+R\+I\+O\+\_\+\+T\+Y\+PE audio\+Scenario for Agora\+Service\+Configuration

\doxysection*{A\+PI (2020-\/05-\/08) }

\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} N\+G\+I\+Agora\+Media\+Player\+Source.\+h internal/media\+\_\+node\+\_\+factory\+\_\+i.\+h \doxysubsection*{internal/rtc\+\_\+connection\+\_\+i.\+h }

{\bfseries{Modified\+:}}


\begin{DoxyItemize}
\item Change namespace
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/08) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_control_8h_source}{N\+G\+I\+Agora\+Extension\+Control.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Move L\+O\+G\+\_\+\+L\+E\+V\+EL from \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}} to \mbox{\hyperlink{_i_agora_log_8h_source}{I\+Agora\+Log.\+h}} and change namespace to commons
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item Remove parameter $\vert$view$\vert$ in create\+Video\+Renderer
\item Change namespace
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/05-\/07) }

\doxysubsection*{\mbox{\hyperlink{_agora_optional_8h_source}{Agora\+Optional.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes optional.\+h to \mbox{\hyperlink{_agora_optional_8h_source}{Agora\+Optional.\+h}}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/29) }

Refine Remote\+Video\+Track\+Stats

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}} Rename fields
\begin{DoxyItemize}
\item stream\+Type to rx\+Stream\+Type
\end{DoxyItemize}

{\bfseries{Add\+:}} Add fields
\begin{DoxyItemize}
\item decoder\+Output\+Frame\+Rate
\item renderer\+Output\+Frame\+Rate
\item packet\+Loss\+Rate
\item total\+Frozen\+Time
\item frozen\+Rate
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item I\+Camera\+Capturer\+::\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+T\+A\+T\+E\+::\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+O\+P\+P\+I\+NG
\item I\+Camera\+Capturer\+::\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+T\+A\+T\+E\+::\+C\+A\+P\+T\+U\+R\+E\+\_\+\+S\+T\+A\+T\+E\+\_\+\+S\+T\+A\+R\+T\+I\+NG
\item switch\+Camera()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/20) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item I\+Video\+Sink\+Base\+::on\+Data\+Stream\+Will\+Start()
\item I\+Video\+Sink\+Base\+::on\+Data\+Stream\+Will\+Stop()
\item I\+Video\+Filter\+::on\+Data\+Stream\+Will\+Start()
\item I\+Video\+Filter\+::on\+Data\+Stream\+Will\+Stop()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/17) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_control_8h_source}{N\+G\+I\+Agora\+Extension\+Control.\+h}} }

{\bfseries{Add\+:}} Add I\+Extension\+Control interfaces for agora extensions
\begin{DoxyItemize}
\item get\+Capabilities
\item register\+Extension\+Provider
\item unregister\+Extension\+Provider
\item create\+Video\+Frame
\item copy\+Video\+Frame
\item recycle\+Video\+Cache
\item dump\+Video\+Frame
\item log
\end{DoxyItemize}

\doxysubsection*{N\+G\+I\+Agora\+Extension.\+h }

{\bfseries{Deleted\+:}} file deleted

\doxysubsection*{N\+G\+I\+Agora\+Media\+Node\+Provider.\+h }

{\bfseries{Deleted\+:}} file deleted

\doxysubsection*{N\+G\+I\+Agora\+Media\+Node\+Factory }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item register\+Media\+Node\+Provider
\item unregister\+Media\+Node\+Provider
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/16) }

\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} {\bfseries{Add\+:}} Add I\+Video\+Frame interfaces for external video frames
\begin{DoxyItemize}
\item type
\item format
\item width
\item height
\item size
\item rotation
\item set\+Rotation
\item timestamp\+Us
\item set\+Timestamp\+Us
\item data
\item mutable\+Data
\item resize
\item texture\+Id
\item fill
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/13) }

\doxysubsection*{N\+G\+I\+Agora\+Media\+Player\+Source.\+h }

{\bfseries{Modified\+:}}


\begin{DoxyItemize}
\item Refine the A\+PI order of I\+Media\+Player\+Source().
\end{DoxyItemize}

A\+PI (2020-\/04-\/12) \doxysection*{Add send intra request api. }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add send intra request api.
\begin{DoxyItemize}
\item send\+Intra\+Request()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/11) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item I\+Video\+Track\+::add\+Video\+Filter()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/10) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Added\+:}} Support sending custom event to argus
\begin{DoxyItemize}
\item I\+Rtc\+Connection\+::send\+Custom\+Report\+Message().
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}} }

{\bfseries{Added\+:}} Add parameter \textquotesingle{}event\+Space\textquotesingle{}, used during report R\+TM events
\begin{DoxyItemize}
\item I\+Agora\+Rtm\+Service\+::initialize(const char $\ast$app\+Id, I\+Rtm\+Service\+Event\+Handler $\ast$event\+Handler, uint64\+\_\+t event\+Space).
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/10) }

Add field in struct Local\+Audio\+Track\+Stats

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

$\ast$\+Deleted\+:$\ast$$\ast$ delete struct Local\+Audio\+Track\+Stats, use Local\+Audio\+Stats instead
\begin{DoxyItemize}
\item struct Local\+Audio\+Track\+Stats
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/10) }

\doxysubsection*{N\+G\+I\+Agora\+Media\+Player\+Source.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change one parameter\textquotesingle{}s type of get\+Stream\+Count() and get\+Stream\+Info() from int to int64\+\_\+t to get aligned with the other A\+P\+Is.
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_mixer_source_8h_source}{N\+G\+I\+Agora\+Video\+Mixer\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Video Mixer related data structures and interfaces (P\+OC)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Mixed\+Video\+Track (P\+OC)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item create\+Video\+Mixer (P\+OC)
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/03) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Modified\+:}} Add {\bfseries{A\+P\+P\+LE}} macro judge.

\doxysection*{A\+PI (2020-\/04-\/03) }

Add intra request callback and network observer.

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add intra request callback.
\begin{DoxyItemize}
\item I\+Local\+User\+Observer\+::on\+Intra\+Request\+Received()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}} Add network observer and its register/unregister methods.
\begin{DoxyItemize}
\item class I\+Network\+Observer
\item I\+Rtc\+Connection\+::register\+Network\+Observer()
\item I\+Rtc\+Connection\+::unregister\+Network\+Observer()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}} Add destructor of I\+Camera\+Capture\+Observer
\begin{DoxyItemize}
\item I\+Camera\+Capture\+Observer\+::$\sim$\+I\+Camera\+Capture\+Observer()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Modified\+:}} Modify the implement of Beauty\+Options constructor
\begin{DoxyItemize}
\item Beauty\+Options\+::\+Beauty\+Options()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/04-\/2) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

$\ast$\+Add\+:$\ast$$\ast$ elapsed in on\+User\+Video\+Track\+State\+Changed on\+Video\+Track\+Publish\+Success

\doxysection*{A\+PI (2020-\/03-\/31) }

Move app\+Id from Agora\+Service\+Configuration\+Ex to Agora\+Service\+Configuration

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\itshape Add\+:$\ast$$\ast$ struct Agora\+Service\+Configuration \{ const char} app\+Id = nullptr; \}

\doxysection*{A\+PI (2020-\/03-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Modified\+:}} Refine the A\+PI order of I\+Device\+Info.

\doxysection*{A\+PI (2020-\/03-\/30) }

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}} Remove enabled parameter from I\+Agora\+Service\+::create\+Local\+Audio\+Track()

\doxysection*{A\+PI (2020-\/03-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modified the comment of on\+Lastmile\+Quality
\item Modified the comment of start\+Lastmile\+Probe\+Test
\end{DoxyItemize}

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deleted enable\+Lastmile\+Test()
\item Deleted disable\+Lastmile\+Test()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/16) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add is\+Enabled to I\+Local\+Audio\+Track to get the local audio track enabled status
\begin{DoxyItemize}
\item I\+Local\+Audio\+Track\+::is\+Enabled()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/16) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item enum R\+E\+C\+V\+\_\+\+T\+Y\+PE
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/12) }

Add \textquotesingle{}received\+\_\+bytes\textquotesingle{} for \textquotesingle{}Remote\+Audio\+Track\+Stats\textquotesingle{}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Remote\+Audio\+Track\+Stats\+::received\+\_\+bytes
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/03-\/06) }

Add \textquotesingle{}virtual\textquotesingle{} for $\sim$\+I\+Agora\+Service() and $\sim$\+I\+Agora\+Service\+Ex()

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add \textquotesingle{}virtual\textquotesingle{} for $\sim$\+I\+Agora\+Service()
\end{DoxyItemize}

\doxysubsection*{agora\+\_\+service\+\_\+i.\+h }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add \textquotesingle{}virtual\textquotesingle{} for $\sim$\+I\+Agora\+Service\+Ex()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/27) }

new cc type

\doxysubsection*{\mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add new cc type C\+O\+N\+G\+E\+S\+T\+I\+O\+N\+\_\+\+C\+O\+N\+T\+R\+O\+L\+L\+E\+R\+\_\+\+T\+Y\+P\+E\+\_\+\+A\+U\+T\+\_\+\+CC;
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/25) }

Changes for Audio\+Session\+Configuration

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Change \mbox{\hyperlink{classagora_1_1_optional}{Optional$<$int$>$}} io\+Buffer\+Duration; to \mbox{\hyperlink{classagora_1_1_optional}{Optional$<$double$>$}} io\+Buffer\+Duration;
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/23) }

A\+PI changes for supporting data channel

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}} Add data channel api to I\+Rtc\+Connection
\begin{DoxyItemize}
\item create\+Data\+Stream()
\item send\+Stream\+Message()
\end{DoxyItemize}

Add data channel callback api to I\+Rtc\+Connection\+Observer
\begin{DoxyItemize}
\item on\+Stream\+Message()
\item on\+Stream\+Message\+Error()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/21) }

Changes for audio video stats and state

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add two structs of audio track stats.
\begin{DoxyItemize}
\item add struct Remote\+Audio\+Track\+Stats
\item add struct Local\+Audio\+Track\+Stats
\end{DoxyItemize}

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Changes get\+Statistics(\+Remote\+Audio\+Stats\& stats) to get\+Statistics(\+Remote\+Audio\+Track\+Stats\& stats)
\item Changes R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+TE get\+State() to R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+TE get\+State()
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add callback functions of audio track statistics.
\begin{DoxyItemize}
\item on\+Local\+Audio\+Track\+Statistics()
\item on\+Remote\+Audio\+Track\+Statistics()
\end{DoxyItemize}

{\bfseries{Modified\+:}} Modify the type of field codec\+\_\+name
\begin{DoxyItemize}
\item Changes std\+::string codec\+\_\+name to char codec\+\_\+name\mbox{[}media\+::k\+Max\+Codec\+Name\+Length\mbox{]}
\item Changes on\+User\+Audio\+Track\+State\+Changed(user\+\_\+id\+\_\+t, agora\+\_\+refptr$<$rtc\+::\+I\+Remote\+Audio\+Track$>$, R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+S\+T\+A\+T\+E, R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+R\+E\+A\+M\+\_\+\+R\+E\+A\+S\+O\+N) to on\+User\+Audio\+Track\+State\+Changed(user\+\_\+id\+\_\+t, R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+T\+E, R\+E\+M\+O\+T\+E\+\_\+\+A\+U\+D\+I\+O\+\_\+\+S\+T\+A\+T\+E\+\_\+\+R\+E\+A\+S\+O\+N, int) = 0;
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item Deleted on\+Microphone\+Enabled()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/20) }

Support lastmile probe test

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Add\+:}} Add callback for getting lastmile probe test results and two functions to control lastmile probe test
\begin{DoxyItemize}
\item void on\+Lastmile\+Probe\+Result(const Lastmile\+Probe\+Result\& result)
\item int start\+Lastmile\+Probe\+Test(const Lastmile\+Probe\+Config\& config)
\item int stop\+Lastmile\+Probe\+Test()
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/10) }

A\+PI changes for create video track parameter

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Modified\+:}}


\begin{DoxyItemize}
\item create\+Camera\+Video\+Track(), create\+Screen\+Video\+Track(), create\+Custom\+Video\+Track() remove {\ttfamily bool enable}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/15) }

A\+PI changes for unifying the definition of connection state in \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Deleted\+:}} Delete the definition of T\+Connection\+State.
\begin{DoxyItemize}
\item Deleted enum T\+Connection\+State
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/06) }

A\+PI changes for media packet and media control packet sender and receiver

\doxysubsection*{\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} }

{\bfseries{Add\+:}}

Add two functions to create media tracks with I\+Media\+Packet\+Sender, which is created from media node factory.
\begin{DoxyItemize}
\item agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Audio\+Track$>$ create\+Custom\+Audio\+Track(agora\+\_\+refptr$<$rtc\+::\+I\+Media\+Packet\+Sender$>$ source)
\item agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Video\+Track$>$ create\+Custom\+Video\+Track(agora\+\_\+refptr$<$rtc\+::\+I\+Media\+Packet\+Sender$>$ source)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}} }

{\bfseries{Add\+:}} Add two functions to register and unregister media packet receiver.


\begin{DoxyItemize}
\item int register\+Media\+Packet\+Receiver(\+I\+Media\+Packet\+Receiver$\ast$ packet\+Receiver)
\item int unregister\+Media\+Packet\+Receiver(\+I\+Media\+Packet\+Receiver$\ast$ packet\+Receiver)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add function to get I\+Media\+Control\+Packet\+Sender. Add two functions to register and unregister media control packet receiver.


\begin{DoxyItemize}
\item I\+Media\+Control\+Packet\+Sender$\ast$ get\+Media\+Control\+Packet\+Sender()
\item int register\+Media\+Control\+Packet\+Receiver(\+I\+Media\+Control\+Packet\+Receiver$\ast$ ctrl\+Packet\+Receiver)
\item int unregister\+Media\+Control\+Packet\+Receiver(\+I\+Media\+Control\+Packet\+Receiver$\ast$ ctrl\+Packet\+Receiver)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Add\+:}} Add two functions to register and unregister media packet receiver.


\begin{DoxyItemize}
\item int register\+Media\+Packet\+Receiver(\+I\+Media\+Packet\+Receiver$\ast$ packet\+Receiver)
\item int unregister\+Media\+Packet\+Receiver(\+I\+Media\+Packet\+Receiver$\ast$ packet\+Receiver)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}} }

{\bfseries{Add\+:}} Add function to create media packet sender as well as related definitions


\begin{DoxyItemize}
\item agora\+\_\+refptr$<$\+I\+Media\+Packet\+Sender$>$ create\+Media\+Packet\+Sender()
\item I\+Media\+Packet\+Sender
\item I\+Media\+Control\+Packet\+Sender
\item I\+Media\+Packet\+Receiver
\item I\+Media\+Control\+Packet\+Receiver
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/21) }

A\+PI changes for getting audio filter.

\doxysubsection*{Audio Filter (\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{api2/\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item const char $\ast$ get\+Name() const
\end{DoxyItemize}

\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item agora\+\_\+refptr$<$\+I\+Audio\+Filter$>$ get\+Audio\+Filter(const char $\ast$name) const
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/02-\/10) }

\doxysubsection*{Deleted\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item class I\+Agora\+Service -\/A\+PI create\+Signaling\+Engine()
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/20) }

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\begin{DoxyItemize}
\item class I\+Local\+User
\begin{DoxyItemize}
\item A\+PI adjust\+Playback\+Signal\+Volume()
\item A\+PI get\+Playback\+Signal\+Volume()
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/19) }

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}}
\begin{DoxyItemize}
\item struct Rtc\+Connection\+Configuration add C\+H\+A\+N\+N\+E\+L\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+T\+Y\+PE channel\+Profile
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/17) }

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item create\+Camera\+Video\+Track(), create\+Screen\+Video\+Track(), create\+Custom\+Video\+Track() and create\+Custom\+Video\+Track() change argument to {\ttfamily bool enable = false}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/15) }

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_screen_capturer_8h_source}{N\+G\+I\+Agora\+Screen\+Capturer.\+h}}
\begin{DoxyItemize}
\item class I\+Screen\+Capturer
\begin{DoxyItemize}
\item A\+PI init\+With\+Media\+Projection\+Permission\+Result\+Data()
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/13) }

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item N\+G\+I\+Agora\+Media\+Player\+Source.\+h
\begin{DoxyItemize}
\item Rename on\+Player\+State\+Changed() of I\+Media\+Player\+Source\+Observer to on\+Player\+Source\+State\+Changed
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/09) }

\doxysubsection*{Deleted\+: }


\begin{DoxyItemize}
\item N\+G\+I\+Agora\+Media\+Player\+Source.\+h
\begin{DoxyItemize}
\item class I\+Media\+Player\+Source
\begin{DoxyItemize}
\item A\+PI register\+Video\+Frame\+Observer()
\item A\+PI unregister\+Video\+Frame\+Observer()
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2020-\/01-\/08) }

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item N\+G\+I\+Agora\+Media\+Player\+Source.\+h
\begin{DoxyItemize}
\item Add the following class
\begin{DoxyItemize}
\item class I\+Media\+Player\+Source
\item class I\+Media\+Player\+Source\+Observer
\end{DoxyItemize}
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}
\begin{DoxyItemize}
\item class I\+Media\+Node\+Factory
\begin{DoxyItemize}
\item Add A\+PI create\+Media\+Player\+Source()
\end{DoxyItemize}
\end{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item class I\+Agora\+Service
\begin{DoxyItemize}
\item Add A\+PI create\+Media\+Player\+Video\+Track()
\item Add A\+PI create\+Media\+Player\+Audio\+Track()
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysubsection*{Deleted\+: }


\begin{DoxyItemize}
\item N\+G\+I\+Agora\+Media\+Player.\+h
\begin{DoxyItemize}
\item Delete class I\+Media\+Player
\item Delete class I\+Media\+Player\+Observer
\end{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item class I\+Agora\+Service
\begin{DoxyItemize}
\item Delete A\+PI create\+Media\+Player()
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/12-\/24) }

Macro cleanup

I\+Agora\+Service (\mbox{\hyperlink{_i_agora_service_8h_source}{api2/\+I\+Agora\+Service.\+h}})
\begin{DoxyItemize}
\item remove F\+E\+A\+T\+U\+R\+E\+\_\+\+R\+T\+M\+P\+\_\+\+S\+T\+R\+E\+A\+M\+I\+N\+G\+\_\+\+S\+E\+R\+V\+I\+CE and F\+E\+A\+T\+U\+R\+E\+\_\+\+R\+T\+M\+\_\+\+S\+E\+R\+V\+I\+CE
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/12-\/22) }

A\+PI changes

\doxysubsection*{Add\+: }

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}
\begin{DoxyItemize}
\item rename Remote\+Video\+Track\+Info to Video\+Track\+Info
\item relevant changes in other interfaces
\end{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_rtc_engine_8h_source}{I\+Agora\+Rtc\+Engine.\+h}}
\begin{DoxyItemize}
\item struct Video\+Canvas add field is\+Screen\+View
\end{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item create\+Camera\+Video\+Track(), create\+Screen\+Video\+Track(), create\+Custom\+Video\+Track() and create\+Custom\+Video\+Track() add argument {\ttfamily bool enable = true}
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\begin{DoxyItemize}
\item rename Remote\+Video\+Track\+Info to Video\+Track\+Info
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}
\begin{DoxyItemize}
\item rename Remote\+Video\+Track\+Info to Video\+Track\+Info
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}}
\begin{DoxyItemize}
\item rename Remote\+Video\+Track\+Info to Video\+Track\+Info
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/12-\/03) }

A\+PI changes for graceful exiting

I\+Agora\+Service (\mbox{\hyperlink{_i_agora_service_8h_source}{api2/\+I\+Agora\+Service.\+h}})
\begin{DoxyItemize}
\item add release()
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/12-\/10) }

\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item int enable\+Ear\+Monitor(bool enable, bool include\+Audio\+Filter)
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/12-\/04) }

A\+PI changes for supporting create R\+T\+MP streaming serivce.

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_rtmp_streaming_service_8h_source}{I\+Agora\+Rtmp\+Streaming\+Service.\+h}}
\item \mbox{\hyperlink{_i_agora_rtm_service_8h_source}{I\+Agora\+Rtm\+Service.\+h}}
\end{DoxyItemize}

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}}
\begin{DoxyItemize}
\item Add method {\ttfamily agora\+\_\+refptr$<$rtc\+::\+I\+Rtmp\+Streaming\+Service$>$ create\+Rtmp\+Streaming\+Service}
\item Add method {\ttfamily rtm\+::\+I\+Rtm\+Service$\ast$ create\+Rtm\+Service()}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/29) }

A\+PI changes for supporting audio filter.

\doxysubsection*{Audio Filter (\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{api2/\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}) }

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

New interface and enum definition\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{class IAudioFilterBase : public RefCountInterface \{}
\DoxyCodeLine{public:}
\DoxyCodeLine{ // Return false if filter decide to drop the frame.}
\DoxyCodeLine{ virtual bool adaptAudioFrame(const AudioPcmFrame\& inAudioFrame,}
\DoxyCodeLine{                              AudioPcmFrame\& adaptedFrame) = 0;}
\DoxyCodeLine{\};}
\DoxyCodeLine{}
\DoxyCodeLine{class IAudioFilter : public IAudioFilterBase \{}
\DoxyCodeLine{ public:}
\DoxyCodeLine{  virtual void setEnabled(bool enable) = 0;}
\DoxyCodeLine{  virtual bool isEnabled() = 0;}
\DoxyCodeLine{\};}
\DoxyCodeLine{}
\DoxyCodeLine{enum AUDIO\_FILTER\_TYPE \{}
\DoxyCodeLine{  AUDIO\_FILTER\_EFFECT,}
\DoxyCodeLine{  AUDIO\_FILTER\_ANS,}
\DoxyCodeLine{  AUDIO\_FILTER\_VOICE\_CHANGE}
\DoxyCodeLine{\};}
\end{DoxyCode}


\doxysubsection*{Media Node Factory (\mbox{\hyperlink{_n_g_i_agora_media_node_factory_8h_source}{api2/\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item agora\+\_\+refptr$<$\+I\+Audio\+Filter$>$ create\+Audio\+Filter(\+A\+U\+D\+I\+O\+\_\+\+F\+I\+L\+T\+E\+R\+\_\+\+T\+Y\+P\+E type)
\end{DoxyItemize}

\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Add\+:}}

Internal enum\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{enum AudioFilterPosition \{}
\DoxyCodeLine{  Default}
\DoxyCodeLine{\};}
\end{DoxyCode}


Main methods\+:


\begin{DoxyItemize}
\item bool add\+Audio\+Filter(agora\+\_\+refptr$<$\+I\+Audio\+Filter$>$ filter, Audio\+Filter\+Position position)
\item bool remove\+Audio\+Filter(agora\+\_\+refptr$<$\+I\+Audio\+Filter$>$ filter, Audio\+Filter\+Position position)
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/28) }

A\+PI cleanup

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item N\+G\+I\+Agora\+Media\+Node\+Factory
\begin{DoxyItemize}
\item modify class I\+Video\+Frame\+Sender, use agora External\+Video\+Frame instead of webrtc Video\+Frame
\item modify class I\+Video\+Filter\+Base
\begin{DoxyItemize}
\item use agora Video\+Frame instead of webrtc Video\+Frame
\item remove on\+Sink\+Wants\+Changed
\end{DoxyItemize}
\item modify class I\+Video\+Sink\+Base
\begin{DoxyItemize}
\item Add a interface to distinguish external or internal video sink
\end{DoxyItemize}
\item move class I\+Video\+Frame\+Adapter to internal interface
\item move create\+Video\+Frame\+Adapter() to internal interface
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}}
\begin{DoxyItemize}
\item I\+Audio\+Track
\begin{DoxyItemize}
\item virtual int adjust\+Playout\+Volume(int volume) = 0;
\item virtual int get\+Playout\+Volume(int$\ast$ volume) = 0;
\end{DoxyItemize}
\item I\+Local\+Audio\+Track
\begin{DoxyItemize}
\item virtual int adjust\+Publish\+Volume(int volume) = 0;
\item virtual int get\+Publish\+Volume(int$\ast$ volume) = 0;
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/14) }

Refine Media Statistics and event report

\doxysubsection*{Add\+: }

\doxysubsection*{Modified\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{N\+G\+I\+Agora\+Audio\+Track.\+h}}
\begin{DoxyItemize}
\item Add struct Local\+Audio\+Track\+Stats
\item Add method Get\+Stats()
\end{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\begin{DoxyItemize}
\item rename Local\+Audio\+Stats to Local\+Audio\+Detailed\+Stats, since Local\+Audio\+Stats belong to high level A\+PI
\end{DoxyItemize}
\end{DoxyItemize}

\doxysubsection*{Deleted\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}
\begin{DoxyItemize}
\item remove A\+U\+D\+I\+O\+\_\+\+C\+O\+D\+E\+C\+\_\+\+A\+AC in A\+U\+D\+I\+O\+\_\+\+C\+O\+D\+E\+C\+\_\+\+T\+Y\+PE
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/25) }

A\+PI changes for extension


\begin{DoxyItemize}
\item move {\ttfamily interface/cpp/api2/\+I\+Agora\+Parameter.\+h} to {\ttfamily interface/cpp/\+I\+Agora\+Parameter.\+h}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/21) }

A\+PI changes for extension


\begin{DoxyItemize}
\item move {\ttfamily interface/cpp/\+Agora\+Parameter.\+h} to {\ttfamily interface/cpp/api2/\+I\+Agora\+Parameter.\+h}
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/19) }

A\+PI changes.

\doxysubsection*{Audio Frame Observer (\mbox{\hyperlink{_i_agora_media_engine_8h_source}{I\+Agora\+Media\+Engine.\+h}}) }

{\bfseries{Modified\+:}}

Main field(s)

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endhead
{\ttfamily I\+Audio\+Frame\+Observer\+::\+Audio\+Frame\+::samples} &{\ttfamily I\+Audio\+Frame\+Observer\+::\+Audio\+Frame\+::samples\+Per\+Channel}  \\\cline{1-2}
\end{longtabu}


\doxysection*{A\+PI (2019-\/11-\/12) }

A\+PI changes for extension

\doxysubsection*{Agora Extension (interface/cpp/api2/\+N\+G\+I\+Agora\+Extension.\+h) }


\begin{DoxyItemize}
\item struct {\ttfamily agora\+\_\+extension}
\item struct {\ttfamily agora\+\_\+core}
\end{DoxyItemize}

\doxysection*{A\+PI (2021-\/06-\/03) }

\doxysubsection*{I\+Audio\+Device\+Manager\+Observer (\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}}) }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item void on\+Volume\+Indication(int volume)
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/11) }

A\+PI changes for supporting audio local playback.

\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item void enable\+Local\+Playback(bool enable)
\item int adjust\+Playout\+Volume(int volume)
\item int adjust\+Publish\+Volume(int volume)
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/08) }

A\+PI changes for default client role is audience.

\doxysubsection*{Rtc Engine (interface/cpp/\+I\+Agora\+Rtc\+Engine.\+h) }


\begin{DoxyItemize}
\item struct {\ttfamily Channel\+Media\+Options} add field {\ttfamily client\+Role\+Type}.
\end{DoxyItemize}

\doxysubsection*{Rtc Connection (\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{interface/cpp/api2/\+N\+G\+I\+Agora\+Rtc\+Connection.\+h}}) }


\begin{DoxyItemize}
\item struct {\ttfamily Rtc\+Connection\+Configuration} add field {\ttfamily client\+Role\+Type}.
\end{DoxyItemize}

\doxysubsection*{Local User (\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{api2/\+N\+G\+I\+Agora\+Local\+User.\+h}}) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item C\+L\+I\+E\+N\+T\+\_\+\+R\+O\+L\+E\+\_\+\+T\+Y\+PE get\+User\+Role();
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/11-\/05) }

A\+PI changes for supporting register/unregister encoded image receiver.

{\bfseries{Deleted\+:}}

move I\+Video\+Encoded\+Image\+Receiver to \mbox{\hyperlink{_agora_base_8h_source}{Agora\+Base.\+h}}

\doxysection*{A\+PI (2019-\/11-\/04) }

\doxysubsection*{Media Player (api2/\+N\+G\+I\+Agora\+Media\+Player.\+h) }

{\bfseries{Add\+:}}

Main methods\+:


\begin{DoxyItemize}
\item int set\+Looping(bool looping)
\end{DoxyItemize}

{\bfseries{Deleted\+:}}

Main methods\+:


\begin{DoxyItemize}
\item int close()
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/10-\/30) }

A\+PI changes for supporting audio simple audio player.

\doxysubsection*{Media Player (api2/\+N\+G\+I\+Agora\+Media\+Player.\+h) }

This interface provide access to a media player.

Main methods are\+:


\begin{DoxyItemize}
\item int open(const char$\ast$ url)
\item int play()
\item int play\+From\+Position(int position)
\item int stop()
\item int pause()
\item int resume()
\item int get\+Duration(int\& duration)
\item int get\+Current\+Position(int\& current\+Position)
\item int set\+Current\+Position(int new\+Pos)
\item int close()
\item int register\+Player\+Observer(\+I\+Media\+Player\+Observer$\ast$ observer)
\item int unregister\+Player\+Observer(\+I\+Media\+Player\+Observer$\ast$ observer)
\item agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Audio\+Track$>$ get\+Player\+Audio\+Track()
\item agora\+\_\+refptr$<$rtc\+::\+I\+Local\+Video\+Track$>$ get\+Player\+Video\+Track()
\end{DoxyItemize}

The denifinion of I\+Media\+Player\+Observer\+: 
\begin{DoxyCode}{0}
\DoxyCodeLine{class IMediaPlayerObserver \{}
\DoxyCodeLine{public:}
\DoxyCodeLine{  virtual \string~IMediaPlayerObserver() = default;}
\DoxyCodeLine{  virtual void onPlayerStateChanged(const IMediaPlayer::PlayerState\& state) = 0;}
\DoxyCodeLine{  virtual void onPositionChanged(const int position\_ms) = 0;}
\DoxyCodeLine{\};}
\end{DoxyCode}


\doxysection*{A\+PI (2019-\/10-\/17) }

A\+PI changes for supporting audio tx mixer.

\doxysubsection*{Local User (\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{api2/\+N\+G\+I\+Agora\+Local\+User.\+h}}) }

{\bfseries{Add\+:}}

Internal struct


\begin{DoxyItemize}
\item struct A\+N\+A\+Stats;
\item struct Audio\+Processing\+Stats;
\item struct Local\+Audio\+Stats;
\end{DoxyItemize}

Main methods\+:


\begin{DoxyItemize}
\item int set\+Audio\+Encoder\+Configuration(const rtc\+::\+Audio\+Encoder\+Configuration\& config)
\item bool get\+Local\+Audio\+Statistics(\+Local\+Audio\+Stats\& stats)
\end{DoxyItemize}

{\bfseries{Modified\+:}}

Main methods

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endhead
{\ttfamily int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t bytes\+Per\+Sample, size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)} &{\ttfamily int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)}  \\\cline{1-2}
{\ttfamily int set\+Recording\+Audio\+Frame\+Parameters(size\+\_\+t bytes\+Per\+Sample, size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)} &{\ttfamily int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)}  \\\cline{1-2}
{\ttfamily int set\+Mixed\+Audio\+Frame\+Parameters(size\+\_\+t bytes\+Per\+Sample, size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)} &{\ttfamily int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)}  \\\cline{1-2}
{\ttfamily int set\+Playback\+Audio\+Frame\+Before\+Mixing\+Parameters(size\+\_\+t bytes\+Per\+Sample, size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)} &{\ttfamily int set\+Playback\+Audio\+Frame\+Parameters(size\+\_\+t number\+Of\+Channels, uint32\+\_\+t sample\+Rate\+Hz)}  \\\cline{1-2}
\end{longtabu}


\doxysubsection*{agora\+\_\+refptr (\mbox{\hyperlink{_agora_ref_ptr_8h_source}{Agora\+Ref\+Ptr.\+h}}) }

{\bfseries{Add\+:}}

Main methods


\begin{DoxyItemize}
\item bool operator==(const agora\+\_\+refptr$<$\+T$>$\& r)
\item bool operator$<$(const agora\+\_\+refptr$<$\+T$>$\& r) const
\end{DoxyItemize}

\doxysubsection*{Audio P\+CM Data (api2/internal/audio\+\_\+node\+\_\+i.\+h) }

{\bfseries{Modified\+:}}

Main field(s)

\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{2}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Old }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ New  }\\\cline{1-2}
\endhead
number\+\_\+of\+\_\+samples &samples\+\_\+per\+\_\+channel  \\\cline{1-2}
\end{longtabu}


\doxysubsection*{Local Audio Track (\mbox{\hyperlink{_n_g_i_agora_audio_track_8h_source}{api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h}}) }

{\bfseries{Deleted\+:}}

Internal struct


\begin{DoxyItemize}
\item struct A\+N\+A\+Stats;
\item struct Audio\+Processing\+Stats;
\item struct Local\+Audio\+Stats;
\end{DoxyItemize}

Main methods\+:


\begin{DoxyItemize}
\item int set\+Audio\+Encoder\+Configuration(const rtc\+::\+Audio\+Encoder\+Configuration\& config)
\item bool get\+Statistics(\+Local\+Audio\+Stats\& stats)
\end{DoxyItemize}

\doxysection*{A\+PI (2019-\/10-\/13 recorded frome release/2.\+6.\+0) }

The full details of A\+PI descritpion can be seen in \href{https://confluence.agoralab.co/display/MS/API+Introduction}{\texttt{ https\+://confluence.\+agoralab.\+co/display/\+M\+S/\+A\+P\+I+\+Introduction}}

\doxysection*{Agora Low Level A\+P\+Is }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modify\+:}} moidfy enable\+Audio\+Volume\+Indication support vad

\doxysection*{A\+PI (2021-\/09-\/01) }

\doxysubsection*{Agora Service }

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

The I\+Agora\+Service is the entry point of Agora Low Level A\+P\+Is. This interface is used by applications to create access points to Agora Modules to enable real-\/time communication, including R\+TC Connection, Media Tracks, Audio Device Manager and etc. In addition, in order to customize different user scenarios, the interface allows application to configure service and media sessions on the global level, i.\+e., Agora\+Service\+Configuration or Audio\+Session\+Configuration.

Main methods are\+:


\begin{DoxyItemize}
\item initialize(app\+Id, service\+Configuration)
\item create\+Rtc\+Connection()
\item create\+Local\+Audio\+Track()
\item create\+Audio\+Device\+Manager()
\item create\+Media\+Node\+Factory()
\item create\+Local\+Video\+Track()
\item set\+Audio\+Session\+Configuration()
\item get\+Audio\+Session\+Configuration()
\item set\+Log\+File()
\item set\+Log\+Filter()
\item release()
\end{DoxyItemize}

\doxysubsection*{R\+TC Connection }

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

Connecting to a Agora Channel is done asynchronous, application can listen connection state by provided R\+TC Connection Observer. With connected to a channel, application can use \href{\#\#Local User}{\texttt{ Local User}} to publish and subscribe media stream/data from Agora Channel.

R\+TC connection also monitors remote users in the channel. Once a remote user joined or left a channel application will be notified.

Main methods are\+:


\begin{DoxyItemize}
\item connect()
\item disconnect()
\item get\+Local\+User()
\item get\+Connection\+Info()
\item get\+Remote\+Users()
\item get\+User\+Info()
\item release()
\item I\+Connection\+Observer\+::on\+Connected()
\item I\+Connection\+Observer\+::on\+Disconnected()
\item I\+Connection\+Observer\+::on\+Connecting()
\item I\+Connection\+Observer\+::on\+Connection\+Failure()
\item I\+Connection\+Observer\+::on\+User\+Joined()
\item I\+Connection\+Observer\+::on\+Userleft()
\end{DoxyItemize}

\doxysubsection*{Local User (get from Rtc\+Connection) }

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

The Local User has two clients roles, broadcaster(Publisher with or w/o Subscriber) and audience(\+Subscriber only). The Publisher publish local Audio and Video tracks to a channel, like a host in L\+I\+VE B\+R\+O\+A\+D\+C\+A\+ST profile or a participant in C\+O\+M\+M\+U\+N\+I\+C\+A\+T\+I\+ON profile. The Subscriber subscribes and receives remote Audio and Video tracks from different users in the channel.

Main methods are\+:


\begin{DoxyItemize}
\item publish\+Audio()
\item unpublish\+Audio()
\item publish\+Video()
\item unpublish\+Video()
\item subscribe\+Audio()
\item subscribe\+All\+Audio()
\item unsubscribe\+Audio()
\item unsubscribe\+All\+Audio()
\item subscribe\+Video()
\item subscribe\+All\+Video()
\item unsubscribe\+Video()
\item unsubscribe\+All\+Video()
\item register\+Local\+User\+Observer()
\item unregister\+Local\+User\+Observer()
\item release()
\item I\+Loca\+Userl\+Observer\+::on\+Audio\+Track\+Publish\+Success()
\item I\+Loca\+Userl\+Observer\+::on\+Audio\+Track\+Publication\+Failure()
\item I\+Loca\+Userl\+Observer\+::on\+Video\+Track\+Publish\+Success()
\item I\+Loca\+Userl\+Observer\+::on\+Video\+Track\+Publication\+Failure()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Audio\+Track\+Subscribed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Audio\+Track\+Unsubscribed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Audio\+Track\+State\+Changed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Audio\+Track\+Statistics()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Audio\+Track\+Subscription\+Failure()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Video\+Track\+Subscribed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Video\+Track\+Unsubscribed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Video\+Track\+State\+Changed()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Video\+Track\+Statistics()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Video\+Track\+Subscription\+Failure()
\item I\+Loca\+Userl\+Observer\+::on\+User\+Network\+Quality()
\item I\+Loca\+Userl\+Observer\+::on\+Audio\+Volume\+Indication()
\end{DoxyItemize}

\doxysubsection*{Local Audio Track }

A presentation of a P\+CM stream. A Local Audio Track can be created directly by I\+Agora\+Service\+::create\+Local\+Track(), which originates from default audio recording device, i.\+e., built-\/in microphone. Application can also change default audio recording devices by I\+Audio\+Device\+Manager A\+P\+Is if multiple recording devices available in system. Local Audio Track can also be created from I\+Media\+Player().

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

Main methods are\+:
\begin{DoxyItemize}
\item set\+Enabled()
\item is\+Enabled()
\item adjust\+Signaling\+Volume()
\item get\+Signaling\+Volume()
\item release()
\end{DoxyItemize}

\doxysubsection*{Remote Audio Track }

A presentation of a remote audio track.

Main methods are\+:
\begin{DoxyItemize}
\item set\+Playback\+Enabled()
\item is\+Playback\+Enabled()
\item get\+State()
\end{DoxyItemize}

\doxysubsection*{Audio Device Manager }

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

Main methods are\+:


\begin{DoxyItemize}
\item set\+Microphone\+Volume()
\item get\+Microphone\+Volume()
\item set\+Speaker\+Volume()
\item get\+Speaker\+Volume()
\item set\+Microphone\+Mute()
\item get\+Microphone\+Mute()
\item set\+Speaker\+Mute()
\item get\+Speaker\+Mute()
\item get\+Number\+Of\+Playout\+Devices()
\item get\+Number\+Of\+Recording\+Devices()
\item get\+Playout\+Device\+Info()
\item get\+Recording\+Device\+Info()
\item set\+Playout\+Device()
\item set\+Recording\+Device()
\item start\+Microphone\+Test()
\item stop\+Microphone\+Test()
\item register\+Observer()
\item unregister\+Observer()
\item on\+Volume\+Indication()
\item on\+Device\+State\+Changed()
\item on\+Routing\+Changed()
\end{DoxyItemize}

\doxysubsection*{Video Node Factory }

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

Main methods are\+:


\begin{DoxyItemize}
\item create\+Camera\+Capturer()
\item create\+Screen\+Capturer()
\item create\+Custom\+Video\+Source()
\item create\+Video\+Filter()
\item create\+Video\+Renderer()
\end{DoxyItemize}

\doxysubsection*{Video Camera Capturer }

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

Main methods are\+:


\begin{DoxyItemize}
\item set\+Camera\+Source()
\item switch\+Camera()
\item start\+Capture()
\item stop\+Capture()
\item get\+Capture\+Format()
\item get\+Capture\+State()
\item register\+Video\+Frame\+Observer()
\item unregister\+Video\+Frame\+Observer()
\item register\+Camera\+Capture\+Observer()
\item unregister\+Camera\+Capture\+Observer()
\end{DoxyItemize}

\doxysubsection*{Video Screen Capturer }

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

Main methods are\+:


\begin{DoxyItemize}
\item release()
\end{DoxyItemize}

\doxysubsection*{Custom Video Source }

This interface allows application to push external video frame to the Agora S\+DK.

Main method is\+:


\begin{DoxyItemize}
\item push\+Video\+Frame()
\end{DoxyItemize}

\doxysubsection*{Video Filter \& Video Filter Base }

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

Agora provides several built-\/in video filters, e.\+g., video beauty filter, which can be created by I\+Media\+Node\+Factory\+::create\+Video\+Filter().

Application can also write its own video filter to modify video frame by implementing I\+Video\+Filter\+Base\+::adapt\+Video\+Frame() and add the video filter in the track by I\+Video\+Track\+::add\+Video\+Filter().

Main methods are\+:


\begin{DoxyItemize}
\item set\+Filter\+Parameters()
\item set\+Enabled()
\item is\+Enabled()
\item register\+Video\+Frame\+Observer()
\item unregister\+Video\+Frame\+Observer()
\end{DoxyItemize}

\doxysubsection*{Video Renderer \& Video Sink Base }

The Video Renderer inherits Video Sink Base, which is used to render video frame. Agora provides built-\/in video renderer by I\+Media\+Node\+Factory\+::create\+Video\+Renderer() and application can add it in the video track by I\+Video\+Track\+::add\+Video\+Renderer() The Video Sink Base is video frame observer, which can reads video frame from built-\/in video sources, video filters and video track.

Main methods are\+:


\begin{DoxyItemize}
\item set\+Render\+Mode()
\item set\+Mirror()
\end{DoxyItemize}

\doxysubsection*{Local Video Track }

A presentation of local video track that originates from one video source, e.\+g., camera capturer, screen capturer or a custom video source. Local Video Track can be created by I\+Agora\+Service\+::create\+Video\+Track()

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

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

Main methods are\+:


\begin{DoxyItemize}
\item set\+Enabled()
\item is\+Enabled()
\item add\+Video\+Filter()
\item remove\+Video\+Filter()
\item add\+Video\+Renderer()
\item remove\+Video\+Renderer()
\item release()
\end{DoxyItemize}

\doxysubsection*{Remote Video Track }

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

Main methods are\+:


\begin{DoxyItemize}
\item is\+Enabled()
\item add\+Video\+Filter()
\item remove\+Video\+Filter()
\item add\+Video\+Renderer()
\item remove\+Video\+Renderer()
\item release()
\end{DoxyItemize}

\doxysection*{Terminologies \& Basics }

\doxysubsection*{A\+PP ID }

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

\doxysubsection*{Dynamical Keys }

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

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

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

Please also review \href{https://docs.agora.io/en/2.0.2/product/Interactive\%20Broadcast/Product\%20Overview/key?platform=All\%20Platforms}{\texttt{ Agora\textquotesingle{}s Security Keys}} for more technical details.

\doxysubsection*{Agora Channel }

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

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

\doxysubsection*{User \& User Information }

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

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

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

\doxysection*{A\+PI (2022-\/03-\/16) }

A\+PI changes for Screen Capture


\begin{DoxyItemize}
\item enable init\+With\+Display\+Id for Windows \doxysection*{A\+PI (2022-\/03-\/02) }
\end{DoxyItemize}

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\begin{DoxyItemize}
\item class I\+Local\+User\+Observer
\begin{DoxyItemize}
\item A\+PI on\+Remote\+Subscribe\+Fallback\+To\+Audio\+Only(user\+\_\+id\+\_\+t user\+Id, bool is\+Fallback\+Or\+Recover)
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/05-\/09) }

\doxysubsection*{Add\+: }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\begin{DoxyItemize}
\item class I\+Local\+User virtual int register\+Local\+Video\+Encoded\+Frame\+Observer(agora\+::media\+::\+I\+Video\+Encoded\+Frame\+Observer$\ast$ observer) virtual int unregister\+Local\+Video\+Encoded\+Frame\+Observer(agora\+::media\+::\+I\+Video\+Encoded\+Frame\+Observer$\ast$ observer) virtual int force\+Next\+Intra\+Frame()
\end{DoxyItemize}
\end{DoxyItemize}

\doxysection*{A\+PI (2022-\/06-\/09) }

\doxysubsection*{$\ast$$\ast$\+Modified\+:$\ast$$\ast$ }


\begin{DoxyItemize}
\item \mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}}
\item \mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} modify comments
\end{DoxyItemize}

\mbox{\hyperlink{_i_agora_rtmp_streaming_service_8h_source}{I\+Agora\+Rtmp\+Streaming\+Service.\+h}} \doxysubsection*{remove deprecated A\+PI and callback of C\+DN stream }

{\bfseries{Deleted\+:}}

add\+Publish\+Stream\+Url remove\+Publish\+Stream\+Url set\+Live\+Transcoding on\+Stream\+Unpublished on\+Stream\+Published

\doxysection*{A\+PI (2022-\/09-\/13) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}} Add interface for I\+Local\+User
\begin{DoxyItemize}
\item virtual int set\+High\+Priority\+User\+List(uid\+\_\+t$\ast$ vip\+List, int uid\+Num, int option)
\item virtual int get\+High\+Priority\+User\+List(std\+::vector$<$uid\+\_\+t$>$\& vip\+List, int\& option)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/01-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item struct Screen\+Capture\+Profiling\+Statistics
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/01-\/12) }

\mbox{\hyperlink{_n_g_i_agora_extension_a_i_noise_suppressor_8h_source}{N\+G\+I\+Agora\+Extension\+A\+I\+Noise\+Suppressor.\+h}} {\bfseries{Modified\+:}} change Get\+Lib\+Version() return value type from std\+::string to const char$\ast$

\doxysection*{A\+PI (2023-\/01-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item struct Screen\+Capture\+Profiling\+Statistics
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/02) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Add int e2e\+Delay for Remote\+Video\+Track\+Stats struct
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/12) }

\mbox{\hyperlink{_n_g_i_agora_video_frame_8h_source}{N\+G\+I\+Agora\+Video\+Frame.\+h}} {\bfseries{Modified\+:}} modify comments

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item B\+U\+I\+L\+T\+\_\+\+I\+N\+\_\+\+S\+O\+U\+R\+C\+E\+\_\+\+T\+EE
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/03-\/31) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_rtc_connection_8h_source}{N\+G\+I\+Agora\+Rtc\+Connection.\+h}} }

{\bfseries{Deleted\+:}} get\+Ntp\+Time

\doxysection*{A\+PI (2023-\/04-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_video_track_8h_source}{N\+G\+I\+Agora\+Video\+Track.\+h}} }

{\bfseries{A\+DD\+:}} encoder\+\_\+vender\+\_\+id

\doxysection*{A\+PI (2023-\/04-\/25) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} }

{\bfseries{A\+DD\+:}} set\+Audio\+Routing\+Speaker\+On

\doxysection*{A\+PI (2023-\/05-\/08) }

\mbox{\hyperlink{_n_g_i_agora_extension_a_i_noise_suppressor_8h_source}{N\+G\+I\+Agora\+Extension\+A\+I\+Noise\+Suppressor.\+h}} {\bfseries{Modified\+:}} change Get\+Lib\+Version() input value from void to int

\doxysection*{A\+PI (2023-\/06-\/04) }

\mbox{\hyperlink{_n_g_i_agora_audio_device_manager_8h_source}{N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h}} {\bfseries{A\+DD\+:}} setup\+Audio\+Attribute\+Context()

\doxysection*{A\+PI (2023-\/06-\/04) }

\mbox{\hyperlink{_i_agora_service_8h_source}{I\+Agora\+Service.\+h}} {\bfseries{A\+DD\+:}} create\+Local\+Mixed\+Audio\+Track()

\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} {\bfseries{A\+DD\+:}} Enable\+Local\+Mixed\+Audio\+Track()

\mbox{\hyperlink{_n_g_i_agora_audio_mixer_source_8h_source}{N\+G\+I\+Agora\+Audio\+Mixer\+Source.\+h}} {\bfseries{A\+DD\+:}} add\+Audio\+Track() remove\+Audio\+Track() \doxysection*{A\+PI (2023-\/05-\/18) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item Add bool is\+Camera\+Exposure\+Supported()
\item Add int set\+Camera\+Exposure\+Factor(float factor)
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/07-\/05) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item struct Screen\+Capture\+Profiling\+Statistics
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/08-\/07) }

\char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+I\+Agora\+Rtm\+Service.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+I\+Agora\+File\+Uploader.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+I\+Agora\+Service.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Audio\+Device\+Manager.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Audio\+Track.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Camera\+Capturer.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Extension\+Control.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Local\+User.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Media\+Node\+Factory.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Media\+Node.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Rtc\+Connection.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Rtmp\+Connection.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Rtmp\+Local\+User.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Data\+Channel.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Screen\+Capturer.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Video\+Frame.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Video\+Mixer\+Source.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Video\+Track.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Remote\+Audio\+Mixer\+Source.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async set and add ares for wait

\doxysection*{A\+PI (2023-\/08-\/29) }

\char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+I\+Agora\+Service.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async api shoudl return if action has launch \char`\"{}\$media\+\_\+sdk\+\_\+path/interface/cpp/api2/\+N\+G\+I\+Agora\+Local\+User.\+h\char`\"{}, \#$\ast$$\ast$$\ast$$\ast$ async api shoudl return if action has launch

\doxysection*{A\+PI (2023-\/12-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual void set\+Reset\+Vitual\+Display(bool reset)
\end{DoxyItemize}

\doxysection*{A\+PI(2024-\/02-\/26) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item add C\+A\+M\+E\+R\+A\+\_\+\+E\+X\+T\+RA in C\+A\+M\+E\+R\+A\+\_\+\+S\+O\+U\+R\+CE
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_a_i_noise_suppressor_8h_source}{N\+G\+I\+Agora\+Extension\+A\+I\+Noise\+Suppressor.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modified virtual int Process\+Denoise\+Frame(float$\ast$ input, float$\ast$ output, int stage) = 0;
\item Modified virtual const char$\ast$ Get\+Lib\+Version(int mode = 0) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/02-\/27) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_ai_aec_8h_source}{N\+G\+I\+Agora\+Extension\+Ai\+Aec.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Modified virtual const char$\ast$ Get\+Lib\+Version(int mode = 0) = 0;
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/03-\/07) }

\doxysubsection*{video\+\_\+node\+\_\+i.\+h }

{\bfseries{A\+DD\+:}}
\begin{DoxyItemize}
\item virtual void set\+Focal\+Length\+Type()
\end{DoxyItemize}

\doxysection*{A\+PI (2023-\/11-\/09) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item virtual void on\+Camera\+Capturer\+Configuration\+Changed(int direction, int focal\+Length\+Type, int width, int height, int frame\+Rate)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/04-\/03) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Modify\+: rename api}}
\begin{DoxyItemize}
\item Modified\+: virtual bool is\+Center\+Stage\+Supported()
\end{DoxyItemize}

\doxysection*{A\+PI(2024-\/04-\/24) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Add\+:}}
\begin{DoxyItemize}
\item set\+Remote\+Subscribe\+Fallback\+Option
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/05-\/07) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_camera_capturer_8h_source}{N\+G\+I\+Agora\+Camera\+Capturer.\+h}} }

{\bfseries{Deleted\+:}}
\begin{DoxyItemize}
\item virtual void on\+Camera\+Capturer\+Configuration\+Changed()
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/05-\/15) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_a_i_noise_suppressor_8h_source}{N\+G\+I\+Agora\+Extension\+A\+I\+Noise\+Suppressor.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item virtual int Init(const char$\ast$ weight\+\_\+raw\+\_\+buffer, size\+\_\+t raw\+\_\+buffer\+\_\+bytes)
\item virtual int Clear\+Hidden\+State(bool clear\+\_\+hidden, int clear\+\_\+lpsbuffer\+\_\+nframe)
\end{DoxyItemize}

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_ai_aec_8h_source}{N\+G\+I\+Agora\+Extension\+Ai\+Aec.\+h}} }

{\bfseries{Modify\+:}}
\begin{DoxyItemize}
\item virtual int Init(const char$\ast$ weight\+\_\+raw\+\_\+buffer, size\+\_\+t raw\+\_\+buffer\+\_\+bytes)
\item virtual int Clear\+Hidden\+State(bool clear\+\_\+hidden, int clear\+\_\+lpsbuffer\+\_\+nframe)
\item virtual int Process\+Ai\+Nlp\+Frame(const float$\ast$ linear,  const float$\ast$ nearin, const float$\ast$ far\+\_\+ref, float$\ast$ out\+\_\+mask)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/04) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_sync_client_8h_source}{N\+G\+I\+Agora\+Sync\+Client.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item add new field for sync client config
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/29) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item Register\+Local\+Mixed\+Audio\+Track
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_extension_screen_source_8h_source}{N\+G\+I\+Agora\+Extension\+Screen\+Source.\+h}} }

{\bfseries{A\+DD\+:}}
\begin{DoxyItemize}
\item int set\+External\+Media\+Projection(void$\ast$ media\+Projection)
\end{DoxyItemize}

\doxysection*{A\+PI (2024-\/07-\/30) }

\doxysubsection*{\mbox{\hyperlink{_n_g_i_agora_local_user_8h_source}{N\+G\+I\+Agora\+Local\+User.\+h}} }

{\bfseries{Modified\+:}}
\begin{DoxyItemize}
\item void on\+Stream\+Message(user\+\_\+id\+\_\+t user\+Id, int stream\+Id, const char$\ast$ data, size\+\_\+t length, uint64\+\_\+t send\+Ts = 0) 
\end{DoxyItemize}