Почему локальный поток WebRTC ничего не показывает?

1

что я пытаюсь сделать, это установить 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));
Теги:
webrtc

1 ответ

1
Лучший ответ

Вы не сигнализируете кандидатов ICE. Добавлять:

pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate);
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate);

... и это сработает.

Боковой наконечник: ознакомьтесь с советами по предупреждению о нежелательной веб-консоли:

onaddstream устарел! Вместо этого используйте peerConnection.ontrack.

URL.createObjectURL(MediaStream) устарел и скоро будет удален.

Например, вот так. Спецификации почти сделано развивается.

  • 0
    обратите внимание, что chrome изначально не поддерживает ontrack, в вашем примере используется shim с именем adapter.js
  • 0
    можешь посмотреть на этот вопрос stackoverflow.com/questions/46208620/…
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню