标题:Qt编写视频播放器(支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多种内核)
作者:liudianwu
日期:2022-12-08 13:41
内容:
## 一、前言
花了一年多的时间,终于把这个超级播放器做成了自己想要的架构,用户的需求是一方面,自己架构方面的提升也是一方面,最主要是将界面和解码解耦了,这样才能动态的挂载不同的解码内核到不同的视频监控窗体,多对多关系,而且解耦和才能方便的实现共享解码,整个设计参照了Qt的设计思路,将各种功能做成不同的类组件,同时还有多层基类的设计,最大的提炼共性,本组件设计的视频解码线程基类、视频显示窗体基类、视频文件保存基类等,都是公用的,而且还提供给本地摄像头组件使用,因为共性一样。
## 二、效果图
## 三、体验地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_demo/bin_linux_video。
## 四、相关代码
```cpp
void frmPlayerx::playStart(const QString &url)
{
on_btnStop_clicked();
VideoPara videoPara = ui->videoWidget->getVideoPara();
videoPara.videoCore = VideoCore_FFmpeg;
videoPara.videoUrl = url;
ui->videoWidget->setVideoPara(videoPara);
if (!ui->videoWidget->init()) {
return;
}
//关联采集线程信号槽
VideoThread *videoThread = ui->videoWidget->getVideoThread();
connect(videoThread, SIGNAL(receivePlayStart(int)), this, SLOT(receivePlayStart(int)));
connect(videoThread, SIGNAL(receivePlayFinsh()), this, SLOT(receivePlayFinsh()));
connect(videoThread, ..