...

понедельник, 25 ноября 2013 г.

Мой опыт работы с Webrtc

Привет, хабралюди

В этом топике я хочу рассказать вам о моем опыте работы с SIP телефонией через webrtc. Рассказать о том, с какими проблемами встречался, какой софт я пробовал, какие костыли писал :).


Что было использовано:





  • Asterisk 11.5.1

  • GMS шлюз

  • SipML5






Начало:


Изначально задача стояла так: обеспечить работающую телефонию в браузере. Раз задача поставлена, значит надо делать. Решили не использовать flash звонилки, а попробовать звонить через webrtc. Из js звонилок были JSSIP и SipML5. Использовать я решил в проекте SipML5.


Сначала начали использовать связку asterisk+webrtc2sip. Заработало всё хорошо, но возникла проблема в очень долгом соединении входящего звонка. Проблема пропадала после рестарта webrtc2sip. Погуглив я узнал о том, что астериск, умеет работать с webrtc.

Сделал также, как описано в вике sipml5. Собрал, проверил — работает. Запилил очередь, разрулил диалпланы, подключил GSM шлюз. Всё заработало хорошо, проблема ушла, но появились другие проблемы:



  • Начал падать астериск при нажатии на холд

  • Звонка нет, а sipml звонит


Увидев, что последняя версия астериска 11.5.1 я принял решение обновиться.

Собрал, запустил — работает отлично и без патчей. Но проблемы также остались.

Закомментировав в rtp.conf

stunaddr=stun.l.google.com:19302

При холде звонка астериск падать перестал. Но вторая проблема осталась.


Решил сбрасывать звонок, если в течение четырех секунд оператор не взял трубку.

Для этого добавил на 'i_new_call'



setTimeout(function() {
if (!ctx.is_active) {
ctx.sip_hangup();
}
}, 4200);


Проблема ушла. но возникла другая. Если поставить звонок на холд, то выходя с холда не слышно или оператора, или клиента.


Вооружившись wireshark пошел смотреть в чем дело. Оказалось, если звонок снять с холда, то соединение приходит с другого порта. Очевидно, что решение — не использовать холд такой, какой он есть, а просто включать/выключать микрофон оператору.



audio_tracks = this.session_call.o_session.o_stream_local.getAudioTracks();
for (var i = 0, l = audio_tracks.length; i < l; i++) {
audio_tracks[i].enabled = false;
}


Погоняв всё вроде бы работало так, как надо, но возникла периодическая тишина при входящем звонке.


Ну, тут проблема оказалась в том, что GSM шлюз был подключен к астериску из приватной сети. Перенастроив все на публичные адреса. И эта проблема ушла


Заключение




Надеюсь статья поможет кому-нибудь в настройке телефонии через 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 fivefilters.org/content-only/faq.php#publishers.


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

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