From 1009798b319b3ff5c12ea1494f92865e42d093d5 Mon Sep 17 00:00:00 2001 From: "hta@webrtc.org" Date: Sat, 15 Feb 2014 06:13:41 +0000 Subject: [PATCH] Demo of multi-pass encode - used for testing limits. This demo creates a sequence of PeerConnections, and passes a videostream through all of them. This allows one to test how many PeerConnections and how many encodes/decodes the implementation will support before breaking down or slowing down enough to be unusable. BUG= R=fischman@webrtc.org, hta@webrtc.org Review URL: https://webrtc-codereview.appspot.com/8479004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5557 4adac7df-926f-26a2-2b94-8c16560cd09d --- samples/js/demos/html/multiple-relay.html | 98 +++++++++++++++++++++++ samples/js/demos/js/videopipe.js | 68 ++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 samples/js/demos/html/multiple-relay.html create mode 100644 samples/js/demos/js/videopipe.js diff --git a/samples/js/demos/html/multiple-relay.html b/samples/js/demos/html/multiple-relay.html new file mode 100644 index 0000000000..051aad525f --- /dev/null +++ b/samples/js/demos/html/multiple-relay.html @@ -0,0 +1,98 @@ + + + +PeerConnection Demo 1 + + + + + + + + +
+ + + + +
+ + + + diff --git a/samples/js/demos/js/videopipe.js b/samples/js/demos/js/videopipe.js new file mode 100644 index 0000000000..da9e22502b --- /dev/null +++ b/samples/js/demos/js/videopipe.js @@ -0,0 +1,68 @@ +// +// A "videopipe" abstraction on top of WebRTC. +// +// The usage of this abstraction: +// var pipe = new VideoPipe(mediastream, handlerFunction); +// handlerFunction = function(mediastream) { +// do_something +// } +// pipe.close(); +// +// The VideoPipe will set up 2 PeerConnections, connect them to each +// other, and call HandlerFunction when the stream is available in the +// second PeerConnection. +// + +function errorHandler(context) { + return function(error) { + trace('Failure in ' + context + ': ' + error.toString); + } +} + +function successHandler(context) { + return function() { + trace('Success in ' + context); + } +} + +function noAction() { +} + + +function VideoPipe(stream, handler) { + var servers = null; + var pc1 = new RTCPeerConnection(servers); + var pc2 = new RTCPeerConnection(servers); + + pc1.addStream(stream); + pc1.onicecandidate = function(event) { + if (event.candidate) { + pc2.addIceCandidate(new RTCIceCandidate(event.candidate), + noAction, errorHandler('AddIceCandidate')); + } + } + pc2.onicecandidate = function(event) { + if (event.candidate) { + pc1.addIceCandidate(new RTCIceCandidate(event.candidate), + noAction, errorHandler('AddIceCandidate')); + } + } + pc2.onaddstream = function(e) { + handler(e.stream); + } + pc1.createOffer(function(desc) { + pc1.setLocalDescription(desc); + pc2.setRemoteDescription(desc); + pc2.createAnswer(function(desc2) { + pc2.setLocalDescription(desc2); + pc1.setRemoteDescription(desc2); + }, errorHandler('pc2.createAnswer')); + }, errorHandler('pc1.createOffer')); + this.pc1 = pc1; + this.pc2 = pc2; +} + +VideoPipe.prototype.close = function() { + this.pc1.close(); + this.pc2.close(); +}