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來提示用戶有來電。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM