Это приложение для видеочата webrtc работает нормально в течение последних нескольких месяцев.Случайно, сегодня, без изменений в коде.Приложение перестало работать, и я выдавал мне следующие ошибки в консоли Firefox, когда я щелкаю для подключения:
"Сбой ICE, ваш сервер TURN, кажется, сломан, подробнее о about: webrtc" "InvalidStateError: Cannotустановить удаленный ответ в стабильном состоянии "
Я проверил свой сервер поворотов здесь: https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ и, похоже, он подключается нормально.
<div class="quash-demo">
<body onload="showMyFace()">
<div> <button onclick="showFriendsFace()" type="button" class="btn btn-primary btn-lg"> Start Quash</button></div>
<div class="quash-webrtc-container">
<video id="yourVideo" autoplay muted playsinline></video>
<video id="friendsVideo" autoplay playsinline></video>
</div>
</body>
</div>
<script>
var config = {
apiKey: "AIzaSyA4EFWzZG5lCdONactMvD3F71IB0-kliOw",
authDomain: "webrtc-test-ad30b.firebaseapp.com",
databaseURL: "https://webrtc-test-ad30b.firebaseio.com",
projectId: "webrtc-test-ad30b",
storageBucket: "webrtc-test-ad30b.appspot.com",
messagingSenderId: "818501134133"
};
if (!firebase.apps.length) {
firebase.initializeApp({});
}
var database = firebase.database().ref();
var yourVideo = document.getElementById("yourVideo");
var friendsVideo = document.getElementById("friendsVideo");
var yourId = Math.floor(Math.random()*1000000000);
var servers = {'iceServers': [{'urls': 'stun:stun.services.mozilla.com'}, {'urls': 'stun:stun.l.google.com:19302'}, {'urls': 'turn:numb.viagenie.ca','credential': '111222','username': 'scottpiligrim2018@yopmail.com'}]};
var pc = new RTCPeerConnection(servers);
pc.onicecandidate = (event => event.candidate?sendMessage(yourId, JSON.stringify({'ice': event.candidate})):console.log("Sent All Ice") );
pc.onaddstream = (event => friendsVideo.srcObject = event.stream);
function sendMessage(senderId, data) {
var msg = database.push({ sender: senderId, message: data });
msg.remove();
}
function readMessage(data) {
var msg = JSON.parse(data.val().message);
var sender = data.val().sender;
if (sender != yourId) {
if (msg.ice != undefined)
pc.addIceCandidate(new RTCIceCandidate(msg.ice));
else if (msg.sdp.type == "offer")
pc.setRemoteDescription(new RTCSessionDescription(msg.sdp))
.then(() => pc.createAnswer())
.then(answer => pc.setLocalDescription(answer))
.then(() => sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})));
else if (msg.sdp.type == "answer")
pc.setRemoteDescription(new RTCSessionDescription(msg.sdp));
}
};
database.on('child_added', readMessage);
function showMyFace() {
navigator.mediaDevices.getUserMedia({audio:true, video:true})
.then(stream => yourVideo.srcObject = stream)
.then(stream => pc.addStream(stream));
}
function showFriendsFace() {
pc.createOffer()
.then(offer => pc.setLocalDescription(offer) )
.then(() => sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})) );
}
</script>
Любые предложения приветствуются.Этот код был идентичен вчера и полностью функционировал.Также не беспокойтесь о учетных данных, они предназначены исключительно для тестирования.Я озадачен источником проблемы.