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

498ce1eafa024b029a0177a8d68caeaf.pngВ сети есть много информации и инструкций по теме, но на текущий момент они уже не актуальны и довольно сложны. Во многих случаях используют 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 → chan_pjsip и chan_sipResource 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://sipml5.googlecode.com/svn/trunk/ sipml5 теперь веб HTML5 сип клиент доступен на нашем сервере webrtc.pbxware.ru/sipml5/call.htmНастройка

Display Name: web1Private Identity*: 101Public Identity*: sip:101@webrtc.pbxware.ruPassword: 101badpasswordRealm*: webrtc.pbxware.ru

в Expert modeWebSocket Server URL[2]: ws://webrtc.pbxware.ru:8088/wsICE Servers[4]: [{ url: 'stun: stun.l.google.com:19302'}]

Тестируем Звонок между двумя ноутами: 8c9b2819c9a949468a65bb0cc6b1650f.pngЗвонок на андроид (chrome)

259917fb2e17461cb416f3fffb675a63.png5afc01eebfd04b22a5f29fbd14f81d21.png

лог звонка

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.

© Habrahabr.ru