- From: Bernard Aboba <Bernard.Aboba@microsoft.com>
- Date: Fri, 12 Jun 2015 22:02:22 +0000
- To: "public-ortc@w3.org" <public-ortc@w3.org>
- Message-ID: <BLUPR03MB1498B20264BE1644B0F1058ECBB0@BLUPR03MB149.namprd03.prod.outlook.com>
Robin Raymond said: "Sample code please (in RTCIceGatherer)..." [BA] How about this for an example in Section 2.9? EXAMPLE 1 // Example to demonstrate use of RTCIceCandidateComplete // Include some helper functions import "helper.js"; // Create ICE gather options var gatherOptions = new RTCIceGatherOptions(); gatherOptions.gatherPolicy = RTCIceGatherPolicy.relay; gatherOptions.iceservers = [ { urls: "stun:stun1.example.net" } , { urls:"turn:turn.example.org", username: "user", credential:"myPassword"} ]; // Create ICE gatherer objects var iceGatherer = new RTCIceGatherer(gatherOptions); // Handle state changes iceGatherer.ongathererstatechange = function (event) { myIceGathererStateChange('iceGatherer', event.state); }; // Prepare to signal local candidates iceGatherer.onlocalcandidate = function (event) { mySendLocalCandidate(event.candidate); }; // Set up response function mySignaller.onResponse = function(responseSignaller,response) { // We may get N responses // // Create the ICE transport var iceTransport = new RTCIceTransport(iceGatherer); iceTransport.onicestatechange = function(event){ myIceTransportStateChange('iceTransport', event.state); }; // Start the ICE transport so that outgoing ICE connectivity checks can begin iceTransport.start(iceGatherer, response.ice, RTCIceRole.controlling); // Prepare to add ICE candidates signalled by the remote peer responseSignaller.onRemoteCandidate = function(remote) { iceTransport.addRemoteCandidate(remote.candidate); }; }; mySignaller.send({ "ice": iceGatherer.getLocalParameters(), }); // ... setup DTLS, RTP, SCTP, etc. EXAMPLE 2 // Helper functions (helper.js) function trace(text) { // This function is used for logging. if (text[text.length - 1] === '\n') { text = text.substring(0, text.length - 1); } if (window.performance) { var now = (window.performance.now() / 1000).toFixed(3); console.log(now + ': ' + text); } else { console.log(text); } } function errorHandler (error) { trace('Error encountered: ' + error.name); } function mySendLocalCandidate(candidate, component, kind){ // Set default values kind = kind || "all"; component = component || RTCIceComponent.RTP; mySignaller.mySendLocalCandidate({ "candidate": candidate, "kind": kind, "component": component }); } function myIceGathererStateChange(name, state){ switch(state){ case RTCIceGathererState.new: trace('IceGatherer: ' + name + ' Has been created'); break; case RTCIceGathererState.gathering: trace('IceGatherer: ' + name + ' Is gathering candidates'); break; case RTCIceGathererState.complete: trace('IceGatherer: ' + name + ' Has finished gathering (for now)'); break; case RTCIceGathererState.closed: trace('IceGatherer: ' + name + ' Is closed'); break; default: trace('IceGatherer: ' + name + ' Invalid state'); } } function myIceTransportStateChange(name, state){ switch(state){ case RTCIceTransportState.new: trace('IceTransport: ' + name + ' Has been created'); break; case RTCIceTransportState.checking: trace('IceTransport: ' + name + ' Is checking'); break; case RTCIceTransportState.connected: trace('IceTransport: ' + name + ' Is connected'); break; case RTCIceTransportState.disconnected: trace('IceTransport: ' + name + ' Is disconnected'); break; case RTCIceTransportState.completed: trace('IceTransport: ' + name + ' Has finished checking (for now)'); break; case RTCIceTransportState.failed: trace('IceTransport: ' + name + ' Has failed'); break; case RTCIceTransportState.closed: trace('IceTransport: ' + name + ' Is closed'); break; default: trace('IceTransport: ' + name + ' Invalid state'); } }
Received on Friday, 12 June 2015 22:02:52 UTC