Qt Multimedia的更改¶
将Qt Multimedia迁移到Qt 6。
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或 CaptureSession QML 类型。使用 MediaPlayer QML 类型。
QMediaObject 和 QMediaBindableInterface
这些类已被移除,转而使用更直接的API来设置对象之间的连接,例如使用 setVideoOutput 和
QMediaCaptureSession。QCameraViewFinderSettings
该类已被移除。使用
QCameraFormat来定义相机应使用的分辨率和帧率。QMediaContent
该类已被移除。请使用 QUrl 代替单个媒体文件。
QSound
请使用
QSoundEffect代替。QVideoFilterRunnable
在QML中使用着色器效果,或者在C++中访问
QVideoFrame的内容。公共后端API
Qt Multimedia的后端API在Qt 6中是私有的。这提高了支持新多媒体用例的响应时间。在Qt 5中类名包含“Control”或“Abstract”的任何类在Qt 6中都是私有的。
后端插件
Qt 6中的Qt Multimedia不再使用插件基础设施来支持其后端。这意味着用户不再需要将那些后端与他们的应用程序一起发布。相反,所使用的后端是在编译时根据底层操作系统确定的。Qt在Linux上使用gstreamer,在Windows上使用WMF,在macOS和iOS上使用AVFoundation,在Android上使用Android多媒体API。
更改的功能¶
许多以前在Qt Multimedia中提供的类已经发生了变化,这些变化可能会影响以前编写的代码。下表重点介绍了这些变化。
更改的功能
备注
处理相机分辨率和帧率
这些处理已经简化,新的
QCameraFormat类帮助选择相机的正确分辨率和帧率。C++端的视频输出处理发生了显著变化。
QAbstractVideoSurface已被
QVideoSink类取代,并且通用渲染支持已增强,以覆盖Qt Multimedia支持的所有像素格式。元数据类型
QMediaMetaData发生了显著变化:主要是从基于字符串的键转向基于枚举的键,并将支持的键集减少到大多数平台可以支持的键。处理编码媒体的格式和媒体记录器的设置已经发生了显著变化。Qt 5 提供了一个基于字符串的 API,将文件格式、音频和视频编解码器分为三个类。然而,Qt 6 在
QMediaFormat类中统一了这些格式。额外的设置直接在QMediaRecorder中指定。设置文件格式和编解码器现在通过枚举实现,不再使用字符串。这对可使用的编解码器集合有一些限制,但有助于提供一个一致的跨平台 API。QCameraImageCapture 重命名为
QImageCapture无
音频输入和输出
QMediaPlayer和QMediaCaptureSession(以及相应的 QML 类型 MediaPlayer 和 CaptureSession)默认情况下未连接到任何音频设备。显式地将它们连接到QAudioInput/ AudioInput 或QAudioOutput/ AudioOutput 以捕获或播放音频。捕获视频
默认情况下,捕获会话未连接到相机。将其连接到
QCamera对象(相机项目)以能够捕获视频或静态图像。