簡體   English   中英

如何在iOS中與SIP服務器連接以進行VoIP通話?

[英]How to connect with SIP server for VoIP call in iOS?

我想與SIP服務器連接以進行SIP握手。 誰能幫我在iOS中實現相同的功能。 我們應該怎么做。 應該通過TCP協議完成還是可以通過NSURLSession完成? 在同一方面提供一些指導確實會有所幫助。

我們如何將請求或參數傳遞到SIP服務器? 是通過標頭還是XML? 有什么幫助嗎?

我建議您在網上可以找到的SIP SDK之上構建您的應用程序。 首選使用TCP作為SIP信令消息的傳輸協議,因為-Apple類似於面向連接的協議。 隨着您開始更深入,它應該可以幫助您更好地理解它為什么有意義。

NSURLSession是執行URL請求的機制。 SIP信令是一個包含會話創建和維護信息的協議數據包。 因此,對於SIP,我還沒有看到任何特殊用途。

正如Rajesh在回答中提到的那樣,iOS上必須強制使用TCP(或TLS)以允許在后台接收數據:您的應用程序在進入后台時將被掛起,但系統將密切注意TCP連接並喚醒您的應用程序當套接字上發生某些事情可以讓您處理事件(通常是傳入呼叫)時:

為了要求系統喚醒您的應用程序,您必須配置用於此類VoIP使用的套接字:

使用C代碼,您可以執行以下操作:

//include required
#include <CoreFoundation/CFStream.h>
#include <CFNetwork/CFSocketStream.h>

//additionnal declaration
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;


//TODO: open your socket as usual
...

//Configure the socket 
CFStreamCreatePairWithSocket (kCFAllocatorDefault, socket, &readStream, &writeStream);
if (readStream != NULL)
        CFReadStreamSetProperty (readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
if (writeStream != NULL)
        CFWriteStreamSetProperty (writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
if (CFReadStreamOpen (readStream)) {
        //CFReadStreamOpen Succeeded
}
if (CFWriteStreamOpen (writeStream)) {
        //CFWriteStreamOpen Succeeded
}

//Now, if you go to background, your app will be woken up
...


//When you close the socket
if (readStream != NULL) {
  CFReadStreamClose (readStream);
  CFRelease (readStream);
}
if (writeStream != NULL) {
  CFWriteStreamClose (writeStream);
  CFRelease (writeStream);
}

注意:您的應用程序當然必須是“ IP語音”應用程序(“背景模式”設置)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM