webrtc统计信息之rtt计算

1. 概述

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

SR报文格式:

webrtc统计信息之rtt计算

RR报文格式:

webrtc统计信息之rtt计算

2. 相关代码

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

3. 探测流程

主要流程如下图所示:

webrtc统计信息之rtt计算

名词解释:

  • 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计算值,通知所有观察者.

Original: https://www.cnblogs.com/lidabo/p/16475192.html
Author: DoubleLi
Title: webrtc统计信息之rtt计算

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546861/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【开源测试平台横向测评系列】预告篇

    一、开源测试平台评测预告 近几年来,随着互联网行业的高速发展,各类开源自动化测试框架、工具、平台如雨后春笋般涌现。在当前市面上主流的开源测试平台中,知名度较高的有:Metersph…

    技术杂谈 2023年7月24日
    0133
  • Vue+Django 开发第三关:Vue发送的请求数据,Django端不能识别的问题

    在闯过了前两关以后,现在来看第三关: 通过分析vue前端请求发送的数据,请求数据是正确且已经提交了的,但是出现django 服务端没有接收到数据的情况 巨晕~!难不成数据还能&#8…

    技术杂谈 2023年7月11日
    095
  • 服务治理-布隆过滤器

    布隆过滤器 布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。元素可以添加到集合中,但不能删除(计数布鲁姆过…

    技术杂谈 2023年7月11日
    099
  • Rust:axum学习笔记(4) 上传文件

    接上一篇继续,上传文件是 web开发中的常用功能,本文将演示axum如何实现图片上传(注:其它类型的文件原理相同),一般来说要考虑以下几个因素: 文件上传的大小限制 文件上传的类型…

    技术杂谈 2023年5月31日
    0128
  • Servlet Interface

    Servlet Interface Servlet接口是Java Servlet API 核心抽象接口。大多数Servlet实现直接实现Servlet接口,或者是继承已经实现Ser…

    技术杂谈 2023年7月25日
    091
  • 图解|用好MySQL索引,你需要知道的一些事情

    我是蝉沐风。 这一篇文章来聊一聊如何用好MySQL索引。 为了更好地进行解释,我创建了一个存储引擎为InnoDB的表 user_innodb,并批量初始化了500W+条数据。包含主…

    技术杂谈 2023年7月23日
    0103
  • 谷歌地球专业版Google Earth Pro Mac/win中文

    Original: https://www.cnblogs.com/aurora-123/p/16854017.htmlAuthor: 佛系女孩Title: 谷歌地球专业版Goog…

    技术杂谈 2023年7月11日
    0136
  • quartz框架(九)-JobRunShell

    上篇博文,博主讲了Listener相关的内容。本篇博文,博主将要详细介绍一下JobRunShell的功能。简单的来说,JobRunShell就是Job实例运行时所在的环境,也就是说…

    技术杂谈 2023年7月24日
    090
  • Vue编程式路由导航和路由守卫

    具体编码: methods: { pushShow(m) { this.$router.push({ name: ‘msg-d’, // 就是路由的名称,不能使用path para…

    技术杂谈 2023年6月21日
    0118
  • 正投影与斜投影

    正投影 设物体上任一点的三维坐标为(p(x,y,z)),投影后的三维坐标为(p^,(x^,,y^,,z^,)),则正交投影方程为: [ \left{\begin{array}{rc…

    技术杂谈 2023年7月11日
    0148
  • NoteOfMySQL-09-存储过程与函数

    常用的SQL语句在执行时需要先编译,然后执行;而存储过程(Store Procedure)是经编译后存储在数据库中的SQL语句集,在数据库中创建和保存。 一、存储过程与函数的区别 …

    技术杂谈 2023年7月11日
    097
  • 那些舍不得删除的 MP3–批量修改mp3的ID3tag

    整理电脑时发现很多mp3。那是大约2001年至2009年之间。那个时候大家听歌,还是习惯从网上下载mp3。虽然现在听歌比从前方便多了,简单到只需在APP中输入歌名,但用播放器听mp…

    技术杂谈 2023年6月21日
    0110
  • List的同步类比较

    TL;NRs CopyOnWriteArrayList类在多线程顺序读取上有很大的优势,但在随机读取上反而有较大的劣势,且在写入方面性能极差。 Vector类在顺序读取方面性能较差…

    技术杂谈 2023年7月24日
    094
  • Ant Design Pro

    posted @2020-08-10 22:26 dekevin 阅读(143 ) 评论() 编辑 Original: https://www.cnblogs.com/dekevi…

    技术杂谈 2023年5月31日
    0113
  • CSAPP Tiny web server源代码分析及搭建执行

    1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议)。 一个webclient(即浏览器)打开一个到server的…

    技术杂谈 2023年6月1日
    0126
  • 前端富文本基础及实现

    在日常生活中我们会经常接触到各种各样的文档格式和形式,其中富文本在文档格式中扮演了重要角色。对于前端而言,富文本产品也层出不穷,其应用也越来越广。 这篇文章将会为大家介绍前端富文本…

    技术杂谈 2023年5月31日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球