您的位置:首页 > 其它

直播技术总结(四)音视频数据压缩及编解码基础

2017-08-19 14:18 489 查看

转载请把头部出处链接和尾部二维码一起转载。本文出自逆流的鱼yuiop:https://www.geek-share.com/detail/2699725204.html

音视频压缩技术是编解码中难点。经常会涉及非常多算法处理问题。数据封装,转封装等,看下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有损压缩算法中,使用哈夫曼编码器的理由是能够使用非常easy的查表方法进行编码。压缩数据符号时。哈夫曼编码器对出现频率比較高的符号分配比較短的代码,而对出现频率低的符号分配比較长的代码。

    这样的可变长度的哈夫曼编码表能够事先进行定义。为了实现正确解码,发送端和接收端必须採用同样的哈夫曼编码表。

    採用哈夫曼编码时有两个问题值得注意:

    • 哈夫曼编码没有错误保护功能。在译码时,假设某些位出现错误,会引起一连串的错误,造成错误传播(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干货,源代码分析。欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,就可以关注。

    假设你认为好。随手点赞。也是对笔者的肯定。也能够分享此公众号给你很多其它的人,原创不易

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: