Annex B 格式是 H.264 (也稱為 AVC) 視頻編碼標準中的一種數據表示格式,用于將視頻數據從編碼器傳輸到解碼器。它主要用于流媒體傳輸和文件存儲。
文章目錄
- Annex B 格式的定義
- Annex B 格式的主要特點
- Annex B 與其他格式的對比
- Annex B 格式示例
- 將 H.264 數據從 MP4 格式轉換為 Annex B 格式
- 附加信息
- H.264 標準
- MP4 容器格式
Annex B 格式的定義
在 H.264 標準中,Annex B 是一種數據格式規范,定義了如何將 H.264 碼流以適合網絡傳輸和文件存儲的方式進行編碼。Annex B 格式以一系列 NAL (Network Abstraction Layer) 單元組成,每個單元以特定的起始碼分隔。
Annex B 格式的主要特點
-
起始碼:
- 在 Annex B 格式中,每個 NAL 單元以一個或多個起始碼 (
start code
) 開始。起始碼是一個 3 字節或 4 字節的字節序列,常用的有:- 3 字節起始碼:
0x000001
- 4 字節起始碼:
0x00000001
- 3 字節起始碼:
- 這些起始碼用于標識 NAL 單元的開始位置。
- 在 Annex B 格式中,每個 NAL 單元以一個或多個起始碼 (
-
NAL 單元:
- NAL 單元是 H.264 視頻數據的基本傳輸單元,每個 NAL 單元包含一個完整的編碼視頻數據塊。
- NAL 單元可以有不同的類型,如 IDR 幀、P 幀、B 幀、SPS、PPS 等。
-
NAL 單元類型:
- 每個 NAL 單元的第一個字節包含了 NAL 單元的類型信息。常見的類型包括:
- SPS (Sequence Parameter Set):序列參數集,包含解碼視頻流所需的全局配置信息。
- PPS (Picture Parameter Set):圖像參數集,包含解碼視頻流的圖像參數信息。
- IDR (Instantaneous Decoder Refresh):關鍵幀,用于刷新解碼器的狀態。
- Non-IDR Frames:包括 I 幀、P 幀、B 幀等其他類型的幀。
- 每個 NAL 單元的第一個字節包含了 NAL 單元的類型信息。常見的類型包括:
Annex B 與其他格式的對比
特性 | Annex B 格式 | AVC/MPEG-4 Part 10 | MP4 格式 |
---|---|---|---|
起始碼 | 使用 0x000001 或 0x00000001 | 不使用起始碼 | 不使用起始碼 |
數據組織 | NAL 單元以起始碼分隔 | NAL 單元前有長度字段 | NAL 單元前有長度字段 |
用途 | 流媒體傳輸、文件存儲 | 編碼標準 | 容器格式 |
Annex B 格式示例
假設有以下 H.264 NAL 單元數據:
0x000001 0x65 0x88 0x84 0x21 0x00 0x00 0x00 0x01 0x41 0xC8 0x00 0x00 0x00 0x01 0x68 0xEB 0x21 0x00 0x00 0x00 0x01 0x65 0x88 0x84 0x21
這里的 0x000001
和 0x00000001
是起始碼,后面的字節是 NAL 單元的內容。
將 H.264 數據從 MP4 格式轉換為 Annex B 格式
MP4 格式中,NAL 單元前有一個 4 字節的長度字段,而 Annex B 格式中則使用起始碼來分隔 NAL 單元。
附加信息
H.264 標準
H.264 標準是由 ITU-T H.264 和 ISO/IEC 14496-10(MPEG-4 Part 10)定義的,用于視頻編碼的標準。它提供了高效的視頻壓縮技術,廣泛應用于視頻流媒體、高清視頻存儲等領域。
MP4 容器格式
MP4 是一種常用的多媒體文件容器格式,可以包含視頻、音頻、字幕等多種媒體數據。MP4 文件中的視頻數據通常以 AVCC 格式存儲,其中 NAL 單元前面會有一個 4 字節的長度字段。