标题:Qt音视频开发31-qmedia内核qt5/qt6播放视频
作者:liudianwu
日期:2023-03-29 09:02
内容:
## 一、前言
在qt5中的多媒体框架明显比qt4丰富了很多,使用也极其友好,提供的api接口非常简单明了,不需要像qt4中那样还需要绑定和创建路径之类的。同样也还是依赖本地解码器,qt6中的多媒体框架据说重写了,性能暴增很多,后端还支持多种解码方式,比如可以选用ffmpeg作为后端解码,这样的话就统一起来了,而且完全的跨平台,性能上主要体现在cpu的占用极低,但是也有缺点,那就是目前为止的版本比如Qt6.5及以下,还不支持视频流的播放,具体原因未知,不知道后期是否会加入支持还是架构原因不支持。
播放视频基本流程:
- 实例化视频播放控件 new QMediaPlayer
- 实例化视频显示控件 new QVideoWidget
- 设置视频输出对象 mediaPlayer->setVideoOutput(videoWidget)
- Qt6需要单独指定音频输出 new QAudioOutput/mediaPlayer->setAudioOutput(audioOutput)
- 设置播放地址 mediaPlayer->setMedia/mediaPlayer->setSource
- 开始/暂停/停止 mediaPlayer->play()/mediaPlayer->pause()/mediaPlayer->stop()
## 二、效果图
## 三、体验地址
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
QMediaThread::QMediaThread(QObject *parent) : VideoThread(parent)
{
//部分版本非句柄模式需要初始化音频输出设备(这可能是Qt的bug/不这样处理会崩溃)
#if 1
QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setSampleType(QAudioFormat::SignedInt);
format ..
#1 请教大神: Qt6.5 QMediaPlayer播放中文名媒体文件失败,如何处理? [wzr2008 06-07 21:16]
Qt6.5 代码:
```c++
QString filename = QFileDialog::getOpenFileName(this, "选择", "f:");
//...
QAudioDevice defaultDevice = QMediaDevices::defaultAudioOutput();
QAudioOutput * audioOutput = new QAudioOutput(defaultDevice);
audioOutput->setVolume (0.1);
QMediaPlayer * player = new QMediaPlayer();
player->setAudioOutput (audioOutput);
player->setSource(QUrl::fromLocalFile(filename));
player->play ();
qDebug()