一、视频RtpPacketSender函数钩子注册
1)函数调用栈
Thread::PreRun
->Thread::ProcessMessages
->Thread::Dispatch
->Thread::QueuedTaskHandler::OnMessage
->SdpOfferAnswerHandler::PushdownMediaDescription
->BaseChannel::SetRemoteContent
->VideoChannel::SetRemoteContent_w
->WebRtcVideoChannel::SetSendParameters
->WebRtcVideoChannel::ApplyChangedParams
->WebRtcVideoChannel::WebRtcVideoSendStream::SetCodec
->WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream
->Call::CreateVideoSendStream
->Call::CreateVideoSendStream
->VideoSendStream::VideoSendStream
->RtpTransportControllerSend::CreateRtpVideoSender
->RtpVideoSender::RtpVideoSender
->std::vector<RtpStreamSender> CreateRtpStreamSenders
->ModuleRtpRtcpImpl2::Create
->ModuleRtpRtcpImpl2::ModuleRtpRtcpImpl2
->ModuleRtpRtcpImpl2::RtpSenderContext::RtpSenderContext
2)函数说明
RtpSenderContext::RtpSenderContext函数,根据配置挂RtpPacketSender钩子。
CreateRtpStreamSenders函数封装config信息
RtpTransportControllerSend::packet_sender调用的是task_queue_pacer_
RtpTransportControllerSend::RtpTransportControllerSend注册task_queue_pacer_
RtpTransportControllerSend::CreateRtpVideoSender函数注册transport参数
视频pacer有两种模式,PacedSender、TaskQueuePacedSender。根据配置的“WebRTC-TaskQueuePacer”做动态选择。
二、音频RtpPacketSender函数钩子注册
Thread::PreRun
->Thread::ProcessMessages
->Thread::Dispatch
->Thread::QueuedTaskHandler::OnMessage
->SdpOfferAnswerHandler::PushdownMediaDescription
->BaseChannel::SetLocalContent
->VoiceChannel::SetLocalContent_w
->BaseChannel::UpdateLocalStreams_w
->WebRtcVoiceMediaChannel::AddSendStream
->WebRtcVoiceMediaChannel::WebRtcAudioSendStream::WebRtcAudioSendStream
->Call::CreateAudioSendStream
->AudioSendStream::AudioSendStream
->voe::CreateChannelSend
->ChannelSend::ChannelSend
->ModuleRtpRtcpImpl2::Create
->ModuleRtpRtcpImpl2::ModuleRtpRtcpImpl2
->ModuleRtpRtcpImpl2::RtpSenderContext::RtpSenderContext
ChannelSend::ChannelSend函数封装config信息
RtpPacketSenderProxy类需要在RegisterSenderCongestionControlObjects注册实际发包函数
RegisterSenderCongestionControlObjects注册函数的调用栈如下
Thread::PreRun
->Thread::ProcessMessages
->Thread::Dispatch
->Thread::QueuedTaskHandler::OnMessage
->SdpOfferAnswerHandler::PushdownMediaDescription
->BaseChannel::SetLocalContent
->VoiceChannel::SetLocalContent_w
->BaseChannel::UpdateLocalStreams_w
->WebRtcVoiceMediaChannel::AddSendStream
->WebRtcVoiceMediaChannel::WebRtcAudioSendStream::WebRtcAudioSendStream
->Call::CreateAudioSendStream
->AudioSendStream::AudioSendStream
->AudioSendStream::AudioSendStream
->AudioSendStream::ConfigureStream
->ChannelSend::RegisterSenderCongestionControlObjects
Call::CreateAudioSendStream注册transport_send_
Call::Call
Thread::PreRun
->Thread::ProcessMessages
->Thread::Dispatch
->Thread::QueuedTaskHandler::OnMessage
->PeerConnectionFactory::CreatePeerConnectionOrError
->PeerConnectionFactory::CreateCall_w
->CallFactory::CreateCall
->Call::Create
->internal::Call::Call
Call::Create函数transport_controller_factory_.Create创建音频发送报文的钩子函数。
transport_controller_factory_.Create实际上挂的是RtpTransportControllerSendFactory
RtpTransportControllerSendFactory最终挂的同视频一样,都是RtpTransportControllerSend