首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Qt定时器小坑

Qt定时器小坑

作者头像
Qt君
发布2023-03-17 14:27:51
发布2023-03-17 14:27:51
7510
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

今天在做音视频合成功能,由于Qt的定时器精度问题,导致视频合成有问题。

  视频合成是采用FFmpeg实现的,将h264视频和aac视频合成到mp4容器中。音频写入到mp4容器验证过是正常的,但视频写入到mp4容器中,播放出来总是过快。查看了些资料,一般说是pts的问题,也按着官方文档去做,还是不行。

  使用ffprobe工具统计总帧数却意外发现与预计帧数不一致。10秒的视频设置每秒15帧,共150帧。实际视频只有120帧,就纳闷了输入15帧/秒最后视频合成达不到15帧/秒。

  最后定位到是QTimer的精度问题,视频的输入是通过定时器定时往队列里面拿的,比如设置20帧/秒,那么定时器就会每50ms触发一次。看了QTimer文档发现,该定时器的默认精度会有5%左右的误差。另外发现视频编解码与合成操作在主线程中负载较高,进一步放大定时器的误差。

定时器官方文档介绍:

有关更多QTimer的内容请看往期推文《Qt多种定时器》。

最后的解决方法是:

  1. 独立线程编解码合成;
  2. 设置QTimer定时器为高精度定时器(setTimerType(Qt::PreciseTimer))。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档