gpt4 book ai didi

ios - CallKit 可以在交换通话后重新激活声音

转载 作者:行者123 更新时间:2023-12-01 18:05:16 27 4
gpt4 key购买 nike

我正在开发 CallKit 应用程序,我遇到一个问题,在 CallKit 屏幕上“交换”调用时,调用保持无法重新启动音频,直到用户返回到应用内调用屏幕。我可以通过更新来绕过这个:

supportsHolding = false

但是我可以解决这个问题,例如whatsapp可以正确地做到这一点!

附:我正在使用 webrtc 调用电话!

谢谢!

编辑:

这是提供商的代码:

public func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction) {

guard let call = conductor!.callWithUUID(uuid: action.callUUID) else {
WebRtcConductor.debug("\(self.TAG) 🔴 failed to perform HeldAction: uuid: \(action.uuid), calluiid: \(action.callUUID)")
action.fail()
return
}

setIsHeld(call: call, isHeld: action.isOnHold)
action.fulfill()
}

setIsHeld 函数只需执行以下操作:

audioTrack.isEnabled = enabled

如果我使用 callkit 屏幕的“静音”按钮,一切正常,但如果我有 2 个事件调用,当我从 webrtc 调用滑动到正常调用时,会调用 CXSetHeldCallAction 并且音轨会被禁用,如果我再次滑动到webrtc 调用,音轨已启用,但我什么也听不到,如果我返回主应用程序屏幕,音频再次正常工作!

最佳答案

实际上,Google WebRTC 库存在一个限制,在实现支持交换调用的 CallKit 集成时会导致上述问题。

WebRTC Issue 8126已知已有一年多了,但尚未集成到 WebRTC 主分支中。但是,您可以在原始票证中找到解决此问题所需的代码更改。

但是,作为解决方法,您可以触发 WebRTC 内部订阅的系统通知。

在 CallKit 提供程序的“didActivate audioSession”方法中发布 AVAudioSessionInterruptionType.ished 通知:

var userInfo = Dictionary<AnyHashable, Any>()
let interrupttioEndedRaw = AVAudioSessionInterruptionType.ended.rawValue
userInfo[AVAudioSessionInterruptionTypeKey] = interrupttioEndedRaw
NotificationCenter.default.post(name: NSNotification.Name.AVAudioSessionInterruption, object: self, userInfo: userInfo)

PS:盯着票以提高合并的机会;-)

关于ios - CallKit 可以在交换通话后重新激活声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416493/

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