【发布时间】:2023-02-18 22:09:09
【问题描述】:
使用 QT 6.4.x (Windows),我如何捕获麦克风音频并重新打包并将重新打包的音频转发到 QUdpSocket。
重新打包将涉及将捕获的音频格式从其典型的 16 位小端格式更改为 24 位大端格式,其中每个数据包将具有恒定大小,可能与来自麦克风的有效负载不同。我不确定,但不知何故我认为我需要用 QAudioDecoder 替换 QAudioSink,如描述所示:QAudioDecoder 类是用于解码音频媒体文件的高级类。它类似于 QMediaPlayer 类,只是音频是通过此 API 提供回来的,而不是直接路由到音频硬件。
我有一个部分工作的示例,其中包含将合成音频直接发送到扬声器的混合。此功能基于 Qt 6 附带的“音频输出示例”(我的修改示例向扬声器发送正弦波生成的音调)。
同样在这个 RtpWorker 线程中,使用“音频源示例”作为灵感,我也能够从麦克风捕获和拦截音频数据包,但我不知道如何将这些数据包(按上述重新打包)发送到 UDP 套接字在固定大小的数据报中,我只是记录捕获的数据包。我想我需要一个中间循环缓冲区(其中的写入部分用捕获的麦克风音频填充它,而读取部分在拉模式下由 QAudioSink 或 QAudioDecoder 调用)。
根据我上面的评论,我认为我可能需要将它们发送到 QAudioDevice 以便我可以自己处理打包和通过网络发送。
我的代码包含在以下QTBUG-108383 的 2 个附件中。
如果有人能指出一些有用的例子来尝试做类似的事情,那就太好了。
【问题讨论】:
标签: c++ qt6 qtmultimedia