blob: 600fba29cb6e79a78beb3817679c49933a676228 [file] [log] [blame] [edit]
/*
* Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree.
*/
//
// 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();
}