QVideoFrameInput Class

QVideoFrameInput クラスは、カスタム・ビデオ・フレームをQMediaRecorder またはQMediaCaptureSession を通したビデオ出力に提供するために使用されます。詳細...

Header: #include <QVideoFrameInput>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Since: Qt 6.8
Inherits: 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)

信号

詳細説明

QVideoFrameInput は、FFmpeg バックエンドでのみサポートされています。

カスタム・ビデオ・フレームは、QVideoFrameInputQMediaRecorderQMediaCaptureSession に接続することで記録できます。プル・モードの実装では、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() を参照してください。

QMediaRecorderQMediaCaptureSessionQVideoSinkも参照

メンバ関数ドキュメント

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

新しい QVideoFrameInput オブジェクトをparent で構築します。

[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 を 1 回呼び出すか、false を返すまでループします。

sendVideoFrame()も参照

bool QVideoFrameInput::sendVideoFrame(const QVideoFrame &frame)

QVideoFrameQMediaRecorder またはQMediaCaptureSession を通してビデオ出力に送る。

指定されたframe が宛先に正常に送信された場合、true を返す。falseこれは、インスタンスがQMediaCaptureSession に割り当てられていない場合、セッションにビデオ出力やメディアレコーダーがない場合、メディアレコーダーが起動していない場合、またはキューが一杯の場合に発生します。信号readyToSendVideoFrame は、送信先が新しいフレームを処理できるようになるとすぐに送信されます。

空のビデオフレームの送信は、QMediaRecorder によって入力ストリームの終了として扱われます。QMediaRecorder::autoStoptrue で、すべての入力がストリームの終了を報告した場合、QMediaRecorder は自動的に録画を停止します。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。