直播技术总结(四)音视频数据压缩及编解码基础
轉載請把頭部出處鏈接和尾部二維碼一起轉載,本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/60480109
音視頻壓縮技術是編解碼中難點,常常會涉及很多算法處理問題。數據封裝,轉封裝等,看下Agenda:
- 音視頻為何需要壓縮?
- 壓縮編碼的分類
- 常用壓縮編碼的方法
- 編碼器中的關鍵技術
- 預測
- 量化
- 變換
- 熵編碼
- 編解碼中的情況
音視頻為何需要壓縮?
未經壓縮的數字視頻的數據量巨大
- 存儲困難:一張DVD只能存儲幾秒鐘的未壓縮數字視頻。
- 傳輸困難 : 1兆的帶寬傳輸一秒的數字電視視頻需要大約4分鐘。
壓縮編碼的重要性:
- 數據壓縮是通過減少計算機中所存儲數據或者通信傳播中數據的冗余度,達到增大數據密度,最終使數據的存儲空間減少的技術
壓縮編碼的分類:
- 1、空間冗余。在很多圖像數據中,像素間在行、列方向上都有很大的相關性,相鄰像素的值比較接近,或者完全相同,這種數據冗余叫做空間冗余。
- 2、時間冗余。在視頻圖像序列中,相鄰兩幀圖像數據有許多共同的地方,這種共同性稱為時間冗余,可采用運動補償算法來去掉冗余信息.
- 3、視覺冗余。視覺冗余度是相對于人眼的視覺特性而言的,人類視覺系統對圖像的敏感性是非均勻和非線性的,并不是圖像中的所有變化人眼都能觀察到。
- 4、信息熵冗余。信息熵是指一組數據所攜帶的信息量,信息熵冗余指數據所攜帶的信息量少于數據本身而反映出來的數據冗余。
- 5、結構冗余。在有些圖像的紋理區,圖像的像素值存在著明顯的分布模式。
- 6、知識冗余。有許多圖像的理解與某些先驗知識有相當大的相關性。這類規律性的結構可由先驗知識和背景知識得到,稱此類冗余為知識冗余
常用壓縮編碼方法的分類
編碼器中的關鍵技術
- 預測:通過幀內預測和幀間預測降低視頻圖像的空間冗余和時間冗余。
- 變換:通過從時域到頻域的變換,去除相鄰數據之間的相關性,即去除空間冗余。
- 量化:通過用更粗糙的數據表示精細的數據來降低編碼的數據量,或者通過去除人眼不敏感的信息來降低編碼數據量。
- 熵編碼:根據待編碼數據的概率特性減少編碼冗余。
預測:
空間預測:利用圖像空間相鄰像素的相關性來預測的方法
- 幀內預測技術:利用當前編碼塊周圍已經重構出來的像素預測當前塊
Intra圖像編碼(I幀)
時間預測:利用時間上相鄰圖像的相關性來預測的方法
- 幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)
Inter圖像編碼:前向預測編碼圖像(P幀),雙向預測編碼圖像(B幀)
幀間預測編碼:
- 采用預測編碼方法消除序列圖像在時間上的相關性,傳送前后兩幀的對應像素之間的差值,這稱為幀間預測。
幀內預測編碼:
- I幀圖像的每個宏塊都采用幀內(Intra)預測編碼模式。
- 宏塊分成8x8或者4x4塊,對每個塊采用幀內預測編碼,稱作Intra8x8或者Intra4x4。
- 幀內預測有多個預測方向:水平,垂直,左下,右上。
- 幀內預測還有直流(DC)預測。
- 色度塊預測還有平面預測。
變換:
變換編碼也是去除冗余的一種最基本的編碼方法。不同的是變換編碼首先要把壓縮的數據變換到某個變換域中(如頻域),然后再進行編碼。變化域中表現為能量集中在某個區域,可以利用這一特點在不同區域間有效地分配量化比特數,或者去掉那些能量很小的區域,從而達到數據壓縮的目的。例如聲音信號,從時域變換到頻域以后,可以清楚的看到能量集中在哪些頻率范圍內,從而根據頻率范圍分布有效地分配不同的量化位數。
量化:
量化操作實質上是將連續的模擬信號采樣得到的瞬時幅度值映射成離散的數字信號,即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示。
量化位數:量化位數是每個采樣點能夠表示的數據范圍,常用的有8位、12位和16位。
量化過程是,先將整個幅值劃分為有限個小幅度(量化階距)的集合,把落入某個階距內的樣值歸為一類,并賦予相同的量化值,如圖所示,其中虛線箭頭表示采樣值量化后的電平值。
均勻量化
- 采用相等的量化間隔對采樣得到的信號做量化就是均勻量化,也稱為線性量化。量化后的樣本值Y和實際值X的差E=Y-X稱為量化誤差或量化噪聲。
非均勻量化
- 非均勻量化的基本思想是,對輸入信號進行量化時,大的輸入信號采用大的量化間隔,小的輸入信號采用小的量化間隔,這樣就可以在滿足精度要求的情況下用較少的位數來表示。聲音數據還原時,采用相同的規則。
熵編碼:
為了進一步壓縮數據,對DPCM編碼后的直流系數DC和RLE編碼后的交流系數AC采用熵編碼。在JPEG有損壓縮算法中,使用哈夫曼編碼器的理由是可以使用很簡單的查表方法進行編碼。壓縮數據符號時,哈夫曼編碼器對出現頻率比較高的符號分配比較短的代碼,而對出現頻率低的符號分配比較長的代碼。這種可變長度的哈夫曼編碼表可以事先進行定義。為了實現正確解碼,發送端和接收端必須采用相同的哈夫曼編碼表。
采用哈夫曼編碼時有兩個問題值得注意:
- 哈夫曼編碼沒有錯誤保護功能。在譯碼時,如果某些位出現錯誤,會引起一連串的錯誤,造成錯誤傳播(Error Propagation )。計算機對這種錯誤也無能為力,說不出錯在哪里,更談不上去糾正它。
哈夫曼編碼是可變長度碼,因此很難隨意查找或調用壓縮文件中的內容,然后再譯碼,這就需要在存儲代碼之前加以考慮。盡管如此,哈夫曼編碼還是得到了廣泛的應用。
該算法基于一種稱為編碼樹的技術,其步驟如下:
(1)將待編碼的N個信源符號按照出現的概率由大到小 排列,給排在最后的兩個符號各分配一位二進制碼元,對其中概率大的符號分配0,概率小的符號分配1(反之亦可)。
(2)把概率最小的兩個符號概率相加,求出的和作為一個新符號的概率,將新的概率值與剩下的N-2個概率值一起重新進行排序,再重復步驟(1)的編碼過程。
(3)重復步驟(2)直到只剩一個概率值為止,其值為1。
(4)分配碼字,對于各種信源符號,基于步驟(1)分配的數字,從編碼樹的根部開始回溯讀出,并將它作為該符號對應分配的碼字。
例 設有離散無記憶信源,符號a1、a2、a3、a4、a5、a6的出現概率分別為0.12、0.08、0.4、0.1、0.25、0.05,其哈夫曼編碼過程如下:
編解碼總體情況:
第一時間獲得博客更新提醒,以及更多android干貨,源碼分析,歡迎關注我的微信公眾號,掃一掃下方二維碼或者長按識別二維碼,即可關注。
如果你覺得好,隨手點贊,也是對筆者的肯定,也可以分享此公眾號給你更多的人,原創不易總結
以上是生活随笔為你收集整理的直播技术总结(四)音视频数据压缩及编解码基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摄像头视频采集压缩及传输
- 下一篇: oracle exp导出很慢,oracl