qt+ffmpeg 实现音视频播放(四)之音视频同步

ops/2024/10/18 12:24:09/

在处理音视频数据时,解码音频的数据往往会比解码视频的数据比较慢,所以我们在播放音视频时,音频和视频的数据会出现渐渐对不上的情况。尤其在播放时间越长的时候,这种对不上的现象越明显。

为了解决这一问题,人们想出了3种方法:

1、音频向视频同步
2、视频向音频同步
3、音频和视频向系统时钟同步

音视频处理中,每一帧音频或者视频都会有一个与之关联的时间戳,所以向音频或者视频同步,其实就是向它们的时间戳进行同步。

在这3种方法中,人们通常会选择第2种方案,即视频向音频同步,因为人耳对声音的延迟更敏感。本文也是用的这个方案。

它的实现也非常简单。首先就是分别获取当前播放的音频和视频的时间戳,然后计算当前视频与音频的时间差,如果视频比音频快,就根据这个时间差进行相应的延迟;如果视频比音频慢,就丢弃当前帧:

qreal vs = frame->pts * av_q2d(videoStream->time_base);//+ frame->pkt_duration * av_q2d(videoStream->time_base);
qreal as = AudioThread::get()->getTime();
double diff_time = vs - as;//计算视频显示时间与音频播放时间之间的差值
if (diff_time > 0)
{double fps_delay = 1.0 / fps;//计算每帧的延迟,通过将 1.0 除以帧率(fps)来得到double real_delay = fps_delay;av_usleep((diff_time + real_delay) * 1000 * 1000);
}
else
{//audio fasterif (fabs(diff_time) >= 0.05){qDebug() << "unref";//丢帧av_frame_unref(frame);msleep(1);}
}

demo下载:点击跳转

觉得有帮助的话,打赏一下呗。。

           


http://www.ppmy.cn/ops/47827.html

相关文章

【机器学习】原理与应用场景 Python代码展现

机器学习&#xff1a;原理、应用与实例深度解析 引言一、机器学习的基本原理二、机器学习的应用范围三、机器学习实例解析四、机器学习部分讲解五、机器学习的挑战与未来 引言 随着大数据和计算能力的飞速发展&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff0…

45-5 护网溯源 - 远控木马样本溯源

在分析恶意样本时&#xff0c;需要查看包括作者名字、ID、IP地址、域名等在内的相关信息。 把恶意样本上传到微步、360沙箱云分析&#xff1a;样本报告-微步在线云沙箱 (threatbook.com) 动态分析 运行截图 发现该木马是与一个装机软件绑定的&#xff0c;你运行正常软件的时候…

es6中箭头的用法

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;箭头函数&#xff08;Arrow Functions&#xff09;提供了一种更简洁的函数表达式语法&#xff0c;并且它们不绑定自己的this、arguments、super或new.target。这些值由外围的正常函数值&#xff08;即包含箭头函数的…

深入理解feign远程调用的各种超时参数

1. 引言 在spring cloud微服中&#xff0c;feign远程调用可能是大家每天都接触到东西&#xff0c;但很多同学却没咋搞清楚这里边的各种超时问题&#xff0c;生产环境可能会蹦出各种奇怪的问题。 首先说下结论&#xff1a; 1)只使用feign组件&#xff0c;不使用ribbion组件&…

文心一言使用分享

文心一言使用分享 一、初识文心一言 文心一言&#xff08;ERNIE Bot&#xff09;是百度全新一代知识增强大语言模型&#xff0c;它不仅拥有强大的自然语言处理能力&#xff0c;还能与人进行流畅、自然的对话&#xff0c;提供准确、有用的信息。自从我开始使用文心一言以来&am…

【计算机毕业设计】331基于微信小程序的家庭财务管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

SELinux:安全增强型Linux

SELinux&#xff1a;安全增强型Linux 作用&#xff1a; 可以保护linux系统的安全为用户分配最小的权限 状态&#xff1a; Enforcing&#xff1a;强制保护Permissive&#xff1a;宽松状态Disabled&#xff1a;禁用 为了安全性考虑&#xff0c;希望SELinux设置为Enforcing状态…

8086 汇编笔记(四):[BX] 和 loop 指令

一、[BX] [bx] 同样也表示一个内存单元&#xff0c;它的偏移地址在 bx 中&#xff0c;比如下面的指令: mov ax,[bx] 二、loop 指令 通常我们用 loop 指令来实现循环功能&#xff0c;cx 中存放循环次数 案例&#xff1a;计算 2^12 codesg segmentmov ax,2mov cx,11 s: ad…