当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

PJSIP

开源的 SIP 协议栈
授权协议 GPLv2
开发语言 C/C++
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 国产
投 递 者 蔚和安
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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()则可以实现毫秒级别的计时) 

  • pjsip是开源的sip协议栈。包含以下模块: 模块名 描述 PJLIB 基本框架(framework)库 PJLIB-UTIL 辅助工具库(dns、http等) PJNATH NAT工具库(STUN、ICE) PJMEDIA 媒体栈 PJSIP SIP协议栈 接下来学习PJSIP模块,了解sip通话的流程。

  • 官方编译说明:http://trac.pjsip.org/repos/wiki/Getting-Started# 下面的编译采用默认配置,即config_site.h文件为空,其它配置可能需要安装其它SDK。 下载pjsip源码。http://www.pjsip.org/download.htm 下载安装DirectX SDK。http://www.microsoft.com/download/e

  • http://blog.sina.com.cn/s/blog_947c4a9f0101cvex.html 一、环境需求: iPhone应用推荐使用SDK 4.x,当然3.x也支持;iPad应用只支持SDK 3.2以上。 二、编译之前的准备工作: 1、下载pjsip源代码(可在此找到最新的) 2、或直接下载 pjproject-2.0-alpha2.tar.bz2 (mac os) pjprojec

  • pjsip是一个非常优秀的开源sip库。很好的封装了sip ,rtp ,nat 等voip中常用的协议。它具有以下的优点: 1.  代码编译后非常小,适合嵌入式的开发。 2.  跨平台。 支持  linux  windows  mac symbian android  blackberry10 等操作系统。 3.  高性能。 我们下载到pjsip的源码来看它分为这么几个部分。 1. pjlib  

  • 1、新建项目 -> 在 "pjproject-2.8" 根目录同级; 2、附加包含目录 "../../pjproject-2.8/pjsip/include/;../../pjproject-2.8/pjlib/include/;../../pjproject-2.8/pjlib-util/include/;../../pjproject-2.8/pjnath/include/" 3、链接器 ->

  • 编译pjsip: ./configure --enable-shared --prefix=$PWD/pj_install make install 编译uac: g++ -L…/pjproject/pj_install/lib/ -I…/pjproject/pj_install/include -I…/pjproject/pj_install/include/pjsip-simple/ main

  • PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP. 1.PJSIP库的主要特征: 1).极具移植性.(Extremely portable)    当前可支持平台包括:    * Win32/x86 (Win95/98/ME, NT/2000/XP/2003, mingw).    * arm, WinCE and Windows Mobile.    * Linux/x86, (u

  • 最近研究了下PJSIP这个强大的VOIP开源库,简单的来记录下遇到一些问题和解决思路,最后附上完整的工程代码供参考 功能: 1.实现用户的注册 2.实现收发短信 3.实现通话功能   踩的坑 1.默认的UDP的端口是5060这个需要改变,需要使用代理设置 2.发送短信编码格式乱码 需要进行转码 3.通话没有声音 是没有添加 媒体改变的回调函数   直接放上代码了 /* 2020年10月14日 10

  • 1、由于最新pjsip不支持高版本的ffmpeg,只能支持1.2.5以下的版本 ffmpeg 1.2.5的编译: http://www.ffmpeg.org/release/  下载 ./configure  --enable-shared --disable-static --enable-memalign-hack --enable-gpl --enable-libx264 2、pjsip库的

  •     一、安装一些必要的依赖库        apt-get install build-essential git-core checkinstall yasm texi2html libvorbis-dev libx11-dev libvpx-dev libxfixes-dev zlib1g-dev        apt-get install pkg-config netcat libnc

  • 实例化pjsua应用程序。 应用程序必须在调用任何其他函数之前调用这个函数,以确保底层库被正确初始化。一旦这个函数成功返回,应用程序必须在退出之前调用pjsua_destroy() PJ_DECL(pj_status_t) pjsua_create(void); 初始化pjsua应用程序 使用指定的设置初始化pjsua。所有的设置都是可选的,当没有指定配置时将使用默认值。 PJ_DECL(pj_

  • http://blog.csdn.net/tomken_zhang/article/details/6906892 pjsip协议研究 http://divingdragon.blog.51cto.com/3286610/620523 网络视频监控研究 http://www1.power.net.cn/  现在我帮他们做的网站是http://picture1.power.net.cn/

  • 一:mac环境android编译(ndk记得装好,并配制好环境变量.bash_profile,我用的是ndk9)    1:下载源码:http://www.pjsip.org/download.htm     在/pjproject-2.4.52/pjlib/include/pj目录下新建config_site.h 文件 /* Activate Android specific settings

  • 官网编译指导:https://trac.pjsip.org/repos/wiki/Getting-Started/Android 一、环境资源准备 1)、Linux系统编译环境 2)、SDK 使用的版本是:android-sdk_r24.4.1-linux.tgz 下载链接:http://tools.android-studio.org/index.php/sdk 3)、NDK 使用版本:andr

  • 会议桥 自定义媒体端口     在《pjSIP注册呼叫流程简介》中介绍了pjSIP注册与呼叫的基本流程,本节对自定义媒体流与端口做下介绍。 会议桥 pjSIP中通过会议桥(Conference)把媒体流(Stream)与抽象音频设备端口(Sound Device Port)连接起来(并负责各路媒体的混流);他们之间数据传递都是通过pjmedia_port接口来实现的。若要收发自定义的媒体数据,只需

  • http://jykenan.iteye.com/blog/1140807

 相关资料
  • 版权及开源协议 SpeedPHP框架是遵循BSD许可证发布的开源软件 BSD许可证参考 http://www.opensource.org/licenses/bsd-license.php(英文) 维基中文对BSD许可证的解释:http://zh.wikipedia.org/wiki/BSD许可证 使用限制(通俗版) 简单而言,SpeedPHP框架可用于商业用途以及自由使用(修改,再发布),仅有以

  • 主要内容:如何选择开源协议开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。 开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么。 开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。 对于

  • 《HeyThings IoT服务平台开发者服务协议》(以下简称“本协议”)为广东欢太科技有限公司(以下简称“欢太”)与所有在HeyThings IoT服务平台(以下简称“服务平台”)上发布产品的开发者(以下简称“开发者”)就产品发布所签订的协议。 请开发者认真阅读、充分理解本协议各条款,特别是免除或者限制欢太及其关联公司责任的条款,对开发者的权利限制条款,争议解决和法律适用条款等,该类条款将以加粗

  • 开发人员协议 请务必认真阅读和理解本《360浏览器应用开放平台开发人员协议》(以下简称"协议")中规定的所有权利和限制。在您参与360浏览器应用开放平台并使用应用中心分发产品时,您首先应接受本《协议》条款,如果您不接受本协议或违反了协议,奇虎360有权采取以下措施:驳回应用审核、下线产品、删除帐户、拒绝访问等。 本《协议》是开发人员与北京奇虎科技有限公司(下称"奇虎360")之间关于利用360浏览

  • Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议。 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他们。 本地协议 最基本的就是 本地协议(Local protocol) ,其中的远程版本库就是硬盘内的另一个目录。 这常见于团队每一个成员都对一个共享的文件系统(例如一个挂载的 NFS)拥有访问权,或

  • 协议为方法、属性、以及其他特定的任务需求或功能定义蓝图。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。 除了指定遵循类型必须实现的要求外,你可以扩展一个协议以实现其中的一些需求或实现一个符合类型的可以利用的附加功能。 协议的语法 定义协议的方式与类、结构体、枚举类型非常相似: protocol SomeProtocol { //