Files
platform-external-webrtc/webrtc/tools/rtcbot/bot/browser/bot.js
houssainy@google.com 24f62e1a28 Adding getStats function to the exposed PeerConnection in RtcBot
Exposed Peerconnection object has new function "getStats". This function
returns the stats as array of reports, and each report is RTCStatReport
with additional attributes names and stats.

names: array of all the stat names in current report.
Stats: dictionary and the key is the stat name, and value is the value
of this stat.

R=andresp@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/23779004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7319 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-09-29 09:36:28 +00:00

122 lines
3.5 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(doneCallback, failCallback) {
console.log("Creating peer connection");
var obj = {};
var pc = new webkitRTCPeerConnection(null);
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;
};
connectToServer({
ping: ping,
getUserMedia: getUserMedia,
createPeerConnection: createPeerConnection,
showStream: showStream,
});