- PVSM.RU - https://www.pvsm.ru -

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

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

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

HTTP сервер

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

SIP сервер

Помимо обычных для SIP протоколов — UDP, TCP, TLS, требуется поддержка WebSocket [2]. WebSocket очень простой протокол, работает он следущим образом:

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

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

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

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

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

Браузер

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

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

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

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

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

Автор: vf1


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/8108

Ссылки в тексте:

[1] посту: http://habrahabr.ru/post/144293/

[2] WebSocket: http://tools.ietf.org/html/rfc6455

[3] SIP: http://www.ietf.org/rfc/rfc3261.txt

[4] расширение: http://tools.ietf.org/html/draft-ibc-sipcore-sip-websocket-02

[5] сервер: http://www.officesip.com/