转载请把头部出处连接和尾部二维码一块儿转载。本文出自逆流的鱼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干货,源代码分析。欢迎关注个人微信公众号,扫一扫下方二维码或者长按识别二维码,就能够关注。