Вы путаете демо локальной петли - что у вас есть - с комнатой чата.
A демо локальной петли - это короткое замыканиетолько клиентское подтверждение концепции, связывающее два одноранговых соединения на одной странице друг с другом.Совершенно бесполезно, за исключением того, что доказать, что API работает, и браузер может общаться с самим собой.
Он содержит localPeerConnection
и remotePeerConnection
- или pc1
и pc2
- и это не то, что обычно пишутWebRTC код.Сигнал пропускается.
Демонстрацию сигналов сложно провести без сервера, но я показываю людям эту демонстрационную вкладку .Щелкните правой кнопкой мыши и откройте его в двух смежных окнах и нажмите кнопку Call!
на одном из них, чтобы вызвать другое.Он использует localSocket
, непроизводственный хак, который я сделал, используя localStorage для передачи сигналов.
Так же бесполезно, вкладка-демонстрация больше похожа на реальный код:
const pc = new RTCPeerConnection();
call.onclick = async () => {
video.srcObject = await navigator.mediaDevices.getUserMedia({video:true, audio:true});
for (const track of video.srcObject.getTracks()) {
pc.addTrack(track, video.srcObject);
}
};
pc.ontrack = e => video.srcObject = e.streams[0];
pc.oniceconnectionstatechange = e => console.log(pc.iceConnectionState);
pc.onicecandidate = ({candidate}) => sc.send({candidate});
pc.onnegotiationneeded = async e => {
await pc.setLocalDescription(await pc.createOffer());
sc.send({sdp: pc.localDescription});
}
const sc = new localSocket();
sc.onmessage = async ({data: {sdp, candidate}}) => {
if (sdp) {
await pc.setRemoteDescription(sdp);
if (sdp.type == "offer") {
await pc.setLocalDescription(await pc.createAnswer());
sc.send({sdp: pc.localDescription});
}
} else if (candidate) await pc.addIceCandidate(candidate);
}
Есть одинpc
- ваша половина вызова - и имеется onmessage
сигнальный обратный вызов для правильной обработки несимметричного согласования сроков предложения / ответа.То же самое JS с обеих сторон.
Это еще не чат .Для этого вам нужна серверная логика, чтобы определить, как люди встречаются, и сервер веб-сокетов для сигнализации.Попробуйте этот учебник на MDN , который завершается демонстрацией чата .