WebRTC之视频NackModule

2019-02-20  本文已影响0人  stoneliuxs

NackModule

一个包的最大请求次数是kMaxNackRetries(10)次,最大请求时间是10*rtt,在这个时间内还没有获取到丢失的包则不再请求
对外提供的接口如下,源码

const int kDefaultRttMs = 100;
const int kMaxNackRetries = 10;
const int kProcessFrequency = 50;
const int kProcessIntervalMs = 1000 / kProcessFrequency;
int OnReceivedPacket(const VCMPacket& packet);
void ClearUpTo(uint16_t seq_num);
void UpdateRtt(int64_t rtt_ms);
void Clear();
int64_t TimeUntilNextProcess() override;
void Process() override;
  1. 所以到了nack模块是可以知道此包是否是关键帧的包,是否是一帧的第一个包,包序号等信息。
  2. 例如收到1 2 3 6 7 4 5等包,那么在收到序号为6的包的时候就认为4和5这两个包丢失了,具体可以阅读AddPacketsToNack这个函数,然后把4和5两个包加入到nack列表中(nack_list_),当收到5这个包的时候从nack列表中移除
  3. 调用GetNackBatch(kSeqNumOnly)找到缺失的包序号,kSeqNumOnly选项触发第一次nack请求,所以nack请求是非常及时的
上一篇下一篇

猜你喜欢

热点阅读