PJSIP开源库详解

本文详细介绍了PJSIP开源库,包括其编译安装、组织架构、核心模块如SIP协议栈和媒体流处理。PJSIP包含了SIP、SDP、RTP等协议,并提供了高层抽象API,方便在各种平台包括嵌入式设备上实现多媒体通信。文章还阐述了如何基于PJSIP开发VOIP程序,涉及模块初始化、媒体端口和传输层的设置等关键步骤。
摘要由CSDN通过智能技术生成

PJSIP是一个包含了SIP、SDP、RTP、RTCP、STUN、ICE等协议实现的开源库。它把基于信令协议SIP的多媒体框架和NAT穿透功能整合成高层次、抽象的多媒体通信API,这套API能够很容易的一直到各种构架中,不管是桌面计算机,还是嵌入式设备等。

一,PJSIP的编译与安装

    PJSIP的下载地址 :

    http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2

   生成makefile

./configure

   编译与安装

make && make dep && make install

    注意,如果使用老版本的gcc编译pjsip-2.6可能出现错误,此时或升级gcc或在./configure的时候disable某些模块。

二、PJSIP的组织架构介绍

    PJSIP开源库中主要包含两部分,一部分是SIP协议栈(SIP消息处理),另一部分媒体流处理模块(RTP包的处理)。

    SIP协议栈模块

    SIP协议栈这个模块,开源库由底层往上层做了各个层次的封装。

    pjlib是最底层的,最基础的库,它实现的是平台抽象与框架(数据结构、内存分配、文件I/O、线程、线程同步等),是SIP协议栈的基石。其他所有与SIP相关的模块都是基于PJLIB来实现的。

    pjlib-util则是封装了一些常用的算法,例如MD5、CRC32等,除此之外封装了一些涉及到字符串、文件格式解析操作的API,例如XML格式解析。

    pjsip-core则是SIP协议栈的核心,在该库中,包含了三个非常重要的模块,分别是SIP endpoint、SIP transaction module、SIP dialog module、transport layer。后续会着重介绍前三个模块。

    pjsip-simple则是SIP事件与出席框架,如果你程序中要实现出席制定,则该库是必备的。

    pjsip-ua是INVITE会话的高层抽象,使用该套API比较容易创建一个SIP会话。此外该库还实现了SIP client的注册API。

    pjsua是PJSIP开源库中能够使用到的最高层次抽象API,该库是基于pjsip-ua及以下库做了高层次的分装。

 

    基于上图,SIP endpoint是整个协议栈模块的核心,一般来说,一个进程内只能创建一个SIP endpoint。因此SIP endpoint是基于PJSIP开发的应用程序内所有SIP objects的管理与拥有者。根据官方文档的描述,SIP endpoint主要承担了一下角色:

  • 为所有的SIP对象管理内存池的分配与释放(在基于pjsip的应用程序中,动态内存的分配是在内存池基础上进行的)
  • 接收来自于传输层的消息,并将消息分配到上层,这里的上层指的是图中的SIP transa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值