@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.7 → 1.0.1

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 (218) hide show
  1. package/.lintstagedrc.mjs +7 -0
  2. package/dist/{commonjs → cjs}/Config/Config.js +8 -0
  3. package/dist/cjs/Config/Config.js.map +1 -0
  4. package/dist/{commonjs → cjs}/Config/SettingBase.js +1 -3
  5. package/dist/cjs/Config/SettingBase.js.map +1 -0
  6. package/dist/{commonjs → cjs}/Config/SettingFlag.js +1 -3
  7. package/dist/cjs/Config/SettingFlag.js.map +1 -0
  8. package/dist/{commonjs → cjs}/Config/SettingNumber.js +1 -3
  9. package/dist/cjs/Config/SettingNumber.js.map +1 -0
  10. package/dist/{commonjs → cjs}/Config/SettingOption.js +2 -6
  11. package/dist/cjs/Config/SettingOption.js.map +1 -0
  12. package/dist/{commonjs → cjs}/Config/SettingText.js +1 -3
  13. package/dist/cjs/Config/SettingText.js.map +1 -0
  14. package/dist/{commonjs → cjs}/Inputs/GamepadController.js +0 -2
  15. package/dist/cjs/Inputs/GamepadController.js.map +1 -0
  16. package/dist/{commonjs → cjs}/PeerConnectionController/AggregatedStats.js +103 -45
  17. package/dist/cjs/PeerConnectionController/AggregatedStats.js.map +1 -0
  18. package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js.map +1 -1
  19. package/dist/cjs/PeerConnectionController/LatencyCalculator.js +290 -0
  20. package/dist/cjs/PeerConnectionController/LatencyCalculator.js.map +1 -0
  21. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js +21 -0
  22. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
  23. package/dist/{commonjs → cjs}/PeerConnectionController/PeerConnectionController.js +53 -19
  24. package/dist/cjs/PeerConnectionController/PeerConnectionController.js.map +1 -0
  25. package/dist/{commonjs → cjs}/PixelStreaming/PixelStreaming.js +24 -3
  26. package/dist/cjs/PixelStreaming/PixelStreaming.js.map +1 -0
  27. package/dist/{commonjs → cjs}/Util/EventEmitter.js +38 -1
  28. package/dist/cjs/Util/EventEmitter.js.map +1 -0
  29. package/dist/{commonjs → cjs}/WebRtcPlayer/WebRtcPlayerController.js +41 -5
  30. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
  31. package/dist/cjs/__test__/mockMediaStream.js +100 -0
  32. package/dist/cjs/__test__/mockMediaStream.js.map +1 -0
  33. package/dist/cjs/__test__/mockRTCPeerConnection.js +252 -0
  34. package/dist/cjs/__test__/mockRTCPeerConnection.js.map +1 -0
  35. package/dist/cjs/__test__/mockRTCRtpReceiver.js +26 -0
  36. package/dist/cjs/__test__/mockRTCRtpReceiver.js.map +1 -0
  37. package/dist/cjs/__test__/mockWebSocket.js +109 -0
  38. package/dist/cjs/__test__/mockWebSocket.js.map +1 -0
  39. package/dist/{commonjs → cjs}/pixelstreamingfrontend.js +4 -2
  40. package/dist/{commonjs → cjs}/pixelstreamingfrontend.js.map +1 -1
  41. package/dist/esm/Config/Config.js +8 -0
  42. package/dist/esm/Config/Config.js.map +1 -1
  43. package/dist/esm/Config/SettingBase.js +1 -3
  44. package/dist/esm/Config/SettingBase.js.map +1 -1
  45. package/dist/esm/Config/SettingFlag.js +1 -3
  46. package/dist/esm/Config/SettingFlag.js.map +1 -1
  47. package/dist/esm/Config/SettingNumber.js +1 -3
  48. package/dist/esm/Config/SettingNumber.js.map +1 -1
  49. package/dist/esm/Config/SettingOption.js +2 -6
  50. package/dist/esm/Config/SettingOption.js.map +1 -1
  51. package/dist/esm/Config/SettingText.js +1 -3
  52. package/dist/esm/Config/SettingText.js.map +1 -1
  53. package/dist/esm/Inputs/GamepadController.js +0 -2
  54. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  55. package/dist/esm/PeerConnectionController/AggregatedStats.js +104 -46
  56. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  57. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  58. package/dist/esm/PeerConnectionController/LatencyCalculator.js +284 -0
  59. package/dist/esm/PeerConnectionController/LatencyCalculator.js.map +1 -0
  60. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +8 -4
  61. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  62. package/dist/esm/PeerConnectionController/PeerConnectionController.js +52 -18
  63. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  64. package/dist/esm/PixelStreaming/PixelStreaming.js +25 -4
  65. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  66. package/dist/esm/Util/EventEmitter.js +33 -0
  67. package/dist/esm/Util/EventEmitter.js.map +1 -1
  68. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +42 -6
  69. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  70. package/dist/esm/__test__/mockMediaStream.js +92 -0
  71. package/dist/esm/__test__/mockMediaStream.js.map +1 -0
  72. package/dist/esm/__test__/mockRTCPeerConnection.js +242 -0
  73. package/dist/esm/__test__/mockRTCPeerConnection.js.map +1 -0
  74. package/dist/esm/__test__/mockRTCRtpReceiver.js +21 -0
  75. package/dist/esm/__test__/mockRTCRtpReceiver.js.map +1 -0
  76. package/dist/esm/__test__/mockWebSocket.js +103 -0
  77. package/dist/esm/__test__/mockWebSocket.js.map +1 -0
  78. package/dist/esm/pixelstreamingfrontend.js +2 -1
  79. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  80. package/dist/types/Config/Config.d.ts +2 -0
  81. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +18 -7
  82. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +88 -85
  83. package/dist/types/PeerConnectionController/LatencyCalculator.d.ts +87 -0
  84. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +46 -12
  85. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +17 -3
  86. package/dist/types/PixelStreaming/PixelStreaming.d.ts +17 -3
  87. package/dist/types/Util/EventEmitter.d.ts +41 -1
  88. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  89. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +4 -1
  90. package/dist/types/__test__/mockMediaStream.d.ts +49 -0
  91. package/dist/types/__test__/mockRTCPeerConnection.d.ts +134 -0
  92. package/dist/types/__test__/mockRTCRtpReceiver.d.ts +3 -0
  93. package/dist/types/__test__/mockWebSocket.d.ts +33 -0
  94. package/dist/types/pixelstreamingfrontend.d.ts +2 -1
  95. package/eslint.config.mjs +52 -0
  96. package/package.json +47 -45
  97. package/src/Config/Config.ts +30 -0
  98. package/src/Config/SettingBase.ts +1 -1
  99. package/src/Config/SettingFlag.ts +1 -1
  100. package/src/Config/SettingNumber.ts +1 -1
  101. package/src/Config/SettingOption.ts +2 -2
  102. package/src/Config/SettingText.ts +1 -1
  103. package/src/Inputs/GamepadController.ts +2 -2
  104. package/src/PeerConnectionController/AggregatedStats.ts +111 -52
  105. package/src/PeerConnectionController/InboundRTPStats.ts +88 -85
  106. package/src/PeerConnectionController/LatencyCalculator.ts +392 -0
  107. package/src/PeerConnectionController/OutBoundRTPStats.ts +46 -12
  108. package/src/PeerConnectionController/PeerConnectionController.ts +72 -19
  109. package/src/PixelStreaming/PixelStreaming.ts +34 -4
  110. package/src/Util/EventEmitter.ts +60 -0
  111. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  112. package/src/WebRtcPlayer/WebRtcPlayerController.ts +53 -7
  113. package/src/__test__/mockRTCPeerConnection.ts +1 -1
  114. package/src/pixelstreamingfrontend.ts +2 -1
  115. package/{tsconfig.json → tsconfig.base.json} +5 -3
  116. package/tsconfig.cjs.json +3 -5
  117. package/tsconfig.esm.json +3 -3
  118. package/tsconfig.jest.json +6 -6
  119. package/.eslintignore +0 -12
  120. package/.eslintrc.js +0 -20
  121. package/.prettierrc.json +0 -7
  122. package/dist/commonjs/Config/Config.js.map +0 -1
  123. package/dist/commonjs/Config/SettingBase.js.map +0 -1
  124. package/dist/commonjs/Config/SettingFlag.js.map +0 -1
  125. package/dist/commonjs/Config/SettingNumber.js.map +0 -1
  126. package/dist/commonjs/Config/SettingOption.js.map +0 -1
  127. package/dist/commonjs/Config/SettingText.js.map +0 -1
  128. package/dist/commonjs/Inputs/GamepadController.js.map +0 -1
  129. package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +0 -1
  130. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +0 -17
  131. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js.map +0 -1
  132. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +0 -1
  133. package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +0 -1
  134. package/dist/commonjs/Util/EventEmitter.js.map +0 -1
  135. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +0 -1
  136. /package/dist/{commonjs → cjs}/AFK/AFKController.js +0 -0
  137. /package/dist/{commonjs → cjs}/AFK/AFKController.js.map +0 -0
  138. /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js +0 -0
  139. /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js.map +0 -0
  140. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js +0 -0
  141. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js.map +0 -0
  142. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js +0 -0
  143. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js.map +0 -0
  144. /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js +0 -0
  145. /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js.map +0 -0
  146. /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js +0 -0
  147. /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js.map +0 -0
  148. /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js +0 -0
  149. /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js.map +0 -0
  150. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js +0 -0
  151. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js.map +0 -0
  152. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js +0 -0
  153. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js.map +0 -0
  154. /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js +0 -0
  155. /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js.map +0 -0
  156. /package/dist/{commonjs → cjs}/Inputs/IInputController.js +0 -0
  157. /package/dist/{commonjs → cjs}/Inputs/IInputController.js.map +0 -0
  158. /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js +0 -0
  159. /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js.map +0 -0
  160. /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js +0 -0
  161. /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js.map +0 -0
  162. /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js +0 -0
  163. /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js.map +0 -0
  164. /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js +0 -0
  165. /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js.map +0 -0
  166. /package/dist/{commonjs → cjs}/Inputs/MouseController.js +0 -0
  167. /package/dist/{commonjs → cjs}/Inputs/MouseController.js.map +0 -0
  168. /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js +0 -0
  169. /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js.map +0 -0
  170. /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js +0 -0
  171. /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js.map +0 -0
  172. /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js +0 -0
  173. /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js.map +0 -0
  174. /package/dist/{commonjs → cjs}/Inputs/TouchController.js +0 -0
  175. /package/dist/{commonjs → cjs}/Inputs/TouchController.js.map +0 -0
  176. /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js +0 -0
  177. /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js.map +0 -0
  178. /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js +0 -0
  179. /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js.map +0 -0
  180. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js +0 -0
  181. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js.map +0 -0
  182. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js +0 -0
  183. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js.map +0 -0
  184. /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js +0 -0
  185. /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js.map +0 -0
  186. /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js +0 -0
  187. /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js.map +0 -0
  188. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js +0 -0
  189. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js +0 -0
  190. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js.map +0 -0
  191. /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js +0 -0
  192. /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js.map +0 -0
  193. /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js +0 -0
  194. /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js.map +0 -0
  195. /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js +0 -0
  196. /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js.map +0 -0
  197. /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js +0 -0
  198. /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js.map +0 -0
  199. /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js +0 -0
  200. /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js.map +0 -0
  201. /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js +0 -0
  202. /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js.map +0 -0
  203. /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js +0 -0
  204. /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js.map +0 -0
  205. /package/dist/{commonjs → cjs}/Util/FileUtil.js +0 -0
  206. /package/dist/{commonjs → cjs}/Util/FileUtil.js.map +0 -0
  207. /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js +0 -0
  208. /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js.map +0 -0
  209. /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js +0 -0
  210. /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js.map +0 -0
  211. /package/dist/{commonjs → cjs}/Util/RTCUtils.js +0 -0
  212. /package/dist/{commonjs → cjs}/Util/RTCUtils.js.map +0 -0
  213. /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js +0 -0
  214. /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js.map +0 -0
  215. /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js +0 -0
  216. /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js.map +0 -0
  217. /package/dist/{commonjs → cjs}/WebXR/WebXRController.js +0 -0
  218. /package/dist/{commonjs → cjs}/WebXR/WebXRController.js.map +0 -0
@@ -8,6 +8,7 @@ import { WebXRController } from '../WebXR/WebXRController';
8
8
  import { MessageDirection } from '../UeInstanceMessage/StreamMessageController';
9
9
  import { DataChannelLatencyTestConfig, DataChannelLatencyTestController } from '../DataChannel/DataChannelLatencyTestController';
10
10
  import { DataChannelLatencyTestResponse } from '../DataChannel/DataChannelLatencyTestResults';
11
+ import { LatencyInfo } from '../PeerConnectionController/LatencyCalculator';
11
12
  export interface PixelStreamingOverrides {
12
13
  /** The DOM element where Pixel Streaming video and user input event handlers are attached to.
13
14
  * You can give an existing DOM element here. If not given, the library will create a new div element
@@ -109,15 +110,27 @@ export declare class PixelStreaming {
109
110
  muteCamera(): void;
110
111
  private setCameraMuted;
111
112
  /**
112
- * Emit an event on auto connecting
113
+ * Internal function to emit an event when auto connecting occurs
113
114
  */
114
115
  _onWebRtcAutoConnect(): void;
115
116
  /**
116
- * Set up functionality to happen when receiving a webRTC answer
117
+ * Internal function to emit an event for when SDP negotiation is fully finished.
117
118
  */
118
119
  _onWebRtcSdp(): void;
119
120
  /**
120
- * Emits a StreamLoading event
121
+ * Internal function to emit an SDP offer after it has been set.
122
+ */
123
+ _onWebRtcSdpOffer(offer: RTCSessionDescriptionInit): void;
124
+ /**
125
+ * Internal function to emit an SDP answer after it has been set.
126
+ */
127
+ _onWebRtcSdpAnswer(answer: RTCSessionDescriptionInit): void;
128
+ /**
129
+ * Internal function call to emit a `latencyCalculated` event.
130
+ */
131
+ _onLatencyCalculated(latencyInfo: LatencyInfo): void;
132
+ /**
133
+ * Internal function to emits a StreamLoading event
121
134
  */
122
135
  _onStreamLoading(): void;
123
136
  /**
@@ -170,6 +183,7 @@ export declare class PixelStreaming {
170
183
  */
171
184
  _onQualityControlOwnership(hasQualityOwnership: boolean): void;
172
185
  _onPlayerCount(playerCount: number): void;
186
+ _onSubscribeFailed(message: string): void;
173
187
  _setupWebRtcTCPRelayDetection(statsReceivedEvent: StatsReceivedEvent): void;
174
188
  /**
175
189
  * Request a connection latency test.
@@ -2,6 +2,7 @@ import { FlagsIds, NumericParametersIds, OptionParametersIds, TextParametersIds
2
2
  import { LatencyTestResults } from '../DataChannel/LatencyTestResults';
3
3
  import { AggregatedStats } from '../PeerConnectionController/AggregatedStats';
4
4
  import { InitialSettings } from '../DataChannel/InitialSettings';
5
+ import { LatencyInfo } from '../PeerConnectionController/LatencyCalculator';
5
6
  import { Messages } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
6
7
  import { SettingFlag } from '../Config/SettingFlag';
7
8
  import { SettingNumber } from '../Config/SettingNumber';
@@ -65,6 +66,28 @@ export declare class WebRtcSdpEvent extends Event {
65
66
  readonly type: 'webRtcSdp';
66
67
  constructor();
67
68
  }
69
+ /**
70
+ * An event that is emitted after the SDP answer is set.
71
+ */
72
+ export declare class WebRtcSdpAnswerEvent extends Event {
73
+ readonly type: 'webRtcSdpAnswer';
74
+ readonly data: {
75
+ /** The sdp answer */
76
+ sdp: RTCSessionDescriptionInit;
77
+ };
78
+ constructor(data: WebRtcSdpAnswerEvent['data']);
79
+ }
80
+ /**
81
+ * An event that is emitted after the SDP offer is set.
82
+ */
83
+ export declare class WebRtcSdpOfferEvent extends Event {
84
+ readonly type: 'webRtcSdpOffer';
85
+ readonly data: {
86
+ /** The sdp offer */
87
+ sdp: RTCSessionDescriptionInit;
88
+ };
89
+ constructor(data: WebRtcSdpOfferEvent['data']);
90
+ }
68
91
  /**
69
92
  * An event that is emitted when auto connecting.
70
93
  */
@@ -280,6 +303,16 @@ export declare class LatencyTestResultEvent extends Event {
280
303
  };
281
304
  constructor(data: LatencyTestResultEvent['data']);
282
305
  }
306
+ /**
307
+ * An event that is emitted everytime latency is calculated using the WebRTC stats API.
308
+ */
309
+ export declare class LatencyCalculatedEvent extends Event {
310
+ readonly type: 'latencyCalculated';
311
+ readonly data: {
312
+ latencyInfo: LatencyInfo;
313
+ };
314
+ constructor(data: LatencyCalculatedEvent['data']);
315
+ }
283
316
  /**
284
317
  * An event that is emitted when receiving data channel latency test response from server.
285
318
  * This event is handled by DataChannelLatencyTestController
@@ -303,6 +336,13 @@ export declare class DataChannelLatencyTestResultEvent extends Event {
303
336
  };
304
337
  constructor(data: DataChannelLatencyTestResultEvent['data']);
305
338
  }
339
+ export declare class SubscribeFailedEvent extends Event {
340
+ readonly type: 'subscribeFailed';
341
+ readonly data: {
342
+ message: string;
343
+ };
344
+ constructor(data: SubscribeFailedEvent['data']);
345
+ }
306
346
  /**
307
347
  * An event that is emitted when receiving initial settings from UE.
308
348
  */
@@ -401,7 +441,7 @@ export declare class WebRtcTCPRelayDetectedEvent extends Event {
401
441
  readonly type: 'webRtcTCPRelayDetected';
402
442
  constructor();
403
443
  }
404
- export type PixelStreamingEvent = AfkWarningActivateEvent | AfkWarningUpdateEvent | AfkWarningDeactivateEvent | AfkTimedOutEvent | VideoEncoderAvgQPEvent | WebRtcSdpEvent | WebRtcAutoConnectEvent | WebRtcConnectingEvent | WebRtcConnectedEvent | WebRtcFailedEvent | WebRtcDisconnectedEvent | DataChannelOpenEvent | DataChannelCloseEvent | DataChannelErrorEvent | VideoInitializedEvent | StreamLoadingEvent | StreamPreConnectEvent | StreamReconnectEvent | StreamPreDisconnectEvent | PlayStreamErrorEvent | PlayStreamEvent | PlayStreamRejectedEvent | LoadFreezeFrameEvent | HideFreezeFrameEvent | StatsReceivedEvent | StreamerListMessageEvent | StreamerIDChangedMessageEvent | LatencyTestResultEvent | DataChannelLatencyTestResponseEvent | DataChannelLatencyTestResultEvent | InitialSettingsEvent | SettingsChangedEvent | XrSessionStartedEvent | XrSessionEndedEvent | XrFrameEvent | PlayerCountEvent | WebRtcTCPRelayDetectedEvent;
444
+ export type PixelStreamingEvent = AfkWarningActivateEvent | AfkWarningUpdateEvent | AfkWarningDeactivateEvent | AfkTimedOutEvent | VideoEncoderAvgQPEvent | WebRtcSdpEvent | WebRtcSdpOfferEvent | WebRtcSdpAnswerEvent | WebRtcAutoConnectEvent | WebRtcConnectingEvent | WebRtcConnectedEvent | WebRtcFailedEvent | WebRtcDisconnectedEvent | DataChannelOpenEvent | DataChannelCloseEvent | DataChannelErrorEvent | VideoInitializedEvent | StreamLoadingEvent | StreamPreConnectEvent | StreamReconnectEvent | StreamPreDisconnectEvent | PlayStreamErrorEvent | PlayStreamEvent | PlayStreamRejectedEvent | LoadFreezeFrameEvent | HideFreezeFrameEvent | StatsReceivedEvent | StreamerListMessageEvent | StreamerIDChangedMessageEvent | LatencyCalculatedEvent | LatencyTestResultEvent | DataChannelLatencyTestResponseEvent | DataChannelLatencyTestResultEvent | SubscribeFailedEvent | InitialSettingsEvent | SettingsChangedEvent | XrSessionStartedEvent | XrSessionEndedEvent | XrFrameEvent | PlayerCountEvent | WebRtcTCPRelayDetectedEvent;
405
445
  export declare class PixelStreamingEventEmitter extends EventTarget {
406
446
  /**
407
447
  * Dispatch a new event.
@@ -4,7 +4,7 @@ import { Config } from '../Config/Config';
4
4
  */
5
5
  declare global {
6
6
  interface HTMLElement {
7
- mozRequestPointerLock(options: PointerLockOptions): Promise<void>;
7
+ mozRequestPointerLock(): Promise<void>;
8
8
  }
9
9
  }
10
10
  /**
@@ -1,4 +1,4 @@
1
- import { SignallingProtocol, ITransport, Messages } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
1
+ import { SignallingProtocol, ITransport, Messages, KeepaliveMonitor } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
2
2
  import { StreamController } from '../VideoPlayer/StreamController';
3
3
  import { FreezeFrameController } from '../FreezeFrame/FreezeFrameController';
4
4
  import { AFKController } from '../AFK/AFKController';
@@ -66,6 +66,7 @@ export declare class WebRtcPlayerController {
66
66
  subscribedStream: string;
67
67
  signallingUrlBuilder: () => string;
68
68
  autoJoinTimer: ReturnType<typeof setTimeout>;
69
+ keepalive: KeepaliveMonitor;
69
70
  /**
70
71
  *
71
72
  * @param config - the frontend config object
@@ -180,10 +181,12 @@ export declare class WebRtcPlayerController {
180
181
  * @param messageConfig - Config Message received from the signaling server
181
182
  */
182
183
  handleOnConfigMessage(messageConfig: Messages.config): void;
184
+ handlePingMessage(pingMessage: Messages.ping): void;
183
185
  /**
184
186
  * Handles when the signalling server gives us the list of streamer ids.
185
187
  */
186
188
  handleStreamerListMessage(messageStreamerList: Messages.streamerList): void;
189
+ handleSubscribeFailedMessage(subscribeFailedMessage: Messages.subscribeFailed): void;
187
190
  handleStreamerIDChangedMessage(streamerIDChangedMessage: Messages.streamerIdChanged): void;
188
191
  /**
189
192
  * Handle the RTC Answer from the signaling server
@@ -0,0 +1,49 @@
1
+ export declare class MockMediaStreamImpl implements MediaStream {
2
+ active: boolean;
3
+ id: string;
4
+ constructor(data?: MediaStream | MediaStreamTrack[]);
5
+ onaddtrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;
6
+ onremovetrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;
7
+ addTrack(track: MediaStreamTrack): void;
8
+ clone(): MediaStream;
9
+ getAudioTracks(): MediaStreamTrack[];
10
+ getTrackById(trackId: string): MediaStreamTrack | null;
11
+ getTracks(): MediaStreamTrack[];
12
+ getVideoTracks(): MediaStreamTrack[];
13
+ removeTrack(track: MediaStreamTrack): void;
14
+ addEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
15
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
16
+ removeEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
17
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
18
+ dispatchEvent(event: Event): boolean;
19
+ }
20
+ export declare class MockMediaStreamTrackImpl implements MediaStreamTrack {
21
+ contentHint: string;
22
+ enabled: boolean;
23
+ id: string;
24
+ kind: string;
25
+ label: string;
26
+ muted: boolean;
27
+ readyState: MediaStreamTrackState;
28
+ constructor();
29
+ onended: ((this: MediaStreamTrack, ev: Event) => any) | null;
30
+ onmute: ((this: MediaStreamTrack, ev: Event) => any) | null;
31
+ onunmute: ((this: MediaStreamTrack, ev: Event) => any) | null;
32
+ applyConstraints(constraints?: MediaTrackConstraints | undefined): Promise<void>;
33
+ clone(): MediaStreamTrack;
34
+ getCapabilities(): MediaTrackCapabilities;
35
+ getConstraints(): MediaTrackConstraints;
36
+ getSettings(): MediaTrackSettings;
37
+ stop(): void;
38
+ addEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
39
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
40
+ removeEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
41
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
42
+ dispatchEvent(event: Event): boolean;
43
+ }
44
+ export declare const mockMediaStream: () => void;
45
+ export declare const unmockMediaStream: () => void;
46
+ export declare const mockHTMLMediaElement: (options: {
47
+ ableToPlay: boolean;
48
+ readyState?: number;
49
+ }) => void;
@@ -0,0 +1,134 @@
1
+ export interface MockRTCPeerConnectionSpyFunctions {
2
+ constructorSpy: null | ((config: RTCConfiguration) => void);
3
+ closeSpy: null | (() => void);
4
+ setRemoteDescriptionSpy: null | ((description: RTCSessionDescriptionInit) => void);
5
+ setLocalDescriptionSpy: null | ((description: RTCLocalSessionDescriptionInit) => void);
6
+ createAnswerSpy: null | (() => void);
7
+ addTransceiverSpy: null | ((trackOrKind: string | MediaStreamTrack, init?: RTCRtpTransceiverInit | undefined) => void);
8
+ addIceCandidateSpy: null | ((candidate: RTCIceCandidateInit) => void);
9
+ sendDataSpy: null | ((data: ArrayBuffer) => void);
10
+ }
11
+ export interface MockRTCPeerConnectionTriggerFunctions {
12
+ triggerIceConnectionStateChange: null | ((state: RTCIceConnectionState) => void);
13
+ triggerOnTrack: null | ((data: RTCTrackEventInit) => void);
14
+ triggerOnIceCandidate: null | ((data: RTCPeerConnectionIceEventInit) => void);
15
+ triggerOnDataChannel: null | ((data: RTCDataChannelEventInit) => void);
16
+ }
17
+ export declare class MockRTCPeerConnectionImpl implements RTCPeerConnection {
18
+ canTrickleIceCandidates: boolean | null;
19
+ connectionState: RTCPeerConnectionState;
20
+ currentLocalDescription: RTCSessionDescription | null;
21
+ currentRemoteDescription: RTCSessionDescription | null;
22
+ iceConnectionState: RTCIceConnectionState;
23
+ iceGatheringState: RTCIceGatheringState;
24
+ localDescription: RTCSessionDescription | null;
25
+ pendingLocalDescription: RTCSessionDescription | null;
26
+ pendingRemoteDescription: RTCSessionDescription | null;
27
+ remoteDescription: RTCSessionDescription | null;
28
+ sctp: RTCSctpTransport | null;
29
+ signalingState: RTCSignalingState;
30
+ _dataChannels: RTCDataChannel[];
31
+ constructor(config: RTCConfiguration);
32
+ onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
33
+ ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;
34
+ onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;
35
+ onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;
36
+ oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
37
+ onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
38
+ onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;
39
+ onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
40
+ ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;
41
+ addIceCandidate(candidate?: RTCIceCandidateInit | undefined): Promise<void>;
42
+ addIceCandidate(candidate: RTCIceCandidateInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
43
+ addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender;
44
+ addTransceiver(trackOrKind: string | MediaStreamTrack, init?: RTCRtpTransceiverInit | undefined): RTCRtpTransceiver;
45
+ createAnswer(options?: RTCAnswerOptions | undefined): Promise<RTCSessionDescriptionInit>;
46
+ createAnswer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
47
+ createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit | undefined): RTCDataChannel;
48
+ createOffer(options?: RTCOfferOptions | undefined): Promise<RTCSessionDescriptionInit>;
49
+ createOffer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback, options?: RTCOfferOptions | undefined): Promise<void>;
50
+ getConfiguration(): RTCConfiguration;
51
+ getReceivers(): RTCRtpReceiver[];
52
+ getSenders(): RTCRtpSender[];
53
+ getStats(selector?: MediaStreamTrack | null | undefined): Promise<RTCStatsReport>;
54
+ getTransceivers(): RTCRtpTransceiver[];
55
+ removeTrack(sender: RTCRtpSender): void;
56
+ restartIce(): void;
57
+ setConfiguration(configuration?: RTCConfiguration | undefined): void;
58
+ setLocalDescription(description?: RTCLocalSessionDescriptionInit | undefined): Promise<void>;
59
+ setLocalDescription(description: RTCLocalSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
60
+ setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
61
+ setRemoteDescription(description: RTCSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
62
+ addEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
63
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
64
+ removeEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
65
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
66
+ dispatchEvent(event: Event): boolean;
67
+ static generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise<RTCCertificate>;
68
+ close(): void;
69
+ triggerIceConnectionStateChange(state: RTCIceConnectionState): void;
70
+ triggerOnTrack(data: RTCTrackEventInit): void;
71
+ triggerOnIceCandidate(data: RTCPeerConnectionIceEventInit): void;
72
+ triggerOnDataChannel(data: RTCDataChannelEventInit): void;
73
+ }
74
+ export declare class MockRTCIceCandidateImpl implements RTCIceCandidate {
75
+ address: string | null;
76
+ candidate: string;
77
+ component: RTCIceComponent | null;
78
+ foundation: string | null;
79
+ port: number | null;
80
+ priority: number | null;
81
+ protocol: RTCIceProtocol | null;
82
+ relatedAddress: string | null;
83
+ relatedPort: number | null;
84
+ sdpMLineIndex: number | null;
85
+ sdpMid: string | null;
86
+ tcpType: RTCIceTcpCandidateType | null;
87
+ type: RTCIceCandidateType | null;
88
+ usernameFragment: string | null;
89
+ constructor(options?: RTCIceCandidateInit);
90
+ toJSON(): RTCIceCandidateInit;
91
+ }
92
+ export declare class MockRTCDataChannelImpl implements RTCDataChannel {
93
+ binaryType: BinaryType;
94
+ bufferedAmount: number;
95
+ bufferedAmountLowThreshold: number;
96
+ id: number | null;
97
+ label: string;
98
+ maxPacketLifeTime: number | null;
99
+ maxRetransmits: number | null;
100
+ negotiated: boolean;
101
+ ordered: boolean;
102
+ protocol: string;
103
+ readyState: RTCDataChannelState;
104
+ constructor();
105
+ onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;
106
+ onclose: ((this: RTCDataChannel, ev: Event) => any) | null;
107
+ onclosing: ((this: RTCDataChannel, ev: Event) => any) | null;
108
+ onerror: ((this: RTCDataChannel, ev: Event) => any) | null;
109
+ onmessage: ((this: RTCDataChannel, ev: MessageEvent<any>) => any) | null;
110
+ onopen: ((this: RTCDataChannel, ev: Event) => any) | null;
111
+ close(): void;
112
+ send(data: string): void;
113
+ send(data: Blob): void;
114
+ send(data: ArrayBuffer): void;
115
+ send(data: ArrayBufferView): void;
116
+ addEventListener<K extends keyof RTCDataChannelEventMap>(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
117
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
118
+ removeEventListener<K extends keyof RTCDataChannelEventMap>(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
119
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
120
+ dispatchEvent(event: Event): boolean;
121
+ }
122
+ export declare class MockRTCDataChannelEventImpl extends Event implements RTCDataChannelEvent {
123
+ channel: RTCDataChannel;
124
+ constructor(name: string, data: RTCDataChannelEventInit);
125
+ }
126
+ export declare class MockRTCTrackEventImpl extends Event implements RTCTrackEvent {
127
+ receiver: RTCRtpReceiver;
128
+ streams: readonly MediaStream[];
129
+ track: MediaStreamTrack;
130
+ transceiver: RTCRtpTransceiver;
131
+ constructor(name: string, data: RTCTrackEventInit);
132
+ }
133
+ export declare const mockRTCPeerConnection: () => [MockRTCPeerConnectionSpyFunctions, MockRTCPeerConnectionTriggerFunctions];
134
+ export declare const unmockRTCPeerConnection: () => void;
@@ -0,0 +1,3 @@
1
+ export declare const mockRTCRtpReceiverImpl: typeof global.RTCRtpReceiver;
2
+ export declare const mockRTCRtpReceiver: () => void;
3
+ export declare const unmockRTCRtpReceiver: () => void;
@@ -0,0 +1,33 @@
1
+ import { BaseMessage } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
2
+ export interface MockWebSocketSpyFunctions {
3
+ constructorSpy: null | ((url: string) => void);
4
+ openSpy: null | ((event: Event) => void);
5
+ errorSpy: null | ((event: Event) => void);
6
+ closeSpy: null | ((event: CloseEvent) => void);
7
+ messageSpy: null | ((event: MessageEvent) => void);
8
+ messageBinarySpy: null | ((event: MessageEvent) => void);
9
+ sendSpy: null | ((data: string | Blob | ArrayBufferView | ArrayBufferLike) => void);
10
+ }
11
+ export interface MockWebSocketTriggerFunctions {
12
+ triggerOnOpen: null | (() => void);
13
+ triggerOnError: null | (() => void);
14
+ triggerOnClose: null | ((closeReason?: CloseEventInit) => void);
15
+ triggerOnMessage: null | ((message?: BaseMessage) => void);
16
+ triggerOnMessageBinary: null | ((message?: Blob) => void);
17
+ triggerRemoteClose: null | ((code?: number, reason?: string) => void);
18
+ }
19
+ export declare class MockWebSocketImpl extends WebSocket {
20
+ _readyState: number;
21
+ constructor(url: string | URL, protocols?: string | string[]);
22
+ get readyState(): number;
23
+ close(code?: number | undefined, reason?: string | undefined): void;
24
+ send(data: string | Blob | ArrayBufferView | ArrayBufferLike): void;
25
+ triggerOnOpen(): void;
26
+ triggerOnError(): void;
27
+ triggerOnClose(closeReason?: CloseEventInit): void;
28
+ triggerRemoteClose(code?: number, reason?: string): void;
29
+ triggerOnMessage(message: BaseMessage): void;
30
+ triggerOnMessageBinary(message?: Blob): void;
31
+ }
32
+ export declare const mockWebSocket: () => [MockWebSocketSpyFunctions, MockWebSocketTriggerFunctions];
33
+ export declare const unmockWebSocket: () => void;
@@ -17,7 +17,8 @@ export { CandidatePairStats } from './PeerConnectionController/CandidatePairStat
17
17
  export { CandidateStat } from './PeerConnectionController/CandidateStat';
18
18
  export { DataChannelStats } from './PeerConnectionController/DataChannelStats';
19
19
  export { InboundAudioStats, InboundVideoStats } from './PeerConnectionController/InboundRTPStats';
20
- export { OutBoundVideoStats } from './PeerConnectionController/OutBoundRTPStats';
20
+ export { OutboundRTPStats, RemoteOutboundRTPStats } from './PeerConnectionController/OutBoundRTPStats';
21
+ export * from './PeerConnectionController/LatencyCalculator';
21
22
  export * from './DataChannel/DataChannelLatencyTestResults';
22
23
  export * from './Util/EventEmitter';
23
24
  export * from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
@@ -0,0 +1,52 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+ import eslint from '@eslint/js';
3
+ import tseslint from 'typescript-eslint';
4
+
5
+ export default tseslint.config(
6
+ {
7
+ ignores: ["src/__test__/**/*.ts", "**/*.test.ts"],
8
+ },
9
+ eslint.configs.recommended,
10
+ tseslint.configs.recommendedTypeCheckedOnly,
11
+ {
12
+ languageOptions: {
13
+ parser: tseslint.parser,
14
+ parserOptions: {
15
+ project: 'tsconfig.base.json',
16
+ },
17
+ },
18
+ files: ["src/**/*.ts"],
19
+ rules: {
20
+ // TODO: when updating eslint a lot of issues suddently popped up
21
+ // these ignores should be turned off slowly and new issues should
22
+ // be addressed
23
+ "@typescript-eslint/no-explicit-any": "off",
24
+ "@typescript-eslint/no-unsafe-member-access": "off",
25
+ "@typescript-eslint/no-unsafe-call": "off",
26
+ "@typescript-eslint/no-unsafe-assignment": "off",
27
+ "@typescript-eslint/no-unsafe-argument": "off",
28
+ "@typescript-eslint/no-unsafe-return": "off",
29
+ "@typescript-eslint/no-floating-promises": "off",
30
+ "@typescript-eslint/restrict-plus-operands": "off",
31
+ "@typescript-eslint/unbound-method": "off",
32
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
33
+ "@typescript-eslint/no-redundant-type-constituents": "off",
34
+ "@typescript-eslint/restrict-template-expressions": "off",
35
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
36
+ "@typescript-eslint/no-array-delete": "off",
37
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
38
+ "@typescript-eslint/require-await": "off",
39
+ "@typescript-eslint/no-base-to-string": "off",
40
+ "no-unused-vars": "off",
41
+ "@typescript-eslint/no-unused-vars": [
42
+ "error",
43
+ {
44
+ "argsIgnorePattern": "^_",
45
+ "varsIgnorePattern": "^_",
46
+ "caughtErrorsIgnorePattern": "^_"
47
+ }
48
+ ]
49
+ }
50
+ }
51
+ );
52
+
package/package.json CHANGED
@@ -1,45 +1,47 @@
1
- {
2
- "name": "@epicgames-ps/lib-pixelstreamingfrontend-ue5.5",
3
- "version": "0.4.7",
4
- "description": "Frontend library for Unreal Engine 5.5 Pixel Streaming",
5
- "main": "dist/commonjs/pixelstreamingfrontend.js",
6
- "module": "dist/esm/pixelstreamingfrontend.js",
7
- "types": "dist/types/pixelstreamingfrontend.d.ts",
8
- "sideEffects": false,
9
- "scripts": {
10
- "compile": "tsc --project tsconfig.esm.json && tsc --project tsconfig.cjs.json",
11
- "build": "npm run compile",
12
- "build-all": "cd ../../Common && npm install && npm run build && cd ../Frontend/library && npm install && npm run build",
13
- "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
14
- "test": "jest --detectOpenHandles --coverage=true",
15
- "spellcheck": "cspell \"{README.md,.github/*.md,src/**/*.ts}\""
16
- },
17
- "devDependencies": {
18
- "@types/jest": "^29.5.14",
19
- "@typescript-eslint/eslint-plugin": "^6.21.0",
20
- "cspell": "^4.1.0",
21
- "eslint": "^8.11.0",
22
- "eslint-config-prettier": "^9.1.0",
23
- "eslint-plugin-prettier": "^5.2.1",
24
- "jest": "^29.7.0",
25
- "jest-environment-jsdom": "^29.7.0",
26
- "prettier": "3.3.3",
27
- "ts-jest": "^29.2.5",
28
- "typedoc": "^0.27.4",
29
- "typescript": "^5.0.0"
30
- },
31
- "dependencies": {
32
- "@epicgames-ps/lib-pixelstreamingcommon-ue5.5": "^0.1.6",
33
- "@types/webxr": "^0.5.1",
34
- "sdp": "^3.1.0"
35
- },
36
- "repository": {
37
- "type": "git",
38
- "url": "https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git"
39
- },
40
- "author": "Epic Games",
41
- "license": "MIT",
42
- "publishConfig": {
43
- "access": "public"
44
- }
45
- }
1
+ {
2
+ "name": "@epicgames-ps/lib-pixelstreamingfrontend-ue5.5",
3
+ "version": "1.0.1",
4
+ "description": "Frontend library for Unreal Engine 5.5 Pixel Streaming",
5
+ "main": "dist/cjs/pixelstreamingfrontend.js",
6
+ "module": "dist/esm/pixelstreamingfrontend.js",
7
+ "types": "dist/types/pixelstreamingfrontend.d.ts",
8
+ "sideEffects": false,
9
+ "scripts": {
10
+ "clean": "rimraf ./dist",
11
+ "build:cjs": "tsc --project tsconfig.cjs.json",
12
+ "build:esm": "tsc --project tsconfig.esm.json",
13
+ "build": "npm run build:cjs && npm run build:esm",
14
+ "rebuild": "npm run clean && npm run build",
15
+ "watch": "nodemon -V -d 3 --watch src --watch ../../Common/dist -e \"ts,js,mjs,cjs,json\" --exec \"npm run build:cjs\"",
16
+ "lint": "eslint src",
17
+ "test": "jest --detectOpenHandles --coverage=true",
18
+ "spellcheck": "cspell \"{README.md,.github/*.md,src/**/*.ts}\""
19
+ },
20
+ "devDependencies": {
21
+ "@eslint/js": "^9.20.0",
22
+ "@types/jest": "^29.5.14",
23
+ "@types/webxr": "^0.5.21",
24
+ "cspell": "^8.17.3",
25
+ "eslint": "^9.20.0",
26
+ "jest": "^29.7.0",
27
+ "jest-environment-jsdom": "^29.7.0",
28
+ "nodemon": "^3.1.9",
29
+ "rimraf": "^6.0.1",
30
+ "ts-jest": "^29.2.5",
31
+ "typescript": "^5.7.3",
32
+ "typescript-eslint": "^8.24.0"
33
+ },
34
+ "dependencies": {
35
+ "@epicgames-ps/lib-pixelstreamingcommon-ue5.5": "^0.2.8",
36
+ "sdp": "^3.2.0"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git"
41
+ },
42
+ "author": "Epic Games",
43
+ "license": "MIT",
44
+ "publishConfig": {
45
+ "access": "public"
46
+ }
47
+ }
@@ -33,6 +33,7 @@ export class Flags {
33
33
  static XRControllerInput = 'XRControllerInput' as const;
34
34
  static WaitForStreamer = 'WaitForStreamer' as const;
35
35
  static HideUI = 'HideUI' as const;
36
+ static EnableCaptureTimeExt = 'EnableCaptureTimeExt' as const;
36
37
  }
37
38
 
38
39
  export type FlagsKeys = Exclude<keyof typeof Flags, 'prototype'>;
@@ -59,6 +60,7 @@ export class NumericParameters {
59
60
  static WebRTCMaxBitrate = 'WebRTCMaxBitrate' as const;
60
61
  static MaxReconnectAttempts = 'MaxReconnectAttempts' as const;
61
62
  static StreamerAutoJoinInterval = 'StreamerAutoJoinInterval' as const;
63
+ static KeepaliveDelay = 'KeepaliveDelay' as const;
62
64
  }
63
65
 
64
66
  export type NumericParametersKeys = Exclude<keyof typeof NumericParameters, 'prototype'>;
@@ -563,6 +565,19 @@ export class Config {
563
565
  )
564
566
  );
565
567
 
568
+ this.flags.set(
569
+ Flags.EnableCaptureTimeExt,
570
+ new SettingFlag(
571
+ Flags.EnableCaptureTimeExt,
572
+ 'Enable abs-capture-time',
573
+ 'Enables the abs-capture-time RTP header extension',
574
+ settings && Object.prototype.hasOwnProperty.call(settings, Flags.EnableCaptureTimeExt)
575
+ ? settings[Flags.EnableCaptureTimeExt]
576
+ : true,
577
+ useUrlParams
578
+ )
579
+ );
580
+
566
581
  /**
567
582
  * Numeric parameters
568
583
  */
@@ -761,6 +776,21 @@ export class Config {
761
776
  useUrlParams
762
777
  )
763
778
  );
779
+
780
+ this.numericParameters.set(
781
+ NumericParameters.KeepaliveDelay,
782
+ new SettingNumber(
783
+ NumericParameters.KeepaliveDelay,
784
+ 'Connection Keepalive delay',
785
+ 'Delay between keepalive pings to the signalling server.',
786
+ 0 /*min*/,
787
+ 900000 /*max*/,
788
+ settings && Object.prototype.hasOwnProperty.call(settings, NumericParameters.KeepaliveDelay)
789
+ ? settings[NumericParameters.KeepaliveDelay]
790
+ : 30000 /*value*/,
791
+ useUrlParams
792
+ )
793
+ );
764
794
  }
765
795
 
766
796
  /**
@@ -18,7 +18,7 @@ export class SettingBase {
18
18
  label: string,
19
19
  description: string,
20
20
  defaultSettingValue: unknown,
21
- // eslint-disable-next-line @typescript-eslint/no-empty-function
21
+
22
22
  defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
23
23
  /* Do nothing, to be overridden. */
24
24
  }
@@ -16,7 +16,7 @@ export class SettingFlag<CustomIds extends string = FlagsIds> extends SettingBas
16
16
  description: string,
17
17
  defaultFlagValue: boolean,
18
18
  useUrlParams: boolean,
19
- // eslint-disable-next-line @typescript-eslint/no-empty-function
19
+
20
20
  defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
21
21
  /* Do nothing, to be overridden. */
22
22
  }
@@ -21,7 +21,7 @@ export class SettingNumber<CustomIds extends string = NumericParametersIds> exte
21
21
  max: number | null,
22
22
  defaultNumber: number,
23
23
  useUrlParams: boolean,
24
- // eslint-disable-next-line @typescript-eslint/no-empty-function
24
+
25
25
  defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
26
26
  /* Do nothing, to be overridden. */
27
27
  }