从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,一经查实,立即删除!

相关文章

白话经典算法系列之中的一个 冒泡排序的三种实现

冒泡排序是很easy理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比較相邻的前后二个数据,假设前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一次遍…

如何用java代码让android Market显示指定的程序以便用户下载?

Uri uri Uri.parse("market://search?q名称");Intent i new Intent("Intent.ACTION_VIEW", uri);startActivity(i);//根据应用程序ID应用程序的包名Uri urii Uri.parse("market://details?idcom.xiaoqiu.test");Intent ii new Intent(&quo…

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

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

vs 2012,vs 2013问题系列

系统环境: 64位 win7 1,问题: 之前能连接tfs进行源码管理,期间有改过本地电脑的时间,再后来使用vs 2012连接tfs却失败了。错误码:TF31002。排除了网络问题,用户权限问题,tfs服务器问…

Linux查看系统信息的一些命令

转:http://www.cnblogs.com/chenwenbiao/archive/2011/07/18/2109983.html 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计…

CPU Cache对于并发编程的影响

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

textarea 在浏览器中固定大小和禁止拖动

http://blog.sina.com.cn/s/blog_641d569301011naz.html HTML 标签 textarea 在大部分浏览器中只要指定行&#xff08;rows&#xff09;和列&#xff08;cols&#xff09;属性&#xff0c;就可以规定 textarea 的尺寸&#xff0c;大小就不会改变&#xff0c;不过更好的办法是使…

hibernate操作时报错

报错&#xff1a;[ERROR] AbstractBatcher Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1原因&#xff1a;视具体情况而定&#xff0c;我这边是代码被修改过…

bugfix:MySQL内存使用率无限增长以及kill手法

问题&#xff1a;昨天mysql 宕机了一次&#xff0c;重启&#xff0c;然后继续运行业务代码的时候发现问题&#xff0c;mysql内存占用率上升较快&#xff0c;于是搜了搜&#xff0c;遇到一个&#xff1a; http://blog.itpub.net/29510932/viewspace-2129312/ 根据思路&#xff0…

软工之初识

我们之前已经在完全不懂软件工程的情况下&#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…

Mysql 遇到的编码问题。

今天帮小朋友做一个项目&#xff0c;碰到一个挺搞的问题。在帮她安装mysql的时候一直是next&#xff0c;没有去注意一些细节&#xff0c;不晓得有没有漏掉设置编码那一部分。。 结果在用sql文件导入数据库MySQL -h localhost -u root -p xxx < e:\xxx.sql 执行的时候错误提…

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

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

py脚本:获取进程信息

这里以mysqld进程为例子 # pip install psutil import psutil import time import re, sys# x:进程name y:非进程name # 由于这里监控的是mysqld&#xff0c;如果不加限制的话会先识别mysqld_safe&#xff0c;所以要加上mysql_safe的判别 def processinfo(x, y):p_list psut…

sysctl -P 报错解决办法

sysctl -P 报错解决办法问题症状修改 linux 内核文件 #vi /etc/sysctl.conf后执行sysctl -P 报错error: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.bridge-nf-call-iptables" is an unknown keyerror: "net.bridg…

-bash: belts.awk: command not found

执行awk命令时&#xff0c;没有问题。可是执行awk脚本时&#xff0c;出现这个问题&#xff1a;-bash: belts.awk: command not found。 既然之前直接执行awk命令没有问题&#xff0c;说明awk已经装了&#xff0c;本身是没有问题的。那就说明路径不对&#xff0c;执行echo $PATH…

nagios快速安装

1、安装软件包&#xff08;准备软件包&#xff09; yum install httpd gcc glibc glibc-common gd gd-devel 2、建立一个账户 创建一个名为nagios的帐号并给定登录口令 /usr/sbin/useradd nagios passwd nagios 创建一个用户组名为nagcmd用于从Web接口执行外部命令。将nagios用…

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

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

Effective Modern C++翻译(3)-条款2:明白auto类型推导

条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容&#xff0c;那么你几乎已经知道了所有关于auto类型推导的事情&#xff0c;因为除了一个古怪的例外&#xff0c;auto的类型推导规则和模板的类型推导规则是一样的&#xff0c;但是为什么会这样呢&#xf…

信息论与编码复习

若信源有m种消息&#xff0c;且每个消息是以相等可能产生的&#xff0c;则该信源的信息量可表示为Ilogm。 信息率是通过接收到的信息可获得的发送信息的信息量,即互信息。单位:bit/符号。 信息速率是单位时间内传输的信息量。单位:bit/s 码字CodeWord。由若干个码元组成&#x…