Qt多媒体
Qt多媒体是一个附加模块,它提供了丰富的QML类型和C++类来处理多媒体内容。它包含了一个易于使用的API来播放和渲染音频和视频文件,并在屏幕上显示,同时还包含了一个全面的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 | 显示视频内容。 |
MediaRecorder | 从CaptureSession录制音频/视频。 |
ImageCapture | 从摄像机捕获静态图像。 |
Video | 向场景添加视频播放功能。使用MediaPlayer和VideoOutput类型提供视频播放功能。 |
ScreenCapture | 捕获屏幕。 |
WindowCapture | 捕获顶层窗口。 |
C++类
下表概述了一些重要的C++类
类 | 描述 |
---|---|
QMediaPlayer | 从源播放媒体。 |
QVideoWidget | 从媒体播放器或捕获会话显示视频。 |
QMediaCaptureSession | 捕获音频和视频。 |
QCamera | 访问连接到系统的摄像头。 |
QAudioInput | 访问连接到系统的音频输入(麦克风)。 |
QAudioOutput | 访问连接到系统的音频输出(扬声器,耳机)。 |
QImageCapture | 使用相机捕获静态图像。 |
QMediaRecorder | 从捕获会话中录制媒体内容。 |
QVideoSink | 访问并渲染单个视频帧。 |
QAudioSink | 将原始音频数据发送到音频输出设备。 |
QScreenCapture | 捕获屏幕。 |
QWindowCapture | 捕获顶层窗口。 |
对于播放QMediaPlayer、QAudioOutput和QVideoOutput包含所有所需功能。其他类用于捕获音频和视频内容,其中QMediaCaptureSession是管理中心捕获/录制过程的类。
许可证和归属权
Qt Multimedia模块在Qt公司提供商业许可证。此外,它还可在免费软件许可证下获得。自Qt 5.6以来,这些免费软件许可证是GNU Lesser General Public License,版本3或GNU General Public License,版本2。有关更多信息,请参阅Qt 许可。
此外,Qt 6.7.2中的Qt Multimedia可能包含以下宽松许可下的第三方模块
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 Software License 1.0 | |
Independent JPEG Group License | |
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后端遇到问题,我们建议使用原生后端进行测试。您可以通过设置
export QT_MEDIA_BACKEND=darwin
为了强制将FFmpeg设置为使用的后端,请设置该变量为
export QT_MEDIA_BACKEND=ffmpeg
在Qt多媒体编译阶段,默认媒体后端可以通过cmake变量
目标平台说明
以下页面列出了特定目标平台的问题,这些问题与多媒体后端无关。
权限
从Qt 6.6开始,Qt多媒体模块使用新的QPermission API来处理摄像头和麦克风权限。这意味着Qt本身不再查询这些权限,所以这需要在客户端应用程序中直接完成。
有关如何将新的QPermission API集成到应用程序中的示例,请参阅应用权限页面。
参考和示例
© 2024 Qt公司有限公司。本文件中包含的文档贡献的版权归其各自的所有者。本文件中提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3的条款进行许可的。Qt及其相关标志是芬兰Qt公司及其它全球国家的商标。所有其他商标均为其各自所有者的财产。