pjproject开篇

Home / C++ MrLee 2023-8-4 1588

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就可以知道有哪些模块。


本文链接:https://www.it72.com/12731.htm

推荐阅读
最新回复 (1)
  • MrLee 2023-8-21
    引用 2
    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


返回