UNPKG

@observertc/observer-js

Version:

Server Side NodeJS Library for processing ObserveRTC Samples

59 lines (58 loc) 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ObservedTURN = void 0; const stream_1 = require("stream"); const ObservedTurnServer_1 = require("./ObservedTurnServer"); const logger_1 = require("./common/logger"); const logger = (0, logger_1.createLogger)('ObservedTURN'); class ObservedTURN extends stream_1.EventEmitter { totalBytesSent = 0; totalBytesReceived = 0; totalPacketsSent = 0; totalPacketsReceived = 0; packetsSentPerSecond = 0; packetsReceivedPerSecond = 0; outboundBitrate = 0; inboundBitrate = 0; numberOfClients = 0; servers = new Map(); constructor() { super(); } update() { const clientIds = new Set(); this.packetsReceivedPerSecond = 0; this.packetsSentPerSecond = 0; this.outboundBitrate = 0; this.inboundBitrate = 0; for (const server of this.servers.values()) { server.update(); server.observedPeerConnections.forEach((pc) => clientIds.add(pc.client.clientId)); } this.numberOfClients = clientIds.size; } addPeerConnection(peerConnection) { const turnPairs = peerConnection.selectedIceCandidatePairs.filter((pair) => pair.getLocalCandidate()?.candidateType === 'relay' && pair.getRemoteCandidate()?.url?.startsWith('turn:')); if (turnPairs.length !== 1) { return (logger.warn(`Expected exactly one TURN pair, but found for peerconnection ${peerConnection.peerConnectionId}`, turnPairs.length), undefined); } const candidatePair = turnPairs[0]; const rawUrl = candidatePair.getRemoteCandidate()?.url; if (!rawUrl) { return (logger.warn(`No remote candidate URL found for peerconnection ${peerConnection.peerConnectionId}`), undefined); } const turnUrl = new URL(rawUrl); const turnServerUrl = `${turnUrl.protocol}//${turnUrl.hostname}:${turnUrl.port}`; let turnServer = this.servers.get(turnServerUrl); if (!turnServer) { turnServer = new ObservedTurnServer_1.ObservedTurnServer(turnServerUrl, this); } return turnServer; } removePeerConnection(peerConnection) { for (const turnServer of this.servers.values()) { turnServer.observedPeerConnections.delete(peerConnection.peerConnectionId); } } } exports.ObservedTURN = ObservedTURN;