视频编码

压缩编码的标准

  • 为什么需要视频压缩编码标准
    • 目前,我们已经非常清楚,视频在存储&传输过程中,存在非常多的冗余信息,我们需要去除这些冗余信息
    • 但是,如果每个人按照自己的方式去编码,那么当我们需要还原原始数据时,很难知道对方是如何编码的
    • 比如:某主播在斗鱼采用iPhone手机进行直播,手机录制了主播大量的画面,为了便于传输,需要程序对视频进行压缩编码,但是他想当然的按照自己的某种算法进行了压缩,并且将数据传递给了服务器,服务器拿到数据之后,进行数据分发给了各个客户端:Android、iOS、Win、Web、Mac等等客户端,这个时候每个客户端需要知道对方的压缩算法,才能将数据进行还原,但是因为当时客户端是想当然的就行压缩编码的,并且也不能保证他的方式效率,而且有一点误差可能会造成画面无法还原的后果。
    • 因此,视频编码必须制定一个大家都认同的标准
  • 标准化组织:
    • ITU:International Telecommunications Union
    • VECG:Video Coding Experts Group(国际电传视讯联盟)
  • ISO:International Standards Organization
    MPEG:Motion Picture Experts Group(国际标准组织机构)
  • H.26X系列(由ITU[国际电传视讯联盟]主导)
    • H.261:主要在老的视频会议和视频电话产品中使用
      -H.263:主要用在视频会议、视频电话和网络视频上
    • H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
    • H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC的继任者。可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势,尚未有大众化编码软件出现
  • MPEG系列(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发)
    -MPEG-1第二部分:MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式
    -MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统中
    • MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。
  • 其他系列:
    AMV · AVS · Bink · RealVideo · Theora · VC-1 · VP3 · VP6 · VP7 · VP8 · VP9 · WMV

目前应用最广泛的H.264(AVC)

H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称

  • 在H264协议里定义了三种帧

    • I帧:完整编码的帧叫I帧
    • P帧:参考之前的I帧生成的只包含差异部分编码的帧叫P帧
    • B帧:参考前后的帧编码的帧叫B帧
  • H264采用的核心算法是帧内压缩和帧间压缩

    • 帧内压缩是生成I帧的算法
    • 帧间压缩是生成B帧和P帧的算法
  • H264的压缩方法:

    • 分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多
    • 定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
    • 预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
    • 数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

序列(GOP)

  • 在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流。

  • 一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。

    • H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。

    • 这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。

    • IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

  • 一个序列就是一段内容差异不太大的图像编码后生成的一串数据流

    • 当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。

    • 当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。

  • 在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离

  • I帧、P帧、B帧的预测方向

视频编码_第1张图片
image
  • I帧、P帧、B帧实际顺序&编码后顺序
视频编码_第2张图片
image

视频编码_第3张图片
image

编码方式

  • 编码的方式有两种:
    • 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等
    • 软编码:使用CPU进行编码,软编码通常使用:ffmpeg+x264
      ffmpeg:是一套开源的、用于对音视频进行编码&解码&转化计算机程序
      x264:x264是一种免费的、开源的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码方式
  • 对比:(没有对比就没有伤害)
    • 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低
    • 硬编码:性能高,对CPU没有压力,但是对其他硬件要求较高(如GPU等)
  • iOS中编码方式:
    • 在iOS8之前,苹果并没有开放硬编码的接口,所以只能采用ffpeng+x624进行软编码
    • 在iOS8之后,苹果开放了接口,并且封装了VideoToolBox&AudioToolbox两个框架,分别用于对视频&音频进行硬编码

你可能感兴趣的:(视频编码)