[翻譯]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):亮度和色度份量的集合。

相關文章
相關標籤/搜索