Ios 如何避免以下错误:AVAudioEngineGraph必需条件为false:NULL!=水龙头

Ios 如何避免以下错误:AVAudioEngineGraph必需条件为false:NULL!=水龙头,ios,swift,audio,avaudioplayer,avaudiosession,Ios,Swift,Audio,Avaudioplayer,Avaudiosession,我已经搜索了这个错误,没有发现任何人有相同的错误。我很确定我知道这个错误意味着什么,但我不知道如何避免它 基本上,现在发生的是我有一个通过多点连接的电话。我正在使用AVAudioEngine录制和播放来自同级的音频 我注意到,从用户讲话的时间到另一台设备播放该音频所需的时间之间有相当大的延迟,但我通过移除水龙头并重新安装解决了这个问题。这完全消除了任何延迟。然而,有时它会抛出一个错误 我还允许用户将麦克风静音,当用户单击“静音”时,轻触将被移除。单击取消静音后,将重新安装水龙头。同样,有时这也会

我已经搜索了这个错误,没有发现任何人有相同的错误。我很确定我知道这个错误意味着什么,但我不知道如何避免它

基本上,现在发生的是我有一个通过多点连接的电话。我正在使用AVAudioEngine录制和播放来自同级的音频

我注意到,从用户讲话的时间到另一台设备播放该音频所需的时间之间有相当大的延迟,但我通过移除水龙头并重新安装解决了这个问题。这完全消除了任何延迟。然而,有时它会抛出一个错误

我还允许用户将麦克风静音,当用户单击“静音”时,轻触将被移除。单击取消静音后,将重新安装水龙头。同样,有时这也会引发相同的错误:

AVAudioEngineGraph.mm:2707:InputAvailable:所需条件为false:NULL!=水龙头

不过,这个错误似乎完全是随机的。有时会发生,有时不会。我无法始终如一地重现错误


我的猜测是,这是因为它试图安装一个已经存在的水龙头,但我不知道如何避免它。我想我可以增加安装tap的总线,但这似乎不是最好的选择

我还查看了AVAudioInputNode上是否有一个属性,该属性会告诉我某条总线上是否已经安装了一个水龙头,但我似乎没有找到任何水龙头


有人对此问题有经验吗?

如果您找到更好的解决方案,请告诉我是什么。这并不是一个100%完整的解决方案,但这是我在这个问题上得到的小小帮助下所能找到的最好的解决方案

我发现了一些解决方法,但是可能还有更好的解决方案。这并不能完全解决问题,自从我做了改变后,我已经见过一两次这个问题,但它确实减少了发生的机会

基本上,我所做的是当我移除水龙头时,确保在允许安装水龙头之前等待它完成。在我的情况下,我有一个静音按钮,我确保不允许用户触摸按钮的速度超过水龙头可以被删除的速度。因此,只要按下按钮,我不允许任何按下,直到水龙头被移除,然后重新激活按钮

其次,我不确定这是否有任何作用,但在inputNode上安装tap之前,我总是先调用inputNode.reset(),然后调用inputNode.removeTap(onBus:0),然后安装tap

inputNode.reset()
inputNode.removeTap(onBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 4096, format: localInputFormat) {
    ...
}

我还坚持这个问题。@NileshParmar我还没有找到解决办法。如果我这样做了,我会更新这个问题的答案。好的,谢谢你,请尽快更新。@NileshParmar,如果你能在我之前找到解决方案,我也会向你发送同样的邮件。谢谢。你好,你找到解决办法了吗?好的,很好。我有另一个解决办法。我首先安装Taponbus,每隔20秒重新启动用于调用的计时器,继续识别录音。我解决了这个问题,不是100%,而是95%。