AudioQueueNewInput 回调延迟

Posted

技术标签:

【中文标题】AudioQueueNewInput 回调延迟【英文标题】:AudioQueueNewInput callback latency 【发布时间】:2011-01-04 15:49:56 【问题描述】:

无论缓冲区的大小如何,我提供给 AudioQueueNewInput 的回调都会以大致相同的时间间隔发生。

例如:

如果您有 0.05 秒的缓冲区并以 44k 录制,则回调首先在 0.09 秒左右调用,然后在(0.001 秒)之后立即发生第二次调用。然后你再次等待 ~.09 秒。如果您的缓冲区大小是 0.025。您将等待 0.09 秒,然后几乎立即看到另外 3 个缓冲区。

更改采样率会增加延迟。

录制 16 位 8k 音频会导致缓冲区溢出之间的延迟为 0.5 秒。

所以我怀疑有一个 8000 字节的缓冲区正在幕后使用。当它被填满时,我的回调将使用给定的缓冲区运行,直到它被清空。

我想以尽可能少的延迟录制 16k 16 位音频。鉴于上述情况,我总是看到大约四分之一秒的延迟。有没有办法减少延迟?是否有音频会话属性来设置内部缓冲区大小?我试过 kAudiosessionProperty_PreferredHardwareIOBufferDuration 但它似乎没有帮助。

谢谢!

【问题讨论】:

【参考方案1】:

Audio Queue API 看起来像是在 Audio Unit RemoteIO API 之上构建的。小型音频队列缓冲区可能被用于在幕后填充更大的 RemoteIO 缓冲区。甚至可能会进行一些速率重采样(在最初的 2G 手机上)。

为了降低延迟,请尝试直接使用 RemoteIO Audio Unit API,然后请求音频会话为您的应用提供更小的延迟缓冲区大小。

【讨论】:

在使用 RemoteIO API 一段时间后,我能够获得非常低的延迟记录。这个网站有帮助。 atastypixel.com/blog/using-remoteio-audio-unit

以上是关于AudioQueueNewInput 回调延迟的主要内容,如果未能解决你的问题,请参考以下文章

AudioQueueNewInput 降低 AVAudioPlayer 的播放音量

扭曲的延迟/回调和异步执行

AUGraph 回调延迟

jQuery 的延迟回调执行序列

Camera.takephoto和回调之间的延迟

异步 JavaScript - 回调与延迟/承诺 [重复]