Changes the connection quality stats to be sent by the data channels

This commit is contained in:
hristoterezov 2016-07-21 17:00:57 -05:00
parent 0e2d8a323a
commit 4bf5d69002
2 changed files with 18 additions and 72 deletions

View File

@ -1133,27 +1133,26 @@ export default {
room.on(ConferenceEvents.CONNECTION_STATS, function (stats) { room.on(ConferenceEvents.CONNECTION_STATS, function (stats) {
ConnectionQuality.updateLocalStats(stats); ConnectionQuality.updateLocalStats(stats);
}); });
ConnectionQuality.addListener(
CQEvents.LOCALSTATS_UPDATED, ConnectionQuality.addListener(CQEvents.LOCALSTATS_UPDATED,
(percent, stats) => { (percent, stats) => {
APP.UI.updateLocalStats(percent, stats); APP.UI.updateLocalStats(percent, stats);
room.broadcastEndpointMessage({
type: this.commands.defaults.CONNECTION_QUALITY,
values: stats });
});
// send local stats to other users room.on(ConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,
room.sendCommandOnce(this.commands.defaults.CONNECTION_QUALITY, (participant, payload) => {
{ switch(payload.type) {
children: ConnectionQuality.convertToMUCStats(stats), case this.commands.defaults.CONNECTION_QUALITY:
attributes: { ConnectionQuality.updateRemoteStats(participant.getId(),
xmlns: 'http://jitsi.org/jitmeet/stats' payload.values);
} break;
}); default:
} console.warn("Unknown datachannel message", payload);
); }
});
// listen to remote stats
room.addCommandListener(this.commands.defaults.CONNECTION_QUALITY,
(values, from) => {
ConnectionQuality.updateRemoteStats(from, values);
});
ConnectionQuality.addListener(CQEvents.REMOTESTATS_UPDATED, ConnectionQuality.addListener(CQEvents.REMOTESTATS_UPDATED,
(id, percent, stats) => { (id, percent, stats) => {

View File

@ -28,39 +28,6 @@ var localConnectionQuality = 100;
*/ */
var remoteConnectionQuality = {}; var remoteConnectionQuality = {};
/**
* Converts statistics to format used by VideoLayout
* @param stats
* @returns {{bitrate: {download: *, upload: *}, packetLoss: {total: *, download: *, upload: *}}}
*/
function parseMUCStats(stats) {
if(!stats || !stats.children || !stats.children.length)
return null;
var children = stats.children;
var extractedStats = {};
children.forEach((child) => {
if(child.tagName !== "stat" || !child.attributes)
return;
var attrKeys = Object.keys(child.attributes);
if(!attrKeys || !attrKeys.length)
return;
attrKeys.forEach((attr) => {
extractedStats[attr] = child.attributes[attr];
});
});
return {
bitrate: {
download: extractedStats.bitrate_download,
upload: extractedStats.bitrate_upload
},
packetLoss: {
total: extractedStats.packetLoss_total,
download: extractedStats.packetLoss_download,
upload: extractedStats.packetLoss_upload
}
};
}
/** /**
* Calculates the quality percent based on passed new and old value. * Calculates the quality percent based on passed new and old value.
* @param newVal the new value * @param newVal the new value
@ -90,8 +57,7 @@ export default {
* @param data the statistics * @param data the statistics
*/ */
updateRemoteStats: function (id, data) { updateRemoteStats: function (id, data) {
data = parseMUCStats(data); if (!data || !("packetLoss" in data) || !("total" in data.packetLoss)) {
if (!data || !data.packetLoss || !data.packetLoss.total) {
eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null); eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null);
return; return;
} }
@ -115,24 +81,5 @@ export default {
addListener: function (type, listener) { addListener: function (type, listener) {
eventEmitter.on(type, listener); eventEmitter.on(type, listener);
},
/**
* Converts statistics to format for sending through XMPP
* @param stats the statistics
* @returns [{tagName: "stat", attributes: {{bitrate_donwload: *}},
* {tagName: "stat", attributes: {{ bitrate_uplpoad: *}},
* {tagName: "stat", attributes: {{ packetLoss_total: *}},
* {tagName: "stat", attributes: {{ packetLoss_download: *}},
* {tagName: "stat", attributes: {{ packetLoss_upload: *}}]
*/
convertToMUCStats: function (stats) {
return [
{tagName: "stat", attributes: {"bitrate_download": stats.bitrate.download}},
{tagName: "stat", attributes: {"bitrate_upload": stats.bitrate.upload}},
{tagName: "stat", attributes: {"packetLoss_total": stats.packetLoss.total}},
{tagName: "stat", attributes: {"packetLoss_download": stats.packetLoss.download}},
{tagName: "stat", attributes: {"packetLoss_upload": stats.packetLoss.upload}}
];
} }
}; };