XinFocus'Blog 聚焦互联网技术_网络营销推广_工商财税_知识产权_商标专利_苏州创客_创业政策_美文分享

I 帧时间间隔及I帧和帧间距、B帧、P帧

什么是I帧以及如何判断I帧?

1NAL全称Network Abstract Layer, 即网络抽象层。
         H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPSPPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 00 00 01分隔符,一般来说编码器编出的首帧数据为PPSSPS,接着为I……

如下图:

2、如何判断帧类型(是图像参考帧还是IP帧等)?

          NALU类型是我们判断帧类型的利器,从官方文档中得出如下图:

我们还是接着看最上面图的码流对应的数据来层层分析,以00 00 00 01分割之后的下一个字节就是NALU类型,将其转为二进制数据后,解读顺序为从左往右算,如下:
1)第1位禁止位,值为1表示语法出错
2)第2~3位为参考级别
3)第4~8为是nal单元类型

例如上面00000001后有67,68以及65

其中0x67的二进制码为:
0110 0111
4-8
00111,转为十进制7,参考第二幅图:7对应序列参数集SPS

其中0x68的二进制码为:
0110 1000
4-8
01000,转为十进制8,参考第二幅图:8对应图像参数集PPS

其中0x65的二进制码为:
0110 0101
4-8
00101,转为十进制5,参考第二幅图:5对应IDR图像中的片(I)

 

所以判断是否为I帧的算法为: NALU类型  & 0001  1111 = 5      NALU类型  & 31 = 5

比如0x65 & 31 = 5

 

---------------------------------------------------------------

 

关于“I 帧时间间隔”

GOPGroup of Pictures)策略影响编码质量:所谓GOP,意思是画面组,一个GOP就是一组连续的画面。MPEG编码将画面(即帧)分为IPB三种,I是内部编码帧,P是前向预测帧,B是双向内插帧。简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。没有I帧,P帧和B帧就无法解码,这就是MPEG格式难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。

 

关键帧包含了显示帧需要的所有信息

 

所有的视频都至少包含一个关键帧,作为文件的第一个帧。其它的关键帧可用来改善视频的质量,不过它们也会增加文件大小。一般而言,每一秒视频至少需要使用 1 个关键帧。若使用此公式,在每秒播放 25个帧的视频中,每 25 个帧就会有 1 个关键帧。增加关键帧个数可改善质量,但是同时增加带宽和网络负载。

 

两种彩电视频制式:

NTSC (525 lines @ 59.94 Hz)  29.97 fps

PAL (625 lines @ 50 Hz)  25 fps

 

NTSCPAL属于全球两大主要的电视广播制式,但是由于系统投射颜色影像的频率而有所不同。NTSCNational Television System Committee的缩写,其标准主要应用于日本、美国,加拿大、墨西哥等等,PAL 则是Phase Alternating Line的缩写,主要应用于中国,香港、中东地区和欧洲一带。

 

GOP最大可含帧数目:18 (NTSC) / 15 (PAL)

 

GOP是由固定模式的一系列I帧、P帧、B帧组成。

I帧编码是为了减少空间域冗余,P帧和B帧是为了减少时间域冗余。

常用的结构由15个帧组成,具有以下形式IBBPBBPBBPBBPBB。简称GOP(4,2),指的是该图像组除了一个I帧外,包含了4P帧,并且任何两个P帧或者IP之间都有两个B帧。

 

---------------------------------------------------------------

 

I帧”和“帧间距”等的理解

1  30 # i intervals  // I 帧间距

230 # idr intervals// idr帧间距

3)   0 # b frame number between 2 p-frame(0, 1, 2)

4).  0 # min qp //最小量化步长
5).  51 # max qp//最大量化步长

6)  200000 # bps码率
7)  30 # framerate(rc only)//帧率

先对简单的进行解释:

2idr帧间距

IDR帧是视频流的分隔符,所有帧都不可以使用越过关键帧的帧作为参考帧。IDR帧是I帧的一种,所以它们也不参照其它帧。这意味着它们可以作为视频的搜索(seek)点。
通过这个设置可以设置IDR帧的最大间隔帧数(亦称最大图像组长度)。较大的值将导致IDR帧减少(会用占用空间更少的P帧和B帧取代),也就同时减弱了参照帧选择的限制。较小的值导致减少搜索一个随机帧所需的平均时间。
建议:默认值(fps10倍)对大多数视频都很好。如果在为蓝光、广播、直播流或者其它什么专业流编码,也许会需要更小的图像组长度(一般等于fps)。

3b帧数

B帧数(Number of B-Frames:IP帧之间可插入的B帧数量最大值,范围0~16,可以 

      #大大提高 压缩比,建议选择2

4min qp 最小量化步长

说明:设置x264可以使用的最小量化器。量化参数越小,输出越接近输入。使用某些值时,x264的输出可以和输入看起来完全一样,虽然其实并不是精确相同的,通常就够了没有必要使用更多比特在宏块上了。
如果开启了自适应量化器(默认开启),则不鼓励提高qpmin的值,那样可能会降低帧的平坦部分的质量。

5max qp最大量化步长

说明:qpmin的反面,设置x264可以使用的最大量化器。默认值51H.264标准中的最大值,质量非常低。默认值51其实相当于没有设置qpmax。如果你想控制x264输出的最低品质,也许你想要把这个值调低一点(调到30-40最低了),但一般而言不推荐调节这个值。

6)码流(Data Rate

是指视频文件在单位时间内使用的数据流量,也叫码率,是他是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。

7) 帧率

帧率是一秒播放的视频中有多少个帧。帧是组成视频的基本单位。视频文件本身是由很多连续的图片组成,简单的可以理解为帧率就是一秒内录下的图片数量(实际上这些图片通过压缩,一帧数据不一定保存的是一个完成图片

I

I帧(I frame) 又称为内部画面 (intra picture)I 帧通常是每个 GOPMPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。I帧法是帧内压缩法,也称为关键帧压缩法。I帧法是基于离散余弦变换DCTDiscrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。

  帧是组成视频图像的基本单位。关键帧也叫I帧,它是帧间压缩编码里的重要帧;它是一个全帧压缩的编码帧;解码时仅用I帧的数据就可重构完整图像;- D% j" B. F1 8 h3 z1 l) q& S% ]% l5 nI帧不需要参考其他画面而生成。视频文件是由多个连续的图片组成。

  在视频会议系统中,终端发送给MCU(或者MCU发送给终端)的图像,并不是每次都把完整的一幅幅图片发送到远端,而只是发送后一幅画面在前一幅画面基础上发生变化的部分。如果在网络状况不好的情况下,终端的接收远端或者发送给远程的画面就会有丢包而出现图像花屏、图像卡顿的现象,在这种情况下如果没有I帧机制来让远端重新发一幅新的完整的图像到本地(或者本地重新发一幅新的完整的图像给远端),终端的输出图像的花屏、卡顿现象会越来越严重,从而造成会议无法正常进行。

  在视频会议系统中I帧只会在会议限定的带宽内发生,不会超越会议带宽而生效。I帧机制不仅存在于MCU中,电视墙服务器、录播服务器中也存在。就是为了解决在网络状况不好的情况下,出现的丢包而造成的如图像花屏、卡顿,而影响会议会正常进行。

30帧发一个I帧, 所以I帧大一点

 

帧间距

1.什么是 IFG?(What

IFG(Interframe Gap),帧间距,以太网相邻两帧之间的时间断;以太网发送方式是一个帧一个帧发送的,帧与帧之间需要间隙,即帧间距IFG也可称其为IPG (Interpacket Gap)IFG指的是一段时间,不是距离,单位通常用微秒(μs)或纳秒(ns)。如下图所示:

1 帧间距

2.为什么需要IFG?(Why

网络设备和组件在接收一个帧之后,需要一段短暂的时间来恢复并为接收下一帧做准备。

3.IFG的大小为多少?(Importance

IFG的最小值是 96 bit time,即在媒介中发送96位原始数据所需要的时间,在不同媒介中IFG的最小值是不一样的:

不管 10M/100M/1000M的以太网,两帧之间最少要有96bitIFGmin=96bit/speed   (s)

则:10Mmin:          9600 ns

      100Mmin:         960 ns

1000Mmin:        96 ns

4.如何使用IFG?(How

举个具体例子说明,IFG在以太网的流控机制中解决速度匹配问题;

这里涉及到以太网的流控机制,如下图:

2以太网传输示例

 

1)     设备1以其自身的工作时钟(OSC1) 向设备2发送到待发数据;

2)     数据包进入设备2

a)     经过时钟数据恢复器(CDR)的处理,从数据中提取时钟,并基于提取的时钟(CLK2),将数据包存入接收缓存,此时,CLK2OSC1是同步的;

b)     数据从接收缓存,经过上层协议的处理,存入发送缓存;

3)     发送缓存以设备2的工作时钟(OSC2)发送数据,由于以太网是异步工作的,故OSC1OSC2作为不同设备的本地时钟,并不能做到完全同频(以太网设备的工作时钟允许有正负50ppm的频差),上图假设OSC1大于OSC2,那么设备2的接收的速度将大于发送的速度,如果接收缓冲满了,将造成丢包;

如何解决上述丢包问题?

在设备2的发送侧通过减小IFG(帧间距)来加快其发送有效数据包的速度,从而使得发送速度能跟上接收速度。

5.IFG在我们实际工作的应用?

这里主要提到Smartbit 6000C 在产测中的使用。

使用原理:

IFG增大,设备的有效速度减小,可以解决因速度过快丢包的问题;

IFG减小(但必须大于 96 bit time),设备的有效速度增大,可以解决因速度过慢导致测试超时的问题。

 

---------------------------------------------------------------

 

另:IBP帧是什么?

在了解IBP帧之前,先聊聊什么是编码过程中的帧内预测和帧间预测

 

1. 帧内预测编码

帧内编码用来缩减图像的空间冗余。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左上角宏块、左边宏块和上面宏块,因为此宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。

H.264提供9种模式进行4×4像素宏块预测,包括1种直流预测和8种方向预测。在图中,相邻块的AI9个像素均已经被编码,可以被用以预测,如果我们选择模式4,那么,abcd4个像素被预测为与E相等的值,efgh4个像素被预测为与F相等的值,对于图像中含有很少空间信息的平坦区,H.264也支持16×16的帧内编码。

 

2. 帧间预测编码

帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧。码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。H.264的运动估计有以下4个特性。

 

(1)不同大小和形状的宏块分割

对每一个16×16像素宏块的运动补偿可以采用不同的大小和形状,H.264支持7种模式,如图4所示。小块模式的运动补偿为运动详细信息的处理提高了性能,减少了方块效应,提高了图像的质量。

 

(2)高精度的亚像素运动补偿

H.263中采用的是半像素精度的运动估计,而在H.264中可以采用1/4或者1/8像素精度的运动估值。在要求相同精度的情况下,H.264使用1/4或者1/8像素精度的运动估计后的残差要比H.263采用半像素精度运动估计后的残差来得小。这样在相同精度下,H.264在帧间编码中所需的码率更小。

 

(3)多帧预测

H.264提供可选的多帧预测功能,在帧间编码时,可选5个不同的参考帧,提供了更好的纠错性能,这样更可以改善视频图像质量。这一特性主要应用于以下场合:周期性的运动、平移运动、在两个不同的场景之间来回变换摄像机的镜头。

 

(4)去块滤波器

H.264定义了自适应去除块效应的滤波器,这可以处理预测环路中的水平和垂直块边缘,大大减少了方块效应。

 

IBP

视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

 

简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。

 

I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

 

P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

 

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~

 

从上面的解释看,我们知道IP的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有IP,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。

但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。

 

一般平均来说,I的压缩率是7(跟JPG差不多),P20B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

 

参考资料:

[1] http://www.xinfocus.com/blog/post/1zhen-Bzhen-Pzhen-jian-ju-jian-ge-deng.html

[2] Interframe gap Wikipedia. http://en.wikipedia.org/wiki/Interframe_gap

[3] thernet .http://www.cisco.com/en/US/docs/internetworking/technology/handbook/Ethernet.pdf

[4] https://blog.csdn.net/duan_jin_hui/article/details/53582261

[5] https://blog.csdn.net/ymj321/article/details/61414406

[6] https://blog.csdn.net/zhangjiarui130/article/details/69526224

[7] http://blog.csdn.net/oncoding/article/details/3344378

[8] https://blog.csdn.net/minger1202/article/details/52583222

留言列表
来宾
来宾 谢谢博主的分享~
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。