Сигнализация работает нормально — оба узла могут обмениваться предложениями, ответами и кандидатами ICE — но само соединение WebRTC всегда терпит неудачу (
Код: Выделить всё
connectionStateЯ пытался добавить общедоступный STUN-сервер Google, но он все равно не подключается.
Код: Выделить всё
const wsUrl = "ws://localhost:8555";
const config = { iceServers: [{ urls: "stun:stun.l.google.com:19302" }] };
let ws, pc, dc, pendingCandidates = [];
async function createPC(isInitiator = false, targetKey = null) {
pc = new RTCPeerConnection(config);
pc.onicecandidate = e => {
if (e.candidate) {
ws.send(JSON.stringify({ action: "ice", data: e.candidate, target: targetKey }));
}
};
pc.onconnectionstatechange = () => console.log("Connection state:", pc.connectionState);
if (isInitiator) {
dc = pc.createDataChannel("chat");
dc.onopen = () => console.log("Data channel open");
}
}
async function startCall(targetKey) {
await createPC(true, targetKey);
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
ws.send(JSON.stringify({ action: "offer", data: offer, target: targetKey }));
}
async function handleOffer(msg) {
await createPC(false, msg.from);
await pc.setRemoteDescription(msg.data);
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
ws.send(JSON.stringify({ action: "answer", data: answer, target: msg.from }));
}
Код: Выделить всё
elif act == "offer":
target = USERS_BY_KEY.get(data["target"])
if target and target["ws"]:
await target["ws"].send(json.dumps(data))
elif act == "answer":
target = USERS_BY_KEY.get(data["target"])
if target and target["ws"]:
await target["ws"].send(json.dumps(data))
elif act == "ice":
target = USERS_BY_KEY.get(data["target"])
if target and target["ws"]:
await target["ws"].send(json.dumps(data))
- Оба клиента подключаются к серверу сигнализации WebSocket.
- Обмен предложениями и ответами происходит успешно.
- Кандидаты ICE отправляются и принимаются.
- Однако, pc.connectionState становится «сбойным», и DataChannel никогда не открывается.
- Добавлен сервер Google STUN ()
Код: Выделить всё
stun:stun.l.google.com:19302 - Убедились, что оба узла находятся в одной сети.
- Проверено, что обмен предложениями, ответами и кандидатами ICE осуществляется правильно.
- Проверено как в Chrome, так и в Firefox.
Что может привести к сбою соединения WebRTC (
Код: Выделить всё
connectionState: "failed"Что-то отсутствует или неправильно настроено в моей сигнализации или обработке ICE?
Подробнее здесь: https://stackoverflow.com/questions/798 ... configured
Мобильная версия