...

среда, 10 сентября 2014 г.

Установка и настройка Asterisk для работы с WebRTC



В сети есть много информации и инструкций по теме, но на текущий момент они уже не актуальны и довольно сложны. Во многих случаях используют webrtc2sip но его довольно сложно собрать и заставить работать. Под катом я написал подробную инструкцию как заставить работать WebRTC через Asterisk.



1. Подготовка системы (ubuntu 14.04)



обновляем

aptitude update && aptitude upgrade -y

качаем 12 версию астериска:



cd /usr/src/
wget http://ift.tt/1p6GGtX
tar -zxvf asterisk-12-current.tar.gz


в пакете с астером есть скрипт который устанавливает все зависимости, для начала попробуем его использовать.



cd asterisk-12.5.0/contrib/scripts/
./install_prereq install




в моем случае скрипт выдал кучу конфликтов, у меня ubuntu 64 а скрип пытается поставить i386 пакеты. Поэтому установим все зависимости вручную.

aptitude install -y libncurses-dev libz-dev libssl-dev libxml2-dev libsqlite3-dev uuid-dev uuid libcurl-dev libspeex-dev libspeexdsp-dev libogg-dev libvorbis-dev libasound2-dev portaudio19-dev libcurl4-openssl-dev libpq-dev unixodbc-dev libsqlite0-dev libmysqlclient15-dev libneon27-dev libgmime-dev libusb-dev liblua5.1-0-dev lua5.1 libopenh323-dev libvpb-dev libgtk2.0-dev libmysqlclient-dev libbluetooth-dev libradiusclient-ng-dev freetds-dev libsnmp-dev libiksemel-dev libcorosync-dev libnewt-dev libpopt-dev libical-dev libspandsp-dev libjack-dev libresample-dev libc-client-dev binutils-dev libsrtp-dev libgsm1-dev libedit-dev doxygen libjansson-dev libldap-dev subversion git libxslt1-dev mc htop iftop

еще раз воспользуемся скриптом для установки дополнительных пакетов libsrtp и pjproject они очень важны для работы webrtc



./install_prereq install-unpackaged


тут все собралось без проблем, но если вдруг возникнут ошибки то ставим все руками



cd /usr/src/
git clone http://ift.tt/1p6GJ92
cd libsrtp
./configure CFLAGS=-fPIC && make libsrtp.a && make uninstall && make install
cd ..
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local.conf
/sbin/ldconfig

git clone http://ift.tt/1CRkqi7
cd pjproject
./configure --enable-shared --with-external-speex --with-external-gsm --with-external-srtp --disable-sound --disable-resample && make && make install
/sbin/ldconfig


на этом система готова для установки астериска с поддержкой webrtc.


Установка Asterisk


cd /usr/src/asterisk-12.5.0/
./configure && make menuselect


в меню надо проверить есть ли звездочки


Channel Drivers -> chan_pjsip и chan_sip

Resource Modules -> res_srtp, res_crypto и res_http_websocket


если все есть, то продолжаем, если нет — проверяем заново зависимости.



make && make install && make samples

Генерируем сертификаты.



mkdir /etc/asterisk/keys
cd /usr/src/asterisk-12.5.0/contrib/scripts/
./ast_tls_cert -C pbx.pbxware.ru -O "ATC Design" -d /etc/asterisk/keys




скрипт запросит установить пароль (не менее 4 символов) на сертификат.

Установка завершена, переходим к настройкам.


Настройка

редактируем файл http.conf



[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088


rtp.conf



[general]
rtpstart=10000
rtpend=20000
icesupport=yes
stunaddr=stun.l.google.com:19302


sip.conf



[general]
udpbindaddr=0.0.0.0:5060
realm=webrtc.pbxware.ru ; заменить на свой ИП или на доменное имя сервера с астериском.
transport=udp,ws



[webrtc](!)
host=dynamic
context=from-internal
type=friend
encryption=yes
avpf=yes
force_avp=yes
icesupport=yes
nat=force_rport,comedia
directmedia=no
disallow=all
qualify=yes
videosupport=yes
allow=ulaw,alaw,vp8,h264,h263p,mpeg4
dtlsenable=yes
dtlsverify=no
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass



[101](webrtc)
defaultusername=101
secret=101badpassword

[102](webrtc)
defaultusername=102
secret=102badpassword

[103](webrtc)
defaultusername=103
secret=103badpassword

[104](webrtc)
defaultusername=104
secret=104badpassword

[105](webrtc)
defaultusername=105
secret=105badpassword

[106](webrtc)
defaultusername=106
secret=106badpassword


extensions.conf



[from-internal]
exten => 999,1,Answer()
same => n,Playback(demo-congrats)
same => n,Hangup()

exten => 888,1,Answer()
same => n,Echo()
same => n,Hangup()

exten => _XXX,1,Noop(webrtc test call)
same => n,DIAL(SIP/${EXTEN})
same => n,Hangup()


Тестирование

Для тестирования можем использовать HTML5 sip client с сервера sipml5.org/call.htm или установить его на свой сервер.



aptitude install apache2
cd /var/www/html/
svn checkout http://ift.tt/1p6GGu9 sipml5


теперь веб HTML5 сип клиент доступен на нашем сервере http://ift.tt/1p6GGub

Настройка


Display Name: web1

Private Identity*: 101

Public Identity*: sip:101@webrtc.pbxware.ru

Password: 101badpassword

Realm*: webrtc.pbxware.ru


в Expert mode

WebSocket Server URL[2]: ws://webrtc.pbxware.ru:8088/ws

ICE Servers[4]: [{ url: 'stun:stun.l.google.com:19302'}]


Тестируем

Звонок между двумя ноутами:



Звонок на андроид (chrome)



лог звонка



webrtc*CLI>
== Using SIP VIDEO CoS mark 6
== Using SIP RTP CoS mark 5
-- Executing [104@from-internal:1] NoOp("SIP/103-00000020", "webrtc test call") in new stack
-- Executing [104@from-internal:2] Dial("SIP/103-00000020", "SIP/104") in new stack
== Using SIP VIDEO CoS mark 6
== Using SIP RTP CoS mark 5
-- Called SIP/104
-- SIP/104-00000021 is ringing
webrtc*CLI>
-- SIP/104-00000021 answered SIP/103-00000020
-- Channel SIP/103-00000020 joined 'simple_bridge' basic-bridge <13742dcb-5019-4fd2-b85e-0e1b70b1ccd7>
-- Channel SIP/104-00000021 joined 'simple_bridge' basic-bridge <13742dcb-5019-4fd2-b85e-0e1b70b1ccd7>



webrtc*CLI> sip show channels
Peer User/ANR Call ID Format Hold Last Message Expiry Peer
91.203.82.152 104 0a9b261a3926a75 (ulaw|vp8) No Tx: ACK 104
91.203.82.152 103 3f8b4b42-600d-8 (ulaw|vp8) No Rx: ACK 103


Тесты проводились на

chrome 37.0.2062.94 — работает голос, видео, DTMF.

android chrome 37.0.2062.117 — работает голос, видео, DTMF.

Firefox 32.0 — работает голос, DTMF. Видео работает только в одну сторону.


P.S. Сейчас сервер работает, можете звонить и проверять как работает WebRTC.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий