直播技術總結(四)音視頻數據壓縮及編解碼基礎

轉載請把頭部出處連接和尾部二維碼一塊兒轉載。本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/60480109android

音視頻壓縮技術是編解碼中難點。常常會涉及很是多算法處理問題。數據封裝,轉封裝等,看下Agenda:算法

  • 音視頻爲什麼需要壓縮?
  • 壓縮編碼的分類
  • 常用壓縮編碼的方法
  • 編碼器中的關鍵技術
    • 預測
    • 量化
    • 變換
    • 熵編碼
  • 編解碼中的狀況

音視頻爲什麼需要壓縮?

未經壓縮的數字視頻的數據量巨大微信

  • 存儲困難:一張DVD僅僅能存儲幾秒鐘的未壓縮數字視頻。

  • 傳輸困難 : 1兆的帶寬傳輸一秒的數字電視視頻需要大約4分鐘。

壓縮編碼的重要性:markdown

  • 數據壓縮是經過下降計算機中所存儲數據或者通訊傳播中數據的冗餘度,達到增大數據密度,終於使數據的存儲空間下降的技術

壓縮編碼的分類:

  • 一、空間冗餘。在很是多圖像數據中,像素間在行、列方向上都有很是大的相關性,相鄰像素的值比較接近。或者全然一樣。這樣的數據冗餘叫作空間冗餘。

  • 二、時間冗餘。

    在視頻圖像序列中,相鄰兩幀圖像數據有不少共同的地方,這樣的共同性稱爲時間冗餘,可採用運動補償算法來去掉冗餘信息.post

  • 三、視覺冗餘。視覺冗餘度是相對於人眼的視覺特性而言的,人類視覺系統對圖像的敏感性是非均勻和非線性的。並不是圖像中的所有變化人眼都能觀察到。
  • 四、信息熵冗餘。信息熵是指一組數據所攜帶的信息量,信息熵冗餘指數據所攜帶的信息量少於數據自己而反映出來的數據冗餘。
  • 五、結構冗餘。在有些圖像的紋理區,圖像的像素值存在着明顯的分佈模式。

  • 六、知識冗餘。有不少圖像的理解與某些先驗知識有至關大的相關性。這類規律性的結構可由先驗知識和背景知識獲得,稱此類冗餘爲知識冗餘

常用壓縮編碼方法的分類

這裏寫圖片描寫敘述

編碼器中的關鍵技術

  • 預測:經過幀內預測和幀間預測下降視頻圖像的空間冗餘和時間冗餘。

  • 變換:經過從時域到頻域的變換,去除相鄰數據之間的相關性。即去除空間冗餘。
  • 量化:經過用更粗糙的數據表示精細的數據來下降編碼的數據量,或者經過去除人眼不敏感的信息來下降編碼數據量。
  • 熵編碼:依據待編碼數據的機率特性下降編碼冗餘。

這裏寫圖片描寫敘述

預測:大數據

這裏寫圖片描寫敘述

空間預測:利用圖像空間相鄰像素的相關性來預測的方法ui

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

時間預測:利用時間上相鄰圖像的相關性來預測的方法編碼

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

幀間預測編碼:.net

  • 採用預測編碼方法消除序列圖像在時間上的相關性。傳送先後兩幀的相應像素之間的差值。這稱爲幀間預測。

這裏寫圖片描寫敘述

幀內預測編碼:視頻

  • I幀圖像的每個宏塊都採用幀內(Intra)預測編碼模式。
  • 宏塊分紅8x8或者4x4塊。對每個塊採用幀內預測編碼,稱做Intra8x8或者Intra4x4。
  • 幀內預測有多個預測方向:水平,垂直,左下,右上。

  • 幀內預測還有直流(DC)預測。

  • 色度塊預測還有平面預測。

這裏寫圖片描寫敘述

變換:

變換編碼也是去除冗餘的一種最主要的編碼方法。不一樣的是變換編碼首先要把壓縮的數據變換到某個變換域中(如頻域),而後再進行編碼。變化域中表現爲能量集中在某個區域。可以利用這一特色在不一樣區域間有效地分配量化比特數。或者去掉那些能量很是小的區域,從而達到數據壓縮的目的。好比聲音信號,從時域變換到頻域之後,可以清楚的看到能量集中在哪些頻率範圍內,從而依據頻率範圍分佈有效地分配不一樣的量化位數。

量化:

量化操做實質上是將連續的模擬信號採樣獲得的瞬時幅度值映射成離散的數字信號。即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示。

量化位數:量化位數是每個採樣點可以表示的數據範圍。常用的有8位、12位和16位。

量化過程是,先將整個幅值劃分爲有限個小幅度(量化階距)的集合,把落入某個階距內的樣值歸爲一類,並賦予一樣的量化值,如圖所看到的,當中虛線箭頭表示採樣值量化後的電平值。

這裏寫圖片描寫敘述

均勻量化

  • 採用相等的量化間隔對採樣獲得的信號作量化就是均勻量化,也稱爲線性量化。

    量化後的樣本值Y和實際值X的差E=Y-X稱爲量化偏差或量化噪聲。

非均勻量化

  • 非均勻量化的基本思想是。對輸入信號進行量化時,大的輸入信號採用大的量化間隔。小的輸入信號採用小的量化間隔,這樣就可以在知足精度要求的狀況下用較少的位數來表示。聲音數據還原時,採用一樣的規則。

熵編碼:

爲了進一步壓縮數據。對DPCM編碼後的直流係數DC和RLE編碼後的交流係數AC採用熵編碼。

在JPEG有損壓縮算法中,使用哈夫曼編碼器的理由是可以使用很是easy的查表方法進行編碼。壓縮數據符號時。哈夫曼編碼器對出現頻率比較高的符號分配比較短的代碼,而對出現頻率低的符號分配比較長的代碼。

這樣的可變長度的哈夫曼編碼表可以事先進行定義。爲了實現正確解碼,發送端和接收端必須採用一樣的哈夫曼編碼表。

採用哈夫曼編碼時有兩個問題值得注意:

  • 哈夫曼編碼沒有錯誤保護功能。在譯碼時,假設某些位出現錯誤,會引發一連串的錯誤,形成錯誤傳播(Error Propagation )。

    計算機對這樣的錯誤也無能爲力,說不出錯在哪裏。更談不上去糾正它。

  • 哈夫曼編碼是可變長度碼,所以很是難任意查找或調用壓縮文件裏的內容,而後再譯碼,這就需要在存儲代碼以前加以考慮。

    雖然如此,哈夫曼編碼仍是獲得了普遍的應用。

    該算法基於一種稱爲編碼樹的技術,其步驟例如如下:
    (1)將待編碼的N個信源符號依照出現的機率由大到小 排列,給排在最後的兩個符號各分配一位二進制碼元。對當中機率大的符號分配0,機率小的符號分配1(反之亦可)。


    (2)把機率最小的兩個符號機率相加。求出的和做爲一個新符號的機率,將新的機率值與剩下的N-2個機率值一塊兒又一次進行排序,再反覆步驟(1)的編碼過程。
    (3)反覆步驟(2)直到僅僅剩一個機率值爲止,其值爲1。


    (4)分配碼字,對於各類信源符號,基於步驟(1)分配的數字,從編碼樹的根部開始回溯讀出,並將它做爲該符號相應分配的碼字。

例 設有離散無記憶信源。符號a一、a二、a三、a四、a五、a6的出現機率分別爲0.十二、0.0八、0.四、0.一、0.2五、0.05,其哈夫曼編碼步驟例如如下:

這裏寫圖片描寫敘述

編解碼總體狀況:

這裏寫圖片描寫敘述

第一時間得到博客更新提醒,以及不少其它android乾貨,源代碼分析。歡迎關注個人微信公衆號,掃一掃下方二維碼或者長按識別二維碼,就能夠關注。

這裏寫圖片描寫敘述
假設你認爲好。隨手點贊。也是對筆者的確定。也可以分享此公衆號給你不少其它的人,原創不易
相關文章
相關標籤/搜索