@observertc/client-monitor-js
Version:
ObserveRTC Client Integration Javascript Library
1 lines • 1.54 kB
JavaScript
import{ClientEventTypes as e}from"../schema/ClientEventTypes";export class SimulcastLayerDetector{trackMonitor;name="simulcast-layer-detector";disabled=!1;_previousActiveKeys;constructor(e){this.trackMonitor=e}get config(){return this.peerConnection.parent.config.simulcastLayerDetector}get peerConnection(){return this.trackMonitor.getPeerConnection()}update(){if(this.disabled)return;if("video"!==this.trackMonitor.kind)return;const t=this.trackMonitor.getOutboundRtps();if(t.length<2)return;const i=[];for(const e of t)!1!==e.active&&0<(e.deltaBytesSent??0)&&i.push(e.rid??`${e.ssrc}`);const r=i.sort().join(",");if(void 0===this._previousActiveKeys)return void(this._previousActiveKeys=r);if(this._previousActiveKeys===r)return;const s=t.map((e=>({rid:e.rid??`${e.ssrc}`,ssrc:e.ssrc,encodingIndex:e.encodingIndex,active:!1!==e.active&&0<(e.deltaBytesSent??0),bitrate:e.bitrate,frameWidth:e.frameWidth,frameHeight:e.frameHeight,framesPerSecond:e.framesPerSecond,scalabilityMode:e.scalabilityMode}))),n=this._previousActiveKeys;this._previousActiveKeys=r;const o=this.peerConnection.parent;o.emit("simulcast-layer-changed",{clientMonitor:o,trackMonitor:this.trackMonitor,activeLayerIds:r.length?r.split(","):[],previousActiveLayerIds:n.length?n.split(","):[],layers:s}),!1!==this.config.createEvent&&o.addEvent({type:e.SIMULCAST_LAYER_CHANGED,payload:{peerConnectionId:this.peerConnection.peerConnectionId,trackId:this.trackMonitor.track.id,activeLayerIds:r.length?r.split(","):[],previousActiveLayerIds:n.length?n.split(","):[],layers:s}})}}