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.
Проверьте мой ответ здесь!