在voip行业多年,知道很多优秀的库,pjproject精致轻量,是一个入门级的学习素材。为了记录自己的学习成果,准备写一系列关于pjproject的相关博客。pjproject的官方地址是pjproject官方网站
概述
PJSIP 开源库由一系列功能库所组成:
- PJLIB 是系统抽象层
- PPJLIB-UTIL 提供有用的工具函数
- PJNATH 解决NAT 穿越问题
- PJMEDIA 和PJMEDIA-CODEC 负责SDP 协商、媒体编码和媒体传输
- PJSIP 是核心SIP 协议栈
- PJSIP-SIMPLE 实现Presence个人信息和即时消息
- PJSIP-UA 提供SIP 用户代理库
- PJSUA 位于最高层,整合了下层模块的全部功能。
其实归结起来三大块,底层公共库pjlib,媒体栈pjmedia,sip协议栈pjsip。由于我的工作主要是音视频,因此分两个子系列,pjlib和pjmedia,pjsip暂不计划写博客笔记。
如果要开发一个软电话,有两种方法。第一种直接调用PJSUA-LIB的API,里面封装了sip和media,这种开发方式快速不灵活,其中示例代码pjproject-2.8\pjsip-apps\src\samples\simple_pjsua.c使用最高层的API,代码量很少。第二种选择在应用程序分别调用pjmedia和pjsip的API,这种方式灵活,也是比较主流的开发方法。示例代码pjproject-2.8\pjsip-apps\src\samples\simpleua.c使用比较底层的API,代码量相对较大,需要自己创建pjsip和pjmedia相关对象。
下面开始在ubuntu x64上编译运行pjproject
预编译
https://trac.pjsip.org/repos/wiki/Getting-Started/Build-Preparation
编译代码之前,需要创建自定义配置文件pjlib/include/pj/config_site.h,对于基于Makefile的编译系统是可以由Makefile自动创建的,但是对于如Windows的VS,需要手工创建。为什么需要创建自定义配置文件,因为受版本控制的配置文件在更新时容易被覆盖。自定义配置文件可以参考pjlib/include/config_site_sample.h
编译
https://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf
./configure --prefix=/home/hyq/workspace/out --enable-shared --disable-static > hyq_configure.txt
make dep
make
make install
示例路径
https://trac.pjsip.org/repos/wiki/Getting-Started/Running-Applications
pjsua在pjsip-apps/bin
samples在在pjsip-apps/bin/samples
pjlib-test
pjmedia-test
pjsip-test
运行示例
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hyq/workspace/out/lib
make pjlib-test可以测试pjlib,同理可运行其它模块的测试,详细看Makefile就可以知道有哪些模块。