UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 1.56 kB
export class DryOutboundTrackDetector{trackMonitor;static ISSUE_TYPE="dry-outbound-track";name="dry-outbound-track-detector";disabled=!1;issueKey;constructor(t){this.trackMonitor=t,this.issueKey=`${DryOutboundTrackDetector.ISSUE_TYPE}-track-${t.track.id}`}_evented=!1;_startedDryAt;get peerConnection(){return this.trackMonitor.getPeerConnection()}get config(){return this.peerConnection.parent.config.dryOutboundTrackDetector}_activatedAt;update(){if(this.disabled)return;if(this.trackMonitor.track.muted||"live"!==this.trackMonitor.track.readyState)return void(this._activatedAt=void 0);if(0!==this.trackMonitor.getOutboundRtps()?.[0]?.deltaBytesSent)return this._activatedAt=void 0,void(this._evented&&(this._resolve("dry outbound track recovered"),this._evented=!1));this._activatedAt||(this._activatedAt=Date.now());const t=Date.now()-this._activatedAt;if(t<this.config.thresholdInMs)return;if(this._evented)return;this._evented=!0;const e=this.peerConnection.parent;e.emit("dry-outbound-track",{trackMonitor:this.trackMonitor,clientMonitor:e}),this._raise({trackId:this.trackMonitor.track.id,duration:t})}_raise(t){this._startedDryAt=this._startedDryAt??Date.now(),this.peerConnection.parent.raiseIssue(this.issueKey,{type:DryOutboundTrackDetector.ISSUE_TYPE,payload:t})}_resolve(t){const e=this.peerConnection.parent,r=e.activeIssues.get(this.issueKey);let i;r&&(i={...r.payload,durationInMs:this._startedDryAt?Date.now()-this._startedDryAt:void 0}),e.resolveIssue(this.issueKey,{comment:t,payload:i,resolvedAt:Date.now()}),this._startedDryAt=void 0}}