H264编码器的参数

本文转载地址:http://blog.csdn.net/yx_l128125/article/details/7593470

写作背景:最近在研究H264编码器的参数,里面的参数不太懂,其中包括:

1)  30 # i intervals  // I 帧间距

2)30 # 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)//帧率

先对简单的进行解释:

2)idr帧间距

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

3)b帧数

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

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

4)min qp 最小量化步长

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


5)max qp最大量化步长

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

6)码流(Data Rate)

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

7) 帧率

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

I帧

I帧(I frame) 又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。I帧法是帧内压缩法,也称为“关键帧”压缩法。I帧法是基于离散余弦变换DCT(Discrete 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帧大一点

 

帧间距

以下来自博客:http://blog.csdn.net/oncoding/article/details/3344378

1.什么是 IFG?(What)

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

ifg

图 1 帧间距

2.为什么需要IFG?(Why)

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

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

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

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

则:10Mmin:          9600 ns

      100Mmin:         960 ns

1000Mmin:        96 ns

4.如何使用IFG?(How)

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

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

H264编码器的参数_第1张图片

图 2以太网传输示例

 

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

2)     数据包进入设备2:

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

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

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

如何解决上述丢包问题?

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

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

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

使用原理:

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

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

参考资料:

[1] 以太网流控机制及其基于VSC7323的实现. http://tech.c114.net/169/a266942.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


你可能感兴趣的:(H264编码器的参数)