Звонок между двумя браузерами через 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.RING
code
-
Второй браузер отвечает на звонок
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.ESTABLISHED
code
-
Стороны звонка обмениваются аудио- и видеопотоками
-
Завершение звонка
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.FINISH
code
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
-
Звонок установлен