视频概述
视频功能
Qt 多媒体提供了用于播放和处理视频数据的高层和底层 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 多媒体提供了一些低级类,以便更轻松地处理视频帧。这些类主要用于编写处理视频或摄像头帧的代码(例如,检测条形码或应用特殊晕影效果)或需要以其他方式显示视频,而在其他情况下不支持。
QVideoFrame 类封装了一个视频帧,并将内容映射到系统内存以进行操作或处理。您可以使用自己的 QVideoSink 从 QMediaPlayer 和 QCamera 接收这些帧。
录制视频
任何类型音频和视频捕获或录制的中心类是 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 来确定目标系统上可用的格式。
- 使用 QMediaFormat::isSupported() 在 QMediaFormat::ConversionMode 上查询一个特定的格式。
- 使用默认构造的 QMediaFormat 上的 QMediaFormat::supportedFileFormats() 获取所有支持的文件格式。
示例
有C++和QML示例可用。
C++示例
QML示例
使用Qt Quick播放音频和视频。 | |
使用QML MediaPlayer类型播放音频和视频。 | |
使用Qt Quick录制音频和视频。 |
参考文档
C++类
用于获取可捕获窗口的基本信息 | |
允许捕获音频和视频内容 | |
允许播放媒体文件 | |
用于对捕获会话进行编码和录制 | |
此类用于捕获屏幕 | |
表示视频数据的历史记录 | |
指定视频表达表面的流格式 | |
表示视频数据的通用地键点 | |
呈现由媒体对象生成的视频的窗口小部件 | |
此类用于捕获窗口 |
QML类型
© 2024 Qt公司有限公司。此处包含的文档贡献者享有其各自的权利。本文档受Free Software Foundation发布的GNU自由文档许可协议第1.3版条款的许可。Qt及其相关标志是芬兰的Qt公司及其在全世界范围的国家和地区的商标。所有其他商标均为各自所有者的财产。