webrtc общаться с SIP, как получить стрим, лед?

Сейчас я делаю webrtc сигнальный сервер, использую SIP. У меня большая проблема. как получить стрим и ICE кандидата от удаленного SIP Client.?

  1. на стороне клиента webrtc, вызовите getusermedia -> peerconnection -> createoffer -> принимаемый поток

  2. и клиент webrtc отправляет описание сеанса (SDP) на сервер сигналов.

  3. сервер сигналов создает сообщение приглашения SIP, используйте описание сеанса клиента webrtc (SDP)

  4. Сигнальный сервер связывает SIP-сообщение с SIP-клиентом (например, Jitsi)

  5. Клиенту webrtc необходимо получить кандидата ICE и STREAM. как получить?

    я могу сделать кандидата ICE и поток из удаленного сообщения SDP?

1 ответ

Решение

SDP - это собственный протокол, который используют SIP и WebRTC. Вы можете отправить множество информации в обмен SDP.

SIP наиболее точно может отправлять информацию о соединении через SDP. Вы должны убедиться, что информация о соединении является правильной с точки зрения SIP (если она согласовывается с сервером STUN/TURN), и как только она получит хорошую информацию, вы можете просто написать SDP с этой информацией и отправить ее.

Что касается носителей, вам придется обрабатывать процесс обмена ключами DTLS-SRTP между вашими двумя сторонами, чтобы носители SRTP могли быть зашифрованы / расшифрованы с обеих сторон (оба имеют главный ключ).

Как только у вас есть мастер-ключ с обеих сторон, информация о вашем соединении (ips/ports) и ваше мультимедиа согласованы (одни и те же кодеки), вы можете просто передавать потоковый кодек, который согласован, по согласованным ips / портам.

Вы МОЖЕТЕ создать свой собственный Ice Trickling и создать объекты-кандидаты Ice, когда ваш SIP-клиент связывается с ICE-сервером, и просто отправить его на другую сторону, но может быть проще подождать, пока все согласования ICE не будут завершены, прежде чем пытаться согласовать само соединение, Вам придется выяснить, когда согласование будет завершено на вашей стороне SIP, но RTCPeerConnection уже имеет сигнал для этого.

Вы можете проверить sipML5. Вам нужно будет сделать что-то похожее на то, что они делают, чтобы все эти движущиеся части работали.

TL; DR отмечает:

  1. Вы договариваетесь с сервером ICE(оглушить или повернуть) с обеих сторон независимо, получаете от него информацию о хорошем соединении и записываете ее в SDP(вы можете проанализировать кандидатов ICE на стороне SIP, чтобы получить хорошее соединение, и написать в ДПС со всеми кандидатами собирается на стороне SIP)
  2. будьте осторожны с мультиплексированием RTP/RTCP. Убедитесь, что ваша медиа сторона может демультиплексировать эти пакеты (если вы общаетесь с Chrome).
  3. Вы должны прочитать о DTLS-SRTP Linky Linky2 Linky3
  4. Читать на SDP

РЕДАКТИРОВАТЬ: Есть шлюз, который рекламирует, что он может сделать это уже. Janus-Gateway также может быть хорошим ресурсом, чтобы увидеть, как вы могли бы сделать это. Плагин SIP, кажется, может обмениваться данными с устройством SIP. И ИМХО этот исходный код легче понять, чем SIPML5

Другие вопросы по тегам