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 回调延迟的主要内容,如果未能解决你的问题,请参考以下文章