Ошибка сигнализации при выполнении однорангового соединения с использованием WebRTC - PullRequest
0 голосов
/ 12 ноября 2018

Я пытался заставить мое одноранговое соединение работать для моего приложения, как показано на рисунке ниже:

console log

Как вы можете видеть, онопоказывает, что одноранговое соединение произошло, но произошла некоторая ошибка несовместимости, которая может быть связана с adapter.js , показанным на следующем рисунке.

error log

Был бы благодарен, если бы кто-нибудь знал, как это исправить, спасибо!

Я также добавил код, который я использую через pastebin для вашего просмотра.https://pastebin.com/WHCugjig

'use strict';

var localStream;
var remoteStream;
var pc;
var isInitiator;

var pcConfig = {
  iceServers: [
    {
      urls: 'stun:stun.l.google.com:19302'
    }
  ]
};

// Define action buttons.
const callButton = document.getElementById('callButton');
const hangupButton = document.getElementById('hangupButton');

/////////////////////////////////////////////

var socket = io.connect();

var room = prompt('Enter room name:');

socket.emit('create or join', room);

socket.on('created', function(room) {
  console.log('Created room ' + room);
  isInitiator = true;
  startVideo();
});

socket.on('created', function(room) {
  isInitiator = false;
  startVideo();
  createPeerConnection(isInitiator);
});

////////////////////////////////////////////////

function sendMessage(message) {
  socket.emit('message', message);
}

// This client receives a message
socket.on('message', function(message) {
  if (message.type === 'offer') {
    pc.setRemoteDescription(
      new RTCSessionDescription(message),
      function() {},
      onCreateSessionDescriptionError
    );
    pc.createAnswer(setLocalAndSendMessage, onCreateSessionDescriptionError);
  } else if (message.type === 'answer') {
    pc.setRemoteDescription(
      new RTCSessionDescription(message),
      function() {},
      onCreateSessionDescriptionError
    );
  } else if (message.type === 'candidate') {
    pc.addIceCandidate(
      new RTCIceCandidate({
        candidate: message.candidate
      })
    );
  }
});

////////////////////////////////////////////////////

var localVideo = document.querySelector('#localVideo');
var remoteVideo = document.querySelector('#remoteVideo');

// Set up initial action buttons status: disable call and hangup.
callButton.disabled = true;
hangupButton.disabled = true;

// Add click event handlers for buttons.
callButton.addEventListener('click', callStart);
hangupButton.addEventListener('click', hangupCall);

function startVideo() {
  navigator.mediaDevices
    .getUserMedia({
      audio: true,
      video: true
    })
    .then(gotStream)
    .catch(function(e) {
      alert('getUserMedia() error: ' + e.name);
    });
}

function gotStream(stream) {
  try {
    localVideo.srcObject = stream;
  } catch (error) {
    localVideo.src = window.URL.createObjectURL(stream);
  }
  localStream = stream;
  callButton.disabled = false;
}

function callStart() {
  createPeerConnection();
  pc.addStream(localStream);
  callButton.disabled = true;
  hangupButton.disabled = false;
  pc.createOffer(setLocalAndSendMessage, handleCreateOfferError);
}

/////////////////////////////////////////////////////////

function createPeerConnection() {
  try {
    pc = new RTCPeerConnection(null);
    pc.onicecandidate = function(event) {
      console.log('icecandidate event:', event);
      if (event.candidate) {
        sendMessage({
          type: 'candidate',
          label: event.candidate.sdpMLineIndex,
          id: event.candidate.sdpMid,
          candidate: event.candidate.candidate
        });
      } else {
        console.log('End of candidates.');
      }
    };
    pc.ontrack = handleRemoteStreamAdded;
    console.log('Created RTCPeerConnnection');
  } catch (e) {
    console.log('Failed to create PeerConnection, exception: ' + e.message);
    alert('Cannot create RTCPeerConnection object.');
    return;
  }
}

function handleRemoteStreamAdded(event) {
  console.log('Remote stream added.');
  try {
    remoteVideo.srcObject = event.stream;
  } catch (error) {
    remoteVideo.src = window.URL.createObjectURL(event.stream);
  }
  remoteStream = event.stream;
}

function setLocalAndSendMessage(sessionDescription) {
  pc.setLocalDescription(sessionDescription);
  console.log('setLocalAndSendMessage sending message', sessionDescription);
  sendMessage(sessionDescription);
}

function handleCreateOfferError(event) {
  console.log('createOffer() error: ', event);
}

function onCreateSessionDescriptionError(error) {
  console.log('Failed to create session description: ' + error.toString());
}

function hangupCall() {
  pc.close();
  pc = null;
}

1 Ответ

0 голосов
/ 12 ноября 2018

Без работающей версии сервера сигнализации это несколько сложно отладить. Во всяком случае ...

Вы вызываете setLocalAndSendMessage в соответствии с журналом отладки. Затем дважды появляется ошибка «Не удалось создать описание сеанса», которая предполагает, что вызывается код для получения сообщения с типом = предложение. Теперь, почему это происходит, зависит от вашего сервера сигнализации.

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