WebRTC: заставить одноранговых узлов использовать сервер TURN

У меня есть приложение webrtc, оно отлично работает, но для тестирования мне нужно проверить, работает ли мой TURN-сервер, но поскольку оба тестовых устройства находятся в одной сети, я не могу проверить, подумал ниже код ограничить кандидатов только теми, кто использует сервер TURN,

function onIceCandidate(event, targetSessionID, targetUserName) {
    if (event.candidate) {
    var candidate = event.candidate.candidate;
    if(candidate.indexOf("relay")<0){ // if no relay address is found, assuming it means no TURN server
        return;
    }
    sendMessage(candidate); // using socket.io to send to the otherside
...

но я заметил, что (с большим разочарованием) это не работает, потому что когда однопользователь создает описание ответа,

....
a=candidate:0 1 UDP 2128609535 13.198.98.221 58779 typ host
a=candidate:0 2 UDP 2128609534 13.198.98.221 58780 typ host
....

это означает, что передача является прямой, а не через сервер TURN, правильно ли я предполагаю это? Теперь, как заставить webrtc использовать сервер TURN?

Ответ 1

просто добавив это, чтобы закрыть вопрос,

function onIceCandidate(event, targetSessionID, targetUserName) {
    if (event.candidate) {
    var candidate = event.candidate.candidate;
    if(candidate.indexOf("relay")<0){ // if no relay address is found, assuming it means no TURN server
        return;
    }...

Вышеприведенный код работает, проверен на wireshark,

после добавления условия if(candidate.indexOf("relay")<0), связь происходит только через сервер TURN, если сервер отсутствует/неверные данные, состояние соединения попадает в new

Изменить:, как сказал cullen в своем ответе, согласно w3 webrtc, передав relay как iceTransportPolicy должен работать, но я не проверял, реализовано ли оно в Firefox и Chrome...

Ответ 2

Я понятия не имею, будут ли браузеры поддерживать это, но посмотрите на "политику кандидата ICE" в разделе 4.1.1 проекта-ietf-rtcweb-jsep-08, вы можете увидеть, как установить политику для "Реле" будет делать то, что вы хотите. В текущем проекте API W3C это устанавливается с использованием значения RTCIceTransports "relay" для поля iceTranports в конфигурации. Поиск RTCIceTransports в https://w3c.github.io/webrtc-pc/

Ответ 3

В целях тестирования на firefox вы можете принудительно включить реле TURN.

Проверьте мой ответ здесь!