Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

300
Vistas
peer.on('calll') nunca se llama

Peer js no funciona

Solo estoy creando la aplicación de transmisión de video peerjs en NodeJs y ReactJs


El siguiente código funciona bien, puedo crear un nuevo par y el evento open también funciona.

 const peer = new Peer(undefined,{ host:"/", port:"5001" }); peer.on('open',id=>{ socket.emit('join-room', roomId,id); })

En el lado del servidor, siempre que se emita el evento 'join-room' , el servidor emitirá otro evento 'user-disconnected' y pasará el ID de userId (peerjs) al cliente.

 // 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) }) })

Cada vez que se activa 'user-connected' en el lado del cliente, llamo a connectToNewUser y hasta esto funciona bien.

 socket.on('user-connected',userId=>{ console.log("New user connected...") connectToNewUser(userId, stream) });

Error

Esto se está registrando en la consola console.log('connectToNewUser',1222.....) no hay ningún error.

Pero, esta call.on('stream') nunca se llama

 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 }

La razón por la que call.on('stream') nunca se llama es peer.on('call') nunca se llama.

 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) }) });

repositorio de Github

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

También tuve el mismo problema, después de pasar por más de 10 soluciones en StackOverflow, esto es lo que sugiero.

connectToNewUser() se activa antes de que el usuario haya terminado la promesa del navegador.

Intenta modificar esto:

 socket.on('user-connected',userId=>{ console.log("New user connected...") //connectToNewUser(userId, stream) setTimeout(connectToNewUser,1000,userId,stream) });

Funcionó para mí.

over 4 years ago · Santiago Trujillo Denunciar

0

El único problema con su código es que está emitiendo un evento conectado al usuario desde el servidor antes de inicializar el evento peer.on ("llamada") en el cliente, lo que eventualmente hace que el nuevo cliente pierda este evento. La mejor solución para esto es emitir un evento listo después de inicializar el evento peer.on("call",...).

 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")`

Y luego, en el lado del servidor, llame al evento de transmisión "conectado por el usuario" dentro del oyente para el evento "listo":

 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) })})

Esto transmitirá el evento conectado al usuario después de que el cliente esté listo para recibir el evento peer.on("call". .. .)

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que tu código es algo como esto.

 const peer = new Peer(undefined,{host:"/",port:"5001"}) peer.on('open',id=>{ socket.emit('join-room', roomId,id) }) navigator.mediaDevices.getUserMedia({ video : true, audio : true }).then( stream => { socket.on('user-connected',userId=>{ // call the new user and send our stream }); peer.on('call',call=>{ // pick up the call and send our stream }) })

cada vez que un nuevo cliente se une, se crea un nuevo objeto par después de lo cual el socket emite join-room y el servidor transmite el user-connected a todos los demás clientes

así que ahora, cuando el nuevo usuario se une, se llama a la función user-connected de todos los demás clientes en la que todos los demás clientes llaman al nuevo cliente.

una cosa clave a tener en cuenta es que navigator.mediaDevices.getUserMedia(video : true,audio : true}) lleva algún tiempo

Entonces, cuando un nuevo cliente se une a todos los demás clientes, llame instantáneamente al nuevo cliente, pero la función para atender la llamada, es decir peer.on('call',call=>{}) puede no estar definida todavía en el nuevo cliente, por eso el nuevo cliente no responde porque todavía está configurando su transmisión de video

para solucionar esto, debe unirse a la sala después de configurar la transmisión de video, así que algo como esto

 navigator.mediaDevices.getUserMedia({ video : true, audio : true }).then( stream => { const peer = new Peer(undefined,{host:"/",port:"5001"}) peer.on('open',id=>{ socket.emit('join-room', roomId,id) }) socket.on('user-connected',userId=>{ // call the new user and send our stream }); peer.on('call',call=>{ // pick up the call and send our stream }) })
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda