gpt4 book ai didi

ios - 在我的 iOS 应用程序中打断 VoIP 通话的手机来电

转载 作者:可可西里 更新时间:2023-11-01 17:07:21 28 4
gpt4 key购买 nike

我正在使用 PJSIP(在 PJSUA 的帮助下)在我的应用程序中实现一些 VoIP 功能。当我的应用程序中正在进行 VoIP 通话时,我可以轻松地保持通话然后毫无问题地取消通话,一切都很好。我已经使用 CoreTelephony 来识别传入的蜂窝(正常)调用,当来电时,我在 applicationWillResignActive 中保持我的 VoIP 调用,当它结束时,我在 applicationDidBecomeActive< 中取消保持(重新邀请)我的 VoIP 调用。一切似乎都工作正常(因为我几乎到处都有日志)但是我从手机通话回来后的通话不再有任何媒体传输,所以通话正在进行但我听不到任何声音。 30 秒后我断开连接(我配置了 30 秒超时,因为我的服务器上没有媒体在这里被调用。)。我真的很感激任何可能的信息或者我遗漏的东西。提前谢谢大家。

最佳答案

作为这个维基:

http://trac.pjsip.org/repos/wiki/Getting-Started/iPhone?format=pdf

of pjsip 解释说,从 iOS7 开始,pjsua 使用 AVAudioSession 的高级 API 来管理声音流的打开和关闭,这不允许在 GSM 调用(或任何其他声音)后(自动)重新连接媒体流的旧方法)中断。因此,要使其正常工作,您需要执行以下操作:

  • 您的应用程序应配置为接收中断事件,如果您使用声音或 VOIP 作为 UIBackgroundModes,则已经是这种情况。如果没有,则使用以下方法接收中断:

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

  • 中断开始时强制关闭声音设备。对 pjsua 使用 pjsua_set_no_snd_dev(),或对 pjsua2 使用 AudDevManager.setNoDev()

  • 当中断结束时,将您的 AVAudioSession 设置为事件状态,然后重新启动声音设备使用 pjsua_set_snd_dev() 用于 pjsua,或 AudDevManager.setPlaybackDev()+setCaptureDev() 用于 pjsua2

可以使用 pjsua_get_snd_dev() 方法提取需要发送到 pjsua_set_snd_dev() 的参数。

这里要记住的一件事是,一旦你强行关闭设备,它就不会自动启动(即使有一个新的调用开始),除非你再次调用 pjsua_set_snd_dev() 重新启动它

关于ios - 在我的 iOS 应用程序中打断 VoIP 通话的手机来电,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23454204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com