BitrateProber解读

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时间,主要用于通知线程下一次循环时间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于rtp,PacedSender是非常重要的一个关节,因为rtp发送不知道数据发送是否成功,但是发送太多肯定容...
    MinorUncle阅读 950评论 0 0
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,795评论 0 3
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,186评论 6 13
  • 本文转自:FFmpeg 入门(1):截取视频帧 | www.samirchen.com 背景 在 Mac OS 上...
    SamirChen阅读 9,470评论 6 15
  • 我们可以把因特网看成由许多主干网络组成,而这些主干网络由一些国际的、国家的和地区的ISP来运营。主干网通过一些连接...
    Zhang21阅读 3,338评论 0 6