pace 模块
作者:LanPZzzz
文章目录
-
-
-
-
- 1. pace 模块 在 modules\pacing 中
- 2. 看下paced_sender.cc,这个是pace.h Pacer 接口的实现,主要有如下几个接口
- 3. PacedSender::InsertPacket, 这里没有把真正的数据insert packet 中,而是把数据信息插入
- 4. 看下Push 动作, RoundRobinPacketQueue::Push
- 4. PacedSender::Process(),从取出要要发送的packet 信息,然后发送到socket 中
- 5. RoundRobinPacketQueue::BeginPop
- 6. PacedSender::SendPacket 这里层层传递后调用 RTPSender::TimeToSendPacket (modules\rtp_rtcp\source\rtp_sender.cc)
- 总结: 定时线程异步发送数据,但是在receive nack 包的时候,也这样放入的话,就会出现nack 包滞后发送的情况,因为pack 中已经堆起很多需要发送包,nack的时候是需要修改。encode 后的数据可以这样发送,发送时间点也是一个重要的监测点
-
-
-
1. pace 模块 在 modules\pacing 中
pace.h (\modules\pacing\pacer.h) 接口, 主要 paced_sender.cc,packet_router.cc,round_robin_packet_queue.cc
2. 看下paced_sender.cc,这个是pace.h Pacer 接口的实现,主要有如下几个接口
3. PacedSender::InsertPacket, 这里没有把真正的数据insert packet 中,而是把数据信息插入
void PacedSender::InsertPacket(RtpPacketSender::Priority priority,
uint32_t ssrc,
uint16_t sequence_number,
int64_t capture_time_ms,
size_t bytes,
bool retransmission) {
rtc::CritScope cs(&critsect_);
RTC_DCHECK(pacing_bitrate_kbps_ > 0)
<< "SetPacingRate must be called before InsertPacket.";
int64_t now_ms = clock_->TimeInMilliseconds();
prober_->OnIncomingPacket(bytes);
if (capture_time_ms < 0)
capture_time_ms = now_ms;
发送到packets_ 中
packets_->Push(PacketQueueInterface::Packet(
priority, ssrc, sequence_number, capture_time_ms, now_ms, bytes,
retransmission, packet_counter_++));
}
4. 看下Push 动作, RoundRobinPacketQueue::Push
void RoundRobinPacketQueue::Push(const Packet& packet_to_insert) {
Packet packet(packet_to_insert);
auto st