ios - 应用程序不会将音频路由到耳机(最初)

标签 ios swift sinch callkit

我有一个使用 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 覆盖了输出音频端口。尝试在配置 Audio Session 后立即运行此代码:

do {
    try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
} catch {
    print("OverrideOutputAudioPort failed: \(error)")
}

如果不行,请尝试自己配置 Audio Session ,如果可以,不要依赖 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)")
}

关于ios - 应用程序不会将音频路由到耳机(最初),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561458/

相关文章:

ios - 使用 Sinch 的即时消息推送通知未在 iOS 上提供

objective-c - 设置一个在 IOS 应用程序的生命周期内运行的计时器

ios - 解析具有特定条件的字符串

Swift 3 全局函数。我可以这样做吗?

swift - 如何快速添加时间延迟

java - 从用户 ID 获取另一个用户的用户名 - Parse & Android

ios - 从 subview Controller 呈现模态视图 Controller

ios - 如何在 Touchid 后更改 View

macos - 解析 - 适用于 OSx Swift

android - Sinch 电话 session Android