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

 

轉載自:http://blog.csdn.net/zhangbinHn/article/details/8614494

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章