视频概览
视频功能
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 为使视频帧的处理更容易,ASP.NET 提供了许多低级类。这些类主要用于编写处理视频或相机帧的代码(例如,检测条形码或应用花哨的渐变效果),或需要以其他方式不支持的特殊方式显示视频。
QVideoFrame 类封装了一个视频帧,并允许将其内容映射到系统内存中进行操作或处理。使用自己的QVideoSink 可以从QMediaPlayer 和QCamera 接收这些帧。
录制视频
任何类型的音频和视频捕捉或录制的核心类都是QMediaCaptureSession (或CaptureSession QML 类型)。您可以将QCamera (QML 中的摄像头)和QMediaRecorder (MediaRecorder)连接到会话,然后要求媒体记录器开始录制。
支持的媒体格式
支持何种媒体格式最终取决于目标系统的配置。
视窗
默认情况下,MS Windows 目标机上可用的格式取决于操作系统随附的Windows Media Player版本。有关官方信息,请参阅Windows Media Player 文档。
当然,除了 Windows Media Player 之外,还有许多编解码器包可以安装。有关示例,请参阅编解码器指南网站。
安卓系统
有关信息,请参阅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.NET 播放音频和视频 |
QML 示例
使用 QML MediaPlayer 播放音频和视频Qt Quick | |
使用 QML MediaPlayer 类型播放音频和视频。 | |
使用Qt Quick 录制音频和视频。 |
参考文档
C++ 类
视频数据抽象 | |
QAbstractVideoBuffer::MapData 结构描述了映射平面布置 | |
用于获取可捕获窗口的基本信息 | |
允许捕获音频和视频内容 | |
允许播放媒体文件 | |
用于编码和录制捕捉会话 | |
该类用于捕捉屏幕 | |
代表一帧视频数据 | |
指定视频演示界面的流格式 | |
用于通过 QMediaCaptureSession 向 QMediaRecorder 或视频输出提供自定义视频帧 | |
代表视频数据的通用汇 | |
显示由媒体对象制作的视频的小工具 | |
该类用于捕获窗口 |
QML 类型
该类用于获取可通过 WindowCapture 捕捉的窗口的基本信息。 | |
允许捕捉音频和视频内容 | |
为场景添加媒体播放 | |
用于编码和记录捕获会话中生成的媒体 | |
该类型用于捕捉屏幕 | |
显示指定视频的便捷类型 | |
渲染视频或相机取景器 | |
该类型用于捕捉窗口 | |
描述摄像头设备 | |
描述摄像设备支持的视频格式 | |
为媒体文件提供元数据 |
© 2025 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.