代码拉取完成,页面将自动刷新
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const fs = require('fs');
let sslOptions = {
//里面替换成生成的私钥
key: fs.readFileSync('/home/zhangsnke/private_key/privkey.key'),
//里面替换生成的证书
cert: fs.readFileSync('/home/zhangsnke/private_key/cacert.pem')
};
const https = require('https').createServer(sslOptions,app);
const io = require('socket.io')(https);
//express路由 把index.html静态文件send到浏览器上
app.get('/',(req,res)=>{
res.sendFile(__dirname + '/index.html');
});
app.get('/camera',(req,res)=>{
res.sendFile(__dirname+"/camera.html");
});
app.get('/video',(req,res)=>{
res.sendFile(__dirname+"/record.html");
});
//访问静态文件 localhost:3000/static/123.jpg
app.use("/static",express.static("static/"));
io.on("connection", (socket) => {
//连接加入子房间
socket.join( socket.id );
console.log("a user connected " + socket.id);
socket.on("disconnect", () => {
console.log("user disconnected: " + socket.id);
//某个用户断开连接的时候,我们需要告诉所有还在线的用户这个信息
socket.broadcast.emit('user disconnected', socket.id);
});
socket.on("chat message",(msg) => {
console.log(socket.id + " say: " + msg);
//io.emit("chat message", msg);
socket.broadcast.emit("chat message", msg);
});
//当有新用户加入,打招呼时,需要转发消息到所有在线用户。
socket.on('new user greet', (data) => {
console.log(data);
console.log(socket.id + ' greet ' + data.msg);
socket.broadcast.emit('need connect', {sender: socket.id, msg : data.msg});
});
//在线用户回应新用户消息的转发
socket.on('ok we connect', (data) => {
io.to(data.receiver).emit('ok we connect', {sender : data.sender});
});
//sdp 消息的转发
socket.on( 'sdp', ( data ) => {
console.log('sdp');
console.log(data.description);
//console.log('sdp: ' + data.sender + ' to:' + data.to);
socket.to( data.to ).emit( 'sdp', {
description: data.description,
sender: data.sender
} );
} );
//candidates 消息的转发
socket.on( 'ice candidates', ( data ) => {
console.log('ice candidates: ');
console.log(data);
socket.to( data.to ).emit( 'ice candidates', {
candidate: data.candidate,
sender: data.sender
} );
} );
});
/*
1.呼叫者通过 navigator.mediaDevices.getUserMedia() (en-US) 捕捉本地媒体。
2.呼叫者创建一个RTCPeerConnection 并调用 RTCPeerConnection.addTrack() (注: addStream 已经过时。)
3.呼叫者调用 ("RTCPeerConnection.createOffer()")来创建一个提议(offer).
4.呼叫者调用 ("RTCPeerConnection.setLocalDescription()") 将提议(Offer) 设置为本地描述 (即,连接的本地描述).
5.setLocalDescription()之后, 呼叫者请求 STUN 服务创建ice候选(ice candidates)
6.呼叫者通过信令服务器将提议(offer)传递至 本次呼叫的预期的接受者.
7.接受者收到了提议(offer) 并调用 ("RTCPeerConnection.setRemoteDescription()") 将其记录为远程描述 (也就是连接的另一端的描述).
8.接受者做一些可能需要的步骤结束本次呼叫:捕获本地媒体,然后通过RTCPeerConnection.addTrack()添加到连接中。
9.接受者通过("RTCPeerConnection.createAnswer()")创建一个应答。
10.接受者调用 ("RTCPeerConnection.setLocalDescription()") 将应答(answer) 设置为本地描述. 此时,接受者已经获知连接双方的配置了.
11.接受者通过信令服务器将应答传递到呼叫者.
12.呼叫者接受到应答.
13.呼叫者调用 ("RTCPeerConnection.setRemoteDescription()") 将应答设定为远程描述. 如此,呼叫者已经获知连接双方的配置了.
*/
http.listen(3000,()=>{
console.log('listening on *:3000')
});
https.listen(3001,()=>{
console.log("https listen on *:3001");
});
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。