PySide6.QtMultimedia.QVideoFrameInput

class QVideoFrameInput

QVideoFrameInput 类用于通过 QMediaCaptureSessionQMediaRecorder 或视频输出提供自定义视频帧。更多

PySide6.QtMultimedia.QVideoFrameInput 的继承图

在版本6.8中添加。

概要

方法

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

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

QVideoFrameInput 仅在 FFmpeg 后端支持。

可以通过将QVideoFrameInputQMediaRecorder连接到QMediaCaptureSession来录制自定义视频帧。对于拉取模式的实现,响应readyToSendVideoFrame()信号调用sendVideoFrame()。在下面的代码片段中,这是通过将信号连接到自定义媒体生成器类中的槽函数来实现的。槽函数发出另一个带有新视频帧的信号,该信号连接到sendVideoFrame()

session = QMediaCaptureSession()
recorder = QMediaRecorder()
videoInput = QVideoFrameInput()
session.setRecorder(recorder)
session.setVideoFrameInput(videoInput)
MediaGenerator generator # Custom class providing video frames
videoInput.readyToSendVideoFrame.connect(
        generator.nextVideoFrame)
generator.videoFrameReady.connect(
        videoInput.sendVideoFrame)
recorder.record()

这是一个提供视频帧的slot函数的最小实现:

def nextVideoFrame(self):

    frame = nextFrame()
    videoFrameReady.emit(frame)

更多详情请参见readyToSendVideoFrame()sendVideoFrame()

__init__([parent=None])
Parameters:

父对象QObject

使用parent构造一个新的QVideoFrameInput对象。

__init__(format[, parent=None])
Parameters:

使用视频帧formatparent构造一个新的QVideoFrameInput对象。

指定的format将作为调用record()时匹配视频编码器初始化的提示。如果未指定格式或格式无效,视频编码器将在发送第一帧时初始化。在匹配视频编码器初始化后,发送具有不同像素格式和大小的视频帧可能会导致录制过程中的性能损失。

如果您提前知道要发送的帧类型,我们建议指定格式。

captureSession()
Return type:

QMediaCaptureSession

返回此视频帧输入连接到的捕获会话,如果视频帧输入未连接到捕获会话,则返回nullptr

使用setVideoFrameInput()将视频帧输入连接到会话。

format()
Return type:

QVideoFrameFormat

返回在视频帧输入构造时指定的视频帧格式。

readyToSendVideoFrame()

表示可以向视频帧输入发送新帧的信号。收到信号后,如果您有要发送的帧,请调用sendVideoFrame一次或循环调用,直到它返回false

另请参阅

sendVideoFrame()

sendVideoFrame(frame)
Parameters:

frameQVideoFrame

Return type:

布尔

QVideoFrame发送到QMediaRecorder或通过QMediaCaptureSession发送到视频输出。

如果指定的frame已成功发送到目的地,则返回true。如果帧未发送,则返回false,这可能发生在实例未分配给QMediaCaptureSession、会话没有视频输出或媒体记录器、媒体记录器未启动或其队列已满的情况下。一旦目的地能够处理新帧,信号readyToSendVideoFrame将被发送。

发送空视频帧被QMediaRecorder视为输入流的结束。如果autoStoptrue并且所有输入都报告了流的结束,QMediaRecorder会自动停止录制。