Sur cette page

QVideoFrameInput Class

La classe QVideoFrameInput est utilisée pour fournir des images vidéo personnalisées à QMediaRecorder ou une sortie vidéo via QMediaCaptureSession. Plus...

En-tête : #include <QVideoFrameInput>
CMake : find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake : QT += multimedia
Depuis : Qt 6.8
Hérite : QObject

Fonctions publiques

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)

Signaux

Description détaillée

QVideoFrameInput n'est pris en charge qu'avec le backend FFmpeg.

Des images vidéo personnalisées peuvent être enregistrées en connectant un QVideoFrameInput et un QMediaRecorder à un QMediaCaptureSession. Pour une implémentation en mode pull, appelez sendVideoFrame() en réponse au signal readyToSendVideoFrame(). Dans l'extrait ci-dessous, cela se fait en connectant le signal à un slot dans une classe de générateur de médias personnalisée. La fonction slot émet un autre signal avec une nouvelle image vidéo, qui est connectée à 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();

Voici une implémentation minimale de la fonction slot qui fournit des images vidéo :

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

Pour plus de détails, voir readyToSendVideoFrame() et sendVideoFrame().

Voir également QMediaRecorder, QMediaCaptureSession, et QVideoSink.

Documentation sur les fonctions membres

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

Construit un nouvel objet QVideoFrameInput avec parent.

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

Construit un nouvel objet QVideoFrameInput avec les images vidéo format et parent.

Le format format spécifié servira d'indice pour l'initialisation de l'encodeur vidéo correspondant lors de l'invocation de QMediaRecorder::record(). Si le format n'est pas spécifié ou n'est pas valide, l'encodeur vidéo sera initialisé lors de l'envoi de la première image. L'envoi de trames vidéo avec un autre format de pixel et une autre taille après l'initialisation de l'encodeur vidéo correspondant peut entraîner une baisse des performances pendant l'enregistrement.

Nous vous recommandons de spécifier le format si vous savez à l'avance quel type de trames vous allez envoyer.

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

Détruit l'objet.

QMediaCaptureSession *QVideoFrameInput::captureSession() const

Renvoie la session de capture à laquelle cette entrée d'image vidéo est connectée, ou une adresse nullptr si l'entrée d'image vidéo n'est pas connectée à une session de capture.

Utilisez QMediaCaptureSession::setVideoFrameInput() pour connecter l'entrée d'image vidéo à une session.

QVideoFrameFormat QVideoFrameInput::format() const

Renvoie le format de l'image vidéo qui a été spécifié lors de la construction de l'entrée de l'image vidéo.

[signal] void QVideoFrameInput::readyToSendVideoFrame()

Signale qu'une nouvelle image peut être envoyée à l'entrée d'image vidéo. Après avoir reçu le signal, si vous avez des images à envoyer, invoquez sendVideoFrame une fois ou en boucle jusqu'à ce qu'il renvoie false.

Voir également sendVideoFrame().

bool QVideoFrameInput::sendVideoFrame(const QVideoFrame &frame)

Envoie QVideoFrame à QMediaRecorder ou une sortie vidéo via QMediaCaptureSession.

Renvoie true si la trame spécifiée frame a été envoyée avec succès à la destination. Renvoie false, si la trame n'a pas été envoyée, ce qui peut se produire si l'instance n'est pas assignée à QMediaCaptureSession, si la session ne dispose pas de sorties vidéo ou d'un enregistreur de médias, si l'enregistreur de médias n'est pas démarré ou si sa file d'attente est pleine. Le signal readyToSendVideoFrame sera envoyé dès que la destination sera en mesure de traiter une nouvelle image.

L'envoi d'une image vidéo vide est traité par QMediaRecorder comme une fin de flux d'entrée. QMediaRecorder arrête automatiquement l'enregistrement si QMediaRecorder::autoStop est true et que toutes les entrées ont signalé la fin du flux.

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