Ios Callkit-从后台启动呼叫时无音频

Ios Callkit-从后台启动呼叫时无音频,ios,background,webrtc,voip,callkit,Ios,Background,Webrtc,Voip,Callkit,这是从iOS 13.3.1开始的 在我的应用程序中,我使用Callkit+WebRTC建立VOIP连接。我总是设法在没有问题的情况下建立联系 但是,由于13.3.1,如果应用程序不在前台,我无法启动Callkit呼叫:我设法建立了连接,但Callkit没有启动(顶部没有绿色图标/栏),麦克风也没有拿起 我总是遇到以下错误: Error requesting transaction (( " contactIdentifier=(null) video=0 relay=0 upgrad

这是从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/Voice-over-IP/background fetch)模式处于活动状态时会对其产生影响

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

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


有什么建议吗?

当我在我的项目中实现call kit时,我经历了同样的事情,我尝试了AudioSession的一切,但结果发现它与我用于webrtc和sip的库有关,webrtc库中有一行代码检查应用程序状态是否在后台,是否在连接音频。因此,我的建议是检查webrtc代码库或在代码中搜索应用程序状态检查,如
UIApplicationStateBackground
或直接
[UIApplication sharedApplication].applicationState


我希望这会有帮助

我在我的项目中实现call kit时也经历了同样的事情,我尝试了AudioSession的所有功能,但结果发现它与我用于webrtc和sip的库有关,webrtc库中有一行代码检查应用程序状态是否在后台,是否在连接音频。因此,我的建议是检查webrtc代码库或在代码中搜索应用程序状态检查,如
UIApplicationStateBackground
或直接
[ui应用程序共享应用程序应用程序应用程序状态


我希望这会有帮助

你用的是什么库?这里是同一个问题,你是如何解决这个问题的?@fam我当时编辑库,但他们用最新版本修复了它。正如我提到的,如果是bg,则会对应用程序状态进行具体检查,因为它没有初始化音频。谢谢,我知道你提到的,但共享库对我们帮助很大,我仍然自己编写callkit代码:(@fam library我们使用的是Mediastreamer2。里面有一个名为iphonesnd.m的文件。音频会话将在这个类中启动。希望这会有所帮助。你使用什么库?这里的问题相同,你是如何解决的?@fam我当时编辑了library,但使用的是他们修复的最新版本。正如我提到的,对应用程序进行了具体检查ion state如果它是bg,它没有初始化音频。谢谢,我知道你提到的,但是共享库对我们帮助很大,我仍然自己编写callkit:(@fam library我们使用的是Mediastreamer2。里面有一个名为iphonesnd.m的文件。音频会话正在这个类中启动。希望这会有所帮助。
 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)  
}