H 264碼流結構

2021-10-03 14:04:52 字數 2804 閱讀 4140

什麼是封裝格式 ?

重新整理影象概念

在我們的印象中,一張就是一張影象,而在h264中影象是個集合的概念。

逐行掃瞄與隔行掃瞄.png

幀與場.png

h264原始碼流

h264碼流.png

乙個原始的h.264 nalu 單元常由 [startcode] [nalu header] [nalu payload] 三部分組成

nalu組成.jpeg

例如:

00 00 00 01 06:  sei資訊   

什麼是切片(slice)?

片的主要作用是用作巨集塊(macroblock)的載體(ps:下面會介紹到巨集塊的概念)。片之所以被創造出來,主要目的是為限制誤碼的擴散和傳輸。

那麼片(slice)的具體結構,我們用一張圖來直觀說明吧:

上圖結構中,我們不難看出,每個分片也包含著頭和資料兩部分:

什麼是巨集塊?

巨集塊的組成:乙個巨集塊由乙個16*16亮度畫素和附加的乙個8 * 8cb和乙個8 * 8cr彩色畫素塊組成。每個影象中,若干巨集塊被排列成片的形式。

下面是巨集塊的結構圖:

巨集塊.png

切片(slice)型別跟巨集塊型別的關係

切片(slice)來講,分為以下幾種型別:

整體結構

整體結構.png

一幀影象.png

nalu頭部的型別

enum nal_unit_type_e

;ps: 以上括號()中的為型別描述

i幀p幀

b幀幀內編碼幀

前向**編碼幀

雙向**編碼幀

通過充分低於影象序列中前面已編碼幀的時間冗餘資訊來壓縮傳輸資料編碼影象,也叫**幀

既考慮與源影象序列前面已編碼幀,也顧及源影象序列後面已編碼幀之間的時間冗餘資訊來壓縮傳輸資料量的編碼影象,也叫雙向**幀

i,p,b幀

dts,pts

dts :dts主要是標識記憶體中的bit流什麼時候開始送入解碼器進行解碼

gopgop是畫面組,乙個gop是一組連續的畫面。

gop一般有兩個數字,如m=3,n=12.m制定i幀與p幀之間的距離,n指定兩個i幀之間的距離。那麼現在的gop結構是

i bbp bbp bbp bb i

idr乙個序列的第乙個影象叫做 idr 影象(立即重新整理影象),idr 影象都是 i 幀影象。

i和idr幀都使用幀內**。i幀不用參考任何幀,但是之後的p幀和b幀是有可能參考這個i幀之前的幀的。idr就不允許這樣。

幀內**和幀間**

幀內**.png

我們可以通過第 1、2、3、4、5 塊的編碼來推測和計算第 6 塊的編碼,因此就不需要對第 6 塊進行編碼了,從而壓縮了第 6 塊,節省了空間

幀間壓縮11.jpg

可以看到前後兩幀的差異其實是很小的,這時候用幀間壓縮就很有意義。

這裡涉及到幾個重要的概念:塊匹配,殘差,運動搜尋(運動估計),運動補償.

幀間壓縮最常用的方式就是塊匹配(block matching)。找找看前面已經編碼的幾幀裡面,和我當前這個塊最類似的乙個塊,這樣我不用編碼當前塊的內容了,只需要編碼當前塊和我找到的快的差異(殘差)即可。找最想的塊的過程叫運動搜尋(motion search),又叫運動估計。用殘差和原來的塊就能推算出當前塊的過程叫運動補償(motion compensation).

H 264碼流結構

a 對照 h.263 的碼流結構 h.263 定義的碼流結構是分級結構,共四層。自上而下分別為 影象層 picture layer 塊組層 gob layer 巨集塊層 macroblock layer 和塊層 block layer psctr ptype pquant cpmpsbi trbdb...

H 264碼流結構

a 對照 h.263的碼流結構 h.263定義的碼流結構是分級結構,共四層。自上而下分別為 影象層 picture layer 塊組層 gob layer 巨集塊層 macroblock layer 和塊層 block layer psc tr ptype pquant cpmpsbi trbdbq...

H264 碼流結構詳解

nal 負責以網路所要求的恰當的方式對 vcl 資料進行打包和傳送。壓縮 幀內 和幀間 dct 變化和量化 位元流編碼 切分資料,主要為了第三步。這裡一點,網上看到的 切片 slice 巨集塊 macroblock 是在vcl 中的概念,一方面提高編碼效率和降低誤位元速率 另一方面提高網路傳輸的靈活...