最近要做VoIP的iOS客户端,所以对这方面进行了一点研究。
类似的有Skype,一般情况下程序进入到后台之后是无法接收到消息的,除非像QQ那样,通过NotificationCenter来实现,但是必须上架,比较麻烦。
通过研究Apple的官方文档,发现对Audio 和 VoIP 还是给了后台运行的机会。
通过在info.plist文件里面设置UIBackgroundModes来设置这个选项的信息。
下面是对VOIP在iOS运行的原理的介绍,主要就是:当进行后台之后,系统托管NSStream的通道,如果服务器有信息要
传递到客户端,系统会激活处于后台的程序运行10秒钟(10秒钟之内都可以,可以设置为6秒,或者8秒之类的),这个时候可以通过
LocalNotification来提示用户有消息。
来自网络的介绍,感谢分享~
从问题看来你对VOIP的基本流程了解都不够。对socket也是一知半解。
SIP服务器还有什么帐号的区分么?SIP服务器又不是GitHub。SIP服务器一般都是自己搭建的,有复杂的,类似与Asterisk,也有简单的,例如SymbianSDK里面提供的SIP服务器。SIP只是一个简单的协议而已,VOIP里面包含了许多其他协议,SIP,SDP,RTP,SRTP~~另外还涉及到了H264,G729,iLBC等这种编解码方式,还有中转,直连这个VOIP中客户端的连接方式。
Socket是全双工的,为何要在客户端也建立服务器监听?
iOS上的VOIP程序是肯定能后台监测到来电并提示用户的
VOIP的SIP报文走的是TCP通道,而语音报文走的是UDP通道。
在iOS平台中,NSStream即为TCP,并且NSStream有一个VOIP属性,如果设置了,那么你的程序处于后台时候,系统会托管你这个NSStream通道,并保持和服务器连接的畅通,如果这个时候服务器通过这个NSSream(TCP socket)给客户端发送了数据,系统会激活你处于后台的程序运行10秒钟已处理这个报文,你可以在这个时候通过LocalNotification来提示用户有来电。