linux下QT,FFMPEG, SDL2制作简易播放器

在Ubuntu环境下使用QT做界面,ffmpeg解码视频,SDL播放音乐,制作一个简易的视频播放器。

该视频播放器的主要运行三条线程,需要两条队列:

线程1(音视频数据分离):使用FFMPEG分解视频文件,将视频数据存入到视频队列中,将音频数据存入到音频队列中。

线程2(视频解码):从视频队列中获取一包视频数据,通过FFMPEG解码该包视频数据,解码后再将视频转换为RGB数据,最后通过QT的画图显示将视频画面显示出来。

线程3(音频解码):实际该线程由SDL新建,它是通过回调的方式来从音频队列中获取音频数据,由SDL解码后再进行声音的播放。


注意点:

(一)音视频的同步:
    每次进行图片获取的时候,都需要与音频播放的PTS时间做对比,如果视频播放的pts太快,那么久需要延时等待音频的播放,这样就可以实现音视频的同步。

(二)拖动播放进度条;
    当发生拖动的时候,获取拖动到的位置,然后再根据视频文件总的时间来计算拖动点在文件的位置,然后可以通过FFMPEG来查找拖动点附近最近的一个视频关键帧,进而从该关键帧点开始播放视频。
    

实际运行效果如下:


说明:

本人测试开发环境和安装软件版本如下:

linux: Ubuntu16.04
FFMPEG: ffmpeg-4.1.3
SDL: SDL2-2.0.9
lame: lame-3.100
x264: x264-snapshot-20190610-2245
QT: qt-opensource-linux-x64-5.9.0.run

扫描二维码关注公众号,回复: 6680867 查看本文章

版权说明:源代码从叶海辉中获取 http://blog.yundiantech.com/

修改说明:
    (1)在源码的基础上,添加了代码注释和说明,供新手参考,也给自己做一个学习备忘记录。
    (2)源码是在Windows下跑的,FFMPEG和SDL库也是Windows的库,我将这些库修改为了适合ubuntu16.04使用的linux库。
    

代码结构如下:

biao@ubuntu:~/QT/MediaPlay/VideoPlayer_5$ 
biao@ubuntu:~/QT/MediaPlay/VideoPlayer_5$ tree
.
├── src
│   ├── main.cpp
│   ├── mainwindow.cpp
│   ├── mainwindow.h
│   ├── mainwindow.ui
│   └── videoplayer
│       ├── videoplayer.cpp
│       └── videoplayer.h
├── VideoPlayer_5.pro
└── VideoPlayer_5.pro.user

2 directories, 8 files
biao@ubuntu:~/QT/MediaPlay/VideoPlayer_5$ 


修改后工程下载路径:mediapaly.rar



 

猜你喜欢

转载自blog.csdn.net/li_wen01/article/details/92238467