开源的SIP协议栈 PJSIP

openkk 12年前
     <p>PJSIP是一个开放源代码的SIP协议栈。它支持多种SIP的扩展功能,目前可说算是最流行的sip协议栈之一了。</p>    <p>下面列出其重要的几种优点:</p>    <p>1)代码层次非常清晰,从低级到高级都提供了很方便的接口供开发;</p>    <p>2)提供相当多的测试用例和一个基于pjsip开发的命令行UA程序供开发人员参考;<br /> 3).高度的可移殖性 <br /> 只需简单的编译一次,它能够在多种平台上运行(所有Windows 系统列, Windows Mobile, Linux, 所有Unix 系列, MacOS X, RTEMS, Symbian OS, 等等)。 <br /> 4).极小的内存需求 <br /> <br /> 官方宣称编译后的库,完全实现SIP的功能只需要150K的内存空间,这使得PJISPi不仅仅是嵌入开发的理想平台,并且实用于那些内存运行于极小内存平台的应用,这也意味着极小的用户下载时间。</p>    <p>5).高效的性能 <br /> 这意味着极小的CPU运算需求下能同时实现更多的通话。 <br /> 6).支持多种SIP功能及扩展功能 <br /> 多种SIP功能和扩展功能,例如多人会话,事件驱动框架,会话控制(presence),即时信息,电话传输,等等在库文件里得以实现。<br /> 7).丰富的文档资料 <br /> 对于软件开发人员来说,文档资料从来都是多多益善,因此我们要求PJSIP开发人员提供了大量的极有价值的文档资料供大家使用</p>    <p>其实说是PJSIP不是特别贴切,这个库实际上是几个部分组成的.<br />  1).PJSIP - Open Source SIP Stack[开源的SIP协议栈]<br />  <br />  2).PJMEDIA - Open Source Media Stack[开源的媒体栈]<br />  <br />  3).PJNATH - Open Source NAT Traversal Helper Library[开源的NAT-T辅助库]<br />  <br />  4).PJLIB-UTIL - Auxiliary Library[辅助工具库]<br />  <br />  5).PJLIB - Ultra Portable Base Framework Library[基础框架库]</p>    <p>PJLIB简介</p>    <p> 要理解好PJSIP,就不得不先说说PJLIB,PJLIB算的上是这个库中最基础的库,正是这个<br /> 库的优美实现,才让PJSIP变得如此优越。<br />  <br />  PJLIB提供了一系列特征,这是我们下面分析的重点,涉及到:<br />  1).非动态内存分配[No Dynamic Memory Allocations]<br />   实现了内存池,获取内存是从与分配的内存池中获取,高性能程序多会自己构造内存池<br /> ,后面我们会解释该内存池的使用以及基本的原理。根据作者的比较,是常规的 malloc(<br /> )/free()函数的30倍。<br />   <br />  2).OS抽象[Operating System Abstraction]<br />   实现OS抽象的根本原因在与可移植性,毋庸置疑:).<br />   涉及到:<br />   a).线程[Threads.]<br />   b).线程本地存储[Thread Local Storage.]<br />   c).互斥[Mutexes.]<br />   d).信号灯[Semaphores.]<br />   e).原子变量[Atomic Variables.]<br />   f).临届区[Critical sections.]<br />   g).锁对象[Lock Objects.]<br />   h).事件对象[Event Object.]<br />   i).时间管理[Time Data Type and Manipulation.]<br />   j).高解析的时间戳[High Resolution Timestamp.]<br />   等等,这些我们后面分析代码时一一看来:)<br />   <br />  3).低层的网络相关IO[Low-Level Network I/O]<br />      这涉及到:<br />      a).Socket抽象[Socket Abstraction.]<br />      b).网络地址解析[Network Address Resolution.]<br />      c).实现针对Socket的select API[Socket select() API.]<br />      <br />  4).时间管理[Timer Management]<br />   这主要涉及到两个部分,一个时定时器的管理,还有就是时间解析的精度(举例说来,就是能精确到哪个时间等级,比如 POSIX sleep(),就只能以秒为单位,而使用select()则可以实现毫秒级别的计时) <br /> <br /> </p>    <p><strong>项目主页:</strong><a href="http://www.open-open.com/lib/view/home/1325148064593" target="_blank">http://www.open-open.com/lib/view/home/1325148064593</a></p>