我正在使用PJSIP(在PJSUA的帮助下)在我的应用程序中实现一些VoIP功能. 当我的应用程序中的VoIP呼叫正在进行中时,我可以轻松地保持呼叫,然后完全没有问题,一切都很好. 我已经使用CoreTe
当我的应用程序中的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()重新启动它