我的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);
...抛出错误。有什么理由为什么?
答案 0 :(得分:1)
这是正常的范围问题,你已经在window.onload
匿名函数中声明了变量并试图直接在其他函数中访问它,从而导致错误。