从WebRtc学习RTCP协议

文章目录

    • RTCP支持的消息类型
    • RTCP协议头
    • WebRTC的反馈报文
      • RTPFB支持的报文类型:
      • PSFB支持的报文类型:
  • 参考

RTCP是RTP的控制协议.
那么RTCP能对RTP做哪些控制呢?其中最为大家熟知的就是 丢包控制
发送端发送数据后,接收端如果发现有RTP包丢失了,可以使用RTCP的 NACK报文通知发送方,告诉对方具体是哪些包丢失了,然后让发送方重发前面丢失的包。
此外,接收端还可以使用RTCP的 RR报文向发送端发送接收报告,报告中记录着从上一次报告到本次报告之间丢失了多少包、丢包率是多少、延时是多少等一系列信息。
同理,发送端也可以向接收端发送 SR报文,报告一段时间内一共发送了多少包等。
RTCP支持的消息非常多,在此我们将一些最常见的RTCP报文消息整理了出来.
SR和RR报文。这两个报文在WebRTC中至关重要,因为网络质量评估与控制需要的大量参数都是从这两个报文中获得的。
下面介绍一下RTCP支持的其他的消息类型:

RTCP支持的消息类型

在这里插入图片描述
SDES报文是用来描述(音视频)媒体源的。它可以描述的内容包括媒体源的名称、Email地址,电话等。但实际上,这些描述项都没太大价值。唯一有价值的是CNAME项,其作用是将不同的源(SSRC)绑定到同一个CNAME上。举个例子,当SSRC有冲突时,可以通过CNAME将旧的SSRC更换成新的SSRC,从而保证在通信的每个SSRC都是唯一的。
BYE报文用于说明哪些(音视频)媒体源现在不可用了。当WebRTC收到该报文后,应该将SSRC所对应的通道删除。
APP报文是给应用预留的RTCP报文,应用可以根据自己的需要自定义一些应用层可以解析的报文。
RTPFB报文,即RTP的反馈报文,是指RTP传输层面的报文。该报文可以装入不同类型的子报文。
与RTPFB对应的是PSFB,即RTP中与负载相关的反馈报文。同样,该报文也可以装入不同类型的子报文。

RTCP协议头

RTCP协议头如下:
在这里插入图片描述

Version即协议版本,固定值为2。P字段为填充位标识。PT字段即Payload Type,与RTP中的PT字段类似。
RTCP中的Count字段是RTP中所没有的,该值针对RTCP中不同的报文有不同的含义:
对于RR/SR报文而言,Count表示它们所携带的接收报告的个数
SDES报文而言,Count表示SDES报文中item的个数
对于BYE报文而言,Count表示BYE报文中SSRC/CSRC的个数
而对于APP报文来说变化就比较大了,Count用于标识应用自定义的子消息类型。
Length字段表示整个RTCP包的大小,包括RTCP头、RTCP负载以及填充字节。需要注意的是,Length字段是以4字节为单位的,即(N−1)个4字节。

WebRTC的反馈报文

已知PT为205和206的报文类型属于反馈报文。报文中可以包含多个子报文,其中WebRTC使用到的报文只有某几项。

RTPFB支持的报文类型:

在这里插入图片描述
第一项NACK,用于通知发送方在上次包发送周期内有哪些包丢失了:
NACK报文中包含两个字段:PID和BLP。PID(Package ID)字段用于标识从哪个包开始统计丢包;
而BLP(16位)字段表示从PID包开始,接下来的16个RTP包的丢失情况。(BLP(Bitmask of Following Lost Packet),从丢失包开始的位掩码)
第二项TMMBR和第三项TMMBN是一对报文,TMMBR表示临时最大码流请求报文,TMMBN是对临时最大码流请求的应答报文。这两个报文虽然在WebRTC中实现了,但已被WebRTC废弃,其功能由TFB和REMB报文所代替。
第四项TFB是WebRTC中TCC[插图]算法的反馈报文,该报文会记录包的延迟情况,然后交由发送端的TCC算法计算下行带宽。(TCC(Transport-wide Congestion Control),基于发送端的带宽评估算法)

PSFB支持的报文类型:

在这里插入图片描述
PSFB报文包括PLI报文、FIR报文以及REMB报文。
其中PLI报文与FIR报文很类似,当发送端收到这两个报文时,都会触发生成关键帧(IDR帧)。
PLI报文是在接收端解码器无法解码时发送的报文。
FIR报文主要应用于多方通信时后加入房间的参与者向已加入房间的共享者申请关键帧。通过这种方式,可以保障后加入房间的参与者不会因收到的第一帧不是关键帧而引起花屏或黑屏的问题。
REMB报文是WebRTC增加的反馈报文,用于将接收端评估出的带宽值发给发送端。不过,由于最新的WebRTC已全面启用基于发送端的带宽估算方法,即TCC,因此目前REMB仅用于向后兼容,不再做进一步更新。

参考

李超《WebRTC音视频实时互动技术:原理、实战与源码分析》
https://weread.qq.com/web/reader/377320f07260a55337761c1kc81322c012c81e728d9d180

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无锁队列设计思路以及简要代码

文章目录非并发的一写一读环形队列多读多写环形队列非并发的一写一读环形队列 读指针: 1、先判断是否有数据 2、读取数据 3、操作指针 写指针: 1、先判断空间是否足够 2、写入数据 3、操作指针 所以代码也十分简单: bool putqueue(void* pDa…

CPU Cache对于并发编程的影响

文章目录引子CPU Cache对于并发的影响读写顺序对性能的影响字节对齐对Cache的影响小结引子 下面给出两个极其相似的代码&#xff0c;运行出的时间却是有很大差别&#xff1a; 代码一 #include <stdio.h> #include <pthread.h> #include <stdint.h> #includ…

软工之初识

我们之前已经在完全不懂软件工程的情况下&#xff0c;已经做完了两个小系统&#xff0c;虽然能够运行&#xff0c;但其中有很多的问题&#xff0c;学习软工就是让我们在工程学原理的指导之下去开发和设计软件。 软件工程同大多数书讲的都是一样的&#xff0c;首先对软件工程有一…

perf +火焰图使用

以mysqld进程为例&#xff1a; [rootVM-90-225-centos ~]# ps -ef | grep mysqld root 9808 9621 0 19:30 pts/7 00:00:00 grep --colorauto mysqld root 16104 1 0 17:30 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir/usr/loc…

在一个字符串中找到第一个只出现一次的字符

题目&#xff1a;在一个字符串中找到第一个只出现一次的字符&#xff0c;如输入abaccdeff&#xff0c;则输出b&#xff1b;具体实现如下&#xff1a;#include <iostream> #include <string> using namespace std; void FindChar(const string &strBuf) {int nA…

零拷贝机制在文件传输中的使用手法

文章目录文件传输&#xff08;读取与发送&#xff09;中的拷贝与上下文切换零拷贝技术sendfilesendfile SG-DMAmmap writespliceDirect I/O经典应用文件传输&#xff08;读取与发送&#xff09;中的拷贝与上下文切换 如果服务端要提供文件传输的功能&#xff0c;最简单的方式…

POJ 3233 Matrix Power Series 矩阵快速幂 + 二分

题意&#xff1a;求矩阵的次方和 解题思路&#xff1a;最容易想到方法就是两次二分因为 我们可以把一段 A^1 A^2 .......A^K 变成 A^1 ..A^(K/2) ( A^1 ..A^(K/2))*(A^(k/2)) 当k 为奇数的时候 或者 A^1 ..A^(K/2) ( A^1 ..A^(K/2))*(A^(k/2)) A^K 当K 为偶数的时候…

时间序列进行分析的一些手法以及代码实现(移动平均、指数平滑、SARIMA模型、时间序列的(非)线性模型)

文章目录1、移动平均moving average方法weighted average方法2、指数平滑单指数平滑 exponential_smoothing双指数平滑三指数平滑 Triple exponential smoothing3、平稳性以及时间序列建模SARIMA模型4、时间序列的&#xff08;非&#xff09;线性模型时间序列的滞后值使用线性回…

三大平衡树(Treap + Splay + SBT)总结+模板

Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板&#xff1a; #include <cstdio> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <cstdlib> #include <cmath…

mysqld进程 ut_delay 占用率过高

采用性能分析工具perf top -p mysqld进程 在测试mysql数据库时&#xff0c;用perf top如果看到热点函数是ut_delay或者_raw_spin_lock的话&#xff0c;说明锁争用比较严重。 ut_delay这是innodb的一个自旋琐。也就是说&#xff0c;在这里由于锁等待&#xff0c;innodb不停地在…

滑动窗口在重构数据集的作用

step1&#xff1a;使用滑动窗口重构数据集 给定时间序列数据集的数字序列&#xff0c;我们可以将数据重构为看起来像监督学习问题。 我们可以通过使用以前的时间步作为输入变量并使用下一个时间步作为输出变量来做到这一点。 通过观察重构后的数据集与原本的时间序列&…

sliverlight - Unhandled Error in Silverlight Application错误

使用firebug控制台输出错误&#xff1a; Unhandled Error in Silverlight Application 查询“GetFlow_Process”的 Load 操作失败。远程服务器返回了错误: NotFound。 位于 System.ServiceModel.DomainServices.Client.OperationBase.Complete(Exception error) 位于 System.S…

前向验证对于模型的更新作用

首先&#xff0c;让我们看一个小的单变量时间序列数据&#xff0c;我们将用作上下文来理解这三种回测方法&#xff1a;太阳黑子数据集。该数据集描述了刚刚超过 230 年&#xff08;1749-1983 年&#xff09;观察到的太阳黑子数量的每月计数。 数据集显示了季节之间差异很大的…

PHP-面向对象(八)

1、多态的介绍与优势 多态性是继抽象和继承后&#xff0c;面向对象语言的第三个特征。从字面上理解&#xff0c;多态的意思是“多种形态”&#xff0c;简单来说&#xff0c;多态是具有表现多种形态的能力的特征&#xff0c;在OO中是指“语言具有根据对象的类型以不同方式处理。…

双指数平滑中参数对于预测模型的影响

先看看α 在β一致的情况下&#xff0c;α越小&#xff0c;模型越滞后。 再看看β 在α一致的情况下&#xff0c;β越大&#xff0c;模型对于趋势的预测更敏锐。

分页查询

分页查询算是比较常用的一个查询了在DAO层主要是查两个数据第一个总条数第二个要查询起始记录数到查询的条数当第一次点击查询时候(非下一页时Page类里面预设的就是 index就是0 pageSize是预设值当点击下一页的时候 index 和 pageSize带的就是页面上面给的值了分页的页面一般的…

me23n去价格

SELECT knumv kposn AS ebelp kschl kbetr kpein kwert INTO CORRESPONDING FIELDS OF TABLE gt_konv FROM konv FOR ALL ENTRIES IN gt_ekpo WHERE knumv gt_ekpo-knumv AND kinak EQ AND kschl IN (PB00,PBXX,P101).转载于:…

使用Bootstrap-table创建表单,并且与flask后台进行数据交互

文章目录引用css和js使用htmljavascriptflaskmysql参考引用css和js Bootstrap-table为这些文件提供了 CDN 的支持&#xff0c;所以不需要下载.js .css文件就可以直接用了&#xff0c;十分方便 <!-- Latest compiled and minified CSS --> <link rel"stylesheet…

使用Xcode和Instruments调试解决iOS内存泄露

虽然iOS 5.0版本之后加入了ARC机制&#xff0c;但由于相互引用关系比较复杂时&#xff0c;内存泄露还是可能存在。所以了解原理很重要。 这里讲述在没有ARC的情况下&#xff0c;如何使用Instruments来查找程序中的内存泄露&#xff0c;以及NSZombieEnabled设置的使用。 本文假设…

五大主流浏览器 HTML5 和 CSS3 兼容性比较

转眼又已过去了一年&#xff0c;在这一年里&#xff0c;Firefox 和 Chrome 在拼升级&#xff0c;版本号不断飙升&#xff1b;IE10 随着 Windows 8 在去年10月底正式发布&#xff0c;在 JavaScript 性能和对 HTML5 和 CSS3 的支持方面让人眼前一亮。这篇文章给大家带来《五大主流…