Qt多媒体编程

文章目录

  • 音频

  • 视频

  • Qt Multimedia模块为多媒体编程提供支持。多媒体编程实现的功能注意包括播放音频和视频文件,通过麦克风录制音频,通过摄像头拍照和录像等。相比Qt5,Qt6的多媒体模块做了全新的改写,舍弃了一些类,也引入了一些新的类。所以Qt6中编译Qt5编写的多媒体程序基本是无法成功的

  • Qt 6 多媒体模块是在 Qt 6.2 中才正式发布的

  • Qt 6 多媒体模块在不同的平台上使用不同的后端,Linux上是 GStreamer,Windows 上是 WMF,macOS 和 iOS 上是AVFoundation,Android 上是 Android 多媒体 API

  • Qt 6 多媒体模块包含两个子模块:Qt Multimedia 模块提供了多媒体编程用到的大部分类;Qt Multimedia Widgets 模块提供了多媒体编程中用到的界面组件类,如播放视频时用于显示视频的界面组件类QVideoWidget

  • 要在项目中使用这两个模块,需要在项目配置文件(.pro 文件)中加入

bash 复制代码
QT += multimedia
QT += multimediawidgets
  • 在程序文件中,如果需要用到这两个模块中的类,使用下面的包含(include)语句可以包含模块中的大部分类
cpp 复制代码
#include <QtMultimedia>
#include <QtMultimediaWidgets>

音频

  • QMediaPlayer 可以用于播放经过压缩的音频文件,如 MP3 文件和 WMA 文件
  • QSoundEffect 可以用于播放低延迟音效文件,例如无压缩的 WAV 文件
  • 以上两个类都可以用于播放本地文件和网络文件
  • 常用函数(包括SLOT)
cpp 复制代码
//构造函数
QMediaPlayer::QMediaPlayer(QObject *parent = nullptr)
//设置一个音频输出设备
void setAudioOutput(QAudioOutput *output)
//设置播放媒介来源,本地文件或者网络文件
[slot] void QMediaPlayer::setSource(const QUrl &source)
//设置播放速度,1.0 表示正常速度
void setPlaybackRate(qreal rate)
void setLoops(int loops) //设置播放的循环次数
//返回当前播放器状态
QMediaPlayer::PlaybackState playbackState() const
QMediaMetaData metaData() //返回当前媒介的元数据
qint64 duration() //媒介的持续时间,单位为 ms
void setPosition(qint64 position) //设置当前的播放位置,单位为 ms
qint64 position() //返回当前的播放位置,单位为 ms
void play() //开始播放
void pause() //暂停播放
void stop() //停止播放
  • 常用信号
cpp 复制代码
void durationChanged(qint64 duration) //媒介的持续时间发生变化
void mediaStatusChanged(QMediaPlayer::MediaStatus status) //媒介状态发生变化
void metaDataChanged() //媒介的元数据发生变化
void playbackStateChanged(QMediaPlayer::PlaybackState newState) //播放器状态发生变化
void positionChanged(qint64 position) //播放位置发生变化
void sourceChanged(const QUrl &media) //媒介来源发生变化
  • 在创建一个 QMediaPlayer 对象后,必须先用函数 setAudioOutput()设置一个音频输出设备,再用函数 setSource()设置播放媒介来源(可以是本地文件或网络文件),用函数 play() 开始播放。使用 pause()和 stop()函数可以暂停和停止播放
  • QMediaPlayer 在开始、暂停或停止播放时,播放器状态发生变化,会发射 playbackStateChanged() 信号,函数playbackState()会返回当前播放器状态。播放器状态用枚举类型 QMediaPlayer::PlaybackState 表示,有如下几种取值:
    • QMediaPlayer::PlayingState,正在播放
    • QMediaPlayer::PausedState,暂停播放
    • QMediaPlayer::StoppedState,已停止播放
  • 媒介有元数据,函数 metaData()可以返回当前媒介的元数据,重新设置媒介时会发射 metaDataChanged()信号。媒介的元数据是 QMediaMetaData 类型数据,元数据用"key-value"形式的键值对表示,QMediaMetaData 主要有以下几个函数:
cpp 复制代码
QList<QMediaMetaData::Key> keys() //返回键名称列表
QString stringValue(QMediaMetaData::Key key) //以字符串形式返回一个键的数据
QVariant value(QMediaMetaData::Key key) //以 QVariant 类型返回一个键的数据
  • 利用媒介的元数据,我们可以提取媒介的一些信息,例如对于 MP3 和 WMA 格式的音乐文件, 可以提取歌手(Author)和专辑图片(ThumbnailImage)等信息
枚举常量 类型 意义
Title QString 媒介的标题
Author QStringList 媒介的作者
Description QString 对媒介的描述
FileFormat QMediaFormat::FileFormat 媒介的文件格式
Duration qint64 媒介的持续时间,单位为 ms
AudioBitRate int 音频流的比特率
AudioCodec QMediaFormat::AudioCodec 枚举类型 音频流的编码格式
VideoFrameRate qreal 视频的帧率
VideoBitRate int 视频的比特率
VideoCodec QMediaFormat::VideoCodec 枚举类型 视频流的编码格式
ThumbnailImage QImage 嵌入的专辑缩略图
AlbumTitle QString 专辑标题

视频

  • QMediaPlayer 类不仅能播放音频文件,也可以播放各种常见的视频文件,如 MP4 文件和 WMV文件QMediaPlayer 能对视频文件进行解码,并在某个界面组件上显示视频帧
  • 要使用 QMediaPlayer 播放视频,必须用函数 setVideoOutput()设置用于显示视频的界面组件,有QVideoWidget 和QGraphicsVideoItem 两种显示视频的组件:
    • QVideoWidget 是 QWidget 的子类, 是普通的界面组件
    • QGraphicsVideoItem是适用于图形/视图架构的图形项
cpp 复制代码
void setVideoOutput(QObject *) //设置用于显示视频的界面组件
QObject *videoOutput() //返回显示视频的界面组件
  • 需要用函数 setAudioOutput()设置音频输出通道,否则播放视频时会没有声音
  • 一般需要提前安装以下依赖:
bash 复制代码
sudo apt install libdvdnav4 libdvd-pkg gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libdvdpkg
相关推荐
黑化暴龙魔神--幻梦2 小时前
QT使用TRANSLATIONS添加多国翻译(详细过程)
qt·自动翻译
程序员_大白2 小时前
【2025版】最新Qt下载安装及配置教程(非常详细)零基础入门到精通,收藏这篇就够了
开发语言·qt
高亚奇2 小时前
QT版本 MSVC/MinGW/GCC 含义及如何区分
开发语言·qt
IdahoFalls2 小时前
QT-Windows Kits-版本问题:【“_mm_loadu_si64”: 找不到标识符】解决方案[NEW]
开发语言·c++·windows·qt·算法·visual studio
希忘auto2 小时前
详解关于VS配置好Qt环境之后但无法打开ui界面
qt·vs
希忘auto2 小时前
详解VS2022集成Qt及扩展Qt VS Tools的安装
qt·vs
我在人间贩卖青春2 小时前
Qt 网络编程
网络·qt
IAUTOMOBILE2 小时前
Qt 入门级开发实践:浅析基于 QTtest 项目的 C++ GUI 编程基础
开发语言·c++·qt
我在人间贩卖青春2 小时前
Qt 事件处理
qt·事件处理