Qt多媒体

"image of multimedia icons, courtesy of misirlou from the Noun Project"

Qt多媒体是一个附加模块,它提供了丰富的QML类型和C++类来处理多媒体内容。它包含了一个易于使用的API来播放和渲染音频和视频文件,并在屏幕上显示,同时还包含了一个全面的API来从系统的摄像头和麦克风录制音频和视频。

此模块的功能分为以下子模块:

Qt多媒体提供特定于多媒体用例的API。
Qt多媒体小部件提供基于小部件的多媒体API。
Qt空间音频提供用于实现3D空间中声音场的API。

入门

如果您正在从Qt 5迁移到Qt 6,请参阅Qt多媒体更改

如果您是Qt多媒体新手,可以使用以下语句将QML类型导入应用程序的.qml文件中。

import QtMultimedia

要链接到C++库,请将以下内容添加到项目CMakeLists.txt文件中。将my_project替换为您的项目名称。

find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(my_project PRIVATE Qt6::Multimedia)

有关从源代码构建Qt多媒体的指导,请参阅从源代码构建Qt多媒体

概述和重要主题

QML类型

下表概述了一些重要的QML类型。

类型描述
MediaPlayer向场景添加音频/视频播放功能。
CaptureSession创建音频/视频捕获会话。
Camera访问连接到系统的摄像头。
AudioInput访问连接到系统的音频输入(麦克风)。
AudioOutput访问连接到系统的音频输出(扬声器,耳机)。
VideoOutput显示视频内容。
MediaRecorderCaptureSession录制音频/视频。
ImageCapture从摄像机捕获静态图像。
Video向场景添加视频播放功能。使用MediaPlayerVideoOutput类型提供视频播放功能。
ScreenCapture捕获屏幕。
WindowCapture捕获顶层窗口。

C++类

下表概述了一些重要的C++类

描述
QMediaPlayer从源播放媒体。
QVideoWidget从媒体播放器或捕获会话显示视频。
QMediaCaptureSession捕获音频和视频。
QCamera访问连接到系统的摄像头。
QAudioInput访问连接到系统的音频输入(麦克风)。
QAudioOutput访问连接到系统的音频输出(扬声器,耳机)。
QImageCapture使用相机捕获静态图像。
QMediaRecorder从捕获会话中录制媒体内容。
QVideoSink访问并渲染单个视频帧。
QAudioSink将原始音频数据发送到音频输出设备。
QScreenCapture捕获屏幕。
QWindowCapture捕获顶层窗口。

对于播放QMediaPlayerQAudioOutput和QVideoOutput包含所有所需功能。其他类用于捕获音频和视频内容,其中QMediaCaptureSession是管理中心捕获/录制过程的类。

许可证和归属权

Qt Multimedia模块在Qt公司提供商业许可证。此外,它还可在免费软件许可证下获得。自Qt 5.6以来,这些免费软件许可证是GNU Lesser General Public License,版本3GNU General Public License,版本2。有关更多信息,请参阅Qt 许可

此外,Qt 6.7.2中的Qt Multimedia可能包含以下宽松许可下的第三方模块

FFmpeg,版本n6.1

GNU Lesser General Public License v2.1或更高版和BSD 3-Clause "New"或"Revised" License和BSD 2-Clause "Simplified" License和BSD Source Code Attribution和ISC License和MIT License和Mozilla Public License 2.0

boost

Boost Software License 1.0

libjpeg

Independent JPEG Group License

zlib

zlib License

请注意,视频压缩标准,如H.264媒体压缩标准,可能受专利保护,并可能产生版税。这可能适用于任何实施,即使实施作为操作系统服务、第三方库或通过Qt Multimedia的任何后端提供。此类费用不由Qt许可证覆盖。

目标平台和后端说明

我们旨在使所有平台的行为一致,但需要考虑一些问题。

后端

在大多数平台上,可以用于Qt Multimedia的两个不同的后端。

FFmpeg作为默认后端

在此版本中,FFmpeg框架被设置为Windows、macOS、Android和Linux(除Yocto发行版外)的默认后端。

与Qt二进制软件包一起提供的版本是FFmpeg 6.1.1,并由维护者进行了测试。

注意:在Windows和macOS平台上,Qt的FFmpeg媒体后端使用动态链接到FFmpeg库。因此,Windows和macOS应用程序必须在它们的安装程序中捆绑FFmpeg二进制文件,并在运行时使其可见。在Windows上,我们建议将FFmpeg dlls存储在与应用程序可执行文件相同的目录中,因为这保证了如果系统上可用多个版本,则正在使用正确的FFmpeg构建。所有必要的FFmpeg库都包含在Qt在线安装程序中,并在使用windeployqt或macdeployqt工具创建部署时自动部署。应用程序也可以部署自己的FFmpeg构建,只要FFmpeg的主版本与Qt使用的版本匹配。

注意:有关Qt提供的软件包中删除的组件,请参阅许可证和归属权

本地后端

这些是

  • Linux上的GStreamer
  • macOS和iOS上的AVFoundation
  • Windows上的WMF
  • Android上的MediaCodec框架

注意: 这些仍然可用,但支持有限。gstreamer后端仅在Linux上可用。

后端支持

维护人员将努力解决原生后端的重大问题,但不保证解决小问题,也不会为原生后端实现新功能。此外,由于gstreamer难以调试且依赖于Linux发行版而进一步复杂化,因此即使是gstreamer后端(在Linux上)的一些重大问题也可能无法修复。

我们的目标是使所有平台的行为一致,尤其是在FFmpeg后端上。尽管如此,由于Qt多媒体API依赖于目标平台API,我们仍然在格式、编解码器、高级摄像头功能和屏幕捕捉方面存在平台相关的问题。例如,使用FFmpeg时,-arm架构的Linux目标上有特定的硬件加速问题。

后端依赖的限制将在相应的类中进行说明并可维护其状态。

更改后端

如果在默认的FFmpeg后端遇到问题,我们建议使用原生后端进行测试。您可以通过设置QT_MEDIA_BACKEND环境变量为windows、gstreamer(在Linux上)、darwin(在macOS和iOS上)或android来切换到原生后端。

export QT_MEDIA_BACKEND=darwin

为了强制将FFmpeg设置为使用的后端,请设置该变量为ffmpeg

export QT_MEDIA_BACKEND=ffmpeg

在Qt多媒体编译阶段,默认媒体后端可以通过cmake变量QT_DEFAULT_MEDIA_BACKEND进行配置。

目标平台说明

以下页面列出了特定目标平台的问题,这些问题与多媒体后端无关。

权限

从Qt 6.6开始,Qt多媒体模块使用新的QPermission API来处理摄像头麦克风权限。这意味着Qt本身不再查询这些权限,所以这需要在客户端应用程序中直接完成。

有关如何将新的QPermission API集成到应用程序中的示例,请参阅应用权限页面。

参考和示例

© 2024 Qt公司有限公司。本文件中包含的文档贡献的版权归其各自的所有者。本文件中提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3的条款进行许可的。Qt及其相关标志是芬兰Qt公司及其它全球国家的商标。所有其他商标均为其各自所有者的财产。