var rtc_configuration = {iceServers: [{urls: "stun:stun.services.mozilla.com"},
{urls: "stun:stun.l.google.com:19302"}]};
var ws_conn;
+// Promise for local stream after constraints are approved by the user
var local_stream;
var peer_id;
if (sdp.type != "offer")
return;
setStatus("Got SDP offer, creating answer");
- peer_connection.createAnswer().then(onLocalDescription).catch(setStatus);
+ local_stream.then((stream) => {
+ peer_connection.createAnswer()
+ .then(onLocalDescription).catch(setStatus);
+ }).catch(errorUserMediaHandler);
}).catch(setStatus);
}
window.setTimeout(websocketServerConnect, 3000);
}
+function getLocalStream() {
+ var constraints = {video: true, audio: true};
+
+ // Add local stream
+ if (navigator.mediaDevices.getUserMedia) {
+ return navigator.mediaDevices.getUserMedia(constraints);
+ } else {
+ errorUserMediaHandler();
+ }
+}
+
function websocketServerConnect() {
connect_attempts++;
if (connect_attempts > 3) {
ws_conn.addEventListener('error', onServerError);
ws_conn.addEventListener('message', onServerMessage);
ws_conn.addEventListener('close', onServerClose);
-
- var constraints = {video: true, audio: true};
-
- // Add local stream
- if (navigator.mediaDevices.getUserMedia) {
- navigator.mediaDevices.getUserMedia(constraints)
- .then((stream) => { local_stream = stream })
- .catch(errorUserMediaHandler);
- } else {
- errorUserMediaHandler();
- }
}
function onRemoteStreamAdded(event) {
peer_connection = new RTCPeerConnection(rtc_configuration);
peer_connection.onaddstream = onRemoteStreamAdded;
/* Send our video/audio to the other peer */
- peer_connection.addStream(local_stream);
+ local_stream = getLocalStream().then((stream) => {
+ console.log('Adding local stream');
+ peer_connection.addStream(stream);
+ }).catch(errorUserMediaHandler);
if (!msg.sdp) {
console.log("WARNING: First message wasn't an SDP message!?");