国标28181:libosip2&libeXosip2编译使用

1059 篇文章 274 订阅

libosip2与libeXosip2

libosip2

  • GNU libosip2库是是SIP - rfc3261的一个实现。该库旨在为多媒体和电信软件开发人员提供一个简单而强大的接口,以便在其应用程序中启动和控制基于SIP的会话
  • oSIP是跨平台的。

libeXosip2

  • libosip2主要与·libeXosip2库一起使用,后者为用户代理实现提供了更简单的API。

    • eXosip2不是GNU项目的一部分。
    • 该协议主要用于VoIP电话应用程序(端点或会议服务器),但对于希望建立会话(如多人游戏)的任何应用程序也可能有用。
  • eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。使用sip 协议建立多媒体会话是一个复杂的过程,exosip 库开发的目的在于隐藏这种复杂性。正如它的名称所表示的,eXosip2 - the eXtended osip Library,它扩展了osip 库,实现了一个简单的高层API。通过使用exosip,我们可以避免直接使用osip 带来的困难。需要注意,exosip 并不是对osip 的简单封装包裹,而是扩展。Osip 专注于sip 消息的解析,事务状态机的实现,而exosip 则基于osip 实现了call、options、register、publish 等更倾向于功能性的接口。当然,这些实现都是依赖于底层osip 库已有的功能的。两者区别

    • osip:不带传输层(socket自己管理) exosip带传输层(socket协议栈管理)
    • osip:无SSL exosip:有SSL
    • osip:只提供线程函数封装(让用户自己决定)exosip运行时直接带线程(默认有,直接提供会话的状态机的运行线程_eXosip_thread)
  • osip/eXosip已经在多家SIPit进行了测试,并验证了与大多数供应商的合规性。

下载

这里有个问题,从4.0.0版本开始,API接口函数和之前有一些改动。我这里下载的是5.3.0

  • libexosip2-5.3.0.tar.gz
  • libosip2-5.3.0.tar.gz

编译

将上面下载的源码包解压后加入工程

当前工程目录如下:

在这里插入图片描述
其余部分为RTP对接,具体可以参考C/C++编程:GB28010对接之jrtplib从编译到使用,不过不看前文也没有影响

编写脚本

我们在export中再加入两个脚本,用来编译libosip2和libexosip2
在这里插入图片描述
build_osip.sh内容如下:

#!/bin/bash
currentPath=$(pwd)

libPath=$(pwd)/../libosip2-5.3.0

if [ -d "./libosip" ]; then
    rm -rf libosip
fi
mkdir libosip
cd libosip
installPath=$(pwd)

cd ${libPath}
./configure --prefix=${installPath}
make
make install
cd ${currentPath}

# 执行make时遇到问题,找了篇帖子解决了,原因不详细  // TODO 研究
# aclocal-1.14: command not found
# autoreconf -ivf


build_exosip.sh内容如下:

#!/bin/bash
currentPath=$(pwd)

libPath=$(pwd)/../libexosip2-5.3.0

if [ -d "./libexosip" ]; then
    rm -rf libexosip
fi
mkdir libexosip
cd libexosip
installPath=$(pwd)


export PKG_CONFIG_PATH=/home/oceanstar/CLionProjects/jrtp_test/lib/export/libosip/lib/pkgconfig:$PKG_CONFIG_PATH
# export PKG_CONFIG_PATH=$(pwd)/openssl/openssl-1.0.2t/build/lib/pkgconfig:$PKG_CONFIG_PATH
echo ${PKG_CONFIG_PATH}

#
#export C_INCLUDE_PATH=$(pwd)/libosip/include:$C_INCLUDE_PATH
#echo $C_INCLUDE_PATH

cd ${libPath}
./configure --prefix=${installPath}
make
make install
cd ${currentPath}

# 执行make时遇到问题,找了篇帖子解决了,原因不详细  // TODO 研究
# aclocal-1.14: command not found
# autoreconf -ivf

开始编译

cd export
chmod 777 *.sh
./build_osip.sh
./build_exosip.sh

生成的目录如下:
在这里插入图片描述

测试程序

在这里插入图片描述
最外层的CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(jrtp_test)

set(CMAKE_CXX_STANDARD 14)
add_subdirectory (src)

最下面的CMakeLists.txt

include_directories(
        ${CMAKE_SOURCE_DIR}/include
        ${CMAKE_SOURCE_DIR}/lib/export/libosip/include
        ${CMAKE_SOURCE_DIR}/lib/export/libexosip/include

)

link_directories(
        ${CMAKE_SOURCE_DIR}/lib/export/libosip/lib
        ${CMAKE_SOURCE_DIR}/lib/export/libexosip/lib
)

add_definitions("-Wall -g")
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME}  ${SRC_LIST} )
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)


target_link_libraries( ${PROJECT_NAME}  -losipparser2 -losip2  -leXosip2  )


在使用eXosip2前你需要初始化eXosip环境和libeXosip2.so库,这一步必须在所有使用之前完成。

#include "stdio.h"
#include <eXosip2/eXosip.h>
#include <iostream>
#include <rpc/types.h>

using namespace std;


int main(void)
{
    int listenport = 8888;
    //库处理结果
    int result = OSIP_SUCCESS;
    //初始化库
    eXosip_t *ctx = eXosip_malloc();
    result = eXosip_init(ctx);
    if (OSIP_SUCCESS != result)
    {
        printf("Can't initialize eXosip!\n");
        return 1;
    }
    printf("eXosip_init successfully!\n");
    //监听
    result = eXosip_listen_addr(ctx, IPPROTO_UDP,NULL,listenport,AF_INET,0);
    if (OSIP_SUCCESS != result){
        printf("eXosip_listen_addr failure.\n");
        return 1;
    }
    printf("eXosip_listen_addr successfully.\n");
    // 结束
    eXosip_quit(ctx);
    ctx = nullptr;

    return 0;
}


初始化完成之后,用户就可以发送SIP消息和等待接受SIP事件了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值