是否可以将音频端口覆盖到扬声器(
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]
)当设备通过airplay连接到外部屏幕时,它可以在iOS 11.2及更早版本上运行,但在iOS 11.3上它没有?
答案 0 :(得分:1)
根据我的经验,这还不够:您还必须将AVAudioSession类别设置为AVAudioSessionCategoryPlayAndRecord
。这在docs for the overrideOutputAudioPort:
方法中建议:
如果您的应用使用
AVAudioSessionCategoryPlayAndRecord
类别, 使用扬声器选项调用此方法会导致音频路由 无论其他设置如何,内置扬声器和麦克风。 此更改仅在当前路径更改或保持有效之前保持有效 使用none选项再次调用此方法。如果你愿意的话 要永久启用此行为,您应该设置 类别defaultToSpeaker
选项。始终设置此选项 如果没有其他配件,则路由到扬声器而不是接收器 正在使用耳机。
请注意,这些文档指定这就足够了。我不知道是否有必要:我还没有找到其他可行的选项。
但是,docs for defaultToSpeaker
确实说它只适用于AVAudioSessionCategoryPlayAndRecord
类别。
所以,为我做以下工作:
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord,
mode: AVAudioSessionModeDefault)
try audioSession.overrideOutputAudioPort(.speaker)