@observertc/observer-js
Version:
Server Side NodeJS Library for processing ObserveRTC Samples
59 lines (58 loc) • 2.43 kB
JavaScript
;
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;