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

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

原文地址

前言

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

NAL

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

NAL-packets流

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

packet结构如下图

NAL-packet 结构

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

表1中描述了所有可能的数据包类型。

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

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。接着是一个停止位和均衡位(如下图)

Raw Byte Sequence Payload (RBSP)

SLICE

现在,让我们更进一步查看我们的比特流:

Detailed H.264 stream

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

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

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

Macroblock

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值