当前位置:首页 > 代码 > 正文

sip软电话源代码(sip软终端)

admin 发布:2022-12-19 12:19 137


今天给各位分享sip软电话源代码的知识,其中也会对sip软终端进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何调用exosip开源代码的接口

Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。

eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。

一、介绍

Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。但缺点也很明显,首先就是可用性差,没有很好的api封装,使得上层应用在调用协议栈时很破碎;其次,只做到了transaction层次的协议过程解析,缺少call、session、dialog等过程的解析,这也增加了使用的难度;再次,缺少线程并发处理的机制,使得它的处理能力有限。

eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。eXosip增加了call、dialog、registration、subscription等过程的解析,使得实用性更强。但是eXosip局限于UA的实现,使得它用于registrar、sip server等应用时极其不容易。另外,它并没有增加线程并发处理的机制。而且只实现了音频支持,缺少对视频和其它数据格式的支持。

综合来说,Osip2加上eXosip协议栈仍然是个实现Sip协议不错的选择。当然需要根据不同的需求来增加更多的内容。

二、Osip2协议栈的组成

Osip2协议栈大致可以分为三部分:sip协议的语法分析、sip协议的过程分析和协议栈框架。

1、Sip协议的语法分析:

主要是osipparser2部分,目前支持RFC3261和RFC3265定义的sip协议消息,包括INVITE、ACK、OPTIONS、CANCEL、BYE、SUBSCRIBE、NOTIFY、MESSAGE、REFER和INFO。不支持RFC3262定义的PRACK。

遵循RFC3264关于SDP的offer/answer模式。带有SDP的语法分析。

支持MD5加解密算法。支持Authorization、www_authenticate和proxy_authenticate。

2、Sip协议的过程分析:

主要是osip2部分,基于RFC3261、RFC3264和RFC3265的sip协议描述过程,围绕transaction这一层来实现sip的解析。

Transaction是指一个发送方和接收方的交互过程,由请求和应答组成。请求分为Invite类型和Non-Invite类型。应答分为响应型的应答和确认型的应答。响应型的应答是指这个应答仅代表对方收到请求。请求经过处理后都必须返回确认型的应答。响应型的应答有1xx,确认型的应答包括2xx、3xx、4xx、5xx和6xx。一个transaction由一个请求和一个或多个响应型应答、一个确认型应答组成。

Transaction根据请求的不同和发送/接收的不同可以分为四类:ict、nict、ist和nist。

Ict是指Invite client transaction,就是会话邀请的发起方。

Nict是指Non-Invite client transaction,是指非邀请会话的发起方。

Ist是指Invite server tranaction,是指会话邀请的接收方。

Nist是指Non-Invite server transaction,是指非邀请会话的接收方。

每种类型的transaction都有自己相应的状态机,Osip2协议栈根据状态机来处理所有的sip事件,所以这部分就是整个协议栈的核心。但是因为Osip2只做到transaction这一层,所以它可以忽略掉call、registration等应用的复杂性,显得相当简单,这就使得需要使用它的应用必须要自己处理应用的逻辑。必须注意的一点是,transaction的资源在Osip里是由协议栈负责释放的,但是在Osip2里改成由使用的应用负责释放。

下面简单的用时序图来描述四种transaction的状态机,只着重于描述状态间的转换,忽略了调用的处理函数,也简化了很多没有状态变换的事件。也就是说,每个状态下定义的事件并没有完整的表现在图中,不要以为这些事件没定义或在该状态下没有处理。

图中方框里的是状态名,箭头线上的是触发状态变换的事件名称。同一个状态下的事件并没有时序关系。

Ict的状态机如下:

(图略)

Nict的状态机如下:

(图略)

Ist的状态机如下:

(图略)

Nist的状态机如下:

(图略)

3、协议栈框架:

框架并不是指代码的某一部分,而是指它的构成形式。主要有三部分:底层套接字接收/发送,模块间通信管道,上层调用api接口。

Osip2并不实现底层套接字的接收/发送,由eXosip实现,现在只支持UDP的链路连接。

模块间的通信管道包括:transaction的消息管道、jevent的消息管道。Transaction的消息管道是驱动其状态机的部件,通过不断的接收来自底层套接字的远端信令,或者来自上层调用的指令,根据上述的状态机制来驱动这个transaction的运转。Jevent的消息管道是eXosip实现的,用于汇报底层事件,使得调用程序能处理感兴趣的事件。

上层调用的api接口大致有两类:sip协议的调用接口和sdp协议的调用接口。EXosip封装了大部分的sip协议调用接口,一般来说都不需要直接调用osip2的接口函数。接口函数很多,在这里就不详述了,函数定义请参照源代码部分的注释。

三、eXosip协议栈的分析

eXosip是Osip2协议栈的封装和调用。它实现了作为单个sip终端的大部分功能,如register、call、subscription等。

EXosip使用UDP socket套接字实现底层sip协议的接收/发送。并且封装了sip消息的解释器。

EXosip使用定时轮循的方式调用Osip2的transaction处理函数,这部分是协议栈运转的核心。透过添加/读取transaction消息管道的方式,驱动transaction的状态机,使得来自远端的sip信令能汇报给调用程序,来自调用程序的反馈能通过sip信令回传给远端。

EXosip增加了对各个类型transaction的超时处理,确保所有资源都能循环使用,不会被耗用殆尽。

EXosip使用jevent消息管道来向上通知调用程序底层发生的事件,调用程序只要读取该消息管道,就能获得感兴趣的事件,进行相关的处理。

EXosip里比较重要的应用有j_calls、j_subscribes、j_notifies、j_reg、j_pub、osip_negotiation和authinfos。J_calls对应呼叫链表,记录所有当前活动的呼叫。J_reg对应注册链表,记录所有当前活动的注册信息。Osip_negotiation记录本地的能力集,用于能力交换。Authinfos记录需要的认证信息。

毕业设计 SIP协议的实现

我们先进行一个简单的纯SIP信令(不带语音连接建立)的UAC的SIP终端的程序开发的试验(即一个只能作为主叫不能作为被叫的的SIP软电话模型),我们创建一个MFC应用程序,对话框模式,照上面的说明,设置工程包含我们上面得到的oSIP的相关开发库及SDK的一些开发库,并且由于默认LIBC的冲突,需要排除MSVCRT[D]开发库(其中D代表Debug模式下,没有D表示Release模式下),直接使用eXosip的几个主要函数就可以创建一个基本的SIP软电话模型。

其主要流程为:

初始化eXosip库-启动事件监听线程-向SIP Proxy注册-向某SIP终端(电话号码)发起呼叫-建立连接-结束连接

初始化代码:

int ret = 0;

ret = eXosip_init ();

eXosip_set_user_agent("##YouToo0.1");

if(0 != ret)

{

AfxMessageBox("Couldn't initialize eXosip!\n");

return false;

}

ret = eXosip_listen_addr (IPPROTO_UDP, NULL, 0, AF_INET, 0);

if(0 != ret)

{

eXosip_quit ();

AfxMessageBox("Couldn't initialize transport layer!\n");

return false;

}

启动事件监听线程:

AfxBeginThread(sip_uac,(void *)this);

向SIP Proxy注册:

eXosip_clear_authentication_info();

eXosip_add_authentication_info(uname, uname, upwd, "md5", NULL);

real_send_register(30); /* 自定义函数代码请见源码 */

发起呼叫(构建假的SDP描述,实际软电话使用它构建RTP媒体连接):

osip_message_t *invite = NULL; /* 呼叫发起消息体 */

int i = eXosip_call_build_initial_invite (invite, dest_call, source_call, NULL, "## YouToo test demo!");

if (i != 0)

{

AfxMessageBox("Intial INVITE failed!\n");

}

char localip[128];

eXosip_guess_localip (AF_INET, localip, 128);

snprintf (tmp, 4096,

"v=0\r\n"

"o=josua 0 0 IN IP4 %s\r\n"

"s=conversation\r\n"

"c=IN IP4 %s\r\n"

"t=0 0\r\n"

"m=audio %s RTP/AVP 0 8 101\r\n"

"a=rtpmap:0 PCMU/8000\r\n"

"a=rtpmap:8 PCMA/8000\r\n"

"a=rtpmap:101 telephone-event/8000\r\n"

"a=fmtp:101 0-11\r\n", localip, localip, "9900");

osip_message_set_body (invite, tmp, strlen(tmp));

osip_message_set_content_type (invite, "application/sdp");

eXosip_lock ();

i = eXosip_call_send_initial_invite (invite);

eXosip_unlock ();

挂断或取消通话:

int ret;

ret = eXosip_call_terminate(call_id, dialog_id);

if(0 != ret)

{

AfxMessageBox("hangup/terminate Failed!");

}

sip协议如何用C语言实现

1、开源的sip服务器端,比较好用的是Asterisk,标准C程序实现,代码清晰。

2、sip的client相对比较多,主要有exosip,pjsip和opal。exosip简单易用,在PC上用比较方便。但是涉及的相关资源太多,用了osip,srtp,ms2等众多的开源库,ms2下面还用到了ffmpeg,别的不说,光编译就是噩梦。opal功能最强,虽然也用到了ffmpeg ,但是自己封装的非常好,采用插件方式,调用灵活。opal采用class方式提供封装,接口非常友好。感觉唯一不爽的地方,就是低层使用了ptlib,虽然多平台下都很好用,但放在嵌入式下感觉稍庞大了一些。pjsip精巧,方便移植,嵌入式下应该是首选。不过视频频支持方面扩展起来比opal麻烦。个人感觉,对于windows开发者来说,pjsip最大的好处就是代码调试方便。整个工程一次编译通过,另外两个库还要找很多相关的资源

3、其他的一些协议栈也调试过,比如reSipphone,好象是这个名字,还有Yate,不过从快速开发角度看,都不太合适。现在搞sip开发的,一开始就是先找好协议栈。linphone,ekiga什么的,但庞大。对于刚开始做的,最好是一个精简的demo。后来找到pjsip下面的几个例子,慢慢地了解了sip的工作流程,当然少不了抓包工具和tcpdump。

不过,其实,sip没有想象中的那么麻烦。现在回头看,刚开始做项目,使用协议栈绝对不是好想法。如果换个方向,先熟悉SIP基本协议,然后自己改造一个,或完全写一个,可能效果更好。

软电话开发SIp软电话源码在哪有免费下载?android软电话,vc软电话,sip协议

思思软电话V2.0功能列表: 1、支持SIP协议。 2、支持录音功能。 3、支持电话本功能。 4、支持通话记录功能。 5、DTMF方式支持 RFC2833 或者 SIP INFO 6、语音编码方式支持 G729a或者G711方式 7、支持 不加密、RC4加密、VOS加密三种加密方式。 8、支持显余额功能。(目前支持SVSS、VOS显余额,需要在服务器上额外安装局端程序) 9、支持最小化与来电弹屏。 10、支持windows xp,win2000,win2003,win vista,win7 11、支持绿色安装版(也可制作安装包)。 12、支持保存多条账户信息。 13、支持广告弹窗功能。(需在服务器安装局端程序) 14、支持显示网络质量状态图。 15、支持最快服务器搜索功能。

请百度搜索思思软电话就可以找到卖家了。

C# SIP软电话问题,PJSIP,SIPEK,接收不到来电

接口的问题,你要看看他们怎么实现的,本人现在做的电话,是用的别人的接口

关于sip软电话源代码和sip软终端的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/7998.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载