H264的常见概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H264的常见概念相关的知识,希望对你有一定的参考价值。

H264,应该是读者常见的技术术语吧,那h264是什么东西呢?

技术分享图片

H.264是视频编码标准。

在术语的拼写上,小程以能理解为准。

本文介绍H264的常见概念。

预警,本文相对枯燥,读者可随时放弃阅读。

(1)H264从哪里来?

小程之前介绍媒体格式的概念时,有提到过国际标准化组织(ISO),现在又是它出场的时候。

H264是国际标准化组织(ISO)与国际电信联盟(ITU)的产物。

但ISO是大boss,给的是造福人类的方向,真正做这件事的是他的下属MPEG,MPEG是动态图像专家组。

同样,ITU也有专家组来独领风骚,叫VCEG,即视频编码专家组。

H.264有很多乳名,比如:H.264/AVC、AVC、H.264/MPEG-4 AVC,等等。

技术分享图片

(2)H264有什么优势?

技术分享图片

h264是ISO与ITU合作的结晶体,而在这之前,这两家都有自己的产品,比如ITU有h261、h263、h263+,而MPEG有MPEG-1、MPEG-2、MPEG-4等。

两家共同的研究成果自然不能比以往的差。

h264优势在于,在同样的画质下,拥有更高的压缩率(也就是更低的码率)。

所以,看视频的同学有福利了,因为这意味着,可以更省流量,并且有更快的传输速度!

(3)H264的设计

技术分享图片

(a)vcl与nalu

h264在设计上分不同的部分,涉及到复杂的概念,比如vcl与nal的划分、帧内与帧间预测编码、整数变换、熵编码,等等。

小程这里只介绍一些简单的概念。

h264在设计上,分vcl跟nal两层。

vcl,video coding layer,即视频编码层,负责编码视频,独立于网络环境。
nal,network abstraction layer,即网络抽象层,把vcl提供的数据进行封装,应用于网络传输。

nal层的基本单位叫nalu。

nalu,network abstraction layer unit,网络抽象层单元。

nalu的大致结构是这样的:

技术分享图片

RBSP,是原始数据(可能是编码的视频数据,也可能是其它数据),加上用于对齐的“0”比特位。

nalu的头,共8bit:

forbidden_bit(1bit): 禁止位,用于纠错。
nal_reference_bit(2bit): 重要程度标识,越大则越重要,0是最不重要的。
nal_unit_type(5bit):低5位,用于区分nalu的类型。

nalu的类型:
技术分享图片
表中的nal_reference_bit标识了重要程度(越大越重要)。

nal_unit_type为1到5时,为切片(slice)的数据,也就是视频编码数据。如果值是5,则可以理解为IDR帧,也就是一个图像序列的第一个I帧。

nalu除了封装切片数据(视频数据),还可以封装其它类型的数据,比如nal_unit_type为7与8时,对应的是序列参数(sps)与图像参数(pps),这两个信息对于解码是必须的。

nalu包含的内容,就是rbsp的内容,rbsp的内容也有这样的分类:
技术分享图片

(b)I帧等

然后,小程介绍I帧、P帧之类的概念,这是读者有可能经常遇到的概念。

压缩是为了节省存储容量与传输带宽,体积小而质量又好,是追求的目标。

视频压缩的关键点是去掉冗余。

冗余是什么?你有我也有的(相关的)是冗余,我感觉不到的也是冗余。

h264编码去除冗余有两个方向,一个是帧内预测编码,另一个是帧间预测编码。

帧内预测,关注于一张独立的图的冗余(不考虑与前后图的联系),把这张图的冗余(宏块之间的冗余)去掉。

帧间预测,关注于前后图间的冗余,只保留差别,并依赖于参考帧。

帧间预测编码产生的帧,分为I帧、P帧与B帧。

所有帧参与分组,这个图像的组,也叫图像序列,即GOP。

而GOP很多时候是表示图像组的长度,可以设置。

一个图像序列内的图像是相关紧密的,也就是当更换场景(大变化来了)时就应该另起一个GOP。

MPEG2、h264与HEVC关于GOP的定义是不一样的,所以在讨论GOP时有必要先弄清楚是哪一个标准,这里讲的是h264。

h264的图像序列中,以IDR帧开始,到下一个IDR帧结束,一个图像序列中可以出现多个I帧。

GOP的第一个I帧,叫作IDR帧,区分于其它普通的I帧,所以IDR是I,但I未必是IDR。

IDR出现,意味着历史作废(历史的错不要影响到当前组),不能再依赖之前的图像,而要重新开始编码。

一般来说,连续图像变化小(比如录屏时缓慢滑动屏幕)则GOP值大,而且一个IDR后就可以连续用P或B帧来表示;变化大时(快速滑动屏幕)则GOP值小,可能一个IDR加两三个P帧后就切到下一组序列了,这时编码出来的体积也更大,如果传输的话就会产生带宽峰值。

IDR,叫即时可解码帧。

I帧,即Intra-predicted Frame,帧内预测帧。I帧还有很多同义词,比如关键帧、独立的完整图像、基本帧等。

I帧类似于JPEG的压缩算法。

P帧与B帧,都是帧间预测编码,也就是要依赖于其它帧,它本身只是差异内容(差值与运动矢量)。

P帧,前向预测编码帧。P帧表示的是这一帧与之前的某个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧的差别,生成最终画面。

B帧,双向预测编码帧。B帧依赖于前面的I或P帧,并且依赖于后面的P帧,所以解码B帧时,既要取得之前的缓存画面,也要解码之后的画面,才能叠加出最终的画面。

从压缩率来说,B>P>I,而解码复杂度来说也是这样。一般(I+P)这样的等级用得最多。

I跟P都是会成为参考帧,所以要注意影响,你差则别人也差。

至此,小程把H264一些常见的概念介绍完毕了。


总结一下,本文介绍了H264编码标准的一些常见的概念,希望读者对H264有一个概念上的理解或了解。

以上是关于H264的常见概念的主要内容,如果未能解决你的问题,请参考以下文章

流媒体专家H264协议详解IV H264协议疑惑概念阐述

H264码流分析详解

H264基本概念之宏块片和片组

H264基本概念之宏块片和片组

H264编码原理之帧间预测与帧内预测

[转]流媒體H264—MP4格式及在MP4文件中提取H264的SPSPPS及码流