@3dsource/angular-unreal-module 0.0.56 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, AfterViewInit, OnInit, DestroyRef, ElementRef, PipeTransform } from '@angular/core';
2
+ import { AfterViewInit, ElementRef, OnInit, InjectionToken, PipeTransform } from '@angular/core';
3
3
  import { DialogRef } from '@angular/cdk/dialog';
4
- import * as _3dsource_angular_unreal_module from '@3dsource/angular-unreal-module';
5
4
  import * as _ngrx_store from '@ngrx/store';
6
5
  import { Store } from '@ngrx/store';
7
6
  import * as rxjs from 'rxjs';
8
7
  import { Observable, Subject } from 'rxjs';
9
- import { MetaBoxCommandList, MetaBoxCommandPacket, FResetControlClampsCommand, FCameraRecenterCommand, FUnLoadAllLevelsCommand, FDragCommand, FUnselectAllProductsCommand, FPauseSequenceCommand, FStopSequenceCommand, FUnLoadAllProductsCommand, FRequestCameraPresetCommand, FLoopBackCommand, FExecuteConsoleCommandCommand, FBoolPayload, FFreezeFrameCommand, FFreezeFrameV2Command, FUnfreezeFrameV2Command, FDragSequencePayload, FDragSequenceCommand, FAlignProductsToPlanePayload, FAlignProductsToPlaneCommand, FCameraPresetPayload, FApplyCameraPresetCommand, FLoadSceneStatePayload, FLoadSceneStateCommand, FClickSnapCommand, FControlCameraModePayload, FSetControlCameraModeCommand, FCameraClampsPayload, FSetCameraControlClampsCommand, FSetPawnMovementModePayload, FSetPawnMovementModeCommand, FEnableTeleportCommand, FEnableSceneStateCallbackCommand, FApplyZoomPayload, FApplyZoomCommand, FFVectorPayload, FCameraBoxCommand, FDropPayload, FDropCommand, FSelectProductByObjectNamePayload, FSelectProductByObjectNameCommand, FGizmoTypePayload, FChangeGizmoTypeCommand, FWeatherPayload, FWeatherCommand, FFitToObjectsPayload, FFitToObjectsCommand, FSetProductsLocationPayload, FSetProductsLocationCommand, FResolutionPayload, FChangeResolutionCommand, FEnableSpinnerModeCommand, FControlSensitivityPayload, FControlSensitivityCommand, FCameraSettingsPayload, FCameraSettingsCommand, FDebugModeCommand, FEnableControlsCommand, FFStringPayload, FInitSequenceByObjectNamePayload, FInitSequenceByObjectNameCommand, FPlaySequencePayload, FPlaySequenceCommand, FJumpToSequencePayload, FJumpToSequenceCommand, FMoveSelectedPayload, FMoveSelectedCommand, FRotatePayload, FRotateSelectedCommand, FRenderPayload, FTakeRenderCommand, FTakeSpinnerRenderPreviewCommand, FTakeSpinnerRenderCommand, FSetMaterialPayload, FSetMaterialCommand, FProductPayload, FLoadProductCommand, FUnLoadProductByObjectNameCommand, FLevelPayload, FLoadLevelCommand, FComposurePayload, FEnableComposureCommand, FFStringsPayload, FClampPanToProductsCommand, FSettingsSequencePayload, FSetSettingsSequenceCommand } from '@3dsource/types-unreal';
8
+ import * as _3dsource_angular_unreal_module from '@3dsource/angular-unreal-module';
10
9
  import { IKeyCode, ImageOutputValues } from '@3dsource/utils';
10
+ import { MetaBoxCommandPacket, MetaBoxCommandList, FResetControlClampsCommand, FCameraRecenterCommand, FUnLoadAllLevelsCommand, FDragCommand, FUnselectAllProductsCommand, FPauseSequenceCommand, FStopSequenceCommand, FUnLoadAllProductsCommand, FRequestCameraPresetCommand, FLoopBackCommand, FExecuteConsoleCommandCommand, FBoolPayload, FFreezeFrameCommand, FFreezeFrameV2Command, FUnfreezeFrameV2Command, FDragSequencePayload, FDragSequenceCommand, FAlignProductsToPlanePayload, FAlignProductsToPlaneCommand, FCameraPresetPayload, FApplyCameraPresetCommand, FLoadSceneStatePayload, FLoadSceneStateCommand, FClickSnapCommand, FControlCameraModePayload, FSetControlCameraModeCommand, FCameraClampsPayload, FSetCameraControlClampsCommand, FSetPawnMovementModePayload, FSetPawnMovementModeCommand, FEnableTeleportCommand, FEnableSceneStateCallbackCommand, FApplyZoomPayload, FApplyZoomCommand, FFVectorPayload, FCameraBoxCommand, FDropPayload, FDropCommand, FSelectProductByObjectNamePayload, FSelectProductByObjectNameCommand, FGizmoTypePayload, FChangeGizmoTypeCommand, FWeatherPayload, FWeatherCommand, FFitToObjectsPayload, FFitToObjectsCommand, FSetProductsLocationPayload, FSetProductsLocationCommand, FResolutionPayload, FChangeResolutionCommand, FEnableSpinnerModeCommand, FControlSensitivityPayload, FControlSensitivityCommand, FCameraSettingsPayload, FCameraSettingsCommand, FDebugModeCommand, FEnableControlsCommand, FFStringPayload, FInitSequenceByObjectNamePayload, FInitSequenceByObjectNameCommand, FPlaySequencePayload, FPlaySequenceCommand, FJumpToSequencePayload, FJumpToSequenceCommand, FMoveSelectedPayload, FMoveSelectedCommand, FRotatePayload, FRotateSelectedCommand, FRenderPayload, FTakeRenderCommand, FTakeSpinnerRenderPreviewCommand, FTakeSpinnerRenderCommand, FSetMaterialPayload, FSetMaterialCommand, FProductPayload, FLoadProductCommand, FUnLoadProductByObjectNameCommand, FLevelPayload, FLoadLevelCommand, FComposurePayload, FEnableComposureCommand, FFStringsPayload, FClampPanToProductsCommand, FSettingsSequencePayload, FSetSettingsSequenceCommand } from '@3dsource/types-unreal';
11
11
  import { SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';
12
12
  import * as _ngrx_effects from '@ngrx/effects';
13
13
 
@@ -37,259 +37,143 @@ declare class LowBandwidthModalComponent {
37
37
  static ɵcmp: i0.ɵɵComponentDeclaration<LowBandwidthModalComponent, "app-low-bandwidth-modal", never, {}, {}, never, never, true, never>;
38
38
  }
39
39
 
40
- declare class SubService {
40
+ declare class ImageLoadingSrcComponent {
41
41
  store: Store<any>;
42
- disconnect$: rxjs.Observable<false>;
42
+ isLoaderScreenVisible: i0.Signal<boolean>;
43
+ imageLoadingSrc: i0.Signal<string>;
44
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageLoadingSrcComponent, never>;
45
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageLoadingSrcComponent, "app-image-loading-src", never, {}, {}, never, never, true, never>;
43
46
  }
44
47
 
45
- declare class AFKService extends SubService {
46
- private enabled;
47
- private readonly closeTimeout;
48
- private active;
49
- private warnTimer;
50
- private countdown;
51
- private countdownTimer;
52
- private selectWarnTimeout;
53
- private isViewportReady;
54
- constructor();
55
- initAfk(): void;
56
- init(): void;
57
- private hideOverlay;
58
- /**
59
- * Start a timer which when elapsed will warn the user they are inactive.
60
- */
61
- private startAfkWarningTimer;
62
- /**
63
- * If the user interacts, then reset the warning timer.
64
- */
65
- private resetAfkWarningTimer;
66
- /**
67
- * Update the count-down spans number for the overlay
68
- * @param countdown the count down number to be inserted into the span for updating
69
- */
70
- private updateCountDown;
71
- /**
72
- * Update the text overlays inner text
73
- * @param message the update text to be inserted into the overlay
74
- */
75
- private dispatchMessage;
76
- private stop;
77
- private reset;
78
- private showAfkOverlay;
79
- static ɵfac: i0.ɵɵFactoryDeclaration<AFKService, never>;
80
- static ɵprov: i0.ɵɵInjectableDeclaration<AFKService>;
48
+ declare class StatGraphComponent implements AfterViewInit {
49
+ private el;
50
+ graph: ElementRef;
51
+ private canvas;
52
+ private ctx;
53
+ readonly color: i0.InputSignal<string>;
54
+ readonly tickStep: i0.InputSignal<number>;
55
+ readonly label: i0.InputSignal<string>;
56
+ private scaleY;
57
+ set dataTick(data: {
58
+ value: number;
59
+ hash: number;
60
+ } | null);
61
+ private data;
62
+ max: number;
63
+ min: number;
64
+ current: number;
65
+ ngAfterViewInit(): void;
66
+ resize(): void;
67
+ private draw;
68
+ private getColor;
69
+ private pushData;
70
+ static ɵfac: i0.ɵɵFactoryDeclaration<StatGraphComponent, never>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<StatGraphComponent, "app-stat-graph", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "tickStep": { "alias": "tickStep"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "dataTick": { "alias": "dataTick"; "required": false; }; }, {}, never, never, true, never>;
81
72
  }
82
73
 
83
- declare class AggregatorService extends SubService {
84
- private readonly selectStreamConfig;
85
- private readonly videoService;
86
- private readonly webrtcPlayer;
87
- private readonly freezeFrame;
88
- private readonly unrealInitialConfig;
89
- private readonly responseEventListeners;
74
+ declare class UnrealSceneComponent implements AfterViewInit {
75
+ readonly isDevMode: boolean;
76
+ isStudio: i0.InputSignal<boolean>;
77
+ useContainerAsSizeProvider: i0.InputSignal<boolean>;
78
+ studioResolutionSize: i0.InputSignal<{
79
+ width: number;
80
+ height: number;
81
+ }>;
82
+ studioResolutionValues: rxjs.Observable<{
83
+ width: number;
84
+ height: number;
85
+ }>;
86
+ container: ElementRef;
87
+ changeMouseOverScene: i0.OutputEmitterRef<boolean>;
88
+ private width;
89
+ private height;
90
+ private store;
91
+ lightMode: i0.Signal<boolean>;
92
+ isFreezeFrameLoading: i0.Signal<boolean>;
93
+ isExistMatchUrls: i0.Signal<boolean>;
94
+ private aggregatorService;
95
+ private commandsSender;
96
+ private inputService;
97
+ private videoService;
98
+ private streamTelemetryService;
99
+ private element;
100
+ private destroyRef;
101
+ private get resizeValues();
102
+ private get pixelRatio();
103
+ onMouseOver(): void;
104
+ onMouseOut(): void;
105
+ constructor();
106
+ ngAfterViewInit(): void;
107
+ private adaptVideo;
90
108
  /**
91
- * Never called for now
109
+ * This method calculates the dimensions for resizing a layout in a configurator stream.
110
+ * It takes into account the pixel ratio of the device's screen and the orientation of the layout.
111
+ * The method uses the `fitIntoRectangle` function to calculate the dimensions that would allow the layout to fit into the maximum space while maintaining its aspect ratio.
112
+ * It also sets the maximum limits for the width and height based on the layout's orientation.
113
+ * If the scale of the fitted dimensions is less than 1, it assigns the fitted dimensions to the output. Otherwise, it sets the scale of the output to 1.
114
+ * @returns {Area} An object of type `Area` that contains the calculated dimensions for resizing the layout.
92
115
  */
93
- private readonly destroy$;
94
- constructor();
95
- init(): void;
96
- private initialize;
97
- private addResponseEventListener;
98
- private showOnScreenKeyboard;
99
- private removeLoadScreen;
100
- private startListenCallbacks;
101
- private showMessageFromUnreal;
102
- private resetResponseList;
103
- private listenWebRTC;
104
- private dataChannelMessageHandler;
105
- static ɵfac: i0.ɵɵFactoryDeclaration<AggregatorService, never>;
106
- static ɵprov: i0.ɵɵInjectableDeclaration<AggregatorService>;
116
+ private getResizeValuesUniversal;
117
+ private getResizeValues;
118
+ private sendResize;
119
+ private makeEven;
120
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnrealSceneComponent, never>;
121
+ static ɵcmp: i0.ɵɵComponentDeclaration<UnrealSceneComponent, "app-unreal-scene", never, { "isStudio": { "alias": "isStudio"; "required": false; "isSignal": true; }; "useContainerAsSizeProvider": { "alias": "useContainerAsSizeProvider"; "required": false; "isSignal": true; }; "studioResolutionSize": { "alias": "studioResolutionSize"; "required": false; "isSignal": true; }; }, { "changeMouseOverScene": "changeMouseOverScene"; }, never, ["app-intro-src", "app-pdf", "app-show-case", "app-low-bandwidth-detector"], true, never>;
107
122
  }
108
123
 
109
- declare class CommandTelemetryService {
110
- private readonly appId;
111
- private commandsSent;
112
- private exileTimout;
113
- private pollingTime;
114
- private commandSequenceNumber;
115
- /**
116
- * The time the telemetry service was started.
117
- * Initialized at a moment when connectToSignaling() was called.
118
- * @private
119
- */
120
- private startTime;
121
- private lastTime;
122
- private uuid;
123
- private viewId;
124
- private readonly sessionId;
125
- private readonly userId;
126
- private payloads;
127
- private readonly httpClient;
128
- private readonly unrealInitialConfig;
124
+ declare class IntroSrcComponent {
125
+ private videoElement;
126
+ private store;
127
+ protected imageIntroSrc: i0.Signal<string | null>;
128
+ protected videoIntroSrc: i0.Signal<string | null>;
129
+ private viewportReady;
129
130
  constructor();
130
- private get timeNow();
131
- private get sessionTime();
132
- private get canSkipSending();
133
- decorate(funcToDecorate: IToBeDecorated): (data: any) => void;
134
- private start;
135
- private reset;
136
- private trackStartCommand;
137
- private trackStopCommand;
138
- private pushStatToBuffer;
139
- private trackTime;
140
- private send;
141
- /**
142
- * Listens for Unreal Engine callbacks.
143
- * Subscribes to the Unreal Engine event loop back and filters out events that do not have a tracking ID.
144
- * When a callback with a tracking ID is received,
145
- * it stops tracking the time for that command and filters out commands
146
- * that have exceeded the timeout limit.
147
- */
148
- private listenCallbacks;
149
- private pushData;
150
- /**
151
- * Removes commands that have exceeded the timeout limit.
152
- * Iterates over all the commands sent and checks if the difference between the current time
153
- * and the time the command was sent is greater than the timeout limit.
154
- * If it is, the command is marked for deletion.
155
- * After checking all commands, those marked for deletion are removed from the commands sent.
156
- * This method is used to ensure that commands that are not responded to within a certain time frame
157
- * do not remain in the commandsSent object indefinitely, which could lead to memory leaks over time.
158
- */
159
- private removeExileCommands;
160
- /**
161
- * Wraps the provided function with telemetry tracking.
162
- * Generates a unique tracking ID and adds it to the data object.
163
- * Pushes the command sent to the payloads with the tracking ID.
164
- * Starts tracking the time for the command.
165
- * Finally, calls the provided function with the modified data object.
166
- *
167
- * @param {IToBeDecorated} funcToDecorate - The function to be decorated with telemetry tracking.
168
- * @param {any} data - The data object to be passed to the function. It will be augmented with a unique tracking ID.
169
- */
170
- private wrapper;
171
- static ɵfac: i0.ɵɵFactoryDeclaration<CommandTelemetryService, never>;
172
- static ɵprov: i0.ɵɵInjectableDeclaration<CommandTelemetryService>;
131
+ private createVideo;
132
+ static ɵfac: i0.ɵɵFactoryDeclaration<IntroSrcComponent, never>;
133
+ static ɵcmp: i0.ɵɵComponentDeclaration<IntroSrcComponent, "app-intro-src", never, {}, {}, never, never, true, never>;
173
134
  }
174
- type IToBeDecorated = (data: any) => unknown;
175
- declare function TelemetryStart(externalId: string): void;
176
- declare function TelemetryStop(externalId: string, payload?: any): void;
177
- declare function ResetTelemetry(): void;
178
135
 
179
- declare class ConsoleExtensionsService extends SubService {
180
- private httpClient;
136
+ declare class VideoStatsComponent implements OnInit {
137
+ collapsed: boolean;
138
+ private store;
139
+ private videoService;
181
140
  private isDevMode;
182
- init(): void;
183
- private unrealHelp;
184
- static ɵfac: i0.ɵɵFactoryDeclaration<ConsoleExtensionsService, never>;
185
- static ɵprov: i0.ɵɵInjectableDeclaration<ConsoleExtensionsService>;
141
+ private obs$;
142
+ viewportReady: i0.Signal<boolean | undefined>;
143
+ ssInfo: i0.Signal<string | undefined>;
144
+ fpsTick: i0.Signal<any>;
145
+ fpsAvgTick: i0.Signal<any>;
146
+ bitrateTick: i0.Signal<any>;
147
+ videoQP: i0.Signal<any>;
148
+ bitrateAverageTick: i0.Signal<any>;
149
+ videoStatus: i0.Signal<{
150
+ key: string;
151
+ value: any;
152
+ }[] | undefined>;
153
+ fields: string[];
154
+ graphList: any[];
155
+ graphList$: Observable<any>;
156
+ private idKey;
157
+ private elementsToShow;
158
+ private trigger$;
159
+ constructor();
160
+ ngOnInit(): void;
161
+ updateGraph(): void;
162
+ toggle(): void;
163
+ toggleGraph($event: MouseEvent, el: string, value?: any): void;
164
+ private getFields;
165
+ private writeFields;
166
+ static ɵfac: i0.ɵɵFactoryDeclaration<VideoStatsComponent, never>;
167
+ static ɵcmp: i0.ɵɵComponentDeclaration<VideoStatsComponent, "app-video-stats", never, {}, {}, never, never, true, never>;
186
168
  }
187
169
 
188
- declare class DevModeService {
189
- get isDevMode(): boolean;
190
- setDevMode(value: boolean): void;
191
- static ɵfac: i0.ɵɵFactoryDeclaration<DevModeService, never>;
192
- static ɵprov: i0.ɵɵInjectableDeclaration<DevModeService>;
193
- }
194
-
195
- declare class FreezeFrameService extends SubService {
196
- receiving: boolean;
197
- private size;
198
- private jpeg;
199
- private freezeFrameOverlay;
200
- init(): void;
201
- setData(view: Uint8Array): void;
202
- private dispatchInProgress;
203
- start(view: Uint8Array): void;
204
- invalidate(): void;
205
- private showFreezeFrame;
206
- static ɵfac: i0.ɵɵFactoryDeclaration<FreezeFrameService, never>;
207
- static ɵprov: i0.ɵɵInjectableDeclaration<FreezeFrameService>;
208
- }
209
-
210
- declare class InputService extends SubService {
211
- private commandsSender;
212
- private isDevMode;
213
- readonly defaultKeys: (17 | 37 | 38 | 39 | 40 | 46 | 65 | 68 | 83 | 87 | 107 | 109 | 187 | 189)[];
214
- private availableKeys;
215
- private options;
216
- private reInit$;
217
- private deactivatedVideoTrigger$;
218
- private normalizeAndQuantizeUnsigned;
219
- private unQuantizeAndDenormalizeUnsigned;
220
- private normalizeAndQuantizeSigned;
221
- video: HTMLVideoElement;
222
- videoBoundingRect: DOMRect;
223
- fingerIds: Map<any, any>;
224
- maxByteValue: number;
225
- fingers: number[];
226
- private offsetParams;
227
- constructor();
228
- useKeyboardKeys(keys: IKeyCode[]): void;
229
- private setup;
230
- /**
231
- * We use `object-fit: cover` on the video element. Since the video can have
232
- * a different aspect ratio from its container (and potentially be larger),
233
- * we need to calculate offsets and scale factors to map container (e.g., mouse)
234
- * coordinates back to the actual video coordinates.
235
- *
236
- * @param videoElement The video element whose scaling and positioning we need
237
- * @returns Object containing offset and scale info for coordinate normalization
238
- * @private
239
- */
240
- private getObjectFitOffset;
241
- private setupNormalizeAndQuantize;
242
- private sendInputData;
243
- private registerInputs;
244
- private getTouchPositionWithOffset;
245
- private getMousePositionWithOffset;
246
- private registerTouchEvents;
247
- focusWindow(): void;
248
- emitMouseMove(x: number, y: number, deltaX: number, deltaY: number): void;
249
- emitMouseDown(button: number, x: number, y: number): void;
250
- emitMouseUp(button: number, x: number, y: number): void;
251
- emitMouseWheel(delta: number, x: number, y: number): void;
252
- private releaseMouseButtons;
253
- private pressMouseButtons;
254
- private registerHoveringMouseEvents;
255
- private registerMouseEnterAndLeaveEvents;
256
- private isKeyCodeBrowserKey;
257
- private getKeyCode;
258
- private registerKeyboardEvents;
259
- private startListenKeys;
260
- }
261
-
262
- declare class RegionsPingService {
263
- private httpClient;
264
- private unrealInitialConfig;
265
- config: {
266
- ping_count: number;
267
- ping_timeout: number;
268
- max_parallel_requests: number;
269
- bust_cache: boolean;
270
- };
271
- constructor();
272
- getFastest(regionListUrl?: string): Observable<string | undefined>;
273
- getPingResult(providers: ProvidersData): Observable<PingResult | null>;
274
- getProviders(regionList?: string): Observable<ProvidersData>;
275
- private startPinging;
276
- private checkLatency;
277
- private fetchWithTimeout;
278
- static ɵfac: i0.ɵɵFactoryDeclaration<RegionsPingService, never>;
279
- static ɵprov: i0.ɵɵInjectableDeclaration<RegionsPingService>;
280
- }
281
- interface ProvidersData {
282
- timeout?: number;
283
- regions: Region[];
284
- }
285
- interface Region {
286
- region_code: string;
287
- url: string;
288
- timeout?: number;
289
- }
290
- interface PingResult {
291
- region_code: string | undefined;
292
- result: number[];
170
+ declare class WebrtcErrorModalComponent {
171
+ private dialogRef;
172
+ private store;
173
+ close(): void;
174
+ closeModalWithCirrusDisconnect(): void;
175
+ static ɵfac: i0.ɵɵFactoryDeclaration<WebrtcErrorModalComponent, never>;
176
+ static ɵcmp: i0.ɵɵComponentDeclaration<WebrtcErrorModalComponent, "app-webrtc-error-modal", never, {}, {}, never, never, true, never>;
293
177
  }
294
178
 
295
179
  declare const WSCloseCode_NORMAL_CLOSURE = 3000;
@@ -435,139 +319,565 @@ declare const DATA_CHANNEL_CONNECTION_TIMEOUT = 8000;
435
319
  declare const SIGNALLING_PERCENT_VALUE = 56;
436
320
  declare const SCREEN_LOCKER_CONTAINER_ID = "3dsource_start_screen";
437
321
 
438
- declare function provideAngularUnrealModule(): (i0.EnvironmentProviders | typeof AFKService | typeof FreezeFrameService | typeof VideoService | typeof CommandTelemetryService | typeof SignallingService | typeof RegionsPingService | typeof WebRtcPlayerService | typeof AggregatorService | typeof ConsoleExtensionsService | typeof UnrealCommunicatorService | typeof InputService | typeof StreamStatusTelemetryService)[];
439
-
440
- interface NormalizeAndQuantizeUnsignedValue {
441
- inRange: boolean;
442
- x: number;
443
- y: number;
444
- }
445
- interface UnquantizeAndDenormalizeUnsignedValue {
446
- x: number;
447
- y: number;
448
- }
449
- interface NormalizeAndQuantizeSignedValue {
450
- x: number;
451
- y: number;
452
- }
453
- interface InputProps {
454
- controlScheme: EControlSchemeTypeValues;
455
- suppressBrowserKeys: boolean;
456
- fakeMouseWithTouches: boolean;
457
- }
458
-
459
- declare function AnswerHandler(this: SignallingService, msg: RTCSessionDescriptionInit): void;
460
-
461
- declare function ConfigHandler(this: SignallingService, msg: ConfigMessage): void;
462
-
463
- declare function IceCandidateHandler(this: SignallingService, msg: {
464
- candidate: RTCIceCandidate;
465
- }): void;
466
-
467
- declare function InstanceReadyHandler(this: SignallingService, _: InstanceReady): void;
468
-
469
- declare function InstanceReservedHandler(this: SignallingService, msg: InstanceReserved): void;
470
-
471
- declare function PingHandler(this: SignallingService): void;
472
-
473
- declare function PlayerCountHandler(this: SignallingService, msg: PlayerCountMessage): void;
474
-
475
- declare function SSInfoHandler(this: SignallingService, msg: SSInfo): null;
476
-
477
- declare function OnCloseHandler(this: SignallingService, e: CloseEvent): void;
478
-
479
- declare function OnErrorHandler(this: SignallingService, e: Event): void;
480
-
481
- declare function OnMessageHandler(this: SignallingService, e: MessageEvent<string | Blob>): void;
482
-
483
- declare function OnOpenHandler(this: SignallingService): void;
484
-
485
- /**
486
- * Keeps the max of numbers seen so far; resets to 0 whenever `reset$` emits.
487
- * Emits `0` immediately on reset.
488
- */
489
- declare const keepMaxUntilReset: (reset$: Observable<unknown>) => ((source: Observable<number>) => Observable<number>);
490
-
491
- declare function observeCommandResponse<K extends keyof MetaBoxCommandList, T extends MetaBoxCommandList[K] = MetaBoxCommandList[K]>(data: T, sender: (data: T) => void, timeOut?: number, dispatchOnTimeout?: boolean): Observable<ObservedCallbackResponse<T> | never>;
492
- interface ObservedCallbackResponse<T extends MetaBoxCommandPacket> {
493
- json: {
494
- commandCallback: T;
495
- };
322
+ declare class SubService {
323
+ store: Store<any>;
324
+ disconnect$: rxjs.Observable<false>;
496
325
  }
497
326
 
498
- declare function decodeData(anyData: any): string;
499
-
500
- interface FilterSettings {
501
- /**
502
- * Minimum number of kilobits per second to trigger low bandwidth
503
- */
504
- minimumBitrate: number;
327
+ declare class AFKService extends SubService {
328
+ private enabled;
329
+ private readonly closeTimeout;
330
+ private active;
331
+ private warnTimer;
332
+ private countdown;
333
+ private countdownTimer;
334
+ private selectWarnTimeout;
335
+ private isViewportReady;
336
+ constructor();
337
+ initAfk(): void;
338
+ init(): void;
339
+ private hideOverlay;
505
340
  /**
506
- * Amount of a percentage drop to trigger a yellow warning
341
+ * Start a timer which when elapsed will warn the user they are inactive.
507
342
  */
508
- yellowFlag: number;
343
+ private startAfkWarningTimer;
509
344
  /**
510
- * Amount of a percentage drop to trigger a red warning
345
+ * If the user interacts, then reset the warning timer.
511
346
  */
512
- redFlag: number;
347
+ private resetAfkWarningTimer;
513
348
  /**
514
- * Minimum number of frames per second to trigger low bandwidth
349
+ * Update the count-down spans number for the overlay
350
+ * @param countdown the count down number to be inserted into the span for updating
515
351
  */
516
- minimumFps: number;
352
+ private updateCountDown;
517
353
  /**
518
- * Time to wait before checking if we can switch to low bandwidth
354
+ * Update the text overlays inner text
355
+ * @param message the update text to be inserted into the overlay
519
356
  */
520
- monitoringDelayTime: number;
521
- initialBitrateEstimate: number;
522
- initialErrorCovariance: number;
523
- processNoise: number;
524
- measurementNoise: number;
525
- panelOpen: boolean;
357
+ private dispatchMessage;
358
+ private stop;
359
+ private reset;
360
+ private showAfkOverlay;
361
+ static ɵfac: i0.ɵɵFactoryDeclaration<AFKService, never>;
362
+ static ɵprov: i0.ɵɵInjectableDeclaration<AFKService>;
526
363
  }
527
- /**
528
- * Default LBM Filter Parameters
529
- */
530
- declare const DefaultFilterModel: FilterSettings;
531
364
 
532
- interface DataFlowCheckResult {
533
- isDropDetected: boolean;
534
- dropPercentage: number;
535
- activeMedian: number;
536
- quality: Quality;
537
- message: string;
538
- dataHistory: number[];
539
- config: {
540
- yellowFlagThresholdPercentage: number;
541
- redFlagThresholdPercentage: number;
542
- historyBufferLength: number;
543
- splitPoint: number;
544
- };
545
- }
546
- declare class DataFlowMonitor {
547
- protected yellowFlagThresholdPercentage: number;
548
- protected redFlagThresholdPercentage: number;
549
- protected historyBufferLength: number;
550
- protected splitPoint: number;
551
- protected dataHistory: number[];
552
- /**
553
- * Initializes the DataFlowMonitor monitor.
554
- * @param yellowFlagThresholdPercentage - The percentage drop to trigger a YELLOW warning (default: 15%).
555
- * @param redFlagThresholdPercentage - The percentage drop to trigger a RED warning (default: 30%).
556
- * @param historyBufferLength - buffer length (default: 100).
557
- * @param splitPoint - The point at which to split the history buffer into two halves (default: 0.5).
558
- */
559
- constructor(yellowFlagThresholdPercentage?: number, redFlagThresholdPercentage?: number, historyBufferLength?: number, splitPoint?: number);
560
- reset(): void;
561
- config(data: FilterSettings): void;
365
+ declare class AggregatorService extends SubService {
366
+ private readonly selectStreamConfig;
367
+ private readonly videoService;
368
+ private readonly webrtcPlayer;
369
+ private readonly freezeFrame;
370
+ private readonly unrealInitialConfig;
371
+ private readonly responseEventListeners;
562
372
  /**
563
- * Adds a new bitrate measurement and checks for significant drops.
564
- * @param currentValue - The current bitrate in kbps.
565
- * @returns BitrateCheckResult indicating if a drop was detected.
373
+ * Never called for now
566
374
  */
567
- addValue(currentValue: number): DataFlowCheckResult;
568
- }
569
-
570
- declare const dispatchResize: () => void;
375
+ private readonly destroy$;
376
+ constructor();
377
+ init(): void;
378
+ private initialize;
379
+ private addResponseEventListener;
380
+ private showOnScreenKeyboard;
381
+ private removeLoadScreen;
382
+ private startListenCallbacks;
383
+ private showMessageFromUnreal;
384
+ private resetResponseList;
385
+ private listenWebRTC;
386
+ private dataChannelMessageHandler;
387
+ static ɵfac: i0.ɵɵFactoryDeclaration<AggregatorService, never>;
388
+ static ɵprov: i0.ɵɵInjectableDeclaration<AggregatorService>;
389
+ }
390
+
391
+ declare class CommandTelemetryService {
392
+ private readonly appId;
393
+ private commandsSent;
394
+ private exileTimout;
395
+ private pollingTime;
396
+ private commandSequenceNumber;
397
+ /**
398
+ * The time the telemetry service was started.
399
+ * Initialized at a moment when connectToSignaling() was called.
400
+ * @private
401
+ */
402
+ private startTime;
403
+ private lastTime;
404
+ private uuid;
405
+ private viewId;
406
+ private readonly sessionId;
407
+ private readonly userId;
408
+ private payloads;
409
+ private readonly httpClient;
410
+ private readonly unrealInitialConfig;
411
+ constructor();
412
+ private get timeNow();
413
+ private get sessionTime();
414
+ private get canSkipSending();
415
+ decorate(funcToDecorate: IToBeDecorated): (data: any) => void;
416
+ private start;
417
+ private reset;
418
+ private trackStartCommand;
419
+ private trackStopCommand;
420
+ private pushStatToBuffer;
421
+ private trackTime;
422
+ private send;
423
+ /**
424
+ * Listens for Unreal Engine callbacks.
425
+ * Subscribes to the Unreal Engine event loop back and filters out events that do not have a tracking ID.
426
+ * When a callback with a tracking ID is received,
427
+ * it stops tracking the time for that command and filters out commands
428
+ * that have exceeded the timeout limit.
429
+ */
430
+ private listenCallbacks;
431
+ private pushData;
432
+ /**
433
+ * Removes commands that have exceeded the timeout limit.
434
+ * Iterates over all the commands sent and checks if the difference between the current time
435
+ * and the time the command was sent is greater than the timeout limit.
436
+ * If it is, the command is marked for deletion.
437
+ * After checking all commands, those marked for deletion are removed from the commands sent.
438
+ * This method is used to ensure that commands that are not responded to within a certain time frame
439
+ * do not remain in the commandsSent object indefinitely, which could lead to memory leaks over time.
440
+ */
441
+ private removeExileCommands;
442
+ /**
443
+ * Wraps the provided function with telemetry tracking.
444
+ * Generates a unique tracking ID and adds it to the data object.
445
+ * Pushes the command sent to the payloads with the tracking ID.
446
+ * Starts tracking the time for the command.
447
+ * Finally, calls the provided function with the modified data object.
448
+ *
449
+ * @param {IToBeDecorated} funcToDecorate - The function to be decorated with telemetry tracking.
450
+ * @param {any} data - The data object to be passed to the function. It will be augmented with a unique tracking ID.
451
+ */
452
+ private wrapper;
453
+ static ɵfac: i0.ɵɵFactoryDeclaration<CommandTelemetryService, never>;
454
+ static ɵprov: i0.ɵɵInjectableDeclaration<CommandTelemetryService>;
455
+ }
456
+ type IToBeDecorated = (data: any) => unknown;
457
+ declare function TelemetryStart(externalId: string): void;
458
+ declare function TelemetryStop(externalId: string, payload?: any): void;
459
+ declare function ResetTelemetry(): void;
460
+
461
+ declare class ConsoleExtensionsService extends SubService {
462
+ private httpClient;
463
+ private isDevMode;
464
+ init(): void;
465
+ private unrealHelp;
466
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConsoleExtensionsService, never>;
467
+ static ɵprov: i0.ɵɵInjectableDeclaration<ConsoleExtensionsService>;
468
+ }
469
+
470
+ declare class DevModeService {
471
+ get isDevMode(): boolean;
472
+ setDevMode(value: boolean): void;
473
+ static ɵfac: i0.ɵɵFactoryDeclaration<DevModeService, never>;
474
+ static ɵprov: i0.ɵɵInjectableDeclaration<DevModeService>;
475
+ }
476
+
477
+ declare class FreezeFrameService extends SubService {
478
+ receiving: boolean;
479
+ private size;
480
+ private jpeg;
481
+ private freezeFrameOverlay;
482
+ init(): void;
483
+ setData(view: Uint8Array): void;
484
+ private dispatchInProgress;
485
+ start(view: Uint8Array): void;
486
+ invalidate(): void;
487
+ private showFreezeFrame;
488
+ static ɵfac: i0.ɵɵFactoryDeclaration<FreezeFrameService, never>;
489
+ static ɵprov: i0.ɵɵInjectableDeclaration<FreezeFrameService>;
490
+ }
491
+
492
+ declare class InputService extends SubService {
493
+ private commandsSender;
494
+ private isDevMode;
495
+ readonly defaultKeys: (17 | 37 | 38 | 39 | 40 | 46 | 65 | 68 | 83 | 87 | 107 | 109 | 187 | 189)[];
496
+ private availableKeys;
497
+ private options;
498
+ private reInit$;
499
+ private deactivatedVideoTrigger$;
500
+ private normalizeAndQuantizeUnsigned;
501
+ private unQuantizeAndDenormalizeUnsigned;
502
+ private normalizeAndQuantizeSigned;
503
+ video: HTMLVideoElement;
504
+ videoBoundingRect: DOMRect;
505
+ fingerIds: Map<any, any>;
506
+ maxByteValue: number;
507
+ fingers: number[];
508
+ private offsetParams;
509
+ constructor();
510
+ useKeyboardKeys(keys: IKeyCode[]): void;
511
+ private setup;
512
+ /**
513
+ * We use `object-fit: cover` on the video element. Since the video can have
514
+ * a different aspect ratio from its container (and potentially be larger),
515
+ * we need to calculate offsets and scale factors to map container (e.g., mouse)
516
+ * coordinates back to the actual video coordinates.
517
+ *
518
+ * @param videoElement The video element whose scaling and positioning we need
519
+ * @returns Object containing offset and scale info for coordinate normalization
520
+ * @private
521
+ */
522
+ private getObjectFitOffset;
523
+ private setupNormalizeAndQuantize;
524
+ private sendInputData;
525
+ private registerInputs;
526
+ private getTouchPositionWithOffset;
527
+ private getMousePositionWithOffset;
528
+ private registerTouchEvents;
529
+ focusWindow(): void;
530
+ emitMouseMove(x: number, y: number, deltaX: number, deltaY: number): void;
531
+ emitMouseDown(button: number, x: number, y: number): void;
532
+ emitMouseUp(button: number, x: number, y: number): void;
533
+ emitMouseWheel(delta: number, x: number, y: number): void;
534
+ private releaseMouseButtons;
535
+ private pressMouseButtons;
536
+ private registerHoveringMouseEvents;
537
+ private registerMouseEnterAndLeaveEvents;
538
+ private isKeyCodeBrowserKey;
539
+ private getKeyCode;
540
+ private registerKeyboardEvents;
541
+ private startListenKeys;
542
+ }
543
+
544
+ declare class RegionsPingService {
545
+ private httpClient;
546
+ private unrealInitialConfig;
547
+ config: {
548
+ ping_count: number;
549
+ ping_timeout: number;
550
+ max_parallel_requests: number;
551
+ bust_cache: boolean;
552
+ };
553
+ constructor();
554
+ getFastest(regionListUrl?: string): Observable<string | undefined>;
555
+ getPingResult(providers: ProvidersData): Observable<PingResult | null>;
556
+ getProviders(regionList?: string): Observable<ProvidersData>;
557
+ private startPinging;
558
+ private checkLatency;
559
+ private fetchWithTimeout;
560
+ static ɵfac: i0.ɵɵFactoryDeclaration<RegionsPingService, never>;
561
+ static ɵprov: i0.ɵɵInjectableDeclaration<RegionsPingService>;
562
+ }
563
+ interface ProvidersData {
564
+ timeout?: number;
565
+ regions: Region[];
566
+ }
567
+ interface Region {
568
+ region_code: string;
569
+ url: string;
570
+ timeout?: number;
571
+ }
572
+ interface PingResult {
573
+ region_code: string | undefined;
574
+ result: number[];
575
+ }
576
+
577
+ declare class SignallingService extends SubService {
578
+ private readonly action$;
579
+ private readonly httpClient;
580
+ private readonly regionsPingService;
581
+ onOffer$: Subject<RTCSessionDescriptionInit>;
582
+ onConfig$: Subject<ConfigMessage>;
583
+ onWebRtcIce$: Subject<RTCIceCandidate>;
584
+ onWebRtcAnswer$: Subject<RTCSessionDescriptionInit | null>;
585
+ abort$: Observable<_ngrx_store.Action<string>>;
586
+ private ws;
587
+ private wsMsgHandlers;
588
+ protected correlationId: string;
589
+ protected environmentId: string;
590
+ constructor();
591
+ connectToSignaling(urlList: string[]): Observable<WebSocket>;
592
+ protected startEstablishingConnection(): void;
593
+ private adaptUrlsToRegion;
594
+ /**
595
+ * Resolves an active AWS *signaling* instance and returns a WebSocket endpoint.
596
+ *
597
+ * The observable produced by this method is **cold** and executes inside a `defer`,
598
+ * so each subscription (including those triggered by `retry`) pulls the **next**
599
+ * URL candidate from a generator created by `getActiveUrl(urlsPool)`.
600
+ *
601
+ * ### Execution flow
602
+ *
603
+ * 1. **Telemetry** — Starts a `getSignaling` span for end-to-end timing.
604
+ * 2. **Candidate URL selection** — A stateful generator (`urlGen`) is created
605
+ * from `urlsPool`. Each resubscription (e.g. via `retry`) advances to the next URL.
606
+ * 3. **Short-circuit for WS URLs** — If the picked candidate already matches
607
+ * `ws://` or `wss://`, emit `{ wsUrl, pollingUrl: null, instanceName: null }`
608
+ * immediately and complete (no HTTP request).
609
+ * 4. **Await client/view identifiers** — `this.store.select(selectClientAndViewIds)`
610
+ * is tapped for logging (missing IDs) and then filtered to require both `clientId`
611
+ * and `viewId` to be truthy.
612
+ * 5. **Single in-flight HTTP orchestration call** — Uses `exhaustMap` to issue
613
+ * `GET {signalingUrl}{clientId}/{viewId}`. New `{clientId, viewId}` emissions
614
+ * while the request is in flight are **ignored** until completion, preventing overlap.
615
+ * 6. **Per-attempt timeout** — `timeout(WS_TIMEOUT)` caps how long we wait for a response.
616
+ * On timeout, the attempt errors and the outer `retry` schedules the next URL.
617
+ * 7. **Response validation & progress reporting** — A `filter`:
618
+ * - Calls `TelemetryStop('getSignaling', { ...data, multi: true })` on receipt.
619
+ * - If `data.signallingServer === ''` or `data.error`:
620
+ * shows a status message, optionally dispatches `setStatusPercentSignallingServer`
621
+ * with `data.info.percent`, and **throws** to fail the attempt (triggers `retry`).
622
+ * 8. **Mapping to `AwsInstance`** — Converts the validated orchestration payload into:
623
+ * - `wsUrl`: via `httpUrlToWs(\`\${location.protocol}//\${data.signallingServer}\`)`
624
+ * - `pollingUrl`: the base `signalingUrl` that succeeded
625
+ * - `instanceName`: the (validated) `data.signallingServer`
626
+ * 9. **Retry policy** — On *any* upstream error (timeout, HTTP error, invalid payload),
627
+ * `retry({ delay })`:
628
+ * - Shows a “connecting” status,
629
+ * - Logs the attempt number,
630
+ * - Waits `WS_TIMEOUT` ms (via `timer`) and **resubscribes**, advancing `urlGen`.
631
+ *
632
+ * ### Concurrency semantics
633
+ *
634
+ * - `exhaustMap` guarantees a **single** HTTP request per attempt; subsequent
635
+ * `{clientId, viewId}` emissions are ignored until the current request completes.
636
+ *
637
+ * ### Telemetry semantics
638
+ *
639
+ * - `TelemetryStart('getSignaling')` begins before work.
640
+ * - `TelemetryStop('getSignaling', {...})` runs on receipt of an orchestration response.
641
+ * If an attempt fails (e.g., timeout), stopping the span is the responsibility of
642
+ * your telemetry layer or a `finalize` elsewhere if desired.
643
+ *
644
+ * ### Error & retry semantics
645
+ *
646
+ * - Missing/never-emitted IDs → timeout → retry with next URL.
647
+ * - HTTP/network error → retry with next URL.
648
+ * - Invalid orchestration payload (`error` set or empty `signallingServer`) → throw in
649
+ * validation filter → retry with next URL.
650
+ * - Short-circuit WS path **does not** retry (emits once, completes).
651
+ *
652
+ * @param urlsPool - Ordered list of base URLs to probe. Retries advance through this list
653
+ * until a working signaling server is found. A candidate may also be a direct `ws://`/`wss://`
654
+ * URL to short-circuit HTTP orchestration.
655
+ *
656
+ * @returns Observable that emits exactly one {@link AwsInstance} on success and then completes.
657
+ * On failure, the stream errors; the built-in `retry` operator re-subscribes after `WS_TIMEOUT`
658
+ * and advances to the next URL candidate.
659
+ *
660
+ * @throws Emits an error within the observable chain (not a thrown synchronous exception) when:
661
+ * - The HTTP request fails or times out.
662
+ * - The orchestration response indicates an error or an empty `signallingServer`.
663
+ * - Any other operator in the chain surfaces an error.
664
+ *
665
+ * @remarks
666
+ * - The URL generator (`urlGen`) is created **outside** `defer`, so resubscriptions
667
+ * advance the pool. Creating it inside `defer` would restart from the first URL each retry.
668
+ * - `location.protocol` is used to derive `ws` vs `wss`. If this may run in non-browser
669
+ * contexts (e.g., SSR), guard or abstract this logic.
670
+ * - Consider capping retries with `count` in `retry({ count, delay })` when appropriate.
671
+ *
672
+ * @example
673
+ * ```ts
674
+ * getAwsInstance(['https://signaling.example.com/', 'wss://direct.example.com'])
675
+ * .subscribe({
676
+ * next: ({ wsUrl }) => connect(wsUrl),
677
+ * error: (e) => console.error('Unable to establish signaling:', e),
678
+ * });
679
+ * ```
680
+ *
681
+ * @see httpUrlToWs
682
+ * @see selectClientAndViewIds
683
+ * @see setStatusPercentSignallingServer
684
+ */
685
+ private getAwsInstance;
686
+ private connectToCirrus;
687
+ addWsHandlers(ws: WebSocket): void;
688
+ showStatusMessage(message: string | null): void;
689
+ /**
690
+ * Close the connection with the signaling server
691
+ * @param data
692
+ */
693
+ close(data: CloseReason): void;
694
+ send(data: string | object): void;
695
+ private clearWs;
696
+ protected handleMessage(msg: MessageBase): void;
697
+ private setHandlersFromStream;
698
+ private getRegion;
699
+ static ɵfac: i0.ɵɵFactoryDeclaration<SignallingService, never>;
700
+ static ɵprov: i0.ɵɵInjectableDeclaration<SignallingService>;
701
+ }
702
+
703
+ declare class StreamStatusTelemetryService {
704
+ private store;
705
+ private videoService;
706
+ constructor();
707
+ private mapEventData;
708
+ private initTelemetry;
709
+ private trackEventToMixPanel;
710
+ init(): void;
711
+ static ɵfac: i0.ɵɵFactoryDeclaration<StreamStatusTelemetryService, never>;
712
+ static ɵprov: i0.ɵɵInjectableDeclaration<StreamStatusTelemetryService>;
713
+ }
714
+
715
+ declare class UnrealCommunicatorService {
716
+ private telemetry;
717
+ private afkService;
718
+ private freezeFrame;
719
+ private webrtcPlayer;
720
+ private videoService;
721
+ private consoleExtensions;
722
+ private store;
723
+ private destroy$;
724
+ private cirrusConnected;
725
+ constructor();
726
+ destroy(): void;
727
+ sendCommandToUnreal(data: MetaBoxCommandPacket): void;
728
+ emitUIInteraction(descriptor: MetaBoxCommandPacket): void;
729
+ /**
730
+ A build-in command can be sent to the UE4 client. The commands are defined by a
731
+ JSON descriptor and will be executed automatically.
732
+ The currently supported commands are:
733
+
734
+ 1. A command to run any console command:
735
+ "{ ConsoleCommand: <string> }"
736
+
737
+ 2. A command to change the resolution to the given width and height.
738
+ "{ Resolution.Width: <value>, Resolution.Height: <value> } }"
739
+ */
740
+ emitCommand(descriptor: MetaBoxCommandPacket): void;
741
+ sendInputData(data: ArrayBuffer): void;
742
+ private emitDescriptor;
743
+ private requestInitialSettings;
744
+ private requestQualityControl;
745
+ private listenVideo;
746
+ private prepareScreen;
747
+ private showPlayOverlay;
748
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnrealCommunicatorService, never>;
749
+ static ɵprov: i0.ɵɵInjectableDeclaration<UnrealCommunicatorService>;
750
+ }
751
+
752
+ declare class VideoService extends SubService {
753
+ video: HTMLVideoElement | null;
754
+ audio: HTMLAudioElement | null;
755
+ private container;
756
+ private latencyTestTimings;
757
+ private videoTrack$;
758
+ private VideoEncoderQP;
759
+ private aggregatedStats;
760
+ private kalmanFilter1D;
761
+ /**
762
+ * Aggregate video stats and emit it as videoStats$
763
+ */
764
+ videoStats$: rxjs.Observable<IAggregatedStat>;
765
+ constructor();
766
+ setContainer(container: HTMLDivElement): void;
767
+ setLatencyTimings(latencyTimings: string): void;
768
+ setEncoder(data: any): void;
769
+ create(): void;
770
+ attachVideoStream(stream: MediaStream, pcClient: RTCPeerConnection): void;
771
+ attachAudioStream(stream: MediaStream): void;
772
+ play(): void;
773
+ private getStats;
774
+ private generateAggregatedStatsFunction;
775
+ private onAggregatedStats;
776
+ private destroy;
777
+ private createWebRtcVideo;
778
+ private createWebRtcAudio;
779
+ private playAudio;
780
+ static ɵfac: i0.ɵɵFactoryDeclaration<VideoService, never>;
781
+ static ɵprov: i0.ɵɵInjectableDeclaration<VideoService>;
782
+ }
783
+
784
+ declare class WebRtcPlayerService extends SubService {
785
+ onDataChannelMessage$: Subject<number[]>;
786
+ private pcClient;
787
+ private signallingSrv;
788
+ private videoService;
789
+ private cfg;
790
+ private useMic;
791
+ private forceTURN;
792
+ private forceMonoAudio;
793
+ private dcClient;
794
+ constructor();
795
+ private listenSignaling;
796
+ private createWebRtcOffer;
797
+ private createDataChannel;
798
+ private receiveAnswer;
799
+ private handleCandidateFromServer;
800
+ private mungeSDP;
801
+ /**
802
+ * Closes existing PeerConnection
803
+ */
804
+ closePC(): void;
805
+ canSend(): boolean | null;
806
+ send(data: ArrayBuffer): void;
807
+ private setConfig;
808
+ private createPeerConnection;
809
+ private handlePeerConnectionEvents;
810
+ private setupTransceiversAsync;
811
+ private setupDataChannelCallbacks;
812
+ private onDataChannelConnected;
813
+ private createOffer;
814
+ static ɵfac: i0.ɵɵFactoryDeclaration<WebRtcPlayerService, never>;
815
+ static ɵprov: i0.ɵɵInjectableDeclaration<WebRtcPlayerService>;
816
+ }
817
+
818
+ declare function provideAngularUnrealModule(): (i0.EnvironmentProviders | typeof AFKService | typeof FreezeFrameService | typeof VideoService | typeof CommandTelemetryService | typeof SignallingService | typeof RegionsPingService | typeof WebRtcPlayerService | typeof AggregatorService | typeof ConsoleExtensionsService | typeof UnrealCommunicatorService | typeof InputService | typeof StreamStatusTelemetryService)[];
819
+
820
+ interface NormalizeAndQuantizeUnsignedValue {
821
+ inRange: boolean;
822
+ x: number;
823
+ y: number;
824
+ }
825
+ interface UnquantizeAndDenormalizeUnsignedValue {
826
+ x: number;
827
+ y: number;
828
+ }
829
+ interface NormalizeAndQuantizeSignedValue {
830
+ x: number;
831
+ y: number;
832
+ }
833
+ interface InputProps {
834
+ controlScheme: EControlSchemeTypeValues;
835
+ suppressBrowserKeys: boolean;
836
+ fakeMouseWithTouches: boolean;
837
+ }
838
+
839
+ declare function AnswerHandler(this: SignallingService, msg: RTCSessionDescriptionInit): void;
840
+
841
+ declare function ConfigHandler(this: SignallingService, msg: ConfigMessage): void;
842
+
843
+ declare function IceCandidateHandler(this: SignallingService, msg: {
844
+ candidate: RTCIceCandidate;
845
+ }): void;
846
+
847
+ declare function InstanceReadyHandler(this: SignallingService, _: InstanceReady): void;
848
+
849
+ declare function InstanceReservedHandler(this: SignallingService, msg: InstanceReserved): void;
850
+
851
+ declare function PingHandler(this: SignallingService): void;
852
+
853
+ declare function PlayerCountHandler(this: SignallingService, msg: PlayerCountMessage): void;
854
+
855
+ declare function SSInfoHandler(this: SignallingService, msg: SSInfo): null;
856
+
857
+ declare function OnCloseHandler(this: SignallingService, e: CloseEvent): void;
858
+
859
+ declare function OnErrorHandler(this: SignallingService, e: Event): void;
860
+
861
+ declare function OnMessageHandler(this: SignallingService, e: MessageEvent<string | Blob>): void;
862
+
863
+ declare function OnOpenHandler(this: SignallingService): void;
864
+
865
+ /**
866
+ * Keeps the max of numbers seen so far; resets to 0 whenever `reset$` emits.
867
+ * Emits `0` immediately on reset.
868
+ */
869
+ declare const keepMaxUntilReset: (reset$: Observable<unknown>) => ((source: Observable<number>) => Observable<number>);
870
+
871
+ declare function observeCommandResponse<K extends keyof MetaBoxCommandList, T extends MetaBoxCommandList[K] = MetaBoxCommandList[K]>(data: T, sender: (data: T) => void, timeOut?: number, dispatchOnTimeout?: boolean): Observable<ObservedCallbackResponse<T> | never>;
872
+ interface ObservedCallbackResponse<T extends MetaBoxCommandPacket> {
873
+ json: {
874
+ commandCallback: T;
875
+ };
876
+ }
877
+
878
+ declare function decodeData(anyData: any): string;
879
+
880
+ declare const dispatchResize: () => void;
571
881
  declare const forceResizeUnrealVideo: () => void;
572
882
 
573
883
  declare function getRtcErrorMessage(code: number | null): string | undefined;
@@ -1297,403 +1607,83 @@ interface InboundVideoStats extends RTCInboundRtpStreamStats {
1297
1607
  kalmanBitrate: number;
1298
1608
  bitrateDrop: number;
1299
1609
  dataFlowCheckResult: DataFlowCheckResult;
1300
- dataFlowBitrate: DataFlowCheckResult;
1301
- }
1302
- interface AwsInstance {
1303
- wsUrl: string | null;
1304
- pollingUrl: string | null;
1305
- instanceName: string | null;
1306
- }
1307
-
1308
- declare class SignallingService extends SubService {
1309
- private readonly action$;
1310
- private readonly httpClient;
1311
- private readonly regionsPingService;
1312
- onOffer$: Subject<RTCSessionDescriptionInit>;
1313
- onConfig$: Subject<ConfigMessage>;
1314
- onWebRtcIce$: Subject<RTCIceCandidate>;
1315
- onWebRtcAnswer$: Subject<RTCSessionDescriptionInit | null>;
1316
- abort$: Observable<_ngrx_store.Action<string>>;
1317
- private ws;
1318
- private wsMsgHandlers;
1319
- protected correlationId: string;
1320
- protected environmentId: string;
1321
- constructor();
1322
- connectToSignaling(urlList: string[]): Observable<WebSocket>;
1323
- protected startEstablishingConnection(): void;
1324
- private adaptUrlsToRegion;
1325
- /**
1326
- * Resolves an active AWS *signaling* instance and returns a WebSocket endpoint.
1327
- *
1328
- * The observable produced by this method is **cold** and executes inside a `defer`,
1329
- * so each subscription (including those triggered by `retry`) pulls the **next**
1330
- * URL candidate from a generator created by `getActiveUrl(urlsPool)`.
1331
- *
1332
- * ### Execution flow
1333
- *
1334
- * 1. **Telemetry** — Starts a `getSignaling` span for end-to-end timing.
1335
- * 2. **Candidate URL selection** — A stateful generator (`urlGen`) is created
1336
- * from `urlsPool`. Each resubscription (e.g. via `retry`) advances to the next URL.
1337
- * 3. **Short-circuit for WS URLs** — If the picked candidate already matches
1338
- * `ws://` or `wss://`, emit `{ wsUrl, pollingUrl: null, instanceName: null }`
1339
- * immediately and complete (no HTTP request).
1340
- * 4. **Await client/view identifiers** — `this.store.select(selectClientAndViewIds)`
1341
- * is tapped for logging (missing IDs) and then filtered to require both `clientId`
1342
- * and `viewId` to be truthy.
1343
- * 5. **Single in-flight HTTP orchestration call** — Uses `exhaustMap` to issue
1344
- * `GET {signalingUrl}{clientId}/{viewId}`. New `{clientId, viewId}` emissions
1345
- * while the request is in flight are **ignored** until completion, preventing overlap.
1346
- * 6. **Per-attempt timeout** — `timeout(WS_TIMEOUT)` caps how long we wait for a response.
1347
- * On timeout, the attempt errors and the outer `retry` schedules the next URL.
1348
- * 7. **Response validation & progress reporting** — A `filter`:
1349
- * - Calls `TelemetryStop('getSignaling', { ...data, multi: true })` on receipt.
1350
- * - If `data.signallingServer === ''` or `data.error`:
1351
- * shows a status message, optionally dispatches `setStatusPercentSignallingServer`
1352
- * with `data.info.percent`, and **throws** to fail the attempt (triggers `retry`).
1353
- * 8. **Mapping to `AwsInstance`** — Converts the validated orchestration payload into:
1354
- * - `wsUrl`: via `httpUrlToWs(\`\${location.protocol}//\${data.signallingServer}\`)`
1355
- * - `pollingUrl`: the base `signalingUrl` that succeeded
1356
- * - `instanceName`: the (validated) `data.signallingServer`
1357
- * 9. **Retry policy** — On *any* upstream error (timeout, HTTP error, invalid payload),
1358
- * `retry({ delay })`:
1359
- * - Shows a “connecting” status,
1360
- * - Logs the attempt number,
1361
- * - Waits `WS_TIMEOUT` ms (via `timer`) and **resubscribes**, advancing `urlGen`.
1362
- *
1363
- * ### Concurrency semantics
1364
- *
1365
- * - `exhaustMap` guarantees a **single** HTTP request per attempt; subsequent
1366
- * `{clientId, viewId}` emissions are ignored until the current request completes.
1367
- *
1368
- * ### Telemetry semantics
1369
- *
1370
- * - `TelemetryStart('getSignaling')` begins before work.
1371
- * - `TelemetryStop('getSignaling', {...})` runs on receipt of an orchestration response.
1372
- * If an attempt fails (e.g., timeout), stopping the span is the responsibility of
1373
- * your telemetry layer or a `finalize` elsewhere if desired.
1374
- *
1375
- * ### Error & retry semantics
1376
- *
1377
- * - Missing/never-emitted IDs → timeout → retry with next URL.
1378
- * - HTTP/network error → retry with next URL.
1379
- * - Invalid orchestration payload (`error` set or empty `signallingServer`) → throw in
1380
- * validation filter → retry with next URL.
1381
- * - Short-circuit WS path **does not** retry (emits once, completes).
1382
- *
1383
- * @param urlsPool - Ordered list of base URLs to probe. Retries advance through this list
1384
- * until a working signaling server is found. A candidate may also be a direct `ws://`/`wss://`
1385
- * URL to short-circuit HTTP orchestration.
1386
- *
1387
- * @returns Observable that emits exactly one {@link AwsInstance} on success and then completes.
1388
- * On failure, the stream errors; the built-in `retry` operator re-subscribes after `WS_TIMEOUT`
1389
- * and advances to the next URL candidate.
1390
- *
1391
- * @throws Emits an error within the observable chain (not a thrown synchronous exception) when:
1392
- * - The HTTP request fails or times out.
1393
- * - The orchestration response indicates an error or an empty `signallingServer`.
1394
- * - Any other operator in the chain surfaces an error.
1395
- *
1396
- * @remarks
1397
- * - The URL generator (`urlGen`) is created **outside** `defer`, so resubscriptions
1398
- * advance the pool. Creating it inside `defer` would restart from the first URL each retry.
1399
- * - `location.protocol` is used to derive `ws` vs `wss`. If this may run in non-browser
1400
- * contexts (e.g., SSR), guard or abstract this logic.
1401
- * - Consider capping retries with `count` in `retry({ count, delay })` when appropriate.
1402
- *
1403
- * @example
1404
- * ```ts
1405
- * getAwsInstance(['https://signaling.example.com/', 'wss://direct.example.com'])
1406
- * .subscribe({
1407
- * next: ({ wsUrl }) => connect(wsUrl),
1408
- * error: (e) => console.error('Unable to establish signaling:', e),
1409
- * });
1410
- * ```
1411
- *
1412
- * @see httpUrlToWs
1413
- * @see selectClientAndViewIds
1414
- * @see setStatusPercentSignallingServer
1415
- */
1416
- private getAwsInstance;
1417
- private connectToCirrus;
1418
- addWsHandlers(ws: WebSocket): void;
1419
- showStatusMessage(message: string | null): void;
1420
- /**
1421
- * Close the connection with the signaling server
1422
- * @param data
1423
- */
1424
- close(data: CloseReason): void;
1425
- send(data: string | object): void;
1426
- private clearWs;
1427
- protected handleMessage(msg: MessageBase): void;
1428
- private setHandlersFromStream;
1429
- private getRegion;
1430
- static ɵfac: i0.ɵɵFactoryDeclaration<SignallingService, never>;
1431
- static ɵprov: i0.ɵɵInjectableDeclaration<SignallingService>;
1432
- }
1433
-
1434
- declare class StreamStatusTelemetryService {
1435
- private store;
1436
- private videoService;
1437
- constructor();
1438
- private mapEventData;
1439
- private initTelemetry;
1440
- private trackEventToMixPanel;
1441
- init(): void;
1442
- static ɵfac: i0.ɵɵFactoryDeclaration<StreamStatusTelemetryService, never>;
1443
- static ɵprov: i0.ɵɵInjectableDeclaration<StreamStatusTelemetryService>;
1444
- }
1445
-
1446
- declare class UnrealCommunicatorService {
1447
- private telemetry;
1448
- private afkService;
1449
- private freezeFrame;
1450
- private webrtcPlayer;
1451
- private videoService;
1452
- private consoleExtensions;
1453
- private store;
1454
- private destroy$;
1455
- private cirrusConnected;
1456
- constructor();
1457
- destroy(): void;
1458
- sendCommandToUnreal(data: MetaBoxCommandPacket): void;
1459
- emitUIInteraction(descriptor: MetaBoxCommandPacket): void;
1460
- /**
1461
- A build-in command can be sent to the UE4 client. The commands are defined by a
1462
- JSON descriptor and will be executed automatically.
1463
- The currently supported commands are:
1464
-
1465
- 1. A command to run any console command:
1466
- "{ ConsoleCommand: <string> }"
1467
-
1468
- 2. A command to change the resolution to the given width and height.
1469
- "{ Resolution.Width: <value>, Resolution.Height: <value> } }"
1470
- */
1471
- emitCommand(descriptor: MetaBoxCommandPacket): void;
1472
- sendInputData(data: ArrayBuffer): void;
1473
- private emitDescriptor;
1474
- private requestInitialSettings;
1475
- private requestQualityControl;
1476
- private listenVideo;
1477
- private prepareScreen;
1478
- private showPlayOverlay;
1479
- static ɵfac: i0.ɵɵFactoryDeclaration<UnrealCommunicatorService, never>;
1480
- static ɵprov: i0.ɵɵInjectableDeclaration<UnrealCommunicatorService>;
1610
+ dataFlowBitrate: DataFlowCheckResult;
1611
+ }
1612
+ interface AwsInstance {
1613
+ wsUrl: string | null;
1614
+ pollingUrl: string | null;
1615
+ instanceName: string | null;
1481
1616
  }
1482
1617
 
1483
- declare class VideoService extends SubService {
1484
- video: HTMLVideoElement | null;
1485
- audio: HTMLAudioElement | null;
1486
- private container;
1487
- private latencyTestTimings;
1488
- private videoTrack$;
1489
- private VideoEncoderQP;
1490
- private aggregatedStats;
1491
- private kalmanFilter1D;
1618
+ interface DataFlowCheckResult {
1619
+ isDropDetected: boolean;
1620
+ dropPercentage: number;
1621
+ activeMedian: number;
1622
+ quality: Quality;
1623
+ message: string;
1624
+ dataHistory: number[];
1625
+ config: {
1626
+ yellowFlagThresholdPercentage: number;
1627
+ redFlagThresholdPercentage: number;
1628
+ historyBufferLength: number;
1629
+ splitPoint: number;
1630
+ };
1631
+ }
1632
+ declare class DataFlowMonitor {
1633
+ protected yellowFlagThresholdPercentage: number;
1634
+ protected redFlagThresholdPercentage: number;
1635
+ protected historyBufferLength: number;
1636
+ protected splitPoint: number;
1637
+ protected dataHistory: number[];
1492
1638
  /**
1493
- * Aggregate video stats and emit it as videoStats$
1639
+ * Initializes the DataFlowMonitor monitor.
1640
+ * @param yellowFlagThresholdPercentage - The percentage drop to trigger a YELLOW warning (default: 15%).
1641
+ * @param redFlagThresholdPercentage - The percentage drop to trigger a RED warning (default: 30%).
1642
+ * @param historyBufferLength - buffer length (default: 100).
1643
+ * @param splitPoint - The point at which to split the history buffer into two halves (default: 0.5).
1494
1644
  */
1495
- videoStats$: rxjs.Observable<IAggregatedStat>;
1496
- constructor();
1497
- setContainer(container: HTMLDivElement): void;
1498
- setLatencyTimings(latencyTimings: string): void;
1499
- setEncoder(data: any): void;
1500
- create(): void;
1501
- attachVideoStream(stream: MediaStream, pcClient: RTCPeerConnection): void;
1502
- attachAudioStream(stream: MediaStream): void;
1503
- play(): void;
1504
- private getStats;
1505
- private generateAggregatedStatsFunction;
1506
- private onAggregatedStats;
1507
- private destroy;
1508
- private createWebRtcVideo;
1509
- private createWebRtcAudio;
1510
- private playAudio;
1511
- static ɵfac: i0.ɵɵFactoryDeclaration<VideoService, never>;
1512
- static ɵprov: i0.ɵɵInjectableDeclaration<VideoService>;
1513
- }
1514
-
1515
- declare class WebRtcPlayerService extends SubService {
1516
- onDataChannelMessage$: Subject<number[]>;
1517
- private pcClient;
1518
- private signallingSrv;
1519
- private videoService;
1520
- private cfg;
1521
- private useMic;
1522
- private forceTURN;
1523
- private forceMonoAudio;
1524
- private dcClient;
1525
- constructor();
1526
- private listenSignaling;
1527
- private createWebRtcOffer;
1528
- private createDataChannel;
1529
- private receiveAnswer;
1530
- private handleCandidateFromServer;
1531
- private mungeSDP;
1645
+ constructor(yellowFlagThresholdPercentage?: number, redFlagThresholdPercentage?: number, historyBufferLength?: number, splitPoint?: number);
1646
+ reset(): void;
1647
+ config(data: FilterSettings): void;
1532
1648
  /**
1533
- * Closes existing PeerConnection
1649
+ * Adds a new bitrate measurement and checks for significant drops.
1650
+ * @param currentValue - The current bitrate in kbps.
1651
+ * @returns BitrateCheckResult indicating if a drop was detected.
1534
1652
  */
1535
- closePC(): void;
1536
- canSend(): boolean | null;
1537
- send(data: ArrayBuffer): void;
1538
- private setConfig;
1539
- private createPeerConnection;
1540
- private handlePeerConnectionEvents;
1541
- private setupTransceiversAsync;
1542
- private setupDataChannelCallbacks;
1543
- private onDataChannelConnected;
1544
- private createOffer;
1545
- static ɵfac: i0.ɵɵFactoryDeclaration<WebRtcPlayerService, never>;
1546
- static ɵprov: i0.ɵɵInjectableDeclaration<WebRtcPlayerService>;
1547
- }
1548
-
1549
- declare class AfkRestartScreenLockerComponent implements AfterViewInit, OnInit {
1550
- store: Store<any>;
1551
- videoService: VideoService;
1552
- destroyRef: DestroyRef;
1553
- showReconnectPopup: i0.Signal<boolean>;
1554
- isLoaderScreenVisible: i0.Signal<boolean>;
1555
- imageLoadingSrc: i0.Signal<string>;
1556
- streamConfig: i0.Signal<_3dsource_angular_unreal_module.StreamConfig>;
1557
- isExistMatchUrls: i0.Signal<boolean>;
1558
- isSecondStart: i0.WritableSignal<boolean>;
1559
- playCallBack: null | (() => void);
1560
- ngOnInit(): void;
1561
- ngAfterViewInit(): void;
1562
- connect(): void;
1563
- onDisconnect(): void;
1564
- static ɵfac: i0.ɵɵFactoryDeclaration<AfkRestartScreenLockerComponent, never>;
1565
- static ɵcmp: i0.ɵɵComponentDeclaration<AfkRestartScreenLockerComponent, "app-afk-restart-screen-locker", never, {}, {}, never, never, true, never>;
1566
- }
1567
-
1568
- declare class StatGraphComponent implements AfterViewInit {
1569
- private el;
1570
- graph: ElementRef;
1571
- private canvas;
1572
- private ctx;
1573
- readonly color: i0.InputSignal<string>;
1574
- readonly tickStep: i0.InputSignal<number>;
1575
- readonly label: i0.InputSignal<string>;
1576
- private scaleY;
1577
- set dataTick(data: {
1578
- value: number;
1579
- hash: number;
1580
- } | null);
1581
- private data;
1582
- max: number;
1583
- min: number;
1584
- current: number;
1585
- ngAfterViewInit(): void;
1586
- resize(): void;
1587
- private draw;
1588
- private getColor;
1589
- private pushData;
1590
- static ɵfac: i0.ɵɵFactoryDeclaration<StatGraphComponent, never>;
1591
- static ɵcmp: i0.ɵɵComponentDeclaration<StatGraphComponent, "app-stat-graph", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "tickStep": { "alias": "tickStep"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "dataTick": { "alias": "dataTick"; "required": false; }; }, {}, never, never, true, never>;
1653
+ addValue(currentValue: number): DataFlowCheckResult;
1592
1654
  }
1593
1655
 
1594
- declare class UnrealSceneComponent implements AfterViewInit {
1595
- isStudio: i0.InputSignal<boolean>;
1596
- useContainerAsSizeProvider: i0.InputSignal<boolean>;
1597
- studioResolutionSize: i0.InputSignal<{
1598
- width: number;
1599
- height: number;
1600
- }>;
1601
- studioResolutionValues: rxjs.Observable<{
1602
- width: number;
1603
- height: number;
1604
- }>;
1605
- container: ElementRef;
1606
- changeMouseOverScene: i0.OutputEmitterRef<boolean>;
1607
- private width;
1608
- private height;
1609
- private store;
1610
- lightMode: i0.Signal<boolean>;
1611
- isFreezeFrameLoading: i0.Signal<boolean>;
1612
- isExistMatchUrls: i0.Signal<boolean>;
1613
- private aggregatorService;
1614
- private commandsSender;
1615
- private inputService;
1616
- private videoService;
1617
- private streamTelemetryService;
1618
- private element;
1619
- private destroyRef;
1620
- private get resizeValues();
1621
- private get pixelRatio();
1622
- onMouseOver(): void;
1623
- onMouseOut(): void;
1624
- constructor();
1625
- ngAfterViewInit(): void;
1626
- private adaptVideo;
1656
+ interface FilterSettings {
1627
1657
  /**
1628
- * This method calculates the dimensions for resizing a layout in a configurator stream.
1629
- * It takes into account the pixel ratio of the device's screen and the orientation of the layout.
1630
- * The method uses the `fitIntoRectangle` function to calculate the dimensions that would allow the layout to fit into the maximum space while maintaining its aspect ratio.
1631
- * It also sets the maximum limits for the width and height based on the layout's orientation.
1632
- * If the scale of the fitted dimensions is less than 1, it assigns the fitted dimensions to the output. Otherwise, it sets the scale of the output to 1.
1633
- * @returns {Area} An object of type `Area` that contains the calculated dimensions for resizing the layout.
1658
+ * Minimum number of kilobits per second to trigger low bandwidth
1634
1659
  */
1635
- private getResizeValuesUniversal;
1636
- private getResizeValues;
1637
- private sendResize;
1638
- private makeEven;
1639
- static ɵfac: i0.ɵɵFactoryDeclaration<UnrealSceneComponent, never>;
1640
- static ɵcmp: i0.ɵɵComponentDeclaration<UnrealSceneComponent, "app-unreal-scene", never, { "isStudio": { "alias": "isStudio"; "required": false; "isSignal": true; }; "useContainerAsSizeProvider": { "alias": "useContainerAsSizeProvider"; "required": false; "isSignal": true; }; "studioResolutionSize": { "alias": "studioResolutionSize"; "required": false; "isSignal": true; }; }, { "changeMouseOverScene": "changeMouseOverScene"; }, never, ["app-video-locker", "app-pdf", "app-show-case", "app-low-bandwidth-detector"], true, never>;
1641
- }
1642
-
1643
- declare class VideoLockerComponent {
1644
- private videoElement;
1645
- private store;
1646
- protected imageIntroSrc: i0.Signal<string | null>;
1647
- protected videoIntroSrc: i0.Signal<string | null>;
1648
- private viewportReady;
1649
- constructor();
1650
- private createVideo;
1651
- static ɵfac: i0.ɵɵFactoryDeclaration<VideoLockerComponent, never>;
1652
- static ɵcmp: i0.ɵɵComponentDeclaration<VideoLockerComponent, "app-video-locker", never, {}, {}, never, never, true, never>;
1653
- }
1654
-
1655
- declare class VideoStatsComponent implements OnInit {
1656
- collapsed: boolean;
1657
- private store;
1658
- private videoService;
1659
- private isDevMode;
1660
- private obs$;
1661
- viewportReady: i0.Signal<boolean | undefined>;
1662
- ssInfo: i0.Signal<string | undefined>;
1663
- fpsTick: i0.Signal<any>;
1664
- fpsAvgTick: i0.Signal<any>;
1665
- bitrateTick: i0.Signal<any>;
1666
- videoQP: i0.Signal<any>;
1667
- bitrateAverageTick: i0.Signal<any>;
1668
- videoStatus: i0.Signal<{
1669
- key: string;
1670
- value: any;
1671
- }[] | undefined>;
1672
- fields: string[];
1673
- graphList: any[];
1674
- graphList$: Observable<any>;
1675
- private idKey;
1676
- private elementsToShow;
1677
- private trigger$;
1678
- constructor();
1679
- ngOnInit(): void;
1680
- updateGraph(): void;
1681
- toggle(): void;
1682
- toggleGraph($event: MouseEvent, el: string, value?: any): void;
1683
- private getFields;
1684
- private writeFields;
1685
- static ɵfac: i0.ɵɵFactoryDeclaration<VideoStatsComponent, never>;
1686
- static ɵcmp: i0.ɵɵComponentDeclaration<VideoStatsComponent, "app-video-stats", never, {}, {}, never, never, true, never>;
1687
- }
1688
-
1689
- declare class WebrtcErrorModalComponent {
1690
- private dialogRef;
1691
- private store;
1692
- close(): void;
1693
- closeModalWithCirrusDisconnect(): void;
1694
- static ɵfac: i0.ɵɵFactoryDeclaration<WebrtcErrorModalComponent, never>;
1695
- static ɵcmp: i0.ɵɵComponentDeclaration<WebrtcErrorModalComponent, "app-webrtc-error-modal", never, {}, {}, never, never, true, never>;
1660
+ minimumBitrate: number;
1661
+ /**
1662
+ * Amount of a percentage drop to trigger a yellow warning
1663
+ */
1664
+ yellowFlag: number;
1665
+ /**
1666
+ * Amount of a percentage drop to trigger a red warning
1667
+ */
1668
+ redFlag: number;
1669
+ /**
1670
+ * Minimum number of frames per second to trigger low bandwidth
1671
+ */
1672
+ minimumFps: number;
1673
+ /**
1674
+ * Time to wait before checking if we can switch to low bandwidth
1675
+ */
1676
+ monitoringDelayTime: number;
1677
+ initialBitrateEstimate: number;
1678
+ initialErrorCovariance: number;
1679
+ processNoise: number;
1680
+ measurementNoise: number;
1681
+ panelOpen: boolean;
1696
1682
  }
1683
+ /**
1684
+ * Default LBM Filter Parameters
1685
+ */
1686
+ declare const DefaultFilterModel: FilterSettings;
1697
1687
 
1698
1688
  declare class FilterSettingsComponent implements OnInit {
1699
1689
  private readonly storageKey;
@@ -1772,5 +1762,5 @@ declare class SafePipe implements PipeTransform {
1772
1762
  static ɵpipe: i0.ɵɵPipeDeclaration<SafePipe, "safe", true>;
1773
1763
  }
1774
1764
 
1775
- export { AFKService, AfkRestartScreenLockerComponent, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FilterSettingsComponent, FreezeFrameComponent, FreezeFrameService, IceCandidateHandler, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoLockerComponent, VideoRecorder, VideoService, VideoStatsComponent, WSCloseCode_CIRRUS_ABNORMAL_CLOSURE, WSCloseCode_CIRRUS_MAX_PLAYERS_ERROR, WSCloseCode_CIRRUS_PLAYER_DISCONNECTED, WSCloseCode_CIRRUS_STREAMER_KIKED_PLAYER, WSCloseCode_FORCE_CIRRUS_CLOSE, WSCloseCode_NORMAL_AFK_TIMEOUT, WSCloseCode_NORMAL_CLOSURE, WSCloseCode_NORMAL_MANUAL_DISCONNECT, WSCloseCodes, WS_OPEN_STATE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, alignProductsToPlaneCommand, changeLowBandwidth, changeStatusMainVideoOnScene, changeStreamResolutionAction, changeStreamResolutionSuccessAction, clampPanToProductsCommand, commandCompleted, commandStarted, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, floatToSmoothPercents, forceResizeUnrealVideo, fromResizeObserver, fromSignal, fromUnrealCallBackSignal, getActiveUrl, getApplyCameraPresetCommand, getApplyZoomCommand, getCameraBoxCommand, getCameraRecenterCommand, getCameraSettingsCommand, getChangeGizmoTypeCommand, getChangeResolutionCommand, getClickSnapCommand, getControlSensitivityCommand, getDebugModeCommand, getDragCommand, getDragSequenceCommand, getDropCommand, getEnableComposureCommand, getEnableControlsCommand, getEnableSceneStateCallbackCommand, getEnableSpinnerModeCommand, getEnableTeleportCommand, getExecuteConsoleCommand, getFitToObjectsCommand, getFreezeFrameCommand, getFreezeFrameNative, getImageFromVideoStream, getInitSequenceByObjectNameCommand, getJumpToSequenceCommand, getLoadLevelCommand, getLoadProductCommand, getLoadSceneStateCommand, getLoopBackCommand, getMoveSelectedCommand, getPauseSequenceCommand, getPlaySequenceCommand, getRequestCameraPresetCommand, getResetControlClampsCommand, getRotateSelectedCommand, getRtcErrorMessage, getSelectProductByObjectNameCommand, getSetCameraControlClampsCommand, getSetControlCameraModeCommand, getSetFpsCommand, getSetMaterialCommand, getSetPawnMovementModeCommand, getSetSettingsSequenceCommand, getStopSequenceCommand, getTakeRenderCommand, getTakeSpinnerRenderCommand, getTakeSpinnerRenderPreviewCommand, getUnLoadAllProductsCommand, getUnLoadProductByObjectNameCommand, getUnfreezeFrameNative, getUnselectAllProductsCommand, getWeatherCommand, initSignalling, initialState, isLoaderScreenVisible, keepMaxUntilReset, mapQpToQuality, observeCommandResponse, provideAngularUnrealModule, removeExileCommands, resetAfk, resetAfkAction, resetConfig, resetIntroSrc, resetWarnTimeout, selectClientAndViewIds, selectCommandProgress, selectCommandsInProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsVideoPlayingAndDataChannelConnected, selectLastCommandInProgress, selectLoaderCommands, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectWarnTimeout, sendSignal, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setDataChannelConnected, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMatchUrls, setMaxFps, setProductsLocationCommand, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setViewportNotReady, setViewportReady, showPopupWithoutAutoStart, showUnrealErrorMessage, smoothTransition, startStream, trackMixpanelEvent, unLoadAllLevelsCommand, unrealFeature, unrealReducer, updateCirrusInfo };
1765
+ export { AFKService, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FilterSettingsComponent, FreezeFrameComponent, FreezeFrameService, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoRecorder, VideoService, VideoStatsComponent, WSCloseCode_CIRRUS_ABNORMAL_CLOSURE, WSCloseCode_CIRRUS_MAX_PLAYERS_ERROR, WSCloseCode_CIRRUS_PLAYER_DISCONNECTED, WSCloseCode_CIRRUS_STREAMER_KIKED_PLAYER, WSCloseCode_FORCE_CIRRUS_CLOSE, WSCloseCode_NORMAL_AFK_TIMEOUT, WSCloseCode_NORMAL_CLOSURE, WSCloseCode_NORMAL_MANUAL_DISCONNECT, WSCloseCodes, WS_OPEN_STATE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, alignProductsToPlaneCommand, changeLowBandwidth, changeStatusMainVideoOnScene, changeStreamResolutionAction, changeStreamResolutionSuccessAction, clampPanToProductsCommand, commandCompleted, commandStarted, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, floatToSmoothPercents, forceResizeUnrealVideo, fromResizeObserver, fromSignal, fromUnrealCallBackSignal, getActiveUrl, getApplyCameraPresetCommand, getApplyZoomCommand, getCameraBoxCommand, getCameraRecenterCommand, getCameraSettingsCommand, getChangeGizmoTypeCommand, getChangeResolutionCommand, getClickSnapCommand, getControlSensitivityCommand, getDebugModeCommand, getDragCommand, getDragSequenceCommand, getDropCommand, getEnableComposureCommand, getEnableControlsCommand, getEnableSceneStateCallbackCommand, getEnableSpinnerModeCommand, getEnableTeleportCommand, getExecuteConsoleCommand, getFitToObjectsCommand, getFreezeFrameCommand, getFreezeFrameNative, getImageFromVideoStream, getInitSequenceByObjectNameCommand, getJumpToSequenceCommand, getLoadLevelCommand, getLoadProductCommand, getLoadSceneStateCommand, getLoopBackCommand, getMoveSelectedCommand, getPauseSequenceCommand, getPlaySequenceCommand, getRequestCameraPresetCommand, getResetControlClampsCommand, getRotateSelectedCommand, getRtcErrorMessage, getSelectProductByObjectNameCommand, getSetCameraControlClampsCommand, getSetControlCameraModeCommand, getSetFpsCommand, getSetMaterialCommand, getSetPawnMovementModeCommand, getSetSettingsSequenceCommand, getStopSequenceCommand, getTakeRenderCommand, getTakeSpinnerRenderCommand, getTakeSpinnerRenderPreviewCommand, getUnLoadAllProductsCommand, getUnLoadProductByObjectNameCommand, getUnfreezeFrameNative, getUnselectAllProductsCommand, getWeatherCommand, initSignalling, initialState, isLoaderScreenVisible, keepMaxUntilReset, mapQpToQuality, observeCommandResponse, provideAngularUnrealModule, removeExileCommands, resetAfk, resetAfkAction, resetConfig, resetIntroSrc, resetWarnTimeout, selectClientAndViewIds, selectCommandProgress, selectCommandsInProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsVideoPlayingAndDataChannelConnected, selectLastCommandInProgress, selectLoaderCommands, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectWarnTimeout, sendSignal, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setDataChannelConnected, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMatchUrls, setMaxFps, setProductsLocationCommand, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setViewportNotReady, setViewportReady, showPopupWithoutAutoStart, showUnrealErrorMessage, smoothTransition, startStream, trackMixpanelEvent, unLoadAllLevelsCommand, unrealFeature, unrealReducer, updateCirrusInfo };
1776
1766
  export type { AwsInstance, CandidateMessage, CloseReason, CommandsLoaderState, ConfigMessage, ConnectionError, DataFlowCheckResult, DisconnectReasonType, EControlSchemeTypeValues, EMessageTypeValues, FreezeFrameMessage, IAggregatedStat, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, LBMStats, MessageBase, NormalizeAndQuantizeSignedValue, NormalizeAndQuantizeUnsignedValue, ObservedCallbackResponse, OrchestrationMessageType, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, SSInfo, SignalDescriptor, SignalingData, SignalingMessageHandler, SignalingMessageMap, StreamConfig, StreamResolutionProps, StreamerListMessage, TelemetryType, UnknownFields, UnquantizeAndDenormalizeUnsignedValue, UnrealCallBackJson, UnrealInitialConfig, UnrealState, WSCloseCodesValues, WrappedMetaBoxCommandPacket };