我的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-25 19:50:08

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

物联网的全栈开发之路

本文由嵌入式企鹅圈原创团队成员-华南师范大学物联网创新中心黄鑫执笔. 两年前我还一直专注在android系统定制领域的研究,对物联网关注比较少,尽管我个人对智能家居的概念和场景体验也比较熟悉.真正引起我注意的是有一次在车上,听到电视广播说打开蓝牙,用手机摇一摇就可以摇到红包,我就觉得这个场景很棒,然后就知道了ibeacon和微信摇一摇周边,知道了微信硬件平台和物联网的发展已经深入渗透到我们的生活了.尽管我觉得自己进入物联网不算早,但是考虑到传统电子行业都有升级到物联的需求,加上自身在嵌入式和AP

高效Web前端开发之路:YUI 3.15 PDF扫描版

JavaScript是一种最初由Netscape的LiveScript发展而来的面向对象的Web脚本语言,被ECMA国际定义为国际化标准--ECMAScript.JavaScript具有使用局限性.在Web方面,其必须与各种DOM技术结合才能发挥作用.因此,一些具有开拓创新精神的开发者们便开发出了各种丰富的第三方框架,通过第三方的支持代码实现浏览器兼容性的统一.代码的简化以及功能的增强. <高效Web前端开发之路:YUI 3.15>作者便是在此背景下,以国外最优秀的JavaScript框架之一

IOS中APP开发之路

现在移动APP正式急速上升的趋势,然而占据着主要地位的还是这2大巨无霸:谷歌的Android与苹果的ios系统.那么,作为 程序员了解一下APP的开发流程思路是有所必要的,特别是正流行火热的APP市场.开发IOS的APP学习思路,翻译 了一个很牛B的网 络文章,并且大致的总结了一些IOS开发APP的流程思路,它不仅仅是初学者的导航灯,还是ios开发热衷粉丝的垫脚石.iOS系统以 及iPhone的出来都要感谢ios鼻祖---乔布斯,一个完美主义者,从如此优秀的iOS系统和iPhone就可以看出来.

【开源专访】Sea.js创始人玉伯的前端开发之路

摘要:玉伯,淘宝前端类库 KISSY.前端模块化开发框架SeaJS.前端基础类库Arale的创始人.本期[开源专访]我们邀请玉伯来为我们分享一些关于前端框架.前端开发的那些事,以及前端大牛是如何炼成的. 在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框架.本期[开源专访]我们邀请到了国内前端大牛玉伯(@玉伯也叫射雕),请他为我们分享一些关于前端框

android开发之路09(浅谈SQLite数据库01)

1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保 SQLite的二进制文件存在即可开始创建.连接和使用数据库. 对于SDK来讲,已经内置了SQLite的程序,因此我们不需要在SQLite官网上下载.一般数据库采用的都是静态的数据类 型,而我们的SQLite数据库采用的是动态数据库,会

Sea.js创始人玉伯的前端开发之路

玉伯,淘宝前端类库 KISSY.前端模块化开发框架SeaJS.前端基础类库Arale的创始人.本期[开源专访]我们邀请玉伯来为我们分享一些关于前端框架.前端开发的那些事,以及前端大牛是如何炼成的. 在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框架.本期[开源专访]我们邀请到了国内前端大牛玉伯(@玉伯也叫射雕),请他为我们分享一些关于前端框架.前

挨踢部落之机缘所致 开发之路

态度决定高度,细节决定成败.兴趣是最好的学习,遥想当年,老曹就是靠兴趣完美的转型做了开发,从此便开始他的程序猿生涯. 以匠心 铸非凡 男人四十而不惑.如今40多岁的老曹,是个十分理智和清醒的半吊子全栈工匠,在代码的世界里一敲就是20多年.对于自己,他更倾向于拿亲身经历去感化身边的程序猿,分享他这大半辈子程序猿生涯中的点点滴滴. 第一次看到他的照片,一副永不服输的样子出现在脑海中.老曹曾经流浪过几家世界500强,投身过几个创业团队,出过几本过时技术的小册子,涂鸦过几篇文字,署名了几个国内外专利,目

python开发之路Day17-算法设计(冒泡排序、选择排序、插入排序、二叉树)

s12-20160514-day17 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin

android开发之路01

一.android系统被分为4个层次:1.最下层的是linux核心,包括多个驱动程序,提供了操作系统应该具备的核心功能:2.在linux核心之上,包括两个部分,一部分是Android Runtime(包括Dalvik虚拟机,和Core Libraries相当于java中的jdk)和LIBRARIES:3.是Application Framework这一层,该层包括多个Android开发框架(即各种管理器,如资源管理器等):4.Aplication层(该层既是我们工作的领域app)二.基于组件的应