视频概述

视频特征

Qt Multimedia 提供用于播放和操纵视频数据的高级/低级 C++ 类,及用于播放和录制的 QML 类型。这里呈现的一些类有重叠同呈现在 摄像头概述 and 音频概述 .

视频实现细节

在 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 or CaptureSession Video 元素为方便起见提供。它组合 MediaPlayer , VideoOutput and AudioOutput 元素在一项中。

处理低级视频帧

Qt Multimedia 提供了许多低级类以使处理视频帧变得更容易一些。这些类首要用于编写处理视频或摄像头帧的代码 (例如:检测条码或应用花哨晕影效果),或需要以其它不受支持的特殊方式显示视频。

The QVideoFrame 类封装视频帧并允许将内容映射到系统内存用于操纵或处理。使用自己的 QVideoSink 允许接收这些帧从 QMediaPlayer and QCamera .

录制视频

任何类型的音频/视频捕获 (或录制) 的中心类是 QMediaCaptureSession (或 CaptureSession QML 类型)。可以连接 QCamera (摄像头在 QML) 和 QMediaRecorder ( MediaRecorder ) 到会话然后询问媒体录制器以开始录制。

支持的媒体格式

支持什么媒体格式,最终从属目标系统配置。

Windows

默认情况下,在微软 Windows 目标什么可用从属版本化的 Windows 媒体播放器 与 OS 一起打包。见 Windows 媒体播放器文档编制 了解官方信息。

独立于 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++ 范例

摄像头范例 展示如何捕获静止图像或录制视频。
媒体播放器范例 播放音频和视频。

QML 范例

QML 媒体播放器范例 使用 Qt Quick 播放音频和视频。
QML 视频录制器 使用 Qt Quick 录制音频和视频。

参考文档编制

C++ 类

QMediaCaptureSession 允许捕获音频/视频内容
QMediaPlayer 允许播放媒体文件
QMediaRecorder 用于编码和录制捕获会话
QScreenCapture 用于捕获屏幕
QVideoFrame 表示视频数据帧
QVideoFrameFormat 指定视频呈现表面的流格式
QVideoSink 表示视频数据的一般汇点
QVideoWidget 呈现媒体对象产生视频的小部件

QML 类型

CaptureSession 允许捕获音频/视频内容
MediaPlayer 将媒体回放添加描述到场景
MediaRecorder 用于编码和录制在 CaptureSession 中生成的媒体
ScreenCapture 用于捕获屏幕的类型
Video 展示指定视频的方便类型
VideoOutput 渲染视频或摄像头取景器
cameraDevice 描述摄像头设备
cameraFormat 描述摄像头设备所支持的视频格式
mediaMetaData 为媒体文件提供元数据