QVideoFrameInput Class

Die Klasse QVideoFrameInput wird verwendet, um benutzerdefinierte Videoframes für QMediaRecorder oder eine Videoausgabe über QMediaCaptureSession bereitzustellen. Mehr...

Kopfzeile: #include <QVideoFrameInput>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Seit: Qt 6.8
Vererbt: QObject

Öffentliche Funktionen

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)

Signale

Detaillierte Beschreibung

QVideoFrameInput wird nur mit dem FFmpeg-Backend unterstützt.

Benutzerdefinierte Videoframes können aufgezeichnet werden, indem ein QVideoFrameInput und ein QMediaRecorder mit einem QMediaCaptureSession verbunden werden. Für eine Implementierung im Pull-Modus rufen Sie sendVideoFrame() als Antwort auf das Signal readyToSendVideoFrame() auf. Im folgenden Ausschnitt wird das Signal mit einem Slot in einer benutzerdefinierten Mediengeneratorklasse verbunden. Die Slot-Funktion gibt ein weiteres Signal mit einem neuen Videobild aus, das mit sendVideoFrame() verbunden ist:

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();

Hier ist eine minimale Implementierung der Slot-Funktion, die Videobilder liefert:

void MediaGenerator::nextVideoFrame()
{
    QVideoFrame frame = nextFrame();
    emit videoFrameReady(frame);
}

Für weitere Details siehe readyToSendVideoFrame() und sendVideoFrame().

Siehe auch QMediaRecorder, QMediaCaptureSession, und QVideoSink.

Dokumentation der Mitgliedsfunktionen

[explicit] QVideoFrameInput::QVideoFrameInput(QObject *parent = nullptr)

Konstruiert ein neues QVideoFrameInput-Objekt mit parent.

[explicit] QVideoFrameInput::QVideoFrameInput(const QVideoFrameFormat &format, QObject *parent = nullptr)

Konstruiert ein neues QVideoFrameInput-Objekt mit dem Videobild format und parent.

Das angegebene format dient als Hinweis für die Initialisierung des passenden Video-Encoders beim Aufruf von QMediaRecorder::record(). Ist das Format nicht angegeben oder nicht gültig, wird der Video-Encoder beim Senden des ersten Bildes initialisiert. Das Senden von Videobildern mit einem anderen Pixelformat und einer anderen Größe nach der Initialisierung des passenden Video-Encoders kann zu Leistungseinbußen bei der Aufzeichnung führen.

Wir empfehlen, das Format anzugeben, wenn Sie im Voraus wissen, welche Art von Bildern Sie senden werden.

[override virtual noexcept] QVideoFrameInput::~QVideoFrameInput()

Zerstört das Objekt.

QMediaCaptureSession *QVideoFrameInput::captureSession() const

Gibt die Aufnahmesitzung zurück, mit der dieser Videobildeingang verbunden ist, oder nullptr, wenn der Videobildeingang nicht mit einer Aufnahmesitzung verbunden ist.

Verwenden Sie QMediaCaptureSession::setVideoFrameInput(), um den Videobild-Eingang mit einer Sitzung zu verbinden.

QVideoFrameFormat QVideoFrameInput::format() const

Gibt das Videobildformat zurück, das bei der Erstellung der Videobildeingabe angegeben wurde.

[signal] void QVideoFrameInput::readyToSendVideoFrame()

Signalisiert, dass ein neues Bild an den Videobild-Eingang gesendet werden kann. Wenn Sie nach dem Empfang des Signals noch Bilder zu senden haben, rufen Sie sendVideoFrame einmalig oder in einer Schleife auf, bis es false zurückgibt.

Siehe auch sendVideoFrame().

bool QVideoFrameInput::sendVideoFrame(const QVideoFrame &frame)

Sendet QVideoFrame an QMediaRecorder oder einen Videoausgang über QMediaCaptureSession.

Gibt true zurück, wenn das angegebene frame erfolgreich an das Ziel gesendet wurde. Gibt false zurück, wenn das Bild nicht gesendet wurde, was passieren kann, wenn die Instanz nicht QMediaCaptureSession zugewiesen ist, die Sitzung keine Videoausgänge oder einen Medienrekorder hat, der Medienrekorder nicht gestartet ist oder seine Warteschlange voll ist. Das Signal readyToSendVideoFrame wird gesendet, sobald das Ziel in der Lage ist, ein neues Bild zu verarbeiten.

Das Senden eines leeren Videobildes wird von QMediaRecorder als Ende des Eingangsstroms behandelt. QMediaRecorder stoppt die Aufnahme automatisch, wenn QMediaRecorder::autoStop true ist und alle Eingänge das Ende des Stroms gemeldet haben.

© 2025 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.