h264 流、幀結構


H264元素的分層結構

H.264編碼器輸出的Bit流中,每個Bit都隸屬於某個句法元素。句法元素被組織成有層次的結構,分別描述各個層次的信息。

          在H.264 中,句法元素共被組織成  序列、圖像、片、宏塊、子宏塊五個層次。在這樣的結構中,每一層的頭部和它的數據部分形成管理與被管理的強依賴關系,頭部的句法元素是該層數據的核心,而一旦頭部丟失,數據部分的信息幾乎不可能再被正確解碼出來,尤其在序列層及圖像層。

264句法元素的分層結構

        在 H.264 中,分層結構最大的不同是取消了序列層和圖像層,並將原本屬於序列和圖像頭部的大部分句法元素游離出來形成序列和圖像兩級參數集,其余的部分則放入片層。 
        參數集是一個獨立的數據單位,不依賴於參數集外的其他句法元素。一個參數集不對應某一個特定的圖像或序列,同一序列參數集可以被多個圖像參數集引用,同理,同一個圖像參數集也可以被多個圖像引用。只在編碼器認為需要更新參數集的內容時,才會發出新的參數集。

      復雜通信中的碼流中可能出現的數據單位:

264句法元素的分層結構

IDR: 在H.264中,圖像以序列為單位進行組織。一個序列的第一個圖像叫做 IDR 圖像(立即刷新圖像),IDR 圖像都是 I 幀圖像。H.264 引入 IDR 圖像是為了解碼的重同步,當解碼器解碼到 IDR 圖像時,立即將參考幀隊列清空,將已解碼的數據全部輸出或拋棄,重新查找參數集,開始一個新的序列。這樣,如果前一個序列出現重大錯誤,在這里可以獲得重新同步的機會。IDR圖像之后的圖像永遠不會使用IDR之前的圖像的數據來解碼。      IDR 圖像一定是 I 圖像,但 I 圖像不一定是 IDR 圖像。I幀之后的圖像有可能會使用I幀之前的圖像做運動參考。

 

 H264碼流結構
1. H264分層結構
H.263定義的碼流結構是分級結構,共四層。自上而下分別為:圖像層(picturelayer)、塊組層(GOB layer)、宏塊層(macroblock layer)和塊層(block layer)。而與H.263相比,H.264的碼流結構和H.263的有很大的區別,它采用的不再是嚴格的分級結構。
H.264的功能分為 兩層,視頻編碼層(VCL)和網絡提取層(NAL)VCL數據即被壓縮編碼后的視頻數據序列。在VCL數據要封裝到NAL單元中之后,才可以用來傳輸或存儲。
NAL單元格式 [2] 表1所示:
表1  NAL單元格式
    NAL頭 RBSP NAL頭 RBSP
RBSP:封裝於網絡抽象單元的數據稱之為原始字節序列載荷RBSP,它是NAL的基本傳輸單元。其中,RBSP又分為視頻編碼數據和控制數據。其基本結構是:在原始編碼數據的后面填加了結尾比特。一個bit“1”若干比特“0”,以便字節對齊。
RBSP的類型: 
RBSP 類型之一 PS: 包括序列參數集 SPS  和 圖像參數集 PPS 
        SPS 包含的是針對一連續編碼視頻序列的參數,如標識符 seq_parameter_set_id、幀數及 POC 的約束、參考幀數目、解碼圖像尺寸和幀場編碼模式選擇標識等等。 
        PPS對應的是一個序列中某一幅圖像或者某幾幅圖像,其參數如標識符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標識、片組數目、初始量化參數和去方塊濾波系數調整標識等等。 
NALU類型 
       標識NAL單元中的RBSP數據類型,其中,nal_unit_type為1, 2, 3, 4, 5及12的NAL單元稱為VCL的NAL單元,其他類型的NAL單元為非VCL的NAL單元。 
0:未規定 
1:非IDR圖像中不采用數據划分的片段 
2:非IDR圖像中A類數據划分片段 
3:非IDR圖像中B類數據划分片段 
4:非IDR圖像中C類數據划分片段 
5:IDR圖像的片段 
6:補充增強信息 (SEI) 
7:序列參數集 
8:圖像參數集 
9:分割符 
10:序列結束符 
11:流結束符 
12:填充數據 
13 – 23:保留 
24 – 31:未規定 
 
2. H.264碼流結構圖
通過相關知識的查閱,概括出 H.264的碼流結構圖[2]如圖1所示:

 

圖1 H.264的碼流結構


 

3 H.264碼流分析的應用
在有些時候,需要從H.264碼流中直接取得相關信息(如:圖像的寬度和圖像的高度等等信息)。下面介紹下取得相關信息的方法:
圖像的相關信息存儲在網絡提取層(NAL)的RBSP結構中,要取得圖像的相關信息,既要獲得圖像的相關位。需依據RBSP結構,獲得pic_width_in_mbs_minus1和pic_height_in_map_units_minus1兩個值,那么寬度為(pic_width_in_mbs_minus1+1)*16,高度為(pic_height_in_map_units_minus1+1)*16,但是有些情況還得考慮nNum_Ref_Frames的值,一般為1。
3.1獲得試驗數據
設備:SUNNIC(IP Cam)
名字:ST100factory
Firmware版本:p8b8
視頻格式:H.264
(1)將設備分辨率設成176*144,使用Ethereal等抓包工具抓得一組數據,並去掉相應的RTP頭后,該數據為0x00,0x00,0x00,0x01,0x67,0x42,0x00,0x1E,0x99,0xA0,0xB1,0x31。
(2)將設備分辨率設成720*240,使用Ethereal等抓包工具抓得一組數據,並去掉相應的RTP頭后,該數據為0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDA,0x82,0xD1,0xF1。
(3)將設備分辨率設成720*480,使用Ethereal等抓包工具抓得一組數據,並去掉相應的RTP頭后,該數據為0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDB,0x82,0xD1,0xF1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM