警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
视频概述#
视频播放
视频功能#
Qt多媒体提供了用于播放和操作视频数据的C++类,以及用于播放和录制的QML类型。其中一些类与本页的摄像机概述和音频概述中展示的内容有所重叠。
视频实现细节#
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多媒体提供了一些低级类,以使处理视频帧变得更容易。这些类主要用于编写需要处理视频或相机帧(例如,检测条形码、应用梦幻般的渐晕效果)或以其他方式显示视频的代码。
《QVideoFrame》类封装了视频帧,并允许将内容映射到系统内存以进行操作或处理。使用您的自己的QVideoSink
可以使您从QMediaPlayer
和QCamera
接收这些帧。
录制视频#
任何类型的音频和视频捕获或录制的核心类是QMediaCaptureSession
(或QLua类型中的CaptureSession)。您可以将QCamera
(QML中的Camera)和QMediaRecorder
(MediaRecorder)连接到会话,然后请求媒体记录器开始录制。
支持的视频格式#
最终支持哪些媒体格式取决于目标系统的配置。
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确定目标系统上可用的格式。
使用
isSupported()
对ConversionMode
进行查询以获取特定格式。使用在默认构造的
QMediaFormat
上的supportedFileFormats()
获取所有支持文件格式。
示例#
提供了 C++ 和 QML 示例。
C++ 示例#
相机示例
展示如何捕获静态图像或记录视频。
媒体播放器示例
播放音频和视频。
QML 示例#
QML 媒体播放器示例
使用 Qt Quick 播放音频和视频。
QML 视频录制器
使用 Qt Quick 录制音频和视频。
参考文档#
C++ 类#
QMediaPlayer 类允许播放媒体文件。
用于获取可捕获窗口的基本信息。
QMediaCaptureSession 类允许捕获音频和视频内容。
QMediaRecorder 类用于对捕获会话进行编码和录制。
此类用于捕获屏幕。
此类用于捕获窗口。
QVideoFrame 类表示视频数据的一个帧。
QVideoFrameFormat 类指定视频展示表面的流格式。
QVideoSink 类表示视频数据的一个通用接收器。
QVideoWidget 类提供了一个用于展示媒体对象产生的视频的控件。
QML 类型#
描述相机设备支持的视频格式。
描述相机设备。
向场景添加媒体播放。
为媒体文件提供元数据。
CapturableWindow 类型用于获取通过 WindowCapture 可用的窗口的基本信息。
允许捕获音频和视频内容。
用于在 CaptureSession 中编码和录制生成的媒体。
此类型用于捕获屏幕。
此类型用于捕获窗口。
显示特定视频的便利类型。
定义播放列表中的一个条目。
渲染视频或摄像机取景器。