Звонок между двумя браузерами через SIP сервер¶
Описание¶
SIP звонок между браузерами через WCS является частным случаем звонков между браузером и SIP-устройством, при этом веб-приложение в браузере исполняет роль программного телефона с обоих сторон звонка.
Поддерживаемые платформы и браузеры¶
| Chrome | Firefox | Safari | Edge | |
|---|---|---|---|---|
| Windows | ✅ | ✅ | ❌ | ✅ |
| Mac OS | ✅ | ✅ | ✅ | ✅ |
| Android | ✅ | ✅ | ❌ | ✅ |
| iOS | ✅ | ✅ | ✅ | ✅ |
Поддерживаемые протоколы¶
- WebRTC
- RTP
- SIP
Поддерживаемые кодеки¶
- H.264
- VP8
- G.711
- Speex
- G.729
- Opus
Поддерживаемые SIP функции¶
- DTMF
- Удержание звонка
- Перевод звонка
SIP функции управляются при помощи WebSDK.
Схема работы¶
1. SIP-сервер как прокси-сервер для передачи вызовов и RTP медиа¶
- Браузер 1 начинает звонок с аккаунта
Callerна аккаунтCallee - WCS соединяется с SIP-сервером
- SIP-сервер передает WCS входящий вызов на аккаунт
Callee - WCS передает браузеру 2 событие о поступлении звонка
- Браузеры обмениваются аудио- и видеопотоками
2. SIP-сервер только как сервер для передачи вызовов¶

- Браузер 1 начинает звонок с аккаунта
Callerна аккаунтCallee - WCS соединяется с SIP-сервером
- SIP-сервер передает WCS входящий вызов на аккаунт
Callee - WCS передает браузеру 2 событие о поступлении звонка
- Браузеры обмениваются аудио- и видеопотоками
3. Без внешнего SIP-сервера. SIP и RTP медиа обрабатываются на WCS.¶
- Браузер 1 начинает звонок с аккаунта
Callerна аккаунтCallee - WCS устанавливает SIP-соединение между аккаунтами
- WCS передает браузеру 2 событие о поступлении звонка
- Браузеры обмениваются аудио- и видеопотоками
Краткое руководство по тестированию¶
- Для тестирования используем:
- два SIP-аккаунта;
-
веб-приложение Phone для совершения звонка
-
Откройте веб-приложение Phone. Введите данные SIP-аккаунта и нажмите кнопку
Connectдля установки соединения с сервером:

-
Откройте веб-приложение Phone в другом окне браузера. Введите данные второго SIP-аккаунта и нажмите кнопку
Connect:

-
Введите идентификатор SIP-аккаунта, принимающего звонок, и нажмите кнопку
Call:

-
Примите звонок, нажав кнопку
Answer:

Звонок начался:

-
Для завершения звонка нажмите кнопку
Hangup
Последовательность выполнения операций¶
Ниже описана последовательность вызовов при использовании примера Phone для создания звонка. SIP-сервер используется как прокси-вервер для передачи команд и медиа

-
Создание звонка при помощи WebSDK
Session.createCall(),Call.call()code
-
Отправка
SIP INVITEна SIP сервер -
SIP-сервер отправляет
SIP INVITEна WCS, поскольку вызываемый абонент зарегистрирован с него же -
Отправка второму браузеру события, оповещающего о входящем звонке
CALL_STATUS.RINGcode
-
Второй браузер отвечает на звонок
Call.answer()code
function onIncomingCall(inCall) { currentCall = inCall; showIncoming(inCall.caller()); $("#answerBtn").off('click').click(function(){ $(this).prop('disabled', true); var constraints = { audio: true, video: false }; inCall.answer({ localVideoDisplay: localDisplay, remoteVideoDisplay: remoteDisplay, receiveVideo: false, constraints: constraints }); showAnswered(); }).prop('disabled', false); ... } -
Передача подтверждения SIP-серверу
-
Получение подтверждения от SIP-сервера
-
Первый браузер получает от сервера событие, подтверждающего успешное соединение
CALL_STATUS.ESTABLISHEDcode
-
Стороны звонка обмениваются аудио- и видеопотоками
-
Завершение звонка
Call.hangup()code
function onConnected(session) { $("#connectBtn, #connectTokenBtn").text("Disconnect").off('click').click(function(){ $(this).prop('disabled', true); if (currentCall) { showOutgoing(); disableOutgoing(true); setStatus("#callStatus", ""); currentCall.hangup(); } session.disconnect(); }).prop('disabled', false); } -
Отправка
SIP BYEна SIP-сервер -
Получение
SIP BYEот SIP-сервера -
Отправка второму браузеру события, оповещающего о завершении звонка
CALL_STATUS.FINISHcode
Flashphoner.createSession(connectionOptions).on(SESSION_STATUS.ESTABLISHED, function(session, connection){ ... }).on(SESSION_STATUS.INCOMING_CALL, function(call){ call.on(CALL_STATUS.RING, function(){ ... }).on(CALL_STATUS.FINISH, function(){ setStatus("#callStatus", CALL_STATUS.FINISH); onHangupIncoming(); currentCall = null; ... }); ... }); -
Отправка подтверждения на SIP-сервер
-
Получение подтверждения от SIP-сервера
№# Звонки без использования внешнего SIP сервера
WCS может обрабатывать трафик SIP звонка без использования SIP сервера (см схему выше). Для этого необходимо установить следующие настройки в файлеflashphoner.properties
- Для тестирования используем:
-
веб-приложение Phone для совершения звонка
-
Откройте веб-приложение Phone. Введите:
- имя пользователя
- пароль
- в поле SIP Domain укажите адрес WCS сервера (но не доменное имя!)
- в поле SIP Outbound Proxy укажите адрес WCS сервера (но не доменное имя!)
- в поле SIP Port укажите 0
-
снимите переключатель
Register requred
НажмитеConnect

-
Откройте веб-приложение Phone в другом окне браузера. Введите:
- имя второго пользователя
- пароль
- в поле SIP Domain укажите адрес WCS сервера (но не доменное имя!)
- в поле SIP Outbound Proxy укажите адрес WCS сервера (но не доменное имя!)
- в поле SIP Port укажите 0
-
снимите переключатель
Register requred
НажмитеConnect

-
Введите имя пользователя, принимающего звонок, и нажмите
Call

-
Примите звонок, нажав кнопку
Answer

-
Звонок установлен
