webrtc代码走读二十二(RtpPacketSender函数钩子注册)

一、视频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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值