我的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基本协议,然后自己改造一个,或完全写一个,可能效果更好。

 

时间: 2024-10-27 19:16:58

我的SIP开发之路的相关文章

个人站长的自学网站开发之路

接触电脑是从1999年开始,那时我们学校开了电脑科,全是486的机器,从哪里在接触到了wt,五笔,dos,wps等软件.可以说是有个入门吧. 2000年,师范毕业,可是那一年起师范不包分配了,于是天天在家里玩,很郁闷的.走在大街上看到电脑培训班上面招网页制作学习,抱着无聊,好奇的心情我就参加了,在里面学习了photoshop,frontpage这两款软件,记得当时花了我七八百大洋.唉仍然还记得叔叔当时听说又要交钱的眼神,唉.从此我就进入了网页制作的世界,记得当时用这两款软件制作了偶的第一个个人网

专访实战专家,揭秘iOS神奇开发之路

专访实战专家,揭秘iOS神奇开发之路 转自:http://www.ciitn.com/archive/5533.html 中国信息产业培训网主编专访业内知名实战专家.安博教育-中程在线金牌讲师关东升老师 时间:2012-03-29 10:59来源:未知 作者:xinglu点击: 164 次 在现今的移动互联网时代,苹果产品风靡全球.因此,相应的iOS开发也渐渐成为IT业界热门的职业方向.除了可以给开发人员带来高薪的职位,还能够为个人创造可以盈利的开发模式,对此,中国信息产业培训网主编专访业内知名

论Android产品高效开发之路

文/姚冬 通过对Android产业开发的简要分析,总结了Android系统开发中遇到的各种问题,从产品组合.需求管理.建模与重用.协同开发等角度分析和总结出能够加速Android系统开发并有效提高产品质量的方法和思路.最后在此基础上,提出了Android系统开发平台的解决方案,并结合整个产品生命周期,对Android系统开发中的各个环节加以表述. 经过多年的发展,Android已不是最初设想的仅仅作为移动设备的平台,它提供了一个跨设备的通用结构,并且开始进入其他数字消费设备领域,诸如平板电脑.移

移动应用开发之路

内置的移动应用开发昂贵,而且很多时候都是一种非常悠久的项目,大部分是应用在其构建的具体的移动设备和操作系统上.但是内置的移动应用,完全可以利用内置的设备性能,比如指南针.相机和GPS.而且通常提供了比用HTML5 Web语言编写应用更佳的性能. 另一方面,移动应用开发要比在基于Web的Html5.CSS3和JavaScript平台更加快速更高效.此外,它们还可以跨多个移动平台工作.提供一次的编写,就可以在任何地方运行的移动应用.但是通常缺少内置应用性能,而且还不能访问所有设备内的性能. 替代内置

php开发之cookie

cookie是一种在浏览器远端存储数据并以此来跟踪和识别用户的机制.简单的说,cookie是web服务器暂时存储在用户硬盘上的一个文件夹,并随时被web浏览器读取.当用户再次访问web网站的时候,网站通过获取cookie记录用户的特定访问信息(如:上次访问的位置,花费的时间,用户名和密码) ,从而迅速做出相应,比如不需要用户输入密码就可以登录. 文本文件的格式如下:用户名@网站地址[数字].txtcookie 的功能主要有以下几个方面: 1,记录访客的某些信息.如可以利用cookie记录用户的访

Eclipse插件开发之FindBugs插件

问题提出: 当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价就相当高了. 解决方法: 现在有很多Java代码分析工具,FindBugs中开源项目当中的一个,它可以帮你找到代码中隐藏的一些错误,提升你的代码能力与系统安全可靠性. 安装 JDK:1.5.0 从http://java.sun.com上去下载安装 Eclipse:3.1.1 从http://www.

ASP.NET移动开发之SelectionList控件

asp.net|select|控件 正如前面提及的那样,SelectionList控件适用于呈现较短列表的数据项.尽管它不具备对长列表的分页显示功能,但是它的呈现形式是丰富多样的.只要设备浏览器支持,SelectionList控件可以以下拉列表.单项按钮.多选按钮和复选框等众多形式存在. SelectionList控件的列表中只有一个可视的数据项,其它的数据项只能以隐藏值的形式与可视的数据项进行关联.要在服务器控件语法中指定隐藏值,可以在<Item>元素中使用Value属性,并且将Value属

C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处

我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1.Data2.Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed Properties中定义我们所需要的信息,需要各种属性的值都可以拿到,那么Data1.Data2.Data3对我们来说,就用处不大,但有的情况下,我们使用它进行一些操作却是非常方便的. 首先我们介绍下,这几个属性是什么东西,Data1.Data2.Data3是Shape的内置属性,不需要额外定义,而

流媒体程序开发之H264解码器移植到OPhone

1.移植目标 将H.264解码器移植到OPhone操作系统之上(NDK+C),并写一个测试程序(OPhoneSDK+Java)测试解码库是否正常运行,下面是解码时的截图: 开发之H264解码器移植到OPhone-网络流媒体解码器"> OPhone的模拟器和Mobile的模拟器一样是模拟ARM指令的,不像Symbian模拟器一样执行的是本地代码,所以在模拟器上模拟出来的效率会比真实手机上的效率要低,之前这款解码器已经优化到在nokia 6600(相当低端的一款手机,CPU主频才120Hz)上