如何在iOS中连接SIP服务器进行VoIP呼叫?

时间:2015-10-08 11:59:01

标签: ios sip voip

我想连接SIP服务器进行SIP握手。任何人都可以帮助我如何在iOS中实现相同的功能。我们该怎么做它应该通过TCP协议来完成还是可以通过NSURLSession来完成? 在这方面提供一些指导真的很有帮助。

我们如何将请求或传递参数发布到SIP服务器? 是通过标头还是XML? 对此有何帮助?

2 个答案:

答案 0 :(得分:0)

我建议您在网络上构建一个可以在网上找到的SIP SDK。更喜欢使用TCP作为SIP信令消息的传输协议,因为 - Apple就像面向连接的协议。随着您的深入,它应该有助于您更好地理解为什么它有意义。

NSURLSession是执行URL请求的机制。 SIP信令是包含会话创建和维护信息的协议分组。所以我没有看到对SIP的任何特殊用途。

答案 1 :(得分:0)

正如Rajesh在他的回答中提到的,TCP(或TLS)在iOS上是强制性的,允许在后台接收数据:你的应用程序在进入后台时会暂停,但系统会密切关注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);
}

注意:您的应用当然必须是“Voice over IP”应用(背景模式设置)