初识RTP协议(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuewen2008/article/details/90415768

一、H264网络传输的结构

H264在网络传输的是NALU,NALU的结构是:
NAL头 + RBSP(视频编码数据),实际传输中的数据流如同所示:

在这里插入图片描述

在这里插入图片描述

二、分包结构

RFC 3984文档中定义RTP包中携带H264的几种方式:STAP(STAP-A/B)一个RTP包中携带多个NALU单元,这些NALU的时间戳都一致。MTAP 一个RTP包中携带多个NALU单元,这些NALU的时间戳不一致。FU(FU-A/B)一个NALU由多个RTP包携带。
分包的目的:图像经过编码器产生NALU后,其数据是很可能大于UDP所能携带的最大负载长度(受MTU的大小的限制),所以一个NALU会被分到多个RTP包中携带。

在这里插入图片描述

(1)单个NAL单元包 ,nalType >= 1 && nalType <= 23。即荷载的H264码流中只有一个NAL单元。
(2)聚合包:
 a、单时间聚合包类型A(STAP-A),nalType == 24。 
 b、单时间聚合包类型B (STAP-B),nalType == 25。 
 c、多时间聚合包类型16位位移(MTAP16),nalType == 26。
 d、多时间聚合包类型24位位移(MTAP24),nalType ==27。
 e、即荷载的H264码流中有多个NAL单元。
(3)分片单元,FU-A,FU-B,用NAL单元类型 28,29标识。即用于分片单个NAL单元到多个RTP包。

三、NALU头结构分析

rtp协议荷载H264码流 去掉rtp头部之后就是H264码流的数据包 即NALU单元 其中第一个字为NALU的包头
NALU头结构
长度 1byte
Forbidden_bit(1bit) + nal_reference_bit(2bit)+Nal_unit_type(5bit)

在这里插入图片描述
F:1位 指示该NALU是否有错误。禁止位,初始为0,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。

NRI:2位 指示该NALU的重要性。NAL重要性指示,标志该NAL单元的重要性,值越大,越重要,解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU

Type:5位 指示该NALU的分包模式,其中framgment type为1-23的包为单个NALU包
FU-A的值为28。指示NALU的类型,需要关注的类型: 5 IDR,6 视频序列解码的增强信心(SEI) 7 序列参数集(SPS),8 图像参数集(PPS)

如下是抓到的单个NALU type类型为7(SPS,Sequence Parameter Set)的数据包
在这里插入图片描述

如下是抓到的单个NALU type类型为8(PPS,Picture Parameter Set)的数据

在这里插入图片描述

在这里插入图片描述
FU indicator:
F:指示该NALU是否有错误
NRI:指示该NALU的重要性
Type:指示该NALU的分包模式,FU-A的值为28

FU header:
S: 1 bit 当设置成1,开始位指示分片NAL单元的开始。
当跟随的FU荷载不是分片NAL单元荷载的开始,开始位设为0。
E: 1 bit 当设置成1, 结束位指示分片NAL单元的结束,
即, 荷载的最后字节也是分片NAL单元的最后一个字节。当跟随的 FU荷载不是分片NAL单元的最后分片,结束位设置为0。
R:1位 保留位,设置位0
Type:5位 指示NALU的类型
\

如下是抓到的h264 framgemnt type为28的数据包
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuewen2008/article/details/90415768