socket.io не работает с простым peer - PullRequest
0 голосов
/ 14 мая 2019

Я готов построить видеочат с одним глазу на Socket.io & Simple-Peer, а для алгоритма один на один я использовал комнаты socket.io.но это не работает, поэтому я запутался.до этого у меня был алгоритм, который работал без комнат, но работал только для 2 человек, и если третий пытался подключиться, он получал сообщение «ожидание».в моем текущем алгоритме «имя» комнаты - это число.если в комнате только один пользователь, то он генерирует специальное событие, а когда второй подключается, «имя» комнаты увеличивается, а третий пользователь попадает в комнату «2» и .... вот мой код:

На стороне сервера:

vchns.on('connection', async function(socket){
try{
  let room = vnumb;
  socket.join(room);
  socket.current_vroom = room
  vchns.in(room).clients((err,clients)=>{
    if(err) console.log(err);

    if(clients.length < 2){
      if(clients.length == 1){
      socket.emit('CreatePeer')
      }
    }
    if(clients.length >= 2){
      ++vnumb
    }
  })


  socket.on('Offer', SendOffer);
  socket.on('Answer', SendAnswer);


  function SendOffer(offer){
    socket.broadcast.in(socket.current_vroom).emit('BackOffer', offer);
  }

  function SendAnswer(data){
    socket.broadcast.in(socket.current_vroom).emit('BackAnswer', data);
  }
}catch(err){
  console.log(err.message)
 }
})

На стороне клиента:

let client = {}

navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(stream=>{
localVideo.srcObject = stream;
localVideo.play();

function initPeer(type){
 let peer = new Peer({initiator: (type == 'init')? true : false, stream: stream, trickle: false});
peer.on('stream', (stream)=>{
  CreateVideo(stream)
})

return peer;
}

function MakePeer(){
   client.gotAnswer = false;
   let peer = initPeer('init');
   peer.on('signal', function(data){
     if(!client.gotAnswer){
         socket.emit('Offer', data)
     }
 })
 client.peer = peer
}

  function FrontAnswer(offer){
    let peer = initPeer('notInit');
    peer.on('signal', (data)=>{
    socket.emit('Answer', data);
  })
 peer.signal(offer)
}

   function SignalAnswer(answer){
     client.gotAnswer = true;
     let peer = client.peer;
     peer.signal(answer)
   }

   function CreateVideo(stream){
     let video = document.createElement('video');
     video.id = 'remoteVideo';
     video.srcObject = stream;
     document.querySelector('#remoteVideoDiv').appendChild(video);
     video.play()
   }
  socket.on('BackOffer', FrontAnswer)
  socket.on('BackAnswer', SignalAnswer);
  socket.on('CreatePeer', MakePeer)
})
.catch(err=>{
console.log(err.message)
})

что не так?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...