Как транслировать аудио WebRTC через NAT?

У меня есть многостороннее приложение WebRTC, которое работает как на локальном хосте, так и на локальном туннеле ngrok.io. Однако, когда я пытаюсь протестировать его с моим другом, который подключен через маршрутизатор на их конце, я могу видеть обмен предложением/ответом, а также обмен кандидатами ICE, но звук не передается.

После того, как у меня впервые возникла эта проблема, я провел небольшое исследование и узнал, что вам нужен сервер TURN, чтобы пройти через NAT маршрутизатора. Я использую общедоступный сервер TURN, который, как я подтвердил, работает в https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

var configuration = { 
    "iceServers": [{ "url": "stun:stun2.1.google.com:19302" }], 
     url: 'turn:192.158.29.39:3478?transport=udp', 
     credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 
     username: '28224511:1379330808' 
}; 

yourConn = new webkitRTCPeerConnection(configuration); 

yourConn2 = new webkitRTCPeerConnection(configuration); 

yourConn3 = new webkitRTCPeerConnection(configuration);

Звуковые пакеты должны маршрутизироваться через этот сервер TURN и через NAT моего друга, но мы по-прежнему не можем передавать друг другу потоки.


person John Smith    schedule 23.01.2019    source источник
comment
Ваш сервер TURN должен быть указан в списке iceServers. См. также: developer.mozilla.org/en-US /docs/Web/API/RTCIceServer/   -  person Brad    schedule 23.01.2019
comment
Что сказал @Brad. Кроме того, общедоступные серверы TURN — это миф.   -  person jib    schedule 23.01.2019
comment
С общедоступными учетными данными TURN страница со льдом дает мне рефлексивных кандидатов на хост и сервер, но не кандидатов на ретрансляцию. Так что учетные данные не работают.   -  person Nils Ohlmeier    schedule 25.01.2019


Ответы (2)


Ваши учетные данные сервера очереди берутся с https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/, срок действия которых истек в 2013 году. Если вы использовали https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ он должен был сказать вам, что это не работает - я был бы очень удивлен, если бы это дал вам кандидатов на ретрансляцию.

Запустите свой собственный сервер.

person Philipp Hancke    schedule 25.01.2019
comment
Подтверждено: для меня учетные данные из вопроса не работают на тестовой странице со струйкой льда. - person Nils Ohlmeier; 25.01.2019

Вы должны изменить конфигурацию:

var configuration = { 
  "iceServers": [
    { "url": "stun:stun2.1.google.com:19302" },
    {
      "url": "turn:192.158.29.39:3478?transport=udp", 
      "credential": "yourpassword", 
      "username": "yourusename" 
    }
  ], 

};

person Uyen Do    schedule 25.01.2019