ios - CallKit: 使用 WebRTC 时没有声音

标签 ios objective-c audio webrtc callkit

我们的项目使用 WebRTC 进行 VOIP 调用,在访问 CallKit 框架之前它工作正常。但是当我尝试访问CallKit框架时,出现了双方都听不到对方讲话的情况。当我删除 CallKit 时,一切恢复正常。

CallKit的接听按钮与项目中原有的接听按钮功能相同。

令我惊讶的是,没有必要听不到任何声音。有时一切正常,但有时会出现问题。嗯,出问题的概率比较大。

我找到了下面的流程图,我怀疑问题出在函数调用的顺序上。但是不知道WebRTC是怎么对应图中的功能的。
enter image description here

另外我很好奇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/

相关文章:

ios - UIActivityIndi​​catorView 从不设置动画

objective-c - 使用nonnull时没有警告?

objective-c - 获取 nil 对象的类类型?

python - 使用静音检测分割音频文件

c# - 编辑taglib-sharp(音频元数据)的源代码

ios - 使用 Swift 限制 iOS 版 Google map 中的平移

ios - 在 iOS 上读取/写入相同的 MTLTexture

ios - AudioKit:何时使用 AKOperationGenerator 或 AKOscillator?

ios - RNCryptor:使用 rncrypt (cli) 加密,然后在 iOS 中使用 RNDecryptor 解密

c++ - 在 C++ 中录制时从设备获取音量