Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js 使用node js逐步创建webrtc视频、语音呼叫和文件传输Q-A_Node.js_Express_Https_Socket.io_Webrtc - Fatal编程技术网

Node.js 使用node js逐步创建webrtc视频、语音呼叫和文件传输Q-A

Node.js 使用node js逐步创建webrtc视频、语音呼叫和文件传输Q-A,node.js,express,https,socket.io,webrtc,Node.js,Express,Https,Socket.io,Webrtc,如果任何人需要添加信息或编辑某些信息,欢迎他们 嗨, 首先,这些问题的主要目标是将我的经验传授给其他找到关于webrtc的好教程的开发人员。我不打算解释webrtc。在本文中,我添加了由我测试的webrtc视频、语音通话和文件传输示例的scourse代码 我从中获取webrtc信息并获取nodejs 从 好的,让我们开始吧 web rtc是否需要ssl认证? 如果你在本地PC服务器上做实验,没有必要。但是,当您将添加到live server时,是的,您需要它 我如何获得ssl证书? 我的一个朋友

如果任何人需要添加信息或编辑某些信息,欢迎他们

嗨, 首先,这些问题的主要目标是将我的经验传授给其他找到关于webrtc的好教程的开发人员。我不打算解释webrtc。在本文中,我添加了由我测试的webrtc视频、语音通话和文件传输示例的scourse代码

我从中获取webrtc信息并获取nodejs 从

好的,让我们开始吧

web rtc是否需要ssl认证?

如果你在本地PC服务器上做实验,没有必要。但是,当您将添加到live server时,是的,您需要它

我如何获得ssl证书?

我的一个朋友帮我得到那个SSl。有很多教程供你阅读和观看

我如何获得回合和晕眩服务器?

若你们进入生产级,你们需要设置那个些服务器,但为了测试你们的项目,你们可以免费获得stun服务器和turn服务器

对于Stun服务器-

对于Turn服务器-使用此链接并创建免费的()


我在下面添加了我的工作代码作为答案

这是带有节点js的webrtc的工作代码

这段代码和注释不是我写的。我拿到密码时他们已经在那里了。我找不到代码的原始所有者。但我感谢那个开发者。如果有人发现了那个开发者,请编辑这个并添加那个开发者链接:)

var express=require('express');
var socket=require('socket.io');
var-app=express();
var fs=需要('fs');
var https=require('https');
//链接您的https认证路径
变量选项={
key:fs.readFileSync('/../../etc/ssl/private/apache selfsigned.key'),
cert:fs.readFileSync('/../../etc/ssl/certs/apache selfsigned.crt'))
};
var main=https.createServer(选项,应用程序);
var server=main.listen(8443,函数(){
console.log('server up and running at%s port',8443);
});
/*var server=app.listen(443,函数(){
});*/
应用程序使用(express.static('public'));
var io=套接字(服务器);
/*************************/
/***有趣的东西***/
/*************************/
var通道={};
var套接字={};
/**
*用户将连接到信令服务器,然后发出“加入”
*加入一个特定的频道。信令服务器跟踪所有套接字
*谁在一个频道中,并且在加入时将向每对发送“addPeer”事件
*一个频道中的用户数。当客户端收到“addPeer”时,它们甚至会开始
*设置彼此之间的RTPeerConnection。在这个过程中,他们将
*需要相互传递ICE候选信息,以及SessionDescription
*信息。在所有这些发生之后,他们最终将能够完成
*对等连接将在彼此之间传输音频/视频。
*/
io.on('连接',函数(套接字){
var通道;
socket.channels={};
套接字[socket.id]=套接字;
console.log(“[”+socket.id+“]已接受连接”);
socket.on('disconnect',function(){
for(socket.channels中的var通道){
部分(频道);;
}
console.log(“[”+socket.id+“]已断开”);
删除套接字[socket.id];
});
socket.on('join-room',函数(配置){
如果(配置){
channel=config.channel;
var userdata=config.userdata;
var userID=config.userdata.userID;
if(插槽中的通道。通道){
console.log(“[”+socket.id+“]错误:已加入”,通道);
返回;
}
如果(!(通道中的通道)){
通道[通道]={};
}
用于(通道[通道]中的id){
channels[channel][id].emit('addPeer-room',{'peer\u id':socket.id,'should\u create\u offer':false});
emit('addPeer-room',{'peer\u id':id',should\u create\u offer':true});
log(“这个id是什么->”,id);
}
log(config.userdata.name,'joining room',config.channel);
join(config.channel);
socket.broadcast.in(config.channel.emit('room-users',config));
通道[channel][socket.id]=插座;
socket.channels[channel]=信道;
}
});
功能部件(通道){
console.log(“[”+socket.id+“]part”);
if(!(插槽中的通道。通道)){
console.log(“[”+socket.id+“]错误:不在”,通道);
返回;
}
删除socket.channels[channel];
删除频道[channel][socket.id];
用于(通道[通道]中的id){
通道[channel][id].emit('removePeer',{'peer_id':socket.id});
emit('removePeer',{'peer_id':id});
}
}
插座。在(‘部分’,部分);
socket.on('relayICECandidate-room',函数(配置){
var peer_id=config.peer_id;
var ice_candidate=config.ice_candidate;
日志(“[”+socket.id+“]将ICE候选中继到[“+peer_id+”],ICE_候选);
if(套接字中的对等id){
sockets[peer_id].emit('iceCandidate-room',{'peer_id':socket.id,'ice_candidate':ice_candidate});
}
});
socket.on('relaySessionDescription-room',函数(配置){
var peer_id=config.peer_id;
var session\u description=config.session\u description;
日志(“[”+socket.id+“]将会话描述中继到[”+peer_id+“]”,会话描述);
if(套接字中的对等id){
套接字[peer_id].emit('sessionDescription-room'{
“peer_id”:socket.id,
“会话描述”:会话描述
});
}
});
//这是用于文件传输的
socket.on('file-send-room',函数(fil