2016-05-17 128 views
0

在我client.js文件我有以下...的WebRTC错误未定义配置

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

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

+0

你是对的,但现在我得到另一个错误'TypeError:没有足够的参数RTCPeerConnection.setRemoteDescription.' – Bolboa

+0

你遗漏了错误处理程序作为参数... – mido

+0

我明白了。这对我来说很混乱。我正在查看的API文档不包含错误处理程序 – Bolboa