Qt Multimedia 的变更
Qt 6 是通过有意识地提高框架的效率和使用便捷性来实现的。
我们试图在每个版本中维护所有公开 API 的二进制和源兼容性。但为了使 Qt成为一个更好的框架,一些变更在所难免。
该模块已经进行了重大重构,并发生了分类变更,从核心变更为附加。Qt 6 中的 Qt Multimedia 模块取代了 Qt 5.x 中的 Qt Multimedia 模块。使用 Qt 5 中的 Qt Multimedia 的现有代码可以经过有限的努力即可迁移。
Qt 6 中的新功能
Qt Multimedia 中有许多新功能
- QMediaCaptureSession 类是媒体捕获的中心对象。
- QMediaRecorder 类现在被限制用于录音音频和视频。它处理捕获会话产生的数据编码。
- 使用 QMediaFormat 和 QMediaRecorder,设置录音时的所需编码已发生显著变化。
- 现在也可以监控捕获会话记录的音频。
- 在播放媒体文件时添加了对音频、视频和字幕轨道选择的支持。
- QAudioDecoder 现在在所有平台上都得到了支持。
已删除的功能
已删除功能 | 注释或建议的替代方案 |
---|---|
QMediaPlayer 中的播放列表 | QMediaPlayer 在 Qt 6 中不再处理任何播放列表。 |
QMediaPlayList | 此类已从 API 中删除。然而,它在 媒体播放器示例 中仍然作为一部分存在。 |
QAudioProbe 和 QVideoProbe | 音频和视频探测 API 已被删除。 |
QAudioRecorder | 使用 QMediaCaptureSession 或 QML 中的 CaptureSession 类型。 |
音频 QML 类型 | 使用 MediaPlayer QML 类型。 |
QMediaObject 和 QMediaBindableInterface | 这些类已被删除,转而使用更直接的 API 来设置对象之间的连接,例如使用 setVideoOutput 和 QMediaCaptureSession。 |
QCameraViewFinderSettings | 此类已被删除。请使用 QCameraFormat 来定义相机应使用的分辨率和帧率。 |
QMediaContent | 此类已被删除。请使用 QUrl 代替单个媒体文件。 |
QSound | 请使用 QSoundEffect 代替。 |
QVideoFilterRunnable | 请在 QML 中使用 着色器效果 或在 C++ 中访问 QVideoFrame 的内容。 |
公开的后端 API | Qt 6 中,Qt 多媒体后端 API 是私有的。这提高了支持新多媒体用例的响应时间。在 Qt 5 中,类名包含“控制”或“抽象”关键字的所有类在 Qt 6 中现在是私有的。 |
后端插件 | Qt 6 中的 Qt Multimedia 不再使用插件基础设施来为其后端提供支持。这意味着用户不再需要将那些后端与他们的应用程序捆绑在一起。相反,所使用后端是根据底层操作系统在编译时确定的。Qt 在 Linux 上使用 gstreamer,在 Windows 上使用 WMF,在 macOS 和 iOS 上使用 AVFoundation,在 Android 上使用 Android 多媒体 API。 |
变更的特性
Qt 多媒体中提供的一些类发生了可能影响以前编写的代码的变化。下表突出了这些变化。
变更特性 | 说明 |
---|---|
处理摄像头分辨率和帧率 | 对此的处理已简化,并引入了新的 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 对象(摄像头项目)以能够捕获视频或静止图像。 |
© 2024 Qt 公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可 version 1.3 的条款许可的。Qt 和相应的标志是芬兰及/或其他国家 Qt 公司的 商标。所有其他商标均属于其各自所有者。