@3dsource/angular-unreal-module 0.0.145 → 0.0.146-dev.0
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/LICENSE +14 -14
- package/README.md +361 -370
- package/fesm2022/3dsource-angular-unreal-module.mjs +273 -129
- package/fesm2022/3dsource-angular-unreal-module.mjs.map +1 -1
- package/js/stream-prefetch.js +4 -0
- package/package.json +1 -1
- package/types/3dsource-angular-unreal-module.d.ts +104 -24
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";(()=>{"use strict";const l="metabox-configurator",d=/metabox-configurator\/(modular|basic)\/([^/?#]+)/i,u="3dsource:region-ping",f="assets/config.json",p="42e01f";function a(){return typeof crypto!="undefined"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,o=>{const e=Math.random()*16|0;return(o==="x"?e:e&3|8).toString(16)})}function m(o){return o.replace("http://","ws://").replace("https://","wss://")}class g{constructor(){const e=document.currentScript||(()=>{const n=document.getElementsByTagName("script");return n[n.length-1]})(),t=e&&e.dataset||{};this.configUrl=t.configUrl||f,this.config={watchdog_ms:this.numberOr(t.watchdogMs,15e3),ws_timeout:this.numberOr(t.wsTimeout,6e3),poll_timeout:this.numberOr(t.pollTimeout,4e3)};const i=new URLSearchParams(window.location.search);this.forceTURN=i.has("ForceTURN"),this.forceMaxBundle=i.has("ForceMaxBundle"),this.forceMonoAudio=i.has("forceMono"),this.ids={clientId:a(),viewId:a(),correlationId:a()},this.context=null,this.environmentId="",this.orchestrationType="",this.region="",this.pc=null,this.dc=null,this.stream=null,this.ws=null,this.remoteDescriptionSet=!1,this.iceBuffer=[],this.watchdogId=null,this.wsTimeoutId=null,this.settled=!1}run(){if(typeof window=="undefined"||!("WebSocket"in window)||!("RTCPeerConnection"in window)||window.location.href.indexOf(l)===-1)return;const e=this.parseConfiguratorUrl();e&&(this.context={id:e.contextId,data:{configuratorId:e.configuratorId}},this.publishParked("connecting"),this.connect().catch(t=>this.fail("exception",t)))}parseConfiguratorUrl(){const e=window.location.pathname.match(d);return e?{contextId:e[1].toLowerCase()==="modular"?"metaboxModularConfigurator":"metaboxBasicConfigurator",configuratorId:decodeURIComponent(e[2])}:null}connect(){return this.mark("prefetch_start"),this.region=this.readRegion()||"",this.fetchConfig().then(e=>{if(!e){this.fail("no-config");return}const t=this.chooseEndpoint(e);if(!t){this.fail("no-endpoint");return}if(!t.environmentId){this.fail("no-environment-id");return}this.orchestrationType=t.type,this.environmentId=t.environmentId;const i=this.adaptUrlToRegion(t.url);return(t.type==="polling"?this.pollOrchestration(i):Promise.resolve(i)).then(r=>{if(!r){this.fail("no-ws-url");return}return this.parked.machineId=r,this.openSocket(r)})})}fetchConfig(){const e=new URL(this.configUrl,window.location.origin).href;return this.fetchWithTimeout(e,{credentials:"omit"},this.config.poll_timeout).then(t=>t.ok?t.json().catch(()=>null):null).catch(()=>null)}chooseEndpoint(e){const t=e.newSignalling,i=this.firstVersionUrl(t&&t.versions);if(i&&/^wss?:\/\//i.test(i))return{type:"direct",url:i,environmentId:t&&t.environmentId||""};const n=e.signalling,r=this.firstVersionUrl(n&&n.versions);return r?{type:"polling",url:r,environmentId:n&&n.environmentId||""}:null}firstVersionUrl(e){if(!e||typeof e!="object")return"";for(const t of Object.keys(e))if(e[t])return e[t];return""}pollOrchestration(e){const t=`${e}${this.ids.clientId}/${this.ids.viewId}`;return this.fetchWithTimeout(t,{credentials:"omit"},this.config.poll_timeout).then(i=>i.ok?i.json().catch(()=>({})):null).then(i=>i&&i.signallingServer?m(`${window.location.protocol}//${i.signallingServer}`):null).catch(()=>null)}adaptUrlToRegion(e){return this.region&&e.indexOf(":region")===-1?e.replace(/signallingserver/gi,`signallingserver/region:${this.region}`):e}openSocket(e){const t=new WebSocket(e);t.binaryType="arraybuffer",this.ws=t,this.parked.ws=t,this.wsTimeoutId=setTimeout(()=>{t.readyState!==WebSocket.OPEN&&this.fail("ws-timeout")},this.config.ws_timeout),t.onopen=()=>{clearTimeout(this.wsTimeoutId),this.mark("ws_open"),this.sendRequestStream()},t.onmessage=i=>this.onWsMessage(i),t.onerror=()=>this.fail("ws-error"),t.onclose=()=>{!this.settled&&this.parked.state!=="ready"&&this.fail("ws-closed")},this.armWatchdog()}sendRequestStream(){this.send({type:"requestStream",correlationId:this.ids.correlationId,payload:{region:this.region,environmentId:this.environmentId,context:this.context}})}onWsMessage(e){let t;try{const i=typeof e.data=="string"?e.data:null;if(i===null)return;t=JSON.parse(i)}catch{return}switch(t.type){case"config":this.onConfig(t);break;case"offer":this.onOffer(t);break;case"answer":this.onAnswer(t);break;case"iceCandidate":this.onIceCandidate(t.candidate);break;case"ping":this.send({type:"pong",source:"front"});break;case"streamerDisconnected":case"playerDisconnected":this.fail("streamer-disconnected");break;case"error":this.fail("orchestration-error");break;default:break}}onConfig(e){if(this.pc)return;const t=Object.assign({},e.peerConnectionOptions);this.forceTURN&&(t.iceTransportPolicy="relay"),t.bundlePolicy=this.forceMaxBundle?"max-bundle":"balanced",t.iceCandidatePoolSize=1,this.parked.config=t;const i=new RTCPeerConnection(t);this.pc=i,this.parked.pc=i,i.onicecandidate=n=>{n.candidate&&this.send({type:"iceCandidate",candidate:n.candidate})},i.ondatachannel=n=>this.wireDataChannel(n.channel),i.ontrack=n=>{n.track&&n.track.kind==="video"&&n.streams[0]&&(this.stream=n.streams[0],this.parked.stream=this.stream,this.maybeReady())}}onOffer(e){return this.pc?(this.remoteDescriptionSet=!1,this.iceBuffer.length=0,this.pc.setRemoteDescription(e).then(()=>(this.remoteDescriptionSet=!0,this.flushIce(),this.pc.createAnswer())).then(t=>(t.sdp=this.mungeSDP(t.sdp||""),this.pc.setLocalDescription(t).then(()=>{this.send(t)}))).catch(t=>this.fail("offer-failed",t))):Promise.resolve()}onAnswer(e){return this.pc?this.pc.setRemoteDescription(e).then(()=>{this.remoteDescriptionSet=!0,this.flushIce()}).catch(t=>this.fail("answer-failed",t)):Promise.resolve()}onIceCandidate(e){e&&(this.forceTURN&&String(e.candidate).indexOf("relay")<0||(this.remoteDescriptionSet&&this.pc?this.pc.addIceCandidate(e).catch(()=>{}):this.iceBuffer.push(e)))}flushIce(){for(const e of this.iceBuffer)this.pc.addIceCandidate(e).catch(()=>{});this.iceBuffer.length=0}wireDataChannel(e){e.binaryType="arraybuffer",this.dc=e,this.parked.dc=e,e.onmessage=t=>{this.parked.dcBuffer.push(t.data)},e.onopen=()=>{this.mark("dc_open"),this.maybeReady()},e.onclose=()=>{!this.settled&&this.parked.state!=="ready"&&this.fail("dc-closed")},e.readyState==="open"&&this.maybeReady()}maybeReady(){this.settled||!this.dc||this.dc.readyState!=="open"||this.stream&&(this.settled=!0,this.mark("ready"),this.parked.state="ready")}publishParked(e){const t=this;this.parked={state:e,pc:null,dc:null,stream:null,ws:null,machineId:void 0,config:void 0,ids:this.ids,dcBuffer:[],timings:{},adopt(){return t.clearWatchdog(),this.state="adopted",this}},window.__stream=this.parked}armWatchdog(){this.clearWatchdog(),this.watchdogId=setTimeout(()=>{this.parked.state!=="adopted"&&this.fail("watchdog")},this.config.watchdog_ms)}clearWatchdog(){this.watchdogId&&(clearTimeout(this.watchdogId),this.watchdogId=null),this.wsTimeoutId&&(clearTimeout(this.wsTimeoutId),this.wsTimeoutId=null)}fail(e,t){if(!(this.parked&&this.parked.state==="adopted")){this.settled=!0,this.clearWatchdog();try{this.dc&&this.dc.close()}catch{}try{this.pc&&this.pc.close()}catch{}try{this.ws&&this.ws.close()}catch{}this.parked&&(this.parked.state="failed",this.parked.failReason=e,t&&(this.parked.failError=String(t&&t.message||t)))}}mungeSDP(e){let t=this.prioritizeH264Profile(e,p);t=t.replace(/(a=fmtp:\d+ .*level-asymmetry-allowed=.*)\r\n/gm,`$1;x-google-start-bitrate=10000;x-google-max-bitrate=100000\r
|
|
2
|
+
`);let i="maxaveragebitrate=510000;";return i+=this.forceMonoAudio?"stereo=0;":"stereo=1;",i+="useinbandfec=1",t=t.replace("useinbandfec=1",i),t}prioritizeH264Profile(e,t){const i=e.split(`\r
|
|
3
|
+
`),n=[];for(const r of i)if(r.startsWith("a=fmtp:")&&r.toLowerCase().includes(`profile-level-id=${t}`)){const s=r.split(":")[1]&&r.split(":")[1].split(" ")[0];s&&n.push(s)}return n.length===0?e:i.map(r=>{if(!r.startsWith("m=video"))return r;const s=r.split(" "),w=s.slice(0,3),h=s.slice(3),y=[...n.filter(c=>h.includes(c)),...h.filter(c=>!n.includes(c))];return[...w,...y].join(" ")}).join(`\r
|
|
4
|
+
`)}send(e){const t=typeof e=="string"?e:JSON.stringify(e);if(this.ws&&this.ws.readyState===WebSocket.OPEN)try{this.ws.send(t)}catch{}}mark(e){this.parked&&(this.parked.timings[e]=performance.now())}readRegion(){try{const e=localStorage.getItem(u);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.region_code!="string"||typeof t.ts!="number"||Date.now()-t.ts>=2592e6?null:t.region_code}catch{return null}}fetchWithTimeout(e,t,i){const n=new AbortController;t.signal=n.signal;const r=setTimeout(()=>n.abort(),i);return fetch(e,t).finally(()=>clearTimeout(r))}numberOr(e,t){const i=Number(e);return e!=null&&e!==""&&!Number.isNaN(i)?i:t}}new g().run()})();
|
package/package.json
CHANGED
|
@@ -231,18 +231,6 @@ interface FreezeFrameMessage {
|
|
|
231
231
|
progress: number | null;
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
interface ReconnectConfig {
|
|
235
|
-
/** Enable auto-reconnection when WebRTC or DataChannel connection is lost. Default: true */
|
|
236
|
-
enabled?: boolean;
|
|
237
|
-
/** Maximum number of reconnection attempts before giving up. Default: 3 */
|
|
238
|
-
maxAttempts?: number;
|
|
239
|
-
/** Delay in milliseconds between reconnection attempts. Default: 1000 */
|
|
240
|
-
delayMs?: number;
|
|
241
|
-
/** Reconnect on ICE connection failure (disconnected/failed state). Default: true */
|
|
242
|
-
onIceFailure?: boolean;
|
|
243
|
-
/** Reconnect on DataChannel close. Default: true */
|
|
244
|
-
onDataChannelClose?: boolean;
|
|
245
|
-
}
|
|
246
234
|
interface UnrealInitialConfig {
|
|
247
235
|
playwright?: boolean;
|
|
248
236
|
customErrorsEndpoint?: string;
|
|
@@ -253,8 +241,45 @@ interface UnrealInitialConfig {
|
|
|
253
241
|
streamTelemetryV2Url?: string;
|
|
254
242
|
fpsMonitor?: boolean;
|
|
255
243
|
autoHighResolution?: boolean;
|
|
256
|
-
|
|
257
|
-
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Live WebRTC connection parked on `window.__stream` by the `stream-prefetch.js`
|
|
248
|
+
* head-script, ready for the Angular services to ADOPT instead of building a
|
|
249
|
+
* connection from scratch. The shape is the handoff contract between that
|
|
250
|
+
* framework-free script and {@link StreamAdoptionService} — keep the two in sync.
|
|
251
|
+
*/
|
|
252
|
+
interface ParkedStream {
|
|
253
|
+
state: 'connecting' | 'ready' | 'failed' | 'adopted';
|
|
254
|
+
pc?: RTCPeerConnection;
|
|
255
|
+
dc?: RTCDataChannel;
|
|
256
|
+
/** video(+audio) MediaStream from the `track` event */
|
|
257
|
+
stream?: MediaStream;
|
|
258
|
+
/** live signalling socket (handshake already done, `requestStream` sent) */
|
|
259
|
+
ws?: WebSocket;
|
|
260
|
+
/** = resolved wsUrl of the winning machine */
|
|
261
|
+
machineId?: string;
|
|
262
|
+
/** `peerConnectionOptions` the machine sent in its `config` message */
|
|
263
|
+
config?: RTCConfiguration;
|
|
264
|
+
/** ids the script generated; Angular reuses them (no regeneration) */
|
|
265
|
+
ids: {
|
|
266
|
+
clientId: string;
|
|
267
|
+
viewId: string;
|
|
268
|
+
correlationId: string;
|
|
269
|
+
};
|
|
270
|
+
/** DataChannel messages received before adoption, replayed on adopt */
|
|
271
|
+
dcBuffer: ArrayBuffer[];
|
|
272
|
+
/** `performance.now()` marks for the prefetch waterfall (telemetry) */
|
|
273
|
+
timings: Record<string, number>;
|
|
274
|
+
failReason?: string;
|
|
275
|
+
failError?: string;
|
|
276
|
+
/** Stops the script's watchdog and flips state to `adopted`. */
|
|
277
|
+
adopt: () => ParkedStream;
|
|
278
|
+
}
|
|
279
|
+
declare global {
|
|
280
|
+
interface Window {
|
|
281
|
+
__stream?: ParkedStream;
|
|
282
|
+
}
|
|
258
283
|
}
|
|
259
284
|
|
|
260
285
|
declare const SpecialKeyCodes: {
|
|
@@ -367,11 +392,11 @@ declare const REGION_PING_CACHE_TTL_MS: number;
|
|
|
367
392
|
declare const REGION_PING_ACCURATE_SAMPLES = 3;
|
|
368
393
|
declare const REGION_PING_WARMUP_DEADLINE_MS = 1500;
|
|
369
394
|
declare const REGION_PING_BACKGROUND_REFRESH_DELAY_MS = 5000;
|
|
370
|
-
declare const
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
395
|
+
declare const RECONNECT_CONFIG: {
|
|
396
|
+
readonly enabled: true;
|
|
397
|
+
readonly maxAttempts: 3;
|
|
398
|
+
readonly delayMs: 1000;
|
|
399
|
+
};
|
|
375
400
|
declare const UnrealStatusMessage: {
|
|
376
401
|
readonly CONNECTING_TO_SESSION: "Connecting to session.";
|
|
377
402
|
readonly STARTING_YOUR_SESSION: "Starting your session";
|
|
@@ -1019,6 +1044,15 @@ declare class SignallingService extends SubService {
|
|
|
1019
1044
|
private pollLoop;
|
|
1020
1045
|
private connectToCirrus;
|
|
1021
1046
|
private addWsHandlers;
|
|
1047
|
+
/**
|
|
1048
|
+
* Adopt a live signalling socket opened by the `stream-prefetch.js`
|
|
1049
|
+
* head-script. The socket is already OPEN and `requestStream` was already
|
|
1050
|
+
* sent, so — unlike {@link addWsHandlers} — we attach message/close/error
|
|
1051
|
+
* handlers but deliberately skip {@link OnOpenHandler} (which would
|
|
1052
|
+
* `setCirrusConnected` + re-`sendRequestStream`). Reuses the head-script's
|
|
1053
|
+
* `correlationId` so subsequent correlated messages line up.
|
|
1054
|
+
*/
|
|
1055
|
+
adoptSocket(ws: WebSocket, correlationId: string): void;
|
|
1022
1056
|
private showStatusMessage;
|
|
1023
1057
|
/**
|
|
1024
1058
|
* Close the connection with the signaling server
|
|
@@ -1038,6 +1072,26 @@ declare class SignallingService extends SubService {
|
|
|
1038
1072
|
static ɵprov: i0.ɵɵInjectableDeclaration<SignallingService>;
|
|
1039
1073
|
}
|
|
1040
1074
|
|
|
1075
|
+
/**
|
|
1076
|
+
* Adopts a WebRTC connection prefetched by the `stream-prefetch.js` head-script
|
|
1077
|
+
* and parked on `window.__stream`, instead of running `connectToSignaling` from
|
|
1078
|
+
* scratch. Called from the same seam where signalling normally starts
|
|
1079
|
+
* (`connectToSignaling$` effect); if there is nothing ready to adopt it returns
|
|
1080
|
+
* `false` and the caller falls back to the normal connect — strictly additive.
|
|
1081
|
+
*/
|
|
1082
|
+
declare class StreamAdoptionService {
|
|
1083
|
+
private readonly store;
|
|
1084
|
+
private readonly signalling;
|
|
1085
|
+
private readonly webRtc;
|
|
1086
|
+
/**
|
|
1087
|
+
* @returns `true` if a ready parked stream was adopted (caller must NOT
|
|
1088
|
+
* start a fresh connection), `false` otherwise.
|
|
1089
|
+
*/
|
|
1090
|
+
tryAdopt(): boolean;
|
|
1091
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StreamAdoptionService, never>;
|
|
1092
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<StreamAdoptionService>;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1041
1095
|
declare class StreamStatusTelemetryService extends SubService {
|
|
1042
1096
|
private readonly videoService;
|
|
1043
1097
|
private readonly unrealConfig;
|
|
@@ -1416,6 +1470,16 @@ declare class WebRtcPlayerService extends SubService {
|
|
|
1416
1470
|
* @returns true if reconnection was initiated, false if signaling is not connected
|
|
1417
1471
|
*/
|
|
1418
1472
|
reconnectPeer(): boolean;
|
|
1473
|
+
/**
|
|
1474
|
+
* Adopt a fully-negotiated connection prefetched by `stream-prefetch.js`:
|
|
1475
|
+
* take ownership of its PeerConnection, DataChannel and media stream instead
|
|
1476
|
+
* of running the handshake. The head-script attached property-based handlers
|
|
1477
|
+
* (`pc.onicecandidate`, `dc.onmessage`, …) and buffered inbound DC messages;
|
|
1478
|
+
* here we detach those, wire our own (addEventListener-based) handlers, replay
|
|
1479
|
+
* the buffer in order, then drive `onDataChannelConnected` manually because the
|
|
1480
|
+
* DataChannel is already open (its `open` event won't fire again).
|
|
1481
|
+
*/
|
|
1482
|
+
adopt(pc: RTCPeerConnection, dc: RTCDataChannel, stream: MediaStream, config: RTCConfiguration, dcBuffer: ArrayBuffer[]): void;
|
|
1419
1483
|
private setConfig;
|
|
1420
1484
|
private handlePeerConnectionEvents;
|
|
1421
1485
|
private setupTransceiversAsync;
|
|
@@ -2476,6 +2540,22 @@ declare const showUnrealErrorMessage: node_modules__ngrx_store_types_ngrx_store.
|
|
|
2476
2540
|
error?: string;
|
|
2477
2541
|
} & node_modules__ngrx_store_types_ngrx_store.Action<string>>;
|
|
2478
2542
|
declare const initSignalling: node_modules__ngrx_store_types_ngrx_store.ActionCreator<string, () => node_modules__ngrx_store_types_ngrx_store.Action<string>>;
|
|
2543
|
+
/**
|
|
2544
|
+
* Dispatched when a prefetched connection parked on `window.__stream` by the
|
|
2545
|
+
* `stream-prefetch.js` head-script is adopted instead of opening a fresh
|
|
2546
|
+
* `connectToSignaling`. Marks cirrus connected and records the adopted machine
|
|
2547
|
+
* in one transaction; the data channel / app-init chain then proceeds via
|
|
2548
|
+
* `dataChannelConnected` dispatched from `WebRtcPlayerService`.
|
|
2549
|
+
*
|
|
2550
|
+
* Deliberately does NOT touch `streamClientCompanyId` / `streamViewId`: the host
|
|
2551
|
+
* app (e.g. metabox) sets those authoritatively from its own data before
|
|
2552
|
+
* `initSignalling`, and the prefetch script's ids are connection-internal only.
|
|
2553
|
+
*/
|
|
2554
|
+
declare const streamAdopted: node_modules__ngrx_store_types_ngrx_store.ActionCreator<string, (props: {
|
|
2555
|
+
machineId: string | null;
|
|
2556
|
+
}) => {
|
|
2557
|
+
machineId: string | null;
|
|
2558
|
+
} & node_modules__ngrx_store_types_ngrx_store.Action<string>>;
|
|
2479
2559
|
declare const startStream: node_modules__ngrx_store_types_ngrx_store.ActionCreator<string, (props: {
|
|
2480
2560
|
config: Partial<StreamConfig>;
|
|
2481
2561
|
}) => {
|
|
@@ -2572,11 +2652,11 @@ declare class UnrealEffects {
|
|
|
2572
2652
|
private readonly commandTelemetryService;
|
|
2573
2653
|
private readonly regionsPingService;
|
|
2574
2654
|
private readonly signallingService;
|
|
2655
|
+
private readonly streamAdoptionService;
|
|
2575
2656
|
private readonly videoService;
|
|
2576
2657
|
private readonly unrealCallbackService;
|
|
2577
2658
|
private dataChannelConnectionTimeout;
|
|
2578
2659
|
private connectionCompleted$;
|
|
2579
|
-
private reconnectConfig;
|
|
2580
2660
|
destroyConnections$: node_modules_rxjs_dist_types.Observable<{
|
|
2581
2661
|
reason: _3dsource_angular_unreal_module.DisconnectReasonType;
|
|
2582
2662
|
} & node_modules__ngrx_store_types_ngrx_store.Action<string>> & node_modules__ngrx_effects_types_ngrx_effects.CreateEffectMetadata;
|
|
@@ -2644,8 +2724,8 @@ declare class UnrealEffects {
|
|
|
2644
2724
|
* Effect: `handleDataChannelClosed$`
|
|
2645
2725
|
*
|
|
2646
2726
|
* Triggers peer reconnection when DataChannel closes unexpectedly.
|
|
2647
|
-
* Only triggers if reconnection is enabled
|
|
2648
|
-
*
|
|
2727
|
+
* Only triggers if reconnection is enabled and the signaling WebSocket
|
|
2728
|
+
* is still connected.
|
|
2649
2729
|
*/
|
|
2650
2730
|
handleDataChannelClosed$: node_modules_rxjs_dist_types.Observable<{
|
|
2651
2731
|
attempt: number;
|
|
@@ -2848,5 +2928,5 @@ declare const selectUserInactivityDetected: node_modules__ngrx_store_types_ngrx_
|
|
|
2848
2928
|
/** Used by external consumers (e.g., metabox). Do not remove. */
|
|
2849
2929
|
declare const selectIsVideoPlayingAndDataChannelConnected: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean) => boolean>;
|
|
2850
2930
|
|
|
2851
|
-
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,
|
|
2852
|
-
export type { AggregatedStat, AnySignalingMessage, AwsInstance, CandidateMessage, CloseReason, CommandInProgress, ConfigMessage, ConnectionError, ControlSchemeValues, DataFlowCheckResult, DisconnectReasonType, EmittedMilestone, EventId, ForceClientDisconnect, FreezeFrameMessage, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, InterruptClientStream, ListStreamersMessage, MessageBase, MessageTypeValues, NormalizeAndQuantizeSignedValue, NormalizeAndQuantizeUnsignedValue, OrchestrationErrorMessage, OrchestrationMessageType, P2PEstablishedMessage, PhaseOverlay, PhaseParam, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, ReceivedFile,
|
|
2931
|
+
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, 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, RECONNECT_CONFIG, 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, StreamAdoptionService, 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, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
|
|
2932
|
+
export type { AggregatedStat, AnySignalingMessage, AwsInstance, CandidateMessage, CloseReason, CommandInProgress, ConfigMessage, ConnectionError, ControlSchemeValues, DataFlowCheckResult, DisconnectReasonType, EmittedMilestone, EventId, ForceClientDisconnect, FreezeFrameMessage, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, InterruptClientStream, ListStreamersMessage, MessageBase, MessageTypeValues, NormalizeAndQuantizeSignedValue, NormalizeAndQuantizeUnsignedValue, OrchestrationErrorMessage, OrchestrationMessageType, P2PEstablishedMessage, ParkedStream, PhaseOverlay, PhaseParam, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, ReceivedFile, RequestStream, SSInfo, SelectedIceCandidatePair, SignalingData, SignalingMessageHandler, SignalingMessageMap, StreamConfig, StreamRequestContext, StreamResolutionProps, StreamerListMessage, TelemetryType, UnknownFields, UnquantizeAndDenormalizeUnsignedValue, UnrealCallbackDescriptor, UnrealCallbackEventMap, UnrealCallbackJson, UnrealCallbackJsonWrapped, UnrealInitialConfig, UnrealState, WSCloseCodesValues, streamPreparedForUserInteractionMessage };
|