const KEY_MAX_BITRATE = 'maxBitrate';
const KEY_MAX_FRAMERATE = 'maxFramerate';
const KEY_MIN_BITRATE = 'minBitrate';
const KEY_RID = 'rid';
const KEY_SCALE_RESOLUTION_DOWN_BY = 'scaleResolutionDownBy';
export interface RTCRtpEncodingParametersInit {
active: boolean,
rid?: string;
maxFramerate?: number;
maxBitrate?: number;
minBitrate?: number;
scaleResolutionDownBy?: number;
}
export default class RTCRtpEncodingParameters {
active: boolean;
_rid: string | null;
_maxFramerate: number | null;
_maxBitrate: number | null;
_minBitrate: number | null;
_scaleResolutionDownBy: number | null;
constructor(init: RTCRtpEncodingParametersInit) {
this.active = init.active;
this._rid = init.rid ?? null;
this._maxBitrate = init.maxBitrate ?? null;
this._minBitrate = init.minBitrate ?? null;
this._maxFramerate = init.maxFramerate ?? null;
this._scaleResolutionDownBy = init.scaleResolutionDownBy ?? null;
}
get rid() {
return this._rid;
}
get maxFramerate() {
return this._maxFramerate;
}
set maxFramerate(framerate) {
if (framerate != null && framerate > 0) {
this._maxFramerate = framerate;
} else {
this._maxFramerate = null;
}
}
get maxBitrate() {
return this._maxBitrate;
}
set maxBitrate(bitrate) {
if (bitrate != null && bitrate >= 0) {
this._maxBitrate = bitrate;
} else {
this._maxBitrate = null;
}
}
get minBitrate() {
return this._minBitrate;
}
set minBitrate(bitrate) {
if (bitrate != null && bitrate >= 0) {
this._minBitrate = bitrate;
} else {
this._minBitrate = null;
}
}
get scaleResolutionDownBy() {
return this._scaleResolutionDownBy;
}
set scaleResolutionDownBy(resolutionScale) {
if (resolutionScale != null && resolutionScale >= 1) {
this._scaleResolutionDownBy = resolutionScale;
} else {
this._scaleResolutionDownBy = null;
}
}
toJSON(): RTCRtpEncodingParametersInit {
const obj = {
active: Boolean(this.active),
};
if (this._rid !== null) {
obj[KEY_RID] = this._rid;
}
if (this._maxBitrate !== null) {
obj[KEY_MAX_BITRATE] = this._maxBitrate;
}
if (this._minBitrate !== null) {
obj[KEY_MIN_BITRATE] = this._minBitrate;
}
if (this._maxFramerate !== null) {
obj[KEY_MAX_FRAMERATE] = this._maxFramerate;
}
if (this._scaleResolutionDownBy !== null) {
obj[KEY_SCALE_RESOLUTION_DOWN_BY] = this._scaleResolutionDownBy;
}
return obj;
}
}