
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
69 lines
1.7 KiB
JavaScript
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();
|
|
}
|