Как стать автором
Обновить

Комментарии 15

На нашем астериске настроен WSS протокол для SIP. И астер ожидает в параметрах соединения именно его, но библиотека JSSIP упорно отправляет WS несмотря ни на какую конфигурацию. Разработчики библиотеки при этом упорно тыкают в стандарты, в которых действительно нет никаких требований по этому поводу. А коллеги из астера упорно не хотят ничего исправлять. В общем, тупик. Ну а мы в это время находим в исходниках строку this._configuration.contact_uri = new URI(...), меняем transport: 'ws' на transport: 'wss' и продолжаем радоваться жизни.

Напишите нормально, что хотели сказать. Из написанного вами не понятно в чем дело…
Напишите просто, что астер исходя из параметра в contact выбирает не шифрованный ws для доставки сообщений, когда нужен шифрованный.

Спасибо за замечание, поправил, надеюсь, стало понятнее.
Кстати, если страничка со звонилкой секурная (https), то транспорт ОБЯЗАТЕЛЬНО должен быть wss. По крайней мере sipml5 поступает именно так и блокирует ws. И это правильно.

Не правильно. Уровень приложения не в ответе за транспортный уровень.

Нет практического смысла в звонилке расположенной на http странице так как браузеры дают доступ к камере и микрофону только на https страницах.
А вот с страницы открытой по https нельзя обращаться к ресурсам по http
Так что это скорее всего не sipml5 блокирует ws а он просто понимает что нечего не будет работать на по ws вместо wss.
при чем тут практический смысл и название протокола?
Есть протокол WS он может использовать как транспорт транспорт TCP (WS) так и TLS (WSS). Сам протокол при этом остается тем же самым, отличаются только заголовки согласования соединения на этапе HTTP запросов, так что обозначать WS или WSS с практической точки зрения да и с точки зрения здравого смысла — как на клиенте так и на сервере НЕТ, так как данные после установления соединения будут идти по установленному траcпортному каналу, коим будет являться или TCP или TLS.

Более того, WS может не обязательно использоваться в web
многие предпочитают этот протокол как межсерверный (тот же астериск для отсылки events по ARI)
И там вполне можно это делать по незащищенному каналу ибо нет смысла нагружать приложение в локальной среде.
Как собрать свою Web-звонилку за час

буквально на коленке из нескольких десятков строк java-скрипта сделать собственную WEB-звонилку

Вам понадобится сервер с поддержкой всего вышеперечисленного добра — вроде FreeSwitch или Asterisk.[...] Будем считать, что вам повезло так же, как нам, и в распоряжении уже имеется настроенная VoIP телефония.

Охохо.
Ну это не прям таки «охохо», но настройка окружения выходит за рамки статьи:)
Как настроить астериск можно почитать, например, тут.
Я хорошо помню этот момент несколько лет назад, когда хромовский движок втихую включил мультиплексирование, а на астериске реализации этой фичи еще не было. И несколько месяцев жалобы клиентов, пока не раскопал в чем причина.
Так что для веб-ртс необходим астериск версии не ниже 13.15.
Кроме того, есть неплохая аналогичная библитека sipml5, о ней уже писали на Хабре.

Кстати, проблему задержки вначале вызова так и не удалось на 100% победить, хотя все ice вроде убраны…

В общем, всё довольно логично. Пока дозваниваемся ['progress'] — играем звуки дозвона.


Не логично. Пока дозваниваетесь — необходимо прокидывать звук от абонента Б до вызывающего, иначе никогда не услышите автоинформатор в предответном состоянии — типа «абонент занят или временно недоступен» или «оставьте сообщение после звукового сигнала»…
Звуки дозвона (тоновый сигнал КПВ) должна играть станция вызываемого абонента…
Спасибо за дельное замечание по поводу 'progress', поправлю, дабы никто не спотыкался.
sipml5 то же пробовал, но она довольно большая, и была какая то проблема с ней, сейчас уже не вспомню.
Ну да, там не все так просто с этим прогрессом. Обычно должна играть удаленная станция выслав сообщение SIP\183, но она может выслать только SIP\180 и тогда играть КПВ должен аппарат вызывающего, иначе будет тишина… Кажется так. Но лучше всегда прокидывать голос с удаленной стороны, а в случае тишины при дозвоне сдавать ТТ оператору.

And thanks to rfc3960, some policies for these messes are recommended:

1. Unless a 180 (Ringing) response is received, never generate
local ringing.

2. If a 180 (Ringing) has been received but there are no incoming
media packets, generate local ringing.

3. If a 180 (Ringing) has been received and there are incoming
media packets, play them and do not generate local ringing.

С хромом нужно быть очень осторожным. Для доступа к микрофону, просим хром запросить разрешение. Но этот запрос на разрешение он показывает только при работе по https

Эти штуки оставляем за рамками статьи. Будем считать, что вам повезло так же, как нам, и в распоряжении уже имеется настроенная VoIP телефония.


Как наивно, помню ставил астериск на сервер… с телефонией аля 3g модем(chan_dongle).
Передача данных по sip протоколу через webrtc по мне дак, это самая простая ее часть
Согласен с вами, статья как раз демонстрирует, как можно сделать эту простую часть максимально быстро. Для настройки и поддержки инфраструктуры у нас в компании есть крутые админы, а наивные разработчики обычно занимаются разработкой:)
Что касается настройки астериска, можно почитать, например, вот эту статью.
Чтобы не переизобретать велосипед можно просто использовать voximplant.com
Зарегистрируйтесь на Хабре, чтобы оставить комментарий