轉載請把頭部出處連接和尾部二維碼一塊兒轉載。本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/60480109android
音視頻壓縮技術是編解碼中難點。常常會涉及很是多算法處理問題。數據封裝,轉封裝等,看下Agenda:算法
未經壓縮的數字視頻的數據量巨大微信
壓縮編碼的重要性:markdown
在視頻圖像序列中,相鄰兩幀圖像數據有不少共同的地方,這樣的共同性稱爲時間冗餘,可採用運動補償算法來去掉冗餘信息.post
預測:大數據
空間預測:利用圖像空間相鄰像素的相關性來預測的方法ui
時間預測:利用時間上相鄰圖像的相關性來預測的方法編碼
幀間預測編碼:.net
幀內預測編碼:視頻
變換:
變換編碼也是去除冗餘的一種最主要的編碼方法。不一樣的是變換編碼首先要把壓縮的數據變換到某個變換域中(如頻域),而後再進行編碼。變化域中表現爲能量集中在某個區域。可以利用這一特色在不一樣區域間有效地分配量化比特數。或者去掉那些能量很是小的區域,從而達到數據壓縮的目的。好比聲音信號,從時域變換到頻域之後,可以清楚的看到能量集中在哪些頻率範圍內,從而依據頻率範圍分佈有效地分配不一樣的量化位數。
量化:
量化操做實質上是將連續的模擬信號採樣獲得的瞬時幅度值映射成離散的數字信號。即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示。
量化位數:量化位數是每個採樣點可以表示的數據範圍。常用的有8位、12位和16位。
量化過程是,先將整個幅值劃分爲有限個小幅度(量化階距)的集合,把落入某個階距內的樣值歸爲一類,並賦予一樣的量化值,如圖所看到的,當中虛線箭頭表示採樣值量化後的電平值。
均勻量化
量化後的樣本值Y和實際值X的差E=Y-X稱爲量化偏差或量化噪聲。
非均勻量化
熵編碼:
爲了進一步壓縮數據。對DPCM編碼後的直流係數DC和RLE編碼後的交流係數AC採用熵編碼。
在JPEG有損壓縮算法中,使用哈夫曼編碼器的理由是可以使用很是easy的查表方法進行編碼。壓縮數據符號時。哈夫曼編碼器對出現頻率比較高的符號分配比較短的代碼,而對出現頻率低的符號分配比較長的代碼。
這樣的可變長度的哈夫曼編碼表可以事先進行定義。爲了實現正確解碼,發送端和接收端必須採用一樣的哈夫曼編碼表。
採用哈夫曼編碼時有兩個問題值得注意:
計算機對這樣的錯誤也無能爲力,說不出錯在哪裏。更談不上去糾正它。
哈夫曼編碼是可變長度碼,所以很是難任意查找或調用壓縮文件裏的內容,而後再譯碼,這就需要在存儲代碼以前加以考慮。
雖然如此,哈夫曼編碼仍是獲得了普遍的應用。
該算法基於一種稱爲編碼樹的技術,其步驟例如如下:
(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乾貨,源代碼分析。歡迎關注個人微信公衆號,掃一掃下方二維碼或者長按識別二維碼,就能夠關注。