让 WebRTC 工作(如何调试 ICE 失败?)
Getting WebRTC working (how to debug ICE Fail?)
我不知道如何调试 WebRTC。我不断收到 'ICE Failed' 错误,但我怀疑这就是问题所在。这是我的代码:https://github.com/wamoyo/webrtc-cafe/tree/master/2.1%20Establishing%20a%20Connection%20%28within%20a%20Local%20Area%20Network%29
我正在使用 node.js/express/socket.io 来设置房间和连接对等点,然后使用一些默认的 public 服务器来发送信号。
奇怪的是,客户端上似乎有 remoteStream。
这是我遇到的两个错误(顺便说一句,目前,我只是尝试从我的 phone 连接到笔记本电脑或两个浏览器选项卡,都在局域网内):
HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://192.168.1.2:3000/%5Bobject%20MediaStream%5D failed.
ICE failed, see about:webrtc for more details
任何帮助都会很棒!
我已经发表了一些评论,但我认为写一个答案也是值得的。
在我第一次快速阅读您的代码后,我看到了 3 件大事。除了表面阅读之外,我还没有尝试 运行 或调试您的代码。
首先,您应该像设置本地视频流一样设置remoteVideo.src
URL参数:
pc.onaddstream = function(media) { // This function runs when the remote stream is added.
console.log(media);
remoteVideo.src = window.URL.createObjectURL(media.stream);
}
其次,您应该将约束对象传递给 RTCPeerConnection
的 createOffer()
和 createAnswer()
方法。约束 should/could 如下所示:
var constraints = {
mandatory: {
OfferToReceiveAudio: true,
OfferToReceiveVideo: true
}
};
然后在成功和错误回调参数之后传递:
pc.createOffer(..., ..., constraints);
和:
pc.createAnswer(..., ..., constraints);
最后,你们没有在同行之间交换 ICE 候选人。 ICE 候选人可以成为 offer/answer SDP 的一部分,但并非总是如此。为确保发送所有这些,您应该在 RTCPeerConnection
:
上实现一个 onicecandidate
处理程序
pc.onicecandidate = function (event) {
if (event.candidate) {
socket.emit("ice candidate", event.candidate);
}
}
您必须在 server.js
中的客户端之间实施 "ice candidate" 消息中继
希望对您有所帮助,祝您好运!
我不知道如何调试 WebRTC。我不断收到 'ICE Failed' 错误,但我怀疑这就是问题所在。这是我的代码:https://github.com/wamoyo/webrtc-cafe/tree/master/2.1%20Establishing%20a%20Connection%20%28within%20a%20Local%20Area%20Network%29
我正在使用 node.js/express/socket.io 来设置房间和连接对等点,然后使用一些默认的 public 服务器来发送信号。
奇怪的是,客户端上似乎有 remoteStream。
这是我遇到的两个错误(顺便说一句,目前,我只是尝试从我的 phone 连接到笔记本电脑或两个浏览器选项卡,都在局域网内):
HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://192.168.1.2:3000/%5Bobject%20MediaStream%5D failed.
ICE failed, see about:webrtc for more details
任何帮助都会很棒!
我已经发表了一些评论,但我认为写一个答案也是值得的。
在我第一次快速阅读您的代码后,我看到了 3 件大事。除了表面阅读之外,我还没有尝试 运行 或调试您的代码。
首先,您应该像设置本地视频流一样设置remoteVideo.src
URL参数:
pc.onaddstream = function(media) { // This function runs when the remote stream is added.
console.log(media);
remoteVideo.src = window.URL.createObjectURL(media.stream);
}
其次,您应该将约束对象传递给 RTCPeerConnection
的 createOffer()
和 createAnswer()
方法。约束 should/could 如下所示:
var constraints = {
mandatory: {
OfferToReceiveAudio: true,
OfferToReceiveVideo: true
}
};
然后在成功和错误回调参数之后传递:
pc.createOffer(..., ..., constraints);
和:
pc.createAnswer(..., ..., constraints);
最后,你们没有在同行之间交换 ICE 候选人。 ICE 候选人可以成为 offer/answer SDP 的一部分,但并非总是如此。为确保发送所有这些,您应该在 RTCPeerConnection
:
onicecandidate
处理程序
pc.onicecandidate = function (event) {
if (event.candidate) {
socket.emit("ice candidate", event.candidate);
}
}
您必须在 server.js
中的客户端之间实施 "ice candidate" 消息中继希望对您有所帮助,祝您好运!