Qt多媒体变更#

将Qt多媒体迁移到Qt 6。

Qt 6是精心努力使框架更加高效和易于使用的成果。

我们尝试在每次发布中保持所有公共API的二进制和源代码兼容性。但在努力使得Qt成为一个更好的框架时,一些变化是不可避免的。

此模块已经进行了重大重构,并改变了分类,从基本到附加。Qt 6中的Qt多媒体模块取代了Qt 5.x中的Qt多媒体模块。使用Qt 5的Qt多媒体的现有代码可进行有限的迁移。

Qt 6的新功能#

Qt多媒体有许多新功能

  • QMediaCaptureSession类是媒体捕获的中心对象。

  • QMediaRecorder类现在是一个仅限于音频和视频记录的类。它处理捕获会话产生的数据的编码。

  • 使用QMediaFormatQMediaRecorder,在记录时设置所需的编码已发生重大变化。

  • 现在您还可以监视捕获会话记录的音频。

  • 已添加在播放媒体文件时选择音频、视频和字幕轨道的功能。

  • QAudioDecoder现在支持所有平台。

移除的功能#

移除的功能

注意事项或建议的替代方案

QMediaPlayer中的播放列表

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

QMediaPlayList

此类已从API中移除。然而,它在媒体播放器示例中仍存在。

QAudioProbe和QVideoProbe

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

QAudioRecorder

请使用QMediaCaptureSessionCaptureSession 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 中的私有类。

后端插件

Qt 6 中的 Qt Multimedia 不再使用后端插件基础结构。这意味着用户不再需要将其应用程序与这些后端一起分发。相反,用于的后端在编译时基于底层操作系统确定。Qt 在 Linux 上使用 gstreamer,在 Windows 上使用 WMF,在 macOS 和 iOS 上使用 AVFoundation,在 Android 上使用 Android 多媒体 API。

变更的功能##

Qt Multimedia 中提供的一些类的变更可能会影响之前编写的代码。以下表格突出显示这些更改。

更改的功能

说明

处理相机分辨率和帧率

处理方式已简化,引入了一个新的 QCameraFormat 类,以帮助选择正确的相机分辨率和帧率。

C++ 侧的视频输出处理已发生重大变化。

已用 QVideoSink 类替换了 QAbstractVideoSurface,并且通用渲染支持得到增强,涵盖了 Qt Multimedia 支持的所有 像素格式

元数据类型

QMediaMetaData 已发生重大变化:主要是从基于字符串的密钥迁移到基于枚举的密钥,并减少了支持的密钥集合,以使其能在大多数平台上得到支持。

QMediaFormat

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

QCameraImageCapture更名为QImageCapture

None

音频输入和输出

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

捕捉视频

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