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

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

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

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


    • Asterisk 11.5.1
    • GSM шлюз
    • 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.
    Опытных чуваков прошу простить. Первый опыт работы с телефонией
    • +2
    • 13.7k
    • 7
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 7

      0
      Есть ещё такая штука: www.linphone.org/eng/linphone/news/linphone-web-1.0-available-today.html
      Работает по SIP.
        0
        Что то сыровато :) Есть мнение что придётся вам отказаться от него пока, уж больно нагородили с ходу много).
          0
          С dtls-srtp проблему решали? Через ff получилось позвонить? Там вроде с сертификатами существует проблема сам бьюсь уже недели 2. Пока без результатов…
            0
            Нет. с dtls-srtp проблему не решал. Другие браузере в проекте не использовали вообще. Изначально нам можно было привязыватся к конкретному браузеру.
            0
            Почему решили использовать sipml5, а не jssip?
              0
              живо решение еще? FF последних версий использует ТОЛЬКО DTLS + SHA256, а поддержки этого в Asteriske нет вплоть до svnview.digium.com/svn/asterisk/team/file/sha256-a-harsh-reality/res/res_rtp_asterisk.c?r1=417073&r2=417074&pathrev=417074

              нужно ли ставить на стороне клиента SSL-сертификаты чтобы успешно подключаться? (в частности, если используется ws://, хотя думаю это не принципиально)

              также интересно, не возникало ли у вас проблем с отсутствием звука при вроде бы успешно установленном вызове? как настраивали RTP-туннель (STUN / ICE)?
                0
                я пока siprtmpd пользую, через flashку звоним. Работает.

                Only users with full accounts can post comments. Log in, please.