@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.1 → 0.4.3

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.
Files changed (192) hide show
  1. package/dist/commonjs/AFK/AFKController.js.map +1 -1
  2. package/dist/commonjs/Config/Config.js +30 -6
  3. package/dist/commonjs/Config/Config.js.map +1 -1
  4. package/dist/commonjs/Config/SettingBase.js.map +1 -1
  5. package/dist/commonjs/Config/SettingFlag.js.map +1 -1
  6. package/dist/commonjs/Config/SettingNumber.js.map +1 -1
  7. package/dist/commonjs/Config/SettingOption.js.map +1 -1
  8. package/dist/commonjs/Config/SettingText.js.map +1 -1
  9. package/dist/commonjs/DataChannel/DataChannelController.js.map +1 -1
  10. package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js.map +1 -1
  11. package/dist/commonjs/DataChannel/DataChannelSender.js.map +1 -1
  12. package/dist/commonjs/DataChannel/InitialSettings.js.map +1 -1
  13. package/dist/commonjs/DataChannel/LatencyTestResults.js.map +1 -1
  14. package/dist/commonjs/FreezeFrame/FreezeFrame.js.map +1 -1
  15. package/dist/commonjs/FreezeFrame/FreezeFrameController.js.map +1 -1
  16. package/dist/commonjs/Inputs/GamepadController.js +1 -1
  17. package/dist/commonjs/Inputs/GamepadController.js.map +1 -1
  18. package/dist/commonjs/Inputs/GamepadTypes.js +1 -2
  19. package/dist/commonjs/Inputs/GamepadTypes.js.map +1 -1
  20. package/dist/commonjs/Inputs/InputClassesFactory.js.map +1 -1
  21. package/dist/commonjs/Inputs/KeyboardController.js.map +1 -1
  22. package/dist/commonjs/Inputs/MouseController.js.map +1 -1
  23. package/dist/commonjs/Inputs/MouseControllerHovering.js.map +1 -1
  24. package/dist/commonjs/Inputs/MouseControllerLocked.js.map +1 -1
  25. package/dist/commonjs/Inputs/TouchController.js.map +1 -1
  26. package/dist/commonjs/Inputs/TouchControllerFake.js.map +1 -1
  27. package/dist/commonjs/Inputs/XRGamepadController.js.map +1 -1
  28. package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +1 -1
  29. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +4 -4
  30. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +1 -1
  31. package/dist/commonjs/PixelStreaming/PixelStreaming.js +66 -10
  32. package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +1 -1
  33. package/dist/commonjs/UI/OnScreenKeyboard.js.map +1 -1
  34. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +1 -0
  35. package/dist/commonjs/UeInstanceMessage/SendMessageController.js.map +1 -1
  36. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +1 -1
  37. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js.map +1 -1
  38. package/dist/commonjs/Util/EventEmitter.js.map +1 -1
  39. package/dist/commonjs/Util/FileUtil.js.map +1 -1
  40. package/dist/commonjs/Util/IURLSearchParams.js.map +1 -1
  41. package/dist/commonjs/Util/InputCoordTranslator.js.map +1 -1
  42. package/dist/commonjs/VideoPlayer/StreamController.js.map +1 -1
  43. package/dist/commonjs/VideoPlayer/VideoPlayer.js.map +1 -1
  44. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +94 -1
  45. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  46. package/dist/commonjs/WebXR/WebXRController.js +2 -2
  47. package/dist/commonjs/WebXR/WebXRController.js.map +1 -1
  48. package/dist/commonjs/pixelstreamingfrontend.js +5 -1
  49. package/dist/commonjs/pixelstreamingfrontend.js.map +1 -1
  50. package/dist/esm/AFK/AFKController.js +20 -16
  51. package/dist/esm/AFK/AFKController.js.map +1 -1
  52. package/dist/esm/Config/Config.js +92 -60
  53. package/dist/esm/Config/Config.js.map +1 -1
  54. package/dist/esm/Config/SettingBase.js +5 -1
  55. package/dist/esm/Config/SettingBase.js.map +1 -1
  56. package/dist/esm/Config/SettingFlag.js +6 -2
  57. package/dist/esm/Config/SettingFlag.js.map +1 -1
  58. package/dist/esm/Config/SettingNumber.js +6 -2
  59. package/dist/esm/Config/SettingNumber.js.map +1 -1
  60. package/dist/esm/Config/SettingOption.js +8 -4
  61. package/dist/esm/Config/SettingOption.js.map +1 -1
  62. package/dist/esm/Config/SettingText.js +6 -2
  63. package/dist/esm/Config/SettingText.js.map +1 -1
  64. package/dist/esm/DataChannel/DataChannelController.js +10 -6
  65. package/dist/esm/DataChannel/DataChannelController.js.map +1 -1
  66. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +9 -5
  67. package/dist/esm/DataChannel/DataChannelLatencyTestController.js.map +1 -1
  68. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +5 -1
  69. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js.map +1 -1
  70. package/dist/esm/DataChannel/DataChannelSender.js +8 -4
  71. package/dist/esm/DataChannel/DataChannelSender.js.map +1 -1
  72. package/dist/esm/DataChannel/InitialSettings.js +11 -4
  73. package/dist/esm/DataChannel/InitialSettings.js.map +1 -1
  74. package/dist/esm/DataChannel/LatencyTestResults.js +8 -4
  75. package/dist/esm/DataChannel/LatencyTestResults.js.map +1 -1
  76. package/dist/esm/FreezeFrame/FreezeFrame.js +5 -1
  77. package/dist/esm/FreezeFrame/FreezeFrame.js.map +1 -1
  78. package/dist/esm/FreezeFrame/FreezeFrameController.js +11 -7
  79. package/dist/esm/FreezeFrame/FreezeFrameController.js.map +1 -1
  80. package/dist/esm/Inputs/GamepadController.js +11 -7
  81. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  82. package/dist/esm/Inputs/GamepadTypes.js +4 -1
  83. package/dist/esm/Inputs/GamepadTypes.js.map +1 -1
  84. package/dist/esm/Inputs/IInputController.js +2 -1
  85. package/dist/esm/Inputs/InputClassesFactory.js +26 -21
  86. package/dist/esm/Inputs/InputClassesFactory.js.map +1 -1
  87. package/dist/esm/Inputs/KeyCodes.js +4 -1
  88. package/dist/esm/Inputs/KeyCodes.js.map +1 -1
  89. package/dist/esm/Inputs/KeyboardController.js +22 -18
  90. package/dist/esm/Inputs/KeyboardController.js.map +1 -1
  91. package/dist/esm/Inputs/MouseButtons.js +7 -2
  92. package/dist/esm/Inputs/MouseButtons.js.map +1 -1
  93. package/dist/esm/Inputs/MouseController.js +26 -22
  94. package/dist/esm/Inputs/MouseController.js.map +1 -1
  95. package/dist/esm/Inputs/MouseControllerHovering.js +6 -2
  96. package/dist/esm/Inputs/MouseControllerHovering.js.map +1 -1
  97. package/dist/esm/Inputs/MouseControllerLocked.js +9 -5
  98. package/dist/esm/Inputs/MouseControllerLocked.js.map +1 -1
  99. package/dist/esm/Inputs/SpecialKeyCodes.js +5 -1
  100. package/dist/esm/Inputs/SpecialKeyCodes.js.map +1 -1
  101. package/dist/esm/Inputs/TouchController.js +8 -4
  102. package/dist/esm/Inputs/TouchController.js.map +1 -1
  103. package/dist/esm/Inputs/TouchControllerFake.js +8 -4
  104. package/dist/esm/Inputs/TouchControllerFake.js.map +1 -1
  105. package/dist/esm/Inputs/XRGamepadController.js +8 -4
  106. package/dist/esm/Inputs/XRGamepadController.js.map +1 -1
  107. package/dist/esm/PeerConnectionController/AggregatedStats.js +23 -19
  108. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  109. package/dist/esm/PeerConnectionController/CandidatePairStats.js +5 -1
  110. package/dist/esm/PeerConnectionController/CandidatePairStats.js.map +1 -1
  111. package/dist/esm/PeerConnectionController/CandidateStat.js +5 -1
  112. package/dist/esm/PeerConnectionController/CandidateStat.js.map +1 -1
  113. package/dist/esm/PeerConnectionController/CodecStats.js +5 -1
  114. package/dist/esm/PeerConnectionController/CodecStats.js.map +1 -1
  115. package/dist/esm/PeerConnectionController/DataChannelStats.js +5 -1
  116. package/dist/esm/PeerConnectionController/DataChannelStats.js.map +1 -1
  117. package/dist/esm/PeerConnectionController/InboundRTPStats.js +9 -3
  118. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  119. package/dist/esm/PeerConnectionController/InboundTrackStats.js +5 -1
  120. package/dist/esm/PeerConnectionController/InboundTrackStats.js.map +1 -1
  121. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +7 -2
  122. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  123. package/dist/esm/PeerConnectionController/PeerConnectionController.js +45 -41
  124. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  125. package/dist/esm/PeerConnectionController/SessionStats.js +5 -1
  126. package/dist/esm/PeerConnectionController/SessionStats.js.map +1 -1
  127. package/dist/esm/PeerConnectionController/StreamStats.js +5 -1
  128. package/dist/esm/PeerConnectionController/StreamStats.js.map +1 -1
  129. package/dist/esm/PixelStreaming/PixelStreaming.js +154 -94
  130. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  131. package/dist/esm/UI/OnScreenKeyboard.js +5 -1
  132. package/dist/esm/UI/OnScreenKeyboard.js.map +1 -1
  133. package/dist/esm/UeInstanceMessage/ResponseController.js +8 -4
  134. package/dist/esm/UeInstanceMessage/ResponseController.js.map +1 -1
  135. package/dist/esm/UeInstanceMessage/SendMessageController.js +10 -5
  136. package/dist/esm/UeInstanceMessage/SendMessageController.js.map +1 -1
  137. package/dist/esm/UeInstanceMessage/StreamMessageController.js +11 -6
  138. package/dist/esm/UeInstanceMessage/StreamMessageController.js.map +1 -1
  139. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +5 -1
  140. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -1
  141. package/dist/esm/Util/EventEmitter.js +79 -38
  142. package/dist/esm/Util/EventEmitter.js.map +1 -1
  143. package/dist/esm/Util/FileUtil.js +16 -11
  144. package/dist/esm/Util/FileUtil.js.map +1 -1
  145. package/dist/esm/Util/IURLSearchParams.js +5 -1
  146. package/dist/esm/Util/IURLSearchParams.js.map +1 -1
  147. package/dist/esm/Util/InputCoordTranslator.js +5 -1
  148. package/dist/esm/Util/InputCoordTranslator.js.map +1 -1
  149. package/dist/esm/Util/RTCUtils.js +5 -1
  150. package/dist/esm/Util/RTCUtils.js.map +1 -1
  151. package/dist/esm/VideoPlayer/StreamController.js +10 -6
  152. package/dist/esm/VideoPlayer/StreamController.js.map +1 -1
  153. package/dist/esm/VideoPlayer/VideoPlayer.js +11 -7
  154. package/dist/esm/VideoPlayer/VideoPlayer.js.map +1 -1
  155. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +312 -215
  156. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  157. package/dist/esm/WebXR/WebXRController.js +16 -12
  158. package/dist/esm/WebXR/WebXRController.js.map +1 -1
  159. package/dist/esm/pixelstreamingfrontend.js +73 -23
  160. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  161. package/dist/types/Config/Config.d.ts +9 -0
  162. package/dist/types/DataChannel/DataChannelController.d.ts +1 -1
  163. package/dist/types/DataChannel/InitialSettings.d.ts +2 -0
  164. package/dist/types/Inputs/XRGamepadController.d.ts +0 -1
  165. package/dist/types/PixelStreaming/PixelStreaming.d.ts +1 -1
  166. package/dist/types/Util/EventEmitter.d.ts +0 -1
  167. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  168. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +17 -0
  169. package/dist/types/WebXR/WebXRController.d.ts +0 -1
  170. package/dist/types/pixelstreamingfrontend.d.ts +1 -1
  171. package/package.json +8 -8
  172. package/src/Config/Config.ts +83 -4
  173. package/src/Config/SettingFlag.ts +3 -3
  174. package/src/Config/SettingNumber.ts +3 -3
  175. package/src/Config/SettingOption.ts +3 -3
  176. package/src/Config/SettingText.ts +4 -4
  177. package/src/DataChannel/DataChannelController.ts +2 -2
  178. package/src/DataChannel/InitialSettings.ts +2 -0
  179. package/src/Inputs/MouseControllerHovering.ts +2 -2
  180. package/src/Inputs/MouseControllerLocked.ts +2 -2
  181. package/src/PeerConnectionController/PeerConnectionController.ts +5 -5
  182. package/src/PixelStreaming/PixelStreaming.ts +94 -15
  183. package/src/UeInstanceMessage/SendMessageController.ts +1 -0
  184. package/src/Util/EventEmitter.ts +40 -40
  185. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  186. package/src/WebRtcPlayer/WebRtcPlayerController.ts +120 -1
  187. package/src/WebXR/WebXRController.ts +1 -1
  188. package/src/__test__/mockRTCRtpReceiver.ts +1 -1
  189. package/src/__test__/mockWebSocket.ts +3 -3
  190. package/src/pixelstreamingfrontend.ts +6 -1
  191. package/tsconfig.esm.json +2 -1
  192. package/tsconfig.json +6 -2
@@ -17,7 +17,7 @@ import {
17
17
  * Can be cancelled by calling the callback function provided as part of the event.
18
18
  */
19
19
  export class AfkWarningActivateEvent extends Event {
20
- readonly type: 'afkWarningActivate';
20
+ override readonly type: 'afkWarningActivate';
21
21
  readonly data: {
22
22
  /** How many seconds until the session is disconnected */
23
23
  countDown: number;
@@ -34,7 +34,7 @@ export class AfkWarningActivateEvent extends Event {
34
34
  * An event that is emitted when the AFK disconnect countdown is updated.
35
35
  */
36
36
  export class AfkWarningUpdateEvent extends Event {
37
- readonly type: 'afkWarningUpdate';
37
+ override readonly type: 'afkWarningUpdate';
38
38
  readonly data: {
39
39
  /** How many seconds until the session is disconnected */
40
40
  countDown: number;
@@ -49,7 +49,7 @@ export class AfkWarningUpdateEvent extends Event {
49
49
  * An event that is emitted when AFK warning is deactivated.
50
50
  */
51
51
  export class AfkWarningDeactivateEvent extends Event {
52
- readonly type: 'afkWarningDeactivate';
52
+ override readonly type: 'afkWarningDeactivate';
53
53
  constructor() {
54
54
  super('afkWarningDeactivate');
55
55
  }
@@ -59,7 +59,7 @@ export class AfkWarningDeactivateEvent extends Event {
59
59
  * An event that is emitted when AFK countdown reaches 0 and the user is disconnected.
60
60
  */
61
61
  export class AfkTimedOutEvent extends Event {
62
- readonly type: 'afkTimedOut';
62
+ override readonly type: 'afkTimedOut';
63
63
  constructor() {
64
64
  super('afkTimedOut');
65
65
  }
@@ -69,7 +69,7 @@ export class AfkTimedOutEvent extends Event {
69
69
  * An event that is emitted when we receive new video quality value.
70
70
  */
71
71
  export class VideoEncoderAvgQPEvent extends Event {
72
- readonly type: 'videoEncoderAvgQP';
72
+ override readonly type: 'videoEncoderAvgQP';
73
73
  readonly data: {
74
74
  /** Average video quality value */
75
75
  avgQP: number;
@@ -84,7 +84,7 @@ export class VideoEncoderAvgQPEvent extends Event {
84
84
  * An event that is emitted after a WebRtc connection has been negotiated.
85
85
  */
86
86
  export class WebRtcSdpEvent extends Event {
87
- readonly type: 'webRtcSdp';
87
+ override readonly type: 'webRtcSdp';
88
88
  constructor() {
89
89
  super('webRtcSdp');
90
90
  }
@@ -94,7 +94,7 @@ export class WebRtcSdpEvent extends Event {
94
94
  * An event that is emitted when auto connecting.
95
95
  */
96
96
  export class WebRtcAutoConnectEvent extends Event {
97
- readonly type: 'webRtcAutoConnect';
97
+ override readonly type: 'webRtcAutoConnect';
98
98
  constructor() {
99
99
  super('webRtcAutoConnect');
100
100
  }
@@ -104,7 +104,7 @@ export class WebRtcAutoConnectEvent extends Event {
104
104
  * An event that is emitted when sending a WebRtc offer.
105
105
  */
106
106
  export class WebRtcConnectingEvent extends Event {
107
- readonly type: 'webRtcConnecting';
107
+ override readonly type: 'webRtcConnecting';
108
108
  constructor() {
109
109
  super('webRtcConnecting');
110
110
  }
@@ -114,7 +114,7 @@ export class WebRtcConnectingEvent extends Event {
114
114
  * An event that is emitted when WebRtc connection has been established.
115
115
  */
116
116
  export class WebRtcConnectedEvent extends Event {
117
- readonly type: 'webRtcConnected';
117
+ override readonly type: 'webRtcConnected';
118
118
  constructor() {
119
119
  super('webRtcConnected');
120
120
  }
@@ -124,7 +124,7 @@ export class WebRtcConnectedEvent extends Event {
124
124
  * An event that is emitted if WebRtc connection has failed.
125
125
  */
126
126
  export class WebRtcFailedEvent extends Event {
127
- readonly type: 'webRtcFailed';
127
+ override readonly type: 'webRtcFailed';
128
128
  constructor() {
129
129
  super('webRtcFailed');
130
130
  }
@@ -134,7 +134,7 @@ export class WebRtcFailedEvent extends Event {
134
134
  * An event that is emitted if WebRtc connection is disconnected.
135
135
  */
136
136
  export class WebRtcDisconnectedEvent extends Event {
137
- readonly type: 'webRtcDisconnected';
137
+ override readonly type: 'webRtcDisconnected';
138
138
  readonly data: {
139
139
  /** Message describing the disconnect reason */
140
140
  eventString: string;
@@ -151,7 +151,7 @@ export class WebRtcDisconnectedEvent extends Event {
151
151
  * An event that is emitted when RTCDataChannel is opened.
152
152
  */
153
153
  export class DataChannelOpenEvent extends Event {
154
- readonly type: 'dataChannelOpen';
154
+ override readonly type: 'dataChannelOpen';
155
155
  readonly data: {
156
156
  /** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
157
157
  label: string;
@@ -168,7 +168,7 @@ export class DataChannelOpenEvent extends Event {
168
168
  * An event that is emitted when RTCDataChannel is closed.
169
169
  */
170
170
  export class DataChannelCloseEvent extends Event {
171
- readonly type: 'dataChannelClose';
171
+ override readonly type: 'dataChannelClose';
172
172
  readonly data: {
173
173
  /** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
174
174
  label: string;
@@ -185,7 +185,7 @@ export class DataChannelCloseEvent extends Event {
185
185
  * An event that is emitted on RTCDataChannel errors.
186
186
  */
187
187
  export class DataChannelErrorEvent extends Event {
188
- readonly type: 'dataChannelError';
188
+ override readonly type: 'dataChannelError';
189
189
  readonly data: {
190
190
  /** Data channel label. One of 'datachannel', 'send-datachannel', 'recv-datachannel' */
191
191
  label: string;
@@ -202,7 +202,7 @@ export class DataChannelErrorEvent extends Event {
202
202
  * An event that is emitted when the video stream has been initialized.
203
203
  */
204
204
  export class VideoInitializedEvent extends Event {
205
- readonly type: 'videoInitialized';
205
+ override readonly type: 'videoInitialized';
206
206
  constructor() {
207
207
  super('videoInitialized');
208
208
  }
@@ -212,7 +212,7 @@ export class VideoInitializedEvent extends Event {
212
212
  * An event that is emitted when video stream loading starts.
213
213
  */
214
214
  export class StreamLoadingEvent extends Event {
215
- readonly type: 'streamLoading';
215
+ override readonly type: 'streamLoading';
216
216
  constructor() {
217
217
  super('streamLoading');
218
218
  }
@@ -222,7 +222,7 @@ export class StreamLoadingEvent extends Event {
222
222
  * An event that is emitted when video stream loading has finished.
223
223
  */
224
224
  export class StreamPreConnectEvent extends Event {
225
- readonly type: 'streamConnect';
225
+ override readonly type: 'streamConnect';
226
226
  constructor() {
227
227
  super('streamConnect');
228
228
  }
@@ -232,7 +232,7 @@ export class StreamPreConnectEvent extends Event {
232
232
  * An event that is emitted when video stream has stopped.
233
233
  */
234
234
  export class StreamPreDisconnectEvent extends Event {
235
- readonly type: 'streamDisconnect';
235
+ override readonly type: 'streamDisconnect';
236
236
  constructor() {
237
237
  super('streamDisconnect');
238
238
  }
@@ -242,7 +242,7 @@ export class StreamPreDisconnectEvent extends Event {
242
242
  * An event that is emitted when video stream is reconnecting.
243
243
  */
244
244
  export class StreamReconnectEvent extends Event {
245
- readonly type: 'streamReconnect';
245
+ override readonly type: 'streamReconnect';
246
246
  constructor() {
247
247
  super('streamReconnect');
248
248
  }
@@ -252,7 +252,7 @@ export class StreamReconnectEvent extends Event {
252
252
  * An event that is emitted if there are errors loading the video stream.
253
253
  */
254
254
  export class PlayStreamErrorEvent extends Event {
255
- readonly type: 'playStreamError';
255
+ override readonly type: 'playStreamError';
256
256
  readonly data: {
257
257
  /** Error message */
258
258
  message: string;
@@ -267,7 +267,7 @@ export class PlayStreamErrorEvent extends Event {
267
267
  * An event that is emitted before trying to start video playback.
268
268
  */
269
269
  export class PlayStreamEvent extends Event {
270
- readonly type: 'playStream';
270
+ override readonly type: 'playStream';
271
271
  constructor() {
272
272
  super('playStream');
273
273
  }
@@ -278,7 +278,7 @@ export class PlayStreamEvent extends Event {
278
278
  * video auto-play without user interaction is refused by the browser.
279
279
  */
280
280
  export class PlayStreamRejectedEvent extends Event {
281
- readonly type: 'playStreamRejected';
281
+ override readonly type: 'playStreamRejected';
282
282
  readonly data: {
283
283
  /** Rejection reason */
284
284
  reason: unknown;
@@ -293,7 +293,7 @@ export class PlayStreamRejectedEvent extends Event {
293
293
  * An event that is emitted when receiving a full FreezeFrame image from UE.
294
294
  */
295
295
  export class LoadFreezeFrameEvent extends Event {
296
- readonly type: 'loadFreezeFrame';
296
+ override readonly type: 'loadFreezeFrame';
297
297
  readonly data: {
298
298
  /** true if should show click-to-play overlay, not the freeze frame contents */
299
299
  shouldShowPlayOverlay: boolean;
@@ -312,7 +312,7 @@ export class LoadFreezeFrameEvent extends Event {
312
312
  * An event that is emitted when receiving UnfreezeFrame message from UE and video playback is about to be resumed.
313
313
  */
314
314
  export class HideFreezeFrameEvent extends Event {
315
- readonly type: 'hideFreezeFrame';
315
+ override readonly type: 'hideFreezeFrame';
316
316
  constructor() {
317
317
  super('hideFreezeFrame');
318
318
  }
@@ -322,7 +322,7 @@ export class HideFreezeFrameEvent extends Event {
322
322
  * An event that is emitted when receiving WebRTC statistics.
323
323
  */
324
324
  export class StatsReceivedEvent extends Event {
325
- readonly type: 'statsReceived';
325
+ override readonly type: 'statsReceived';
326
326
  readonly data: {
327
327
  /** Statistics object */
328
328
  aggregatedStats: AggregatedStats;
@@ -337,7 +337,7 @@ export class StatsReceivedEvent extends Event {
337
337
  * An event that is emitted when streamer list changes.
338
338
  */
339
339
  export class StreamerListMessageEvent extends Event {
340
- readonly type: 'streamerListMessage';
340
+ override readonly type: 'streamerListMessage';
341
341
  readonly data: {
342
342
  /** Streamer list message containing an array of streamer ids */
343
343
  messageStreamerList: Messages.streamerList;
@@ -356,7 +356,7 @@ export class StreamerListMessageEvent extends Event {
356
356
  * An event that is emitted when a subscribed to streamer's id changes.
357
357
  */
358
358
  export class StreamerIDChangedMessageEvent extends Event {
359
- readonly type: 'streamerIDChangedMessage';
359
+ override readonly type: 'streamerIDChangedMessage';
360
360
  readonly data: {
361
361
  /** The new ID of the streamer. */
362
362
  newID: string;
@@ -371,7 +371,7 @@ export class StreamerIDChangedMessageEvent extends Event {
371
371
  * An event that is emitted when receiving latency test results.
372
372
  */
373
373
  export class LatencyTestResultEvent extends Event {
374
- readonly type: 'latencyTestResult';
374
+ override readonly type: 'latencyTestResult';
375
375
  readonly data: {
376
376
  /** Latency test result object */
377
377
  latencyTimings: LatencyTestResults;
@@ -387,7 +387,7 @@ export class LatencyTestResultEvent extends Event {
387
387
  * This event is handled by DataChannelLatencyTestController
388
388
  */
389
389
  export class DataChannelLatencyTestResponseEvent extends Event {
390
- readonly type: 'dataChannelLatencyTestResponse';
390
+ override readonly type: 'dataChannelLatencyTestResponse';
391
391
  readonly data: {
392
392
  /** Latency test result object */
393
393
  response: DataChannelLatencyTestResponse;
@@ -402,7 +402,7 @@ export class DataChannelLatencyTestResponseEvent extends Event {
402
402
  * An event that is emitted when data channel latency test results are ready.
403
403
  */
404
404
  export class DataChannelLatencyTestResultEvent extends Event {
405
- readonly type: 'dataChannelLatencyTestResult';
405
+ override readonly type: 'dataChannelLatencyTestResult';
406
406
  readonly data: {
407
407
  /** Latency test result object */
408
408
  result: DataChannelLatencyTestResult;
@@ -417,7 +417,7 @@ export class DataChannelLatencyTestResultEvent extends Event {
417
417
  * An event that is emitted when receiving initial settings from UE.
418
418
  */
419
419
  export class InitialSettingsEvent extends Event {
420
- readonly type: 'initialSettings';
420
+ override readonly type: 'initialSettings';
421
421
  readonly data: {
422
422
  /** Initial settings from UE */
423
423
  settings: InitialSettings;
@@ -470,7 +470,7 @@ export type SettingsData =
470
470
  * An event that is emitted when PixelStreaming settings change.
471
471
  */
472
472
  export class SettingsChangedEvent extends Event {
473
- readonly type: 'settingsChanged';
473
+ override readonly type: 'settingsChanged';
474
474
  readonly data: SettingsData;
475
475
  constructor(data: SettingsChangedEvent['data']) {
476
476
  super('settingsChanged');
@@ -482,7 +482,7 @@ export class SettingsChangedEvent extends Event {
482
482
  * Event emitted when an XR Session starts
483
483
  */
484
484
  export class XrSessionStartedEvent extends Event {
485
- readonly type: 'xrSessionStarted';
485
+ override readonly type: 'xrSessionStarted';
486
486
  constructor() {
487
487
  super('xrSessionStarted');
488
488
  }
@@ -492,7 +492,7 @@ export class XrSessionStartedEvent extends Event {
492
492
  * Event emitted when an XR Session ends
493
493
  */
494
494
  export class XrSessionEndedEvent extends Event {
495
- readonly type: 'xrSessionEnded';
495
+ override readonly type: 'xrSessionEnded';
496
496
  constructor() {
497
497
  super('xrSessionEnded');
498
498
  }
@@ -509,7 +509,7 @@ export type XrFrameData = {
509
509
  * Event emitted when an XR Frame is complete
510
510
  */
511
511
  export class XrFrameEvent extends Event {
512
- readonly type: 'xrFrame';
512
+ override readonly type: 'xrFrame';
513
513
  readonly data: XrFrameData;
514
514
  constructor(data: XrFrameEvent['data']) {
515
515
  super('xrFrame');
@@ -521,7 +521,7 @@ export class XrFrameEvent extends Event {
521
521
  * An event that is emitted when receiving a player count from the signalling server
522
522
  */
523
523
  export class PlayerCountEvent extends Event {
524
- readonly type: 'playerCount';
524
+ override readonly type: 'playerCount';
525
525
  readonly data: {
526
526
  /** count object */
527
527
  count: number;
@@ -536,7 +536,7 @@ export class PlayerCountEvent extends Event {
536
536
  * An event that is emitted when the webRTC connections is relayed over TCP.
537
537
  */
538
538
  export class WebRtcTCPRelayDetectedEvent extends Event {
539
- readonly type: 'webRtcTCPRelayDetected';
539
+ override readonly type: 'webRtcTCPRelayDetected';
540
540
  constructor() {
541
541
  super('webRtcTCPRelayDetected');
542
542
  }
@@ -587,7 +587,7 @@ export class PixelStreamingEventEmitter extends EventTarget {
587
587
  * @param e event
588
588
  * @returns
589
589
  */
590
- public dispatchEvent(e: PixelStreamingEvent): boolean {
590
+ public override dispatchEvent(e: PixelStreamingEvent): boolean {
591
591
  return super.dispatchEvent(e);
592
592
  }
593
593
 
@@ -596,7 +596,7 @@ export class PixelStreamingEventEmitter extends EventTarget {
596
596
  * @param type event name
597
597
  * @param listener event handler function
598
598
  */
599
- public addEventListener<
599
+ public override addEventListener<
600
600
  T extends PixelStreamingEvent['type'],
601
601
  E extends PixelStreamingEvent & { type: T }
602
602
  >(type: T, listener: (e: Event & E) => void) {
@@ -608,7 +608,7 @@ export class PixelStreamingEventEmitter extends EventTarget {
608
608
  * @param type event name
609
609
  * @param listener event handler function
610
610
  */
611
- public removeEventListener<
611
+ public override removeEventListener<
612
612
  T extends PixelStreamingEvent['type'],
613
613
  E extends PixelStreamingEvent & { type: T }
614
614
  >(type: T, listener: (e: Event & E) => void) {
@@ -8,7 +8,7 @@ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
8
8
  */
9
9
  declare global {
10
10
  interface HTMLElement {
11
- mozRequestPointerLock?(): void;
11
+ mozRequestPointerLock(options: PointerLockOptions): Promise<void>;
12
12
  }
13
13
  }
14
14
 
@@ -88,6 +88,7 @@ export class WebRtcPlayerController {
88
88
  gamePadController: GamepadController;
89
89
  coordinateConverter: InputCoordTranslator;
90
90
  isUsingSFU: boolean;
91
+ isUsingSVC: boolean;
91
92
  isQualityController: boolean;
92
93
  statsTimerHandle: number;
93
94
  file: FileTemplate;
@@ -265,6 +266,7 @@ export class WebRtcPlayerController {
265
266
  );
266
267
 
267
268
  this.isUsingSFU = false;
269
+ this.isUsingSVC = false;
268
270
  this.isQualityController = false;
269
271
  this.preferredCodec = '';
270
272
  this.enableAutoReconnect = true;
@@ -285,6 +287,35 @@ export class WebRtcPlayerController {
285
287
  this.protocol.sendMessage(message);
286
288
  });
287
289
 
290
+ this.config._addOnOptionSettingChangedListener(
291
+ OptionParameters.PreferredQuality,
292
+ (preferredQuality) => {
293
+ if (preferredQuality === undefined || preferredQuality === '') {
294
+ return;
295
+ }
296
+
297
+ let message;
298
+ if (this.isUsingSVC) {
299
+ // User is using SVC so selected quality will be of the form SxTy(h). Just extract the x and y numbers
300
+ message = MessageHelpers.createMessage(Messages.layerPreference, {
301
+ spatialLayer: +preferredQuality[1] - 1,
302
+ temporalLayer: +preferredQuality[3] - 1
303
+ });
304
+ } else {
305
+ // User is not using SVC so the selected quality will be either Low, Medium or High so we extract the appropriate spatial layer index
306
+ const allQualities = this.config.getSettingOption(
307
+ OptionParameters.PreferredQuality
308
+ ).options;
309
+ const qualityIndex = allQualities.indexOf(preferredQuality);
310
+ message = MessageHelpers.createMessage(Messages.layerPreference, {
311
+ spatialLayer: qualityIndex,
312
+ temporalLayer: 0
313
+ });
314
+ }
315
+ this.protocol.sendMessage(message);
316
+ }
317
+ );
318
+
288
319
  this.setVideoEncoderAvgQP(-1);
289
320
 
290
321
  this.signallingUrlBuilder = () => {
@@ -400,6 +431,13 @@ export class WebRtcPlayerController {
400
431
  'GamepadResponse',
401
432
  (data: ArrayBuffer) => this.onGamepadResponse(data)
402
433
  );
434
+ this.streamMessageController.registerMessageHandler(
435
+ MessageDirection.FromStreamer,
436
+ 'Multiplexed',
437
+ () => {
438
+ /* Do nothing as this message type is used only by the SFU */
439
+ }
440
+ );
403
441
  this.streamMessageController.registerMessageHandler(
404
442
  MessageDirection.FromStreamer,
405
443
  'Protocol',
@@ -627,6 +665,20 @@ export class WebRtcPlayerController {
627
665
  (data: Array<number | string>) =>
628
666
  this.sendMessageController.sendMessageToStreamer('XRAnalog', data)
629
667
  );
668
+ this.streamMessageController.registerMessageHandler(
669
+ MessageDirection.ToStreamer,
670
+ 'ChannelRelayStatus',
671
+ () => {
672
+ /* Do nothing as this message type is used only by the SFU */
673
+ }
674
+ );
675
+ this.streamMessageController.registerMessageHandler(
676
+ MessageDirection.ToStreamer,
677
+ 'Multiplexed',
678
+ () => {
679
+ /* Do nothing as this message type is used only by the SFU */
680
+ }
681
+ );
630
682
  }
631
683
 
632
684
  /**
@@ -1230,11 +1282,40 @@ export class WebRtcPlayerController {
1230
1282
  Logger.Info(`Got offer sdp ${Offer.sdp}`);
1231
1283
 
1232
1284
  this.isUsingSFU = Offer.sfu ? Offer.sfu : false;
1233
- if (this.isUsingSFU) {
1285
+ this.isUsingSVC = Offer.scalabilityMode ? Offer.scalabilityMode != 'L1T1' : false;
1286
+ if (this.isUsingSFU || this.isUsingSVC) {
1234
1287
  // Disable negotiating with the sfu as the sfu only supports one codec at a time
1235
1288
  this.peerConnectionController.preferredCodec = '';
1236
1289
  }
1237
1290
 
1291
+ // NOTE: These two settings configurations are done outside of an if(this.isUsingSFU) so that users
1292
+ // can switch between a default and SFU stream and have the settings reconfigure appropriately
1293
+
1294
+ const scalabilityMode = Offer.scalabilityMode ? Offer.scalabilityMode : 'L1T1';
1295
+ let availableQualities = ['Default'];
1296
+ if (this.isUsingSFU) {
1297
+ if (!this.isUsingSVC) {
1298
+ // User is using an SFU without any temporal scalability. Just offer easily readable names
1299
+ availableQualities = ['Low', 'Medium', 'High'];
1300
+ } else {
1301
+ // User is using SVC. Generate all available options.
1302
+ availableQualities = [];
1303
+ const maxSpatialLayers = +scalabilityMode[1];
1304
+ const maxTemporalLayers = +scalabilityMode[3];
1305
+ for (let s = 1; s <= maxSpatialLayers; s++) {
1306
+ for (let t = 1; t <= maxTemporalLayers; t++) {
1307
+ availableQualities.push(`S${s}T${t}`);
1308
+ }
1309
+ }
1310
+ }
1311
+ }
1312
+
1313
+ // Update the possible video quality options
1314
+ this.config.setOptionSettingOptions(OptionParameters.PreferredQuality, availableQualities);
1315
+
1316
+ // Update the selected video quality with the highest possible resolution
1317
+ this.config.setOptionSettingValue(OptionParameters.PreferredQuality, availableQualities.slice(-1)[0]);
1318
+
1238
1319
  const sdpOffer: RTCSessionDescriptionInit = {
1239
1320
  sdp: Offer.sdp,
1240
1321
  type: 'offer'
@@ -1487,6 +1568,44 @@ export class WebRtcPlayerController {
1487
1568
  }
1488
1569
  }
1489
1570
 
1571
+ /**
1572
+ * Send the MinQuality encoder setting to the UE Instance.
1573
+ * @param minQuality - The lower bound for quality when encoding
1574
+ * valid values are (0-100) where:
1575
+ * 0 = Worst quality.
1576
+ * 100 = Best quality.
1577
+ */
1578
+ sendEncoderMinQuality(minQuality: number) {
1579
+ Logger.Info(`MinQuality=${minQuality}\n`);
1580
+
1581
+ if (minQuality != null) {
1582
+ this.streamMessageController.toStreamerHandlers.get('Command')([
1583
+ JSON.stringify({
1584
+ 'Encoder.MinQuality': minQuality
1585
+ })
1586
+ ]);
1587
+ }
1588
+ }
1589
+
1590
+ /**
1591
+ * Send the MaxQuality encoder setting to the UE Instance.
1592
+ * @param maxQuality - The upper bound for quality when encoding
1593
+ * valid values are (0-100) where:
1594
+ * 0 = Worst quality.
1595
+ * 100 = Best quality.
1596
+ */
1597
+ sendEncoderMaxQuality(maxQuality: number) {
1598
+ Logger.Info(`MaxQuality=${maxQuality}\n`);
1599
+
1600
+ if (maxQuality != null) {
1601
+ this.streamMessageController.toStreamerHandlers.get('Command')([
1602
+ JSON.stringify({
1603
+ 'Encoder.MaxQuality': maxQuality
1604
+ })
1605
+ ]);
1606
+ }
1607
+ }
1608
+
1490
1609
  /**
1491
1610
  * Send the { WebRTC.MinBitrate: SomeNumber }} command to UE to set
1492
1611
  * the minimum bitrate that we allow WebRTC to use
@@ -4,7 +4,7 @@ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
4
4
  import { WebRtcPlayerController } from '../WebRtcPlayer/WebRtcPlayerController';
5
5
  import { XRGamepadController } from '../Inputs/XRGamepadController';
6
6
  import { XrFrameEvent } from '../Util/EventEmitter';
7
- import { Flags } from '../pixelstreamingfrontend';
7
+ import { Flags } from '../Config/Config';
8
8
 
9
9
  export class WebXRController {
10
10
  private xrSession: XRSession;
@@ -7,7 +7,7 @@ export const mockRTCRtpReceiverImpl = {
7
7
  mimeType: "testMimeType",
8
8
  sdpFmtpLine: "AV1"
9
9
  }
10
- ] as RTCRtpCodecCapability[],
10
+ ] as RTCRtpCodec[],
11
11
  headerExtensions: [] as RTCRtpHeaderExtensionCapability[]
12
12
  })
13
13
  } as any as typeof global.RTCRtpReceiver;
@@ -53,17 +53,17 @@ export class MockWebSocketImpl extends WebSocket {
53
53
  triggerFunctions.triggerRemoteClose = this.triggerRemoteClose.bind(this);
54
54
  }
55
55
 
56
- get readyState() {
56
+ override get readyState() {
57
57
  return this._readyState;
58
58
  }
59
59
 
60
- close(code?: number | undefined, reason?: string | undefined): void {
60
+ override close(code?: number | undefined, reason?: string | undefined): void {
61
61
  super.close(code, reason);
62
62
  this._readyState = this.CLOSED;
63
63
  this.triggerOnClose({ code, reason });
64
64
  }
65
65
 
66
- send(data: string | Blob | ArrayBufferView | ArrayBufferLike): void {
66
+ override send(data: string | Blob | ArrayBufferView | ArrayBufferLike): void {
67
67
  spyFunctions.sendSpy?.(data);
68
68
  }
69
69
 
@@ -13,7 +13,12 @@ export {
13
13
  NumericParametersIds,
14
14
  TextParametersIds,
15
15
  OptionParametersIds,
16
- AllSettings
16
+ AllSettings,
17
+ OptionIds,
18
+ isFlagId,
19
+ isNumericId,
20
+ isOptionId,
21
+ isTextId
17
22
  } from './Config/Config';
18
23
  export { SettingBase } from './Config/SettingBase';
19
24
  export { SettingFlag } from './Config/SettingFlag';
package/tsconfig.esm.json CHANGED
@@ -2,6 +2,7 @@
2
2
  "extends": "./tsconfig.json",
3
3
  "compilerOptions": {
4
4
  "outDir": "./dist/esm",
5
- "module": "ES6"
5
+ "module": "nodenext",
6
+ "moduleResolution": "nodenext",
6
7
  }
7
8
  }
package/tsconfig.json CHANGED
@@ -4,9 +4,13 @@
4
4
  "noImplicitAny": true,
5
5
  "esModuleInterop": true,
6
6
  "target": "ES6",
7
- "moduleResolution": "nodenext",
8
7
  "sourceMap": true,
9
- "allowJs": true
8
+ "allowJs": true,
9
+ "forceConsistentCasingInFileNames": true,
10
+ "noImplicitOverride": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "noImplicitReturns": true,
13
+ "noPropertyAccessFromIndexSignature": true
10
14
  },
11
15
  "lib": ["ES6"],
12
16
  "include": ["./src/*.ts"],