【FFmpeg解码实战】(5)实现FFmpeg4.3 + SDL2视频播放器(添加独立线程和队列)(C++)
发布日期:2021-06-29 14:55:02 浏览次数:3 分类:技术文章

本文共 833 字,大约阅读时间需要 2 分钟。

【FFmpeg解码实战】(5)实现FFmpeg4.3 + SDL2视频播放器(添加独立线程和队列)(C++)

在前文《》 中,

我们实现了音视频播放的demo。

在前文的基础上,本文算是音视频同步从㳀入深道路上的第一站。

先来说下前面demo 的缺点,

从代码可以看出,音视频播放是根据音视频帧打包时的存放顺序来播放的。
即,当源视频是一帧video,一帧Audio 这样间隔存放时,播放是正常的。
但当源视频是同时连续好几帧video 或 连续好几帧audio 一起存放时就出问题了。

如下图这种视频,连续12帧Video,连续17帧Audio,使用前面我们实现的播放器,就会出现,音视频不同步的问题了。

根据解码顺序,它会一会儿播视频,一会儿播音频,就不对了。
在这里插入图片描述

本文我们先来实现一个队列,主要实现步骤为:

  1. 创建4个队列,分别为:视频解码队列,音频解码队列,视频播放队列,音频播放队列。(各队列大小先默认50 帧)
  2. 创建四个线程,分别为:音频解码线程,视频解码线程,读取源数据paket 线程,音视频播放线程
  3. 在读取源数据paket 线程中,当读取到 一个packet 数据包时,分别送入音频解码队列,或视频解码队列。
  4. 在音频解码线程中,当音频解码队列有数据时,就开始解码。队列没数据则等待。
  5. 在视频解码线程中,当视频解码队列有数据时,就开始解码。队列没数据则等待。
  6. 在音视频播放线程中,先不管pts/dts/timestamp,先实现播放一帧音频,接着播放一帧视频,即保持音/视频音隔播放。
  7. 在主函数中,检测鼠标、按键等动作。

本文链接: 《》

本文VS2019 项目工程文件打包:《》

好,思路确定了,我们根据思路来实现吧。^_^

一、队列 & 线程 - 代码实现

二、读取源数据paket 线程 - 代码实现

三、音频解码线程 - 代码实现

四、视频解码线程 - 代码实现

五、音视频播放线程 - 代码实现

六、主函数监测鼠标按键 - 代码实现

七、完整代码

转载地址:https://ciellee.blog.csdn.net/article/details/109197602 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【车机xxx视频需求实现 1】 - 需求分析 及 实现思路(车内DMS/AVR/ROA摄像头)
下一篇:【LeetCode #46 题解】 全排列(递归回朔法、非递归实现)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月22日 11时11分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

了解这些操作,Python中99%的文件操作都将变得游刃有余! 2019-04-29
知道如何操作还不够!深入了解4大热门机器学习算法 2019-04-29
只有经历过,才能深刻理解的9个编程道理 2019-04-29
发现超能力:这些数据科学技能助你更高效专业 2019-04-29
AI当道,人工智能将如何改变金融业? 2019-04-29
消除性别成见,技术领域需要更多“乘风破浪的姐姐” 2019-04-29
7行代码击败整个金融业,这对20多岁的爱尔兰兄弟是如何做到的? 2019-04-29
2020十大编程博客:私藏的宝藏编程语言博客大放送! 2019-04-29
编程中的角色选择:哪类工作角色最适合你? 2019-04-29
10种算法一文打尽!基本图表算法的视觉化阐释 2019-04-29
未来属于人工智能工程师,但成功转型不容易 2019-04-29
科技界“挠头”:困扰科技界可持续发展的难题 2019-04-29
20年后,这5种编码语言可能就消失了…… 2019-04-29
标准出现问题,人工智能正在走向错误的方向 2019-04-29
如何使用Python实现最低有效位隐写术? 2019-04-29
湮没在赞誉之中,科学史上鲜为人知的五大“败笔” 2019-04-29
别再对分类变量进行独热编码!你还有更好的选择 2019-04-29
如果不能用Python执行机器学习,那该用什么呢? 2019-04-29
不论何时,互联网从业者一直幸福着~ 2019-04-29
mysql用户口令中含有特殊字符@的情况下,如何正确链接数据库 2019-04-29