当前位置: 首页 > news >正文

Qt 多媒体全解|视频播放、录音、摄像头实时预览

模块说明

Qt Multimedia 统一管理音视频、录音、摄像头、媒体播放,Qt5/Qt6 通用。

工程引入模块

pro

QT += multimedia multimediawidgets

cmake

find_package(Qt6 REQUIRED COMPONENTS Multimedia MultimediaWidgets) target_link_libraries(App PRIVATE Qt6::Multimedia Qt6::MultimediaWidgets)

一、功能 1:音视频播放器(QWidget + QML 双版本)

1. QWidget 版本(QMediaPlayer + QVideoWidget)

cpp

运行

#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 版本(简洁推荐)

qml

import 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 摄像头版本

qml

import 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 } }

四、常见问题与适配

  1. Windows 摄像头 / 麦克风无法打开系统隐私设置 → 允许应用访问相机、麦克风。
  2. Linux 无声音 / 无画面安装依赖:sudo apt install libpulse-dev libcamera-dev
  3. 格式不支持Qt 默认支持 MP4、WAV;播放 FLV、MKV 需要额外安装解码器。
  4. Qt6 接口变化Qt6 多媒体底层重构,API 大体兼容,部分音频枚举、设置项略有调整。

小结

Qt Multimedia 一套模块覆盖播放、录音、摄像三大场景,QWidget 适合传统桌面,QML 适合简洁动态界面,是音视频类软件的基础方案。

http://www.jsqmd.com/news/997076/

相关文章:

  • 解决Go通道痛点:gh_mirrors/cha/channels中的ResizableChannel使用指南
  • 收藏!小白程序员也能入行的AI大模型学习指南,抓住下一个风口!
  • 别再乱调了!手把手教你给MOS管驱动电路选电阻(附计算方法和避坑指南)
  • 2026年青海及西北地区彩钢厂选择指南:实地调研与多维度分析 - 优质品牌商家
  • 2026年6月1-6年级优质的提分卷怎么选,同步测试卷/名著导读测试卷/教辅/期中抢分卷/重点名校卷,提分卷口碑推荐 - 品牌推荐师
  • AWS机器学习API部署:SageMaker+Lambda+API Gateway生产实践
  • 2026年,盘点发泡混凝土品牌推荐 - myqiye
  • 2026年成都香奈儿奢侈品回收公司怎么选?五家实体店深度横评与真实案例揭秘 - 优质品牌商家
  • 从RoPE到YaRN:深入浅出图解大模型如何‘记住’更长的对话
  • 如何实现完美的wger数据同步:离线训练与云端同步的完整指南 [特殊字符]️‍♂️
  • 2026水处理设备技术解析:工业水处理系统/工业水处理设备/工业纯化水处理系统/工业纯化水处理设备/广东中山反渗透水处理设备/选择指南 - 优质品牌商家
  • 2026年84消毒液供应商如何联系?实测分析重庆冠兴、沈阳净界、四川蓝淼服务能力 - 优质品牌商家
  • Mythos状态机:大模型可验证推理的架构革命
  • 收藏!小白程序员也能入行的AI大模型学习指南
  • 3个精益实操技巧!告别被动应付,让员工主动抢着做现场改善
  • 思源宋体CN:开源中文字体如何解决你的7大设计痛点
  • 2026年凯誉升学专业吗,费用多少钱? - myqiye
  • 计算机毕业设计之基于大数据的证券分析系统
  • 如何高效使用Balena Etcher:开源镜像烧录工具的完整操作指南
  • 南京口腔连锁店做GEO应该怎么选服务商?2026本地靠谱GEO服务商推荐与选型全攻略 - 企业新闻快传
  • 启动Mem0 REST API服务报错
  • 兰州手工单玻镁岩棉净化板厂商实测评测2026版:青海净化板、兰州不锈钢净化板、兰州中空玻镁净化板、兰州中空玻镁岩棉净化板选择指南 - 优质品牌商家
  • Zephyr-7B对齐技术解析:dDPO与AI Feedback实战指南
  • MATLAB光学设计辅助工具包:光路建模、像差分解与成像性能可视化
  • 2026年异地升学规划机构排名,如何选择? - myqiye
  • NRT框架:语言模型推理训练的革命性突破
  • Nano-X API完全参考手册:从基础窗口创建到高级图形绘制的实用指南
  • Matlab线性方程组求解工具包:四种高斯消元策略实现与自动对比
  • ebpf1 - 小镇
  • MuleSoft企业级AI编排:构建可审计、可治理的LLM集成平台