QAudioBufferInput Class
QAudioBufferInput 类用于通过QMediaCaptureSession 向QMediaRecorder 提供自定义音频缓冲区。更多内容...
| 头文件: | #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) |
信号
| void | readyToSendAudioBuffer() |
详细说明
QAudioBufferInput 仅在 FFmpeg 后端下受支持。
通过将QAudioBufferInput 和QMediaRecorder 连接到QMediaCaptureSession ,即可录制自定义音频缓冲区。对于拉取模式的实现,需在响应readyToSendAudioBuffer()信号时调用sendAudioBuffer()。在下面的代码片段中,这是通过将该信号连接到自定义媒体生成器类中的槽函数来实现的。该槽函数会发出另一个包含新音频缓冲区的信号,该信号连接到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();以下是提供音频缓冲区的槽函数的最小实现:
void MediaGenerator::nextAudioBuffer()
{
QAudioBuffer buffer = nextBuffer();
emit audioBufferReady(buffer);
}更多详情请参阅readyToSendAudioBuffer() 和sendAudioBuffer()。
另请参阅 QMediaRecorder 和QMediaCaptureSession 。
成员函数文档
[explicit] QAudioBufferInput::QAudioBufferInput(QObject *parent = nullptr)
使用parent 创建一个新的QAudioBufferInput对象。
[explicit] QAudioBufferInput::QAudioBufferInput(const QAudioFormat &format, QObject *parent = nullptr)
创建一个新的 QAudioBufferInput 对象,其音频format 和parent 。
指定的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 将QAudioBuffer 发送至QMediaRecorder 。
如果指定的audioBuffer 已成功发送至目标,则返回true 。 如果缓冲区未被发送,则返回false ;这种情况可能发生在实例未被分配给QMediaCaptureSession 、会话没有媒体记录器、媒体记录器未启动或其队列已满时。一旦目标能够处理新的音频缓冲区,将立即发出readyToSendAudioBuffer()信号。
发送空音频缓冲区会被QMediaRecorder 视为输入流的结束。当QMediaRecorder::autoStop 为true 且所有输入均已报告流结束时,QMediaRecorder 将自动停止录制。
© 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.