为什么WebRTC本地流没有显示任何内容?

时间:2017-09-14 09:00:15

标签: javascript html5 webrtc

我想要做的是让p1连接到p2,p2获取网络摄像头并将其传输到p2。在同一页面练习webrtc。

onaddstream我确实得到了一个流,它有正确的ID和错误,但是当我将它分配给视频元素时没有任何反应。

但是,我确实从p2获得了有效的流,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));

1 个答案:

答案 0 :(得分:1)

你没有发信号通知ICE候选人。添加:

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

......它会起作用。

Side-tip:查看友好的Web控制台弃用警告:

  

⚠onaddstream已被弃用!请改用peerConnection.ontrack。

     

⚠不推荐使用URL.createObjectURL(MediaStream),很快就会将其删除。

E.g。比如this。规范几乎完成evolving