\hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer}{}\doxysection{agora\+::rtc\+::I\+Media\+Player\+Source\+Observer Class Reference}
\label{classagora_1_1rtc_1_1_i_media_player_source_observer}\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}


{\ttfamily \#include $<$I\+Agora\+Media\+Player\+Source.\+h$>$}

\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a175672d68a5c5b252294e041dfdf5b12}{on\+Player\+Source\+State\+Changed}} (media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+S\+T\+A\+TE state, media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+R\+E\+A\+S\+ON reason)=0
\begin{DoxyCompactList}\small\item\em Reports the changes of playback state. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_ae8f0f915a640ef64d4e4368ee669296e}{on\+Position\+Changed}} (int64\+\_\+t position\+Ms, int64\+\_\+t timestamp\+Ms)=0
\begin{DoxyCompactList}\small\item\em Reports the playback progress of the media file. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a9c9ab85806339059ea8b8aed80590707}{on\+Player\+Event}} (media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+E\+V\+E\+NT event\+Code, int64\+\_\+t elapsed\+Time, const char $\ast$message)=0
\begin{DoxyCompactList}\small\item\em Reports the player events. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_acba6bfe69d4624ea1b0dd9c64ebc63b0}{on\+Meta\+Data}} (const void $\ast$data, int length)=0
\begin{DoxyCompactList}\small\item\em Occurs when the media metadata is received. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a70be90b22c142a052d9e8cdf1f9b71a3}{on\+Play\+Buffer\+Updated}} (int64\+\_\+t play\+Cached\+Buffer)=0
\begin{DoxyCompactList}\small\item\em Reports the playback duration that the buffered data can support. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a8e62cb1fd3973474f10564fb2d0f5751}{on\+Preload\+Event}} (const char $\ast$src, media\+::base\+::\+P\+L\+A\+Y\+E\+R\+\_\+\+P\+R\+E\+L\+O\+A\+D\+\_\+\+E\+V\+E\+NT event)=0
\begin{DoxyCompactList}\small\item\em Reports the events of preloaded media resources. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_ade8b59a982d1f3cf595a0fd3a0be304a}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_ade8b59a982d1f3cf595a0fd3a0be304a}} 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_ade8b59a982d1f3cf595a0fd3a0be304a}{on\+Completed}} ()=0
\begin{DoxyCompactList}\small\item\em Occurs when one playback of the media file is completed. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a68df2caa6e3d70015f2203f715a05964}{on\+Agora\+C\+D\+N\+Token\+Will\+Expire}} ()=0
\begin{DoxyCompactList}\small\item\em Agora\+C\+DN Token has expired and needs to be set up with renew\+Agora\+C\+D\+N\+Src\+Token(const char$\ast$ src). \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_adb87d987bf123d66e6746b9a3c46210a}{on\+Player\+Src\+Info\+Changed}} (const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_src_info}{media\+::base\+::\+Src\+Info}} \&from, const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_src_info}{media\+::base\+::\+Src\+Info}} \&to)=0
\begin{DoxyCompactList}\small\item\em Occurs when the video bitrate of the media resource changes. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_ab1132196cf015e8ec3a4b1dbb323c94a}{on\+Player\+Info\+Updated}} (const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_player_updated_info}{media\+::base\+::\+Player\+Updated\+Info}} \&info)=0
\begin{DoxyCompactList}\small\item\em Occurs when information related to the media player changes. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a880054148d3d3aae45d4be40782106a9}{on\+Player\+Cache\+Stats}} (const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_cache_statistics}{media\+::base\+::\+Cache\+Statistics}} \&stats)
\begin{DoxyCompactList}\small\item\em Reports the statistics of the media file being cached. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_a6b99d2a920a26f4ec457d4a29ecf6a46}{on\+Player\+Playback\+Stats}} (const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_player_playback_stats}{media\+::base\+::\+Player\+Playback\+Stats}} \&stats)
\begin{DoxyCompactList}\small\item\em The statistics of the media file being played. \end{DoxyCompactList}\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_media_player_source_observer_ae500f91dd7fb85c6d9055a72e2a4473d}{on\+Audio\+Volume\+Indication}} (int volume)=0
\begin{DoxyCompactList}\small\item\em Reports the volume of the media player. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
This class class reports runtime events to the applications. 

\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a175672d68a5c5b252294e041dfdf5b12}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a175672d68a5c5b252294e041dfdf5b12}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerSourceStateChanged@{onPlayerSourceStateChanged}}
\index{onPlayerSourceStateChanged@{onPlayerSourceStateChanged}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerSourceStateChanged()}{onPlayerSourceStateChanged()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Source\+State\+Changed (\begin{DoxyParamCaption}\item[{media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+S\+T\+A\+TE}]{state,  }\item[{media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+R\+E\+A\+S\+ON}]{reason }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the changes of playback state. 

When the state of the media player changes, the S\+DK triggers this callback to report the current playback state.


\begin{DoxyParams}{Parameters}
{\em state} & The playback state. See {\ttfamily M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+S\+T\+A\+TE}. \\
\hline
{\em reason} & The reason for the changes in the media player status. See {\ttfamily M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+R\+E\+A\+S\+ON}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_ae8f0f915a640ef64d4e4368ee669296e}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_ae8f0f915a640ef64d4e4368ee669296e}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPositionChanged@{onPositionChanged}}
\index{onPositionChanged@{onPositionChanged}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPositionChanged()}{onPositionChanged()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Position\+Changed (\begin{DoxyParamCaption}\item[{int64\+\_\+t}]{position\+Ms,  }\item[{int64\+\_\+t}]{timestamp\+Ms }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the playback progress of the media file. 

When playing media files, the S\+DK triggers this callback every two second to report current playback progress.


\begin{DoxyParams}{Parameters}
{\em position\+Ms} & The playback position (ms) of media files. \\
\hline
{\em time\+Stamp\+Ms} & The N\+TP timestamp (ms) of the current playback progress. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a9c9ab85806339059ea8b8aed80590707}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a9c9ab85806339059ea8b8aed80590707}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerEvent@{onPlayerEvent}}
\index{onPlayerEvent@{onPlayerEvent}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerEvent()}{onPlayerEvent()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Event (\begin{DoxyParamCaption}\item[{media\+::base\+::\+M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+E\+V\+E\+NT}]{event\+Code,  }\item[{int64\+\_\+t}]{elapsed\+Time,  }\item[{const char $\ast$}]{message }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the player events. 


\begin{DoxyItemize}
\item After calling the {\ttfamily seek} method, the S\+DK triggers the callback to report the results of the seek operation.
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em event\+Code} & The player event. See {\ttfamily M\+E\+D\+I\+A\+\_\+\+P\+L\+A\+Y\+E\+R\+\_\+\+E\+V\+E\+NT}. \\
\hline
{\em elapsed\+Time} & The time (ms) when the event occurs. \\
\hline
{\em message} & Information about the event. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_acba6bfe69d4624ea1b0dd9c64ebc63b0}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_acba6bfe69d4624ea1b0dd9c64ebc63b0}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onMetaData@{onMetaData}}
\index{onMetaData@{onMetaData}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onMetaData()}{onMetaData()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Meta\+Data (\begin{DoxyParamCaption}\item[{const void $\ast$}]{data,  }\item[{int}]{length }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Occurs when the media metadata is received. 

The callback occurs when the player receives the media metadata and reports the detailed information of the media metadata.


\begin{DoxyParams}{Parameters}
{\em data} & The detailed data of the media metadata. \\
\hline
{\em length} & The data length (bytes). \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a70be90b22c142a052d9e8cdf1f9b71a3}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a70be90b22c142a052d9e8cdf1f9b71a3}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayBufferUpdated@{onPlayBufferUpdated}}
\index{onPlayBufferUpdated@{onPlayBufferUpdated}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayBufferUpdated()}{onPlayBufferUpdated()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Play\+Buffer\+Updated (\begin{DoxyParamCaption}\item[{int64\+\_\+t}]{play\+Cached\+Buffer }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the playback duration that the buffered data can support. 

When playing online media resources, the S\+DK triggers this callback every two seconds to report the playback duration that the currently buffered data can support.
\begin{DoxyItemize}
\item When the playback duration supported by the buffered data is less than the threshold (0 by default), the S\+DK returns {\ttfamily P\+L\+A\+Y\+E\+R\+\_\+\+E\+V\+E\+N\+T\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+L\+OW} (6).
\item When the playback duration supported by the buffered data is greater than the threshold (0 by default), the S\+DK returns {\ttfamily P\+L\+A\+Y\+E\+R\+\_\+\+E\+V\+E\+N\+T\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+R\+E\+C\+O\+V\+ER} (7).
\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em play\+Cached\+Buffer} & The playback duration (ms) that the buffered data can support. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a8e62cb1fd3973474f10564fb2d0f5751}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a8e62cb1fd3973474f10564fb2d0f5751}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPreloadEvent@{onPreloadEvent}}
\index{onPreloadEvent@{onPreloadEvent}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPreloadEvent()}{onPreloadEvent()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Preload\+Event (\begin{DoxyParamCaption}\item[{const char $\ast$}]{src,  }\item[{media\+::base\+::\+P\+L\+A\+Y\+E\+R\+\_\+\+P\+R\+E\+L\+O\+A\+D\+\_\+\+E\+V\+E\+NT}]{event }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the events of preloaded media resources. 


\begin{DoxyParams}{Parameters}
{\em src} & The U\+RL of the media resource. \\
\hline
{\em event} & Events that occur when media resources are preloaded. See {\ttfamily P\+L\+A\+Y\+E\+R\+\_\+\+P\+R\+E\+L\+O\+A\+D\+\_\+\+E\+V\+E\+NT}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a68df2caa6e3d70015f2203f715a05964}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a68df2caa6e3d70015f2203f715a05964}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onAgoraCDNTokenWillExpire@{onAgoraCDNTokenWillExpire}}
\index{onAgoraCDNTokenWillExpire@{onAgoraCDNTokenWillExpire}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onAgoraCDNTokenWillExpire()}{onAgoraCDNTokenWillExpire()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Agora\+C\+D\+N\+Token\+Will\+Expire (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Agora\+C\+DN Token has expired and needs to be set up with renew\+Agora\+C\+D\+N\+Src\+Token(const char$\ast$ src). 

\begin{DoxyRefDesc}{Deprecated}
\item[\mbox{\hyperlink{deprecated__deprecated000022}{Deprecated}}]4.\+6.\+0\end{DoxyRefDesc}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_adb87d987bf123d66e6746b9a3c46210a}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_adb87d987bf123d66e6746b9a3c46210a}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerSrcInfoChanged@{onPlayerSrcInfoChanged}}
\index{onPlayerSrcInfoChanged@{onPlayerSrcInfoChanged}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerSrcInfoChanged()}{onPlayerSrcInfoChanged()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Src\+Info\+Changed (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_src_info}{media\+::base\+::\+Src\+Info}} \&}]{from,  }\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_src_info}{media\+::base\+::\+Src\+Info}} \&}]{to }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Occurs when the video bitrate of the media resource changes. 


\begin{DoxyParams}{Parameters}
{\em from} & Information about the video bitrate of the media resource being played. See {\ttfamily Src\+Info}. \\
\hline
{\em to} & Information about the changed video bitrate of media resource being played. See {\ttfamily Src\+Info}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_ab1132196cf015e8ec3a4b1dbb323c94a}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_ab1132196cf015e8ec3a4b1dbb323c94a}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerInfoUpdated@{onPlayerInfoUpdated}}
\index{onPlayerInfoUpdated@{onPlayerInfoUpdated}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerInfoUpdated()}{onPlayerInfoUpdated()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Info\+Updated (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_player_updated_info}{media\+::base\+::\+Player\+Updated\+Info}} \&}]{info }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Occurs when information related to the media player changes. 

When the information about the media player changes, the S\+DK triggers this callback. You can use this callback for troubleshooting.


\begin{DoxyParams}{Parameters}
{\em info} & Information related to the media player. See {\ttfamily Player\+Updated\+Info}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a880054148d3d3aae45d4be40782106a9}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a880054148d3d3aae45d4be40782106a9}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerCacheStats@{onPlayerCacheStats}}
\index{onPlayerCacheStats@{onPlayerCacheStats}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerCacheStats()}{onPlayerCacheStats()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Cache\+Stats (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_cache_statistics}{media\+::base\+::\+Cache\+Statistics}} \&}]{stats }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}



Reports the statistics of the media file being cached. 

After you call the {\ttfamily open\+With\+Media\+Source} method and set {\ttfamily enable\+Cache} as {\ttfamily true}, the S\+DK triggers this callback once per second to report the statistics of the media file being cached.


\begin{DoxyParams}{Parameters}
{\em stats} & The statistics of the media file being cached. See {\ttfamily Cache\+Statistics}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_a6b99d2a920a26f4ec457d4a29ecf6a46}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_a6b99d2a920a26f4ec457d4a29ecf6a46}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onPlayerPlaybackStats@{onPlayerPlaybackStats}}
\index{onPlayerPlaybackStats@{onPlayerPlaybackStats}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onPlayerPlaybackStats()}{onPlayerPlaybackStats()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Player\+Playback\+Stats (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_player_playback_stats}{media\+::base\+::\+Player\+Playback\+Stats}} \&}]{stats }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}



The statistics of the media file being played. 

The S\+DK triggers this callback once per second to report the statistics of the media file being played.


\begin{DoxyParams}{Parameters}
{\em stats} & The statistics of the media file. See {\ttfamily Player\+Playback\+Stats}. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_media_player_source_observer_ae500f91dd7fb85c6d9055a72e2a4473d}\label{classagora_1_1rtc_1_1_i_media_player_source_observer_ae500f91dd7fb85c6d9055a72e2a4473d}} 
\index{agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}!onAudioVolumeIndication@{onAudioVolumeIndication}}
\index{onAudioVolumeIndication@{onAudioVolumeIndication}!agora::rtc::IMediaPlayerSourceObserver@{agora::rtc::IMediaPlayerSourceObserver}}
\doxysubsubsection{\texorpdfstring{onAudioVolumeIndication()}{onAudioVolumeIndication()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Media\+Player\+Source\+Observer\+::on\+Audio\+Volume\+Indication (\begin{DoxyParamCaption}\item[{int}]{volume }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Reports the volume of the media player. 

The S\+DK triggers this callback every 200 milliseconds to report the current volume of the media player.


\begin{DoxyParams}{Parameters}
{\em volume} & The volume of the media player. The value ranges from 0 to 255. \\
\hline
\end{DoxyParams}
