视频概述
视频功能
Qt Multimedia 提供了用于播放和处理视频数据的高级和低级 C++ 类,以及用于播放和录制的 QML 类型。此处介绍的部分类与“摄像头概述”和“音频概述”中介绍的内容有所重叠。
视频实现细节
在 C++ 中播放视频
您可以使用QMediaPlayer 类来解码视频文件,并通过QVideoWidget 、QGraphicsVideoItem 或自定义类来显示视频。
以下是一个使用QVideoWidget 的示例:
player = new QMediaPlayer;
player->setSource(QUrl("http://example.com/myclip1.mp4"));
videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);
videoWidget->show();
player->play();以下是一个使用 `QGraphicsVideoItem` 的示例:
player = new QMediaPlayer(this);
QGraphicsVideoItem *item = new QGraphicsVideoItem;
player->setVideoOutput(item);
graphicsView->scene()->addItem(item);
graphicsView->show();
player->setSource(QUrl("http://example.com/myclip4.ogv"));
player->play();在 QML 中播放视频
您可以使用VideoOutput 来渲染由MediaPlayer 或Camera 提供的内容。VideoOutput 是一个可视化组件,可嵌入到QQuickScene或Window 中,而所有媒体解码和播放控制则由MediaPlayer 或CaptureSession 负责。为了方便起见,提供了一个Video 元素。它将MediaPlayer 、VideoOutput 和AudioOutput 元素整合到一个项中。
处理低级视频帧
Qt Multimedia 提供了一系列低级类,以使视频帧的处理变得更加容易。这些类主要用于编写处理视频或摄像头帧的代码(例如,检测条形码或应用花哨的晕影效果),或者需要以特殊方式显示视频(而这种方式通常不被支持)的情况。
QVideoFrame 类封装了一个视频帧,并允许将其内容映射到系统内存中以便进行操作或处理。通过使用您自己的QVideoSink ,您可以从QMediaPlayer 和QCamera 接收这些帧。
录制视频
QMediaCaptureSession (或CaptureSession QML类型)是任何类型音视频捕获或录制的核心类。您可以将QCamera (QML中的Camera)和QMediaRecorder (MediaRecorder )连接到会话,然后请求媒体录制器开始录制。
支持的媒体格式
最终支持哪些媒体格式取决于目标系统的配置。
Windows
默认情况下,MS Windows 目标系统上可用的功能取决于操作系统中预装的Windows Media Player版本。有关官方信息,请参阅Windows Media Player 文档。
当然,除了 Windows Media Player 之外,还有许多可安装的编解码器包。有关示例,请参阅编解码器指南网站。
Android
有关此信息,请参阅Android 支持的媒体格式。
Linux
在 Linux 系统上,这主要涉及安装正确的GStreamer插件。
所需的最低 GStreamer 插件
- gstreamer1.0-plugins-base
- gstreamer1.0-plugins-good
- gstreamer1.0-plugins-pulseaudio
对于 Linux 桌面目标平台,强烈建议安装gstreamer1.0-libav 以获得良好的编解码器支持,并安装gstreamer1.0-vaapi 以获取硬件加速。
在嵌入式 Linux 系统上,所需的插件集可能会略有不同。
在运行时确定支持的媒体格式
您可以使用静态的QMediaFormat API,在运行时确定目标系统上支持哪些格式。
- 对QMediaFormat::ConversionMode 调用QMediaFormat::isSupported()可查询特定格式。
- 对默认构造的QMediaFormat 调用QMediaFormat::supportedFileFormats()可获取所有支持的文件格式。
示例
提供了 C++ 和 QML 示例。
C++ 示例
演示了如何捕获静止图像或录制视频。 | |
使用Qt Widgets 播放音频和视频。 |
QML 示例
使用Qt Quick | |
使用 QML MediaPlayer 类型播放音频和视频。 | |
使用Qt Quick 录制音频和视频。 |
参考文档
C++ 类
视频数据的抽象 | |
QAbstractVideoBuffer::MapData 结构描述了映射平面的布局 | |
用于获取可捕获窗口的基本信息 | |
由自定义 GStreamer 元素支持的视频源 | |
支持捕获音频和视频内容 | |
支持播放媒体文件 | |
用于对捕获会话进行编码和录制 | |
支持对媒体播放选项进行低级控制 | |
该类用于捕获屏幕 | |
表示视频数据的一帧 | |
指定视频呈现区域的流格式 | |
用于通过 QMediaCaptureSession 向 QMediaRecorder 或视频输出提供自定义视频帧 | |
表示视频数据的通用接收端 | |
用于呈现媒体对象生成的视频的控件 | |
该类用于捕获窗口 |
QML 类型
该类型用于获取可通过 WindowCapture 进行捕获的窗口的基础信息 | |
支持捕获音频和视频内容 | |
由自定义 GStreamer 二进制文件支持的视频源 | |
向场景中添加媒体播放功能 | |
用于对 CaptureSession 中生成的媒体进行编码和录制 | |
低级媒体播放选项 | |
此类型用于屏幕捕获 | |
用于显示指定视频的便捷类型 | |
渲染视频或相机取景器 | |
此类型用于捕获窗口 | |
描述相机设备 | |
描述相机设备支持的视频格式 | |
为媒体文件提供元数据 |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.