1. 程式人生 > >H264編碼器引數理解 (部分)“I幀”和“幀間距”等的理解

H264編碼器引數理解 (部分)“I幀”和“幀間距”等的理解

寫作背景:最近在研究H264編碼器的引數,裡面的引數不太懂,其中包括:

1)  30 # i intervals  // I 幀間距

2)30 # idr intervals// idr幀間距

3)   0 # b frame number between 2 p-frame(0, 1, 2)

4).  0 # min qp //最小量化步長
5).  51 # max qp//最大量化步長

6)  200000 # bps位元速率
7)  30 # framerate(rc only)//幀率

先對簡單的進行解釋:

2)idr幀間距

IDR幀是視訊流的“分隔符”,所有幀都不可以使用越過關鍵幀的幀作為參考幀。IDR幀是I幀的一種,所以它們也不參照其它幀。這意味著它們可以作為視訊的搜尋(seek)點。
通過這個設定可以設定IDR幀的最大間隔幀數(亦稱最大影象組長度)。較大的值將導致IDR幀減少(會用佔用空間更少的P幀和B幀取代),也就同時減弱了參照幀選擇的限制。較小的值導致減少搜尋一個隨機幀所需的平均時間。
建議:預設值(fps的10倍)對大多數視訊都很好。如果在為藍光、廣播、直播流或者其它什麼專業流編碼,也許會需要更小的影象組長度(一般等於fps)。

3)b幀數

B幀數(Number of B-Frames):在IP幀之間可插入的B幀數量最大值,範圍0~16,可以 

      #大大提高 壓縮比,建議選擇2

4)min qp 最小量化步長

說明:設定x264可以使用的最小量化器。量化引數越小,輸出越接近輸入。使用某些值時,x264的輸出可以和輸入看起來完全一樣,雖然其實並不是精確相同的,通常就夠了沒有必要使用更多位元在巨集塊上了。
如果開啟了自適應量化器(預設開啟),則不鼓勵提高qpmin的值,那樣可能會降低幀的平坦部分的質量。


5)max qp最大量化步長

說明:qpmin的反面,設定x264可以使用的最大量化器。預設值51是H.264標準中的最大值,質量非常低。預設值51其實相當於沒有設定qpmax。如果你想控制x264輸出的最低品質,也許你想要把這個值調低一點(調到30-40最低了),但一般而言不推薦調節這個值。

6)碼流(Data Rate)

是指視訊檔案在單位時間內使用的資料流量,也叫位元速率,是他是視訊編碼中畫面質量控制中最重要的部分。同樣解析度下,視訊檔案的碼流越大,壓縮比就越小,畫面質量就越高。

7) 幀率

幀率是一秒播放的視訊中有多少個幀。幀是組成視訊的基本單位。視訊檔案本身是由很多連續的圖片組成,簡單的可以理解為幀率就是一秒內錄下的圖片數量(實際上這些圖片通過壓縮,一幀資料不一定儲存的是一個完成圖片

I幀

I幀(I frame) 又稱為內部畫面 (intra picture),I 幀通常是每個 GOP(MPEG 所使用的一種視訊壓縮技術)的第一個幀,經過適度地壓縮,做為隨機訪問的參考點,可以當成圖象。在MPEG編碼的過程中,部分視訊幀序列壓縮成為I幀;部分壓縮成P幀;還有部分壓縮成B幀。I幀法是幀內壓縮法,也稱為“關鍵幀”壓縮法。I幀法是基於離散餘弦變換DCT(Discrete Cosine Transform)的壓縮技術,這種演算法與JPEG壓縮演算法類似。採用I幀壓縮可達到1/6的壓縮比而無明顯的壓縮痕跡。

  幀是組成視訊影象的基本單位。關鍵幀也叫I幀,它是幀間壓縮編碼裡的重要幀;它是一個全幀壓縮的編碼幀;解碼時僅用I幀的資料就可重構完整影象;- D% j" B. F1 8 h3 z1 l) q& S% ]% l5 nI幀不需要參考其他畫面而生成。視訊檔案是由多個連續的圖片組成。

  在視訊會議系統中,終端傳送給MCU(或者MCU傳送給終端)的影象,並不是每次都把完整的一幅幅圖片傳送到遠端,而只是傳送後一幅畫面在前一幅畫面基礎上發生變化的部分。如果在網路狀況不好的情況下,終端的接收遠端或者傳送給遠端的畫面就會有丟包而出現影象花屏、影象卡頓的現象,在這種情況下如果沒有I幀機制來讓遠端重新發一幅新的完整的影象到本地(或者本地重新發一幅新的完整的影象給遠端),終端的輸出影象的花屏、卡頓現象會越來越嚴重,從而造成會議無法正常進行。

  在視訊會議系統中I幀只會在會議限定的頻寬內發生,不會超越會議頻寬而生效。I幀機制不僅存在於MCU中,電視牆伺服器、錄播伺服器中也存在。就是為了解決在網路狀況不好的情況下,出現的丟包而造成的如影象花屏、卡頓,而影響會議會正常進行。

30幀發一個I幀, 所以I幀大一點

幀間距

1.什麼是 IFG?(What)

IFG(Interframe Gap),幀間距,乙太網相鄰兩幀之間的時間斷;乙太網傳送方式是一個幀一個幀傳送的,幀與幀之間需要間隙,即幀間距IFG也可稱其為IPG (Interpacket Gap)。IFG指的是一段時間,不是距離,單位通常用微秒(μs)或納秒(ns)。如下圖所示:

ifg

圖 1 幀間距

2.為什麼需要IFG?(Why)

網路裝置和元件在接收一個幀之後,需要一段短暫的時間來恢復併為接收下一幀做準備。

3.IFG的大小為多少?(Importance)

IFG的最小值是 96 bit time,即在媒介中傳送96位原始資料所需要的時間,在不同媒介中IFG的最小值是不一樣的:

不管 10M/100M/1000M的乙太網,兩幀之間最少要有96bit;IFGmin=96bit/speed   (s)

則:10Mmin:          9600 ns

      100Mmin:         960 ns

1000Mmin:        96 ns

4.如何使用IFG?(How)

舉個具體例子說明,IFG在乙太網的流控機制中解決速度匹配問題;

這裡涉及到乙太網的流控機制,如下圖:

乙太網傳輸示例

圖 2乙太網傳輸示例

1)     裝置1以其自身的工作時鐘(OSC1) 向裝置2傳送到待發資料;

2)     資料包進入裝置2:

a)     經過時鐘資料恢復器(CDR)的處理,從資料中提取時鐘,並基於提取的時鐘(CLK2),將資料包存入接收快取,此時,CLK2和OSC1是同步的;

b)     資料從接收快取,經過上層協議的處理,存入傳送快取;

3)     傳送快取以裝置2的工作時鐘(OSC2)傳送資料,由於乙太網是非同步工作的,故OSC1和OSC2作為不同裝置的本地時鐘,並不能做到完全同頻(乙太網裝置的工作時鐘允許有正負50ppm的頻差),上圖假設OSC1大於OSC2,那麼裝置2的接收的速度將大於傳送的速度,如果接收緩衝滿了,將造成丟包;

如何解決上述丟包問題?

在裝置2的傳送側通過減小IFG(幀間距)來加快其傳送有效資料包的速度,從而使得傳送速度能跟上接收速度。

5.IFG在我們實際工作的應用?

這裡主要提到Smartbit 6000C 在產測中的使用。

使用原理:

IFG增大,裝置的有效速度減小,可以解決因速度過快丟包的問題;

IFG減小(但必須大於 96 bit time),裝置的有效速度增大,可以解決因速度過慢導致測試超時的問題。

參考資料:

[3] thernet .http://www.cisco.com/en/US/docs/internetworking/technology/handbook/Ethernet.pdf