首页 > 解决方案 > Callkit - 如果从后台开始通话,则没有音频

问题描述

这从 iOS 13.3.1 开始发生

在我的应用程序中,我使用 Callkit + WebRTC 建立 VOIP 连接。我总是设法毫无问题地建立连接。

但是,从 13.3.1 开始,如果应用程序不在前台,我将无法启动 Callkit 调用:我设法建立了连接,但 callkit 没有启动(顶部没有绿色图标/栏)并且麦克风也没有被拾起。

我总是收到以下错误:

Error requesting transaction ((  
    " contactIdentifier=(null) video=0 relay=0 upgrade=0 retry=0 emergency=0 isVoicemail=0 ttyType=0 localLandscapeAspectRatio={0, 0} localPortraitAspectRatio={0, 0} dateStarted=(null) localSenderIdentityUUID=(null) shouldSuppressInCallUI=0>"  
)): (Error Domain=com.apple.CallKit.error.requesttransaction Code=6 "(null)")  

根据我收集到的信息(几乎没有关于此代码 6 错误的信息),如果 AudioSession 未激活,Callkit 可能会终止。但是,我不明白自 13.3.1 以来发生了什么会影响后台(我有音频、Airplay 和 PIP/IP 语音/后台获取)模式处于活动状态。

与此同时,我尝试了很多事情,从自己激活会话(在 callController.request 之前和 provider.reportOutgoingCall 之前)

 do {  
    try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, mode: AVAudioSession.Mode.voiceChat, options: .mixWithOthers)  
    try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)  
    try AVAudioSession.sharedInstance().setActive(true)  
} catch {  
    print(error)  
}  

播放无声音频(试图强制激活 AVAudioSession)但没有任何运气。

有什么建议么?

标签: iosbackgroundwebrtcvoipcallkit

解决方案


当我用我的项目实现调用工具包时,我遇到了同样的事情,我用 AudioSession 尝试了所有东西,但结果发现它与我用于 webrtc 和 sip 的库有关,webrtc 库中有一行检查应用程序状态是否在背景与否,如果没有连接音频。所以我的建议是检查 webrtc 代码库或在代码中搜索应用程序状态检查,如 UIApplicationStateBackground或直接[UIApplication sharedApplication].applicationState

我希望这个能帮上忙!


推荐阅读