Android多媒体——音/视频数据播放(十八)
在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用户体验。
一、音频设备初始化
对于 Android 系统来说,音频的播放最终都绕不开 AudioSink 对象。NuPlayer 中的 AudioSink 对象早在 NuPlayer 播放器创建时就已经创建,并传入 NuPlayer 体系中。
接下来在创建解码器的过程中,也就是 NuPlayer::instantiateDecoder() 函数调用创建音频解码器的同时,会触发一系列对 AudioSink 的初始化和启动动作。
1、NuPlayer
源码位置:/frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
instantiateDecoder
status_t NuPlayer::instantiateDecoder(bool audio, sp<DecoderBase> *decoder, bool checkAudioModeChange) {……if (audio) {……if (checkAudioModeChange)