388 字
1 分钟
【QT】多媒体
Qt6 多媒体在 6.2 起正式发布。与 Qt5 相比架构变化较大:放弃基于插件的多后端结构,改为统一后端(对用户隐藏)。
模块引入
qmake:
QT += multimedia multimediawidgetsCMake:
find_package(Qt6 REQUIRED COMPONENTS Multimedia MultimediaWidgets)target_link_libraries(MyApp Qt6::Multimedia Qt6::MultimediaWidgets)#include <QtMultimedia>#include <QtMultimediaWidgets>子模块
| 模块 | 内容 |
|---|---|
| Qt Multimedia | 播放、采集、设备、格式等核心类 |
| Qt Multimedia Widgets | QVideoWidget 等界面组件 |
主要类
| 类名 | 功能 |
|---|---|
QMediaPlayer | 播放音频或视频(本地/网络) |
QVideoWidget | 显示视频画面 |
QMediaCaptureSession | 统一管理采集管线(Qt6) |
QCamera | 摄像头 |
QAudioInput / QAudioOutput | 音频输入 / 输出设备 |
QAudioSource / QAudioSink | 原始 PCM 采集 / 播放 |
QImageCapture | 静态拍照 |
QMediaRecorder | 录制音视频 |
QMediaDevices | 枚举系统音视频设备 |
QMediaFormat | 编码与容器格式 |
QVideoSink | 访问/处理视频帧 |
基于 QMediaPlayer 的音频播放(Qt6)
典型步骤:
- 创建
QMediaPlayer setAudioOutput()绑定QAudioOutputsetSource()设置 URL 或本地路径play()/pause()/stop()控制
QMediaPlayer *player = new QMediaPlayer(this);QAudioOutput *audioOutput = new QAudioOutput(this);player->setAudioOutput(audioOutput);player->setSource(QUrl::fromLocalFile("/path/to/music.mp3"));
connect(ui->btnPlay, &QPushButton::clicked, player, &QMediaPlayer::play);connect(ui->btnPause, &QPushButton::clicked, player, &QMediaPlayer::pause);connect(ui->sliderVolume, &QSlider::valueChanged, audioOutput, [audioOutput](int v) { audioOutput->setVolume(v / 100.0);});
player->play();常用信号:positionChanged、durationChanged、playbackStateChanged、errorOccurred。
视频播放
QMediaPlayer *player = new QMediaPlayer(this);QAudioOutput *audioOutput = new QAudioOutput(this);QVideoWidget *videoWidget = new QVideoWidget(this);
player->setAudioOutput(audioOutput);player->setVideoOutput(videoWidget);player->setSource(QUrl("file:///path/to/video.mp4"));
videoWidget->show();player->play();网络视频使用 QUrl("https://...");需平台解码器与格式支持。
摄像头预览(Qt6 概念)
QMediaCaptureSession *session = new QMediaCaptureSession(this);QCamera *camera = new QCamera(QMediaDevices::defaultVideoInput(), this);QVideoWidget *viewfinder = new QVideoWidget(this);
session->setCamera(camera);session->setVideoOutput(viewfinder);
camera->start();viewfinder->show();拍照、录像分别通过 QImageCapture、QMediaRecorder 挂到同一 QMediaCaptureSession。
Qt5 与 Qt6 差异(查阅旧代码时注意)
| Qt5 | Qt6 |
|---|---|
QMediaPlayer + QMediaPlaylist | 播放列表需自行管理或第三方 |
setMedia(QUrl) | setSource(QUrl) |
视频输出 setVideoOutput(QVideoWidget*) | 类似,但常与 QMediaCaptureSession 配合采集 |
| 模块结构多插件 | 单一后端 |
部署注意
- Linux 需 GStreamer 等依赖(视发行版与 Qt 构建选项而定)。
- Windows 常用系统 Media Foundation 或 FFmpeg 后端。
- 嵌入式需确认目标板编解码器与 Qt Multimedia 插件是否可用。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
1
【QT】数据库
StudyNotes 介绍 Qt SQL 主要类、SQLite 建表查询及 QSqlTableModel 与 QTableView 绑定用法。
2
【QT】多线程
StudyNotes 介绍 QThread 两种用法、QtConcurrent、线程同步及跨线程更新 UI 的注意事项。
3
【QT】布局与QSS
StudyNotes 介绍 QHBoxLayout 等布局管理、QSS 选择器语法及与 QPalette、QStyle 的关系。
4
【QT】网络编程
StudyNotes 介绍 QTcpSocket、QUdpSocket、QNetworkAccessManager 及 SSL 等 Qt 网络编程 API。
5
【QT】交叉编译与部署
StudyNotes 以 NXP i.MX 为例说明交叉工具链配置、Qt Creator Kits 及嵌入式板端部署要点。
