QAudioBufferInput Class

QAudioBufferInput 类用于通过QMediaCaptureSessionQMediaRecorder 提供自定义音频缓冲区。更多

头文件: #include <QAudioBufferInput>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Qt 6.8
继承: QObject

公共函数

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)

信号

详细说明

QAudioBufferInput 仅支持 FFmpeg 后端。

可通过将QAudioBufferInputQMediaRecorder 连接到QMediaCaptureSession 来录制自定义音频缓冲区。对于拉模式实现,可调用sendAudioBuffer() 来响应readyToSendAudioBuffer() 信号。在下面的代码段中,这是通过将信号连接到自定义媒体生成器类中的槽来实现的。槽函数会发出另一个带有新音频缓冲区的信号,该缓冲区与sendAudioBuffer() 相连:

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

下面是提供音频缓冲区的 slot 函数的最小实现:

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

更多详情,请参阅readyToSendAudioBuffer() 和sendAudioBuffer() 。

另请参见 QMediaRecorderQMediaCaptureSession

成员函数文档

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

parent 构建一个新的 QAudioBufferInput 对象。

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

使用音频formatparent 构建一个新的 QAudioBufferInput 对象。

指定的format 将作为调用QMediaRecorder::record() 时初始化匹配音频编码器的提示。如果未指定格式或格式无效,音频编码器将在发送第一个音频缓冲区时初始化。

如果事先知道要发送何种音频缓冲区,我们建议指定格式。

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

销毁对象。

QMediaCaptureSession *QAudioBufferInput::captureSession() const

返回音频缓冲区输入所连接的捕获会话,如果音频缓冲区输入未连接捕获会话,则返回nullptr

使用QMediaCaptureSession::setAudioBufferInput() 将音频缓冲区输入连接到会话。

QAudioFormat QAudioBufferInput::format() const

返回创建音频缓冲输入时指定的音频格式。

[signal] void QAudioBufferInput::readyToSendAudioBuffer()

表示可以向音频缓冲输入发送新的音频缓冲。收到信号后,如果有音频日期要发送,请调用sendAudioBuffer 一次或循环调用,直到返回false

另请参阅 sendAudioBuffer() 。

bool QAudioBufferInput::sendAudioBuffer(const QAudioBuffer &audioBuffer)

通过QMediaCaptureSession 发送QAudioBufferQMediaRecorder

如果指定的audioBuffer 已成功发送至目的地,则返回true 。如果缓冲区未被发送,则返回false 。如果实例未分配给QMediaCaptureSession 、会话没有媒体录音机、媒体录音机未启动或其队列已满,则会发生这种情况。一旦目的地能够处理新的音频缓冲区,就会发出readyToSendAudioBuffer() 信号。

QMediaRecorder 会将空音频缓冲区的发送视为输入流的结束。如果QMediaRecorder::autoStoptrue 且所有输入都报告了流的结束,则QMediaRecorder 会自动停止录音。

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