This is my study note of H.264.

H264功能结构

  • 视频编码层(Vedio coding layer)
    1
    负责压缩编码视频数据的内容,主要包括帧内压缩、帧间压缩、变换量化、熵编码等。
  • 网络抽象层
    1
    将VCL数据封装到NAL单元中,并提供头信息,保证数据适合信道和各种存储介质上的传输。
    Alt text

H264帧类型

H264结构中,一个视频图像编码后的数据叫做一帧,一帧图像由一个片或多个片组成,一个片由一个或多个宏块组成,一个宏块由16×16的yuv数据组成,H264编码的基本单位是宏块。
经过压缩的帧:

  • I帧

    1
    关键帧,采用帧内压缩技术。可以理解为这一帧数据完全保留,解码时只需要本帧数据就可以完成。
  • P帧
    只参考前面以及处理好的帧。

  • B帧
    双向参考帧,压缩时即会参考前面的帧又会参考之后的帧。

  • IDR帧

    1
    一个序列的第一个图像叫做IDR帧,IDR帧都是I帧。当解码器解码到IDR帧时,会清空参考帧队列,将已解码的数据全部输出或者抛弃,重新查找参数集,IDR之后的图像不会用IDR之前的图像来解码。

H264编码原理

H264核心的压缩算法是帧内压缩和帧间压缩。帧内压缩是生成I帧的编码,帧间压缩是生成B、P帧的编码。

  • 帧内压缩

    1
    2
    3
    4
    5
    6
    7
    8
    9
    空间压缩算法,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息。帧内一般采用有损压缩算法。

    1.宏块划分

    计算各宏块之间的像素,并将帧划分成组。

    2.计算图像的运动矢量

    在一帧中找到物体后,在相邻帧也找到对应的物体就可以计算物体的运动矢量了,在删除相同部分。只保留运动矢量后就得到了补偿数据。我们将补偿数据进行压缩保存就可以减少很多的数据量。
  • 帧间压缩

    1
    2
    3
    4
    5
    6
    7
    8
    9
    时间压缩算法,比较时间轴上不同帧之间的数据进行压缩,帧间压缩一般为无损的。

    1.宏块预测

    对每个宏块可以进行9种模式的预测,找到最相近的一种预测模式。

    2.图像残差

    将原始图像与帧内预测后的图像相减得到残差值。
  • GOP

    1
    通过将关联度高的帧划分为一组,例如:在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,我们认为这样的图可以分到一组。
  • 对残差数据做DCT变换

  • 熵编码