警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

视频概述#

视频播放

视频功能#

Qt多媒体提供了用于播放和操作视频数据的C++类,以及用于播放和录制的QML类型。其中一些类与本页的摄像机概述音频概述中展示的内容有所重叠。

视频实现细节#

C++中播放视频#

您可以使用QMediaPlayer类解码视频文件,并使用QVideoWidgetQGraphicsVideoItem或自定义类来显示它。

以下是使用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渲染由MediaPlayerCamera提供的媒体内容。该VideoOutput是一个可嵌入到QQuickScene或Window中的视觉组件,而所有媒体解码和播放控制都由MediaPlayerCaptureSession处理。提供了Video元素以方便使用。它将MediaPlayerVideoOutputAudioOutput元素组合在一个单一的对象中。

处理低级视频帧#

Qt多媒体提供了一些低级类,以使处理视频帧变得更容易。这些类主要用于编写需要处理视频或相机帧(例如,检测条形码、应用梦幻般的渐晕效果)或以其他方式显示视频的代码。

《QVideoFrame》类封装了视频帧,并允许将内容映射到系统内存以进行操作或处理。使用您的自己的QVideoSink可以使您从QMediaPlayerQCamera接收这些帧。

录制视频#

任何类型的音频和视频捕获或录制的核心类是QMediaCaptureSession(或QLua类型中的CaptureSession)。您可以将QCamera(QML中的Camera)和QMediaRecorderMediaRecorder)连接到会话,然后请求媒体记录器开始录制。

支持的视频格式#

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

Windows#

默认情况下,MS Windows上的可用性取决于与操作系统打包的Windows Media Player的版本。有关官方信息,请参阅Windows Media Player文档

除了Windows Media Player外,当然还有许多codec包可以安装。请参阅codec指南站点以获取一些示例。

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++ 类#

PySide6.QtMultimedia.QMediaPlayer

QMediaPlayer 类允许播放媒体文件。

PySide6.QtMultimedia.QCapturableWindow

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

PySide6.QtMultimedia.QMediaCaptureSession

QMediaCaptureSession 类允许捕获音频和视频内容。

PySide6.QtMultimedia.QMediaRecorder

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

PySide6.QtMultimedia.QScreenCapture

此类用于捕获屏幕。

PySide6.QtMultimedia.QWindowCapture

此类用于捕获窗口。

PySide6.QtMultimedia.QVideoFrame

QVideoFrame 类表示视频数据的一个帧。

PySide6.QtMultimedia.QVideoFrameFormat

QVideoFrameFormat 类指定视频展示表面的流格式。

PySide6.QtMultimedia.QVideoSink

QVideoSink 类表示视频数据的一个通用接收器。

PySide6.QtMultimediaWidgets.QVideoWidget

QVideoWidget 类提供了一个用于展示媒体对象产生的视频的控件。

QML 类型#

qml-cameraformat.html

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

qml-cameradevice.html

描述相机设备。

qml-qtmultimedia-mediaplayer.html

向场景添加媒体播放。

qml-mediametadata.html

为媒体文件提供元数据。

qml-capturablewindow.html

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

qml-qtmultimedia-capturesession.html

允许捕获音频和视频内容。

qml-qtmultimedia-mediarecorder.html

用于在 CaptureSession 中编码和录制生成的媒体。

qml-qtmultimedia-screencapture.html

此类型用于捕获屏幕。

qml-qtmultimedia-windowcapture.html

此类型用于捕获窗口。

qml-qtmultimedia-video.html

显示特定视频的便利类型。

定义播放列表中的一个条目。

qml-qtmultimedia-videooutput.html

渲染视频或摄像机取景器。