UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 1.44 kB
import{ClientEventTypes as t}from"../schema/ClientEventTypes";export class VideoResolutionChangeDetector{trackMonitor;name="video-resolution-change-detector";disabled=!1;_width;_height;constructor(t){this.trackMonitor=t}get config(){return this.peerConnection.parent.config.videoResolutionChangeDetector}get peerConnection(){return this.trackMonitor.getPeerConnection()}update(){if(this.disabled)return;if("video"!==this.trackMonitor.kind)return;const i="inbound"===this.trackMonitor.direction?this.trackMonitor.getInboundRtp():this.trackMonitor.getHighestLayer();if(!i)return;const e=i.frameWidth,o=i.frameHeight;if(void 0===e||void 0===o)return;if(e<1||o<1)return;const n=this._width,r=this._height;if(this._width=e,this._height=o,void 0===n||void 0===r)return;if(n===e&&r===o)return;const h=n*r,a=e*o,c=a>h?"upgrade":a<h?"downgrade":"reshape",d="outbound"===this.trackMonitor.direction?i.qualityLimitationReason:void 0,s=this.peerConnection.parent;s.emit("video-resolution-changed",{clientMonitor:s,trackMonitor:this.trackMonitor,direction:c,from:{width:n,height:r},to:{width:e,height:o},qualityLimitationReason:d}),!1!==this.config.createEvent&&s.addEvent({type:t.VIDEO_RESOLUTION_CHANGED,payload:{peerConnectionId:this.peerConnection.peerConnectionId,trackId:this.trackMonitor.track.id,direction:this.trackMonitor.direction,change:c,fromWidth:n,fromHeight:r,width:e,height:o,framesPerSecond:i.framesPerSecond,qualityLimitationReason:d}})}}