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

H264
GOP
I帧 B帧 P帧 说明


H264
在这里插入图片描述
未压缩的码流:

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

在这里插入图片描述
1秒 25帧, 帧与帧之间的间隔是 40毫秒

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

在这里插入图片描述
GOP中的各个视频帧差别很小

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

在这里插入图片描述
IDR帧 : 解码器立即刷新帧

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

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

在这里插入图片描述
一组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 …

在这里插入图片描述
SPS 与 PPS : 参数数据,属于I帧的一部分,他俩一般同时出现,不会单独出现。出现在IDR之前
SPS:序列参数集,对帧组的参数设置。
PPS: 对GOP一组视频帧的 每一个图像的设置

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/121550412