Selecting bot_type changed to be specified in the test file instead of specify it in the running command. Now we can write test for rtcBot that run one bot on chrome for android and the other bot on chrome for desktop. R=andresp@webrtc.org Review URL: https://webrtc-codereview.appspot.com/23069004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7458 4adac7df-926f-26a2-2b94-8c16560cd09d
151 lines
4.3 KiB
JavaScript
151 lines
4.3 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;
|
|
};
|
|
|
|
// Ask computeengineondemand to give us TURN server credentials and URIs.
|
|
function asyncCreateTurnConfig(onSuccess, onError) {
|
|
var CEOD_URL = ('https://computeengineondemand.appspot.com/turn?' +
|
|
'username=1234&key=5678');
|
|
var xhr = new XMLHttpRequest();
|
|
function onResult() {
|
|
if (xhr.readyState != 4)
|
|
return;
|
|
|
|
if (xhr.status != 200) {
|
|
onError('TURN request failed');
|
|
return;
|
|
}
|
|
|
|
var response = JSON.parse(xhr.responseText);
|
|
var iceServer = {
|
|
'username': response.username,
|
|
'credential': response.password,
|
|
'urls': response.uris
|
|
};
|
|
onSuccess({ 'iceServers': [ iceServer ] });
|
|
}
|
|
|
|
xhr.onreadystatechange = onResult;
|
|
xhr.open('GET', CEOD_URL, true);
|
|
xhr.send();
|
|
};
|
|
|
|
connectToServer({
|
|
ping: ping,
|
|
getUserMedia: getUserMedia,
|
|
createPeerConnection: createPeerConnection,
|
|
showStream: showStream,
|
|
asyncCreateTurnConfig: asyncCreateTurnConfig,
|
|
});
|