电话锁定时,iOS音频在通话期间无法正常工作。 WebRTC用于呼叫

我正面临音频问题使用Callkit和WebRTC进行VOIP通话时,从锁定屏幕接听电话。

一般function:

我的应用程序在启动时激活audioSession。 对于来电,生成并交换SDP Offer&Answer。 已建立对等连接。 无论是音频呼叫还是video呼叫,都会生成音频和video流。 然后使用以下代码将call报告给callkit:

callProvider.reportNewIncomingCall(with: currentCallUUID!, update: update) { error in } 

如果app在前台,它可以正常工作。

但是,当手机被锁定,并且用户从锁定屏幕应答呼叫时,Streams会被交换,但在用户自己进入应用程序之前,两端都没有音频。

当用户进入App时,音频在两端都变为活动状态。

所有后台设置和function都已正确设置。

我还提到了Apple员工提供的以下工作。 但即使它不起作用。

https://forums.developer.apple.com/thread/64544

正如我所提到的,我正在使用WebRTC进行呼叫。 如果我在用户应答呼叫后仍然在交换媒体流(仍然在锁定屏幕上)并且此时设置了对等连接。 它工作正常(但它增加了建立呼叫连接的延迟)。

但是,如果在显示呼叫之前进行了对等连接(例如在报告呼叫到callkit之前),则音频停止工作。

我能够解决这个问题。

我遵循的步骤 –

  • 我在这里检查了与WebRTC相关的代码

  • 我添加了RTCAudioSession头文件,它实际上是Webrtc的私有类。 因此,每当我从信令中收到呼叫事件时,我启用RTCAudiosession,并且在呼叫结束时,我禁用它。

  • 我必须将传入的流渲染到虚拟视图(虽然在调用进行时它没有显示,但应用程序尚未打开,但需要使音频工作)。

如果有人面临同样的问题,我希望这会有所帮助。

@abhimanyu你还在面对这个问题还是让它成功了。 我与CallKit面临同样的问题。

根据我在WebRTC M60版本中的理解,他们修复了与CallKit相关的问题,我认为这会产生副作用并导致此问题。

他们修复的问题与System AudioSession有关,当CallKit呈现来电呼叫UI并播放振铃音时,CallKit控制AudioSession,在用户操作(接受/拒绝)后释放控制权。 在WebRTC M60版本中,现在他们为此控制交换添加了观察者。 这就是为什么如果应用程序处于前台就可以正常工作,但是如果手机被锁定并接受了任何来电,那么(我假设您正在使用CallKit UI进行呼叫而不是将用户重定向到应用程序,从锁定屏幕接受)由于Native UI当呼叫通过CallKit屏幕时,WebRTC无法激活其自己的AudioSession实例。

已在WebRTC M60上修复的错误链接: https ://bugs.chromium.org/p/webrtc/issues/detail?id = 7446

如果您发现此问题的任何解决方法,请告诉我们。