标签:标准 代码 parent otto 教程 plane 实战 imp 分数
我们已经知道,整个H.264的码流结构可以分为两层:网络抽象层NAL和视频编码层VCL。在NAL层,H.264的码流表示为一系列的NAL Units,不同的NAL Units中包含不同类型的语法元素。前面两篇中所解析的序列参数集SPS和图像参数集PPS就是其中重要的两个部分,其中包含了控制解码过程的一些通用的参数。
实际保存原始视频的图像数据的部分保存在其他的VCL层的NAL Units中。这部分数据在码流中称作是条带(Slice)。一个Slice包含一帧图像的部分或全部数据,换言之,一帧视频图像可以编码为一个或若干个Slice。一个Slice最少包含一个宏块,最多包含整帧图像的数据。在不同的编码实现中,同一帧图像中所构成的Slice数目不一定相同。
在H.264中设计Slice的目的主要在于防止误码的扩散。因为不同的slice之间,其解码操作是独立的。某一个slice的解码过程所参考的数据(例如预测编码)不能越过slice的边界。
根据码流中不同的数据类型,H.264标准中共定义了5总Slice类型:
在I slice中只包含I宏块,不能包含P或B宏块;在P和B slice中,除了相应的P和B类型宏块之外,还可以包含I类型宏块。
每一个Slice总体来看都由两部分组成,一部分作为Slice header,用于保存Slice的总体信息(如当前Slice的类型等),另一部分为Slice body,通常是一组连续的宏块结构(或者宏块跳过信息),如下图所示:
Slice header中主要保存了当前slice的一些全局的信息,slice body中的宏块在进行解码时需依赖这些信息。其中比较常见的一些语法元素有:
整个slice header的结构如下表所示:
【H.264/AVC视频编解码技术详解】十一、H.264的Slice Header解析
标签:标准 代码 parent otto 教程 plane 实战 imp 分数
原文地址:http://blog.csdn.net/shaqoneal/article/details/53209131