一、背景
录制30帧以上游戏画面,输出恒定帧率60帧视频文件出现掉帧
二、分析
经测试,ffmpeg动态帧率转恒定帧率不会有问题,因此,可能可以把ffmpeg的插帧逻辑移植过来。
1、 ffmpeg补帧逻辑
获取解码后的pkt -----> 拿到pkt_duration和编码时间差计算出nb_frames -------->循环nb_frames次对当前帧重复编码
2、录制补帧逻辑
3、录制采集逻辑
start—>获取绝对时间—>gdi截图—>设置pts—>frame入队—>sleep()—>start
gid截图过程平均耗时为30ms一张图,第一张图片的截取时间比较长,需要200多ms。因此采集的速度根本达不到60帧
三、解决过程
1、移植ffmpeg补帧逻辑
录制的采集过程不同于ffmpeg解码,拿不到pkt_duration
,因此不能移植ffmpeg的插帧过程
2、移植ffmpeg原生的录制demo
命令行: