webRTC错误未定义配置

时间:2016-05-17 03:05:09

标签: javascript websocket webrtc p2p

我的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);

...抛出错误。有什么理由为什么?

1 个答案:

答案 0 :(得分:1)

这是正常的范围问题,你已经在window.onload匿名函数中声明了变量并试图直接在其他函数中访问它,从而导致错误。