canvas_demo.html [82:201]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function log(msg) { logarea.innerHTML = "

" + msg + "

" + logarea.innerHTML; } function failed(code) { log("Failure callback: " + JSON.stringify(code)); } function logReset() { logarea.innerHTML = ""; } // pc1.createOffer finished, call pc1.setLocal function step1(offer) { log("Offer: " + sdpPrettyPrint(offer.sdp)); pc1_offer = offer; pc1.setLocalDescription(offer, step2, failed); } // replace CR NL with HTML breaks function sdpPrettyPrint(sdp) { return sdp.replace(/[\r\n]+/g, '
'); } // pc1.setLocal finished, call pc2.setRemote function step2() { pc1.onicecandidate = function(obj) { if (obj.candidate) { log("pc1 found ICE candidate: " + JSON.stringify(obj.candidate)); pc2.addIceCandidate(obj.candidate); } else { log("pc1 got end-of-candidates signal"); } } pc2.setRemoteDescription(pc1_offer, step3, failed); }; // pc2.setRemote finished, call pc2.createAnswer function step3() { pc2.didSetRemote = true; while (pc2.ice_queued.length > 0) { pc2.addIceCandidate(pc2.ice_queued.shift()); } pc2.createAnswer(step4, failed, answer_constraints); } // pc2.createAnswer finished, call pc2.setLocal function step4(answer) { log("Answer: " + sdpPrettyPrint(answer.sdp)); pc2_answer = answer; pc2.setLocalDescription(answer, step5, failed); } // pc2.setLocal finished, call pc1.setRemote function step5() { pc2.onicecandidate = function(obj) { if (obj.candidate) { log("pc2 found ICE candidate: " + JSON.stringify(obj.candidate)); pc1.addIceCandidate(obj.candidate); } else { log("pc2 got end-of-candidates signal"); } } pc1.setRemoteDescription(pc2_answer, step6, failed); } // pc1.setRemote finished, media should be running! function step6() { pc1.didSetRemote = true; while (pc1.ice_queued.length > 0) { pc1.addIceCandidate(pc1.ice_queued.shift()); } log("Offer/Answer finished"); } function xstart() { thebutton.innerHTML = "Stop!"; thebutton.onclick = stop; pc1 = new RTCPeerConnection(); pc2 = new RTCPeerConnection(); pc1.didSetRemote = false; pc2.didSetRemote = false; pc1.ice_queued = []; pc2.ice_queued = []; pc2.onicecandidate = function(obj) { if (obj.candidate) { log("pc2 found ICE candidate: " + JSON.stringify(obj.candidate)); if (pc1.didSetRemote) { pc1.addIceCandidate(obj.candidate); } else { pc1.ice_queued.push(obj.candidate); } } else { log("pc2 got end-of-candidates signal"); } } pc1.onicecandidate = function(obj) { if (obj.candidate) { log("pc1 found ICE candidate: " + JSON.stringify(obj.candidate)); if (pc2.didSetRemote) { pc2.addIceCandidate(obj.candidate); } else { pc2.ice_queued.push(obj.candidate); } } else { log("pc1 got end-of-candidates signal"); } } pc2.onaddstream = function(obj) { log("pc2 got remote stream from pc1 " + obj.type); pc2video.srcObject = obj.stream; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - canvas_filter_demo.html [155:274]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function log(msg) { logarea.innerHTML = "

" + msg + "

" + logarea.innerHTML; } function failed(code) { log("Failure callback: " + JSON.stringify(code)); } function logReset() { logarea.innerHTML = ""; } // pc1.createOffer finished, call pc1.setLocal function step1(offer) { log("Offer: " + sdpPrettyPrint(offer.sdp)); pc1_offer = offer; pc1.setLocalDescription(offer, step2, failed); } // replace CR NL with HTML breaks function sdpPrettyPrint(sdp) { return sdp.replace(/[\r\n]+/g, '
'); } // pc1.setLocal finished, call pc2.setRemote function step2() { pc1.onicecandidate = function(obj) { if (obj.candidate) { log("pc1 found ICE candidate: " + JSON.stringify(obj.candidate)); pc2.addIceCandidate(obj.candidate); } else { log("pc1 got end-of-candidates signal"); } } pc2.setRemoteDescription(pc1_offer, step3, failed); }; // pc2.setRemote finished, call pc2.createAnswer function step3() { pc2.didSetRemote = true; while (pc2.ice_queued.length > 0) { pc2.addIceCandidate(pc2.ice_queued.shift()); } pc2.createAnswer(step4, failed, answer_constraints); } // pc2.createAnswer finished, call pc2.setLocal function step4(answer) { log("Answer: " + sdpPrettyPrint(answer.sdp)); pc2_answer = answer; pc2.setLocalDescription(answer, step5, failed); } // pc2.setLocal finished, call pc1.setRemote function step5() { pc2.onicecandidate = function(obj) { if (obj.candidate) { log("pc2 found ICE candidate: " + JSON.stringify(obj.candidate)); pc1.addIceCandidate(obj.candidate); } else { log("pc2 got end-of-candidates signal"); } } pc1.setRemoteDescription(pc2_answer, step6, failed); } // pc1.setRemote finished, media should be running! function step6() { pc1.didSetRemote = true; while (pc1.ice_queued.length > 0) { pc1.addIceCandidate(pc1.ice_queued.shift()); } log("Offer/Answer finished"); } function xstart() { thebutton.innerHTML = "Stop!"; thebutton.onclick = stop; pc1 = new RTCPeerConnection(); pc2 = new RTCPeerConnection(); pc1.didSetRemote = false; pc2.didSetRemote = false; pc1.ice_queued = []; pc2.ice_queued = []; pc2.onicecandidate = function(obj) { if (obj.candidate) { log("pc2 found ICE candidate: " + JSON.stringify(obj.candidate)); if (pc1.didSetRemote) { pc1.addIceCandidate(obj.candidate); } else { pc1.ice_queued.push(obj.candidate); } } else { log("pc2 got end-of-candidates signal"); } } pc1.onicecandidate = function(obj) { if (obj.candidate) { log("pc1 found ICE candidate: " + JSON.stringify(obj.candidate)); if (pc2.didSetRemote) { pc2.addIceCandidate(obj.candidate); } else { pc2.ice_queued.push(obj.candidate); } } else { log("pc1 got end-of-candidates signal"); } } pc2.onaddstream = function(obj) { log("pc2 got remote stream from pc1 " + obj.type); pc2video.srcObject = obj.stream; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -