我们的项目使用WebRTC进行VOIP呼叫,并且在访问CallKit框架之前运行良好。但是当我试图访问CallKit框架时,出现了双方都听不到对方讲话的情况。当我删除CallKit时,一切恢复正常。
CallKit的应答按钮与项目中的原始应答按钮功能相同。
令我惊讶的是,没有必要听到任何声音。有时一切正常,但有时会有问题。嗯,出现问题的可能性更大。
此外,我很好奇套接字不稳定是否会导致CallKit框架异常工作
请原谅我英语不好,但是这个问题已经困扰了我好几天了,我不知道到底是哪里出了问题,是不是在哪里与CallKit框架冲突?
希望您能帮助我,非常感谢!
苹果建议我们等到连接建立后再执行PerformanceWerAction。以下是来源
苹果对呼叫套件文档的建议
如果呼叫接收人在应用程序与您的服务器建立连接之前应答,请不要立即完成发送给您的代理的provider:performAnswerCallAction:method的cAnswerCallAction对象。相反,等待建立连接,然后完成该对象。当它等待你的应用程序完成请求时,传入呼叫界面让用户知道呼叫正在连接,但尚未准备就绪。
所以我们需要等待一两秒钟,然后在performAnswerCallAction中完成动作
最后,我解决了这个问题,但我仍然不明白为什么它可以解决。以下是我的解决方案:
首先,我将“完成”的调用延迟1秒(注意此时间不能小于1秒)
- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
if (self.delegate && [self.delegate respondsToSelector:@selector(callKitManager:refreshCurrentCallStatus:)]) {
[self.delegate callKitManager:self refreshCurrentCallStatus:EUCCallKitStatusAnswerAccept];
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[action fulfill];
});}
第二,我也延迟了一秒我的网络请求调用(这里比前一个长)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.peerConnection offerForConstraints:[self offerConstraintsRestartIce:NO] completionHandler:^(RTCSessionDescription * _Nullable sdp, NSError * _Nullable error) {
[self peerConnection:self.peerConnection didCreateSessionDescription:sdp error:error];
}];
});
这样,我的问题就解决了。
如果你知道为什么这样可以解决这个问题,请评论我,谢谢!
需要做几个步骤来以正确的方式连接webrtc和call kit:首先,您必须使用RTCAudioTrack并添加RTCAudio会话来处理音频。旧的遗留RTCAudio会话直接添加到RTCPeerConnection作品中,但它不是这样做的首选方法。第二件事是使用manualAudio。当应用程序启动时,您应该更改RTCAudio会话上的useManualAudio标志:
RTCAudioSession.sharedSession().useManualAudio = true
这使您可以推迟音频,直到CallKit通知音频会话已激活,因此在ProviderDelegate中,您应该实现以下方法:
(void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession
RTCAudioSession.sharedSession().didActivecated(audioSession)
RTCAudioSession.sharedSession().isAudioEnabled = true
对于第二个音频委托方法,不要忘记添加:
(void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession
RTCAudioSession.sharedSession().didDeactivecated(audioSession)
RTCAudioSession.sharedSession().isAudioEnabled = false
我试图让callkit在传入呼叫时与webrtc一起工作,但当我从锁定屏幕接收呼叫并接受它时,在我以前台模式运行应用程序之前,不会有声音。我已配置audiosession向RTCAudoSession发送通知,但它不起作用。你有解决办法吗?
如果我们在前台启动应用程序,一切都很好。但是,当应用程序之前被杀死并通过在锁定屏幕上接收PushKit通知而重新启动时,会出现问题。 当应用程序收到PushKit通知时,我们将显示CallKit UI。这是正确的。用户可以通过WebRTC接听电话并建立连接。但是根本没有音频。 奇怪的是,如果用户通过点击应用程序图标从CallKit屏幕打开应用程序,音频就会启动并按预期工作。看来问题出在音频会话配置
这是一个会议应用程序,我正在启动传出呼叫,以使我的VoIP呼叫具有高优先级,并且在我进行VoIP呼叫时不会中断传入呼叫。 我在我的应用程序中使用WebRTC CallKit。我开始了一个呼叫,当我按下锁定/电源按钮,然后CallKit呼叫断开,我的Voip呼叫音频路由更改为接收器并保持不变。 为什么要锁定iPhone以终止通话。 这是我的代码。
我在这里尝试了许多解决方案,但没有人奏效。WebRTC工作正常,我在设备锁定时接听电话时处于连接状态,解锁后音频打开,视频启动。当屏幕保持锁定状态时,我如何只能获得音频? 我已启用RTCAdioSession,并在呼叫停止时将其禁用。 当设备第一次解锁时,它工作得很好,当我把它锁回去时,我得到了音频。但是第一次,当我接听来自CallKit的电话时,它不起作用。它只在设备解锁后才开始工作。
我正在开发webRTC,我正在本地网络上的两个Android设备之间进行实时流,它对我来说工作得很好,除了音质问题,声音中有噪音和回声。如果我在一端使用免提,它会变得更好,但我不想使用免提。 那么我该如何提高音质,有什么技术可以提高音质。它还表示,webRTC内置了回声消除功能,如果这是回声仍然存在的原因。
更新 我在这里找到了一个使用的高通滤波器示例。在我的代码中这样实现它。 在我实际测试低声音是否被滤波器静音之前,我遇到了一个问题。使用几秒钟后将音频完全静音。我尝试了0,1500等。几秒钟后,它会变得安静。 原始帖子 我使用下面的约束来抑制噪音。 但我也想静音一些更高的频率。即使我在某个表面上慢慢移动手机,麦克风也会捕捉到噪音并将其发送给其他同伴。它甚至会捕捉到我的呼吸声,并在我将其放在支票附近时