141 lines
3.9 KiB
JavaScript
141 lines
3.9 KiB
JavaScript
// Copyright (c) 2014 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. An additional intellectual property rights grant can be found
|
|
// in the file PATENTS. All contributing project authors may
|
|
// be found in the AUTHORS file in the root of the source tree.
|
|
//
|
|
var localStreams = [];
|
|
var remoteStreams = [];
|
|
|
|
function ping(callback) {
|
|
callback("pong");
|
|
}
|
|
|
|
function getUserMedia(constraints, onSuccessCallback, onFailCallback){
|
|
console.log("Getting user media.");
|
|
navigator.webkitGetUserMedia(constraints,
|
|
onSuccessCallbackWraper, onFailCallback);
|
|
|
|
function onSuccessCallbackWraper(stream) {
|
|
console.log("GetUserMedia success.");
|
|
localStreams[stream.id] = stream;
|
|
onSuccessCallback(stream);
|
|
}
|
|
}
|
|
|
|
function createPeerConnection(config, doneCallback, failCallback) {
|
|
console.log("Creating peer connection");
|
|
var obj = {};
|
|
var pc = new webkitRTCPeerConnection(config);
|
|
|
|
expose(obj, pc, "close");
|
|
expose(obj, pc, "createOffer");
|
|
expose(obj, pc, "createAnswer");
|
|
expose(obj, pc, "addEventListener");
|
|
expose(obj, pc, "addIceCandidate", { 0: RTCIceCandidate});
|
|
expose(obj, pc, "setRemoteDescription", { 0: RTCSessionDescription });
|
|
expose(obj, pc, "setLocalDescription", { 0: RTCSessionDescription });
|
|
|
|
obj.addStream = function(stream) {
|
|
console.log("Adding local stream.");
|
|
var tempStream = localStreams[stream.id];
|
|
if (!tempStream) {
|
|
console.log("Undefined stream!");
|
|
return;
|
|
}
|
|
pc.addStream(tempStream);
|
|
};
|
|
|
|
// Return an array of Objects, each Object is a copy of RTCStateReport
|
|
// and has the following attributes (id, type, names, and stats).
|
|
// names: array originaly returned by calling RTCStateReport.names().
|
|
// stats: dictionary of stat name as key and stat value as dictionary
|
|
// value.
|
|
obj.getStats = function(callback, mediaTrack) {
|
|
pc.getStats(onStatsReady, mediaTrack);
|
|
|
|
function onStatsReady(stateResponse) {
|
|
var outputReports = [];
|
|
var reports = stateResponse.result();
|
|
for (index in reports) {
|
|
var report = {};
|
|
report.id = reports[index].id;
|
|
report.type = reports[index].type;
|
|
report.names = reports[index].names();
|
|
report.stats = [];
|
|
populateStats(reports[index], report.stats);
|
|
|
|
outputReports.push(report);
|
|
}
|
|
|
|
callback(outputReports);
|
|
}
|
|
|
|
function populateStats(report, stats) {
|
|
var names = report.names();
|
|
for (index in names) {
|
|
stats.push({
|
|
name: names[index],
|
|
stat: report.stat(names[index]),
|
|
});
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
pc.addEventListener('addstream', function(event) {
|
|
remoteStreams[event.stream.id] = event.stream;
|
|
});
|
|
|
|
doneCallback(obj);
|
|
};
|
|
|
|
function showStream(streamId, autoplay, muted) {
|
|
var stream = getStreamFromIdentifier_(streamId);
|
|
var video = document.createElement('video');
|
|
video.autoplay = autoplay;
|
|
video.muted = muted;
|
|
document.body.appendChild(video);
|
|
video.src = URL.createObjectURL(stream);
|
|
console.log("Stream " + stream.id + " attached to video element");
|
|
};
|
|
|
|
function getStreamFromIdentifier_(id) {
|
|
var tempStream = localStreams[id];
|
|
if (tempStream)
|
|
return tempStream;
|
|
tempStream = remoteStreams[id];
|
|
if (tempStream)
|
|
return tempStream;
|
|
console.log(id + " is not id for stream.");
|
|
return null;
|
|
};
|
|
|
|
function downloadFile(path, onSuccess, onError) {
|
|
var xhr = new XMLHttpRequest();
|
|
function onResult() {
|
|
if (xhr.readyState != 4)
|
|
return;
|
|
|
|
if (xhr.status != 200) {
|
|
onError("Download request failed!");
|
|
return;
|
|
}
|
|
onSuccess(xhr.responseText);
|
|
}
|
|
|
|
xhr.onreadystatechange = onResult;
|
|
xhr.open('GET', path, true);
|
|
xhr.send();
|
|
};
|
|
|
|
connectToServer({
|
|
ping: ping,
|
|
getUserMedia: getUserMedia,
|
|
createPeerConnection: createPeerConnection,
|
|
showStream: showStream,
|
|
downloadFile: downloadFile,
|
|
});
|