覆盖iOS 11.3中的输出音频端口

时间:2018-04-19 13:59:11

标签: avfoundation avaudiosession

是否可以将音频端口覆盖到扬声器(

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]

)当设备通过airplay连接到外部屏幕时,它可以在iOS 11.2及更早版本上运行,但在iOS 11.3上它没有?

1 个答案:

答案 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)