警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
视频概览¶
视频播放
视频功能¶
Qt Multimedia 提供了用于播放和操作视频数据的高级和低级 C++ 类,以及用于播放和录制的 QML 类型。这里介绍的一些类与 Camera Overview 和 Audio Overview 中介绍的内容有所重叠。
视频实现细节¶
在C++中播放视频¶
你可以使用QMediaPlayer类来解码视频文件,并使用QVideoWidget、QGraphicsVideoItem或自定义类来显示它。
这里有一个使用 QVideoWidget 的示例:
player = QMediaPlayer() player.setSource(QUrl("http://example.com/myclip1.mp4")) videoWidget = QVideoWidget() player.setVideoOutput(videoWidget) videoWidget.show() player.play()
以及一个使用 QGraphicsVideoItem 的示例:
player = QMediaPlayer(self) item = 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支持的媒体格式以获取此信息。
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来确定目标系统上可用的格式。
在
ConversionMode上使用isSupported()来查询特定格式。在默认构造的
QMediaFormat上使用supportedFileFormats()以获取所有支持的文件格式。
示例¶
有C++和QML示例可供使用。
C++ 示例¶
Camera-Example
展示如何捕捉静态图像或录制视频。
Media-Player-Example
播放音频和视频。
QML 示例¶
QML-Media-Player-Example
使用QML MediaPlayer类型播放音频和视频。
QML-Video-Recorder
使用Qt Quick录制音频和视频。
参考文档¶
C++ 类¶
QMediaPlayer 类允许播放媒体文件。
用于获取可捕获窗口的基本信息。
QMediaCaptureSession 类允许捕获音频和视频内容。
QMediaRecorder 类用于编码和录制捕获会话。
此类用于捕获屏幕。
QVideoFrameInput 类用于通过 QMediaCaptureSession 向 QMediaRecorder 或视频输出提供自定义视频帧。
此类用于捕获窗口。
QAbstractVideoBuffer 类是视频数据的抽象。
QAbstractVideoBuffer.MapDataQAbstractVideoBuffer::MapData 结构描述了映射的平面布局。
QVideoFrame 类表示视频数据的一帧。
QVideoFrameFormat 类指定视频呈现表面的流格式。
QVideoSink 类表示视频数据的通用接收器。
QVideoWidget 类提供了一个用于显示由媒体对象生成的视频的小部件。
QML 类型¶
描述相机设备支持的视频格式。
描述一个相机设备。
向场景中添加媒体播放功能。
提供媒体文件的元数据。
CapturableWindow 类型用于获取可通过 WindowCapture 捕获的窗口的基本信息。
允许捕获音频和视频内容。
用于编码和记录在CaptureSession中生成的媒体。
此类型用于捕获屏幕。
此类型用于捕获窗口。
定义播放列表中的一个项目。
渲染视频或相机取景器。
用于显示指定视频的便捷类型。