前面几篇文章详细分析了 MediaCodec 的相关功能,但是在 MediaCodec 外面还包裹了一层 NuPlayerDecoder,从理论上来讲,既然 NuPlayerDecoder 包裹在 MediaCodec 外层,所以它相对于 MediaCodec 也可以理解为 App,它调用 MediaCodec 的 API 来完成相关任务。
一、播放器启动
对于解码流程我们从媒体播放流程中的 NuPlayer::onStart() 函数开始分析。
1、NuPlayer.cpp
源码位置:/frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
onStart
void NuPlayer::onStart(int64_t startPositionUs, MediaPlayerSeekMode mode) {
……
if (mVideoDecoder != NULL) {
mVideoDecoder->setRenderer(mRenderer);
}
if (mAudioDecoder != NULL) {
mAudioDecoder->setRenderer(mRenderer);
}
……
}
在该函数中,会调用 setRenderer()