rtsp协议中数据的分包

前言

RTSP视频传输推流中,数据采用数据包的形式推送到指定端口,一个完整数据包由包头和包内数据组成。
由于H.264与H.265压缩数据格式不一致,故两者相关接口数据协议也不一致。
在标准以太网通信中,数据包通常有MTU限制,系统默认MTU值为1500,故压缩图像数据中,当每包传输数据大于1500Byte时,采用分包传输。

RTSP包头

RTSP包由RTSP头部和RTSP载荷构成,包头如表B.1:

V:2Bit,用来标志使用RTSP版本,此处设置为2。
P:1Bit,填充位,根据RTSP协议标准,当前不使用加密算法,此位为0。
X:1Bit,扩展位,根据RTSP协议标准,当前固定头后面不跟随头扩展,此位为0.
CC:4Bit,CSRC 计数,4 位。表示跟在 RTP 固定包头后面CSRC 的数目,对于本文所要实现的基本的流媒体服务器来说,没有用到混合器,该位也设为 0x0。
M:1Bit,如果当前 NALU为一个接入单元最后的那个NALU,那么将M位置 1;或者当前RTP 数据包为一个NALU 的最后的那个分片时(NALU 的分片在后面讲述),M位置 1。其余情况下M 位保持为 0。
PT:7Bit,载荷类型,对于H.264 和H.265视频格式,当前并没有规定一个默认的PT 值。因此选用大于 95 的值可以。此处设为0x60(十进制96)。
SN:16Bit,发送方在每发送完一个RTP包后就将该域的值增加1,可以由该域检测包的丢失及恢复包的序列,序列号的初始值是随机的,一般初始化为0。
时间戳:时间戳,32 位。同序号一样,时间戳的起始值也为随机值,此处设为0。根据RTSP协议标准与时间戳相应的时钟频率必须为90000HZ。 接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
同步源标识符(SSRC):32比特,同步源就是RTP包源的来源。在同一个RTP会话中不能有两个相同的SSRC值
贡献源列表(CSRC List):0-15项,每项32比特,这个不常用

H.264/H.265包头

表B.2 H.264/H.265包头信息表

在这里插入图片描述

H.264 Nalu信息

H.264Nalu由一个字节构成,详见表B.3。
在这里插入图片描述
forbidden_zero_bit :禁止位,0正常,1为语法有错误
nal_ref_idc:参考级别,表示NAL的优先级,0-3, 取值越大,表示当前NAL越重要,如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要单位时,取值必须>0;
nal_unit_type:该帧的类型,类型说明表 B.4;
表B.4 类型说明表
在这里插入图片描述

H.265 Nalu信息

H.265Nalu由两个字节构成,详见表B.5。
在这里插入图片描述
F:forbidden_ero_bit, 禁止位,0正常,1为语法有错误。
LayId:通常为0。
Tid:通常为1。
Type:该帧的类型,主要类型见表B.6。
表B.6 类型说明表
在这里插入图片描述

RPST数据包

长度小于MTU的NAL单元数据,只要在读取完该单元后,去掉起始码(0x 00 00 00 01),就可以直接作为rtp负载内容加载到rtp包头部后发送出去了,H.264和H.265移植。每个IDR帧对应的sps、pps、sei包时间戳一致。

RPST H.264分包

长度大于MTU的NAL单元数据,需要分包发送数据,过长的数据经过UDP或者TCP发送时会自动被分包发送,到接收端会产生粘包等问题,这里常用FU进行分包,分包格式表B.7。
表B.7 H.264分包说明表
在这里插入图片描述
F :禁止位,0正常,1为语法有错误
NRI:参考级别,表示NAL的优先级,0-3, 取值越大,表示当前NAL越重要,如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要单位时,取值必须>0;
TYPE:固定值28;
S:Start,表示分片包的第一包
E:End,表示分片包的最后一包
R:缺省值0(保留)
TYPE:nal_unit_type
当分片包不是第一包也不是最后一包时,S、E都为0;

RPST H.265分包

长度大于MTU的NAL单元数据,需要分包发送数据,过长的数据经过UDP或者TCP发送时会自动被分包发送,到接收端会产生粘包等问题,这里常用FU进行分包,分包格式表B.7。
表B.7 H.264分包说明表
在这里插入图片描述
S E TYPE F NRI TYPE
F :禁止位,0正常,1为语法有错误
NRI:参考级别,表示NAL的优先级,0-3, 取值越大,表示当前NAL越重要,如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要单位时,取值必须>0;
TYPE:固定值28;
S:Start,表示分片包的第一包
E:End,表示分片包的最后一包
TYPE:nal_unit_type
当分片包不是第一包也不是最后一包时,S、E都为0;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值