@observertc/observer-js
Version:
Server Side NodeJS Library for processing ObserveRTC Samples
111 lines (110 loc) • 4.79 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MediasoupRemoteTrackResolver = void 0;
class MediasoupRemoteTrackResolver {
observedCall;
eventMonitor;
_consumerIdToProducerId = new Map();
_producerIdToOutboundTrack = new Map();
_consumerIdToInboundTrack = new Map();
// private _producerIdToOutboundTrack = new Map<string, ObservedOutboundTrack>();
_inboundTrackToConsumerId = new Map();
_producerIdToConsumerIds = new Map();
_outboundTrackToProducerId = new Map();
constructor(observedCall) {
this.observedCall = observedCall;
this.eventMonitor = this.observedCall.createEventMonitor({});
this.eventMonitor.onInboundTrackAdded = this._addInboundTrack.bind(this);
this.eventMonitor.onInboundTrackRemoved = this._removeInboundTrack.bind(this);
this.eventMonitor.onOutboundTrackAdded = this._addOutboundTrack.bind(this);
this.eventMonitor.onOutboundTrackRemoved = this._removeOutboundTrack.bind(this);
// this.eventMonitor.onClientEvent = (client, event) => {
// };
}
resolveRemoteOutboundTrack(inboundTrack) {
const consumerId = this._inboundTrackToConsumerId.get(inboundTrack.id);
if (!consumerId)
return;
const producerId = this._consumerIdToProducerId.get(consumerId);
if (!producerId)
return;
return this._producerIdToOutboundTrack.get(producerId);
}
resolveRemoteInboundTracks(outboundTrack) {
const producerId = this._outboundTrackToProducerId.get(outboundTrack.id);
if (!producerId)
return;
const consumerIds = this._producerIdToConsumerIds.get(producerId);
if (!consumerIds)
return;
return consumerIds
.map((consumerId) => this._consumerIdToInboundTrack.get(consumerId))
.filter((inboundTrack) => Boolean(inboundTrack));
}
_addInboundTrack(inboundTrack) {
const attachments = this._getInboundTrackAttachments(inboundTrack);
if (!attachments)
return;
const { producerId, consumerId } = attachments;
this._inboundTrackToConsumerId.set(inboundTrack.id, consumerId);
this._consumerIdToProducerId.set(consumerId, producerId);
this._consumerIdToInboundTrack.set(consumerId, inboundTrack);
let producerConsumers = this._producerIdToConsumerIds.get(producerId);
if (!producerConsumers) {
producerConsumers = [];
this._producerIdToConsumerIds.set(producerId, producerConsumers);
}
producerConsumers.push(consumerId);
}
_removeInboundTrack(inboundTrack) {
const consumerId = this._inboundTrackToConsumerId.get(inboundTrack.id);
if (!consumerId)
return;
this._inboundTrackToConsumerId.delete(inboundTrack.id);
this._consumerIdToProducerId.delete(consumerId);
this._consumerIdToInboundTrack.delete(consumerId);
const producerConsumers = this._producerIdToConsumerIds.get(consumerId);
if (!producerConsumers)
return;
const filteredProducerConsumers = producerConsumers.filter((id) => id !== consumerId);
if (filteredProducerConsumers.length === 0) {
this._producerIdToConsumerIds.delete(consumerId);
}
else {
this._producerIdToConsumerIds.set(consumerId, filteredProducerConsumers);
}
}
_addOutboundTrack(outboundTrack) {
const attachments = this._getOutboundTrackAttachments(outboundTrack);
if (!attachments)
return;
const { producerId, } = attachments;
this._producerIdToOutboundTrack.set(producerId, outboundTrack);
this._outboundTrackToProducerId.set(outboundTrack.id, producerId);
}
_removeOutboundTrack(outboundTrack) {
const producerId = this._outboundTrackToProducerId.get(outboundTrack.id);
if (!producerId)
return;
this._producerIdToOutboundTrack.delete(producerId);
this._outboundTrackToProducerId.delete(outboundTrack.id);
}
_getInboundTrackAttachments(inboundTrack) {
const { producerId, consumerId } = inboundTrack.attachments ?? {};
if (!producerId || !consumerId || typeof producerId !== 'string' || typeof consumerId !== 'string')
return;
return {
producerId,
consumerId
};
}
_getOutboundTrackAttachments(outboundTrack) {
const { producerId, } = outboundTrack.attachments ?? {};
if (!producerId || typeof producerId !== 'string')
return;
return {
producerId,
};
}
}
exports.MediasoupRemoteTrackResolver = MediasoupRemoteTrackResolver;