2014-10-16 15:11:26 +00:00
|
|
|
var ConnectionQuality = (function () {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructs new ConnectionQuality object
|
|
|
|
* @constructor
|
|
|
|
*/
|
|
|
|
function ConnectionQuality() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* local stats
|
|
|
|
* @type {{}}
|
|
|
|
*/
|
|
|
|
var stats = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* remote stats
|
|
|
|
* @type {{}}
|
|
|
|
*/
|
|
|
|
var remoteStats = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Interval for sending statistics to other participants
|
|
|
|
* @type {null}
|
|
|
|
*/
|
|
|
|
var sendIntervalId = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates the local statistics
|
|
|
|
* @param data new statistics
|
|
|
|
*/
|
|
|
|
ConnectionQuality.updateLocalStats = function (data) {
|
|
|
|
stats = data;
|
|
|
|
VideoLayout.updateLocalConnectionStats(100 - stats.packetLoss.total,stats);
|
|
|
|
if(sendIntervalId == null)
|
|
|
|
{
|
|
|
|
startSendingStats();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Start statistics sending.
|
|
|
|
*/
|
|
|
|
function startSendingStats() {
|
|
|
|
sendStats();
|
|
|
|
sendIntervalId = setInterval(sendStats, 10000);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sends statistics to other participants
|
|
|
|
*/
|
|
|
|
function sendStats() {
|
|
|
|
connection.emuc.addConnectionInfoToPresence(convertToMUCStats(stats));
|
|
|
|
connection.emuc.sendPresence();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Converts statistics to format for sending through XMPP
|
|
|
|
* @param stats the statistics
|
|
|
|
* @returns {{bitrate_donwload: *, bitrate_uplpoad: *, packetLoss_total: *, packetLoss_download: *, packetLoss_upload: *}}
|
|
|
|
*/
|
|
|
|
function convertToMUCStats(stats) {
|
|
|
|
return {
|
2014-10-17 10:00:35 +00:00
|
|
|
"bitrate_download": stats.bitrate.download,
|
|
|
|
"bitrate_upload": stats.bitrate.upload,
|
2014-10-16 15:11:26 +00:00
|
|
|
"packetLoss_total": stats.packetLoss.total,
|
|
|
|
"packetLoss_download": stats.packetLoss.download,
|
|
|
|
"packetLoss_upload": stats.packetLoss.upload
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Converts statitistics to format used by VideoLayout
|
|
|
|
* @param stats
|
|
|
|
* @returns {{bitrate: {download: *, upload: *}, packetLoss: {total: *, download: *, upload: *}}}
|
|
|
|
*/
|
|
|
|
function parseMUCStats(stats) {
|
|
|
|
return {
|
|
|
|
bitrate: {
|
2014-10-17 10:00:35 +00:00
|
|
|
download: stats.bitrate_download,
|
|
|
|
upload: stats.bitrate_upload
|
2014-10-16 15:11:26 +00:00
|
|
|
},
|
|
|
|
packetLoss: {
|
|
|
|
total: stats.packetLoss_total,
|
|
|
|
download: stats.packetLoss_download,
|
|
|
|
upload: stats.packetLoss_upload
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates remote statistics
|
|
|
|
* @param jid the jid associated with the statistics
|
|
|
|
* @param data the statistics
|
|
|
|
*/
|
|
|
|
ConnectionQuality.updateRemoteStats = function (jid, data) {
|
|
|
|
if(data == null || data.packetLoss_total == null)
|
|
|
|
{
|
|
|
|
VideoLayout.updateConnectionStats(jid, null, null);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
remoteStats[jid] = parseMUCStats(data);
|
|
|
|
|
|
|
|
VideoLayout.updateConnectionStats(jid, 100 - data.packetLoss_total,remoteStats[jid]);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stops statistics sending.
|
|
|
|
*/
|
|
|
|
ConnectionQuality.stopSendingStats = function () {
|
|
|
|
clearInterval(sendIntervalId);
|
|
|
|
sendIntervalId = null;
|
|
|
|
//notify UI about stopping statistics gathering
|
|
|
|
VideoLayout.onStatsStop();
|
|
|
|
};
|
|
|
|
|
2014-10-30 08:18:08 +00:00
|
|
|
/**
|
|
|
|
* Returns the local statistics.
|
|
|
|
*/
|
|
|
|
ConnectionQuality.getStats = function () {
|
|
|
|
return stats;
|
|
|
|
}
|
|
|
|
|
2014-10-16 15:11:26 +00:00
|
|
|
return ConnectionQuality;
|
|
|
|
})();
|