SIP-звонок, произведенный через WCS-сервер, может быть захвачен в RTMP-поток и ретранслирован на указанный RTMP-сервер при создании звонка. Одним из примеров использования может быть трансляция звонка на Facebook или Youtube.
1. Для тестирования используем:
2. Откройте REST-клиент. Отправьте запрос /call/startup на WCS-сервер, указав в параметрах запроса:
3. Примите входящий звонок на программном телефоне:
4. Откройте веб-приложение Player. Укажите URL RTMP-сервера и имя RTMP-потока, в который перенаправлен звонок, и нажмите кнопку "Play". Начнется воспроизведение звонка:
5. Завершите звонок со стороны программного телефона.
Ниже описана последовательность вызовов при использовании примера SIP as RTMP для создания звонка
1. Отправка REST-запроса /call/startup:
sendREST() code
function startCall() { ... var url = field("restUrl") + "/call/startup"; callId = generateCallID(); $("#sipCallId").val(callId); ... var RESTCall = {}; RESTCall.toStream = field("rtmpStream"); RESTCall.hasAudio = field("hasAudio"); RESTCall.hasVideo = field("hasVideo"); RESTCall.callId = callId; RESTCall.sipLogin = field("sipLogin"); RESTCall.sipAuthenticationName = field("sipAuthenticationName"); RESTCall.sipPassword = field("sipPassword"); RESTCall.sipPort = field("sipPort"); RESTCall.sipDomain = field("sipDomain"); RESTCall.sipOutboundProxy = field("sipOutboundProxy"); RESTCall.appKey = field("appKey"); RESTCall.sipRegisterRequired = field("sipRegisterRequired"); for (var key in RESTCall) { setCookie(key, RESTCall[key]); } RESTCall.callee = field("callee"); var data = JSON.stringify(RESTCall); sendREST(url, data); startCheckCallStatus(); } |
2. Установка соединения с SIP-сервером
3. Получение подтверждения от SIP-сервера
4. RTP-поток передается на WCS-сервер
5. Публикация RTMP-потока на RTMP-сервере
6. RTMP-поток передается на RTMP-сервер
7. Отправка REST-запроса /call/terminate:
sendREST() code
function hangup() { var url = field("restUrl") + "/call/terminate"; var currentCallId = { callId: callId }; var data = JSON.stringify(currentCallId); sendREST(url, data); } |
8. Отправка команды на SIP-сервер
9. Получение подтверждения от SIP-сервера
1. Поток, захваченный из звонка, не проигрывается, если не инициализирована RTP-сессия для этого потока
Симптомы: поток звонка создается на сервере, но не воспроизводится.
Решение: включить принудительную инициализацию RTP-сессии при помощи настройки
rtp_session_init_always=true |
2. DTMF-посылки не распознаются SIP-стороной, если не включена генерация аудиоданных
Симптомы: SIP-сторона не распознает PIN-код, набранный при помощи DTMF
Решение: включить генерацию аудио и видеоданных для звонка при помощи настройки
generate_av_for_ua=all |