WebRTC带宽评估 -- Transport-wide Congestion Control

简述:在RTP包中增加transport-wide-cc扩展头,放置传输层面的包序号。视频接收端记录RTP包的接收时间,并通过RTCP Feedback消息反馈到视频发送端,发送端结合缓存的RTP包发送时间,基于丢包和延迟估算当前带宽,从而及时调整流媒体的发送速率,减少网络拥塞,提高整体视频效果。该方法主要的估算和决策在发送方,采用了线性回归和最小二乘法。

协议:draft-holmer-rmcat-transport-wide-cc-extensions-01

具体实现:

1. SDP

a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

a=rtcp-fb:102 transport-cc

2. RTP

在RTP中都增加一个Transport-wide Sequence number扩展头(扩展头格式参考RFC5285),放置传输层面的包序号,格式如下

在同一个transport中,每发送一个 RTP 包,Transport-wide Sequence number值加1。

3. RTCP

增加一个RTCP Feedback消息,用于receiver向sender反馈RTP包的接收状态(是否收到、收到时间),具体格式如下:

 base sequence number:该RTPC Feeback描述的首个RTP包的transport-wide sequence number.

packet status count: 该RTPC Feeback描述的RTP包的个数。

reference time:该RTPC Feeback描述的首个RTP包的到达时间(单位:64ms)

fb pkt.count : 该RTPC Feeback的计数。

packet chunk:描述RTP包的到达状态(详见下文描述)

recv delta:与上一个RTP包达到的时间的间隔(单位:250us)

Packet Chunk

描述RTP包的到达状态,用2个比特描述,有4种状态:

00   Packet not received

01   Packet received, small delta,此时recv delta取值[0,255],  也就是[0, 63.75] ms

10   Packet received, large or negative delta,此时recv delta取值-32768, 32767],  也就是[-8192.0, 8191.75] ms

11   [Reserved]

按位来表示包的到达状态,packet chunk有两种格式,分别为:

Run Length Chunk

 T:1 bit,表示chunk type,此时为Run Length Chunk,值为0

 S:2 bit, 表示包的到达状态

Run Length:13 bit,表示连续有多少包都是这种状态

所以在接收端看到包的状态都相同,则使用这种格式更节省。

Status Vector Chunk

 T:1 bit,表示chunk type,此时为Status Vector Chunk,值为1

 S:1 bit, 0表示后面symbol list中用1 bit表示1个RTP包的状态(0没收到,1收到),所以1个chunk最多能描述14个RTP包的到达状态;1表示后面symbol list中用2 bit表示1个RTP包的状态(00没收到,01收到小delta,10收到大delta),所以1个chunk最多能描述7个RTP包的到达状态

因为,如果有大的delta的时候,才用S=1.

对比上述两种chunk,1个Status Vector Chunk最多能表示14个包的状态,所以如果有连续>=14包的状态相同,则优先使用Run Length Chunk。一个Run Length Chunk最多能表示2^13 -1 个包的状态。

一个RTCP Feedback中可以混合使用Run Length Chunk和Status Vector Chunk。

一个WebRTC的抓包示例:(使用janus-gateway测试)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据架构】Data Fabric 架构是实现数据管理和集成现代化的关键

D&A 领导者应该了解数据编织架构的关键支柱,以实现机器支持的数据集成。 在日益多样化、分布式和复杂的环境中,数据管理敏捷性已成为组织的任务关键优先事项。为了减少人为错误和总体成本,数据和分析 (D&A) 领导者需要超越传统的数据…

(三)springboot实战——web新特性之函数式实现

前言 本节内容我们主要介绍一下web访问的另一种形式,通过函数式web实现一个restful风格的http请求案例。函数式web是spring5.2之后的一个新特性,可以通过函数去定义web请求的处理流程,使得代码更为简洁,耦合性也降低了。 正文 …

数据结构day7(2023.7.23)

一、Xmind整理: 二、课上练习: 练习1:结点之间的关系 练习2:二叉树的特殊形态 练习3:满二叉树的形态 练习4:完全二叉树的形态 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树 练习5&am…

Window下编译ffmpeg

Window下编译ffmpeg 下载MSYS2编译ffmpeg运行 下载MSYS2 MSYS2是一个是工具和库的集合,它能够方便的在windows上编译、安装和运行程序。ffmpeg可以通过这个软件来编译。 从MSYS2官网下载MSYS2并安装。 运行MSYS2终端,在终端中输入命令,安装…

07统计模型练习

使用SPSS进行分析求解 第一题 下表1.1是中国1994-2016年国内旅游总花费Y、国内生产总值X1、铁路里程X2和公路里程X3的数据,请据此分析如下问题: (1)就建立简单线性回归模型,分别分析中国国内旅游总花费与国内生产总值、铁路里程和公路里程数据的数量关系。 (2)对建立的回归模型…

JVS开源基础框架:用户管理介绍(支持同步钉钉、企微、微信等)

在企业内部系统中,用户管理是指对系统内的用户进行管理、授权和权限管理的过程,这里主要介绍用户的创建与基本信息的管理,权限、登录等详细介绍请参考相关章节。 用户管理界面 点击平台管理-用户管理,界面上展示了组织管理与组织…

potplayer放大画面,画面拖拽。备份

放大画面: 按住alt和鼠标左键,就可以拖动放大后的画面了 窗口化示图 倍数调整 默认只能0.1往上加,但是有的视频0.08倍数才正好,需要精确到2位小数。

基于Vue+Element Plus实现表格组件

目录 前言分析实现例子效果图前言 表格对于管理类项目是很重要的,可以只管的展示和比比较数据。使用Element Plus能解决一部分问题,但是还存在一些缺点和不足。 分析 浏览器上表格数据展示空间不足。列显示太多不够直观。完全依赖官方表格组件代码过于臃肿不利于管理和优化…

【Docker】Docker基本管理命令

目录 一、Docker概述1.1容器化受欢迎的原因1.2Docker核心概念 二、安装 Docker2.1环境准备 三、Doker镜像操作镜像操作选项 四 、Docker 容器操作容器操作选项 一、Docker概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是…

vue项目之《 搭建路由系统 》

author:德玛玩前端 date:2023-07-22 今天,在工作中拿到了架构师的前端框架,是一个vue2elementui搭建的单页面架构,没有路由系统,需要自己搭建,因为以往拿到的框架都是路由系统已经搭建好&#x…

【Linux】Tcp服务器的三种与客户端通信方法及守护进程化

全是干货~ 文章目录 前言一、多进程版二、多线程版三、线程池版四、Tcp服务器日志的改进五、将Tcp服务器守护进程化总结 前言 在上一篇文章中,我们实现了Tcp服务器,但是为了演示多进程和多线程的效果,我们将服务器与客户通通信写成了一下死循…

iphone新机官网验机流程

苹果官网验机流程 进入苹果官网,找到技术支持,进入“查看保障服务和支持期限“页面,输入要查询的机器的序列号,就可以查询了。 苹果官网验机入口:https://checkcoverage.apple.com/ 输入iphone序列号进行验机&#xff…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…

【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II

文章目录 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维矩阵II⛅前言 滑动窗口最大值🔒题目🔑题解 搜索二维矩阵II🔒题目🔑题解 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维…

帖子列表和SerializerMixin注意事项

帖子序列化 继承SerializerMixin 即可调用to_dict()序列化 后端 class PostModel(db.Model, SerializerMixin):serialize_only ("id", "title", "content", "create_time", "board", "author")__tablename__ …

rabbitmq访问异常

看到这个问题,第一时间想到rabbitmq的问题,应该权限导致的 先创建virtual hosts 接着创建用户并赋予权限,将eayc的virtual hosts权限赋予acc用户即可 15:34:24.250 WARN com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connec…

线程的基本概念

线程的基本概念 1. 概念1.1 什么是线程1.2 为什么要有线程1.3 进程和线程的区别 2. 线程创建的基本方法3. Thread 类3.1. Thread 的常见构造方法3.2 Thread 类常见的几种方法 4. 线程的状态 1. 概念 1.1 什么是线程 一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯…

Vue中TodoList案例_添加

与上一篇Vue中TodoList案例_初始化列表有四个文件变化了 安装nanoid库&#xff1a; npm i nanoid App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"…

IDEA快速创建SpringBoot

文件具有错误的版本 61.0, 应为 52.0报错可以看看是不是Springboot的版本比较高 和jdk版本不匹配 package com.qf.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframewor…

【Java】 服务器cpu过高如何排查和解决?

文章目录 前言一、常见能够引起CPU100%异常的情况都有哪些&#xff1f;二、服务器CPU使用率飙升异常&#xff0c;黄金4步排查法三、排查 CPU 故障的常用命令四、什么场景会造成 CPU 低而负载确很高呢&#xff1f;五、监控发现线上机器内存占用率居高不下&#xff0c;如何分析进…