QVideoFrameInput Class
QVideoFrameInput 类用于向QMediaRecorder 或通过QMediaCaptureSession 向视频输出提供自定义视频帧。更多内容...
| 头文件: | #include <QVideoFrameInput> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
| qmake: | QT += multimedia |
| 自: | Qt 6.8 |
| 继承自: | QObject |
公共函数
| QVideoFrameInput(QObject *parent = nullptr) | |
| QVideoFrameInput(const QVideoFrameFormat &format, QObject *parent = nullptr) | |
| virtual | ~QVideoFrameInput() override |
| QMediaCaptureSession * | captureSession() const |
| QVideoFrameFormat | format() const |
| bool | sendVideoFrame(const QVideoFrame &frame) |
信号
| void | readyToSendVideoFrame() |
详细说明
QVideoFrameInput 仅在 FFmpeg 后端下受支持。
通过将QVideoFrameInput 和QMediaRecorder 连接到QMediaCaptureSession ,即可录制自定义视频帧。对于拉取模式的实现,请在响应readyToSendVideoFrame()信号时调用sendVideoFrame()。在下面的代码片段中,这是通过将该信号连接到自定义媒体生成器类中的槽函数来实现的。该槽函数会发出另一个包含新视频帧的信号,该信号连接到sendVideoFrame():
QMediaCaptureSession session;
QMediaRecorder recorder;
QVideoFrameInput videoInput;
session.setRecorder(&recorder);
session.setVideoFrameInput(&videoInput);
MediaGenerator generator; // Custom class providing video frames
connect(&videoInput, &QVideoFrameInput::readyToSendVideoFrame,
&generator, &MediaGenerator::nextVideoFrame);
connect(&generator, &MediaGenerator::videoFrameReady,
&videoInput, &QVideoFrameInput::sendVideoFrame);
recorder.record();以下是提供视频帧的槽函数的最小实现:
void MediaGenerator::nextVideoFrame()
{
QVideoFrame frame = nextFrame();
emit videoFrameReady(frame);
}更多详情请参阅readyToSendVideoFrame() 和sendVideoFrame()。
另请参阅 QMediaRecorder 、QMediaCaptureSession 以及QVideoSink 。
成员函数文档
[explicit] QVideoFrameInput::QVideoFrameInput(QObject *parent = nullptr)
使用parent 创建一个新的QVideoFrameInput对象。
[explicit] QVideoFrameInput::QVideoFrameInput(const QVideoFrameFormat &format, QObject *parent = nullptr)
使用视频帧format 和parent 创建一个新的QVideoFrameInput对象。
指定的format 将作为提示,用于在调用QMediaRecorder::record() 时初始化相应的视频编码器。如果未指定格式或格式无效,则视频编码器将在发送第一帧时进行初始化。在相应视频编码器初始化后,发送具有其他像素格式和尺寸的视频帧可能会导致录制过程中的性能下降。
如果您事先已知将发送何种类型的帧,建议指定该格式。
[override virtual noexcept] QVideoFrameInput::~QVideoFrameInput()
销毁该对象。
QMediaCaptureSession *QVideoFrameInput::captureSession() const
返回该视频帧输入所连接的捕获会话;如果该视频帧输入未连接到任何捕获会话,则返回一个nullptr 。
请使用 `QMediaCaptureSession::setVideoFrameInput()` 将视频帧输入连接到一个会话。
QVideoFrameFormat QVideoFrameInput::format() const
返回在创建视频帧输入时指定的视频帧格式。
[signal] void QVideoFrameInput::readyToSendVideoFrame()
表示可以将新帧发送到视频帧输入端。收到该信号后,如果还有待发送的帧,请调用一次或循环调用sendVideoFrame ,直到其返回false 。
另请参阅 sendVideoFrame()。
bool QVideoFrameInput::sendVideoFrame(const QVideoFrame &frame)
将QVideoFrame 发送至QMediaRecorder ,或通过QMediaCaptureSession 输出视频。
如果指定的frame 已成功发送至目标,则返回true 。 如果帧未被发送,则返回false ;这种情况可能发生在:实例未被分配给QMediaCaptureSession 、会话没有视频输出或媒体记录器、媒体记录器未启动,或者其队列已满。一旦目标能够处理新帧,将立即发送readyToSendVideoFrame 信号。
QMediaRecorder 将发送空视频帧视为输入流的结束。如果QMediaRecorder::autoStop 被设置为true ,且所有输入都已报告流结束,则QMediaRecorder 会自动停止录制。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.