[翻译]H.264 探索 第二部分 H264码流格式

H.264 探索 第二部分 H264码流格式

原文地址html

前言

先前的话题是关于色彩模型,以及如何存储像素色彩数据的。如今是时候去更深了解H.264码流格式,并找到这些像素的数据。
图片描述segmentfault

NAL

显然,解码器接收一个特定的格式的比特序列,并进行操做。二进制流是结构化的,由packets组成。在上层,流由NAL-packets组成,并具备如下形式:网络

NAL-packets流

NAL表示Network Abstraction Layer(网络抽象层)的缩写。数据结构

packet结构以下图编码

NAL-packet 结构

NAL-packet的第一个字节是一个包含关于packet的类型信息的报头。spa

表1中描述了全部可能的数据包类型。code

Type Definition
0 Undefined
1 Slice layer without partitioning non IDR
2 Slice data partition A layer
3 Slice data partition B layer
4 Slice data partition C layer
5 Slice layer without partitioning IDR
6 Additional information (SEI)
7 Sequence parameter set
8 Picture parameter set
9 Access unit delimiter
10 End of sequence
11 End of stream
12 Filler data
13..23 Reserved
24..31 Undefined

NAL类型定义了当前NAL-packet数据结构。它能够是slice,parameter set,filler等等。
如从图中能够看出, NAL-packet的有效载荷被定义为RBSP(Raw Byte Sequence Payload)。
RBSP描述了一行被定义为SODB(String Of Data Bits)的字节集。因此RBSP包含SODB。
根据ITU-T规范,若是SODB为空(0比特长度),RBSP也为空。
RBSP的第一字节(最显著,最左边)包含八位SODB; RBSP的下一个字节应该也包括如下八个SODB等等,直到有少于8位SODB。接着是一个中止位和均衡位(以下图) orm

Raw Byte Sequence Payload (RBSP)

SLICE

如今,让咱们更进一步查看咱们的比特流: 视频

Detailed H.264 stream

任何已编码图片都包含slice(切片),slice包含macroblocks(宏块)。大多数状况下,一个已编码图像对应于一个切片。此外,一个图像能够有多个切片。所述切片被分为如下类型:htm

Type Description
0 P-slice. Consists of P-macroblocks (each macro block is predicted using one reference frame) and / or I-macroblocks.
1 B-slice. Consists of B-macroblocks (each macroblock is predicted using one or two reference frames) and / or I-macroblocks.
2 I-slice. Contains only I-macroblocks. Each macroblock is predicted from previously coded blocks of the same slice.
3 SP-slice. Consists of P and / or I-macroblocks and lets you switch between encoded streams.
4 SI-slice. It consists of a special type of SI-macroblocks and lets you switch between encoded streams.
5 P-slice.
6 B-slice.
7 I-slice.
8 SP-slice.
9 SI-slice.

看起来像上表包含了一些冗余数据,但事实并不是如此:
类型5 - 9意味着当前图像的全部其余切片将是同一类型。正如你所看到的每一个切片都由header和data组成。切片头包含了关于切片类型,切片宏块的类型,切片帧的数量的信息。固然切片头也包含了参照帧的设置(the reference frame settings)和量化参数(quantification parameters)的信息。最好,咱们来查看切片data,这是储存像素数据的地方。宏块是信息的主要载体,由于它们包含将对应于单个像素的亮度和色度份量的集合。无需进入细节能够得出结论,不考虑细节能够得出的结论是,视频解码最终能够简化为从比特流中对宏块的搜索和提取,以及后续借助亮度和色度份量对像素颜色的恢复。宏块组成以下图:

Macroblock

在这里,咱们有宏块类型,预测类型(这是下一文章的主题),编码块模式(Coded Block Pattern),量化参数(Quantization Parameter )(若是咱们有CPB),最后数据(data):亮度和色度份量的集合。

相关文章
相关标签/搜索