UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

53 lines 2.22 kB
import { NetworkQualityStatistics } from "../../../log/monitor/media/NetworkQualityStatistics"; import * as log from "loglevel"; export class NetworkQualityMonitor { constructor() { this.OBSERVE_INTERVAL = 5; this.previousQuality = NetworkQualityStatistics.forMos(5); this.currentQuality = NetworkQualityStatistics.forMos(5); this.qualityMeasurementsBuffer = []; } observe(networkQualityStatistics) { let newMos = networkQualityStatistics.mos; if (newMos == null || newMos <= 0 || newMos > 5) { return log.warn(`Invalid MOS value: ${newMos} for statistics: ${JSON.stringify(networkQualityStatistics)}`); } if (this.isQualityMeasurementsBufferFull()) { this.qualityMeasurementsBuffer = []; } this.qualityMeasurementsBuffer.push(networkQualityStatistics); if (this.isQualityMeasurementsBufferFull()) { this.previousQuality = this.currentQuality; this.currentQuality = NetworkQualityStatistics.forMos(this.getCurrentMos()); } } current() { return this.currentQuality; } localNetworkChanged() { if (this.observationInProgress()) { return false; } return this.previousQuality.networkQuality !== this.currentQuality.networkQuality; } remoteNetworkChanged() { if (this.observationInProgress()) { return false; } return (this.currentQuality.mos <= 3.6 && this.previousQuality.mos > 3.6) || (this.currentQuality.mos > 3.6 && this.previousQuality.mos <= 3.6); } isQualityMeasurementsBufferFull() { return this.qualityMeasurementsBuffer.length === this.OBSERVE_INTERVAL; } getCurrentMos() { let allIntervalsMosSum = this.qualityMeasurementsBuffer .map(networkQualityStatistic => networkQualityStatistic.mos) .reduce((a, b) => a + b); return Math.round((allIntervalsMosSum / this.OBSERVE_INTERVAL + Number.EPSILON) * 100) / 100; } observationInProgress() { return this.qualityMeasurementsBuffer.length < this.OBSERVE_INTERVAL; } } //# sourceMappingURL=NetworkQualityMonitor.js.map