Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

543
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

0

Aquí, el objeto Peer se crea antes de que Camera y/o Mic estén listos para usarse.

 navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => { //peer.on('call') })

peer.on('call') será implementado por el navegador solo una vez getUserMedia() termine de ejecutarse.

El problema es que está recibiendo un evento de llamada, pero todavía no hay un controlador listo para manejar ese evento. La mejor solución sería unirse a la sala una vez que los medios estén listos para usar.

 navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => { const myPeer = new Peer(undefined, { host: '/', port: '3001' }) myPeer.on('open', id => { socket.emit('join-room', ROOM_ID, id) }) myPeer.on('call', call => { }) })
over 4 years ago · Santiago Trujillo Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda