1) What

Receiver Estimated Max Bitrate (REMB) 提出了提出了一种RTCP消息,供在实验中使用, 它为基于RTP的媒体流部署了拥塞控制算法。

它还描述了一个绝对值时间戳选项,用于带宽估计。该反馈消息用于通知一个在同一RTP会话上有多个媒体流的发送方, 通知它在该RTP会话的接收方路径上的总的估计可用比特率。

在用于反馈消息的公共数据包头中(如[RFC4585]的6.1节所定义),“数据包发送者的SSRC” 字段指示通知的来源。 不使用“媒体源的SSRC”,并且应将其设置为0。在其他RFC中也使用零值。

媒体发送方对符合此规范的REMB消息的接收将导致该消息在RTP会话上发送的总比特率等于或低于此消息中的比特率。 新的比特率限制应尽快应用。 发送者可以根据自己的限制和估计自由应用其他带宽限制。

2) Why

发送者不知道接收方的带宽情况,它需要有一个机制由接收方告诉它有多少带宽可供传输, 这样发送方可以根据这个估计的带宽来调整分辨率(90p, 180p, 360p, 720p等)和帧率(每秒24, 30, 40, 60帧等)

3) How

  1. SDP 中包含如下属性
a=rtcp-fb:<payload type> goog-remb
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
  1. RTCP 消息

RTCP 消息格式如下:

  • 首先看它的 Payload Type,206 意谓 PSFB 即荷载特定的反馈 Payload-specific Feedback, 参见 http://www.rfcreader.com/#rfc5104 Codec Control Feedback 编码层反馈
  • 其次看它的 FMT type, 15 意谓应用层反馈 Application layer feedback
  • 然后看它的 Unique Identifier 唯一标识符 “REMB”
  • 最后看相关的 SSRC number, 即RTP流个数,计算估计出带宽为 mantissa * 2 ^ exp
0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|V=2|P| FMT=15  |   PT=206      |             length            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  SSRC of packet sender                        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                  SSRC of media source                         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Unique identifier 'R' 'E' 'M' 'B'                            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Num SSRC     | BR Exp    |  BR Mantissa                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   SSRC feedback                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  ...                                                          |

字段含义

  • version (V): (2 bits): This field identifies the RTP version. The current version is 2.

  • padding (P) (1 bit): If set, the padding bit indicates that the packet contains additional padding octets at the end that are not part of the control information but are included in the length field. Always 0.

  • Feedback message type (FMT) (5 bits): This field identifies the type of the FB message and is interpreted relative to the type (transport layer, payload- specific, or application layer feedback). Always 15, application layer feedback message. RFC 4585 section 6.4.

  • Payload type (PT) (8 bits): This is the RTCP packet type that identifies the packet as being an RTCP FB message. Always PSFB (206), Payload-specific FB message. RFC 4585 section 6.4.

  • Length (16 bits): The length of this packet in 32-bit words minus one, including the header and any padding. This is in line with the definition of the length field used in RTCP sender and receiver reports [3]. RFC 4585 section 6.4.

  • SSRC of packet sender (32 bits): The synchronization source identifier for the originator of this packet. RFC 4585 section 6.4.

  • SSRC of media source (32 bits): Always 0; this is the same convention as in [RFC5104] section 4.2.2.2 (TMMBN).

  • Unique identifier (32 bits): Always 'R' 'E' 'M' 'B' (4 ASCII characters).

  • Num SSRC (8 bits): Number of SSRCs in this message.

  • BR Exp (6 bits): The exponential scaling of the mantissa for the maximum total media bit rate value, ignoring all packet overhead. The value is an unsigned integer [0..63], as in RFC 5104 section 4.2.2.1.

  • BR Mantissa (18 bits): The mantissa of the maximum total media bit rate (ignoring all packet overhead) that the sender of the REMB estimates. The BR is the estimate of the traveled path for the SSRCs reported in this message. The value is an unsigned integer in number of bits per second.

  • SSRC feedback (32 bits) Consists of one or more SSRC entries which this feedback message applies to.

最终计算出来的带宽估计为

receiver-bit-rate = mantissa * 2^exp

4) Example

REMB 的实现可以参考 webrtc 的源码:https://source.chromium.org/chromium/chromium/src/+/master:third_party/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc

带宽的计算代码为

uint8_t exponenta = payload[13] >> 2;
uint64_t mantissa = (static_cast<uint32_t>(payload[13] & 0x03) << 16) |ByteReader<uint16_t>::ReadBigEndian(&payload[14]);
bitrate_bps_ = (mantissa << exponenta);

5) Conclusion

网络状况变化多端,时好时坏,在发送音视频不能由着性子随便发,需要根据接收者反馈的 RTCP 消息中包含的最大带宽估计调整自己的发送采样率/分辨率/帧率,也就是调整发送的码率,以满足基本的通信需求。


http://www.taodudu.cc/news/show-6975142.html

相关文章:

  • 【WebRTC】QoS 拥塞控制 GCC 理论 Sender Side BWE 或 REMB
  • WebRTC GCC 拥塞控制算法(REMB-GCC)
  • REMB 拥塞控制
  • 网络安全技术:加密、身份验证和防火墙
  • 锐捷NBR路由器远程命令执行漏洞(CNVD-2021-09650)
  • CNVD-2021-17369 -- 锐捷Smartweb管理系统 密码信息泄露漏洞
  • 网络安全标准.
  • 常见安全服务(基线加固、风险评估、应急响应、渗透测试、代码审计、重保)介绍
  • 锐捷 NBR路由器 远程命令执行漏洞(CNVD-2021-09650)
  • 防火墙功能(锐捷安全篇)
  • 修改远程服务器的登录密码
  • Mac 系统的 MySQL 如何修改密码(保姆级别教程)
  • macOS 修改mysql账号密码
  • 路由与交换:Cisco交换机配置密码
  • Cisco 交换机修改密码
  • 函数递归大总结,码住就完事啦
  • C++ 递归算法将输入的字符串倒序输出
  • C语言进阶之旅(6)递归vs迭代
  • 函数之递归迭代
  • SDUT-D-表达式语法分析——递归子程序法-附带解释函数
  • C语言——分别用递归和迭代的方法实现字符串逆序
  • 关于函数递归和函数迭代,我的理解
  • D1 记忆化搜索【递归与递推】递归函数(reduce)
  • 快速排序算法的递归,迭代法实现(C++)
  • 函数递归与迭代图解
  • 【序列】函数递归
  • ZBrush中如何导出模型和贴图
  • Zbrush建模技巧分享
  • 怎样用ZBrush对模型进行渲染(二)
  • ZBrush创建3D模型的方法

接收方带宽估计的RTCP消息 REMB相关推荐

  1. webrtc 带宽估计

            1.整体架构: 此图是接收端码率控制整体结构图分成3个部分.         第一部分采集和发送:camera encode通过Pacer并结合fec发送.         第二部分基 ...

  2. 如何做带宽估计和丢包策略

    1 建立线性模型 使用RTP 包发送 RTCP包回馈拿到延时时间,计算抖动,什么是抖动呢,多个数据包之间的延时不相同就叫抖动,非常简单,第一次发送延时20ms, 第二次发送延时10ms, 第三次发送延 ...

  3. WebRTC系列-网络之带宽估计和码率估计(1)

    文章目录 1. 一些基本概念 1.1 协议选择 1.2 拥塞的原因现象 1.3 拥塞控制的方案 1.4 WebRTC源码实现 2. 码率控制主要流程 2.1 rtcp包处理 2.2 评估模块主要类关系 ...

  4. TCP的带宽估计和丢包恢复

    TCP的带宽估计和丢包恢复 一.带宽估计 TCP的带宽估计主要通过拥塞控制算法实现,用到两个变量: 1.cwnd     TCP对当前链路可用带宽的估计 2.ssthreash   拥塞控制算法&qu ...

  5. WebRTC系列-网络之带宽估计和码率估计(4)接收端带宽估计-发送端paced

    文章目录 1. 初始化 1.1 PacedSender初始化及数据包 1.2 PacedSender中包的处理 2. pacer的启停 3. 更新pacer的码率 3. 固定频率发送数据 这篇是接收端 ...

  6. 流媒体学习之路(mediasoup)——拥塞控制分析(6)

    流媒体学习之路(mediasoup)--拥塞控制分析(6) 文章目录 流媒体学习之路(mediasoup)--拥塞控制分析(6) 一.TransportCongestionControlClient ...

  7. 【音视频第9天】WebRTC for the Curious(1)Media Communication

    https://webrtcforthecurious.com/docs/06-media-communication/#adaptive-bitrate-and-bandwidth-estimati ...

  8. RTC 系统音视频传输弱网对抗技术

    Hi~这里是25万+社交,泛娱乐,出海开发者青睐的全球互联网通信云·融云若你对国产化,协同办公解决方案感兴趣,欢迎关注本号的[兄弟号]关注[融云 RongCloud],了解协同办公平台更多干货. 今天 ...

  9. BPSK带宽频率估计

    %-------------------------------------------------------% %BPSK信号产生,500个点,100个bit %对BPSK信号进行带宽估计,重心法 ...

最新文章

  1. influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回...
  2. python可以在线编程吗-有哪些 python 的在线练习题或编程挑战的网站?
  3. JSTL中fmt标签详解
  4. 禁用浏览器滚动条的解决方案
  5. cheatengine找不到数值_彩票中奖500万,领了还不到一半?这些问题不解决,钱都拿不走...
  6. laravel的路由分组,中间件,命名空间,子域名,路由前缀(四)
  7. 【LeetCode】剑指 Offer 26. 树的子结构
  8. count(1),count(*),count(rowid)
  9. XSS(跨站脚本攻击)漏洞解决方案
  10. 数码管stm32c语言怎么实现,stm32控制数码管 - ST MCU单片机论坛 - ST(意法半导体)MCU官方技术论坛 - 21ic电子技术开发论坛...
  11. 6. laravel 控制器
  12. Java 使用Modsim32进行modbus-tcp协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改
  13. vrep和simulink联合仿真
  14. 计算机基础排版,计算机排版基础知识
  15. win 10 桌面路径还原到C盘拒绝访问
  16. 论文阅读笔记--Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods 人体姿态估计综述
  17. 51nod 1326 遥远的旅途 最短路建模
  18. android 虚拟键盘高度,获取Android中虚拟键盘的高度
  19. OKX领投的P2E平台—Klay Dice 打造属于自己的生态!
  20. 什么时候建立数据库,怎么建立数据库?

热门文章

  1. 文科专业女生转行程序员月入20k:女生不适合做程序员吗?
  2. 从经济的角度理解MSR,MSE和F统计值
  3. 学会这五个邮件办公技巧,邮件秒变“私人秘书”【注册企业邮箱】
  4. Hadoop大数据实战笔记
  5. python360指数_Python学习之单线程爬取360看看所有电视剧
  6. 计算机网络安全教程 石国志,秦文陡 10515140263 网络安全课程设计.doc
  7. 使用方便的多功能远程桌面软件-mRemote
  8. js 删除字条串首尾空格
  9. 最短路的两种解法Dijkstra和spfa
  10. 数据仓库架构和建设方法论