1.NuPlayerDriver::reset()
2.NuPlayer::resetAsync()
发送kWhatReset消息
3.kWhatReset消息的处理
NuPlayer::onMessageReceived
case kWhatReset:
(1)如果mFlushingAudio或者mFlushingVideo是AWAITING_DISCONTINUITY状态,执行
(2)如果正在flushing,则推迟执行reset
(3)如果mAudioDecoder == NULL && mVideoDecoder == NULL,则表示已经执行完reset,则调用
finishReset()
(4)执行audio的flushDecoder
(5)执行video的flushDecoder
(6)设置变量mResetInProgress为true
4.NuPlayer::finishReset()
(1)执行mSource->stop();
(2)执行driver->notifyResetComplete()
4.1 NuPlayer::RTSPSource::stop()
stop函数发送消息后,断开与服务器的连接需要及时执行完成,否则会超时导致ANR。
4.2 处理kWhatDisconnect消息
4.3 NuPlayer::RTSPSource::finishDisconnectIfPossible
5.NuPlayerDriver::notifyResetComplete()
设置mResetInProgress为false,则1.中的等待完成,即reset执行结束
6.NuPlayer::flushDecoder
7.NuPlayer::Decoder::signalFlush()
调用mCodec->signalFlush(); 调用的是ACodec的signalFlush函数
8.ACodec::signalFlush()
发送kWhatFlush消息
9.ACodec::UninitializedState::onMessageReceived
case ACodec::kWhatFlush:
发送ACodec::kWhatFlushCompleted消息
10.对ACodec::kWhatFlushCompleted消息的处理位于NuPlayer类中
11.finishFlushIfPossible的处理