http://blog.csdn.net/suer0101/article/details/7469439
经过对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的网上资料和官方文档都不是很多,还好它的结构还是很清晰的,多多研究代码 了。