我有一个使用Sinch SDK和CallKit实现的VOIP应用程序。除了插入设备时,一切都正常,在后一种情况下,当通话开始时,音频仍会通过设备的主扬声器传送。如果我在通话过程中拔下并重新插入了耳机,则音频将正确地路由到耳机。
我正在做的是
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
guard let c = self.currentCall else {
action.fail()
return
}
c.answer()
self.communicationClient.audioController().configureAudioSessionForCallKitCall()
action.fulfill()
}
操作系统不应该自动解决这一问题吗?
答案 0 :(得分:1)
似乎Sinch SDK会覆盖输出音频端口。在配置音频会话后,尝试运行以下代码:
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
} catch {
print("OverrideOutputAudioPort failed: \(error)")
}
如果它不起作用,请尝试自行配置音频会话,而不是尽可能地依赖Sinch SDK。将configureAudioSessionForCallKitCall
调用替换为以下内容:
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playAndRecord,
mode: .voiceChat,
options: [.allowBluetooth, .allowBluetoothA2DP])
try session.setActive(true)
} catch {
print("Unable to activate audio session: \(error)")
}