AudioPlayer的处理流程

首先需要注意的是,AudioPlayer处理的是已经解码后的数据
1.创建AudioPlayer对象
(1)在 AwesomePlayer::play_l()函数中创建了AudioPlayer对象,并且在AwesomePlayer.cpp文件中,只在此函数中创建过AudioPlayer对象
(2)在 AwesomePlayer::play_l()函数中创建了mAudioPlayer后,调用startAudioPlayer_l执行输出数据
2. AwesomePlayer::startAudioPlayer_l
调用mAudioPlayer的start函数,开始输出数据
3.AudioPlayer::start
(1)由于sourceAlreadyStarted参数为true,所以不会再调用mSource->start()函数

(2)读取第一段解码后的数据
mFirstBufferResult = mSource->read(&mFirstBuffer, &options);

(3)由于mAudioSink不为空,所以会执行下面的 mAudioSink->open函数,并注册了AudioSinkCallback函数,而不会执行新建AudioTrack,即不会注册AudioCallback函数
4.AudioPlayer::AudioSinkCallback
在有数据到来时,循环调用此callback函数
调用fillBuffer函数进行填充数据

5.AudioPlayer::fillBuffer
(1)此函数的返回值size_done,代表已经处理的数据总大小,与传递进来的数据size(第二个参数)不一定相同

(2)获取解码后的数据
(3)取得一帧数据在媒体文件中存储的时间戳mPositionTimeMediaUs
(4)计算一帧数据实际播放位置的时间戳
(5)输出解码数据并释放已经使用的mInputBuffer

你可能感兴趣的:(play)