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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值