为什么需要压缩

以分辨率为1280x720,帧率为30fps的视频来说,如果传输原始RGB的数据,1秒钟的数据量

1280*720*3*30*8/1024/1024=632Mbps=80MBps

如果是1分钟的话,80*60=4800MBps=4GBps,因此在当前带宽条件下不可行。

H264的句法分层

一般常见的句法分层架构如下: image

但h264取消了序列层和图像层,把这些共用的信息抽离出来形成了SPS和PPS参数集

取消了序列层和图像层的h264架构和引用关系如下: image

从这个图中看出: ==一个图片由多个片slice组成,slice数据会引用PPS,PPS会引用SPS,因此SPS和PPS信息要重点保存==

片slice和宏块的关系: image 宏块是解码的基本单元,解码器会根据预测信息和残差数据进行解码。

H264功能分层

H264从功能上分为 - VCL(Video Coding Layer)视频编码层 - NAL(Network Abstract Layer)网络抽象层

vcl是上面句法分层结构,在网络传输之前,要封装在nal层才能传输。

NALU基本结构

image

因此小结如下: - h264码流传输的基本单元是NAL单元 - NALU中携带最关键的信息是参数集和片数据 - 解码的基本单元是宏块 - 解码器会根据预测信息和残差数据,解码出原始数据 - 宏块解码后拼接成片,片拼接成图像,多个图像则组成视频

H264编码过程

image

  • 大致分为:预测编码、变换编码、熵编码
  • 其中最复杂的
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type    |
+---------------+

参考

  1. 新一代视频压缩编码标准
  2. 我需要知道:H.264
  3. H264编码原理以及I帧、B和P帧详解