在Linux中编译jrtplib
1.jrtplib 是什么
jrtplib是一个基于C++、面向对象的RTP封装库, jrtplib支持定义于RFC3550中的RTP协议,它使得发送和接收RTP报文变得异常简单,用户不用担心SSRC冲突,也不用考虑如何传输RTCP数据,因为RTCP功能完全在内部实现,不需用户手动操作。当发送RTP报文时,用户只需简单的给发送函数提供负载数据;当接收数据时,jrtplib提供了访问传入的RTP和RTCP数据的接口。
2.下载地址(3.11.1最新版本)
在官方网站下载最新的jrtplib、jthreadlib和cmake源码,如果主机上没有安装过cmake,请先下载安装最新的cmake版本,最新的jrtplib、jthreadlib需要通过cmake来安装。我们可以用cmake -version来检查一下当前机器上cmake的版本;
(1)http://research.edm.uhasselt.be/jori/page/CS/Jrtplib.html (下载不同压缩包的jrtplib源码)
Several package formats are available:
jrtplib-3.11.1.tar.bz2
jrtplib-3.11.1.tar.gz
jrtplib-3.11.1.zip
(2)http://research.edm.uhasselt.be/jori/page/CS/Jthread.html (下载对应jrtpl版本的jthread源码)
如The library itself:
In '.tar.gz' format: jthread-1.3.3.tar.gz
In '.tar.bz2' format: jthread-1.3.3.tar.bz2
In '.zip' format: jthread-1.3.3.zip
3.编译说明
jrtp有两种数据接收方式:
第一种是用jthread库提供的线程自动在后台执行对数据的接收。
第二种是用户自己调用RTPSession中的Poll方法。
如果采取第一种方法则要安装jthread库,则安装 jthread,而且 jthread-1.3.3必须先与jrtp-3.11.1的安装。因为在jrtp-3.11.1的configure中,会查找系统是否有编译了jthread库,
如果有,那么编译的jrtp库会开启对jthread的支持。因此如果先编译jrtp在编译jthread,编译出来的jrtp是没有开启对jthread的支持的。如果采用第二种方法,那么可以不用编译jthread库,而直接编译jrtp库。
4.编译过程
(1)编译jthread
将下载的压缩包解压后进入jthread-1.3.3目录中,修改该目录下的CMakeLists.txt;
cmake_minimum_required(VERSION 3.0)
project(jthread)
set(VERSION 1.3.3)
#************************************star add******************************
SET(CMAKE_SYSTEM_NAME Linux)
#Setting up the C compiler
SET(CMAKE_C_COMPILER "gcc")
#Setting up the C++ compiler
SET(CMAKE_CXX_COMPILER "g++")
#set install path 该目录是自己设定的目录
set(CMAKE_INSTALL_PREFIX "/home/heyan/RTP/testrtp/rtpcomplie")
#************************************end add******************************
include(CheckCXXSourceCompiles)
set (_DEFAULT_LIBRARY_INSTALL_DIR lib)
if (EXISTS "${CMAKE_INSTALL_PREFIX}/lib32/" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
set (_DEFAULT_LIBRARY_INSTALL_DIR lib32)
elseif (EXISTS "${CMAKE_INSTALL_PREFIX}/lib64/" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set (_DEFAULT_LIBRARY_INSTALL_DIR lib64)
endif ()
set(LIBRARY_INSTALL_DIR "${_DEFAULT_LIBRARY_INSTALL_DIR}" CACHE PATH "Library installation directory")
if(NOT IS_ABSOLUTE "${LIBRARY_INSTALL_DIR}")
set(LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR}")
endif()
find_package(Threads)
if (NOT CMAKE_USE_WIN32_THREADS_INIT)
if (NOT CMAKE_USE_PTHREADS_INIT)
message(FATAL_ERROR "Can find neither pthread support nor Win32 thread support")
endif (NOT CMAKE_USE_PTHREADS_INIT)
endif (NOT CMAKE_USE_WIN32_THREADS_INIT)
add_subdirectory(src) 修改之后保存,分别输入如下的命令:
cmake CMakeLists.txt
make
make install
之后我们可以在设置的安装路径下看到/home/heyan/RTP/testrtp/rtpcomplie /include/jthread里面是jthread的头文件,/home/heyan/RTP/testrtp/rtpcomplie/bin
包含了jthread的相关库;
(2)编译jrtplib
解压安装包之后,进入jrtplib-3.11.1目录,同样修改该目录下的CMakeLists.txt
修改之后保存,分别输入如下的命令:
cmake CMakeLists.txt
make
make install
之后我们可以在设置的安装路径下看到/home/heyan/RTP/testrtp/rtpcomplie/include/ jrtplib3里面是jrtplib3相关的头文件,/home/heyan/RTP/testrtp/rtpcomplie/bin里面是包含了jrtplib3的相关库;
5.测试example
在jrtplib-3.11.1/examples里面有测试代码
测试的结果如下: