diff --git a/html5/verto/js/src/jquery.FSRTC.js b/html5/verto/js/src/jquery.FSRTC.js index 52c99a9921..814fdfa3a8 100644 --- a/html5/verto/js/src/jquery.FSRTC.js +++ b/html5/verto/js/src/jquery.FSRTC.js @@ -29,11 +29,6 @@ * */ - -var iceTimerSent = 0; -var iceTimerCompleted = 0; -var iceTimer; - (function($) { // Find the line in sdpLines that starts with |prefix|, and, if specified, @@ -536,7 +531,7 @@ var iceTimer; self.constraints.mandatory.OfferToReceiveVideo = false; } } - + self.peer = RTCPeerConnection({ type: self.type, attachStream: self.localStream, @@ -604,12 +599,13 @@ var iceTimer; window.moz = !!navigator.mozGetUserMedia; function RTCPeerConnection(options) { + var gathering = false, done = false; var w = window, PeerConnection = w.mozRTCPeerConnection || w.webkitRTCPeerConnection, SessionDescription = w.mozRTCSessionDescription || w.RTCSessionDescription, IceCandidate = w.mozRTCIceCandidate || w.RTCIceCandidate; - + var STUN = { url: !moz ? 'stun:stun.l.google.com:19302' : 'stun:23.21.150.121' }; @@ -655,104 +651,74 @@ var iceTimer; openOffererChannel(); var x = 0; - peer.onicecandidate = function(event) { - if (event.candidate) { - options.onICE(event.candidate); - clearTimeout(iceTimer); - iceTimer = setTimeout(function() { - iceTimerSent = 1; + function ice_handler() { - if (iceTimerCompleted == 0) { + done = true; + gathering = null; - if (options.onICEComplete) { - options.onICEComplete(); - } - - if (options.type == "offer") { - /* new mozilla now tries to be like chrome but it takes them 10 seconds to complete the ICE - Booooooooo! This trickle thing is a waste of time...... We'll all have to re-code our engines - to handle partial setups to maybe save 100m - */ - if ((!moz || (!options.sentICESDP && peer.localDescription.sdp.match(/a=candidate/)) && !x && options.onICESDP)) { - options.onICESDP(peer.localDescription); - //x = 1; - /* - x = 1; - peer.createOffer(function(sessionDescription) { - sessionDescription.sdp = serializeSdp(sessionDescription.sdp); - peer.setLocalDescription(sessionDescription); - if (options.onICESDP) { - options.onICESDP(sessionDescription); - } - }, onSdpError, constraints); - */ - } - } else { - if (!x && options.onICESDP) { - options.onICESDP(peer.localDescription); - //x = 1; - /* - x = 1; - peer.createAnswer(function(sessionDescription) { - sessionDescription.sdp = serializeSdp(sessionDescription.sdp); - peer.setLocalDescription(sessionDescription); - if (options.onICESDP) { - options.onICESDP(sessionDescription); - } - }, onSdpError, constraints); - */ - } - } - } - }, 1000); - } else { - if (iceTimerSent == 0) { - clearTimeout(iceTimer); - iceTimerCompleted = 1; - - if (options.onICEComplete) { - options.onICEComplete(); - } - - if (options.type == "offer") { - /* new mozilla now tries to be like chrome but it takes them 10 seconds to complete the ICE - Booooooooo! This trickle thing is a waste of time...... We'll all have to re-code our engines - to handle partial setups to maybe save 100m - */ - if ((!moz || (!options.sentICESDP && peer.localDescription.sdp.match(/a=candidate/)) && !x && options.onICESDP)) { - options.onICESDP(peer.localDescription); - //x = 1; - /* - x = 1; - peer.createOffer(function(sessionDescription) { - sessionDescription.sdp = serializeSdp(sessionDescription.sdp); - peer.setLocalDescription(sessionDescription); - if (options.onICESDP) { - options.onICESDP(sessionDescription); - } - }, onSdpError, constraints); - */ - } - } else { - if (!x && options.onICESDP) { - options.onICESDP(peer.localDescription); - //x = 1; - /* - x = 1; - peer.createAnswer(function(sessionDescription) { - sessionDescription.sdp = serializeSdp(sessionDescription.sdp); - peer.setLocalDescription(sessionDescription); - if (options.onICESDP) { - options.onICESDP(sessionDescription); - } - }, onSdpError, constraints); - */ - } - } - } + if (options.onICEComplete) { + options.onICEComplete(); } + + if (options.type == "offer") { + if ((!moz || (!options.sentICESDP && peer.localDescription.sdp.match(/a=candidate/)) && !x && options.onICESDP)) { + options.onICESDP(peer.localDescription); + //x = 1; + /* + x = 1; + peer.createOffer(function(sessionDescription) { + sessionDescription.sdp = serializeSdp(sessionDescription.sdp); + peer.setLocalDescription(sessionDescription); + if (options.onICESDP) { + options.onICESDP(sessionDescription); + } + }, onSdpError, constraints); + */ + } + } else { + if (!x && options.onICESDP) { + options.onICESDP(peer.localDescription); + //x = 1; + /* + x = 1; + peer.createAnswer(function(sessionDescription) { + sessionDescription.sdp = serializeSdp(sessionDescription.sdp); + peer.setLocalDescription(sessionDescription); + if (options.onICESDP) { + options.onICESDP(sessionDescription); + } + }, onSdpError, constraints); + */ + } + } + } + + peer.onicecandidate = function(event) { + + if (done) { + return; + } + + if (!gathering) { + gathering = setTimeout(ice_handler, 1000); + } + + if (event) { + if (event.candidate) { + options.onICE(event.candidate); + } + } else { + done = true; + + if (gathering) { + clearTimeout(gathering); + gathering = null; + } + + ice_handler(); + } }; - + // attachStream = MediaStream; if (options.attachStream) peer.addStream(options.attachStream);