在voip行业多年,知道很多优秀的库,pjproject精致轻量,是一个入门级的学习素材。为了记录自己的学习成果,准备写一系列关于pjproject的相关博客。pjproject的官方地址是pjproject官方网站
概述
PJSIP 开源库由一系列功能库所组成:
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就可以知道有哪些模块。
-
cmake_minimum_required(VERSION 3.5) #网关程序 set(PROJ_NAME afpsip) set(TOPDIR ../../) #设置环境变量,可以使用QT打开cmakelists.txt导入工程 set(ENV{SYSROOT_PATH} "/usr/local/oecore-x86_64/sysroots") # set(CMAKE_C_FLAGS "-L/home/leehom/devlib/pjsip/ -lasound") project(${PROJ_NAME} C CXX) # 添加 .c .cpp 文件 aux_source_directory(./afpsip DIRSRCS) # 设置链接库搜索目录,必须在add_executable之前 # 指定头文件搜索路径 INCLUDE_DIRECTORIES( /home/leehom/pjout/include ) LINK_DIRECTORIES( /home/leehom/pjout/lib ) link_libraries( /home/leehom/pjout/lib/libpjsua2-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjsua-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjsip-ua-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjsip-simple-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjsip-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjmedia-codec-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjmedia-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjmedia-videodev-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjmedia-audiodev-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjmedia-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjnath-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpjlib-util-riscv64-linux-gnu.a /home/leehom/pjout/lib/libpj-riscv64-linux-gnu.a /home/leehom/pjout/lib/libsrtp-riscv64-linux-gnu.a /home/leehom/pjout/lib/libresample-riscv64-linux-gnu.a /home/leehom/pjout/lib/libspeex-riscv64-linux-gnu.a /home/leehom/pjout/lib/libilbccodec-riscv64-linux-gnu.a /home/leehom/pjout/lib/libg7221codec-riscv64-linux-gnu.a ) # 宏定义 add_definitions( -DCONFIG_USING_TLS -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -DPJ_AUTOCONF=1 ) # 添加根目录文件 set(ROOTSRCS simple_pjsua.c ) add_executable(${PROJ_NAME} ${DIRSRCS} ${ROOTSRCS}) list(APPEND TOOLCHAIN_LIBS_LIST pthread rt m asound ) include(${TOPDIR}/project.cmake) #安装d1 toolchain,编译前加入环境变量 #. /usr/local/oecore-x86_64/environment-setup-riscv64-oe-linux #make
- 文章2295
- 用户1336
- 访客10160089
成功是你跌到谷底时反弹的高度。