音视频协议-RTCP协议介绍

news/2024/5/18 14:26:49 标签: 音视频, 网络, rtcp, udp

音视频协议-RTCP协议介绍

  • 1 协议简介
  • 2 协议格式介绍
    • 2.1 RTCP公共头
    • 2.2 SR协议
    • 2.3 RR协议
    • 2.4 SDES协议
    • 2.5 BYE协议
    • 2.6 APP协议
  • 3 RTCP协议限制

1 协议简介

RTCP和RTP协议是配合使用的音视频协议-RTP协议,为RTP提供信道外的传输控制,RTCP不参与数据传输,主要用于监控媒体传输的质量和传递参与者的信息。由于音视频实时传输环境一般采用UDP传输,RTCP对于音视频传输质量起到至关重要的作用,可以说没有RTCP音视频实时通信在弱网下基本没办法生存。协议内容见RFC3550

2 协议格式介绍

2.1 RTCP公共头

rtcp公共头部占16字节:不同类型有所差别,但是长度是一致的。
在这里插入图片描述
版本号(2bit):版本号为2;
填充(1bit):填充标志,同RTP的填充标志;
接收报告数量(5bit):这是SR包的定义,接收报告块数量
荷载类型(8bit):荷载类型SR、RR、SDES、BYE、APP;本文档只介绍了5种,后续介绍QOS策略还会介绍其他的协议类型;
长度(16bit):32位的数量,长度代表整个数据包的大小(协议头+荷载+填充)
同步源(32bit):发送端源
RTCP 报文类型:
在这里插入图片描述

2.2 SR协议

发送者报告包括三个部分:公共头;发送者信息;接受者信息。协议ID:200。
在这里插入图片描述
发送者信息:
NTP时间(64bit):NTP时间包括两部分组成,高位32bit表示秒钟:从1970开始计算;低位表示剩余时间精度,一般按照1代表232皮秒来计算。
RTP时间戳(32bit):与RTP时间戳计算方式一致,是根据采样率进行递增,由于与RTP时间戳一致同时又知道当前的NTP时间,因此可以用于音视频时间同步使用。
发送包数量(32bit):计算已经发送的包的数量
发送字节数(32bit):计算已经发送的字节数量
接收者信息:
接收者信息更多的是反馈信息,可以有多块接收端反馈信息块小于等于15。
接收端的源(32bit):接收端的源
丢包率(8bit):丢包率需要转换为0-255的占比;如20%丢包=20%*255=51
累计丢包数(24bit):从开始计算,丢包的数量统计,当重传后需要从丢包数中移除;
期望序列号(32bit):期望接收的最大序列号,低16位存储期望最大序列号;高16为翻转次数统计;
到达时间抖动(32bit):到达时间间隔的统计方差;
最后一次发送SR时间(32bit):LSR最后一次发送SR的时间;
最后一次接收SR到发送的时延(32bit):DLSR最后一次收到SR包后到发送中间的时延;
下图利用LSR和DLSR计算往返延迟:
在这里插入图片描述

2.3 RR协议

RR协议和SR协议内容基本一致,就是少了发送者信息部分,协议ID:201。注意空的RR报文(RC=0)需要放在符合RTCP报文的头部。
在这里插入图片描述

2.4 SDES协议

资源描述协议,最常用的就是传递CNAME名称,用于标识会话,当SSRC发生变化也能很好的匹配会话。协议ID:202。
在这里插入图片描述
SDES分为两个部分一部分:头信息和chunk信息。
源计数(5bit):用于计数后面的chunk数;
chunk分为两部分
源(32bit):源ID;
SDSE报告块
item一般是32bit的整数倍,包含一个源字段和表项数据;
表项数据包括三部分:类型字段(8bit)、长度字段(8bit)、字符串不超过255字节。
CNAME元素:

  • cname在所有参与者中是唯一的;
    在这里插入图片描述
    SDES 类型:
    在这里插入图片描述

2.5 BYE协议

BYE指示一个或者多个源退出会话。协议ID:203。
在这里插入图片描述
源数量(5bit):指示SSRC/CSRC的总数量,在头后面接的源的个数。
长度(8bit):后面字符串长度;
原因(<255):原因小于255字节。

2.6 APP协议

APP报文用于新应用程序或者新特性开发的实验使用,无需数据包类型值注册。协议ID:204。
在这里插入图片描述
子协议(5bit):自定义协议。
名字(32bit):ascii
应用数据(n*32bit):必须为32bit的整数倍。

3 RTCP协议限制

RTCP 占用带宽所增加的会话带宽部分固定在 5%,1/4 的 RTCP 带宽分给发送数据的参与者,这样在有很多接收者却只有很少的发送者的会话中,新加进来的参与者就可以更快的接收到 CNAME。当发送者的比例超过 1/4 时,发送者会按他们的比例得到 RTCP 带宽。
RTCP 报文间隔在[0.5, 1.5]是随机取值的乘以计算的间隔来避免冲突。第一个 RTCP 报文也被延迟一个随机值,这个值是在半个最小 RTCP 间隔内取值。


http://www.niftyadmin.cn/n/927461.html

相关文章

音视频协议-RTCP协议实现原理

1 前言 RTCP作为RTP控制协议&#xff0c;涵盖的内容比较多&#xff0c;用法也比较灵活&#xff0c;对于弱网下音视频质量和会话控制具有重要的作用。RTCP协议格式见&#xff1a;音视频协议-RTCP协议介绍 2 RTCP协议定义 2.1 RTCP公共头 RTCP公共头包括32字节&#xff1a;版…

事件驱动组件libevent实战

1 环境搭建 Libevent API 提供了一种机制&#xff0c;可以在文件描述符上发生特定事件或达到超时后执行回调函数。此外&#xff0c;Libevent 还支持由于信号或定期超时而引起的回调。libevent旨在替换事件驱动网络服务器中的事件循环。应用程序只需要调用 event_dispatch()&am…

读写缓冲区实现

读写缓冲区实现1 读写缓冲区概述1.1 环形缓冲区1.2 evbuffer设计2 evbuffer实现2.1 evbuffer设计原理2.2 核心API分析2.2.1 初始化evbuffer2.2.2 释放evbuffer2.2.3 添加数据2.2.4 获取evbuffer数据1 读写缓冲区概述 用户空间缓冲区存在的意义&#xff1a; &#xff08;1&…

mysql基础及操作

1 mysq环境搭建 1.1 Ubuntu16.04安装mysql apt-get install mysql-server #注意中途弹框输入&#xff1a;mysql的root密码 #安装完成后注释只允许本地连接 vi /etc/mysql/mysql.conf.d/mysqld.cnf #bind-address 127.0.0.11.2 问题&#xff1a;navicat连接数据库报…

Alexa交叉编译(avs-device-sdk)

Alexa交叉编译&#xff08;avs-device-sdk&#xff09;1 前言2 环境准备2.1 工程目录构建2.2 下载三方库文件2.3 下载源码3 编译依赖库3.1 编译portaudio3.2编译nghttp23.3 编译curl3.4 编译gstreamer3.4.1 编译zlib3.4.2 编译libffi3.4.3 编译glib3.4.4 编译gstreamer3.4.5 编…

音视频协议-SRTP

1 SRTP环境搭建 1.1 SRTP简介 STRP它是 思科的开源安全 RTP 库。RTP 是实时传输协议&#xff0c;一种用于传输实时数据&#xff08;如电话、音频和视频&#xff09;的 IETF 标准&#xff0c;由RFC 3550定义。SRTP用于为 RTP 数据提供机密性以及对 RTP 标头和有效负载进行身份…

音视频开发-视频基础

1 视频产生 视频本质就是一组连续播放的图像&#xff0c;所以研究视频离不开对于图像的研究。而图像又是由众多的色彩构成&#xff0c;这里就会涉及到图像的最小单元一个像素点的构成&#xff0c;像素点一般是由RGB三种颜色组成。 1.1 RGB图像 RGBA8888&#xff1a;一般一个…

hiredis异步操作模型

1 前言 Hiredis是一个Redis的C客户端库函数&#xff0c;基本实现了Redis的协议的最小集&#xff0c;工程上比较常使用Hiredis进行数据库的操作。本文主要介绍redis的同步操作和异步操作差异&#xff0c;以及如何实现一个中间层将异步网络事件处理模型与hireds适配。 2 同步与…