我们的项目使用 WebRTC 进行 VOIP 调用,在访问 CallKit 框架之前它工作正常。但是当我尝试访问CallKit框架时,出现了双方都听不到对方讲话的情况。当我删除 CallKit 时,一切恢复正常。
CallKit的接听按钮与项目中原有的接听按钮功能相同。
令我惊讶的是,没有必要听不到任何声音。有时一切正常,但有时会出现问题。嗯,出问题的概率比较大。
我找到了下面的流程图,我怀疑问题出在函数调用的顺序上。但是不知道WebRTC是怎么对应图中的功能的。
另外我很好奇socket不稳定会不会导致CallKit框架工作不正常
请原谅我英文不好,但是这个问题困扰了我好几天了,我也不知道到底是哪里出了问题,是不是哪里和CallKit框架冲突了?
希望您能帮帮我,非常感谢!
最佳答案
以正确的方式连接 webrtc 和 callkit 需要完成几个步骤: 首先,您必须使用 RTCAudioTrack 并添加 RTCAudioSession 来处理音频。直接添加到 RTCPeerConnection 中的旧遗留 RTCAudioSession 可以工作,但它不是首选的方法。 第二件事是使用 manualAudio。当应用程序启动时,您应该更改 RTCAudioSession 上的 useManualAudio 标志:
RTCAudioSession.sharedSession().useManualAudio = true
这让您可以推迟音频直到 CallKit 通知 Audio Session 已激活,因此在 ProviderDelegate 中您应该实现以下方法:
(void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession
RTCAudioSession.sharedSession().didActivecated(audioSession)
RTCAudioSession.sharedSession().isAudioEnabled = true
第二个音频委托(delegate)方法不要忘记添加:
(void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession
RTCAudioSession.sharedSession().didDeactivecated(audioSession)
RTCAudioSession.sharedSession().isAudioEnabled = false
关于ios - CallKit: 使用 WebRTC 时没有声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070163/