问题描述
下面是服务器端的代码
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const { v4: uuidV4} = require('uuid');
app.set('view engine','ejs');
app.use(express.static('public'));
app.get('/',(req,res)=>{
res.redirect(`/${uuidV4()}`);
});
app.get('/:room',res)=>{
console.log(req.params);
res.render('room',{roomId: req.params.room});
})
io.on('connection',socket =>{
socket.on('join-room',(roomId,userId)=>{
socket.join(roomId);
socket.to(roomId).broadcast.emit('user-connected',userId)
})
})
server.listen(3000)
现在,客户端javascript代码
const socket = io('/')
const videoGrid = document.getElementById('video-grid')
const myPeer = new Peer(undefined,{
host: '/',port: '3001'
})
const myVideo = document.createElement('video')
myVideo.muted = true
const peers = {}
navigator.mediaDevices.getUserMedia({
video: true,audio: true
}).then(stream => {
addVideoStream(myVideo,stream)
myPeer.on('call',call => {
call.answer(stream)
const video = document.createElement('video')
call.on('stream',userVideoStream => {
addVideoStream(video,userVideoStream)
})
})
socket.on('user-connected',userId => {
connectToNewUser(userId,stream)
})
})
socket.on('user-disconnected',userId => {
if (peers[userId]) peers[userId].close()
})
myPeer.on('open',id => {
socket.emit('join-room',ROOM_ID,id)
})
function connectToNewUser(userId,stream) {
const call = myPeer.call(userId,stream)
const video = document.createElement('video')
call.on('stream',userVideoStream => {
addVideoStream(video,userVideoStream)
})
call.on('close',() => {
video.remove()
})
peers[userId] = call
}
function addVideoStream(video,stream) {
video.srcObject = stream
video.addEventListener('loadedMetadata',() => {
video.play()
})
videoGrid.append(video)
}
此后,我无法在两个用户之间建立连接。 我正在使用peerjs库连接电话 服务器在端口3000上运行 而对等节点的运行速度为3001
我正在跟踪一个来自youTube频道webdevsimplified的视频 https://www.youtube.com/watch?v=DvlyzDZDEq4
解决方法
我在 socket.emit 的第 22 行删除了“broadcast”
io.on('connection',socket =>{
socket.on('join-room',(roomId,userId)=>{
socket.join(roomId);
socket.to(roomId).emit('user-connected',userId) //here
})
})
然后我在第二个终端运行
peerjs --port 3001,它工作正常:)
p.s 我的 socket.io 版本在服务器端是“^4.0.0”
,在一个终端上尝试peerjs --port 3001,然后在另一个终端上启动服务器。如果不是这种情况,请详细说明正在发生的事情。
,我认为您可以删除 Peer 配置,因此它只是 const myPeer = new Peer()
它不喜欢new Peer(undefined)