H264编码 GOP组 以及 I帧 B帧 P帧 说明

H264
GOP
I帧 B帧 P帧 说明


H264
H264编码 GOP组 以及 I帧 B帧 P帧 说明
未压缩的码流:

Byte 字节单位的码流 =  640x480x1.5x15 = 691200 
所有在网上传输的数据都是按照比特位计算的 所以要用 bit为单位
Bit位码流 =  640x480x1.5x15x8 = 55296000  即 55M

而 H264建议的 码流是 : 500kpbs
相比之下,被压缩了100倍。压缩比约为 1/100

帧率 = 15 :场景 实时通讯 开会之类的
帧率 = 30 : 场景 录制课程视频
帧率 = 60 - 120 :场景 电影院

500kbps≈0.5M

Kbps又称比特率,指的是数字信号的传输速率,也就是每秒钟传送多少个千位的信息(K表示千位,Kb表示的是多少千个位);Kbps也可以表示网络的传输速度,为了在直观上显得网络的传输速度较快,一般公司都使用kb(千位)来表示。

如果是KBps,则表示每秒传送多少千字节。1KByte/s=8Kbps(一般简写为1KBps=8Kbps)。ADSL上网时的网速是512Kbps,如果转换成字节,就是512/8=64KByte(即64千字节每秒)。


GOP

H264编码 GOP组 以及 I帧 B帧 P帧 说明
1秒 25帧, 帧与帧之间的间隔是 40毫秒

如果每秒25帧 那么时间久了 数据量会非常大,所以就对各个帧进行了分组,分组的准则就是各个帧的相关性,即做某个相同动作的帧 分为一组,如图 看望眼睛的各个帧分为一组,动作是一样的 望眼镜的角度可能有差异, 敲键盘动作的各个帧分为一组 虽然具体动作有差别 但是大体上都是同一类动作。所以每一个组都是描述同一个动作的细微差别,所以每个组中的视频帧是强相关的 该组就是 GOP :group of picture,不同组之间的视频帧是弱相关的

H264编码 GOP组 以及 I帧 B帧 P帧 说明
GOP中的各个视频帧差别很小

如下各个帧可以做这样的处理,他们的差别主要是 望眼镜角度不同 ,而背景图,和头发等信息都是一样的(这里的背景图是一样的 只是为了区分 用了不同的颜色),所以当我们进行计算的时候,完全可以把所有的背景图 用一张图片来表示,头发也可以用一张图表示。其余的细节 不同的细节 可以单独存储,如望眼镜的角度,下半身旋转角度等。这样GOP组视频帧 就可以被压缩的很小,只需要存储很小的数据就可以将原来的一组真 还原回来。这就是GOP的意义。

H264编码 GOP组 以及 I帧 B帧 P帧 说明


I帧 B帧 P帧 说明

H264编码 GOP组 以及 I帧 B帧 P帧 说明

I帧:我们常把 GOP 一组强相关视频帧中的的 第一帧视频帧作为 I帧,这个I帧又是一种特殊的I帧,叫做IDR帧,是一种特殊的I帧。对于I帧来说,不依赖于任何参考帧,属于帧内压缩技术,编码解码与其他帧无关系,自己编码解码。

而 B帧 与 P帧 都是依赖于 I帧的

P帧: 向前参考帧,即只有在前面的帧解码之后,才可以解码当前帧。P帧只参考前面,不参考后面。因为压缩,解码都与前面的帧有密切关系

B帧:双向参考帧,虽然B帧压力率最高,但是随之而来的问题也很明显,就是 很占用CPU,而且很耗时。随着B帧帧数越来越多,延迟性也会越大,对于实时通讯来说,是很忌讳的,实时通讯讲究快速。

所以在大多数实时通讯场景如 音视频议 在线教育等 都是使用 I帧 和 P帧,而不是用B帧。而在大量的音视频转码的服务中 会大量的使用B帧,就是为了减少存储空间!

H264编码 GOP组 以及 I帧 B帧 P帧 说明
IDR帧 : 解码器立即刷新帧

我们已经知道 GOP是对视频进行了若干的分组,分组之后,每一组之间他们是有明显的差别的。如果我们所有的视频是一串连续播下来,但是如果中间 某个地方出现了错误,那后面的视频就很难进行恢复了,因为是相互依赖的。而有了 IDR帧之后,当遇到IDR帧时,在解码器端,解码器会将缓冲区中的所有数据全部清空,全部重新来过,所以此时缓冲区中的第一针是IDR帧,一组GOP中的的第一帧是IDR帧,是关键帧,是帧内压缩,不依赖于其他帧。所以在缓冲区找到第一个IDR帧之后,后面再来的数据 就是都依赖于这个IDR帧,直到下一个IDR帧到来 即下一组GOP视频帧到来,如此就避免了错误的传播。

所以IDR帧起到了 防止错误传播的作用

H264编码 GOP组 以及 I帧 B帧 P帧 说明
一组GOP中 第一帧是 IDR帧,后面接着连续的三个B帧,在后面连着P帧,再接三个B帧,循环反复。
解码特点:

1 先解码I帧

2 解码第一个P帧

3 解码前三个B帧,这3个B帧依赖于 IDR帧和第一个P帧,只有IDR帧和第一个P帧解码完后,才能解码前三个B帧,而B帧与B帧之间是没有参考关系的,所以这就回扣到,前面所说的 B帧是前后参考帧,这里的前后,指的就是前面的IDR帧和后面的P帧,只有当前后参考帧解码后,才解码自己。

4 解码第二个出现的P帧

5 解码 再次连续的3个B帧,这里的3个B帧 依赖于 ,前后两个P帧,即第一个和第二个P帧。是他的前后参考帧。

注意 播放的顺序与解码顺序不同,虽然P帧相对于B帧是先解码,但是播放的帧的顺序 就是排列的顺序。当所有的帧解码完成之后,他们都成了一个一个的完整的图像,所以用播放器播放的时候,就是按照顺序播放即 I B B B P B B B P …

H264编码 GOP组 以及 I帧 B帧 P帧 说明
SPS 与 PPS : 参数数据,属于I帧的一部分,他俩一般同时出现,不会单独出现。出现在IDR之前
SPS:序列参数集,对帧组的参数设置。
PPS: 对GOP一组视频帧的 每一个图像的设置

上一篇:H264编码及I帧P帧B帧


下一篇:H264视频编解码