webrtc/samples/js/demos/js/videopipe.js
hta@webrtc.org 1009798b31 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
2014-02-15 06:13:41 +00:00

69 lines
1.7 KiB
JavaScript

//
// 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();
}