PySide6.QtMultimedia.QVideoFrameInput¶
- class QVideoFrameInput¶
QVideoFrameInput
类用于通过QMediaCaptureSession
向QMediaRecorder
或视频输出提供自定义视频帧。更多…在版本6.8中添加。
概要¶
方法¶
def
__init__()
def
captureSession()
def
format()
def
sendVideoFrame()
信号¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QVideoFrameInput
仅在 FFmpeg 后端支持。可以通过将
QVideoFrameInput
和QMediaRecorder
连接到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()
。使用
parent
构造一个新的QVideoFrameInput
对象。- __init__(format[, parent=None])
- Parameters:
format –
QVideoFrameFormat
parent –
QObject
使用视频帧
format
和parent
构造一个新的QVideoFrameInput
对象。指定的
format
将作为调用record()
时匹配视频编码器初始化的提示。如果未指定格式或格式无效,视频编码器将在发送第一帧时初始化。在匹配视频编码器初始化后,发送具有不同像素格式和大小的视频帧可能会导致录制过程中的性能损失。如果您提前知道要发送的帧类型,我们建议指定格式。
- captureSession()¶
- Return type:
返回此视频帧输入连接到的捕获会话,如果视频帧输入未连接到捕获会话,则返回
nullptr
。使用
setVideoFrameInput()
将视频帧输入连接到会话。- format()¶
- Return type:
返回在视频帧输入构造时指定的视频帧格式。
- readyToSendVideoFrame()¶
表示可以向视频帧输入发送新帧的信号。收到信号后,如果您有要发送的帧,请调用
sendVideoFrame
一次或循环调用,直到它返回false
。另请参阅
- sendVideoFrame(frame)¶
- Parameters:
frame –
QVideoFrame
- Return type:
布尔
将
QVideoFrame
发送到QMediaRecorder
或通过QMediaCaptureSession
发送到视频输出。如果指定的
frame
已成功发送到目的地,则返回true
。如果帧未发送,则返回false
,这可能发生在实例未分配给QMediaCaptureSession
、会话没有视频输出或媒体记录器、媒体记录器未启动或其队列已满的情况下。一旦目的地能够处理新帧,信号readyToSendVideoFrame
将被发送。发送空视频帧被
QMediaRecorder
视为输入流的结束。如果autoStop
为true
并且所有输入都报告了流的结束,QMediaRecorder
会自动停止录制。