我有一个使用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()
}
这难道不应该由操作系统自动处理吗?
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)")
}