• webrtc统计信息之rtt计算


    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计算值,通知所有观察者.
  • 相关阅读:
    基础安全术语科普(四)——RFID
    基础安全术语科普(三)——RAT
    基础安全术语科普(二)——反病毒软件工作原理
    java中的变量
    递归调用
    一个男人关心的东西 决定了他的层次
    安装环境时,请大家不要选择PHP5.3.6
    WordPress URL Rewrite | WP URL 重写组件
    如何在ASP.NET网页间传递数据
    Oracle中的for和while循环
  • 原文地址:https://www.cnblogs.com/xl2432/p/13424448.html
Copyright © 2020-2023  润新知