開源的SIP協議棧 PJSIP

openkk 12年前發布 | 72K 次閱讀 SIP 網絡工具包

PJSIP是一個開放源代碼的SIP協議棧。它支持多種SIP的擴展功能,目前可說算是最流行的sip協議棧之一了。

下面列出其重要的幾種優點:

1)代碼層次非常清晰,從低級到高級都提供了很方便的接口供開發;

2)提供相當多的測試用例和一個基于pjsip開發的命令行UA程序供開發人員參考;
3).高度的可移殖性
只需簡單的編譯一次,它能夠在多種平臺上運行(所有Windows 系統列, Windows Mobile, Linux, 所有Unix 系列, MacOS X, RTEMS, Symbian OS, 等等)。
4).極小的內存需求

官方宣稱編譯后的庫,完全實現SIP的功能只需要150K的內存空間,這使得PJISPi不僅僅是嵌入開發的理想平臺,并且實用于那些內存運行于極小內存平臺的應用,這也意味著極小的用戶下載時間。

5).高效的性能
這意味著極小的CPU運算需求下能同時實現更多的通話。
6).支持多種SIP功能及擴展功能
多種SIP功能和擴展功能,例如多人會話,事件驅動框架,會話控制(presence),即時信息,電話傳輸,等等在庫文件里得以實現。
7).豐富的文檔資料
對于軟件開發人員來說,文檔資料從來都是多多益善,因此我們要求PJSIP開發人員提供了大量的極有價值的文檔資料供大家使用

其實說是PJSIP不是特別貼切,這個庫實際上是幾個部分組成的.
 1).PJSIP - Open Source SIP Stack[開源的SIP協議棧]
 
 2).PJMEDIA - Open Source Media Stack[開源的媒體棧]
 
 3).PJNATH - Open Source NAT Traversal Helper Library[開源的NAT-T輔助庫]
 
 4).PJLIB-UTIL - Auxiliary Library[輔助工具庫]
 
 5).PJLIB - Ultra Portable Base Framework Library[基礎框架庫]

PJLIB簡介

 要理解好PJSIP,就不得不先說說PJLIB,PJLIB算的上是這個庫中最基礎的庫,正是這個
庫的優美實現,才讓PJSIP變得如此優越。
 
 PJLIB提供了一系列特征,這是我們下面分析的重點,涉及到:
 1).非動態內存分配[No Dynamic Memory Allocations]
  實現了內存池,獲取內存是從與分配的內存池中獲取,高性能程序多會自己構造內存池
,后面我們會解釋該內存池的使用以及基本的原理。根據作者的比較,是常規的 malloc(
)/free()函數的30倍。
  
 2).OS抽象[Operating System Abstraction]
  實現OS抽象的根本原因在與可移植性,毋庸置疑:).
  涉及到:
  a).線程[Threads.]
  b).線程本地存儲[Thread Local Storage.]
  c).互斥[Mutexes.]
  d).信號燈[Semaphores.]
  e).原子變量[Atomic Variables.]
  f).臨屆區[Critical sections.]
  g).鎖對象[Lock Objects.]
  h).事件對象[Event Object.]
  i).時間管理[Time Data Type and Manipulation.]
  j).高解析的時間戳[High Resolution Timestamp.]
  等等,這些我們后面分析代碼時一一看來:)
  
 3).低層的網絡相關IO[Low-Level Network I/O]
     這涉及到:
     a).Socket抽象[Socket Abstraction.]
     b).網絡地址解析[Network Address Resolution.]
     c).實現針對Socket的select API[Socket select() API.]
    
 4).時間管理[Timer Management]
  這主要涉及到兩個部分,一個時定時器的管理,還有就是時間解析的精度(舉例說來,就是能精確到哪個時間等級,比如 POSIX sleep(),就只能以秒為單位,而使用select()則可以實現毫秒級別的計時)

項目主頁:http://www.baiduhome.net/lib/view/home/1325148064593

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!