使用ffmpeg制作c++视频播放器(分享源码)
项目地址: 点击打开链接,欢迎pr。
本项目采用ffmpeg解码视频文件,使用多线程处理解码等操作,是学习多线程的不错的机会,在这个项目开发过程中巩固了不少多线程的知识,视频的处理主要是ffmpeg,音频采用SDL播放,界面使用QT,使用QTmer定时器去刷新一帧帧的视频。音视频同步的采用视频追逐音频的方式实现的同步,缺点是当视频线程处理缓慢的时候会出现视频过慢,但是一会就回追上音频,这种现象出现的非常少。项目的结构如下:
1,项目中的多线程
线程使用的是Qt自带的QThread,主要有两条线程,一个解压音视频文件获取音视频包的线程,一个解码视频包将视频包中的视频帧读出到帧队列的线程。除了这两个线程另外还有一个音频处理 的回调函数,和一个刷新视频的定时器,这几部分构成了整个项目的骨架。本项目使用QWaitCondition,QMutex和QMutexLocker保护线程安全,使用两个线程安全的队列分别存储视频包,视频帧。
2,关于音视频同步
音视频同步是这个项目最复杂的部分了,弄了好久,最后还是参考网上的教程代码实现了同步。由于音频是线性存储在音视频文件中的&