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 类现在是一个仅限于录制音频和视频的类。它处理捕获会话中生成的数据的编码。

  • 使用 QMediaFormatQMediaRecorder,设置录制时的所需编码已发生显著变化。

  • 您现在还可以监控由捕获会话录制的音频。

  • 增加了在播放媒体文件时选择音频、视频和字幕轨道的支持。

  • QAudioDecoder 现在在所有平台上都得到支持。

已移除的功能

移除的功能

备注或建议的替代方案

QMediaPlayer中的播放列表

QMediaPlayer在Qt 6中不再处理任何播放列表。

QMediaPlayList

此类已从API中移除。但它仍然作为媒体播放器示例的一部分存在。

QAudioProbe 和 QVideoProbe

音频和视频探测API已被移除。

QAudioRecorder

使用 QMediaCaptureSessionCaptureSession QML 类型。

Audio 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 发生了显著变化:主要是从基于字符串的键转向基于枚举的键,并将支持的键集减少到大多数平台可以支持的键。

QMediaFormat

处理编码媒体的格式和媒体记录器的设置已经发生了显著变化。Qt 5 提供了一个基于字符串的 API,将文件格式、音频和视频编解码器分为三个类。然而,Qt 6 在 QMediaFormat 类中统一了这些格式。额外的设置直接在 QMediaRecorder 中指定。设置文件格式和编解码器现在通过枚举实现,不再使用字符串。这对可使用的编解码器集合有一些限制,但有助于提供一个一致的跨平台 API。

QCameraImageCapture 重命名为 QImageCapture

音频输入和输出

QMediaPlayerQMediaCaptureSession(以及相应的 QML 类型 MediaPlayerCaptureSession)默认情况下未连接到任何音频设备。显式地将它们连接到 QAudioInput / AudioInputQAudioOutput / AudioOutput 以捕获或播放音频。

捕获视频

默认情况下,捕获会话未连接到相机。将其连接到QCamera对象(相机项目)以能够捕获视频或静态图像。