diff --git a/src/room/track/RemoteTrackPublication.ts b/src/room/track/RemoteTrackPublication.ts index aa9f7275f6..0711964adb 100644 --- a/src/room/track/RemoteTrackPublication.ts +++ b/src/room/track/RemoteTrackPublication.ts @@ -24,9 +24,12 @@ export default class RemoteTrackPublication extends TrackPublication { protected fps?: number; + protected priority: number; + constructor(kind: Track.Kind, ti: TrackInfo, autoSubscribe: boolean | undefined) { super(kind, ti.sid, ti.name); this.subscribed = autoSubscribe; + this.priority = 0; this.updateInfo(ti); } @@ -61,6 +64,19 @@ export default class RemoteTrackPublication extends TrackPublication { this.emitPermissionUpdateIfChanged(prevPermission); } + /** + * In cases where downstream bandwidth is constrained, setting a priority on a RemoteTrackPublication allows to (de-)prioritize specific tracks + * @param priority + */ + setSubscriptionPriority(priority: number) { + this.priority = priority; + this.emitTrackUpdate(); + } + + get subscriptionPriority() { + return this.priority; + } + get subscriptionStatus(): TrackPublication.SubscriptionStatus { if (this.subscribed === false) { return TrackPublication.SubscriptionStatus.Unsubscribed; @@ -277,6 +293,7 @@ export default class RemoteTrackPublication extends TrackPublication { trackSids: [this.trackSid], disabled: this.disabled, fps: this.fps, + priority: this.priority, }); if (this.videoDimensions) { settings.width = this.videoDimensions.width;