webrtc 代码学习(十三)Audio rtp 接收数据流程

Audio rtp 接收数据
作者:LanPZzzz
本章我们简单讲述下Audio rtp 接收数据

文章目录

          • 1. 接收数据,从::recvfrom, audio rtp packet

1. 接收数据,从::recvfrom, audio rtp packet

void AsyncUDPSocket::OnReadEvent(rtc_base\asyncudpsocket.cc 107 行)
-> PhysicalSocket::RecvFrom(rtc_base\physicalsocketserver.cc 397 行)
-> SignalReadPacket(rtc_base\asyncudpsocket.cc 126 行)
-> AllocationSequence::OnReadPacket (p2p\client\basicportallocator.cc 1696 行)
-> UDPPort::HandleIncomingPacket (p2p\base\stunport.cc 296 行)
-> UDPPort::OnReadPacket(p2p\base\stunport.cc 339 行)
-> Connection::OnReadPacket (p2p\base\port.cc 1195 行)
-> SignalReadPacket (p2p\base\port.cc 1207 行 )
-> P2PTransportChannel::OnReadPacket (p2p\base\p2ptransportchannel.cc 2216 行)
-> SignalReadPacket (p2p\base\p2ptransportchannel.cc 2227 行)
-> DtlsTransport::OnReadPacket (p2p\base\dtlstransport.cc 536 行)
-> SignalReadPacket (p2p\base\dtlstransport.cc 610 行)
-> RtpTransport::OnReadPacket (pc\rtptransport.cc 248 行)
-> rtc::CopyOnWriteBuffer packet(data, len); (pc\rtptransport.cc 265 行) 数据进行copy
-> SrtpTransport::OnRtpPacketReceived (pc\srtptransport.cc 195 行 )
-> UnprotectRtp(data, len, &len) (pc\srtptransport.cc 205 行) 这一步操作应该是把data len 改掉了,然后有设置的packet 中,需要进一步查看为什么会改掉
-> RtpTransport::DemuxPacket (pc\srtptransport.cc 189 行)
-> webrtc::RtpPacketReceived parsed_packet
-> parsed_packet.Parse => RtpPacket::Parse (modules\rtp_rtcp\source\rtp_packet.cc 99 行) 根据packet 中的data,解析ParseBuffer,如timestamp_, ssrc 等,并保存packet
-> RtpDemuxer::OnRtpPacket(call\rtp_demuxer.cc 154 行)
-> RtpPacketSinkInterface* sink = ResolveSink(packet); 根据packet 找sink
-> BaseChannel::OnRtpPacket(pc\channel.cc 451 行) 这次我进入的是voice::channel
-> BaseChannel::OnPacketReceived(pc\channel.cc 493 行)
-> BaseChannel::ProcessPacket (pc\channel.cc 524 行)
-> WebRtcVoiceMediaChannel::OnPacketReceived (media\engine\webrtcvoiceengine.cc 2006 行)
-> webrtc::PacketTime webrtc_packet_time
-> call_->Receiver()->DeliverPacket(media\engine\webrtcvoiceengine.cc 2014 行) => Call::DeliverPacket (call\call.cc 1297 行)
-> Call::DeliverRtp (call\call.cc 1219 行)
-> Call::NotifyBweOfReceivedPacket (call\call.cc 1334 行) 解析出 RTPHeader
-> RtpStreamReceiverController::OnRtpPacket (call\rtp_stream_receiver_controller.cc 52 )
-> RtpDemuxer::OnRtpPacket(call\rtp_demuxer.cc 154 行)
-> RtpPacketSinkInterface* sink = ResolveSink(packet); 根据packet 找sink
-> ChannelProxy::OnRtpPacket (audio\channel_proxy.cc 214)
-> Channel::OnRtpPacket (audio\channel.cc 865)
-> Channel::UpdatePlayoutTimestamp (audio\channel.cc 1354) 更新jitter buffer playout 时间
-> audio_coding_->PlayoutTimestamp() => AudioCodingModuleImpl::PlayoutTimestamp (modules\audio_coding\acm2\audio_coding_module.cc 1192)
-> AcmReceiver::GetPlayoutTimestamp (modules\audio_coding\acm2\acm_receiver.cc 299)
-> NetEqImpl::GetPlayoutTimestamp (modules\audio_coding\neteq\neteq_impl.cc 408)
-> TimestampScaler::ToExternal (modules\audio_coding\neteq\timestamp_scaler.cc 73)
->
->
->
-> AudioDeviceModuleImpl::PlayoutDelay (modules\audio_device\audio_device_impl.cc 846)
-> AudioDeviceWindowsCore::PlayoutDelay (modules\audio_device\win\audio_device_core_win.cc 2631)
->
-> Channel::GetRtpTimestampRateHz (audio\channel.cc 1396)
->audio_coding_->ReceiveFormat() () 这个地方没有调试到???
->
->
->RTPPayloadRegistry::GetPayloadTypeFrequency (modules\rtp_rtcp\source\rtp_payload_registry.cc 217)
-> RTPPayloadRegistry::PayloadTypeToPayload (modules\rtp_rtcp\source\rtp_payload_registry.cc 228)
->
->Channel::IsPacketRetransmitted (audio\channel.cc 897)
-> ReceiveStatisticsImpl::GetStatistician (modules\rtp_rtcp\source\receive_statistics_impl.cc 380)
-> StreamStatisticianImpl::IsRetransmitOfOldPacket (modules\rtp_rtcp\source\receive_statistics_impl.cc 282) *** 应该是判断是否是old packet 的,需要仔细看下
-> IsNewerSequenceNumber (moudle\include\module_common_types_public.h 87)
->
->
->
-> rtp_receive_statistics_->IncomingPacket => ReceiveStatisticsImpl::IncomingPacket (modules\rtp_rtcp\source\receive_statistics_impl.cc 354)
-> StreamStatisticianImpl::IncomingPacket (modules\rtp_rtcp\source\receive_statistics_impl.cc 53)
-> StreamStatisticianImpl::UpdateCounters (modules\rtp_rtcp\source\receive_statistics_impl.cc 70)
-> RateStatistics::Update (rtc_base\rate_statistics.cc 41)
-> RtpPacketCounter::AddPacket (modules\rtp_rtcp\include\rtp_rtcp_defines.h 492)
-> 这里可能还走写其他的动作,可能有一些时间上的统计
->
-> StreamStatisticianImpl::CalculateRtcpStatistics (modules\rtp_rtcp\source\receive_statistics_impl.cc 201)
-> ReceiveStatisticsImpl::DataCountersUpdated (modules\rtp_rtcp\source\receive_statistics_impl.cc 426)
-> 这里 rtp_stats_callback_ == null 没有走下面
->
->ReceiveStatisticsImpl::StatisticsUpdated (modules\rtp_rtcp\source\receive_statistics_impl.cc 405)
-> 这里 rtcp_stats_callback_ == null 没有走下面
->
->
->
-> Channel::ReceivePacket (audio\channel.cc 882)
-> RTPPayloadRegistry::PayloadTypeToPayload (modules\rtp_rtcp\source\rtp_payload_registry.cc 228)
-> RtpReceiverImpl::IncomingRtpPacket (modules\rtp_rtcp\source\rtp_receiver_impl.cc 146)
->RtpReceiverImpl::CheckPayloadChanged (modules\rtp_rtcp\source\rtp_receiver_impl.cc 262)
-> RTPReceiverAudio::CheckPayloadChanged (modules\rtp_rtcp\source\rtp_receiver_audio.cc 152)
-> RTPPayloadRegistry::PayloadTypeToPayload (modules\rtp_rtcp\source\rtp_payload_registry.cc 228)
-> set_last_received_payload_type (modules\rtp_rtcp\include\rtp_payload_registry.h 57)
->
->RtpReceiverImpl::CheckCSRC(modules\rtp_rtcp\source\rtp_receiver_impl.cc 297)
->RtpReceiverImpl::UpdateSources (modules\rtp_rtcp\source\rtp_receiver_impl.cc 314)
-> RtpReceiverImpl::RemoveOutdatedSources (modules\rtp_rtcp\source\rtp_receiver_impl.cc 347)
->
->RTPReceiverAudio::ParseRtpPacket (modules\rtp_rtcp\source\rtp_receiver_audio.cc 128)
-> RTPReceiverAudio::ParseAudioCodecSpecific (modules\rtp_rtcp\source\rtp_receiver_audio.cc 160)
-> Channel::OnReceivedPayloadData (audio\channel.cc 359)
-> AudioCodingModuleImpl::IncomingPacket (modules\audio_coding\acm2\audio_coding_module.cc 1073) 保存audio数据的地方
-> AcmReceiver::InsertPacket (modules\audio_coding\acm2\acm_receiver.cc 76)
-> AcmReceiver::RtpHeaderToDecoder (modules\audio_coding\acm2\acm_receiver.cc 387)
-> NetEqImpl::GetDecoder (modules\audio_coding\neteq\neteq_impl.cc 425)
-> DecoderDatabase::GetDecoderInfo (modules\audio_coding\neteq\decoder_database.cc 270) 获取audio decoder 的信息,比如format,samplerate 等
-> DecoderDatabase::DecoderInfo::GetDecoder (modules\audio_coding\neteq\decoder_database.cc 83) 这里获取的是opus 的decoder
->
->
->NetEqImpl::InsertPacket (\modules\audio_coding\neteq\neteq_impl.cc 139)
-> NetEqImpl::InsertPacketInternal (\modules\audio_coding\neteq\neteq_impl.cc 533)
-> update_sample_rate_and_channels = true 因为是第一个包
-> Rtcp::Init (modules\audio_coding\neteq\rtcp.cc 20)
-> SyncBuffer::IncreaseEndTimestamp (modules\audio_coding\neteq\sync_buffer.cc 86)
-> Rtcp::Update (modules\audio_coding\neteq\rtcp.cc 31) 计算jitter_ delay
-> 如果 nack_enabled_ = true, 设置nack track NackTracker::UpdateLastReceivedPacket (modules\audio_coding\neteq\nack_tracker.cc 50)
-> AudioDecoder::IncomingPacket (api\audio_codecs\audio_decoder.cc 133)opus 的 decoder 这里调用了空方法???
-> AudioDecoderOpusImpl::ParsePayload (modules\audio_coding\codecs\opus\audio_decoder_opus.cc 80) 把数据进行分片,比如多个audio的编码数据放到一个里面,可能是要这么理解
-> 把上面分片的数据,放入parsed_packet_list 中
-> PacketBuffer::InsertPacketList(modules\audio_coding\neteq\packet_buffer.cc 125) 把数据放入到Packet buffer 中
-> PacketBuffer::InsertPacket (modules\audio_coding\neteq\packet_buffer.cc 78) buffer_
->
-> NetEqImpl::SetSampleRateAndChannels (\modules\audio_coding\neteq\neteq_impl.cc 1981) 初始化属性,设置音频采样等,灰常有用
->
->
->
->
-> ModuleRtpRtcpImpl::RTT (modules\rtp_rtcp\source\rtp_rtcp_impl.cc 519)
-> RTCPReceiver::RTT (modules\rtp_rtcp\source\rtcp_receiver.cc 195)
->
->AudioCodingModuleImpl::GetNackList (modules\audio_coding\acm2\audio_coding_module.cc 1224)
->AcmReceiver::GetNackList (modules\audio_coding\acm2\acm_receiver.cc 377)
-> NetEqImpl::GetNackList (modules\audio_coding\neteq\neteq_impl.cc 501)
-> 如果 nack_enabled_ = true, NackTracker::GetNackList(modules\audio_coding\neteq\nack_tracker.cc 218)
->
->
->
-> 如果nack list 不为空, 调用Channel::ResendPackets (audo\channel.cc 1210) 发送rtcp 包,保护nack
->
->
->
->
->
->
->
->
->
->
->
->
->
->

你可能感兴趣的:(webrtc学习)