Qt 多媒体全解|视频播放、录音、摄像头实时预览
模块说明Qt Multimedia 统一管理音视频、录音、摄像头、媒体播放Qt5/Qt6 通用。工程引入模块proQT multimedia multimediawidgetscmakefind_package(Qt6 REQUIRED COMPONENTS Multimedia MultimediaWidgets) target_link_libraries(App PRIVATE Qt6::Multimedia Qt6::MultimediaWidgets)一、功能 1音视频播放器QWidget QML 双版本1. QWidget 版本QMediaPlayer QVideoWidgetcpp运行#include QApplication #include QMainWindow #include QMediaPlayer #include QVideoWidget #include QPushButton #include QVBoxLayout int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; w.resize(800, 500); QMediaPlayer *player new QMediaPlayer(w); QVideoWidget *videoWidget new QVideoWidget(w); QPushButton *btnPlay new QPushButton(播放/暂停); QVBoxLayout *lay new QVBoxLayout; lay-addWidget(videoWidget); lay-addWidget(btnPlay); QWidget *central new QWidget; central-setLayout(lay); w.setCentralWidget(central); // 绑定视频输出窗口 player-setVideoOutput(videoWidget); // 媒体源本地文件/网络流 player-setMedia(QUrl::fromLocalFile(D:/test.mp4)); connect(btnPlay, QPushButton::clicked, [](){ if(player-state() QMediaPlayer::PlayingState) player-pause(); else player-play(); }); w.show(); return a.exec(); }2. QML 版本简洁推荐qmlimport QtQuick 2.15 import QtQuick.Window 2.15 import QtMultimedia 5.15 Window { width: 800 height: 450 visible: true MediaPlayer { id: mediaPlayer source: qrc:/video/test.mp4 } VideoOutput { anchors.fill: parent source: mediaPlayer } MouseArea { anchors.fill: parent onClicked: { if(mediaPlayer.playbackState MediaPlayer.PlayingState) mediaPlayer.pause() else mediaPlayer.play() } } }二、功能 2音频录音麦克风录制基于QAudioRecorder实现麦克风录音支持保存为wav格式。cpp运行#include QApplication #include QMainWindow #include QAudioRecorder #include QPushButton #include QVBoxLayout #include QUrl int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; w.resize(300,200); QAudioRecorder *recorder new QAudioRecorder(w); QPushButton *btnRec new QPushButton(开始录音); QPushButton *btnStop new QPushButton(停止录音); QVBoxLayout *lay new QVBoxLayout; lay-addWidget(btnRec); lay-addWidget(btnStop); QWidget *cen new QWidget; cen-setLayout(lay); w.setCentralWidget(cen); // 设置保存路径 QString savePath D:/record.wav; recorder-setOutputLocation(QUrl::fromLocalFile(savePath)); connect(btnRec, QPushButton::clicked, recorder, QAudioRecorder::record); connect(btnStop, QPushButton::clicked, recorder, QAudioRecorder::stop); w.show(); return a.exec(); }三、功能 3摄像头实时预览调用本地摄像头实时画面显示基于QCamera。cpp运行#include QApplication #include QMainWindow #include QCamera #include QCameraViewfinder #include QVBoxLayout int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; w.resize(640, 480); QCamera *camera new QCamera; QCameraViewfinder *viewFinder new QCameraViewfinder; camera-setViewfinder(viewFinder); camera-start(); // 启动摄像头 QVBoxLayout *lay new QVBoxLayout; lay-addWidget(viewFinder); QWidget *cen new QWidget; cen-setLayout(lay); w.setCentralWidget(cen); w.show(); return a.exec(); }QML 摄像头版本qmlimport QtQuick 2.15 import QtQuick.Window 2.15 import QtMultimedia 5.15 Window { width: 640 height: 480 visible: true Camera { id: camera } VideoOutput { anchors.fill: parent source: camera } }四、常见问题与适配Windows 摄像头 / 麦克风无法打开系统隐私设置 → 允许应用访问相机、麦克风。Linux 无声音 / 无画面安装依赖sudo apt install libpulse-dev libcamera-dev格式不支持Qt 默认支持 MP4、WAV播放 FLV、MKV 需要额外安装解码器。Qt6 接口变化Qt6 多媒体底层重构API 大体兼容部分音频枚举、设置项略有调整。小结Qt Multimedia 一套模块覆盖播放、录音、摄像三大场景QWidget 适合传统桌面QML 适合简洁动态界面是音视频类软件的基础方案。