H264码流分两种组织方式,一种是AnnexB格式,一种是AVCC格式。
首先要了解的是H.264编码规范只是规定了如何编码,并没有规定以何种方式来排列编码后的数据。就如同AES算法只是规定如何加密一组数据,并没有强制规定如果分组。H.264规范没有规定如何组织数据,但是在附录B中提供了一种可选方案,即Annex B格式。
H.264 NALU 概念
H.264视频编码后的数据叫NALU(Network Abstraction Layer Units)
。
NALU有多种类型,分为两大类:VCL(Video Coding Layer)
和 非VCL
。VCL是图像编码数据,非VCL为编码参数信息。NALU结构头部指明类型,类型字段如下。
NALU类型 | 说明 | 是否VCL |
---|---|---|
0 | Unspecified | non-VCL |
1 | Coded slice of a non-IDR picture | VCL |
2 | Coded slice data partition A | VCL |
3 | Coded slice data partition B | VCL |
4 | Coded slice data partition C | VCL |
5 | Coded slice of an IDR picture | VCL |
6 | Supplemental enhancement information (SEI) | non-VCL |
7 | Sequence parameter set (SPS) | non-VCL |
8 | Picture parameter set (PPS) | non-VCL |
9 | Access unit delimiter | non-VCL |
10 | End of sequence | non-VCL |
11 | End of stream | non-VCL |
12 | Filler data | non-VCL |
13 | Sequence parameter set extension | non-VCL |
14 | Prefix NAL unit | non-VCL |
15 | Subset sequence parameter set | non-VCL |