2015-08-07 8 views
0

Я разрабатываю небольшое приложение webrtc на C. Я делаю вызов webrtc, используя sip-сигнализацию. У меня ниже запросов относительно использования оглушения/поворота/льда.Использование Stun/Turn в WebRTC

Когда я начинаю звонок, я посылаю INVITE с предложением (SDP). В SDP нам нужно поставить кандидатов ICE.

У меня есть два возможных случая. Чтобы объяснить это, я приведу пример. Скажем, две конечные точки: A и B. У меня есть прокси-сервер sip сказать P. Также у меня есть сервер очереди (поддерживает как оглушение, так и поворот), скажем, это T.

Case 1
Все объекты , B, P и T в той же частной сети. Требуется ли разрешение STUN? Если да, то каковы все оглушающие запросы/ответы, с которыми мне нужно иметь дело?

Случай 2
Здесь находится в частной сети. Прочие организации B, P и T находятся в общественной сети. В этом случае я надеюсь, что нам нужно сделать разрешение STUN/TURN. Допустим, я начал с STUN и получил приглашенных и рефлексивных кандидатов. В некоторых примерах я вижу, Права, Запросы канала связи. Если я использую только STUN (нет TURN), после того, как я получу хост и рефлексивные кандидаты, мне нужно сделать что-нибудь лишнее?

Кроме того, есть ли хороший открытый источник, доступный для клиента stun/turn в C, который использует gnutls (no openssl)?

ответ

2

Корпус 1 - № Не требуется, сам по себе. Просто нет простого способа обнаружить, когда INVITE приходит из той же сети, в которой вы находитесь.

Случай 2 - Если вы используете STUN, локальные хосты и рефлексивные кандидаты в порядке. TURN используется для сценариев, когда требуются реле (симметричные сценарии NAT).

+0

Итак, в случае 2, изначально я отправлю запрос связывания STUN, из ответа я получу кандидаты на хост и рефлексивные кандидаты. Я продолжу использовать IP/порт, присутствующий в рефлексивном кандидате для создания SDP, и продолжите вызов. Теперь мне нужно отправить еще один запрос STUN во время жизни этого вызова. Просьба уточнить. – Kamal

+1

Нет, нет. STUN используется только для сбора вашего рефлексивного кандидата на сервер. После этого вам это больше не нужно. – Tahlil

+0

Чтобы проверить, я установил sipml5 (sip-webrtc client в javascript) на две машины в частной сети. Sip-сервер, который я использовал в общедоступной сети (sip2sip.info). Я позвонил между двумя конечными точками sipml5. Я заметил, что первоначально sipml5 отправляет запрос о оглушении на оглушающий сервер, после установления соединения я вижу, что пакеты stun bind обмениваются между двумя конечными точками sipml5. Почему это так, здесь обе конечные точки sipml5 находятся в моей сети, в идеале они не должны обмениваться запросами на привязку привязки. Это потому, что я использую публичный сервер оглушения и общедоступный сервер sip? – Kamal

Смежные вопросы