Принцип работы SIP клиента в браузере

    Пообщавшись в комментариях к посту, я понял, что не все до конца понимают принцип работы SIP в браузере. Поэтому, решил экспромтом написать небольшую статью, где в общих чертах раскрыть эту тему.




    Действующие лица:

    HTTP сервер


    Ничего особенного от него не требуется, только поддержка HTTP протокола.

    SIP сервер


    Помимо обычных для SIP протоколов — UDP, TCP, TLS, требуется поддержка WebSocket. WebSocket очень простой протокол, работает он следущим образом:
    • клиент подключается к серверу по TCP или TLS
    • передает HTTP запрос, в котором есть признак того, что клиент хочет переключиться на WebSocket
    • сервер отвечает 101 Protocol Switching
    • WebSocket подключение готово для передачи данных в дуплексном режиме, это практически TCP с небольшим заголовком для каждого блока передаваемых данных

    В некоторых заголовках SIP сообщения есть информация о протоколе транспортного уровня, например:

    Via: SIP/2.0/UDP 192.168.1.1;branch=z9hG4bKyQz1234567

    А так как WebSocket не описан в основном документе по SIP, потребовалось расширение, это еще не стандарт, но его уже можно использовать. В этом документе нет принципиальных изменений rfc3261, по большой части он просто разрешает очевидные вещи, например, такой заголовок:

    Via: SIP/2.0/WS df7jal23ls0d.invalid;branch=z9hG4bKyQz1234567

    Браузер


    Здесь все сложнее, требуется целый букет технологий: WebSocket для подключения к SIP серверу; SIP стэк, который можно реализовать на JavaScript; WebRTC для передачи аудио и видео.

    Как оно работает


    Уже наверное понятно, прелесть всей схемы в том, что не требуется никаких согласующих протоколы агентов. Клиент в браузере является полноценным участником и взаимодействует напрямую с любым SIP сервером, и любыми клиентами, например, с хардварным IP телефоном. Единственное требование — это поддержка WebRTC кодеков.

    Как потестировать


    Информацию о том может ли Asterisk общаться по WebSocket мне найти не удалось. Но есть другие SIP сервера с поддержкой WebSocket, они конечно уступают по функционалу, но для тестирования его достаточно. Например, сервер для Windows, начиная с версии 3.2 поддерживает WebSocket и даже имеет встроенный HTTP сервер.
    Share post

    Similar posts

    Comments 11

      0
      Чем вы рисовали графики? :)
        +2
        Кстати, как же все нечестно оказалось у lucidchart. Зашел без регистрации нарисовал, сохранить, экспортировать нельзя. Ну хорошо — регистрируюсь. После регистрации мне сообщают, что я использовал премиум фичи и поэтому я не могу даже редактировать свою диаграму. Alt+PrtScn и Paint.net спасли ситуацию, но осадочек остался.
        0
        > Информацию о том может ли Asterisk общаться по WebSocket мне найти не удалось

        Вот WebSocket для FreeSWITCH — github.com/tamiel/fshttpstream
          0
          это для передачи внутренних событий FreeSWITCH, а не для SIP over WS
          +1
          С учетом:
          — слабой развитости и совместимости WebSockets в браузерах
          — отсутствия поддержки WebSockets в популярных SIP системах (OpenSER/Asterisk/FREESwitch)
          — тормозами Javascript SIP стека на планшетах
          — отсутствием поддержки кодеков их WebRTC

          в ближайшем будущем звонки из браузеров проще реализовать через HTTP+WebRTC и шлюза WebRTCSIP.
          +1
          Неделя sip_в_браузере на хабре :) Молодцы коллеги!
            0
            Не обязательно использовать SIP сервер с поддержкой WebSocket.

            На самом деле нам нужна очень простая SIP прокси, которая бы получала SIP сообщения по WebSocket и перенаправляла их дальше по SIP. Такая прокси пишется на node.js с включенным пакетом ws.

            Но хотелось бы задать вопрос: какова коммерческая роль этой технологии? В предыдущем поста автора я подробнее расписал суть вопроса, не буду копипастить.
              0
              Эта технология в тренде — перехода всего в браузер. С гуглом более менее понятно, но посмотрите на вин8, почему майкрософт пошел в ту же сторону?
              Что касается ограничений в браузере, я думаю это быстро измениться — GoogleOS, JS приложения в Win8, PhoneGap.
                0
                Понятно, что в тренде. JavaScript (при поддержке HTML5 и браузерных расширений типа WebRTC, WebGL) неожиданно возвысился, как язык для написания кроссплатформенного кода.

                Но вот допустим, у нас есть SIP телефон, написанный на JavaScript. Этот телефон мы регистрируем на том же sipnet или на корпоративном SIP сервере, и клиенты начинают звонить друг другу и на мобильные телефоны из браузера (в т.ч. из браузера с мобильных телефонов).
                «Угнать» такой софт-клиент, подредактировав JavaScript и перенастроив его на другой SIP сервер — проще простого. Поэтому бизнес на продаже таких софтфонов не сделаешь :(
                У Флешового телефона была хотя бы какая-то защита от этого — все-таки он давался юзеру не в исходных кодах на Action Script.
                  0
                  Для меня это такая же неожиданность, но факта не отменяет.
                  Кто может js подредактировать, разработчик?
                  А щас можно сделать бизнес на продаже софтфонов? Очень сомневаюсь.

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