что я пытаюсь сделать, это установить p1 на p2, p2 получить веб-камеру и передать ее на p2. На всей той же странице практиковать webrtc.
но onaddstream
я получаю поток, он имеет правильный идентификатор и ошибки, но когда я назначаю его элементу видео, ничего не происходит.
Тем не менее, я получаю действительный поток от p2, который является тем, кто запрашивает поток. Если я устанавливаю видео, равное этому потоку, тогда он показывает видео в веб-камере.
Это код
v = $0
pc1 = new RTCPeerConnection();
pc2 = new RTCPeerConnection();
pc1.onaddstream = (s) => {
v.src = URL.createObjectURL(s.stream);
window.s1 = s.stream;
};
pc1.createOffer({offerToReceiveVideo: 1})
.then((offer) => {
pc1.setLocalDescription(offer);
pc2.setRemoteDescription(offer)
})
.then(() => navigator.mediaDevices.getUserMedia({ video: true }))
.then((stream) => {
pc2.addStream(stream);
window.s2 = stream;
})
.then(() => pc2.createAnswer())
.then((answer) => {
pc2.setLocalDescription(answer);
pc1.setRemoteDescription(answer);
})
.catch((err)=>console.log(err));
Вы не сигнализируете кандидатов ICE. Добавлять:
pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate);
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate);
... и это сработает.
Боковой наконечник: ознакомьтесь с советами по предупреждению о нежелательной веб-консоли:
onaddstream устарел! Вместо этого используйте peerConnection.ontrack.
URL.createObjectURL(MediaStream) устарел и скоро будет удален.
Например, вот так. Спецификации почти сделано развивается.