Привет, читатели
В этом топике я хочу рассказать вам о моем опыте работы с 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.
Опытных чуваков прошу простить. Первый опыт работы с телефонией
Автор: Gen1us2k