UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 1.86 kB
export class JitterBufferStressDetector{trackMonitor;static ISSUE_TYPE="audio-jitter-buffer-stress";name="jitter-buffer-stress-detector";disabled=!1;issueKey;_consecutiveTicks=0;_alertOn=!1;_startedAt;constructor(t){this.trackMonitor=t,this.issueKey=`${JitterBufferStressDetector.ISSUE_TYPE}-track-${t.track.id}`}get config(){return this.peerConnection.parent.config.jitterBufferStressDetector}get peerConnection(){return this.trackMonitor.getPeerConnection()}update(){if(this.disabled)return;const t=this.trackMonitor.getInboundRtp();if(!t||"audio"!==t.kind)return;if(this.trackMonitor.remoteOutboundTrackPaused)return this._consecutiveTicks=0,this._alertOn?this._clear("remote track paused"):void 0;const e=t.jitterBufferTargetDelayInMs,i=t.timeStretchRate;if(void 0===e||void 0===i)return;if(!(this.config.targetDelayThresholdInMs<e&&this.config.timeStretchThreshold<i))return this._consecutiveTicks=0,void(this._alertOn&&this._clear("jitter buffer recovered"));if(this._consecutiveTicks+=1,this._alertOn)return;if(this._consecutiveTicks<this.config.minConsecutiveTicks)return;this._alertOn=!0,this._startedAt=Date.now();const r=this.peerConnection.parent;r.emit("audio-jitter-buffer-stress",{clientMonitor:r,trackMonitor:this.trackMonitor,targetDelayInMs:e,timeStretchRate:i}),r.raiseIssue(this.issueKey,{type:JitterBufferStressDetector.ISSUE_TYPE,payload:{peerConnectionId:this.peerConnection.peerConnectionId,trackId:this.trackMonitor.track.id,targetDelayInMs:e,actualDelayInMs:t.avgJitterBufferDelayInMs,timeStretchRate:i,consecutiveTicks:this._consecutiveTicks}})}_clear(t){this._alertOn=!1;const e=this.peerConnection.parent,i=e.activeIssues.get(this.issueKey);let r;i&&(r={...i.payload,durationInMs:this._startedAt?Date.now()-this._startedAt:void 0}),e.resolveIssue(this.issueKey,{comment:t,payload:r,resolvedAt:Date.now()}),this._startedAt=void 0}}