橙色网站模板,绵阳网站建设绵阳,阿里云域名注册邮箱,网站论坛推广方案1 I帧#xff0c;P帧#xff0c;B帧#xff0c;IDR帧#xff0c;NAL单元
I frame#xff1a;帧内编码帧#xff0c;又称intra picture#xff0c;I 帧通常是每个 GOP#xff08;MPEG 所使用的一种视频压缩技术#xff09;的第一个帧#xff0c;经过适度地压缩#…1 I帧P帧B帧IDR帧NAL单元
I frame帧内编码帧又称intra pictureI 帧通常是每个 GOPMPEG 所使用的一种视频压缩技术的第一个帧经过适度地压缩做为随机访问的参考点可以当成图象。I帧可以看成是一个图像经过压缩后的产物
P frame: 前向预测编码帧又称predictive-frame通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像也叫预测帧
B frame: 双向预测内插编码帧又称bi-directional interpolated prediction frame既考虑与源图像序列前面已编码帧也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像也叫双向预测帧
IDR frameI和IDR帧都是使用帧内预测的在编码和解码中为了方便要首个I帧和其他I帧区别开把第一个I帧叫IDR这样就方便控制编码和解码流程所以IDR帧一定是I帧但I帧不一定是IDR帧IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。
NAL单元全称Network Abstract Layer即网络抽象层在H.264/AVC视频编码标准中整个系统框架被分为了两个层面视频编码层面VCL和网络抽象层面NAL。其中前者负责有效表示视频数据的内容而后者则负责格式化数据并提供头信息以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元SPS与PPS除外。在实际的H264数据帧中往往帧前面带有00 00 00 01 或 00 00 01分隔符一般来说编码器编出的首帧数据为PPS与SPS接着为I帧。
2 GOP(Group of pictures)
所谓GOP意思是画面组一个GOP就是一组连续的画面。GOP结构一般涉及两个数字例如M3N12。第一个数字M指定I帧和P帧之间的距离第二个数字N指定两个I帧之间的距离及画面组的大小。对于上面的例子M3N12GOP结构表示为IBBPBBPBBPBBI。在一个GOP内I frame的解码不依赖于任何的其它帧而p frame的解码则依赖于其前面的I frame或者P frameB frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame。
3 H264 encoder GOP setting
Intel Media SDK Encoding Sample 用法如下
sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mkv -hw -d3d -mkv -b 1000 -f 30
sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mp4 -hw -d3d -mux -b 1000 -f 30
编码参数包括输入格式、帧速率、输出比特率、输入视频流宽高、输出视频流宽高等等。这里我们发现比没有设置I、B、P帧信息的相关参数也就是说Demo中并没有开发这样的参数设置。通过查看Intel Media SDK的Guide发现Intel有提供这样的参数让我们可以调整I、B、P的构成具体就是GopOptFlag GopOptFlag Description The GopOptFlag enumerator itemizes special properties in the GOP (Group of Pictures) sequence. Name/Description MFX_GOP_CLOSED B-frames of the first B-interval can never reference the previous GOP MFX_GOP_STRICT The encoder must strictly follow the given GOP structure as defined by parameter GopPicSize, GopRefDist etc in the mfxVideoParam structure. Otherwise, the encoder can adapt the GOP structure for better efficiency, whose range is constrained by parameter GopPicSize and GopRefDist etc
而GopOptFlag所在的位置是 mfxVideoParam - mfxInfoMFX - GopOptFlag 此外还需要利用到的相关参数可以参考mfxInfoMFX的说明主要包括
mfxU16 GopPicSize; mfxU16 GopRefDist; mfxU16 GopOptFlag; mfxU16 IdrInterval;
GopPicSize Number of pictures within the current GOP (Group of Pictures); if GopPicSize0, then the GOP size is unspecified. If GopPicSize1, only I-frames are used. 当前GOP中画面的个数若GopPicSize0则认为GOP尺寸未指定若GopPicSize1则将只使用I帧
GopRefDist Distance between I- or P- key frames; if it is zero, the GOP structure is unspecified. Note: If GopRefDist 1, there are no B-frames used. I或P关键帧之间的距离若为零则认为GOP结构未指定若GopRefDist1则将不使用B帧
GopOptFlag ORs of the GopOptFlag enumerator indicate the additional flags for the GOP specification;
IdrInterval the sequence header before every Nth I-frame. If IdrInterval0(default), SDK inserts the sequence header once at the beginning of the stream 对于H264IdrInterval指定了IDR帧的间隔单位为I帧若IdrInterval0则每个I帧均为IDR帧。若IdrInterval1则每隔一个I帧为IDR帧以此类推。对于 MPEG2, IdrInterval定义了序列头间隔单位为I帧若IdrIntervalNSDK将在每第N个I帧之前插入序列头若IdrInterval0默认SDK将在流开头一次 性插入序列头。 图 1 图 2 图 3
以上图1和图2中红色表示I帧蓝色表示P帧绿色表示B帧其中图2和图3是同一个H264文件图3可体现IdrInterval 1的作用即两个Idr帧间隔一个I帧所以也可以把IDR帧看做是SPS和PPS后面第一个I帧
参考
http://www.cnblogs.com/cslunatic/p/3565984.html
http://en.wikipedia.org/wiki/Group_of_pictures
http://blog.csdn.net/jtujtujtu/article/details/6565287