AVAudioEngine.inputNode.inputFormat(forBus: 0) 在初始化 AVPlayer 时经过几次调用后发生变化

AVAudioEngine.inputNode.inputFormat(forBus: 0) changes after a couple of calls when AVPlayer is initialized

我正在用 AVAudioEngine.inputNode 录制音频。一切正常,直到我需要在录音时播放其他音频。我正在创建 AVPlayer 并使用带有许多曲目的自定义 AVCompositions 设置播放器项目,它播放得很好。但是当我在初始化 AVPlayer 后尝试录制音频时,我在安装 tap 时遇到了崩溃:

[avae]            AVAEInternal.h:76    required condition is false: [AVAudioIONodeImpl.mm:1093:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)]

然后我添加了以下打印:

let inputNode = audioEngine.inputNode
print(inputNode.inputFormat(forBus: 0))
let recordingFormat = inputNode.inputFormat(forBus: 0)
print(recordingFormat, inputNode.inputFormat(forBus: 0))

输出是这样的:

<AVAudioFormat 0x2820da6c0:  1 ch,  44100 Hz, Float32>
<AVAudioFormat 0x2820da800:  1 ch,  48000 Hz, Float32> <AVAudioFormat 0x2820da800:  1 ch,  48000 Hz, Float32>

或者这样:

<AVAudioFormat 0x2820da6c0:  1 ch,  44100 Hz, Float32>
<AVAudioFormat 0x2820da800:  1 ch,  44100 Hz, Float32> <AVAudioFormat 0x2820da800:  1 ch,  48000 Hz, Float32>

Ofc 代码适用于此打印,因为看起来在一次(或两次)inputFormat 调用之后节点正在重新初始化。为什么会发生这种情况,解决它的好方法是什么?

我不知道发生这种情况的确切原因以及在这种特殊情况下如何解决它,但我也从 AVPlayer 切换到 AVAudioEngine 作为音频播放器,并且有帮助。