@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.2 → 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 (188) hide show
  1. package/dist/commonjs/AFK/AFKController.js.map +1 -1
  2. package/dist/commonjs/Config/Config.js +14 -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.map +1 -1
  32. package/dist/commonjs/UI/OnScreenKeyboard.js.map +1 -1
  33. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +1 -0
  34. package/dist/commonjs/UeInstanceMessage/SendMessageController.js.map +1 -1
  35. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +1 -1
  36. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js.map +1 -1
  37. package/dist/commonjs/Util/EventEmitter.js.map +1 -1
  38. package/dist/commonjs/Util/FileUtil.js.map +1 -1
  39. package/dist/commonjs/Util/IURLSearchParams.js.map +1 -1
  40. package/dist/commonjs/Util/InputCoordTranslator.js.map +1 -1
  41. package/dist/commonjs/VideoPlayer/StreamController.js.map +1 -1
  42. package/dist/commonjs/VideoPlayer/VideoPlayer.js.map +1 -1
  43. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +60 -1
  44. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  45. package/dist/commonjs/WebXR/WebXRController.js +2 -2
  46. package/dist/commonjs/WebXR/WebXRController.js.map +1 -1
  47. package/dist/commonjs/pixelstreamingfrontend.js +5 -1
  48. package/dist/commonjs/pixelstreamingfrontend.js.map +1 -1
  49. package/dist/esm/AFK/AFKController.js +20 -16
  50. package/dist/esm/AFK/AFKController.js.map +1 -1
  51. package/dist/esm/Config/Config.js +80 -64
  52. package/dist/esm/Config/Config.js.map +1 -1
  53. package/dist/esm/Config/SettingBase.js +5 -1
  54. package/dist/esm/Config/SettingBase.js.map +1 -1
  55. package/dist/esm/Config/SettingFlag.js +6 -2
  56. package/dist/esm/Config/SettingFlag.js.map +1 -1
  57. package/dist/esm/Config/SettingNumber.js +6 -2
  58. package/dist/esm/Config/SettingNumber.js.map +1 -1
  59. package/dist/esm/Config/SettingOption.js +8 -4
  60. package/dist/esm/Config/SettingOption.js.map +1 -1
  61. package/dist/esm/Config/SettingText.js +6 -2
  62. package/dist/esm/Config/SettingText.js.map +1 -1
  63. package/dist/esm/DataChannel/DataChannelController.js +10 -6
  64. package/dist/esm/DataChannel/DataChannelController.js.map +1 -1
  65. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +9 -5
  66. package/dist/esm/DataChannel/DataChannelLatencyTestController.js.map +1 -1
  67. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +5 -1
  68. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js.map +1 -1
  69. package/dist/esm/DataChannel/DataChannelSender.js +8 -4
  70. package/dist/esm/DataChannel/DataChannelSender.js.map +1 -1
  71. package/dist/esm/DataChannel/InitialSettings.js +11 -4
  72. package/dist/esm/DataChannel/InitialSettings.js.map +1 -1
  73. package/dist/esm/DataChannel/LatencyTestResults.js +8 -4
  74. package/dist/esm/DataChannel/LatencyTestResults.js.map +1 -1
  75. package/dist/esm/FreezeFrame/FreezeFrame.js +5 -1
  76. package/dist/esm/FreezeFrame/FreezeFrame.js.map +1 -1
  77. package/dist/esm/FreezeFrame/FreezeFrameController.js +11 -7
  78. package/dist/esm/FreezeFrame/FreezeFrameController.js.map +1 -1
  79. package/dist/esm/Inputs/GamepadController.js +11 -7
  80. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  81. package/dist/esm/Inputs/GamepadTypes.js +4 -1
  82. package/dist/esm/Inputs/GamepadTypes.js.map +1 -1
  83. package/dist/esm/Inputs/IInputController.js +2 -1
  84. package/dist/esm/Inputs/InputClassesFactory.js +26 -21
  85. package/dist/esm/Inputs/InputClassesFactory.js.map +1 -1
  86. package/dist/esm/Inputs/KeyCodes.js +4 -1
  87. package/dist/esm/Inputs/KeyCodes.js.map +1 -1
  88. package/dist/esm/Inputs/KeyboardController.js +22 -18
  89. package/dist/esm/Inputs/KeyboardController.js.map +1 -1
  90. package/dist/esm/Inputs/MouseButtons.js +7 -2
  91. package/dist/esm/Inputs/MouseButtons.js.map +1 -1
  92. package/dist/esm/Inputs/MouseController.js +26 -22
  93. package/dist/esm/Inputs/MouseController.js.map +1 -1
  94. package/dist/esm/Inputs/MouseControllerHovering.js +6 -2
  95. package/dist/esm/Inputs/MouseControllerHovering.js.map +1 -1
  96. package/dist/esm/Inputs/MouseControllerLocked.js +9 -5
  97. package/dist/esm/Inputs/MouseControllerLocked.js.map +1 -1
  98. package/dist/esm/Inputs/SpecialKeyCodes.js +5 -1
  99. package/dist/esm/Inputs/SpecialKeyCodes.js.map +1 -1
  100. package/dist/esm/Inputs/TouchController.js +8 -4
  101. package/dist/esm/Inputs/TouchController.js.map +1 -1
  102. package/dist/esm/Inputs/TouchControllerFake.js +8 -4
  103. package/dist/esm/Inputs/TouchControllerFake.js.map +1 -1
  104. package/dist/esm/Inputs/XRGamepadController.js +8 -4
  105. package/dist/esm/Inputs/XRGamepadController.js.map +1 -1
  106. package/dist/esm/PeerConnectionController/AggregatedStats.js +23 -19
  107. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  108. package/dist/esm/PeerConnectionController/CandidatePairStats.js +5 -1
  109. package/dist/esm/PeerConnectionController/CandidatePairStats.js.map +1 -1
  110. package/dist/esm/PeerConnectionController/CandidateStat.js +5 -1
  111. package/dist/esm/PeerConnectionController/CandidateStat.js.map +1 -1
  112. package/dist/esm/PeerConnectionController/CodecStats.js +5 -1
  113. package/dist/esm/PeerConnectionController/CodecStats.js.map +1 -1
  114. package/dist/esm/PeerConnectionController/DataChannelStats.js +5 -1
  115. package/dist/esm/PeerConnectionController/DataChannelStats.js.map +1 -1
  116. package/dist/esm/PeerConnectionController/InboundRTPStats.js +9 -3
  117. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  118. package/dist/esm/PeerConnectionController/InboundTrackStats.js +5 -1
  119. package/dist/esm/PeerConnectionController/InboundTrackStats.js.map +1 -1
  120. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +7 -2
  121. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  122. package/dist/esm/PeerConnectionController/PeerConnectionController.js +45 -41
  123. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  124. package/dist/esm/PeerConnectionController/SessionStats.js +5 -1
  125. package/dist/esm/PeerConnectionController/SessionStats.js.map +1 -1
  126. package/dist/esm/PeerConnectionController/StreamStats.js +5 -1
  127. package/dist/esm/PeerConnectionController/StreamStats.js.map +1 -1
  128. package/dist/esm/PixelStreaming/PixelStreaming.js +119 -115
  129. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  130. package/dist/esm/UI/OnScreenKeyboard.js +5 -1
  131. package/dist/esm/UI/OnScreenKeyboard.js.map +1 -1
  132. package/dist/esm/UeInstanceMessage/ResponseController.js +8 -4
  133. package/dist/esm/UeInstanceMessage/ResponseController.js.map +1 -1
  134. package/dist/esm/UeInstanceMessage/SendMessageController.js +10 -5
  135. package/dist/esm/UeInstanceMessage/SendMessageController.js.map +1 -1
  136. package/dist/esm/UeInstanceMessage/StreamMessageController.js +11 -6
  137. package/dist/esm/UeInstanceMessage/StreamMessageController.js.map +1 -1
  138. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +5 -1
  139. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -1
  140. package/dist/esm/Util/EventEmitter.js +79 -38
  141. package/dist/esm/Util/EventEmitter.js.map +1 -1
  142. package/dist/esm/Util/FileUtil.js +16 -11
  143. package/dist/esm/Util/FileUtil.js.map +1 -1
  144. package/dist/esm/Util/IURLSearchParams.js +5 -1
  145. package/dist/esm/Util/IURLSearchParams.js.map +1 -1
  146. package/dist/esm/Util/InputCoordTranslator.js +5 -1
  147. package/dist/esm/Util/InputCoordTranslator.js.map +1 -1
  148. package/dist/esm/Util/RTCUtils.js +5 -1
  149. package/dist/esm/Util/RTCUtils.js.map +1 -1
  150. package/dist/esm/VideoPlayer/StreamController.js +10 -6
  151. package/dist/esm/VideoPlayer/StreamController.js.map +1 -1
  152. package/dist/esm/VideoPlayer/VideoPlayer.js +11 -7
  153. package/dist/esm/VideoPlayer/VideoPlayer.js.map +1 -1
  154. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +280 -217
  155. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  156. package/dist/esm/WebXR/WebXRController.js +16 -12
  157. package/dist/esm/WebXR/WebXRController.js.map +1 -1
  158. package/dist/esm/pixelstreamingfrontend.js +73 -23
  159. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  160. package/dist/types/Config/Config.d.ts +5 -0
  161. package/dist/types/DataChannel/DataChannelController.d.ts +1 -1
  162. package/dist/types/Inputs/XRGamepadController.d.ts +0 -1
  163. package/dist/types/PixelStreaming/PixelStreaming.d.ts +1 -1
  164. package/dist/types/Util/EventEmitter.d.ts +0 -1
  165. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  166. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +1 -0
  167. package/dist/types/WebXR/WebXRController.d.ts +0 -1
  168. package/dist/types/pixelstreamingfrontend.d.ts +1 -1
  169. package/package.json +8 -8
  170. package/src/Config/Config.ts +19 -4
  171. package/src/Config/SettingFlag.ts +3 -3
  172. package/src/Config/SettingNumber.ts +3 -3
  173. package/src/Config/SettingOption.ts +3 -3
  174. package/src/Config/SettingText.ts +4 -4
  175. package/src/DataChannel/DataChannelController.ts +2 -2
  176. package/src/Inputs/MouseControllerHovering.ts +2 -2
  177. package/src/Inputs/MouseControllerLocked.ts +2 -2
  178. package/src/PeerConnectionController/PeerConnectionController.ts +5 -5
  179. package/src/UeInstanceMessage/SendMessageController.ts +1 -0
  180. package/src/Util/EventEmitter.ts +40 -40
  181. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  182. package/src/WebRtcPlayer/WebRtcPlayerController.ts +82 -1
  183. package/src/WebXR/WebXRController.ts +1 -1
  184. package/src/__test__/mockRTCRtpReceiver.ts +1 -1
  185. package/src/__test__/mockWebSocket.ts +3 -3
  186. package/src/pixelstreamingfrontend.ts +6 -1
  187. package/tsconfig.esm.json +2 -1
  188. package/tsconfig.json +6 -2
@@ -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'
@@ -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"],