zoukankan      html  css  js  c++  java
  • iOS Voip 后台运行的原理

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

  • 相关阅读:
    linux(十一)之初始化文件
    linux(十)配置ssh免密登录实现
    linux(九)之网络基础
    linux(八)linux系统中查找文件二
    oracle 重建分区索引
    java.io.IOException: java.sql.SQLException: ORA-01502: index 'BTO.PK_xxxxx' or partition of such index is in unusable state
    oracle count 大表
    shell for if
    oracle 导出表
    linux date
  • 原文地址:https://www.cnblogs.com/easonoutlook/p/2680481.html
Copyright © 2011-2022 走看看