视频概览

视频功能

Qt Multimedia 提供了用于播放和操作视频数据的高级和低级 C++ 类,以及用于播放和录制的 QML 类型。此处介绍的部分类与 "摄像机概述"和 "音频概述"中介绍的内容重叠。

视频实现细节

用 C++ 播放视频

您可以使用QMediaPlayer 类解码视频文件,并使用QVideoWidgetQGraphicsVideoItem 或自定义类显示视频文件。

下面是一个使用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 渲染由MediaPlayerCamera 提供的内容。VideoOutput 是一个可视化组件,可嵌入到 QQuickScene 或Window 中,而所有媒体解码和播放控制都由MediaPlayerCaptureSession 处理。为方便起见,我们提供了Video 元素。它将MediaPlayerVideoOutputAudioOutput 元素合并为一个项目。

处理低级视频帧

Qt Multimedia 为使视频帧的处理更容易,ASP.NET 提供了许多低级类。这些类主要用于编写处理视频或相机帧的代码(例如,检测条形码或应用花哨的渐变效果),或需要以其他方式不支持的特殊方式显示视频。

QVideoFrame 类封装了一个视频帧,并允许将其内容映射到系统内存中进行操作或处理。使用自己的QVideoSink 可以从QMediaPlayerQCamera 接收这些帧。

录制视频

任何类型的音频和视频捕捉或录制的核心类都是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 在运行时确定目标系统上可用的格式。

示例

有 C++ 和 QML 示例。

C++ 示例

Camera Example

演示如何捕捉静止图像或录制视频。

Media Player Example

使用Qt Widgets.NET 播放音频和视频

QML 示例

Media Player

使用 QML MediaPlayer 播放音频和视频Qt Quick

QML Media Player Example

使用 QML MediaPlayer 类型播放音频和视频。

QML Video Recorder

使用Qt Quick 录制音频和视频。

参考文档

C++ 类

QAbstractVideoBuffer

视频数据抽象

QAbstractVideoBuffer::MapData

QAbstractVideoBuffer::MapData 结构描述了映射平面布置

QCapturableWindow

用于获取可捕获窗口的基本信息

QMediaCaptureSession

允许捕获音频和视频内容

QMediaPlayer

允许播放媒体文件

QMediaRecorder

用于编码和录制捕捉会话

QScreenCapture

该类用于捕捉屏幕

QVideoFrame

代表一帧视频数据

QVideoFrameFormat

指定视频演示界面的流格式

QVideoFrameInput

用于通过 QMediaCaptureSession 向 QMediaRecorder 或视频输出提供自定义视频帧

QVideoSink

代表视频数据的通用汇

QVideoWidget

显示由媒体对象制作的视频的小工具

QWindowCapture

该类用于捕获窗口

QML 类型

CapturableWindow

该类用于获取可通过 WindowCapture 捕捉的窗口的基本信息。

CaptureSession

允许捕捉音频和视频内容

MediaPlayer

为场景添加媒体播放

MediaRecorder

用于编码和记录捕获会话中生成的媒体

ScreenCapture

该类型用于捕捉屏幕

Video

显示指定视频的便捷类型

VideoOutput

渲染视频或相机取景器

WindowCapture

该类型用于捕捉窗口

cameraDevice

描述摄像头设备

cameraFormat

描述摄像设备支持的视频格式

mediaMetaData

为媒体文件提供元数据

© 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.