H264 NAL网络提取层
NAL:network abstraction layer网络提取层
H264 NAL网络提取层
NAL层的不同是为了根据不同的网络把VCL数据进行打包成不同的格式,进行传输
NAL头
用于区分不同的NAL数据,常用0x00000001或0x000001(start code)
1
2
3
4
5
如果数据内部出现0x00000001或0x000001,源数据需要进行如下替换
0x00000000 --->> 0x0000000300
0x00000001 --->> 0x0000000301
0x00000002 --->> 0x0000000302
0x00000003 --->> 0x0000000303
NALU
在网络传输过程中,NAL中的数据经过下图,封装成NALU(nal unit)单元
- SODB在后面添加了结尾若干比特“0”,字节对齐成了RBSP
- RBSP对数据进行循环检测替换加入防止字节竞争,成EBSP
- EBSP添加一个字节的header后成NALU
NALU HEADER
nalu header的结构如下:
1
2
3
4
5
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
- F:0表示payload内容没有错误,1表示payload内容可能有错误
- NRI:用来表示当前NALU单元的重要性(00~11),00为最低,表示不是用于帧间预测的参考帧,可丢弃
Type:表示当前NALU类型
1 2 3 4 5 6 7 8 9 10 11 12 13
NALU TYPE: NAL Unit Packet Packet Type Name Section Type Type ------------------------------------------------------------- 0 reserved - 1-23 NAL unit Single NAL unit packet 5.6 24 STAP-A Single-time aggregation packet 5.7.1 25 STAP-B Single-time aggregation packet 5.7.1 26 MTAP16 Multi-time aggregation packet 5.7.2 27 MTAP24 Multi-time aggregation packet 5.7.2 28 FU-A Fragmentation unit 5.8 29 FU-B Fragmentation unit 5.8 30-31 reserved
具体:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
nal_unit_type NAL类型 1 非IDR图像中不采用数据划分的片段 2 非IDR图像中A类数据划分片段 3 非IDR图像中B类数据划分片段 4 非IDR图像中C类数据划分片段 5 IDR图像的片(IDR) 6 补充增强信息单元(SEI) 7 序列参数集(SPS) 8 图像参数集(PPS) 9 分界符 10 序列结束 11 码流结束 12 填充 13…23 保留 24…31 不保留(RTP打包时会用到)
常见帧头:
1 2 3 4
00 00 00 01 67 (SPS) 00 00 00 01 68 (PPS) 00 00 00 01 65 (IDR帧) 00 00 00 01 61 (P帧)
本文由作者按照 CC BY 4.0 进行授权