Intel Media SDK H264 encoder GOP setting
I帧和IDR帧区别:I帧不是立刻刷新帧,后面的p,b也会参考I帧前面的帧,IDR则不用参考。IDR帧的分布是可以控制的,IdrInterval ,对于H264,IdrInterval指定了IDR帧的间隔,单位为I帧;若IdrInterval=0,则每个I帧均为IDR帧。若IdrInterval=1,则每隔一个I帧为IDR帧,以此类推。对于 MPEG2, IdrInterval定义了序列头间隔,单位为I帧,若IdrInterval=N,SDK将在每第N个I帧之前插入序列头;若IdrInterval=0(默认),SDK将在流开头一次 性插入序列头。(I帧和IDR帧直观区别)IDR是SPS和PPS后面的第一个I帧。在h264的文件中并不是所有的I帧前面都有sps和pps,所以并不是所有的I帧是IDR帧。
关于GOP:GopPicSize设置了GOP的大小,若GopPicSize=0,则认为GOP尺寸未指定,若GopPicSize=1,则将只使用I帧。
GopRefDist :I或P关键帧之间的距离;若为零,则认为GOP结构未指定,若GopRefDist=1,则将不使用B帧。
GopOptFlag :(MFX_GOP_CLOSED ,MFX_GOP_STRICT )
num_ref_frames:该值体现在序列参数集中,num_ref_frames指定了长期的和短期的参考帧的最大总数目,互补的参考场对和在解码过程中对于任何序列使用的帧间预测的非配对的参考场。num_ref_frames也决定了滑动窗口的操作大小过程。num_ref_frames值在0-16之间,包括边界值。
因为h264是采用多帧参考模式(多参考帧)。
GopRefDist 是I帧或p帧之间的距离(参考图片),这里注意并不是指IDR帧或P帧之间的距离。
这个参数好像对于cloded模式没有作用,对于非closed模式的i帧(非IDR帧)有效,可以进行相关设置。详细如图:
InitialDelayInKB和BufferSizeInKB 如果设置为零,可以通过bitrate, frame rate, profile, level计算出来!