Rah*_*hul 5 node.js webrtc reactjs peerjs
我只是在 NodeJs 和 ReactJs 中创建peerjs 视频流应用程序
下面的代码工作正常,我能够创建新的对等点,并且open事件也正常工作。
const peer = new Peer(undefined,{
host:"/",
port:"5001"
});
peer.on('open',id=>{
socket.emit('join-room', roomId,id);
})
Run Code Online (Sandbox Code Playgroud)
在服务器端,每当'join-room'发出事件时,服务器都会发出另一个事件'user-disconnected'并传递userId (peerjs)给客户端。
// server.js
socket.on('join-room',(roomId,userId)=>{
console.log(`user ${userId} joined ${roomId}`);
socket.join(roomId);
socket.to(roomId).emit('user-connected',userId);
socket.on('disconnect', () => {
socket.to(roomId).emit('user-disconnected', userId)
})
})
Run Code Online (Sandbox Code Playgroud)
每当 'user-connected'在客户端触发时,我都会打电话connectToNewUser,到目前为止一切正常。
socket.on('user-connected',userId=>{
console.log("New user connected...")
connectToNewUser(userId, stream)
});
Run Code Online (Sandbox Code Playgroud)
这是登录控制台console.log('connectToNewUser',1222.....)没有错误。
但是,这call.on('stream')从来没有被称为
connectToNewUser(userId, stream) {
console.log('connectToNewUser',userId)
const call = peer.call(userId, stream);
const video = getVideo();
call.on('stream', userVideoStream => {
// never called
console.log('connectToNewUser','on','stream')
addVideoStream(video, userVideoStream)
});
call.on('close', () => {
video.remove()
})
peers[userId] = call
}
Run Code Online (Sandbox Code Playgroud)
call.on('stream')从未被调用的原因是peer.on('call')从未被调用。
peer.on('call', call => {
// never called
console.log('This peer is being called...');
call.answer(stream)
const video = getVideo();
call.on('stream', userVideoStream => {
console.log('This peer is being called...on-stream...');
addVideoStream(video, userVideoStream)
})
});
Run Code Online (Sandbox Code Playgroud)
您的代码的唯一问题是,您在客户端上初始化 peer.on("call") 事件之前从服务器发出用户连接的事件,这最终导致新客户端错过该事件。最好的解决方案是在初始化peer.on("call",...) 事件后发出一个ready 事件。
peer.on('call', call => {
console.log('This peer is being called...');
call.answer(stream)
const video = getVideo();
call.on('stream', userVideoStream => {
console.log('This peer is being called...on-stream...');
addVideoStream(video, userVideoStream)
})})
socket.emit("ready")`
Run Code Online (Sandbox Code Playgroud)
然后在服务器端调用“ready”事件监听器内的“user-connected”广播事件:
socket.on('join-room',(roomId,userId)=>{
console.log(`user ${userId} joined ${roomId}`);
socket.join(roomId);
socket.on('ready',()=>{
socket.broadcast.to(roomId).emit('user-connected',userId);
})
socket.on('disconnect', () => {
socket.to(roomId).emit('user-disconnected', userId)
})})
Run Code Online (Sandbox Code Playgroud)
这将在客户端准备好接收 peer.on("call"....) 事件后广播用户连接的事件
| 归档时间: |
|
| 查看次数: |
4570 次 |
| 最近记录: |