gpt4 book ai didi

ios - CallKit Audio Session 仅在导航到应用程序时启动

转载 作者:行者123 更新时间:2023-11-29 05:46:15 25 4
gpt4 key购买 nike

我现在正在开发 voip 应用程序,并且希望支持保留。但当第二个电话打来时,我会保留当前的电话。切换到我的第一个通话时,我根本听不到任何声音。听到它的方法是从 callKit native 屏幕导航到我的应用程序,因此我可以听到声音。

func configureAudioSession() {

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, mode: .videoChat, options: AVAudioSession.CategoryOptions.mixWithOthers)
_ = try? AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.none)
_ = try? AVAudioSession.sharedInstance().setMode(AVAudioSession.Mode.voiceChat)
}

func startAudio() {
print("Starting audio")

do {
_ = try AVAudioSession.sharedInstance().setActive(true)
} catch {
}
}

func stopAudio() {
print("Stopping audio")

do {
_ = try AVAudioSession.sharedInstance().setActive(false)
} catch {
}
}

最佳答案

为了支持保持,您不必启动/停止 Audio Session ,而是可以使用Callkit本身提供的CXSetHeldCallAction。这是我使用的保持代码。

let callKitCallController = CXCallController()

func performHoldAction(isOnHold:Bool, uuid:UUID) {
let holdCallAction = CXSetHeldCallAction(call: uuid, onHold: isOnHold)
let transaction = CXTransaction(action: holdCallAction)
callKitCallController.request(transaction) { error in
if let error = error {
CPrint("holdCallAction transaction request failed: \(error.localizedDescription).")
return
}
CPrint("holdCallAction transaction request successful")
}
}

一旦系统将调用置于保持状态(通过上述方法或由于其他来电接受或任何其他原因),则在 CXProviderDelegate 中,方法 funcprovider(_provider: CXProvider ,执行操作:CXSetHeldCallAction) 为您提供详细信息的回调。

这里,system/callkit 本身与音频交互,您不必显式启动或停止音频来保持。

注意:请确保您为新通话提供的 CXCallUpdatesupportsHolding 设置为 true

关于ios - CallKit Audio Session 仅在导航到应用程序时启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com