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

    
У мережі є багато інформації та інструкцій по темі, але на поточний момент вони вже не актуальні і досить складні. У багатьох випадках використовують webrtc2sip але його досить складно зібрати і змусити працювати. Під катом я написав докладну інструкцію як змусити працювати WebRTC через Asterisk.
 
 
1. Підготовка системи (ubuntu 14.04)
оновлюємо
 
aptitude update && aptitude upgrade -y

 
качаємо 12 версію астеріска:
 
cd /usr/src/
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-12-current.tar.gz
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 https://github.com/cisco/libsrtp.git
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 https://github.com/asterisk/pjproject.git
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 — & gt; chan_pjsip і chan_sip
Resource Modules — & gt; 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://sipml5.googlecode.com/svn/trunk/ sipml5

 
тепер веб HTML5 сип клієнт доступний на нашому сервері webrtc.pbxware.ru/sipml5/call.htm
Налаштування
 
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.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.