iOS Voip 后台运行的原理

时间:2022-12-23 22:15:49

最近要做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来提示用户有来电。