diff --git a/conference.js b/conference.js index 3bfdf16ae..4386e0878 100644 --- a/conference.js +++ b/conference.js @@ -1133,27 +1133,26 @@ export default { room.on(ConferenceEvents.CONNECTION_STATS, function (stats) { ConnectionQuality.updateLocalStats(stats); }); - ConnectionQuality.addListener( - CQEvents.LOCALSTATS_UPDATED, + + ConnectionQuality.addListener(CQEvents.LOCALSTATS_UPDATED, (percent, stats) => { APP.UI.updateLocalStats(percent, stats); + room.broadcastEndpointMessage({ + type: this.commands.defaults.CONNECTION_QUALITY, + values: stats }); + }); - // send local stats to other users - room.sendCommandOnce(this.commands.defaults.CONNECTION_QUALITY, - { - children: ConnectionQuality.convertToMUCStats(stats), - attributes: { - xmlns: 'http://jitsi.org/jitmeet/stats' - } - }); - } - ); - - // listen to remote stats - room.addCommandListener(this.commands.defaults.CONNECTION_QUALITY, - (values, from) => { - ConnectionQuality.updateRemoteStats(from, values); - }); + room.on(ConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, + (participant, payload) => { + switch(payload.type) { + case this.commands.defaults.CONNECTION_QUALITY: + ConnectionQuality.updateRemoteStats(participant.getId(), + payload.values); + break; + default: + console.warn("Unknown datachannel message", payload); + } + }); ConnectionQuality.addListener(CQEvents.REMOTESTATS_UPDATED, (id, percent, stats) => { diff --git a/modules/connectionquality/connectionquality.js b/modules/connectionquality/connectionquality.js index 91b44a03d..7bcceca2c 100644 --- a/modules/connectionquality/connectionquality.js +++ b/modules/connectionquality/connectionquality.js @@ -28,39 +28,6 @@ var localConnectionQuality = 100; */ 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. * @param newVal the new value @@ -90,8 +57,7 @@ export default { * @param data the statistics */ updateRemoteStats: function (id, data) { - data = parseMUCStats(data); - if (!data || !data.packetLoss || !data.packetLoss.total) { + if (!data || !("packetLoss" in data) || !("total" in data.packetLoss)) { eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null); return; } @@ -115,24 +81,5 @@ export default { addListener: function (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}} - ]; } };