WebRTC工作在本地,但不能跨不同的IP地址
WebRTC works locally, but not across different IP addresses
我的代码在Github上:https://github.com/rashadrussell/webrtc_experiment/blob/master/public/script.js
我正在尝试用WebRTC编写1对1视频视频会议脚本。并被存储在云托管网站AppFog上。当我在一台计算机上使用两个不同的Chrome窗口进行测试时,它可以在我的本地主机上工作。当我在家里两台不同的电脑上测试它时,它也可以在AppFog上运行。
当我和住在不同房子的朋友一起测试我的应用程序时,问题就出现了。未设置远程流。我唯一的猜测是IP地址出现了一些错误,这意味着Ice候选人的设置出了问题。所有弹出的都是一个黑盒,其中应该是远程流。
下面是我的一些代码:
客户端
var isInitiator = false;
socket.on('initiatorFound', function(data) {
isInitiator = data.setInitiator;
console.log("Is Initiator? " + isInitiator);
});
navigator.getMedia = (
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia
);
navigator.getMedia(
{video: true, audio: false},
(stream) => {
var video = document.getElementById("localView");
video.src = window.URL.createObjectURL(stream);
console.log("Add Stream");
sendMessage('streamAdd', {streamAdded: 'stream-added'});
createPeerConnection();
pc.addStream(stream);
if(isInitiator)
{
callPeer();
}
},
function(err) {
console.log("The following error occured: ");
console.dir(err);
}
);
function sendMessage(type, message)
{
console.log("Sending Message");
socket.emit('message',{
"type": type,
"message": message
});
}
function createPeerConnection() {
pc = new rtcPeerConnection(servers, options);
console.dir(pc);
pc.onicecandidate = function(evt) {
if(evt.candidate == null) return;
pc.onicecandidate = null;
console.log("Send Ice Candidate");
sendMessage("iceCandidate", JSON.stringify(evt.candidate));
};
pc.onaddstream = function(evt) {
document.body.append("<video id='remoteVideo' autoplay></video>");
var remoteVid = document.getElementById("remoteVideo");
remoteVid.src = window.URL.createObjectURL(evt.stream);
};
}
function callPeer() {
pc.createOffer(function (offer) {
pc.setLocalDescription(offer, function() {
sendMessage("offer", JSON.stringify(offer));
});
console.log("Send Offer");
}, function(err) { console.log("Offer Error: " + err) },
videoConstraints
);
}
function answerPeer() {
pc.createAnswer(function(answer) {
pc.setLocalDescription(answer);
sendMessage("answer", JSON.stringify(answer))
}, function(err) { console.log("Sending Answer Error: " + err) },
videoConstraints
);
}
socket.on('message', function(message) {
console.log("CONSOLE MESSAGE:");
console.dir(message);
if(message.type == 'streamAdd') {
console.log('Stream was added');
createPeerConnection();
if(isInitiator) {
callPeer();
}
} else if(message.type == 'offer') {
pc.setRemoteDescription( new rtcSessionDescription(JSON.parse(message.message)));
if(!isInitiator)
{
console.log("Sending Answer");
answerPeer();
}
} else if(message.type == 'answer') {
pc.setRemoteDescription( new rtcSessionDescription(JSON.parse(message.message)));
} else if(message.type == 'iceCandidate') {
console.log("Get Ice Candidate");
pc.addIceCandidate(new rtcIceCandidate(JSON.parse(message.message)) );
}
});
端
var isInitiator = false;
io.sockets.on('connection', function(socket) {
if (!isInitiator) {
isInitiator = true;
socket.emit('initiatorFound', {setInitiator: isInitiator});
} else {
socket.emit('initiatorFound', {setInitiator: !isInitiator});
}
// Signaling Channel
socket.on('message', function(message) {
if (message.type == 'streamAdd') {
console.log('Got message: ' + message);
}
//socket.emit('message' ,message);
// Should be:
socket.broadcast.emit('message', message);
});
});
pc = new rtcPeerConnection(servers, options);
在通过server变量发送服务器信息时,您需要提及TURN服务器的地址以及STUN服务器。通常情况下,由于NAT或防火墙,数据被阻塞,TURN应该在这种情况下提供帮助。
有关服务器的更多详细信息,可以查看https://gist.github.com/yetithefoot/7592580
相关文章:
- 跟踪用户点击Adsense广告的IP地址
- 用于更改IP地址的输入框
- 获取docker容器中运行的节点应用程序的IP地址
- 如何从ipify函数返回ip地址,以便在其他函数中使用
- 使用网络服务器的IP地址而不是域名对其进行屏幕抓取
- 除了用于跟踪的IP地址之外,是否有任何计算机特定信息
- 使用 IP 地址和超链接对数据表进行排序
- 如果通过域名或IP地址导航到,则进行检测
- 如何在nodejs中将主机名解析为ip地址
- 如何使用javascript确定登录用户的浏览器版本和IP地址
- 我怎样才能重写这个函数,这样我就不会'不必显式地键入范围内的每个IP地址
- 获取客户端机器's使用Asp/Javascript的精确IP地址(非公共IP)
- Linkedin开发者:[未经授权].IP地址不匹配
- 为什么可以't我得到连接客户端's的ip地址在我的服务器上运行Node.js+Openshift托管的W
- 我能得到访问我网站的当地公共ip地址吗
- 覆盖批处理IP地址以查找位置
- Asp.NetMVC 3:使用Javascript的客户端IP地址
- 使用Safari浏览器的Javascript的局域网本地IP地址
- 基于IP地址重定向
- 如何从Adobe Interactive表单中获取客户端机器的IP地址