@3dsource/angular-unreal-module 0.0.143-dev.2 → 0.0.143-dev.8
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, DestroyRef, ChangeDetectionStrategy, Component, Injectable, signal, effect, untracked, computed, Pipe, input, ElementRef, viewChild, afterNextRender, HostListener, output, makeEnvironmentProviders, provideEnvironmentInitializer } from '@angular/core';
|
|
3
3
|
import { SourceButtonComponent, SourceLoadingComponent } from '@3dsource/source-ui-native';
|
|
4
|
-
import { Subject, skip, share, merge, map, scan, timestamp, startWith, pairwise, concatMap, of, animationFrameScheduler, interval, Observable, timer, take, defer, switchMap, from, throwError, EMPTY, retry, timeout as timeout$1, repeat, takeUntil as takeUntil$1, fromEvent, tap as tap$1, throttleTime,
|
|
4
|
+
import { Subject, skip, share, merge, map, scan, timestamp, startWith, pairwise, concatMap, of, animationFrameScheduler, interval, Observable, timer, take, defer, switchMap, from, throwError, EMPTY, retry, timeout as timeout$1, repeat, takeUntil as takeUntil$1, fromEvent, tap as tap$1, throttleTime, delay, concat, debounceTime, mergeMap, shareReplay, NEVER, asyncScheduler, filter as filter$1, withLatestFrom as withLatestFrom$1, Subscription, bufferTime, combineLatestWith, distinctUntilChanged as distinctUntilChanged$1 } from 'rxjs';
|
|
5
5
|
import { createAction, props, createReducer, on, createFeature, Store, createSelector, provideState } from '@ngrx/store';
|
|
6
6
|
import { whereNot, Falsy, Logger, calculateMedian, clampf, lerp, getCanvasCached, getSnapshot, fitIntoRectangle, generateUuid, Truthy, tapLog, Semaphore, COLOR_CODES, where, KeyboardNumericCode, InvertedKeyMap, HEXtoRGB, RGBtoHSV, inverseLerp, HSVtoRGB, RGBtoHEX, fpIsASameAsB } from '@3dsource/utils';
|
|
7
7
|
import { filter, map as map$1, distinctUntilChanged, takeWhile, takeUntil, catchError, tap, timeout, finalize, first, switchMap as switchMap$1, withLatestFrom, exhaustMap, debounceTime as debounceTime$1, take as take$1, startWith as startWith$1 } from 'rxjs/operators';
|
|
@@ -239,6 +239,31 @@ const DEFAULT_AFK_TIMEOUT = 300; // 5 minutes
|
|
|
239
239
|
const DATA_CHANNEL_CONNECTION_TIMEOUT = 8000; //ms;
|
|
240
240
|
const SIGNALLING_PERCENT_VALUE = 56;
|
|
241
241
|
const SCREEN_LOCKER_CONTAINER_ID = '3dsource_start_screen';
|
|
242
|
+
// Region-ping prefetch cache. A standalone script
|
|
243
|
+
// (`src/js/region-ping-prefetch.js`) pings the regions the same way
|
|
244
|
+
// `RegionsPingService` does and stores the winner here, so the service can
|
|
245
|
+
// skip live pinging right before a connection. The script CANNOT import these
|
|
246
|
+
// constants (it is framework-free, loaded straight into the host page), so it
|
|
247
|
+
// hardcodes the same literals — keep all three in sync if you change them.
|
|
248
|
+
const REGION_PING_CACHE_KEY = '3dsource:region-ping';
|
|
249
|
+
// 1 month. Beyond this the cached winner is considered stale and the service
|
|
250
|
+
// falls back to live pinging.
|
|
251
|
+
const REGION_PING_CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
|
|
252
|
+
// Accurate (background / prefetch) measurement: number of post-warm-up probes
|
|
253
|
+
// per region. The winner is chosen by the MEDIAN of these (tie-break: min),
|
|
254
|
+
// which is robust to jitter — unlike the fast `getFastest` race that just
|
|
255
|
+
// takes the first region to finish.
|
|
256
|
+
const REGION_PING_ACCURATE_SAMPLES = 3;
|
|
257
|
+
// Upper bound on the parallel warm-up phase (DNS/TCP/TLS for every region at
|
|
258
|
+
// once). Generous on purpose: warm-up runs OFF the connection critical path
|
|
259
|
+
// (page-load prefetch + post-connection refresh), so accuracy beats speed —
|
|
260
|
+
// a slow-cold-start region must finish warming before it is measured, else it
|
|
261
|
+
// is unfairly penalised (e.g. a 737 ms cold start hiding a 34 ms real RTT).
|
|
262
|
+
const REGION_PING_WARMUP_DEADLINE_MS = 1500;
|
|
263
|
+
// Delay after the data channel is ready before the background accurate refresh
|
|
264
|
+
// runs — lets the stream stabilise so the ping sweep does not compete with the
|
|
265
|
+
// freshly-started media for bandwidth.
|
|
266
|
+
const REGION_PING_BACKGROUND_REFRESH_DELAY_MS = 5000;
|
|
242
267
|
// Reconnection defaults
|
|
243
268
|
const DEFAULT_RECONNECT_ENABLED = true;
|
|
244
269
|
const DEFAULT_RECONNECT_MAX_ATTEMPTS = 3;
|
|
@@ -1580,12 +1605,157 @@ class RegionsPingService {
|
|
|
1580
1605
|
// straight from `PingResult.result` — no aggregation.
|
|
1581
1606
|
return defer(() => {
|
|
1582
1607
|
this.store.dispatch(regionPingFetchStart());
|
|
1583
|
-
|
|
1608
|
+
// Cache hit: a standalone prefetch script
|
|
1609
|
+
// (`src/js/region-ping-prefetch.js`) may already have pinged the
|
|
1610
|
+
// regions and stored the winner. If that entry is still fresh, skip
|
|
1611
|
+
// the HTTP fetch + live ping sweep entirely — this is the whole point
|
|
1612
|
+
// of the prefetch: keep the ping cost off the connection critical path.
|
|
1613
|
+
const cached = this.readCachedWinner();
|
|
1614
|
+
if (cached) {
|
|
1615
|
+
// Bookend the waterfall the same way the live path does so observers
|
|
1616
|
+
// see start → end → resolved even though discovery was instant.
|
|
1617
|
+
// Dispatches are split across operators (not fired back-to-back) to
|
|
1618
|
+
// keep the same shape as the live pipe below.
|
|
1619
|
+
return of(cached).pipe(tap(() => this.store.dispatch(regionPingFetchEnd())), tap((data) => this.store.dispatch(regionResolved({
|
|
1620
|
+
region: data.region_code,
|
|
1621
|
+
pingsMs: data.result,
|
|
1622
|
+
}))), map$1((data) => data.region_code));
|
|
1623
|
+
}
|
|
1624
|
+
return this.getProviders(regionListUrl).pipe(tap(() => this.store.dispatch(regionPingFetchEnd())), switchMap((providers) => this.getPingResult(providers)), catchError(() => of(null)), tapLog('PingResult'),
|
|
1625
|
+
// Warm the cache with the live result so the next connection (and any
|
|
1626
|
+
// reload within the TTL) can skip pinging even if the prefetch script
|
|
1627
|
+
// never ran.
|
|
1628
|
+
tap((data) => {
|
|
1629
|
+
if (data?.region_code) {
|
|
1630
|
+
this.writeCachedWinner(data.region_code, data.result);
|
|
1631
|
+
}
|
|
1632
|
+
}), tap((data) => this.store.dispatch(regionResolved({
|
|
1584
1633
|
region: data?.region_code ?? '',
|
|
1585
1634
|
pingsMs: data?.result ?? [],
|
|
1586
1635
|
}))), map$1((data) => data?.region_code));
|
|
1587
1636
|
});
|
|
1588
1637
|
}
|
|
1638
|
+
/**
|
|
1639
|
+
* Read the prefetched winner from `localStorage`, returning it only if the
|
|
1640
|
+
* entry is well-formed and still within {@link REGION_PING_CACHE_TTL_MS}.
|
|
1641
|
+
* All access is guarded — `localStorage` can throw (private mode, disabled
|
|
1642
|
+
* storage) or be absent (non-browser).
|
|
1643
|
+
*/
|
|
1644
|
+
readCachedWinner() {
|
|
1645
|
+
try {
|
|
1646
|
+
if (typeof localStorage === 'undefined')
|
|
1647
|
+
return null;
|
|
1648
|
+
const raw = localStorage.getItem(REGION_PING_CACHE_KEY);
|
|
1649
|
+
if (!raw)
|
|
1650
|
+
return null;
|
|
1651
|
+
const parsed = JSON.parse(raw);
|
|
1652
|
+
if (typeof parsed?.region_code !== 'string' ||
|
|
1653
|
+
!Array.isArray(parsed.result) ||
|
|
1654
|
+
typeof parsed.ts !== 'number' ||
|
|
1655
|
+
Date.now() - parsed.ts >= REGION_PING_CACHE_TTL_MS) {
|
|
1656
|
+
return null;
|
|
1657
|
+
}
|
|
1658
|
+
return { region_code: parsed.region_code, result: parsed.result };
|
|
1659
|
+
}
|
|
1660
|
+
catch {
|
|
1661
|
+
return null;
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
writeCachedWinner(regionCode, result = []) {
|
|
1665
|
+
try {
|
|
1666
|
+
if (typeof localStorage === 'undefined')
|
|
1667
|
+
return;
|
|
1668
|
+
localStorage.setItem(REGION_PING_CACHE_KEY, JSON.stringify({ region_code: regionCode, result, ts: Date.now() }));
|
|
1669
|
+
}
|
|
1670
|
+
catch {
|
|
1671
|
+
// Storage unavailable — cache stays cold, live ping still works.
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
/**
|
|
1675
|
+
* Accurate, OFF-critical-path refresh of the region cache. Mirrors the
|
|
1676
|
+
* prefetch script: warm up every region in parallel (barrier), then measure
|
|
1677
|
+
* {@link REGION_PING_ACCURATE_SAMPLES} probes each and pick the lowest
|
|
1678
|
+
* MEDIAN RTT (tie-break: min). Writes the winner to `localStorage` ONLY — it
|
|
1679
|
+
* does NOT dispatch `regionResolved` or touch current-session state, since
|
|
1680
|
+
* the connection is already established on a region; this just improves the
|
|
1681
|
+
* pick for the NEXT connection.
|
|
1682
|
+
*
|
|
1683
|
+
* Invoked from an effect a few seconds after the data channel is ready (see
|
|
1684
|
+
* `REGION_PING_BACKGROUND_REFRESH_DELAY_MS`), so it never competes with the
|
|
1685
|
+
* connection handshake. Aborts with the injector via `destroyController`.
|
|
1686
|
+
*/
|
|
1687
|
+
refreshCacheInBackground(regionListUrl = this.unrealConfig?.regionsPingUrl || '') {
|
|
1688
|
+
return defer(() => this.getProviders(regionListUrl)).pipe(switchMap((providers) => from(this.measureAccurate(providers.regions, providers.timeout ?? this.config.ping_timeout))), tap((winner) => {
|
|
1689
|
+
if (winner) {
|
|
1690
|
+
this.writeCachedWinner(winner.region_code, winner.result);
|
|
1691
|
+
}
|
|
1692
|
+
}), catchError(() => of(null)));
|
|
1693
|
+
}
|
|
1694
|
+
async measureAccurate(endpoints, defaultTimeout) {
|
|
1695
|
+
const signal = this.destroyController.signal;
|
|
1696
|
+
await this.warmUpAll(endpoints, defaultTimeout, signal);
|
|
1697
|
+
if (signal.aborted)
|
|
1698
|
+
return null;
|
|
1699
|
+
const semaphore = new Semaphore(this.config.max_parallel_requests);
|
|
1700
|
+
const tasks = endpoints.map(async ({ region_code, url, timeout }) => {
|
|
1701
|
+
await semaphore.acquire();
|
|
1702
|
+
try {
|
|
1703
|
+
const result = await this.checkLatency(url, timeout ?? defaultTimeout, signal, REGION_PING_ACCURATE_SAMPLES);
|
|
1704
|
+
return result.length >= 2 ? { region_code, result } : null;
|
|
1705
|
+
}
|
|
1706
|
+
catch {
|
|
1707
|
+
return null;
|
|
1708
|
+
}
|
|
1709
|
+
finally {
|
|
1710
|
+
semaphore.release();
|
|
1711
|
+
}
|
|
1712
|
+
});
|
|
1713
|
+
const results = (await Promise.all(tasks)).filter((r) => r !== null);
|
|
1714
|
+
return this.pickByMedian(results);
|
|
1715
|
+
}
|
|
1716
|
+
/**
|
|
1717
|
+
* Phase 1 of the accurate measure: one throwaway probe to every region in
|
|
1718
|
+
* parallel to pay the DNS/TCP/TLS cold-start. Resolves once all settle OR
|
|
1719
|
+
* the warm-up deadline elapses, whichever is first.
|
|
1720
|
+
*/
|
|
1721
|
+
async warmUpAll(endpoints, defaultTimeout, signal) {
|
|
1722
|
+
const semaphore = new Semaphore(this.config.max_parallel_requests);
|
|
1723
|
+
const warmups = endpoints.map(async ({ url, timeout }) => {
|
|
1724
|
+
await semaphore.acquire();
|
|
1725
|
+
try {
|
|
1726
|
+
await this.checkLatency(url, timeout ?? defaultTimeout, signal, 1);
|
|
1727
|
+
}
|
|
1728
|
+
finally {
|
|
1729
|
+
semaphore.release();
|
|
1730
|
+
}
|
|
1731
|
+
});
|
|
1732
|
+
await Promise.race([
|
|
1733
|
+
Promise.allSettled(warmups),
|
|
1734
|
+
new Promise((resolve) => setTimeout(resolve, REGION_PING_WARMUP_DEADLINE_MS)),
|
|
1735
|
+
]);
|
|
1736
|
+
}
|
|
1737
|
+
pickByMedian(results) {
|
|
1738
|
+
let best = null;
|
|
1739
|
+
let bestMedian = Infinity;
|
|
1740
|
+
let bestMin = Infinity;
|
|
1741
|
+
for (const r of results) {
|
|
1742
|
+
const med = this.median(r.result);
|
|
1743
|
+
const min = Math.min(...r.result);
|
|
1744
|
+
if (med < bestMedian || (med === bestMedian && min < bestMin)) {
|
|
1745
|
+
bestMedian = med;
|
|
1746
|
+
bestMin = min;
|
|
1747
|
+
best = r;
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
return best;
|
|
1751
|
+
}
|
|
1752
|
+
median(samples) {
|
|
1753
|
+
const sorted = [...samples].sort((a, b) => a - b);
|
|
1754
|
+
const mid = Math.floor(sorted.length / 2);
|
|
1755
|
+
return sorted.length % 2
|
|
1756
|
+
? sorted[mid]
|
|
1757
|
+
: (sorted[mid - 1] + sorted[mid]) / 2;
|
|
1758
|
+
}
|
|
1589
1759
|
getPingResult(providers) {
|
|
1590
1760
|
const defaultTimeout = providers.timeout ?? this.config.ping_timeout;
|
|
1591
1761
|
return from(this.startPinging(providers.regions, defaultTimeout));
|
|
@@ -1641,10 +1811,10 @@ class RegionsPingService {
|
|
|
1641
1811
|
}
|
|
1642
1812
|
}
|
|
1643
1813
|
}
|
|
1644
|
-
async checkLatency(endpoint, timeout, abortSignal) {
|
|
1814
|
+
async checkLatency(endpoint, timeout, abortSignal, count = this.config.ping_count) {
|
|
1645
1815
|
const pingResults = [];
|
|
1646
1816
|
const sep = endpoint.includes('?') ? '&' : '?';
|
|
1647
|
-
for (let i = 0; i <
|
|
1817
|
+
for (let i = 0; i < count; i++) {
|
|
1648
1818
|
// Bail out as soon as another region's task has won — no point
|
|
1649
1819
|
// burning further `ping_timeout` budget here.
|
|
1650
1820
|
if (abortSignal?.aborted) {
|
|
@@ -3514,6 +3684,7 @@ class UnrealEffects {
|
|
|
3514
3684
|
this.webRtcPlayerService = inject(WebRtcPlayerService);
|
|
3515
3685
|
this.commandsSender = inject(UnrealCommunicatorService);
|
|
3516
3686
|
this.commandTelemetryService = inject(CommandTelemetryService);
|
|
3687
|
+
this.regionsPingService = inject(RegionsPingService);
|
|
3517
3688
|
this.signallingService = inject(SignallingService);
|
|
3518
3689
|
this.videoService = inject(VideoService);
|
|
3519
3690
|
this.unrealCallbackService = inject(UnrealCallbackService);
|
|
@@ -3536,6 +3707,18 @@ class UnrealEffects {
|
|
|
3536
3707
|
this.destroyConnections$ = createEffect(() => {
|
|
3537
3708
|
return this.actions$.pipe(ofType(destroyUnrealScene), map(() => destroyRemoteConnections({ reason: DisconnectReason.Destroy })));
|
|
3538
3709
|
});
|
|
3710
|
+
// Stage 3 — accurate region re-ping in the background once the stream is up.
|
|
3711
|
+
// A few seconds after the data channel is ready (so it doesn't compete with
|
|
3712
|
+
// the connection handshake) we re-measure regions with the accurate
|
|
3713
|
+
// warm-up + median method and refresh the localStorage cache, improving the
|
|
3714
|
+
// pick for the NEXT connection. `switchMap` cancels a previous run if the
|
|
3715
|
+
// channel re-opens; `takeUntil(destroyUnrealScene)` tears it down on exit.
|
|
3716
|
+
// `dispatch: false` — it only writes the cache, no store change.
|
|
3717
|
+
this.refreshRegionCache$ = createEffect(() => {
|
|
3718
|
+
return this.actions$.pipe(ofType(dataChannelReady), delay(REGION_PING_BACKGROUND_REFRESH_DELAY_MS), switchMap(() => this.regionsPingService
|
|
3719
|
+
.refreshCacheInBackground()
|
|
3720
|
+
.pipe(takeUntil(this.actions$.pipe(ofType(destroyUnrealScene))))));
|
|
3721
|
+
}, { dispatch: false });
|
|
3539
3722
|
// Fan-in for "cancel an in-flight signaling attempt". One named action so
|
|
3540
3723
|
// both `SignallingService.abort$` and `setDataChannelTimeoutCheck$.abort$`
|
|
3541
3724
|
// subscribe to single intent (and it shows up as a distinct entry in the
|
|
@@ -5389,8 +5572,7 @@ class StreamStatusTelemetryService2 {
|
|
|
5389
5572
|
this.destroy$.next();
|
|
5390
5573
|
this.destroy$.complete();
|
|
5391
5574
|
});
|
|
5392
|
-
if (this.unrealConfig?.playwright
|
|
5393
|
-
!this.unrealConfig?.streamTelemetryV2) {
|
|
5575
|
+
if (this.unrealConfig?.playwright) {
|
|
5394
5576
|
return;
|
|
5395
5577
|
}
|
|
5396
5578
|
this.init();
|
|
@@ -7403,5 +7585,5 @@ function provideUnrealModule() {
|
|
|
7403
7585
|
* Generated bundle index. Do not edit.
|
|
7404
7586
|
*/
|
|
7405
7587
|
|
|
7406
|
-
export { AFKService, AUTO_HIGH_RESOLUTION_IDLE_MS, AfkTimeoutModalComponent, AggregatorService, AnalyticsService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, ControlScheme, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DEFAULT_RECONNECT_DELAY_MS, DEFAULT_RECONNECT_ENABLED, DEFAULT_RECONNECT_MAX_ATTEMPTS, DEFAULT_RECONNECT_ON_DATACHANNEL_CLOSE, DEFAULT_RECONNECT_ON_ICE_FAILURE, DESTROY_DISCONNECT_REASONS, DataFlowMonitor, DevModeService, DisconnectReason, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverService, FilterSettingsComponent, FpsMonitorService, FreezeFrameComponent, FreezeFrameService, INNER_RETRY_LIMIT, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LoadingProgressService, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MIN_CONTAINER_SIZE, MessageType, MouseButton, MouseButtonsMask, OUTER_RETRY_DELAY, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_AUDIO_ID, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, StreamStatusTelemetryService2, SubService, ToClientMessage, UNREAL_CONFIG, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealSceneComponent, UnrealStatusMessage, 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, WSCloseCode_UNKNOWN, WSCloseCodes, WS_OPEN_STATE, WS_RETRY_PER_INSTANCE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, answerSent, changeStatusMainVideoOnScene, changeStreamResolutionAction, commandCompleted, commandStarted, dataChannelConnected, dataChannelReady, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, dropDC, dropPC, floatToPercents, floatToSmoothPercents, forceResizeViewport, fromResizeObserver, getActiveUrl, getImageFromVideoStream, getResizeStudioValues, getResizeValuesUniversal, getRtcErrorMessage, iceConnectionFailed, initSignalling, instanceReady, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, saveAnalyticsEvent, selectCirrusConnectionId, selectClientAndViewIds, selectCommandProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsFullyConnected, selectIsLoaderScreenVisible, selectIsVideoPlayingAndDataChannelConnected, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectUserInactivityDetected, selectWarnTimeout, setAfkTimerCountdown, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setUserInactivityTimeout, setViewportNotReady, setViewportReady, showLoadingProgress, showResumeStreamPopup, showUnrealErrorMessage, showUserInactivityTimeoutPopup, signalingRetryAttempted, smoothTransition, startStream, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
|
|
7588
|
+
export { AFKService, AUTO_HIGH_RESOLUTION_IDLE_MS, AfkTimeoutModalComponent, AggregatorService, AnalyticsService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, ControlScheme, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DEFAULT_RECONNECT_DELAY_MS, DEFAULT_RECONNECT_ENABLED, DEFAULT_RECONNECT_MAX_ATTEMPTS, DEFAULT_RECONNECT_ON_DATACHANNEL_CLOSE, DEFAULT_RECONNECT_ON_ICE_FAILURE, DESTROY_DISCONNECT_REASONS, DataFlowMonitor, DevModeService, DisconnectReason, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverService, FilterSettingsComponent, FpsMonitorService, FreezeFrameComponent, FreezeFrameService, INNER_RETRY_LIMIT, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LoadingProgressService, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MIN_CONTAINER_SIZE, MessageType, MouseButton, MouseButtonsMask, OUTER_RETRY_DELAY, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, REGION_PING_ACCURATE_SAMPLES, REGION_PING_BACKGROUND_REFRESH_DELAY_MS, REGION_PING_CACHE_KEY, REGION_PING_CACHE_TTL_MS, REGION_PING_WARMUP_DEADLINE_MS, RegionsPingService, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_AUDIO_ID, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, StreamStatusTelemetryService2, SubService, ToClientMessage, UNREAL_CONFIG, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealSceneComponent, UnrealStatusMessage, 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, WSCloseCode_UNKNOWN, WSCloseCodes, WS_OPEN_STATE, WS_RETRY_PER_INSTANCE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, answerSent, changeStatusMainVideoOnScene, changeStreamResolutionAction, commandCompleted, commandStarted, dataChannelConnected, dataChannelReady, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, dropDC, dropPC, floatToPercents, floatToSmoothPercents, forceResizeViewport, fromResizeObserver, getActiveUrl, getImageFromVideoStream, getResizeStudioValues, getResizeValuesUniversal, getRtcErrorMessage, iceConnectionFailed, initSignalling, instanceReady, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, saveAnalyticsEvent, selectCirrusConnectionId, selectClientAndViewIds, selectCommandProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsFullyConnected, selectIsLoaderScreenVisible, selectIsVideoPlayingAndDataChannelConnected, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectUserInactivityDetected, selectWarnTimeout, setAfkTimerCountdown, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setUserInactivityTimeout, setViewportNotReady, setViewportReady, showLoadingProgress, showResumeStreamPopup, showUnrealErrorMessage, showUserInactivityTimeoutPopup, signalingRetryAttempted, smoothTransition, startStream, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
|
|
7407
7589
|
//# sourceMappingURL=3dsource-angular-unreal-module.mjs.map
|