@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.0.5
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/.cspell.json +48 -0
- package/.eslintignore +8 -0
- package/.eslintrc.js +8 -0
- package/.prettierignore +0 -0
- package/.prettierrc.json +6 -0
- package/dist/lib-pixelstreamingfrontend.esm.js +1 -0
- package/dist/lib-pixelstreamingfrontend.js +1 -0
- package/jest.config.js +18 -0
- package/package.json +48 -0
- package/readme.md +15 -0
- package/src/AFK/AFKController.test.ts +162 -0
- package/src/AFK/AFKController.ts +158 -0
- package/src/Config/Config.test.ts +222 -0
- package/src/Config/Config.ts +970 -0
- package/src/Config/SettingBase.ts +65 -0
- package/src/Config/SettingFlag.ts +99 -0
- package/src/Config/SettingNumber.ts +111 -0
- package/src/Config/SettingOption.ts +124 -0
- package/src/Config/SettingText.ts +82 -0
- package/src/DataChannel/DataChannelController.ts +138 -0
- package/src/DataChannel/DataChannelLatencyTestController.ts +129 -0
- package/src/DataChannel/DataChannelLatencyTestResults.ts +67 -0
- package/src/DataChannel/DataChannelSender.ts +59 -0
- package/src/DataChannel/InitialSettings.ts +61 -0
- package/src/DataChannel/LatencyTestResults.ts +76 -0
- package/src/FreezeFrame/FreezeFrame.ts +114 -0
- package/src/FreezeFrame/FreezeFrameController.ts +114 -0
- package/src/Inputs/FakeTouchController.ts +199 -0
- package/src/Inputs/GamepadController.ts +314 -0
- package/src/Inputs/GamepadTypes.ts +10 -0
- package/src/Inputs/HoveringMouseEvents.ts +192 -0
- package/src/Inputs/IMouseEvents.ts +64 -0
- package/src/Inputs/ITouchController.ts +29 -0
- package/src/Inputs/InputClassesFactory.ts +140 -0
- package/src/Inputs/KeyboardController.ts +354 -0
- package/src/Inputs/LockedMouseEvents.ts +287 -0
- package/src/Inputs/MouseButtons.ts +25 -0
- package/src/Inputs/MouseController.ts +362 -0
- package/src/Inputs/SpecialKeyCodes.ts +16 -0
- package/src/Inputs/TouchController.ts +208 -0
- package/src/Inputs/XRGamepadController.ts +126 -0
- package/src/PeerConnectionController/AggregatedStats.ts +311 -0
- package/src/PeerConnectionController/CandidatePairStats.ts +17 -0
- package/src/PeerConnectionController/CandidateStat.ts +13 -0
- package/src/PeerConnectionController/CodecStats.ts +19 -0
- package/src/PeerConnectionController/DataChannelStats.ts +17 -0
- package/src/PeerConnectionController/InboundRTPStats.ts +154 -0
- package/src/PeerConnectionController/InboundTrackStats.ts +34 -0
- package/src/PeerConnectionController/OutBoundRTPStats.ts +26 -0
- package/src/PeerConnectionController/PeerConnectionController.ts +563 -0
- package/src/PeerConnectionController/SessionStats.ts +10 -0
- package/src/PeerConnectionController/StreamStats.ts +11 -0
- package/src/PixelStreaming/PixelStreaming.test.ts +626 -0
- package/src/PixelStreaming/PixelStreaming.ts +851 -0
- package/src/UI/OnScreenKeyboard.ts +97 -0
- package/src/UeInstanceMessage/ResponseController.ts +47 -0
- package/src/UeInstanceMessage/SendMessageController.ts +154 -0
- package/src/UeInstanceMessage/StreamMessageController.ts +233 -0
- package/src/UeInstanceMessage/ToStreamerMessagesController.ts +62 -0
- package/src/Util/CoordinateConverter.ts +289 -0
- package/src/Util/EventEmitter.ts +611 -0
- package/src/Util/EventListenerTracker.ts +29 -0
- package/src/Util/FileUtil.ts +140 -0
- package/src/Util/RTCUtils.ts +41 -0
- package/src/Util/WebGLUtils.ts +49 -0
- package/src/Util/WebXRUtils.ts +25 -0
- package/src/VideoPlayer/StreamController.ts +89 -0
- package/src/VideoPlayer/VideoPlayer.ts +246 -0
- package/src/WebRtcPlayer/WebRtcPlayerController.ts +2158 -0
- package/src/WebXR/WebXRController.ts +319 -0
- package/src/__test__/mockMediaStream.ts +124 -0
- package/src/__test__/mockRTCPeerConnection.ts +347 -0
- package/src/__test__/mockRTCRtpReceiver.ts +22 -0
- package/src/__test__/mockWebSocket.ts +136 -0
- package/src/pixelstreamingfrontend.ts +46 -0
- package/tsconfig.jest.json +8 -0
- package/tsconfig.json +24 -0
- package/types/AFK/AFKController.d.ts +39 -0
- package/types/Config/Config.d.ts +218 -0
- package/types/Config/SettingBase.d.ts +30 -0
- package/types/Config/SettingFlag.d.ts +33 -0
- package/types/Config/SettingNumber.d.ts +45 -0
- package/types/Config/SettingOption.d.ts +43 -0
- package/types/Config/SettingText.d.ts +29 -0
- package/types/DataChannel/DataChannelController.d.ts +59 -0
- package/types/DataChannel/DataChannelLatencyTestController.d.ts +26 -0
- package/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -0
- package/types/DataChannel/DataChannelSender.d.ts +21 -0
- package/types/DataChannel/InitialSettings.d.ts +44 -0
- package/types/DataChannel/LatencyTestResults.d.ts +31 -0
- package/types/FreezeFrame/FreezeFrame.d.ts +36 -0
- package/types/FreezeFrame/FreezeFrameController.d.ts +37 -0
- package/types/Inputs/FakeTouchController.d.ts +61 -0
- package/types/Inputs/GamepadController.d.ts +85 -0
- package/types/Inputs/GamepadTypes.d.ts +8 -0
- package/types/Inputs/HoveringMouseEvents.d.ts +56 -0
- package/types/Inputs/IMouseEvents.d.ts +53 -0
- package/types/Inputs/ITouchController.d.ts +24 -0
- package/types/Inputs/InputClassesFactory.d.ts +54 -0
- package/types/Inputs/KeyboardController.d.ts +62 -0
- package/types/Inputs/LockedMouseEvents.d.ts +80 -0
- package/types/Inputs/MouseButtons.d.ts +22 -0
- package/types/Inputs/MouseController.d.ts +75 -0
- package/types/Inputs/SpecialKeyCodes.d.ts +14 -0
- package/types/Inputs/TouchController.d.ts +53 -0
- package/types/Inputs/XRGamepadController.d.ts +15 -0
- package/types/PeerConnectionController/AggregatedStats.d.ts +77 -0
- package/types/PeerConnectionController/CandidatePairStats.d.ts +15 -0
- package/types/PeerConnectionController/CandidateStat.d.ts +11 -0
- package/types/PeerConnectionController/CodecStats.d.ts +14 -0
- package/types/PeerConnectionController/DataChannelStats.d.ts +15 -0
- package/types/PeerConnectionController/InboundRTPStats.d.ts +141 -0
- package/types/PeerConnectionController/InboundTrackStats.d.ts +32 -0
- package/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -0
- package/types/PeerConnectionController/PeerConnectionController.d.ts +132 -0
- package/types/PeerConnectionController/SessionStats.d.ts +8 -0
- package/types/PeerConnectionController/StreamStats.d.ts +9 -0
- package/types/PixelStreaming/PixelStreaming.d.ts +259 -0
- package/types/UI/OnScreenKeyboard.d.ts +31 -0
- package/types/UeInstanceMessage/ResponseController.d.ts +19 -0
- package/types/UeInstanceMessage/SendMessageController.d.ts +18 -0
- package/types/UeInstanceMessage/StreamMessageController.d.ts +29 -0
- package/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -0
- package/types/Util/CoordinateConverter.d.ts +100 -0
- package/types/Util/EventEmitter.d.ts +422 -0
- package/types/Util/EventListenerTracker.d.ts +14 -0
- package/types/Util/FileUtil.d.ts +32 -0
- package/types/Util/RTCUtils.d.ts +8 -0
- package/types/Util/WebGLUtils.d.ts +4 -0
- package/types/Util/WebXRUtils.d.ts +9 -0
- package/types/VideoPlayer/StreamController.d.ts +24 -0
- package/types/VideoPlayer/VideoPlayer.d.ts +78 -0
- package/types/WebRtcPlayer/WebRtcPlayerController.d.ts +377 -0
- package/types/WebXR/WebXRController.d.ts +26 -0
- package/types/pixelstreamingfrontend.d.ts +22 -0
- package/webpack.common.js +35 -0
- package/webpack.dev.js +35 -0
- package/webpack.prod.js +36 -0
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FlagsIds,
|
|
3
|
+
NumericParametersIds,
|
|
4
|
+
OptionParametersIds,
|
|
5
|
+
TextParametersIds
|
|
6
|
+
} from '../Config/Config';
|
|
7
|
+
import { LatencyTestResults } from '../DataChannel/LatencyTestResults';
|
|
8
|
+
import { AggregatedStats } from '../PeerConnectionController/AggregatedStats';
|
|
9
|
+
import { InitialSettings } from '../pixelstreamingfrontend';
|
|
10
|
+
import { MessageReceive } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
11
|
+
import { SettingFlag } from '../Config/SettingFlag';
|
|
12
|
+
import { SettingNumber } from '../Config/SettingNumber';
|
|
13
|
+
import { SettingText } from '../Config/SettingText';
|
|
14
|
+
import { SettingOption } from '../Config/SettingOption';
|
|
15
|
+
import {
|
|
16
|
+
DataChannelLatencyTestResponse,
|
|
17
|
+
DataChannelLatencyTestResult
|
|
18
|
+
} from "../DataChannel/DataChannelLatencyTestResults";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* An event that is emitted when AFK disconnect is about to happen.
|
|
22
|
+
* Can be cancelled by calling the callback function provided as part of the event.
|
|
23
|
+
*/
|
|
24
|
+
export class AfkWarningActivateEvent extends Event {
|
|
25
|
+
readonly type: 'afkWarningActivate';
|
|
26
|
+
readonly data: {
|
|
27
|
+
/** How many seconds until the session is disconnected */
|
|
28
|
+
countDown: number;
|
|
29
|
+
/** Callback function that needs to be called if you wish to cancel the AFK disconnect timeout. */
|
|
30
|
+
dismissAfk: () => void;
|
|
31
|
+
};
|
|
32
|
+
constructor(data: AfkWarningActivateEvent['data']) {
|
|
33
|
+
super('afkWarningActivate');
|
|
34
|
+
this.data = data;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* An event that is emitted when the AFK disconnect countdown is updated.
|
|
40
|
+
*/
|
|
41
|
+
export class AfkWarningUpdateEvent extends Event {
|
|
42
|
+
readonly type: 'afkWarningUpdate';
|
|
43
|
+
readonly data: {
|
|
44
|
+
/** How many seconds until the session is disconnected */
|
|
45
|
+
countDown: number
|
|
46
|
+
};
|
|
47
|
+
constructor(data: AfkWarningUpdateEvent['data']) {
|
|
48
|
+
super('afkWarningUpdate');
|
|
49
|
+
this.data = data;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* An event that is emitted when AFK warning is deactivated.
|
|
55
|
+
*/
|
|
56
|
+
export class AfkWarningDeactivateEvent extends Event {
|
|
57
|
+
readonly type: 'afkWarningDeactivate';
|
|
58
|
+
constructor() {
|
|
59
|
+
super('afkWarningDeactivate');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* An event that is emitted when AFK countdown reaches 0 and the user is disconnected.
|
|
65
|
+
*/
|
|
66
|
+
export class AfkTimedOutEvent extends Event {
|
|
67
|
+
readonly type: 'afkTimedOut';
|
|
68
|
+
constructor() {
|
|
69
|
+
super('afkTimedOut');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* An event that is emitted when we receive new video quality value.
|
|
75
|
+
*/
|
|
76
|
+
export class VideoEncoderAvgQPEvent extends Event {
|
|
77
|
+
readonly type: 'videoEncoderAvgQP';
|
|
78
|
+
readonly data: {
|
|
79
|
+
/** Average video quality value */
|
|
80
|
+
avgQP: number
|
|
81
|
+
};
|
|
82
|
+
constructor(data: VideoEncoderAvgQPEvent['data']) {
|
|
83
|
+
super('videoEncoderAvgQP');
|
|
84
|
+
this.data = data;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* An event that is emitted after a WebRtc connection has been negotiated.
|
|
90
|
+
*/
|
|
91
|
+
export class WebRtcSdpEvent extends Event {
|
|
92
|
+
readonly type: 'webRtcSdp';
|
|
93
|
+
constructor() {
|
|
94
|
+
super('webRtcSdp');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* An event that is emitted when auto connecting.
|
|
100
|
+
*/
|
|
101
|
+
export class WebRtcAutoConnectEvent extends Event {
|
|
102
|
+
readonly type: 'webRtcAutoConnect';
|
|
103
|
+
constructor() {
|
|
104
|
+
super('webRtcAutoConnect');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* An event that is emitted when sending a WebRtc offer.
|
|
110
|
+
*/
|
|
111
|
+
export class WebRtcConnectingEvent extends Event {
|
|
112
|
+
readonly type: 'webRtcConnecting';
|
|
113
|
+
constructor() {
|
|
114
|
+
super('webRtcConnecting');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* An event that is emitted when WebRtc connection has been established.
|
|
120
|
+
*/
|
|
121
|
+
export class WebRtcConnectedEvent extends Event {
|
|
122
|
+
readonly type: 'webRtcConnected';
|
|
123
|
+
constructor() {
|
|
124
|
+
super('webRtcConnected');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* An event that is emitted if WebRtc connection has failed.
|
|
130
|
+
*/
|
|
131
|
+
export class WebRtcFailedEvent extends Event {
|
|
132
|
+
readonly type: 'webRtcFailed';
|
|
133
|
+
constructor() {
|
|
134
|
+
super('webRtcFailed');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* An event that is emitted if WebRtc connection is disconnected.
|
|
140
|
+
*/
|
|
141
|
+
export class WebRtcDisconnectedEvent extends Event {
|
|
142
|
+
readonly type: 'webRtcDisconnected';
|
|
143
|
+
readonly data: {
|
|
144
|
+
/** Message describing the disconnect reason */
|
|
145
|
+
eventString: string;
|
|
146
|
+
/** true if the user is able to reconnect, false if disconnected because of unrecoverable reasons like not able to connect to the signaling server */
|
|
147
|
+
allowClickToReconnect: boolean;
|
|
148
|
+
};
|
|
149
|
+
constructor(data: WebRtcDisconnectedEvent['data']) {
|
|
150
|
+
super('webRtcDisconnected');
|
|
151
|
+
this.data = data;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* An event that is emitted when RTCDataChannel is opened.
|
|
157
|
+
*/
|
|
158
|
+
export class DataChannelOpenEvent extends Event {
|
|
159
|
+
readonly type: 'dataChannelOpen';
|
|
160
|
+
readonly data: {
|
|
161
|
+
/** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
|
|
162
|
+
label: string;
|
|
163
|
+
/** RTCDataChannel onOpen event */
|
|
164
|
+
event: Event
|
|
165
|
+
};
|
|
166
|
+
constructor(data: DataChannelOpenEvent['data']) {
|
|
167
|
+
super('dataChannelOpen');
|
|
168
|
+
this.data = data;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* An event that is emitted when RTCDataChannel is closed.
|
|
174
|
+
*/
|
|
175
|
+
export class DataChannelCloseEvent extends Event {
|
|
176
|
+
readonly type: 'dataChannelClose';
|
|
177
|
+
readonly data: {
|
|
178
|
+
/** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
|
|
179
|
+
label: string;
|
|
180
|
+
/** RTCDataChannel onClose event */
|
|
181
|
+
event: Event
|
|
182
|
+
};
|
|
183
|
+
constructor(data: DataChannelCloseEvent['data']) {
|
|
184
|
+
super('dataChannelClose');
|
|
185
|
+
this.data = data;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* An event that is emitted on RTCDataChannel errors.
|
|
191
|
+
*/
|
|
192
|
+
export class DataChannelErrorEvent extends Event {
|
|
193
|
+
readonly type: 'dataChannelError';
|
|
194
|
+
readonly data: {
|
|
195
|
+
/** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
|
|
196
|
+
label: string;
|
|
197
|
+
/** RTCDataChannel onError event */
|
|
198
|
+
event: Event
|
|
199
|
+
};
|
|
200
|
+
constructor(data: DataChannelErrorEvent['data']) {
|
|
201
|
+
super('dataChannelError');
|
|
202
|
+
this.data = data;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* An event that is emitted when the video stream has been initialized.
|
|
208
|
+
*/
|
|
209
|
+
export class VideoInitializedEvent extends Event {
|
|
210
|
+
readonly type: 'videoInitialized';
|
|
211
|
+
constructor() {
|
|
212
|
+
super('videoInitialized');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* An event that is emitted when video stream loading starts.
|
|
218
|
+
*/
|
|
219
|
+
export class StreamLoadingEvent extends Event {
|
|
220
|
+
readonly type: 'streamLoading';
|
|
221
|
+
constructor() {
|
|
222
|
+
super('streamLoading');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* An event that is emitted when video stream loading has finished.
|
|
228
|
+
*/
|
|
229
|
+
export class StreamPreConnectEvent extends Event {
|
|
230
|
+
readonly type: 'streamConnect';
|
|
231
|
+
constructor() {
|
|
232
|
+
super('streamConnect');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* An event that is emitted when video stream has stopped.
|
|
238
|
+
*/
|
|
239
|
+
export class StreamPreDisconnectEvent extends Event {
|
|
240
|
+
readonly type: 'streamDisconnect';
|
|
241
|
+
constructor() {
|
|
242
|
+
super('streamDisconnect');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* An event that is emitted when video stream is reconnecting.
|
|
248
|
+
*/
|
|
249
|
+
export class StreamReconnectEvent extends Event {
|
|
250
|
+
readonly type: 'streamReconnect';
|
|
251
|
+
constructor() {
|
|
252
|
+
super('streamReconnect');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* An event that is emitted if there are errors loading the video stream.
|
|
258
|
+
*/
|
|
259
|
+
export class PlayStreamErrorEvent extends Event {
|
|
260
|
+
readonly type: 'playStreamError';
|
|
261
|
+
readonly data: {
|
|
262
|
+
/** Error message */
|
|
263
|
+
message: string
|
|
264
|
+
};
|
|
265
|
+
constructor(data: PlayStreamErrorEvent['data']) {
|
|
266
|
+
super('playStreamError');
|
|
267
|
+
this.data = data;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* An event that is emitted before trying to start video playback.
|
|
273
|
+
*/
|
|
274
|
+
export class PlayStreamEvent extends Event {
|
|
275
|
+
readonly type: 'playStream';
|
|
276
|
+
constructor() {
|
|
277
|
+
super('playStream');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* An event that is emitted if the browser rejects video playback. Can happen for example if
|
|
283
|
+
* video auto-play without user interaction is refused by the browser.
|
|
284
|
+
*/
|
|
285
|
+
export class PlayStreamRejectedEvent extends Event {
|
|
286
|
+
readonly type: 'playStreamRejected';
|
|
287
|
+
readonly data: {
|
|
288
|
+
/** Rejection reason */
|
|
289
|
+
reason: unknown
|
|
290
|
+
};
|
|
291
|
+
constructor(data: PlayStreamRejectedEvent['data']) {
|
|
292
|
+
super('playStreamRejected');
|
|
293
|
+
this.data = data;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* An event that is emitted when receiving a full FreezeFrame image from UE.
|
|
299
|
+
*/
|
|
300
|
+
export class LoadFreezeFrameEvent extends Event {
|
|
301
|
+
readonly type: 'loadFreezeFrame';
|
|
302
|
+
readonly data: {
|
|
303
|
+
/** true if should show click-to-play overlay, not the freeze frame contents */
|
|
304
|
+
shouldShowPlayOverlay: boolean;
|
|
305
|
+
/** true if the received image is valid */
|
|
306
|
+
isValid: boolean;
|
|
307
|
+
/** Image data. Can be e.g. displayed by encoding as a data url. */
|
|
308
|
+
jpegData?: Uint8Array;
|
|
309
|
+
};
|
|
310
|
+
constructor(data: LoadFreezeFrameEvent['data']) {
|
|
311
|
+
super('loadFreezeFrame');
|
|
312
|
+
this.data = data;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* An event that is emitted when receiving UnfreezeFrame message from UE and video playback is about to be resumed.
|
|
318
|
+
*/
|
|
319
|
+
export class HideFreezeFrameEvent extends Event {
|
|
320
|
+
readonly type: 'hideFreezeFrame';
|
|
321
|
+
constructor() {
|
|
322
|
+
super('hideFreezeFrame');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* An event that is emitted when receiving WebRTC statistics.
|
|
328
|
+
*/
|
|
329
|
+
export class StatsReceivedEvent extends Event {
|
|
330
|
+
readonly type: 'statsReceived';
|
|
331
|
+
readonly data: {
|
|
332
|
+
/** Statistics object */
|
|
333
|
+
aggregatedStats: AggregatedStats
|
|
334
|
+
};
|
|
335
|
+
constructor(data: StatsReceivedEvent['data']) {
|
|
336
|
+
super('statsReceived');
|
|
337
|
+
this.data = data;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* An event that is emitted when streamer list changes.
|
|
343
|
+
*/
|
|
344
|
+
export class StreamerListMessageEvent extends Event {
|
|
345
|
+
readonly type: 'streamerListMessage';
|
|
346
|
+
readonly data: {
|
|
347
|
+
/** Streamer list message containing an array of streamer ids */
|
|
348
|
+
messageStreamerList: MessageReceive.MessageStreamerList;
|
|
349
|
+
/** Auto-selected streamer from the list, or null if unable to auto-select and user should be prompted to select */
|
|
350
|
+
autoSelectedStreamerId: string;
|
|
351
|
+
/** Wanted streamer id from various configurations. */
|
|
352
|
+
wantedStreamerId: string;
|
|
353
|
+
};
|
|
354
|
+
constructor(data: StreamerListMessageEvent['data']) {
|
|
355
|
+
super('streamerListMessage');
|
|
356
|
+
this.data = data;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* An event that is emitted when a subscribed to streamer's id changes.
|
|
362
|
+
*/
|
|
363
|
+
export class StreamerIDChangedMessageEvent extends Event {
|
|
364
|
+
readonly type: 'streamerIDChangedMessage';
|
|
365
|
+
readonly data: {
|
|
366
|
+
/** The new ID of the streamer. */
|
|
367
|
+
newID: string;
|
|
368
|
+
};
|
|
369
|
+
constructor(data: StreamerIDChangedMessageEvent['data']) {
|
|
370
|
+
super('StreamerIDChangedMessage');
|
|
371
|
+
this.data = data;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* An event that is emitted when receiving latency test results.
|
|
377
|
+
*/
|
|
378
|
+
export class LatencyTestResultEvent extends Event {
|
|
379
|
+
readonly type: 'latencyTestResult';
|
|
380
|
+
readonly data: {
|
|
381
|
+
/** Latency test result object */
|
|
382
|
+
latencyTimings: LatencyTestResults
|
|
383
|
+
};
|
|
384
|
+
constructor(data: LatencyTestResultEvent['data']) {
|
|
385
|
+
super('latencyTestResult');
|
|
386
|
+
this.data = data;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* An event that is emitted when receiving data channel latency test response from server.
|
|
392
|
+
* This event is handled by DataChannelLatencyTestController
|
|
393
|
+
*/
|
|
394
|
+
export class DataChannelLatencyTestResponseEvent extends Event {
|
|
395
|
+
readonly type: 'dataChannelLatencyTestResponse';
|
|
396
|
+
readonly data: {
|
|
397
|
+
/** Latency test result object */
|
|
398
|
+
response: DataChannelLatencyTestResponse
|
|
399
|
+
};
|
|
400
|
+
constructor(data: DataChannelLatencyTestResponseEvent['data']) {
|
|
401
|
+
super('dataChannelLatencyTestResponse');
|
|
402
|
+
this.data = data;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* An event that is emitted when data channel latency test results are ready.
|
|
408
|
+
*/
|
|
409
|
+
export class DataChannelLatencyTestResultEvent extends Event {
|
|
410
|
+
readonly type: 'dataChannelLatencyTestResult';
|
|
411
|
+
readonly data: {
|
|
412
|
+
/** Latency test result object */
|
|
413
|
+
result: DataChannelLatencyTestResult
|
|
414
|
+
};
|
|
415
|
+
constructor(data: DataChannelLatencyTestResultEvent['data']) {
|
|
416
|
+
super('dataChannelLatencyTestResult');
|
|
417
|
+
this.data = data;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* An event that is emitted when receiving initial settings from UE.
|
|
423
|
+
*/
|
|
424
|
+
export class InitialSettingsEvent extends Event {
|
|
425
|
+
readonly type: 'initialSettings';
|
|
426
|
+
readonly data: {
|
|
427
|
+
/** Initial settings from UE */
|
|
428
|
+
settings: InitialSettings
|
|
429
|
+
};
|
|
430
|
+
constructor(data: InitialSettingsEvent['data']) {
|
|
431
|
+
super('initialSettings');
|
|
432
|
+
this.data = data;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export type SettingsData =
|
|
437
|
+
| {
|
|
438
|
+
/** Flag id */
|
|
439
|
+
id: FlagsIds;
|
|
440
|
+
type: 'flag';
|
|
441
|
+
/** Flag value */
|
|
442
|
+
value: boolean;
|
|
443
|
+
/** SettingFlag object */
|
|
444
|
+
target: SettingFlag;
|
|
445
|
+
}
|
|
446
|
+
| {
|
|
447
|
+
/** Numeric setting id */
|
|
448
|
+
id: NumericParametersIds;
|
|
449
|
+
type: 'number';
|
|
450
|
+
/** Numeric setting value */
|
|
451
|
+
value: number;
|
|
452
|
+
/** SettingNumber object */
|
|
453
|
+
target: SettingNumber;
|
|
454
|
+
}
|
|
455
|
+
| {
|
|
456
|
+
/** Text setting id */
|
|
457
|
+
id: TextParametersIds;
|
|
458
|
+
type: 'text';
|
|
459
|
+
/** Text setting value */
|
|
460
|
+
value: string;
|
|
461
|
+
/** SettingText object */
|
|
462
|
+
target: SettingText;
|
|
463
|
+
}
|
|
464
|
+
| {
|
|
465
|
+
/** Option setting id */
|
|
466
|
+
id: OptionParametersIds;
|
|
467
|
+
type: 'option';
|
|
468
|
+
/** Option setting selected value */
|
|
469
|
+
value: string;
|
|
470
|
+
/** SettingOption object */
|
|
471
|
+
target: SettingOption;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* An event that is emitted when PixelStreaming settings change.
|
|
476
|
+
*/
|
|
477
|
+
export class SettingsChangedEvent extends Event {
|
|
478
|
+
readonly type: 'settingsChanged';
|
|
479
|
+
readonly data: SettingsData;
|
|
480
|
+
constructor(data: SettingsChangedEvent['data']) {
|
|
481
|
+
super('settingsChanged');
|
|
482
|
+
this.data = data;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Event emitted when an XR Session starts
|
|
488
|
+
*/
|
|
489
|
+
export class XrSessionStartedEvent extends Event {
|
|
490
|
+
readonly type: 'xrSessionStarted';
|
|
491
|
+
constructor() {
|
|
492
|
+
super('xrSessionStarted');
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Event emitted when an XR Session ends
|
|
498
|
+
*/
|
|
499
|
+
export class XrSessionEndedEvent extends Event {
|
|
500
|
+
readonly type: 'xrSessionEnded';
|
|
501
|
+
constructor() {
|
|
502
|
+
super('xrSessionEnded');
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
export type XrFrameData = {
|
|
507
|
+
/** The frame timestamp */
|
|
508
|
+
time: DOMHighResTimeStamp;
|
|
509
|
+
/** The XRFrame */
|
|
510
|
+
frame: XRFrame;
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Event emitted when an XR Frame is complete
|
|
515
|
+
*/
|
|
516
|
+
export class XrFrameEvent extends Event {
|
|
517
|
+
readonly type: 'xrFrame';
|
|
518
|
+
readonly data: XrFrameData
|
|
519
|
+
constructor(data: XrFrameEvent['data']) {
|
|
520
|
+
super('xrFrame');
|
|
521
|
+
this.data = data;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* An event that is emitted when receiving a player count from the signalling server
|
|
527
|
+
*/
|
|
528
|
+
export class PlayerCountEvent extends Event {
|
|
529
|
+
readonly type: 'playerCount';
|
|
530
|
+
readonly data: {
|
|
531
|
+
/** count object */
|
|
532
|
+
count: number
|
|
533
|
+
};
|
|
534
|
+
constructor(data: PlayerCountEvent['data']) {
|
|
535
|
+
super('playerCount');
|
|
536
|
+
this.data = data;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
export type PixelStreamingEvent =
|
|
541
|
+
| AfkWarningActivateEvent
|
|
542
|
+
| AfkWarningUpdateEvent
|
|
543
|
+
| AfkWarningDeactivateEvent
|
|
544
|
+
| AfkTimedOutEvent
|
|
545
|
+
| VideoEncoderAvgQPEvent
|
|
546
|
+
| WebRtcSdpEvent
|
|
547
|
+
| WebRtcAutoConnectEvent
|
|
548
|
+
| WebRtcConnectingEvent
|
|
549
|
+
| WebRtcConnectedEvent
|
|
550
|
+
| WebRtcFailedEvent
|
|
551
|
+
| WebRtcDisconnectedEvent
|
|
552
|
+
| DataChannelOpenEvent
|
|
553
|
+
| DataChannelCloseEvent
|
|
554
|
+
| DataChannelErrorEvent
|
|
555
|
+
| VideoInitializedEvent
|
|
556
|
+
| StreamLoadingEvent
|
|
557
|
+
| StreamPreConnectEvent
|
|
558
|
+
| StreamReconnectEvent
|
|
559
|
+
| StreamPreDisconnectEvent
|
|
560
|
+
| PlayStreamErrorEvent
|
|
561
|
+
| PlayStreamEvent
|
|
562
|
+
| PlayStreamRejectedEvent
|
|
563
|
+
| LoadFreezeFrameEvent
|
|
564
|
+
| HideFreezeFrameEvent
|
|
565
|
+
| StatsReceivedEvent
|
|
566
|
+
| StreamerListMessageEvent
|
|
567
|
+
| StreamerIDChangedMessageEvent
|
|
568
|
+
| LatencyTestResultEvent
|
|
569
|
+
| DataChannelLatencyTestResponseEvent
|
|
570
|
+
| DataChannelLatencyTestResultEvent
|
|
571
|
+
| InitialSettingsEvent
|
|
572
|
+
| SettingsChangedEvent
|
|
573
|
+
| XrSessionStartedEvent
|
|
574
|
+
| XrSessionEndedEvent
|
|
575
|
+
| XrFrameEvent
|
|
576
|
+
| PlayerCountEvent;
|
|
577
|
+
|
|
578
|
+
export class EventEmitter extends EventTarget {
|
|
579
|
+
/**
|
|
580
|
+
* Dispatch a new event.
|
|
581
|
+
* @param e event
|
|
582
|
+
* @returns
|
|
583
|
+
*/
|
|
584
|
+
public dispatchEvent(e: PixelStreamingEvent): boolean {
|
|
585
|
+
return super.dispatchEvent(e);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Register an event handler.
|
|
590
|
+
* @param type event name
|
|
591
|
+
* @param listener event handler function
|
|
592
|
+
*/
|
|
593
|
+
public addEventListener<
|
|
594
|
+
T extends PixelStreamingEvent['type'],
|
|
595
|
+
E extends PixelStreamingEvent & { type: T }
|
|
596
|
+
>(type: T, listener: (e: Event & E) => void) {
|
|
597
|
+
super.addEventListener(type, listener);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* Remove an event handler.
|
|
602
|
+
* @param type event name
|
|
603
|
+
* @param listener event handler function
|
|
604
|
+
*/
|
|
605
|
+
public removeEventListener<
|
|
606
|
+
T extends PixelStreamingEvent['type'],
|
|
607
|
+
E extends PixelStreamingEvent & { type: T }
|
|
608
|
+
>(type: T, listener: (e: Event & E) => void) {
|
|
609
|
+
super.removeEventListener(type, listener);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
export type UnregisterFunction = () => void;
|
|
4
|
+
|
|
5
|
+
export class EventListenerTracker {
|
|
6
|
+
private unregisterCallbacks: UnregisterFunction[];
|
|
7
|
+
|
|
8
|
+
constructor() {
|
|
9
|
+
this.unregisterCallbacks = [];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Add a new callback that is executed when unregisterAll is called.
|
|
14
|
+
* @param callback
|
|
15
|
+
*/
|
|
16
|
+
addUnregisterCallback(callback: UnregisterFunction) {
|
|
17
|
+
this.unregisterCallbacks.push(callback);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Execute all callbacks and clear the list.
|
|
22
|
+
*/
|
|
23
|
+
unregisterAll() {
|
|
24
|
+
for (const callback of this.unregisterCallbacks) {
|
|
25
|
+
callback();
|
|
26
|
+
}
|
|
27
|
+
this.unregisterCallbacks = [];
|
|
28
|
+
}
|
|
29
|
+
}
|