SIP UserAgent Application(B2BUA client) —— libosip2+libeXosip2+jrtplib
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 #library path pkg_config=${install}/lib/pkgconfig lib_config=`CPPFLAGS=-I${install}/include CFLAGS=-I${install}/include LDFLAGS=-L${install}/lib` #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 CFLAGS=-fPIC 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 CFLAGS=-fPIC 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
or static lib
INCLUDE = \ -I ${lib}/exosip2/include \ -I ${lib}/exosip2/include/eXosip2 \ -I ${lib}/exosip2/include/osip2 \ -I ${lib}/exosip2/include/osipparser2 \ -I ${lib}/exosip2/include/osipparser2/headers \ LIB = \ ${lib}/exosip2/lib/libeXosip2.a \ ${lib}/exosip2/lib/libosip2.a \ ${lib}/exosip2/lib/libosipparser2.a
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.45.xxx:5060 \
-u sip:34020000001320000001@192.168.127.128 \
-c sip:34020000002000000001@192.168.127.128:5060 \
-U 34020000001320000001 \
-P 12345678 \
-p 5060 \
-e 1800 \
-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