ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

webrtc统计信息之rtt计算

2022-07-13 19:02:38  阅读:170  来源: 互联网

标签:RR ntp 发送 rtt LSR SR webrtc 统计


1. 概述

WebRTC使用SR/RR包来计算rtt的

SR报文格式:
image

RR报文格式:
image

2. 相关代码

RTCPSender::BuildSR
RTCPSender::BuildRR
RTCPSender::SendCompoundRTCP
RTCPReceiver::HandleReceiverReport
RTCPReceiver::HandleReportBlock

3. 探测流程

主要流程如下图所示:
image

名词解释:

  • LSR: 最近一次SR包的NTP时间戳(remote_sender_ntp_time_);LSR由NTP秒(second)低16位和毫秒(fraction)高16位组合而成;
  • DLSR: 最近一次收到SR包到打包Report Block包的间隔.

探测流程:

  • 发送端构造和发送SR包,携带发送时间戳LSR;
  • 接收端接收到最新的SR之后,使用last_received_sr_ntp_字段记录当前ntp时间戳;
  • 接收端构造RR包,设置DLSR字段为当前ntp时间戳 - last_received_sr_ntp_,之后发出RR包;
  • 发送端在接收到RR包之后,记录RR包到达时间now_ntp;
  • 计算rtt: now_ntp - LSR - DLSR

SR和RR包的数量并不需要完全相同,它们之间并不是一一对应的关系,而是相互独立发送的,各自按照自己的发送节奏发送数据.
即使SR或者RR丢失了一部分,只要发送端接收到过RR,它总能计算出rtt,因为发送端只需要一次RR包中的LSR和DLSR字段就能够算出一次rtt.

4. 更新流程

由上一步得到的rtt值会被传递到CallStats中进行定时更新操作(CallStats::Process), 时间间隔为1s(kUpdateIntervalMs).
一次处理流程CallStats::Process为:

  • RemoveOldReports移除1.5s之前的旧的rtt数据;
  • 计算最近1.5s之内的rtt平均值和最大值;
  • 如果最大值和平均值都是非负数,那么便认为rtt合法;
  • 以平均rtt值和之前的旧的值做一个加权(3:7)作为最终的rtt计算值,通知所有观察者.

标签:RR,ntp,发送,rtt,LSR,SR,webrtc,统计
来源: https://www.cnblogs.com/lidabo/p/16475192.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有