NAL单元的各种类型如下表所示:
NAL分为VCL的NAL单元和非VCL的NAL单元。
一个以IDR Access Unit开始的Coded Sequence,由一个或多个IDR Slices组成,每一个都是Intra Coded Slice。然后紧接着就是非IDR Slice或分割Slice。非VCL的NAL单元包括PSP、SEI等,这些参数对解码和显示视频都是很有用的。
1、A、B和C类数据分割
组成Slice的Coded Data被存放在三种数据分割中,A、B和C类数据分割。每种分割包含Coded Slice的一个子集。每种分割被单独的存放在一个NAL单元中,因此可以被单独传输。
A类数据分割:包含Slice的头和每个宏块的头;
B类数据分割:包含Intra和SI Slice宏块的被编码的Residual数据;
C类数据分割:包含P、B和SP Slice宏块的被编码的Residual数据。
如果A类数据分割丢失,很难甚至不可能重构其所在的Slice。三类数据分割在对错误的容忍度方面相比,A最不能容忍错误的出现,而C的容错能力最强。在一个容易出错的环境,提高性能的策略包括:对这三种数据分割应用非均匀错误保护。例如,对A类数据分割使用向前纠错,通过不同的通道传输不同类型的数据分割,或者给A类数据分割选择一个最可靠的通道。
2、SEI
SEI(Supplemental Enhancement Information),补充增强信息,这部分参数可以作为H.264的比特流数据而被传输,每一个SEI信息被封装成一个NAL单元。SEI对于解码器来说可能是有用的,但是对于基本的解码过程来说,并不是必须的。
3、PPS和SPS
Parameter Sets是携带解码参数的NAL Units。发送这些参数采用独立于Coded Slices的方式能够提高效率,因为共用的参数仅仅需要传输一次。Parameter Sets对于正确的解码是非常重要的。在一个有损耗的传输场景,在传输过程中比特流或包可能丢失或损坏。在这种网络环境中,Parameter Sets可以通过高质量的服务来发送,比如向前纠错机制或优先级机制。
Parameter Sets与其之外的句法元素之间的关系如下图所示:
SPS(Sequence Parameter Set)包含一些通用的参数,比如Profile和Level,比如视频帧的尺寸,参考帧的最大数量等,这些参数对整个Video Sequence或者Programme都是通用的。PPS(Picture Parameter Set)包含一些通用的参数,比如熵编码类型,有效的参考图像的数目和初始化参数等,这些参数可以应用到一个Video Sequence或者一部分编码帧。
一个Parameter Set在开始的时候是不活跃的,直到被激活。一个PPS被预先传到解码器,当在一个Slice Header中涉及到的时候,就会被激活,而且直到一个不同的PPS被激活。对于SPS,当一个PPS涉及到它的时候,就会被激活。对于一个以IDR Access Unit开始的Coded Video Sequence,在整个过程中,一个SPS会一直处于活跃状态。因此,一个SPS可以有效的被IDR Slice激活。
4、序列结束符和流结束符
序列结束符表明下一个Access Unit是IDR,比如一个新的Coded Video Sequence的开始。
流结束符表明比特流的结束。