我是靠谱客的博主 斯文钢笔,这篇文章主要介绍openH264帧类型的确定,现在分享给大家,希望可以做个参考。

在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帧类型内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部