@observertc/client-monitor-js
Version:
ObserveRTC Client Integration Javascript Library
1 lines • 1.51 kB
JavaScript
export class PlayoutDiscrepancyDetector{trackMonitor;static ISSUE_TYPE="inbound-video-playout-discrepancy";name="playout-discrepancy-detector";disabled=!1;issueKey;_startedDiscrepancyAt;constructor(e){this.trackMonitor=e,this.issueKey=`${PlayoutDiscrepancyDetector.ISSUE_TYPE}-track-${e.track.id}`}get peerConnection(){return this.trackMonitor.getPeerConnection()}get config(){return this.peerConnection.parent.config.playoutDiscrepancyDetector}active=!1;update(){if(this.disabled)return;const e=this.trackMonitor.getInboundRtp();if(!(e&&e.deltaFramesReceived&&e.deltaFramesRendered&&e.ewmaFps))return;const t=e.deltaFramesReceived-e.deltaFramesRendered;if(this.active)return t<this.config.lowSkewThreshold?(this._resolve("playout discrepancy ended"),void(this.active=!1)):void 0;if(t<this.config.highSkewThreshold)return;this.active=!0;const i=this.peerConnection.parent;i.emit(PlayoutDiscrepancyDetector.ISSUE_TYPE,{trackMonitor:this.trackMonitor,clientMonitor:i}),this._raise({trackId:this.trackMonitor.track.id,frameSkew:t,ewmaFps:e.ewmaFps})}_raise(e){this._startedDiscrepancyAt=Date.now(),this.peerConnection.parent.raiseIssue(this.issueKey,{type:PlayoutDiscrepancyDetector.ISSUE_TYPE,payload:e})}_resolve(e){const t=this.peerConnection.parent,i=t.activeIssues.get(this.issueKey);let s;i&&(s={...i.payload,durationInMs:this._startedDiscrepancyAt?Date.now()-this._startedDiscrepancyAt:void 0}),t.resolveIssue(this.issueKey,{comment:e,payload:s,resolvedAt:Date.now()}),this._startedDiscrepancyAt=void 0}}