我的SIP开发之路

简介: http://hi.baidu.com/ltlovelty/blog/item/837baf1ece7fc6f11ad57647.html     经过对SIP协议和开源协议栈快半年的研究,我现在终于有点入门了。

http://hi.baidu.com/ltlovelty/blog/item/837baf1ece7fc6f11ad57647.html

 

 

经过对SIP协议和开源协议栈快半年的研究,我现在终于有点入门了。还记得当时刚刚接触这个敬仰已久的东东的时候,那个头大啊,毕竟它的协议族太大了,每个知识点都可以无限延伸,光是鉴权机制就让我花了不少精力。面对我的是大堆大堆的英文协议和代码,看得我是应接不暇啊~~ 还好挺过来了,下面分享下我的经验吧。

 

首先,推荐几个不错的资源给刚刚接触SIP的朋友们:

(1)深圳一位好心的大牛翻译的SIP协议中文版,对于和我一样看英文头晕的人绝对是个好东西啊,网上很多论坛都能下到,找不到的朋友给我发邮件吧,我这资料还是比较全的,呵呵~~;

(2)《74 Open Source VoIP Apps》,这个是国外的人总结的,对于选择合适的开源协议栈是很有帮助的,里面对于UA、Proxy、Test toots和RTP stack都按照开发平台进行了分类和介绍,当时就是这个文章给我指了条明路啊;

(3)当然遇到模糊的概念的时候,RFC才是王道,可以到IETF的网站去找了(http://www.ietf.org/);

(4)强力推荐新力工作室的博客(http://www.i170.com/user/gatekeeper/ArtList/sip/P1/L),上面有大量很赞的文章,去看看绝对有意想不到的惊喜;

(5)还有一些开源网站也会对SIP进行很有针对性的介绍,可以花很少的时间去了解一些开发中需要注意的关键点,例如http://www.sipdev.org/wiki/index.php/A_newcomer's_guide_to_SIP和http://www.iptel.org/sip/intro。

 

此外,还有一个帮助学习SIP很好的方法那就是抓包了(抓包软件例如Sniffer等等,甚多),虽然现在很多协议栈都把组合消息的工作替我们做了,但是阅读SIP消息可以加深对协议的理解,而且可以帮助我们写出兼容性更强的软件,毕竟有些头域在一些协议栈中是不支持的。

 

对于SIP协议栈的选择我还是着实下了翻苦工,查阅无数开源网站啊!(估计也就10几个吧,呵呵),在UA开发中我因为要考虑往DSP平台的移植,只能选择纯C开发的栈,一开始看大家都推荐osip/exosip,于是也用了很长一段时间,但是现在改用pjsip了,哈哈,不得不要向大家隆重推荐一下了。不是因为osip不好,是因为pjsip太好了(说到这有点激动,毕竟花了快半个月时间找一个适合我自己的开源库还是很值得啊),osip/exosip的体积比较小,很适合做嵌入式开发,也并不像网上有的人说的有很多bug。

 

pjsip的官网如下(http://www.pjsip.org/)。说说它的几大好处吧!

(1)支持太多的平台了,甚至有symbian,牛!

(2)代码层次非常清晰,从低级到高级都提供了很方便的接口供开发;

(3)提供相当多的测试用例和一个基于pjsip开发的命令行UA程序供开发人员参考;

(4)文档相当完善,几乎无所不包,这对于开发者来说是很强大的支持;

(5)经过我的大量测试验证它十分稳定(这个似乎不太权威,呵呵)。

 

对于SIP proxy的开发一开始选择的是openser,这个功能非常强大的库代码也很庞大,基于C开发,加上是在linux上开发的,让我对它望而却步(本人的linux开发很菜)。最终选择了reSIProcate(http://www.resiprocate.org),这个是基于C++开发的库,面向对象的思想还是能减少我们不少的开发工作量。reSIProcate受到了很多商业项目的青睐,比较稳定。repro是reSIProcate项目的SIP proxy,它内置了数据库和Web administrator,这一点是我比较看重的。reSIProcate的网上资料和官方文档都不是很多,还好它的结构还是很清晰的,多多研究代码了。

 

 

开源的sip服务器端,使用过的最好用的是Asterisk,标准C程序实现,代码清晰。 

sip的client相对比较多,个人使用过有exosip,pjsip和opal。 

根据使用经验,exosip简单易用,在PC上用比较方便。但是涉及的相关资源太多,用了osip,srtp,ms2等众多的开源库,ms2下面还用到了ffmpeg,别的不说,光编译就是噩梦。 

opal功能最强,虽然也用到了ffmpeg ,但是自己封装的非常好,采用插件方式,调用灵活。opal采用class方式提供封装,接口非常友好。感觉唯一不爽的地方,就是低层使用了ptlib,虽然多平台下都很好用,但放在嵌入式下感觉稍庞大了一些。 

pjsip精巧,方便移植,嵌入式下应该是首选。不过视频频支持方面扩展起来比opal麻烦。个人感觉,对于windows开发者来说,pjsip最大的好处就是代码调试方便。整个工程一次编译通过,另外两个库还要找很多相关的资源。 

其他的一些协议栈也调试过,比如reSipphone,好象是这个名字,还有Yate,不过从快速开发角度看,都不太合适。 

现在搞sip开发的,一开始就是先找好协议栈。我开始时也是,满天找别人的例子,可惜的很,完整的Demo总是找不到。linphone,ekiga什么的,但庞大。对于刚开始做的,最好是一个精简的demo。后来找到pjsip下面的几个例子,慢慢地了解了sip的工作流程,当然少不了抓包工具和tcpdump。 

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

 

目录
相关文章
|
6月前
|
存储 编解码 网络协议
SIP极简教程
SIP运行在我们熟知的TCP和UDP协议之上,既可以使用TCP协议通信也可以通过UDP协议通信。SIP是对等协议,一个端既是客户端又是服务端。
467 1
SIP极简教程
|
存储 监控 算法
详解SIP服务器用来做什么的
什么是SIP服务器? SIP服务器是IPPBX的主要组成部分,主要处理网络中所有SIP呼叫的管理。SIP服务器也称为SIP代理或注册器。SIP是SIP服务器的主要组件,负责建立网络中所有的SIP电话通话。SIP服务器也叫SIP代理服务器或注册服务器。
2674 0
详解SIP服务器用来做什么的
|
3月前
|
安全 网络协议
SIP 协议的主要功能
【8月更文挑战第24天】
69 0
|
6月前
|
Java API Maven
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
460 0
|
安全 开发者
直播平台开发协议分析篇(一):会话初始化协议SIP
直播平台开发的SIP协议今天的分析就到这里,大家不难看出,SIP协议关乎着直播平台的实时通信和多方互动能否正常提供服务,确保用户能够以高质量和稳定性进行音视频交流,从而创造更丰富的直播体验。
直播平台开发协议分析篇(一):会话初始化协议SIP
SIP能否成为主流? 三种IP电话协议比较
SIP能否成为主流? 三种IP电话协议比较   随着IP电话应用的普及,建立终端设备和网关的可扩展网络已成为业界面临的一大技术挑战。目前IP电话技术已完美实现了对语音和传真信息的编码和传输,但仍需进一步发展为大型公司和服务提供平台的呼叫控制和地址管理技术。
1719 0
|
XML 存储 Java
freeswitch之SIP动态注册及动态配置拨号方案
本文档描述freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
2156 0
|
JavaScript 前端开发