WEBRTC,不在不同的网络之间工作

时间:2016-12-02 12:41:49

标签: webrtc stun

我正在开发一个简单的应用程序,它使用webrtc在一个方向上传输实时视频(一个发送者和一个接收者)。它使用socket.io和node.js进行信令。

此时,当发送方和接收方处于同一网络(服务器已经在线)时,它实际上是传输实时视频,但如果我使用移动网络或者如果对等方连接的是不同的wif,则不会工作。 实际上,我使用公共图书馆的wifi和我的家庭wifi进行测试,当发送者在公共wifi上工作时。

我在firefox失败时得到的消息是: ICE失败,请参阅:webrtc了解更多详情

正如我所读到的,webrtc使用STUN / TURN服务器来解决net的NATS问题。我已经介绍了来自STUN和TURN服务器的网址,但它似乎没有效果。

这就是我'使用'STUN / TURN服务器的方式:

var configuration = { iceServers: [
{
    urls: "turn:numb.viagenie.ca",
    username: "xxxxxxxx@hotmail.com",
    credential: "********"
},
{
    urls: "stun:stun.callwithus.com"
}
]};
var pc = new RTCPeerConnection(configuration);

对于双方都一样,似乎服务器都已启动。

所以,我的最后一个问题是,我需要做些其他事情来确保webrtc在需要时使用STUN / Turn服务器吗? 或者,你知道这种行为的任何其他可能原因吗?

你知道的一切都可以提供很多帮助,因为我找不到如何使用这些服务器。

如果您需要更多信息,请索取。

Ť

2 个答案:

答案 0 :(得分:0)

是的,您需要收听pc.onicecandidate并通过您的信号渠道将每位候选人发送到另一方,如果使用adapter.js,则可以使用此方式调用pc.addIceCandidate:{ / p>

pc.addIceCandidate(candidate).catch(e => console.log(e))

或者如果不是这样(语法较旧):

pc.addIceCandidate(new RTCIceCandidate(candidate)).catch(e => console.log(e))

您也可以转储ICE候选人,看看您的设置是否有效(srflx = stun,relay =转):

var PC = window.RTCPeerConnection || window.webkitRTCPeerConnection;
var server = { urls: "stun:stun.l.google.com:19302" };
var pc = new PC({ iceServers: [server] });

pc.onicecandidate = e => e.candidate && console.log(e.candidate.candidate);

pc.createDataChannel("dummy");
pc.createOffer().then(d => pc.setLocalDescription(d)).catch(e => console.log(e));

您可以修改该代码段以包含转弯服务器。

答案 1 :(得分:0)

最后,问题解决了。 似乎Turn服务器工作正常。我在xyrsis上创建了一个试用帐户,并更改了眩晕并转向服务器,它已经解决了。

谢谢大家。