Qt Multimedi 是提供了一组丰富 QML 类型和 C++ 类,以处理多媒体内容的附件模块。它包含易于使用的 API,用于回放音频和视频文件并在屏幕上渲染这些,及用于从系统摄像头和麦克风录制音频和视频的综合 API。
该模块功能分为下列子模块:
Qt Multimedia | 提供用于特定多媒体用例的 API。 |
Qt Multimedia Widgets | 提供基于 Widget 的多媒体 API。 |
Qt Spatial Audio | 提供用于在 3D 空间实现声场的 API。 |
若要从 Qt 5 移植到 Qt 6,见 Qt Multimedia 的变化 .
若是 Qt Multimedia 新手,QML 类型可以
imported
进应用程序使用以下语句在
.qml
文件。
import QtMultimedia
要链接到 C++ 库,添加以下到工程
CMakeLists.txt
文件。代入
my_project
采用工程名称。
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(my_project PRIVATE Qt6::Multimedia)
下表提纲了一些重要 QML 类型。
类型 | 描述 |
---|---|
MediaPlayer | 将音频/视频回放功能添加到场景。 |
CaptureSession | 创建用于捕获音频/视频的会话。 |
Camera | 访问连接到系统的摄像头。 |
AudioInput | 访问连接到系统的音频输入 (麦克风)。 |
AudioOutput | 访问连接到系统的音频输出 (扬声器、耳机)。 |
VideoOutput | 显示视频内容。 |
MediaRecorder | 录制音频/视频从 CaptureSession . |
ImageCapture | 从摄像头捕获静止图像。 |
视频 | 将视频回放功能添加到场景。使用 MediaPlayer and VideoOutput 类型以提供视频回放功能。 |
下表提纲了一些重要 C++ 类
类 | 描述 |
---|---|
QMediaPlayer | 从源回放媒体。 |
QVideoWidget | 显示来自媒体播放器 (或捕获会话) 的视频。 |
QMediaCaptureSession | 捕获音频/视频。 |
QCamera | 访问连接到系统的摄像头 |
QAudioInput | 访问连接到系统的音频输入 (麦克风)。 |
QAudioOutput | 访问连接到系统的音频输出 (扬声器、耳机)。 |
QImageCapture | 以摄像头捕获静止图像。 |
QMediaRecorder | 从捕获会话录制媒体内容。 |
QVideoSink | 访问和渲染单个视频帧。 |
QAudioSink | 将原生音频数据发送给音频输出设备。 |
对于回放 QMediaPlayer , QAudioOutput 和 QVideoOutput 包含所有要求功能。其它类用于捕获音频和视频内容,其中 QMediaCaptureSession 是管理整个捕获/录制过程的中心类。
Qt Multimedia 模块在商业许可下是可用的来自 Qt 公司 。此外,它在自由软件许可下也是可用的。从 Qt 5.6 起,这些自由软件许可是 GNU LGPL (次一般公共许可) 第 3 版 ,或 GNU GPL (一般公共许可) 第 2 版 。见 Qt 许可 进一步了解细节。
FFmpeg 后端使用 FFmpeg 框架 。FFmpeg 是在 LGPLv2.1、GPLv2 或更高版本许可下,许可的。FFmpeg 的一些可选组件仅在 GPL 下可用。Qt 二进制包随附的 FFmpeg 后端,被配置成不包含仅在 GPLv2 下可用的任何组件。见 FFmpeg 许可页面 进一步了解细节。
在大多数平台,有 2 种不同后端可以用于 Qt Multimedia。
Qt 6.5 设置 FFmpeg 框架 作为 Windows、macOS、Android 和 Linux (除 Yocto 分发外) 的默认后端。本机后端,也就是 Linux 中的 gstreamer,macOS 中的 AVFoundation, Windows 中的 WMF,及 Android 中的 MediaCodec 框架,在 6.4 是默认的。这些仍然可用,但支持有限。这意味着我们将努力修复采用本机后端的关键问题,但不保证修复次要问题,且也不会采用本机后端实现新特征。此外,甚至采用 gstreamer 后端 (在 Linux) 的一些主要问题也不会被修复,由于 gstreamer 最难调试且从属 Linux 分发问题。
我们旨在使所有平台行为,尤其是与 FFmpeg 后端保持一致。尽管如此,事实上,格式、编解码器、高级摄像头特征和屏幕捕获仍存在从属平台问题。这的发生是由于我们无论如何都要使用一些平台 API,即使采用 FFmpeg,且采用 FFmpeg 硬件加速还存在特定问题,主要是在 ARM 体系结构上运行 Linux。已知从属后端的局限性,将文档化在各个类和方法中。
若默认 FFmpeg 后端出现问题,建议采用本机后端进行测试。可以切换到本机后端通过设置
QT_MEDIA_BACKEND
环境变量到
windows
,
gstreamer
(在 Linux),
darwin
(在 macOS),或
android
:
export QT_MEDIA_BACKEND=darwin
为强制将 FFmpeg 赋值作为使用后端,将变量设为 ffmpeg:
export QT_MEDIA_BACKEND=ffmpeg
在 Qt Multimedia 编译阶段,可以配置默认媒体后端凭借 cmake 变量
QT_DEFAULT_MEDIA_BACKEND
.