WebRTC - SDP не соответствует ранее сгенерированному SDP для этого типа - PullRequest
0 голосов
/ 08 мая 2019

Я создаю видео-чат один-к-одному с WebRTC и Socket.io (с Node.JS), и эта ошибка остановила меня enter image description here

когда я захожу в чат, я вижу себя (отображается локальное видео), но не могу получить удаленное видео

так как на это не так много ресурсов, и я новичок, я решил приехать сюда потому что я не могу найти ошибку

так вот код:

WebRTC:

//i have declared pc and pc2 before like let pc; let pc2;
function onSuccess() {};
function onError(error) {
  console.log(error.message);
};

function startWebRTC(isOfferer) {
  pc = new RTCPeerConnection(configuration);
  pc2 = new RTCPeerConnection(configuration)

  pc.onicecandidate = event => {
    if (event.candidate) {
      socket.emit('candidate', {
        candidate: event.candidate
      });
    }
  };

  if (isOfferer) {
    pc.onnegotiationneeded = () => {
      pc.createOffer().then(localDescCreated).catch(onError);
    }
  }

  pc.ontrack = event => {
    const stream = event.streams[0];
    if (!remoteVideo.srcObject || remoteVideo.srcObject.id !== stream.id) {
      remoteVideo.srcObject = stream;
    }
  };

 navigator.mediaDevices.getUserMedia({
    audio: true,
    video: true,
  }).then(stream => {
    localVideo.srcObject = stream;
    stream.getTracks().forEach(track => pc.addTrack(track, stream));
  }, onError);

  socket.on('data', (data) => {
    if (socket.id === data.id) {
      return;
    }
    if (data.sdp) {
      pc2.setRemoteDescription(new RTCSessionDescription(data.sdp), () => {
        if (pc2.remoteDescription.type === 'offer') {
          pc2.createAnswer().then(localDescCreated).catch(err => {
            console.log(err.message)
          });
        }
      }, onError);
    } else if (data.candidate) {
      pc2.addIceCandidate(
        new RTCIceCandidate(data.candidate), onSuccess, onError
      );
    }
  });
}

function localDescCreated(desc) {
 pc.setLocalDescription(
    desc,
    () => socket.emit('sdp', {
      sdp: pc.localDescription
    }),
    onError
  );
}

Socket.io:

//room number is incremented when number of users reach to 2 

 socket.on('candidate', (data)=>{
     socket.broadcast.to(socket.current_vidroom).emit('data', {candidate: 
 data.candidate, id: socket.id})
 })

  socket.on('sdp', (data)=>{
      socket.broadcast.to(socket.current_vidroom).emit('data', {sdp: 
  data.sdp, id: socket.id})
  })

1 Ответ

0 голосов
/ 09 мая 2019

Ваш код использует onnegotiationneeded, у которого, как известно, есть ошибки в Chrome <= 74. Если он работает в Chrome 75 (бета-версия в настоящее время) и Firefox, что является причиной. Вы можете переключиться на эти браузеры или вызвать createOffer самостоятельно после вызова addTrack. </p>

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