Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让WebRTC工作(如何调试ICE失败?)_Javascript_Html_Webrtc - Fatal编程技术网

Javascript 让WebRTC工作(如何调试ICE失败?)

Javascript 让WebRTC工作(如何调试ICE失败?),javascript,html,webrtc,Javascript,Html,Webrtc,我不知道如何调试WebRTC。我不断收到“ICE失败”的错误,但我怀疑这是问题所在。这是我的密码: 我使用node.js/express/socket.io设置房间和连接对等点,然后使用一些默认的公共服务器发送信号 奇怪的是,客户端上似乎有远程流 下面是我遇到的两个错误(顺便说一句,目前我只是尝试将我的手机连接到笔记本电脑或两个浏览器选项卡,都在局域网内): 不支持“text/html”的HTTP“Content Type”。媒体资源负载http://192.168.1.2:3000/%5Bob

我不知道如何调试WebRTC。我不断收到“ICE失败”的错误,但我怀疑这是问题所在。这是我的密码:

我使用node.js/express/socket.io设置房间和连接对等点,然后使用一些默认的公共服务器发送信号

奇怪的是,客户端上似乎有远程流

下面是我遇到的两个错误(顺便说一句,目前我只是尝试将我的手机连接到笔记本电脑或两个浏览器选项卡,都在局域网内):

不支持“text/html”的HTTP“Content Type”。媒体资源负载http://192.168.1.2:3000/%5Bobject%20MediaStream%5D 失败。

ICE失败,有关更多详细信息,请参阅关于:webrtc


任何帮助都会震撼

我已经发表了一些评论,但我认为写一个答案也是值得的

在我第一次快速阅读您的代码之后,我看到了三件大事。除了肤浅的阅读之外,我还没有尝试实际运行或调试您的代码

首先,您应该以与本地视频流相同的方式设置
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);
}
其次,应该将约束对象传递给
rtpeerconnection
createOffer()
createAnswer()
方法。约束应该/可能如下所示:

var constraints = {
    mandatory: {
        OfferToReceiveAudio: true,
        OfferToReceiveVideo: true
    }
};
在成功和错误回调参数之后传递:

pc.createOffer(..., ..., constraints);
以及:

最后,你不能在同龄人之间交换ICE候选人。ICE候选人可以是报价/答复SDP的一部分,但并不总是如此。要确保发送所有这些文件,应在
rtpeerconnection
上实现
onicecandidate
处理程序:

pc.onicecandidate = function (event) {
    if (event.candidate) {
        socket.emit("ice candidate", event.candidate);
    }
}
您必须在server.js中实现客户端之间的“ice候选”消息中继


希望这有帮助,祝你好运

那么,在firefox的“about:webrtc”中启动调试模式并没有得到任何帮助?你的连接日志怎么说?嗯。。。大量错误:所有检查完成成功=0失败=2,未指定眩晕服务器,未指定回合服务器,重复优先级1686110207候选,您没有在第104行正确设置remoteVideo.src URL。您应该像对本地流一样使用window.URL.createObjectURL()。快速编辑。。。。说吧!等等……我看不出您正在向createOffer()或createAnswer()调用传递任何启用音频/视频的约束。谢谢你的帮助!现在我们来看一下,我想在这里发表一些评论强制/可选已弃用!使用{“offerToReceiveAudio”:true,“offerToReceiveVideo”:true}(注意大小写差异)根据Firefox。另外,addIceCandidate呢?需要吗?我可以把ice候选人和其他报价一起发送吗?当ice候选人到达接收端时,我需要对其做什么?我正在阅读规范:以及mdn文章:,非常好的资源,非常密集……因此,似乎我已将
无效候选项传递给addIceCandidate()
我将推进我的更改并继续处理此问题。约束应为containts={'OfferReceiveAudio':(模式!='sendonly'),'offerToReceiveVideo':(模式!=='sendonly')}
pc.onicecandidate = function (event) {
    if (event.candidate) {
        socket.emit("ice candidate", event.candidate);
    }
}