当前位置: 首页 > article >正文

RTCP协议

一、常用RTCP数据包类型

类型缩写表示解释
200SR(Sender Report)发送端报告
201RR(Receiver Report)接收端报告
202SDES(Source Description Items)源点描述
203BYE结束传输
204APP特定应用

    (一般,推流段发送SR,收流端回应RR与SEDS。

        通常,200单独使用,201与202配合使用。)

1.1 SR

数据结构

typedef struct SR {
	/* byte0 */
	uint8_t rc : 5;//接收报告计数器,5位。
	uint8_t P : 1;//填充位,1位。如果为1,则RTCP报文尾部添加 填充字节
	uint8_t version : 2;//RTCP版本号,2位。

	/* byte1 */
	uint8_t pt;//包类型,8位。SR包为200

	/* byte2-3 */
	uint16_t len;//RTCP报文长度,16位。包括填充内容

	/* byte4-7 */
	uint32_t ssrc_of_sender;//对应的RTP包的SSRC,32位。

	/* byte8-15 */
	uint64_t NTS;//发送报告的实际时间,64位。

	/* byte16-19 */
	uint64_t RTS;//数据采样时间,32位

	/* byte20-23 */
	uint32_t SPC;//从 开始发送包 至 发送此SR包,发送的RTP包数量
	//当发送者更改SSRC时,这个域会清零

	/* byte24-27 */
	uint32_t SOC;//从 开始发送包 至 发送此SR包,发送的净荷字节总数(不包含头部与填充)
	//当发送者更改SSRC时,这个域会清零

	//-----------------------报告块(开始)-----------------------
	//	接下来每24个字节为一块报告块,用于报告每个接收源的状态
	//	一个SR包可以有多个报告块
	/* byte0-3 */
	uint32_t ssrc_source;//第一个报告块 接收端 的SSRC,32位
	/* byte4-7 */
	uint32_t C : 24;//RTP包的丢包数量
	uint32_t F : 8;//RTP包的丢包率,占8位
	
	/* byte8-11 */
	uint32_t EHSN;//扩展最大序列号,32位,接收到的RTP包的最大序列号

	/* byte12-15 */
	uint32_t J;//接收抖动,32位,RTP包接收的方差估计

	/* byte16-19 */
	uint32_t LSR;//最后接收端收到的SR包的NTP的低32位
	//如果之前还没有收到SR包,则此域为0

	/* byte20-23 */
	uint32_t DLSR;//上一次发送SR包到现在的时间间隔
	//-----------------------报告块(结束)-----------------------

	/* ......这里还可以有n个报告块...... */

	/* 扩展字段(取决于P位) */
} SR;

1.2 RR

        RR与SR最大的区别就是少了20个字节的发送者信息,其余相同。

数据结构

typedef struct RR {
	uint8_t RC : 5;//报告块计数器
	uint8_t P : 1;//扩展位
	uint8_t version : 2;//RTCP版本号

	uint8_t PT;//包类型,RR为201

	uint16_t len;//包长度

	uint32_t ssrc_of_sender;//发送者的SSRC

	//-----------------------报告块(开始)-----------------------
	//	接下来每24个字节为一块报告块,用于报告每个接收源的状态
	//	一个RR包可以有多个报告块
	/* byte0-3 */
	uint32_t ssrc_source;//第一个报告块 接收端 的SSRC,32位
	/* byte4-7 */
	uint32_t C : 24;//RTP包的丢包数量
	uint32_t F : 8;//RTP包的丢包率,占8位

	/* byte8-11 */
	uint32_t EHSN;//扩展最大序列号,32位,接收到的RTP包的最大序列号

	/* byte12-15 */
	uint32_t J;//接收抖动,32位,RTP包接收的方差估计

	/* byte16-19 */
	uint32_t LSR;//最后接收端收到的SR包的NTP的低32位
	//如果之前还没有收到SR包,则此域为0

	/* byte20-23 */
	uint32_t DLSR;//上一次发送SR包到现在的时间间隔
	//-----------------------报告块(结束)-----------------------

	/* ......这里还可以有n个报告块...... */

	/* 扩展字段(取决于P位) */
} RR;

1.3 SDES

        SDES用于描述 “源”

数据结构

typedef struct SDES {
	uint8_t RC : 5;//源描述块计数器
	uint8_t P : 1;//扩展位
	uint8_t version : 2;//RTCP版本号

	uint8_t PT;//包类型,SDES为202

	uint16_t len;//包长度

	//-----------------------源描述块(开始)-----------------------
	//	一个SDES包可以有多个描述块
	uint8_t item_type;//源类型,8位
	uint8_t item_len;//源长度,8位
	//???   item_data;//源数据,长度根据item_len而定

	//-----------------------源描述块(结束)-----------------------

	/* ......这里还可以有n个源描述块...... */
} SDES;

常用源类型

CNAME唯一标识
NAME源名
EMAIL邮箱
PHONE电话
LOC位置
TOOL所用工具
NOTE备注

1.4 BYE

数据结构

typedef struct BYE {
	uint8_t RC : 5;//源描述块计数器
	uint8_t P : 1;//扩展位
	uint8_t version : 2;//RTCP版本号

	uint8_t PT;//包类型,BYE为203

	uint16_t len;//包长度

	uint32_t ssrc_of_sender;//发送BYE的发送端的SSRC
	/*这里还可以有多个ssrc_of_sender*/

	/*以下为可选项*/
	//???变长 reason; //断开连接的原因
} BYE;

http://www.kler.cn/a/302107.html

相关文章:

  • Unity3D仿星露谷物语开发8之角色移动
  • 嘉立创创建工程
  • 【C语言】深入探讨 C 语言 `int` 类型大小及其跨平台影响
  • 使用helm安装canal-server和canal-admin
  • opc da 服务器数据 转 opc ua项目案例
  • .NET Framework 逐渐过时,.NET 8和 .NET 9引领未来
  • 【数据结构(初阶)】——二叉树
  • 【go-zero】api与rpc使用etcd服务发现
  • 三维坐标变换
  • JAVA宠物界的Uber同城遛狗兼职系统小程序源码
  • 手机玩机常识-------谷歌系列机型解锁bl详细步骤 其他机型可以借鉴参考
  • EG边缘计算网关连接中移ONENET物联网平台(MQTT协议)
  • 【微处理器系统原理与应用设计第十二讲】通用定时器设计二之PWM波实现呼吸灯的功能
  • GitLab邮箱发送邮件:如何实现自动化发信?
  • unity3d c# 切换数字人效果
  • 【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】
  • 初学51单片机之IO口上下拉电阻相关
  • 渠道分析促增长,App如何靠渠道来源追踪构建评估体系
  • 大模型微调:RHLF与DPO浅析
  • Python面试宝典第48题:找丑数
  • element-plus组件问题汇总
  • javaWeb三剑客:html,css
  • “精装朋友圈”的年轻人,开始在40度高温买羽绒服
  • 青少年人工智能编程水平测试YCL备考秘籍
  • 针对Docker容器的可视化管理工具—DockerUI
  • 排序算法总结