Ios AudioUnitRender获取错误kAudioUnitErr\u CannotDoInCurrentContext(-10863)

Ios AudioUnitRender获取错误kAudioUnitErr\u CannotDoInCurrentContext(-10863),ios,audiounit,Ios,Audiounit,当耳机插入iOS设备时,我想直接向扬声器播放录制的音频 我所做的是在AURenderCallbackfunc中调用AudioUnitRender,以便将音频数据写入AudioBuffer结构 如果“IO缓冲区持续时间”未设置或未设置为0.020秒,则其工作正常。如果通过调用setPreferredIOBufferDuration将“IO缓冲区持续时间”设置为较小的值(0.005等),AudioUnitRender()将返回错误: kAudioUnitErr_CannotDoInCurrentCo

当耳机插入iOS设备时,我想直接向扬声器播放录制的音频

我所做的是在
AURenderCallback
func中调用
AudioUnitRender
,以便将音频数据写入AudioBuffer结构

如果“IO缓冲区持续时间”未设置或未设置为0.020秒,则其工作正常。如果通过调用
setPreferredIOBufferDuration
将“IO缓冲区持续时间”设置为较小的值(0.005等),
AudioUnitRender()
将返回错误:

kAudioUnitErr_CannotDoInCurrentContext(-10863)


任何人都可以帮助找出原因和解决方法,请?由于缓冲区已满,请等待后续渲染过程或使用更大的缓冲区

AudioToolbox、AudioUnit和AUGraph使用相同的错误代码,但仅记录AUGraph的错误代码

为了避免在渲染线程中旋转或等待(一个坏主意!),许多 对AUGraph的调用可以返回: kAUGraphErr_不能做当前上下文。此结果仅生成 从渲染回调调用AUGraph API时。意思是 它所需要的锁当时由另一个线程持有。如果 如果看到此结果代码,通常可以再次尝试该操作- 通常是下一个渲染周期(因此在这段时间内,锁可以 清除),或者您可以将该调用委托给应用程序中的其他线程。 不应旋转渲染线程或使其休眠


只是想补充一点,更改输出范围采样率以匹配我使用的OSx kAudioUnitSubType_HALOutput音频单元的输入范围采样率,为我修复了此错误

通过设置另一个工作音频单元的相同采样率,问题已得到解决。当有多个音频单元同时工作时,似乎有一些难以解释的事情。无论如何,您提供的信息对于理解此错误代码的原因非常有帮助。谢谢