SIP UserAgent (B2BUA client)——libosip2 libeXosip2
1. libosip2 libeXosip2
http://www.antisip.com/download/exosip2/
Features:
--------
eXosip2 has support for:
* registrations. (REGISTER)
* call initiation and modification. (INVITE, re-INVITE)
* other methods within calls (INFO, OPTIONS, UPDATE)
* call transfer. (REFER)
* reliability for provisionnal response. (PRACK)
* sip event package. (SUBSCRIBE/NOTIFY)
* event state publication. (PUBLISH)
* instant messaging. (MESSAGE)
* ...
eXosip2 does not contain:
* RTP.
* audio interface
* sdp negotiation.
* ...
2. Build libexosip2-5.1.0.tar.gz + libosip2-5.1.0.tar.gz
ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/libssl.so
ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/libcrypto.so
_install.sh
#compiler setup
if [[ $1 = 'arm' ]]; then
compiler=`CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++`
host=arm-linux-gnueabihf
elif [[ $1 = 'himix100' ]]; then
compiler=`CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++`
host=arm-himix100-linux
elif [[ $1 = 'himix200' ]]; then
compiler=`CC=arm-himix200-linux-gcc CXX=arm-himix200-linux-g++`
host=arm-himix200-linux
else
:
fi #Preinstalled directory
install=${HOME}/_install #Delete installed directory
rm -rf ${install} #library path
pkg_config=${install}/lib/pkgconfig
lib_config=`CPPFLAGS=-I${install}/include CFLAGS=-I${install}/include LDFLAGS=-L${install}/lib` #Delete compiled directory
for i in `ls .`
do
if [ -d $i ];then
rm -rf $i
fi
done #http://www.mirrorservice.org/pub/gnu/osip/
tar xvf libosip2-*
cd libosip2-*
./configure --prefix=${install} ${compiler} PKG_CONFIG_PATH=${pkg_config} ${lib_config} --host=${host} --enable-static --enable-shared --disable-openssl
make && make install
cd .. #http://mirror.ossplanet.net/nongnu/exosip/
tar xvf libexosip2-*
cd libexosip2-*
./configure --prefix=${install} ${compiler} PKG_CONFIG_PATH=${pkg_config} ${lib_config} --host=${host} --enable-static --enable-shared --disable-openssl
make && make install
cd ..
媒体库
#JRTPLIB-3.11.1.tar.gz
cmake -DCMAKE_INSTALL_PREFIX=./_install -DCMAKE_C_COMPILER=/usr/local/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/usr/local/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
make
make install #faac-1.29.9.2.tar.gz
./configure CXX=arm-linux-gnueabihf-g++ CC=arm-linux-gnueabihf-gcc --prefix=${PWD}/_install --host=arm-linux-gnueabihf --with-mp4v2=no --enable-shared --enable-static
make
make install #h264bitstream-0.2.0.tar.gz
sudo apt-get install build-essential libtool
autoreconf -i
./configure CXX=arm-linux-gnueabihf-g++ CC=arm-linux-gnueabihf-gcc --prefix=${PWD}/_install --host=arm-linux-gnueabihf --enable-shared --enable-static
make
make install
dong@ubuntu:~/libexosip2-5.1.0$ su
Password:
root@ubuntu:/home/dong/libexosip2-5.1.0# ./_install.sh
root@ubuntu:~# tar cvf _install.tar.gz _install/
root@ubuntu:~# mv _install.tar.gz /home/dong/
dong@ubuntu:~$ sudo chmod 777 _install.tar.gz
3. example
Freepbx or freeswitch can be used as SIP server
libexosip2-5.1.0/tools/sip_reg.c
add eXosip event
/*zhoudd add*/
case EXOSIP_CALL_CANCELLED:
syslog_wrapper (LOG_INFO, "call cancelled");
break;
case EXOSIP_CALL_ACK:
syslog_wrapper (LOG_INFO, "call ack");
break;
case EXOSIP_CALL_CLOSED:
syslog_wrapper (LOG_INFO, "call closed");
break;
case EXOSIP_CALL_PROCEEDING:
syslog_wrapper (LOG_INFO, "call proceeding");
break;
case EXOSIP_CALL_RINGING:
syslog_wrapper (LOG_INFO, "call ringing");
break;
case EXOSIP_CALL_ANSWERED:
syslog_wrapper (LOG_INFO, "call answered");
break;
case EXOSIP_CALL_SERVERFAILURE:
case EXOSIP_CALL_RELEASED:
syslog_wrapper (LOG_INFO, "call release");
break;
compile example
export LD_LIBRARY_PATH=$(pwd)/_install/lib:$LD_LIBRARY_PATH
gcc -O2 -I./_install/include -L./_install/lib sip_reg.c \
-o sip_reg \
-leXosip2 -losip2 -losipparser2 -lpthread
test.sh
./sip_reg \
-r sip:182.61.147.213:5060 \
-u sip:1002@182.61.147.213 \
-c sip:1002@182.61.147.213:5060 \
-U 1002 \
-P 1234 \
-p 5060 \
-e 1800 \
-d
caller mode
dong@ubuntu:~/doing/demo$ ./test.sh
SipReg v1.0 up and running
proxy: sip:182.61.147.213:5060
fromuser: sip:1002@182.61.147.213
contact: sip:1002@182.61.147.213:5060
expiry: 3600
local port: 5060
transport: UDP
username: 1002
password: [removed]
r register
u unregister
i call
h hangup
a answer
q quit
f info
m message
Please input the command: registrered failure
registrered successfully
registrered successfully
registrered successfully
i
Please input the command: call proceeding
call requestfailure
call proceeding
call ringing
call answered
call message new
BYE
recieved message eXosip event (type, did, cid) = (14, 2, 1)
call closed
call release Please input the command: q
dong@ubuntu:~/doing/demo$
callee mode
dong@ubuntu:~/doing/demo$ ./test.sh
SipReg v1.0 up and running
proxy: sip:182.61.147.213:5060
fromuser: sip:1002@182.61.147.213
contact: sip:1002@182.61.147.213:5060
expiry: 3600
local port: 5060
transport: UDP
username: 1002
password: [removed]
r register
u unregister
i call
h hangup
a answer
q quit
f info
m message
Please input the command: registrered failure
registrered successfully
registrered successfully
registrered successfully
call invite
call cancelled
call closed Please input the command: call release
q
dong@ubuntu:~/doing/demo$
4. rport && contact
case EXOSIP_CALL_INVITE:
{
eXosip_masquerade_contact (context_eXosip, event->request->req_uri->host, atoi(event->request->req_uri->port)); osip_message_t *answer = NULL;
int i;
/*180 ring*/
... /*200 ok*/
... break;
} case EXOSIP_CALL_ACK:
{
/*ack*/
... conference_bridge_creat_run(remote_audio_ip, atoi(remote_audio_port), local_audio_ip, atoi(local_audio_port));
break;
} case EXOSIP_CALL_ANSWERED:
{
/*ack*/
... /*200 ok*/
... conference_bridge_creat_run(remote_audio_ip, atoi(remote_audio_port), local_audio_ip, atoi(local_audio_port));
break;
}
#register into gb28181 server
34020000001320000001.sh
./sip_reg \
-r sip:182.61..xxx: \
-u sip:@192.168.127.128 \
-c sip:@192.168.127.128: \
-U \
-P \
-p \
-e \
-d
5. User Agent Application
1) register
libexosip2-5.1.0/tools/sip_reg.c
2) invite
libexosip2-5.1.0/help/doxygen/ht0-initialize.dox
libexosip2-5.1.0/help/doxygen/ht1-callcontrol.dox
libexosip2-5.1.0/help/doxygen/ht2-registration.dox
3) rtp mediastream
rtp_over_udp: jrtplib-3.11.1/examples/example1.cpp
rtp_over_tcp: jrtplib-3.11.1/tests/tcptest.cpp
4) audio encode/decode && conference bridge
https://trac.pjsip.org/repos/wiki/media-flow?from=groupmessage
SIP UserAgent (B2BUA client)——libosip2 libeXosip2的更多相关文章
- SIP UserAgent (B2BUA client)——linphonec
1.linphone编译 linphone一般用在android/ios/windows/mobile上,但是没有图形界面的linphonec命令行程序用在资源紧张的硬件平台上也跟pjsip命令行一样 ...
- SIP UserAgent (B2BUA client)——pjsip
SIP UserAgent常用的SIP协议栈有pjsip/bell-sip/sofia-sip/libeXosip/libre等 https://github.com/staskobzar/sip_s ...
- Simple GB28181 System
I. Deployment / Architecture Block Diagram II. Resources Used 1. freeswitch —— sip server and media ...
- Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)
SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...
- libeXosip2(2-1) -- eXosip2 configuration API
eXosip2 configuration API General purpose API. Data Structures struct eXosip_dns_cache struct eX ...
- sipp模拟电信运营商VoIP终端测试(SIP协议调试)
三大运营商都有SIP服务器,用来支持语音对讲,多媒体调度等功能,他们的平台可能不是标准的SIP协议会话. 为了应对没完没了的对接各个厂商的平台,这里再整理了一套协议脚本,毕竟全都是没有意义的无用功,标 ...
- sipp模拟freepbx分机测试(SIP协议调试)
1.sipp的安装 1) 在centos 7.2下安装 yum install make gcc gcc-c++ ncurses ncurses.x86_64 ncurses-devel ncurse ...
- UAC(User Agent Client) 和 UAS(User Agent Server)
SIP协议采用Client/Server模型.每一个请求(Request)触发服务器的一个操作:每个操作被称为方法(Method):每个请求除了指明具体方法外,还携带了一系列的头域(Header fi ...
- RFC3261--sip
本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...
随机推荐
- 在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码
这两天装了一个mysql 5.7数据库,但是在本地dos登陆不上去,报错Access denied for user 'root'@'localhost'(using password:YES): 也 ...
- CF527E Data Center Drama
链接CF527E Data Center Drama 题目大意:给你一个无向图,要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. \(n<=10^5,n\leq 2*10 ...
- Linux和VMware
1.1 Linux操作系统简介 是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持32位和64位硬件.Lin ...
- (arm板子tensorflow安装)armv7板子pip安装的wheel
树莓派之类的armv7板子在,安装 numpy,scipy时经常失败,因为安装过程是下载源码包到本地编译,然后再安装的,编译过程中往往就会失败. https://www.piwheels.org/si ...
- 微信小程序-没有找到 node_modules 目录的解决办法
初次在微信开发者工具构建npm 没有找到 node_modules 目录的解决办法 第一步:设置-->项目设置-->使用npm模块 第二步:右键目录下miniprogram-->终端 ...
- ClickOnce是什么?如何使用?
ClickOnce是一种部署方式,主要解决C/S软件版本更新后,所有客户端都要重新安装的问题. 场景:假如,你的客户有1000个,你的服务端更新后,这1000个客户都要重新安装,难道要员工一个一个的电 ...
- 【HDOJ6623】Minimal Power of Prime(Powerful Number)
题意:给定大整数n,求其质因数分解的最小质数幂 n<=1e18 思路:常规分解算法肯定不行 考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三 ...
- AT3576 E Popping Balls——计数思路
题目:https://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_e 题解:https://w ...
- BaseFragment 基类代码
public abstract class BaseFragment extends Fragment implements IBaseView { private List<BasePrese ...
- DHCP服务器怎么设置怎么启动
DHCP:动态主机配置协议,服务器用于为网络中的客户端自动分配IP地址.这种方法避免了由于手动配置IP地址导致的IP地址冲突问题,同时也减少了网络管理员的工作量. 工具/原料 在配置DHCP服务器时, ...