当前位置 : 主页 > 手机开发 > ios >

传入的蜂窝呼叫在我的iOS应用程序中中断VoIP呼叫

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在使用PJSIP(在PJSUA的帮助下)在我的应用程序中实现一些VoIP功能. 当我的应用程序中的VoIP呼叫正在进行中时,我可以轻松地保持呼叫,然后完全没有问题,一切都很好. 我已经使用CoreTe
我正在使用PJSIP(在PJSUA的帮助下)在我的应用程序中实现一些VoIP功能.
当我的应用程序中的VoIP呼叫正在进行中时,我可以轻松地保持呼叫,然后完全没有问题,一切都很好.
我已经使用CoreTelephony来识别传入的蜂窝(正常)呼叫,当呼叫到来时,我在applicationWillResignActive中保持我的VoIP呼叫,当结束时我在applicationDidBecomeActive中取消(重新注册)我的VoIP呼叫.一切似乎工作正常(因为我几乎到处都有日志)但是从蜂窝电话回来后我的电话已经不再有任何媒体传输,所以电话正在进行,但我听不到任何声音. 30秒后我断开连接(我配置了30秒超时,因为我的服务器上没有媒体,这里会调用它.).我真的很感激任何可能的信息或者我可能缺少的东西.谢谢大家. 作为这个维基:

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

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

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

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
>中断开始时强制关闭声音设备.
pjsua使用pjsua_set_no_snd_dev(),pjsua2使用AudDevManager.setNoDev()
>当中断结束时,将AVAudioSession设置为活动状态,然后重新启动声音设备
对pjsua使用pjsua_set_snd_dev(),对pjsua2使用audDevManager.setPlaybackDev()setCaptureDev()

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

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

网友评论