1. 程式人生 > >即時通訊音視訊開發(三):視訊編解碼之編碼基礎

即時通訊音視訊開發(三):視訊編解碼之編碼基礎

前言


即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。

系列文章

1. 如何理解壓縮碼流?


可按2部分進行理解:
 


  • 語法:碼流中各個元素的位置關係。
    如:01001001…,表示影象編碼型別(01),巨集塊型別(00),編碼係數1001等。
  • 語義:每個語法元素所表達的意義。
    例如:影象編碼型別。

100546diiig6dikvvdgy65.png (233Ã106)

 

2. 編碼層次的組成


編碼層次由如下部分組成:
 


  • 序列(Sequence)
  • 影象組(Group of Pictures,GOP)
  • 影象(Picture)
  • 條帶(Slice)
  • 巨集塊(Macroblock,MB)
  • 塊(Block)

 

3. 具體的碼流結構

100745g7rp7d0zr7u0k7dh.png (576Ã371)

4. PB幀編碼

101223qm68p1ql9lcc6qmn.png (576Ã377)

5. IBBP序列編碼物件

 


  • 序列是指一段連續編碼的並具有相同引數的視訊影象。
  • 序列起始碼是指專有的一段位元串,標識一個序列的壓縮資料的開始。如MPEG-2的序列起始碼為十六進位制數000001(B3)。
  • 序列頭是指記錄序列資訊,包含檔次(Profile),級別(Level),寬度,高度,是否是逐行序列,幀率等內容。
  • 序列結束碼是指專有的一段位元串,標識該序列的壓縮資料的結束。如MPEG-2的序列結束碼為十六進位制數000001(B7)。

6. 影象組編碼物件

101527zlmosudtvfhmlzs7.png (576Ã304)

7. 影象編碼結構


包括:


  • 影象。
  • 影象起始碼:專有的一段位元串,標識一個影象的壓縮資料的開始。
    如MPEG-2的影象起始碼為十六進位制數000001(00)。
  • 影象頭:記錄影象資訊。
    包含影象編碼型別,影象距離,影象編碼結構,影象是否為逐行掃描。

8. 影象分塊編碼

101741x6r6rr0eddj0z6eh.png (337Ã511)

9. 條帶編碼結構

 


  • 條帶:多個巨集塊的組合。
  • 條帶起始碼:專有的一段位元串,標識一個條帶的壓縮資料的開始。如MPEG-2的條帶起始碼為十六進位制數000001(0~AF)。
  • 條帶頭:記錄當前影象的相關資訊。含條帶位置,條帶量化引數,巨集塊編碼技術標識等。

10. 條帶編碼物件

102009ktoaznaitb6iiivn.png (576Ã407)

11. 巨集塊編碼結構

 


  • 巨集塊:16x16的畫素塊(對亮度而言)。
  • 巨集塊內容:巨集塊編碼型別,編碼模式,參考幀索引,運動向量資訊,巨集塊編碼係數等。

12. 巨集塊編碼物件

102328p4rb88sb9k9s1bvg.png (576Ã297)

13. 塊編碼結構

 


  • 8x8或4x4塊的變換量化係數的熵編碼資料。
  • CBP (Coded Block Patten):用來指示塊的變換量化係數是否全為零。
    對於YUV(4:2:0)編碼,CBP通常6位元長,每個位元對應一個塊,當某一塊的變換量化係數全為零時,其對應位元位值為0,否則為1。
  • 每個塊的變換量化係數的最後用一個EOB (End of Block)符號來標識。

14. 視訊編解碼關鍵技術

 


  • 預測:通過幀內預測和幀間預測降低視訊影象的空間冗餘和時間冗餘。
  • 變換:通過從時域到頻域的變換,去除相鄰資料之間的相關性,即去除空間冗餘。
  • 量化:通過用更粗糙的資料表示精細的資料來降低編碼的資料量,或者通過去除人眼不敏感的資訊來降低編碼資料量。
  • 掃描:將二維變換量化資料重新組織成一維的資料序列。
  • 熵編碼:根據待編碼資料的概率特性減少編碼冗餘。

102504nnbzypnl2mar0ood.png (576Ã82)

15. 預測


空間預測:利用影象空間相鄰畫素的相關性來預測的方法


  • 幀內預測技術:利用當前編碼塊周圍已經重構出來的畫素預測當前塊
  • Intra影象編碼(I幀)


時間預測:利用時間上相鄰影象的相關性來預測的方法


  • 幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)
  • Inter影象編碼:前向預測編碼影象(P幀),雙向預測編碼影象(B幀)

16. 幀內預測

 


  • I幀影象的每個巨集塊都採用幀內(Intra)預測編碼模式。
  • 巨集塊分成8x8或者4x4塊,對每個塊採用幀內預測編碼,稱作Intra8x8或者Intra4x4。
  • 幀內預測有多個預測方向:水平,垂直,左下,右上。
  • 幀內預測還有直流(DC)預測。
  • 色度塊預測還有平面預測。

102652f1vtkdgt993j7rad.png (576Ã452)

17. 量化

 

1量化原理


將含有大量的資料集合對映到含有少量的資料集合中。

103023bzp1131pl555plc2.png (576Ã363)

103023rl55gkkpyy5jgz4m.png (496Ã257)

103024evm2zr1pmmppprq8.png (576Ã252)

103024hmxem82khg8hkhyk.png (576Ã388)

103024fy6glzlm7l8oz796.png (576Ã376)

一般情況下量化後高頻部分包含大量的零係數

103121q1s149s9mxmavags.png (576Ã208)

量化對主觀質量的影響

103155t9y92iuyi27b9zi2.png (576Ã345)

18. 位元速率控制


受到緩衝區,頻寬的限制,編碼位元速率不能無限制的增長,因此需要通過位元速率控制來將編碼碼流控制在目標位元速率範圍內。

一般通過調整量化引數的手段控制碼率:
 


  • 幀級控制
  • 條帶級控制
  • 巨集塊級控制


位元速率控制考慮的問題:


  • 防止碼流有較大的波動,導致緩衝區發生溢位,
  • 同時保持緩衝區儘可能的充滿,讓影象質量儘可能的好而且穩定


CBR(Constant Bit Rate):位元率穩定,但影象質量變化大。VBR(Variable Bit Rate):位元率波動大,但影象質量穩定。

位元速率控制演算法:


  • 位元速率分配
  • 位元速率控制


位元速率控制屬於非標準技術,編碼端有,解碼端沒有。

網易雲信,你身邊的即時通訊和音視訊技術專家,瞭解我們,請戳網易雲信官網

想要閱讀更多行業洞察和技術乾貨,請關注網易雲信部落格

本文轉載自52im,作者:JackJiang