当前位置: 首页 > 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.gsyq.cn/news/1508843.html

相关文章:

  • 2026年青海及西北地区彩钢厂选择指南:实地调研与多维度分析 - 优质品牌商家
  • 解决Go通道痛点:gh_mirrors/cha/channels中的ResizableChannel使用指南
  • 收藏!小白程序员也能入行的AI大模型学习指南,抓住下一个风口!
  • 2026年成都香奈儿奢侈品回收公司怎么选?五家实体店深度横评与真实案例揭秘 - 优质品牌商家
  • Mythos状态机:大模型可验证推理的架构革命
  • 3个精益实操技巧!告别被动应付,让员工主动抢着做现场改善
  • NRT框架:语言模型推理训练的革命性突破
  • Nano-X API完全参考手册:从基础窗口创建到高级图形绘制的实用指南
  • 原神祈愿记录导出工具:免费掌握抽卡数据的终极指南
  • 兰州高三寒假集训核心技术拆解与合规机构解析:兰州暑假高考冲刺班、兰州正规复读学校、兰州正规的高考复读学校、兰州正规高三复读学校选择指南 - 优质品牌商家
  • MuleSoft企业级AI编排:构建可审计、可治理的LLM集成平台
  • 2026年上海汽车凹陷拉拔价格全解析:技术工艺、成本构成与主流服务商对比 - 优质品牌商家
  • STM32H743硬件IIC驱动+AT24C02 EEPROM读写封装(含LED调试指示)
  • 2026南京月子中心连锁店做GEO应该怎么选服务商?本地靠谱GEO服务商推荐与选型指南 - 企业新闻快传
  • go-cache无法清除cache.什么cache可以
  • 佳能清零软件全新版本,ts3380,ts9020,mg3640s,mg3680,g3800,g3000报错5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修好了。
  • PySpark MLlib工业级机器学习实战:从开发到上线的全链路指南
  • 给单片机“喂”程序:保姆级图解Intel HEX文件格式与数据合并原理
  • 从‘插松枝’到生产者-消费者模型:PTA L2-041题背后的经典并发思想浅析
  • 北京游学机构推荐:包含清北名校路线的研学机构推荐 - 品牌2026
  • 别再傻傻只用端口VLAN了!华为交换机MAC-VLAN实战:让员工电脑‘刷脸’上网,访客自动隔离
  • SleepingOwlAdmin快速入门:15个核心功能详解与实战演示
  • 在Linux Mint 22上部署Vosk离线语音识别API:从编译困境到流畅运行
  • 避开这些坑!基于GaN器件CGH40010F的Doherty功放ADS仿真常见误区解析
  • 别死记公式了!用Python+SymPy可视化验证梯度旋度为零(附完整代码)
  • 5个高效技巧:在Obsidian中实现专业级UML图表可视化
  • Consul 1.0 到 1.15:那个曾让运维心惊的脚本检查参数,你还在用吗?
  • 西北全域整体隔断方案正规服务商实力排行:政企单位隔断/甘肃办公室隔断/甘肃办公隔墙/甘肃卫生间隔断/甘肃双玻百叶隔断/选择指南 - 优质品牌商家
  • Go Cookbook错误处理艺术:ErrorGroup与Context的5个高级用法实战指南
  • 2026年代理记账品牌推荐哪家性价比高 - 工业设备