应用程序不会将音频路由到耳机(最初)
App doesn't route audio to headphones (initially)
我有一个使用 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()
}
这不应该由 OS 自动处理吗?
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)")
}
我有一个使用 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()
}
这不应该由 OS 自动处理吗?
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)")
}