Qt ffmpeg解码av_read_frame 实现暂停功能

本文介绍了在视频解码过程中,如何通过线程和条件变量实现暂停与时间校准,重点讲解了使用QWaitCondition处理暂停期间的时间调整以及帧发送策略。

解码的时候都是通过线程while读出视频流
然后在转为QImage发送出去
暂停就是把线程给暂停
通过QWaitCondition 或是 std::condition_variable(例子用的是std::condition_variable)
因为是通过帧的时间戳来发送QImage
在计算时间戳的时候,需要把暂停这段时间给减上就行了

// 记录开始读视频流的时间戳
qint64 start_ms = QDateTime::currentDateTime().toMSecsSinceEpoch();
// 暂停时长时间戳
qint64 wait_ms = 0;
// 当前时间减去start_ms
// 判断是否大于dts时间戳
// 小于就等待
// 大于就开始读下一帧
qint64 msec = 0;
status = VideoProcess::__running;

// 枚举类型
// __stop = 0
// __running = 1
// __pause = 2
while (status > VideoProcess::__stop)
{
   
   
    res = av_read_frame(decode->fmtCnt, &decode->packet);
    if
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值