将 AudioUnit 回调与 NSOutputStream 同步

Posted

技术标签:

【中文标题】将 AudioUnit 回调与 NSOutputStream 同步【英文标题】:Synchronize AudioUnit callback with NSOutputStream 【发布时间】:2017-02-10 16:35:38 【问题描述】:

我正在使用音频单元录制音频,然后将该数据写入 NSOutputStream,这是我用来通过 HTTP 发布该数据的绑定对的一部分。我的问题是音频单元录制回调和 NSOutputStream hasSpaceAvailable 回调完全相互独立,所以我很快就会遇到缓冲区不足。有什么方法可以同步这两者或将录音回调直接映射到 NSOutputStream?

【问题讨论】:

【参考方案1】:

根据 Apple DTS,您不应该在实时线程音频单元回调中进行任何联网或任何其他同步。

但您不必直接在网络流的 hasSpaceAvailable 回调中发布数据。您可以在该回调函数退出后发布数据,既然您知道空间可用,那么当数据可用时。您还可以在循环队列或 fifo 中缓冲一些额外的音频数据,以便通常可以发送一些数据以覆盖网络速率变化和延迟抖动。

【讨论】:

以上是关于将 AudioUnit 回调与 NSOutputStream 同步的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 iOS AudioUnit 渲染回调

混音器 AudioUnit 到 RemoteIO AudioUnit

OSX:AudioUnit 回调没有被足够的调用

AudioUnit Render 回调中的 Objective-C/Swift 用法

启动 AVAssetReader 停止对远程 I/O AudioUnit 的回调

MacOS Catalina 10.15.7 AudioUnit 麦克风通知回调未调用