概述
在openh264中帧类型只有IDR帧和P帧,IDR帧的确定根据三个条件进行判定:
1、关键帧的间隔——intraPeriod,这个值在编码配置文件中进行设置;
2、是否有场景切换;
3、是否将当前帧作为IDR帧的标志,第一帧肯定是IDR帧。
只要满足三个条件中的一个就可以将该帧定位IDR帧。
针对条件1:
如果编码当前帧的索引编号FrameIndex大于等于intraPeriod,即将bIdrPeriodFlag设为true,否则为false。
针对条件2:
a. 场景切换检测出场景为LARGE_CHANGE_SCENE时,场景切换的标志bSceneChangeFlag设为true,否则为false。
b. 在编码配置文件中设置场景切换检测标志enableSceneChangeDetect为true或false。
c. 编码确定的空间层数是否小于编码配置文件中设置的空间层数。
d. 当前帧的索引编号FrameIndex是否小于VGOP_SIZE<<1。
对上述4个条件,如果满足:
if(a || !b || c || d)
changeFlag = false;
else
changeFlag = bSceneChangeFlag;
帧对条件3:
将当前帧作为IDR帧的标志bEncCurFrmAsIdrFlag,在初始化层的函数中InitDqLayers()中设置该标志为true,确定第一帧为IDR帧,后续根据其他情况进行修改。
if(bIdrPeriodFlag || changeFlag || bEncCurFrmAsIdrFlag)
iFrameType = IDR;
else
iFrameType = P;
最后
以上就是斯文钢笔为你收集整理的openH264帧类型的确定的全部内容,希望文章能够帮你解决openH264帧类型的确定所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复