У меня проблемы с приложением webrt c, которое прекрасно работает на всех компьютерах, которые я тестирую, даже на виртуальных машинах, но не работает на Windows Server 2012 R2. Я отследил его до пропущенного кандидата Server Reflexive (srflx) на сервере.
С помощью этого фрагмента тестового кода (запускаемого на консоли chrome dev):
var rtc = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var r = new rtc({ iceServers: [{ urls: "stun:stun.l.google.com:19302" }] }, {});
r.onicecandidate = function (a) { console.log('candidate:', JSON.stringify(a.candidate)); };
r.onicecandidateerror = function(a) { console.log('error:', a); }
r.createDataChannel("");
r.createOffer().then(x);
function x(a) {
r.setLocalDescription(a, function () {}, function () {});
}
Вкл. мой P C, он показывает что-то вроде этого:
candidate: {"candidate":"candidate:1221703924 1 udp 2113937151 a044b6a7-4d08-XXXX-XXXX-bc858326ac0f.local 59233 typ host generation 0 ufrag IYpO network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: {"candidate":"candidate:842163049 1 udp 1677729535 111.222.333.444 59233 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag IYpO network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: null
Но на сервере это выглядит так:
candidate: {"candidate":"candidate:3704228534 1 udp 2113937151 e277d76d-XXXX-XXXX-9471-3461192326ad.local 50857 typ host generation 0 ufrag WWDW network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: null
Что может быть причиной отсутствия кандидата srflx? Использование сервера поворотов с учетными данными вместо stun делает то же самое. Также попытался отключить windows межсетевой экран.