'use strict';
function $(selector) {
return document.querySelector(selector);
}
function queryStringToDictionary(queryString) {
var pairs = queryString.slice(1).split('&');
var result = {};
pairs.forEach(function(pair) {
if (pair) {
pair = pair.split('=');
if (pair[0]) {
result[pair[0]] = decodeURIComponent(pair[1] || '');
}
}
});
return result;
}
function sendAsyncUrlRequest(method, url, body) {
return sendUrlRequest(method, url, true, body);
}
function sendUrlRequest(method, url, async, body) {
return new Promise(function(resolve, reject) {
var xhr;
var reportResults = function() {
if (xhr.status !== 200) {
reject(
Error('Status=' + xhr.status + ', response=' +
xhr.responseText));
return;
}
resolve(xhr.responseText);
};
xhr = new XMLHttpRequest();
if (async) {
xhr.onreadystatechange = function() {
if (xhr.readyState !== 4) {
return;
}
reportResults();
};
}
xhr.open(method, url, async);
xhr.send(body);
if (!async) {
reportResults();
}
});
}
function requestIceServers(iceServerRequestUrl, iceTransports) {
return new Promise(function(resolve, reject) {
sendAsyncUrlRequest('POST', iceServerRequestUrl).then(function(response) {
var iceServerRequestResponse = parseJSON(response);
if (!iceServerRequestResponse) {
reject(Error('Error parsing response JSON: ' + response));
return;
}
if (iceTransports !== '') {
filterIceServersUrls(iceServerRequestResponse, iceTransports);
}
trace('Retrieved ICE server information.');
resolve(iceServerRequestResponse.iceServers);
}).catch(function(error) {
reject(Error('ICE server request error: ' + error.message));
return;
});
});
}
function parseJSON(json) {
try {
return JSON.parse(json);
} catch (e) {
trace('Error parsing json: ' + json);
}
return null;
}
function filterIceServersUrls(config, protocol) {
var transport = 'transport=' + protocol;
var newIceServers = [];
for (var i = 0; i < config.iceServers.length; ++i) {
var iceServer = config.iceServers[i];
var newUrls = [];
for (var j = 0; j < iceServer.urls.length; ++j) {
var url = iceServer.urls[j];
if (url.indexOf(transport) !== -1) {
newUrls.push(url);
} else if (
url.indexOf('?transport=') === -1) {
newUrls.push(url + '?' + transport);
}
}
if (newUrls.length !== 0) {
iceServer.urls = newUrls;
newIceServers.push(iceServer);
}
}
config.iceServers = newIceServers;
}
function setUpFullScreen() {
document.cancelFullScreen = document.webkitCancelFullScreen ||
document.mozCancelFullScreen || document.cancelFullScreen;
document.body.requestFullScreen = document.body.webkitRequestFullScreen ||
document.body.mozRequestFullScreen || document.body.requestFullScreen;
document.onfullscreenchange = document.onfullscreenchange ||
document.onwebkitfullscreenchange || document.onmozfullscreenchange;
}
function isFullScreen() {
return !!(document.webkitIsFullScreen || document.mozFullScreen ||
document.isFullScreen); }
function fullScreenElement() {
return document.webkitFullScreenElement ||
document.webkitCurrentFullScreenElement ||
document.mozFullScreenElement ||
document.fullScreenElement;
}
function randomString(strLength) {
var result = [];
strLength = strLength || 5;
var charSet = '0123456789';
while (strLength--) {
result.push(charSet.charAt(Math.floor(Math.random() * charSet.length)));
}
return result.join('');
}
function calculateFps(videoElement, decodedFrames, startTime, remoteOrLocal,
callback) {
var fps = 0;
if (videoElement &&
typeof videoElement.webkitDecodedFrameCount !== undefined) {
if (videoElement.readyState >= videoElement.HAVE_CURRENT_DATA) {
var currentTime = new Date().getTime();
var deltaTime = (currentTime - startTime) / 1000;
var startTimeToReturn = currentTime;
fps = (videoElement.webkitDecodedFrameCount - decodedFrames) / deltaTime;
callback(videoElement.webkitDecodedFrameCount, startTimeToReturn,
remoteOrLocal);
}
}
return parseInt(fps);
}
function trace(text) {
if (text[text.length - 1] === '\n') {
text = text.substring(0, text.length - 1);
}
if (window.performance) {
var now = (window.performance.now() / 1000).toFixed(3);
console.log(now + ': ' + text);
} else {
console.log(text);
}
}