Ios 将输入更改为AirPods时,AVAudioEngine停止运行

Ios 将输入更改为AirPods时,AVAudioEngine停止运行,ios,swift,avfoundation,avaudioengine,Ios,Swift,Avfoundation,Avaudioengine,切换音频输入源时,我很难理解AVAudioEngine的行为 预期行为 切换输入源时,AVAudioEngine的inputNode应无缝采用新的输入源 实际行为 从AirPods切换到iPhone扬声器时,AVAudioEngine停止工作。不再有音频路由通过。查询引擎.isRunning仍返回true 当随后切换回AirPods时,它仍然不工作,但现在engine.isRunning返回false 在路线改变时停止和启动发动机没有帮助。调用reset()也不起作用。断开和重新连接输入节点也无

切换音频输入源时,我很难理解AVAudioEngine的行为

预期行为 切换输入源时,AVAudioEngine的
inputNode
应无缝采用新的输入源

实际行为 从AirPods切换到iPhone扬声器时,AVAudioEngine停止工作。不再有音频路由通过。查询
引擎.isRunning
仍返回true

当随后切换回AirPods时,它仍然不工作,但现在
engine.isRunning
返回false

在路线改变时停止和启动发动机没有帮助。调用
reset()
也不起作用。断开和重新连接输入节点也无济于事。唯一可靠的帮助是丢弃整个引擎并创建一个新引擎

操作系统 这是在iOS 14测试版5上。恐怕我不能在以前的版本上测试这一点;我身边只有一台设备

要复制的代码 下面是一个最低限度的代码示例。在Xcode中创建一个简单的应用程序项目(无论您选择SwiftUI还是Storyboard),并授予它访问
Info.plist
中麦克风的权限。创建以下文件
Conductor.swift

import-AVFoundation
班长{
静态let共享:导体=导体()
私人出租汽车发动机=AVAudioEngine?
init(){
//会议
let session=AVAudioSession.sharedInstance()
try?session.setActive(false)
try!session.setCategory(.playAndRecord,选项:[.defaultToSpeaker,
.allowBluetooth,
.allowAirPlay])
try!session.setActive(true)
_engine.connect(_engine.inputNode,到:_engine.mainMixerNode,格式:nil)
_发动机准备
}
func start(){u engine.start()}
}
并在
AppDelegate
中调用:

Conductor.shared.start()
本例将直接将输入路由到输出。如果你没有耳机,它会触发一个反馈回路

问题: 我错过了什么?这是预期的行为吗?如果是这样的话,似乎在任何地方都没有记录