GB28181作为安防领域的重要协议,很多嵌入式移动端需要实现GB28181信令层和RTP媒体传输层的信令;当然如果是自己从头开始撸信令,所有功能信令的解析和答复会花掉很长的一个开发周期;聪明的同学一般会考虑现有的开源项目或者已开发好的调试代码作为基础,进行上层逻辑的开发。
开源项目不难找,关键在于移植;下面介绍一款开源sip库的arm移植的步骤,希望给你今后的开发起到一定的启发作用。
我们拿eXosip2-5.2.0为例,首先从他的官网获取到他的源代码,这个工程是由纯C语言构建而成,所以在移植时会相对简单一些,只需要考虑到他的交叉编译工具链的替换就OK了。
http://ftp.twaren.net/Unix/NonGNU//osip/
http://ftp.yzu.edu.tw/nongnu/exosip/
首先从Osip和eXosip2的源码地址下载好源码,创建一个depends目录,并且将下载好的libeXosip2-5.2.0.tar.gz 和 libosip2-5.2.0.tar.gz 放入depends目录;然后将你的交叉编译工具链放到系统路径并且export声明一下当前路径可调用;设置之后输入交叉编译工具链的全名试一下能不能在当前路径进行调用:arm-augentix-linux-gnueabi-gcc arm-augentix-linux-gnueabi-g++
好啦,下面就是福利时间,给出你一个编译脚本直接运行脚本就可以啦。记得运行目录为你的depends上级目录,
#!/bin/bash
WORKSPACE=`pwd`
cd $WORKSPACE/depends
VERSION=5.2.0
# libosip2
tar xvf libosip2-$VERSION.tar.gz
cd libosip2-$VERSION
./configure --prefix=$WORKSPACE --host=arm-augentix-linux-gnueabi CC=arm-augentix-linux-gnueabi-gcc CXX=arm-augentix-linux-gnueabi-g++
make install
cd $WORKSPACE/depends
rm -rf libosip2-$VERSION
# libexosip2
tar xvf libeXosip2-$VERSION.tar.gz
cd libeXosip2-$VERSION
./configure --prefix=$WORKSPACE LDFLAGS="-L$WORKSPACE/lib" CFLAGS="-L$WORKSPACE/include" --host=arm-augentix-linux-gnueabi CC=arm-augentix-linux-gnueabi-gcc CXX=arm-augentix-linux-gnueabi-g++
make install
cd $WORKSPACE/depends
rm -rf libeXosip2-$VERSION
# rm unused files
cd $WORKSPACE
运行脚本过后,你会在当前目录获得include lib文件夹,这两个文件夹里面的库和头文件就已经变成你arm板子可识别的库文件了,后面就可以进行调用库函数来实现复杂的GB28181信令交互咯。但是原生的eXosip2和osip2的库没有一些信令的关键字,对于GB28181特有字段无法做出回复很可能出现段错误;
如果你想要修改之后的GB28181信令库和流媒体库的话可以看一下下面的信令:
ACK sip:00000000001310000001@122.193.199.27:49298 SIP/2.0
Via: SIP/2.0/UDP 49.7.197.1:8883;branch=z9hG4bK1623.0a984467.4
Via: SIP/2.0/UDP 10.12.21.157:37110;received=49.7.199.168;rport=37110;branch=z9hG4bK.JqaHgN4c4chQZmvO
Max-Forwards: 69
From: "GB28181-client" <sip:34020000002000000001@49.7.197.1>;tag=EZeCq7L6
To: <sip:00000000001310000001@49.7.197.1>;tag=1143138714
Call-ID: PbV2AgnkOjmhdqfJ
CSeq: 48358 ACK
Content-Length: 0
User-Agent: 17625929770
可以提供GB28181整套信令层,媒体封装层源码,Cmake工程可移植编译,如果你可以提供GB28181公网服务器,还可以进行测试推流;省去你的开发时间,合作共赢。