变更内容Qt Multimedia
Qt 6 的变更,是出于让该框架更高效、更易于使用的有意识努力。
我们力求在每个版本中保持所有公共 API 的二进制和源代码兼容性。但为了使 Qt 成为更好的框架,某些变更在所难免。
该模块已经过大幅重构,分类也从“必备”变更为“附加”。Qt 6 中的Qt Multimedia 模块取代了 Qt 5.x 中的Qt Multimedia 模块。使用 Qt 5 中Qt Multimedia 的现有代码只需少量工作即可移植。
Qt 6 的新功能
Qt Multimedia 中包含多项新功能:
- QMediaCaptureSession `class` 是媒体捕获的核心对象。
- QMediaRecorder 类现已成为专用于音频和视频录制的类。它负责处理捕获会话中生成的数据的编码。
- 通过使用 `QMediaFormat ` 和 `QMediaRecorder`,录制时设置所需编码的方式已发生显著变化。
- 现在,您还可以监听捕获会话录制的音频。
- 已新增在播放媒体文件时选择音频、视频和字幕轨道的支持。
- QAudioDecoder 现在所有平台都支持该功能。
已移除的功能
| 已移除的功能 | 注释或建议的替代方案 |
|---|---|
| Qt 6 中的QMediaPlayer | QMediaPlayer 在 Qt 6 中不再处理任何播放列表相关功能。 |
| QMediaPlayList | 该类已从 API 中移除。不过,它作为“媒体播放器示例”的一部分仍然存在。 |
| QAudioProbe 和 QVideoProbe | 音频和视频探测 API 已被移除。 |
| QAudioRecorder | 请使用QMediaCaptureSession 或CaptureSession QML类型。 |
| 音频 QML 类型 | 请使用MediaPlayer QML 类型。 |
| QMediaObject 和 QMediaBindableInterface | 这些类已被移除,取而代之的是更直接的 API,用于通过 setVideoOutput 和QMediaCaptureSession 等方法在对象之间建立连接。 |
| QCameraViewFinderSettings | 该类已被移除。请使用 `QCameraFormat ` 来定义相机应使用的分辨率和帧率。 |
| QMediaContent | 该类已被移除。请改用 `QUrl ` 来处理单个媒体文件。 |
| QSound | 请改用QSoundEffect 。 |
| QVideoFilterRunnable | 请改用 QML 中的着色器效果,或者在 C++ 中访问QVideoFrame 的内容。 |
| 公共后端 API | 在 Qt 6 中,Qt Multimedia 的后端 API 已被设为私有。此举有助于提高响应速度,以支持新的多媒体用例。在 Qt 5 中,类名中包含“Control”或“Abstract”字样的任何类,在 Qt 6 中均已设为私有。 |
| Linux 平台对 ALSA 音频的支持尚处于实验阶段 | Linux 平台上的音频功能需要 PulseAudio。实验性的 ALSA 支持将在未来的 Qt 版本中被废弃。详情请参阅Linux 平台说明。 |
功能变更
Qt Multimedia 中此前提供的若干类已发生变更,这些变更可能会影响先前编写的代码。下表列出了这些变更。
| 变更功能 | 说明 |
|---|---|
| 相机分辨率和帧率的处理 | 相关处理已得到简化,并且新增了一个QCameraFormat 类,可协助为摄像头选择正确的分辨率和帧率。 |
| C++ 端的视频输出处理方式发生了重大变化。 | QAbstractVideoSurface已被QVideoSink 类取代,并且通用渲染支持已得到增强,以涵盖Qt Multimedia 支持的所有像素格式。 |
| 元数据类型 | QMediaMetaData 发生了重大变化:主要是将键从基于字符串的改为基于枚举的,并将支持的键集缩减为大多数平台都能支持的键。 |
| QMediaFormat | 对编码媒体格式的处理以及媒体录制器的设置发生了重大变化。Qt 5 提供基于字符串的 API、独立的文件格式,并将音频和视频编解码器划分为三个类。然而,Qt 6 将这些格式统一到了 `QMediaFormat ` 类中。 其他设置可直接在QMediaRecorder 中指定。文件格式和编解码器的配置现通过枚举实现,不再使用字符串。这虽然对可用的编解码器集造成了一些限制,但有助于提供一致的跨平台API。 |
| QCameraImageCapture 更名QImageCapture | 无 |
| 音频输入和输出 | QMediaPlayer 以及 `QMediaCaptureSession `(及其对应的 QML 类型 `MediaPlayer ` 和 `CaptureSession`)默认未连接至任何音频设备。需将其显式连接至 `QAudioInput` / `AudioInput ` 或 `QAudioOutput` / `AudioOutput `,方可进行音频捕获或播放。 |
| 视频录制 | 默认情况下,捕获会话未连接到任何摄像头。请将其连接到QCamera 对象(Camera 项),以便能够捕获视频或静态图像。 |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.