即时通讯音视频开发(三):视频编解码之编码基础
前言
即時通訊應(yīng)用中的實時音視頻技術(shù),幾乎是IM開發(fā)中的最后一道高墻。原因在于:實時音視頻技術(shù) = 音視頻處理技術(shù) + 網(wǎng)絡(luò)傳輸技術(shù) 的橫向技術(shù)應(yīng)用集合體,而公共互聯(lián)網(wǎng)不是為了實時通信設(shè)計的。
系列文章
- 《即時通訊音視頻開發(fā)(一):視頻編解碼之理論概述》
- 《即時通訊音視頻開發(fā)(二):視頻編解碼之?dāng)?shù)字視頻介紹》
1. 如何理解壓縮碼流?
可按2部分進(jìn)行理解:
?
- 語法:碼流中各個元素的位置關(guān)系。
如:01001001…,表示圖像編碼類型(01),宏塊類型(00),編碼系數(shù)1001等。 - 語義:每個語法元素所表達(dá)的意義。
例如:圖像編碼類型。
?
2. 編碼層次的組成
編碼層次由如下部分組成:
?
- 序列(Sequence)
- 圖像組(Group of Pictures,GOP)
- 圖像(Picture)
- 條帶(Slice)
- 宏塊(Macroblock,MB)
- 塊(Block)
?
3. 具體的碼流結(jié)構(gòu)
4. PB幀編碼
5. IBBP序列編碼對象
?
- 序列是指一段連續(xù)編碼的并具有相同參數(shù)的視頻圖像。
- 序列起始碼是指專有的一段比特串,標(biāo)識一個序列的壓縮數(shù)據(jù)的開始。如MPEG-2的序列起始碼為十六進(jìn)制數(shù)000001(B3)。
- 序列頭是指記錄序列信息,包含檔次(Profile),級別(Level),寬度,高度,是否是逐行序列,幀率等內(nèi)容。
- 序列結(jié)束碼是指專有的一段比特串,標(biāo)識該序列的壓縮數(shù)據(jù)的結(jié)束。如MPEG-2的序列結(jié)束碼為十六進(jìn)制數(shù)000001(B7)。
6. 圖像組編碼對象
7. 圖像編碼結(jié)構(gòu)
包括:
- 圖像。
- 圖像起始碼:專有的一段比特串,標(biāo)識一個圖像的壓縮數(shù)據(jù)的開始。
如MPEG-2的圖像起始碼為十六進(jìn)制數(shù)000001(00)。 - 圖像頭:記錄圖像信息。
包含圖像編碼類型,圖像距離,圖像編碼結(jié)構(gòu),圖像是否為逐行掃描。
8. 圖像分塊編碼
9. 條帶編碼結(jié)構(gòu)
?
- 條帶:多個宏塊的組合。
- 條帶起始碼:專有的一段比特串,標(biāo)識一個條帶的壓縮數(shù)據(jù)的開始。如MPEG-2的條帶起始碼為十六進(jìn)制數(shù)000001(0~AF)。
- 條帶頭:記錄當(dāng)前圖像的相關(guān)信息。含條帶位置,條帶量化參數(shù),宏塊編碼技術(shù)標(biāo)識等。
10. 條帶編碼對象
11. 宏塊編碼結(jié)構(gòu)
?
- 宏塊:16x16的像素塊(對亮度而言)。
- 宏塊內(nèi)容:宏塊編碼類型,編碼模式,參考幀索引,運動矢量信息,宏塊編碼系數(shù)等。
12. 宏塊編碼對象
13. 塊編碼結(jié)構(gòu)
?
- 8x8或4x4塊的變換量化系數(shù)的熵編碼數(shù)據(jù)。
- CBP (Coded Block Patten):用來指示塊的變換量化系數(shù)是否全為零。
對于YUV(4:2:0)編碼,CBP通常6比特長,每個比特對應(yīng)一個塊,當(dāng)某一塊的變換量化系數(shù)全為零時,其對應(yīng)比特位值為0,否則為1。 - 每個塊的變換量化系數(shù)的最后用一個EOB (End of Block)符號來標(biāo)識。
14. 視頻編解碼關(guān)鍵技術(shù)
?
- 預(yù)測:通過幀內(nèi)預(yù)測和幀間預(yù)測降低視頻圖像的空間冗余和時間冗余。
- 變換:通過從時域到頻域的變換,去除相鄰數(shù)據(jù)之間的相關(guān)性,即去除空間冗余。
- 量化:通過用更粗糙的數(shù)據(jù)表示精細(xì)的數(shù)據(jù)來降低編碼的數(shù)據(jù)量,或者通過去除人眼不敏感的信息來降低編碼數(shù)據(jù)量。
- 掃描:將二維變換量化數(shù)據(jù)重新組織成一維的數(shù)據(jù)序列。
- 熵編碼:根據(jù)待編碼數(shù)據(jù)的概率特性減少編碼冗余。
15. 預(yù)測
空間預(yù)測:利用圖像空間相鄰像素的相關(guān)性來預(yù)測的方法
- 幀內(nèi)預(yù)測技術(shù):利用當(dāng)前編碼塊周圍已經(jīng)重構(gòu)出來的像素預(yù)測當(dāng)前塊
- Intra圖像編碼(I幀)
時間預(yù)測:利用時間上相鄰圖像的相關(guān)性來預(yù)測的方法
- 幀間預(yù)測:運動估計(Motion Estimation,ME),運動補(bǔ)償(Motion Compensation,MC)
- Inter圖像編碼:前向預(yù)測編碼圖像(P幀),雙向預(yù)測編碼圖像(B幀)
16. 幀內(nèi)預(yù)測
?
- I幀圖像的每個宏塊都采用幀內(nèi)(Intra)預(yù)測編碼模式。
- 宏塊分成8x8或者4x4塊,對每個塊采用幀內(nèi)預(yù)測編碼,稱作Intra8x8或者Intra4x4。
- 幀內(nèi)預(yù)測有多個預(yù)測方向:水平,垂直,左下,右上。
- 幀內(nèi)預(yù)測還有直流(DC)預(yù)測。
- 色度塊預(yù)測還有平面預(yù)測。
17. 量化
?
1量化原理
將含有大量的數(shù)據(jù)集合映射到含有少量的數(shù)據(jù)集合中。
一般情況下量化后高頻部分包含大量的零系數(shù)
量化對主觀質(zhì)量的影響
18. 碼率控制
受到緩沖區(qū),帶寬的限制,編碼碼率不能無限制的增長,因此需要通過碼率控制來將編碼碼流控制在目標(biāo)碼率范圍內(nèi)。
一般通過調(diào)整量化參數(shù)的手段控制碼率:
?
- 幀級控制
- 條帶級控制
- 宏塊級控制
碼率控制考慮的問題:
- 防止碼流有較大的波動,導(dǎo)致緩沖區(qū)發(fā)生溢出,
- 同時保持緩沖區(qū)盡可能的充滿,讓圖像質(zhì)量盡可能的好而且穩(wěn)定
CBR(Constant Bit Rate):比特率穩(wěn)定,但圖像質(zhì)量變化大。VBR(Variable Bit Rate):比特率波動大,但圖像質(zhì)量穩(wěn)定。
碼率控制算法:
- 碼率分配
- 碼率控制
碼率控制屬于非標(biāo)準(zhǔn)技術(shù),編碼端有,解碼端沒有。
網(wǎng)易云信,你身邊的即時通訊和音視頻技術(shù)專家,了解我們,請戳網(wǎng)易云信官網(wǎng)
想要行業(yè)洞察和技術(shù)干貨,請關(guān)注網(wǎng)易云信博客
本文轉(zhuǎn)載自52im,作者:JackJiang
總結(jié)
以上是生活随笔為你收集整理的即时通讯音视频开发(三):视频编解码之编码基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网1分钟 |1105
- 下一篇: 即时通讯音视频开发(五):认识主流视频编