本页内容

视频概述

视频功能

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,在运行时确定目标系统上支持哪些格式。

示例

提供了 C++ 和 QML 示例。

C++ 示例

Camera Example

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

Media Player Example

使用Qt Widgets 播放音频和视频。

QML 示例

Media Player

使用Qt Quick

QML Media Player Example

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

QML Video Recorder

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

参考文档

C++ 类

QAbstractVideoBuffer

视频数据的抽象

QAbstractVideoBuffer::MapData

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

QCapturableWindow

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

QGStreamerVideoSource

由自定义 GStreamer 元素支持的视频源

QMediaCaptureSession

支持捕获音频和视频内容

QMediaPlayer

支持播放媒体文件

QMediaRecorder

用于对捕获会话进行编码和录制

QPlaybackOptions

支持对媒体播放选项进行低级控制

QScreenCapture

该类用于捕获屏幕

QVideoFrame

表示视频数据的一帧

QVideoFrameFormat

指定视频呈现区域的流格式

QVideoFrameInput

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

QVideoSink

表示视频数据的通用接收端

QVideoWidget

用于呈现媒体对象生成的视频的控件

QWindowCapture

该类用于捕获窗口

QML 类型

CapturableWindow

该类型用于获取可通过 WindowCapture 进行捕获的窗口的基础信息

CaptureSession

支持捕获音频和视频内容

GStreamerVideoSource

由自定义 GStreamer 二进制文件支持的视频源

MediaPlayer

向场景中添加媒体播放功能

MediaRecorder

用于对 CaptureSession 中生成的媒体进行编码和录制

PlaybackOptions

低级媒体播放选项

ScreenCapture

此类型用于屏幕捕获

Video

用于显示指定视频的便捷类型

VideoOutput

渲染视频或相机取景器

WindowCapture

此类型用于捕获窗口

cameraDevice

描述相机设备

cameraFormat

描述相机设备支持的视频格式

mediaMetaData

为媒体文件提供元数据

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