BitrateProber也是PacedSender的属性类,第一眼看到BitrateProber
这个类名时以为是类似网速探测功能的,其实不然,BitrateProber只是为了维持一段时间和数据量内发送的网速不低于某一比特率,(其实也是探测网速的一个辅助功能,只有发送足量的数据,才好测量当前网速),所以在整个直播生命周期中,该类激活的时间比较短。一般检测到网速突变时会触发。
重要函数解读:
int64_t BitrateProber::GetNextProbeTime(const ProbeCluster&
cluster):根据网速和已经发送的数据量获得,大概算法是(已经发送的数据量/当前码率)+当前时间(代码中只有发送完成后调用,所以只发送完一段数据)。暂时不知道这样的意义,为什么消耗了多长时间就要等待多长时间?(补充,因为rtp发送无法知道是否成功发送,这里只是按照指定的网速一直发送,所以下次发送的时间 = 已发送的大小/码率)
size_t BitrateProber::RecommendedMinProbeSize() :获取每次发送的大小,与码率有关系,根据码率每次发送2ms的数据
重要接口解读:
void BitrateProber::CreateProbeCluster(int bitrate_bps, int64_t now_ms):创建ProbeCluster,实际ProbeCluster表示一次Probe过程,一个BitrateProber可以有多个ProbeCluster,但是只能是创建时间在5s之内的,否则新的会释放旧的。下面的所以网速皆指此初始化的bitrate_bps。也就可以理解每次网速变化大的时候就会重新该过程
void BitrateProber::OnIncomingPacket(size_t packet_size):触发ProbingState::kActive状态,但是条件是packet_size不能太小,具体大小和当前网速有关系,一般是200B,除非预测网速在100Bk/s以下。
int BitrateProber::TimeUntilNextProbe(int64_t now_ms):下一次Probe时间,主要用于通知线程下一次循环时间