视频概述

视频功能

Qt 多媒体提供了用于播放和处理视频数据的高层和底层 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 多媒体提供了一些低级类,以便更轻松地处理视频帧。这些类主要用于编写处理视频或摄像头帧的代码(例如,检测条形码或应用特殊晕影效果)或需要以其他方式显示视频,而在其他情况下不支持。

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

录制视频

任何类型音频和视频捕获或录制的中心类是 QMediaCaptureSession(或在 QML 中的 CaptureSession 类型)您可以将 QCamera(QML 中的摄像头)和 QMediaRecorder(或在 QML 中的 MediaRecorder)连接到会话,并提示媒体记录器开始录制。

支持的媒体格式

支持哪些媒体格式最终取决于目标系统的配置。

Windows

默认情况下,MS Windows目标上可用的功能取决于与操作系统捆绑的Windows媒体播放器的版本。请参阅Windows媒体播放器文档以获取官方信息。

除Windows媒体播放器之外,当然还有许多可以安装的编解码器包。请参阅编解码器指南网站以获取一些示例。

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++示例

相机示例

显示如何捕获静态图像或录制视频。

媒体播放器示例

播放音频和视频。

QML示例

媒体播放器

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

QML媒体播放器示例

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

QML视频录制器

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

参考文档

C++类

QCapturableWindow

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

QMediaCaptureSession

允许捕获音频和视频内容

QMediaPlayer

允许播放媒体文件

QMediaRecorder

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

QScreenCapture

此类用于捕获屏幕

QVideoFrame

表示视频数据的历史记录

QVideoFrameFormat

指定视频表达表面的流格式

QVideoSink

表示视频数据的通用地键点

QVideoWidget

呈现由媒体对象生成的视频的窗口小部件

QWindowCapture

此类用于捕获窗口

QML类型

可捕获窗口

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

捕获会话

允许捕获音频和视频内容

媒体播放器

用于将媒体播放添加到场景中

媒体录制器

用于在捕获会话中编码和录制媒体

屏幕捕获

此类型用于捕获屏幕

视频

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

视频输出

渲染视频或摄像头取景器

窗口捕获

此类型用于捕获窗口

摄像头设备

描述摄像头设备

摄像头格式

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

媒体元数据

为媒体文件提供元数据

© 2024 Qt公司有限公司。此处包含的文档贡献者享有其各自的权利。本文档受Free Software Foundation发布的GNU自由文档许可协议第1.3版条款的许可。Qt及其相关标志是芬兰的Qt公司及其在全世界范围的国家和地区的商标。所有其他商标均为各自所有者的财产。