QAudioBufferInput Class

Die Klasse QAudioBufferInput wird verwendet, um benutzerdefinierte Audiopuffer für QMediaRecorder über QMediaCaptureSession bereitzustellen. Mehr...

Kopfzeile: #include <QAudioBufferInput>
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

QAudioBufferInput(QObject *parent = nullptr)
QAudioBufferInput(const QAudioFormat &format, QObject *parent = nullptr)
virtual ~QAudioBufferInput() override
QMediaCaptureSession *captureSession() const
QAudioFormat format() const
bool sendAudioBuffer(const QAudioBuffer &audioBuffer)

Signale

Detaillierte Beschreibung

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

Benutzerdefinierte Audiopuffer können aufgezeichnet werden, indem ein QAudioBufferInput und ein QMediaRecorder mit einem QMediaCaptureSession verbunden werden. Für eine Implementierung im Pull-Modus rufen Sie sendAudioBuffer() als Antwort auf das Signal readyToSendAudioBuffer() 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 Audiopuffer aus, das mit sendAudioBuffer() verbunden ist:

QMediaCaptureSession session;
QMediaRecorder recorder;
QAudioBufferInput audioInput;

session.setRecorder(&recorder);
session.setAudioBufferInput(&audioInput);

MediaGenerator generator; // Custom class providing audio buffers

connect(&audioInput, &QAudioBufferInput::readyToSendAudioBuffer,
        &generator, &MediaGenerator::nextAudioBuffer);
connect(&generator, &MediaGenerator::audioBufferReady,
        &audioInput, &QAudioBufferInput::sendAudioBuffer);

recorder.record();

Hier ist eine minimale Implementierung der slot-Funktion, die Audiopuffer bereitstellt:

void MediaGenerator::nextAudioBuffer()
{
    QAudioBuffer buffer = nextBuffer();
    emit audioBufferReady(buffer);
}

Für weitere Details siehe readyToSendAudioBuffer() und sendAudioBuffer().

Siehe auch QMediaRecorder und QMediaCaptureSession.

Dokumentation der Mitgliedsfunktionen

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

Konstruiert ein neues QAudioBufferInput-Objekt mit parent.

[explicit] QAudioBufferInput::QAudioBufferInput(const QAudioFormat &format, QObject *parent = nullptr)

Konstruiert ein neues QAudioBufferInput-Objekt mit Audio format und parent.

Das angegebene format dient als Hinweis für die Initialisierung des passenden Audio-Encoders beim Aufruf von QMediaRecorder::record(). Wenn das Format nicht angegeben oder ungültig ist, wird der Audio-Encoder beim Senden des ersten Audiopuffers initialisiert.

Wir empfehlen die Angabe des Formats, wenn Sie im Voraus wissen, welche Art von Audiopuffern Sie senden werden.

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

Zerstört das Objekt.

QMediaCaptureSession *QAudioBufferInput::captureSession() const

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

Verwenden Sie QMediaCaptureSession::setAudioBufferInput(), um den Audiopuffereingang mit einer Sitzung zu verbinden.

QAudioFormat QAudioBufferInput::format() const

Gibt das Audioformat zurück, das bei der Erstellung des Audio-Puffereingangs angegeben wurde.

[signal] void QAudioBufferInput::readyToSendAudioBuffer()

Signalisiert, dass ein neuer Audiopuffer an den Audiopuffereingang gesendet werden kann. Wenn Sie nach dem Empfang des Signals Audiodaten zu senden haben, rufen Sie sendAudioBuffer einmalig oder in einer Schleife auf, bis es false zurückgibt.

Siehe auch sendAudioBuffer().

bool QAudioBufferInput::sendAudioBuffer(const QAudioBuffer &audioBuffer)

Sendet QAudioBuffer über QMediaCaptureSession an QMediaRecorder.

Gibt true zurück, wenn der angegebene audioBuffer erfolgreich an das Ziel gesendet wurde. Gibt false zurück, wenn der Puffer nicht gesendet wurde, was passieren kann, wenn die Instanz nicht QMediaCaptureSession zugewiesen ist, die Sitzung keinen Medienrekorder hat, der Medienrekorder nicht gestartet ist oder seine Warteschlange voll ist. Das Signal readyToSendAudioBuffer() wird ausgegeben, sobald das Ziel in der Lage ist, einen neuen Audiopuffer zu verarbeiten.

Das Senden eines leeren Audiopuffers 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.