webRTC错误未定义的配置

webRTC error undefined configuration

我的 client.js 文件中有以下内容...

window.onload = function() {


  var peerConnection;
  var peerConnectionConfig = {
    'iceServers': [{
      'url': 'stun:stun.services.mozilla.com'
    }, {
      'url': 'stun:stun.l.google.com:19302'
    }]
  };

  navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
  window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
  window.RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate || window.webkitRTCIceCandidate;
  window.RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription || window.webkitRTCSessionDescription;


  var video = document.getElementById("video");
  var remote = document.getElementById("remoteVideo");
  var cameraStream = "";

  serverConnection = new WebSocket('ws://127.0.0.1:3434');
  serverConnection.onmessage = gotMessageFromServer;


  serverConnection.onmessage = gotMessageFromServer;

  var constraints = {
    video: true,
    audio: false,
  };

  if (navigator.getUserMedia) {
    navigator.getUserMedia(constraints, getUserMediaSuccess, getUserMediaError);
  } else {
    alert('Your browser does not support getUserMedia API');
  }



}

function getUserMediaSuccess(stream) {
  localStream = stream;
  video.src = window.URL.createObjectURL(stream);
}

function getUserMediaError(error) {
  console.log(error);
}

function connect() {
  start(true);
}



function start(isCaller) {

  peerConnection = new RTCPeerConnection(peerConnectionConfig);
  peerConnection.onicecandidate = gotIceCandidate;
  peerConnection.onaddstream = gotRemoteStream;
  peerConnection.addStream(localStream);

  if (isCaller) {
    peerConnection.createOffer(gotDescription, createOfferError);
  }
}

function gotDescription(description) {
  console.log('got description');
  peerConnection.setLocalDescription(description, function() {
    serverConnection.send(JSON.stringify({
      'sdp': description
    }));
  }, function() {
    console.log('set description error')
  });
}

function gotIceCandidate(event) {
  if (event.candidate != null) {
    serverConnection.send(JSON.stringify({
      'ice': event.candidate
    }));
  }
}

function gotRemoteStream(event) {
  console.log("got remote stream");
  remote.src = window.URL.createObjectURL(event.stream);
}

function createOfferError(error) {
  console.log(error);
}

function gotMessageFromServer(message) {
  if (!peerConnection) start(false);


  var signal = JSON.parse(message.data);
  if (signal.sdp) {
    peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp), function() {
      peerConnection.createAnswer(gotDescription, createAnswerError);
    });
  } else if (signal.ice) {
    peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice));
  }
}

我得到的错误是client.js:60 Uncaught ReferenceError: peerConnectionConfig is not defined

我在顶部定义了peerConnectionConfig,如图...

var peerConnectionConfig = {'iceServers': [{'url': 'stun:stun.services.mozilla.com'}, {'url': 'stun:stun.l.google.com:19302'}]};

并且 start(isCaller) 在按下按钮时被调用,然后转到这一行...

peerConnection = new RTCPeerConnection(peerConnectionConfig);

...引发错误。有什么原因吗?

这是正常的作用域问题,您在 window.onload 匿名函数中声明了变量并试图在其他函数中直接访问它,因此出现错误。