@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.1.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.prettierrc.json +1 -0
  3. package/dist/commonjs/AFK/AFKController.js +110 -0
  4. package/dist/commonjs/AFK/AFKController.js.map +1 -0
  5. package/dist/commonjs/Config/Config.js +560 -0
  6. package/dist/commonjs/Config/Config.js.map +1 -0
  7. package/dist/commonjs/Config/SettingBase.js +99 -0
  8. package/dist/commonjs/Config/SettingBase.js.map +1 -0
  9. package/dist/commonjs/Config/SettingFlag.js +50 -0
  10. package/dist/commonjs/Config/SettingFlag.js.map +1 -0
  11. package/dist/commonjs/Config/SettingNumber.js +84 -0
  12. package/dist/commonjs/Config/SettingNumber.js.map +1 -0
  13. package/dist/commonjs/Config/SettingOption.js +85 -0
  14. package/dist/commonjs/Config/SettingOption.js.map +1 -0
  15. package/dist/commonjs/Config/SettingText.js +43 -0
  16. package/dist/commonjs/Config/SettingText.js.map +1 -0
  17. package/dist/commonjs/DataChannel/DataChannelController.js +107 -0
  18. package/dist/commonjs/DataChannel/DataChannelController.js.map +1 -0
  19. package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +95 -0
  20. package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js.map +1 -0
  21. package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +19 -0
  22. package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js.map +1 -0
  23. package/dist/commonjs/DataChannel/DataChannelSender.js +44 -0
  24. package/dist/commonjs/DataChannel/DataChannelSender.js.map +1 -0
  25. package/dist/commonjs/DataChannel/InitialSettings.js +42 -0
  26. package/dist/commonjs/DataChannel/InitialSettings.js.map +1 -0
  27. package/dist/commonjs/DataChannel/LatencyTestResults.js +61 -0
  28. package/dist/commonjs/DataChannel/LatencyTestResults.js.map +1 -0
  29. package/dist/commonjs/FreezeFrame/FreezeFrame.js +94 -0
  30. package/dist/commonjs/FreezeFrame/FreezeFrame.js.map +1 -0
  31. package/dist/commonjs/FreezeFrame/FreezeFrameController.js +96 -0
  32. package/dist/commonjs/FreezeFrame/FreezeFrameController.js.map +1 -0
  33. package/dist/commonjs/Inputs/GamepadController.js +189 -0
  34. package/dist/commonjs/Inputs/GamepadController.js.map +1 -0
  35. package/dist/commonjs/Inputs/GamepadTypes.js +22 -0
  36. package/dist/commonjs/Inputs/GamepadTypes.js.map +1 -0
  37. package/dist/commonjs/Inputs/IInputController.js +3 -0
  38. package/dist/commonjs/Inputs/IInputController.js.map +1 -0
  39. package/dist/commonjs/Inputs/InputClassesFactory.js +97 -0
  40. package/dist/commonjs/Inputs/InputClassesFactory.js.map +1 -0
  41. package/dist/commonjs/Inputs/KeyCodes.js +113 -0
  42. package/dist/commonjs/Inputs/KeyCodes.js.map +1 -0
  43. package/dist/commonjs/Inputs/KeyboardController.js +138 -0
  44. package/dist/commonjs/Inputs/KeyboardController.js.map +1 -0
  45. package/dist/commonjs/Inputs/MouseButtons.js +29 -0
  46. package/dist/commonjs/Inputs/MouseButtons.js.map +1 -0
  47. package/dist/commonjs/Inputs/MouseController.js +98 -0
  48. package/dist/commonjs/Inputs/MouseController.js.map +1 -0
  49. package/dist/commonjs/Inputs/MouseControllerHovering.js +94 -0
  50. package/dist/commonjs/Inputs/MouseControllerHovering.js.map +1 -0
  51. package/dist/commonjs/Inputs/MouseControllerLocked.js +154 -0
  52. package/dist/commonjs/Inputs/MouseControllerLocked.js.map +1 -0
  53. package/dist/commonjs/Inputs/SpecialKeyCodes.js +20 -0
  54. package/dist/commonjs/Inputs/SpecialKeyCodes.js.map +1 -0
  55. package/dist/commonjs/Inputs/TouchController.js +124 -0
  56. package/dist/commonjs/Inputs/TouchController.js.map +1 -0
  57. package/dist/commonjs/Inputs/TouchControllerFake.js +92 -0
  58. package/dist/commonjs/Inputs/TouchControllerFake.js.map +1 -0
  59. package/dist/commonjs/Inputs/XRGamepadController.js +125 -0
  60. package/dist/commonjs/Inputs/XRGamepadController.js.map +1 -0
  61. package/dist/commonjs/PeerConnectionController/AggregatedStats.js +253 -0
  62. package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +1 -0
  63. package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +11 -0
  64. package/dist/commonjs/PeerConnectionController/CandidatePairStats.js.map +1 -0
  65. package/dist/commonjs/PeerConnectionController/CandidateStat.js +11 -0
  66. package/dist/commonjs/PeerConnectionController/CandidateStat.js.map +1 -0
  67. package/dist/commonjs/PeerConnectionController/CodecStats.js +11 -0
  68. package/dist/commonjs/PeerConnectionController/CodecStats.js.map +1 -0
  69. package/dist/commonjs/PeerConnectionController/DataChannelStats.js +11 -0
  70. package/dist/commonjs/PeerConnectionController/DataChannelStats.js.map +1 -0
  71. package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +23 -0
  72. package/dist/commonjs/PeerConnectionController/InboundRTPStats.js.map +1 -0
  73. package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +11 -0
  74. package/dist/commonjs/PeerConnectionController/InboundTrackStats.js.map +1 -0
  75. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +17 -0
  76. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
  77. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +585 -0
  78. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +1 -0
  79. package/dist/commonjs/PeerConnectionController/SessionStats.js +11 -0
  80. package/dist/commonjs/PeerConnectionController/SessionStats.js.map +1 -0
  81. package/dist/commonjs/PeerConnectionController/StreamStats.js +11 -0
  82. package/dist/commonjs/PeerConnectionController/StreamStats.js.map +1 -0
  83. package/dist/commonjs/PixelStreaming/PixelStreaming.js +608 -0
  84. package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +1 -0
  85. package/dist/commonjs/UI/OnScreenKeyboard.js +83 -0
  86. package/dist/commonjs/UI/OnScreenKeyboard.js.map +1 -0
  87. package/dist/commonjs/UeInstanceMessage/ResponseController.js +39 -0
  88. package/dist/commonjs/UeInstanceMessage/ResponseController.js.map +1 -0
  89. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +121 -0
  90. package/dist/commonjs/UeInstanceMessage/SendMessageController.js.map +1 -0
  91. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +211 -0
  92. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js.map +1 -0
  93. package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +50 -0
  94. package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -0
  95. package/dist/commonjs/Util/EventEmitter.js +387 -0
  96. package/dist/commonjs/Util/EventEmitter.js.map +1 -0
  97. package/dist/commonjs/Util/FileUtil.js +109 -0
  98. package/dist/commonjs/Util/FileUtil.js.map +1 -0
  99. package/dist/commonjs/Util/IURLSearchParams.js +26 -0
  100. package/dist/commonjs/Util/IURLSearchParams.js.map +1 -0
  101. package/dist/commonjs/Util/InputCoordTranslator.js +50 -0
  102. package/dist/commonjs/Util/InputCoordTranslator.js.map +1 -0
  103. package/dist/commonjs/Util/RTCUtils.js +41 -0
  104. package/dist/commonjs/Util/RTCUtils.js.map +1 -0
  105. package/dist/commonjs/VideoPlayer/StreamController.js +68 -0
  106. package/dist/commonjs/VideoPlayer/StreamController.js.map +1 -0
  107. package/dist/commonjs/VideoPlayer/VideoPlayer.js +178 -0
  108. package/dist/commonjs/VideoPlayer/VideoPlayer.js.map +1 -0
  109. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1224 -0
  110. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
  111. package/dist/commonjs/WebXR/WebXRController.js +361 -0
  112. package/dist/commonjs/WebXR/WebXRController.js.map +1 -0
  113. package/dist/commonjs/pixelstreamingfrontend.js +71 -0
  114. package/dist/commonjs/pixelstreamingfrontend.js.map +1 -0
  115. package/dist/esm/AFK/AFKController.js +106 -0
  116. package/dist/esm/AFK/AFKController.js.map +1 -0
  117. package/dist/esm/Config/Config.js +552 -0
  118. package/dist/esm/Config/Config.js.map +1 -0
  119. package/dist/esm/Config/SettingBase.js +95 -0
  120. package/dist/esm/Config/SettingBase.js.map +1 -0
  121. package/dist/esm/Config/SettingFlag.js +46 -0
  122. package/dist/esm/Config/SettingFlag.js.map +1 -0
  123. package/dist/esm/Config/SettingNumber.js +80 -0
  124. package/dist/esm/Config/SettingNumber.js.map +1 -0
  125. package/dist/esm/Config/SettingOption.js +81 -0
  126. package/dist/esm/Config/SettingOption.js.map +1 -0
  127. package/dist/esm/Config/SettingText.js +39 -0
  128. package/dist/esm/Config/SettingText.js.map +1 -0
  129. package/dist/esm/DataChannel/DataChannelController.js +103 -0
  130. package/dist/esm/DataChannel/DataChannelController.js.map +1 -0
  131. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +91 -0
  132. package/dist/esm/DataChannel/DataChannelLatencyTestController.js.map +1 -0
  133. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +15 -0
  134. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js.map +1 -0
  135. package/dist/esm/DataChannel/DataChannelSender.js +40 -0
  136. package/dist/esm/DataChannel/DataChannelSender.js.map +1 -0
  137. package/dist/esm/DataChannel/InitialSettings.js +35 -0
  138. package/dist/esm/DataChannel/InitialSettings.js.map +1 -0
  139. package/dist/esm/DataChannel/LatencyTestResults.js +57 -0
  140. package/dist/esm/DataChannel/LatencyTestResults.js.map +1 -0
  141. package/dist/esm/FreezeFrame/FreezeFrame.js +90 -0
  142. package/dist/esm/FreezeFrame/FreezeFrame.js.map +1 -0
  143. package/dist/esm/FreezeFrame/FreezeFrameController.js +92 -0
  144. package/dist/esm/FreezeFrame/FreezeFrameController.js.map +1 -0
  145. package/dist/esm/Inputs/GamepadController.js +185 -0
  146. package/dist/esm/Inputs/GamepadController.js.map +1 -0
  147. package/dist/esm/Inputs/GamepadTypes.js +18 -0
  148. package/dist/esm/Inputs/GamepadTypes.js.map +1 -0
  149. package/dist/esm/Inputs/IInputController.js +2 -0
  150. package/dist/esm/Inputs/IInputController.js.map +1 -0
  151. package/dist/esm/Inputs/InputClassesFactory.js +92 -0
  152. package/dist/esm/Inputs/InputClassesFactory.js.map +1 -0
  153. package/dist/esm/Inputs/KeyCodes.js +110 -0
  154. package/dist/esm/Inputs/KeyCodes.js.map +1 -0
  155. package/dist/esm/Inputs/KeyboardController.js +134 -0
  156. package/dist/esm/Inputs/KeyboardController.js.map +1 -0
  157. package/dist/esm/Inputs/MouseButtons.js +24 -0
  158. package/dist/esm/Inputs/MouseButtons.js.map +1 -0
  159. package/dist/esm/Inputs/MouseController.js +94 -0
  160. package/dist/esm/Inputs/MouseController.js.map +1 -0
  161. package/dist/esm/Inputs/MouseControllerHovering.js +90 -0
  162. package/dist/esm/Inputs/MouseControllerHovering.js.map +1 -0
  163. package/dist/esm/Inputs/MouseControllerLocked.js +150 -0
  164. package/dist/esm/Inputs/MouseControllerLocked.js.map +1 -0
  165. package/dist/esm/Inputs/SpecialKeyCodes.js +16 -0
  166. package/dist/esm/Inputs/SpecialKeyCodes.js.map +1 -0
  167. package/dist/esm/Inputs/TouchController.js +120 -0
  168. package/dist/esm/Inputs/TouchController.js.map +1 -0
  169. package/dist/esm/Inputs/TouchControllerFake.js +88 -0
  170. package/dist/esm/Inputs/TouchControllerFake.js.map +1 -0
  171. package/dist/esm/Inputs/XRGamepadController.js +121 -0
  172. package/dist/esm/Inputs/XRGamepadController.js.map +1 -0
  173. package/dist/esm/PeerConnectionController/AggregatedStats.js +249 -0
  174. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -0
  175. package/dist/esm/PeerConnectionController/CandidatePairStats.js +7 -0
  176. package/dist/esm/PeerConnectionController/CandidatePairStats.js.map +1 -0
  177. package/dist/esm/PeerConnectionController/CandidateStat.js +7 -0
  178. package/dist/esm/PeerConnectionController/CandidateStat.js.map +1 -0
  179. package/dist/esm/PeerConnectionController/CodecStats.js +7 -0
  180. package/dist/esm/PeerConnectionController/CodecStats.js.map +1 -0
  181. package/dist/esm/PeerConnectionController/DataChannelStats.js +7 -0
  182. package/dist/esm/PeerConnectionController/DataChannelStats.js.map +1 -0
  183. package/dist/esm/PeerConnectionController/InboundRTPStats.js +17 -0
  184. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -0
  185. package/dist/esm/PeerConnectionController/InboundTrackStats.js +7 -0
  186. package/dist/esm/PeerConnectionController/InboundTrackStats.js.map +1 -0
  187. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +12 -0
  188. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
  189. package/dist/esm/PeerConnectionController/PeerConnectionController.js +581 -0
  190. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -0
  191. package/dist/esm/PeerConnectionController/SessionStats.js +7 -0
  192. package/dist/esm/PeerConnectionController/SessionStats.js.map +1 -0
  193. package/dist/esm/PeerConnectionController/StreamStats.js +7 -0
  194. package/dist/esm/PeerConnectionController/StreamStats.js.map +1 -0
  195. package/dist/esm/PixelStreaming/PixelStreaming.js +604 -0
  196. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -0
  197. package/dist/esm/UI/OnScreenKeyboard.js +79 -0
  198. package/dist/esm/UI/OnScreenKeyboard.js.map +1 -0
  199. package/dist/esm/UeInstanceMessage/ResponseController.js +35 -0
  200. package/dist/esm/UeInstanceMessage/ResponseController.js.map +1 -0
  201. package/dist/esm/UeInstanceMessage/SendMessageController.js +117 -0
  202. package/dist/esm/UeInstanceMessage/SendMessageController.js.map +1 -0
  203. package/dist/esm/UeInstanceMessage/StreamMessageController.js +206 -0
  204. package/dist/esm/UeInstanceMessage/StreamMessageController.js.map +1 -0
  205. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +46 -0
  206. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -0
  207. package/dist/esm/Util/EventEmitter.js +346 -0
  208. package/dist/esm/Util/EventEmitter.js.map +1 -0
  209. package/dist/esm/Util/FileUtil.js +104 -0
  210. package/dist/esm/Util/FileUtil.js.map +1 -0
  211. package/dist/esm/Util/IURLSearchParams.js +22 -0
  212. package/dist/esm/Util/IURLSearchParams.js.map +1 -0
  213. package/dist/esm/Util/InputCoordTranslator.js +46 -0
  214. package/dist/esm/Util/InputCoordTranslator.js.map +1 -0
  215. package/dist/esm/Util/RTCUtils.js +37 -0
  216. package/dist/esm/Util/RTCUtils.js.map +1 -0
  217. package/dist/esm/VideoPlayer/StreamController.js +64 -0
  218. package/dist/esm/VideoPlayer/StreamController.js.map +1 -0
  219. package/dist/esm/VideoPlayer/VideoPlayer.js +174 -0
  220. package/dist/esm/VideoPlayer/VideoPlayer.js.map +1 -0
  221. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1220 -0
  222. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
  223. package/dist/esm/WebXR/WebXRController.js +357 -0
  224. package/dist/esm/WebXR/WebXRController.js.map +1 -0
  225. package/dist/esm/pixelstreamingfrontend.js +25 -0
  226. package/dist/esm/pixelstreamingfrontend.js.map +1 -0
  227. package/{types → dist/types}/AFK/AFKController.d.ts +38 -39
  228. package/{types → dist/types}/Config/Config.d.ts +220 -219
  229. package/{types → dist/types}/Config/SettingBase.d.ts +43 -30
  230. package/{types → dist/types}/Config/SettingFlag.d.ts +24 -33
  231. package/{types → dist/types}/Config/SettingNumber.d.ts +41 -45
  232. package/{types → dist/types}/Config/SettingOption.d.ts +41 -43
  233. package/{types → dist/types}/Config/SettingText.d.ts +21 -29
  234. package/{types → dist/types}/DataChannel/DataChannelController.d.ts +59 -59
  235. package/{types → dist/types}/DataChannel/DataChannelLatencyTestController.d.ts +25 -26
  236. package/{types → dist/types}/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
  237. package/{types → dist/types}/DataChannel/DataChannelSender.d.ts +21 -21
  238. package/{types → dist/types}/DataChannel/InitialSettings.d.ts +44 -44
  239. package/{types → dist/types}/DataChannel/LatencyTestResults.d.ts +31 -31
  240. package/{types → dist/types}/FreezeFrame/FreezeFrame.d.ts +36 -36
  241. package/{types → dist/types}/FreezeFrame/FreezeFrameController.d.ts +37 -37
  242. package/dist/types/Inputs/GamepadController.d.ts +61 -0
  243. package/dist/types/Inputs/GamepadTypes.d.ts +15 -0
  244. package/dist/types/Inputs/IInputController.d.ts +16 -0
  245. package/{types → dist/types}/Inputs/InputClassesFactory.d.ts +53 -54
  246. package/dist/types/Inputs/KeyCodes.d.ts +5 -0
  247. package/dist/types/Inputs/KeyboardController.d.ts +34 -0
  248. package/{types → dist/types}/Inputs/MouseButtons.d.ts +22 -22
  249. package/dist/types/Inputs/MouseController.d.ts +40 -0
  250. package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -0
  251. package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -0
  252. package/{types → dist/types}/Inputs/SpecialKeyCodes.d.ts +14 -14
  253. package/dist/types/Inputs/TouchController.d.ts +28 -0
  254. package/dist/types/Inputs/TouchControllerFake.d.ts +29 -0
  255. package/{types → dist/types}/Inputs/XRGamepadController.d.ts +15 -22
  256. package/{types → dist/types}/PeerConnectionController/AggregatedStats.d.ts +82 -84
  257. package/{types → dist/types}/PeerConnectionController/CandidatePairStats.d.ts +22 -22
  258. package/{types → dist/types}/PeerConnectionController/CandidateStat.d.ts +13 -13
  259. package/{types → dist/types}/PeerConnectionController/CodecStats.d.ts +14 -14
  260. package/{types → dist/types}/PeerConnectionController/DataChannelStats.d.ts +15 -15
  261. package/{types → dist/types}/PeerConnectionController/InboundRTPStats.d.ts +141 -141
  262. package/{types → dist/types}/PeerConnectionController/InboundTrackStats.d.ts +32 -32
  263. package/{types → dist/types}/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
  264. package/{types → dist/types}/PeerConnectionController/PeerConnectionController.d.ts +143 -140
  265. package/{types → dist/types}/PeerConnectionController/SessionStats.d.ts +8 -8
  266. package/{types → dist/types}/PeerConnectionController/StreamStats.d.ts +9 -9
  267. package/{types → dist/types}/PixelStreaming/PixelStreaming.d.ts +271 -259
  268. package/{types → dist/types}/UI/OnScreenKeyboard.d.ts +30 -30
  269. package/{types → dist/types}/UeInstanceMessage/ResponseController.d.ts +19 -19
  270. package/{types → dist/types}/UeInstanceMessage/SendMessageController.d.ts +18 -18
  271. package/{types → dist/types}/UeInstanceMessage/StreamMessageController.d.ts +29 -29
  272. package/{types → dist/types}/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
  273. package/{types → dist/types}/Util/EventEmitter.d.ts +429 -429
  274. package/{types → dist/types}/Util/FileUtil.d.ts +32 -32
  275. package/dist/types/Util/IURLSearchParams.d.ts +9 -0
  276. package/dist/types/Util/InputCoordTranslator.d.ts +29 -0
  277. package/{types → dist/types}/Util/RTCUtils.d.ts +8 -8
  278. package/{types → dist/types}/VideoPlayer/StreamController.d.ts +22 -24
  279. package/{types → dist/types}/VideoPlayer/VideoPlayer.d.ts +78 -78
  280. package/{types → dist/types}/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -377
  281. package/{types → dist/types}/WebXR/WebXRController.d.ts +42 -42
  282. package/{types → dist/types}/pixelstreamingfrontend.d.ts +23 -22
  283. package/package.json +14 -17
  284. package/readme.md +9 -1
  285. package/src/AFK/AFKController.ts +10 -32
  286. package/src/Config/Config.ts +232 -205
  287. package/src/Config/SettingBase.ts +61 -2
  288. package/src/Config/SettingFlag.ts +10 -48
  289. package/src/Config/SettingNumber.ts +23 -33
  290. package/src/Config/SettingOption.ts +41 -56
  291. package/src/Config/SettingText.ts +9 -37
  292. package/src/DataChannel/DataChannelController.ts +6 -26
  293. package/src/DataChannel/DataChannelLatencyTestController.ts +43 -38
  294. package/src/DataChannel/DataChannelLatencyTestResults.ts +8 -10
  295. package/src/DataChannel/DataChannelSender.ts +5 -15
  296. package/src/DataChannel/LatencyTestResults.ts +5 -15
  297. package/src/FreezeFrame/FreezeFrame.ts +7 -19
  298. package/src/FreezeFrame/FreezeFrameController.ts +3 -14
  299. package/src/Inputs/GamepadController.ts +123 -221
  300. package/src/Inputs/GamepadTypes.ts +23 -0
  301. package/src/Inputs/IInputController.ts +17 -0
  302. package/src/Inputs/InputClassesFactory.ts +38 -45
  303. package/src/Inputs/KeyCodes.ts +114 -0
  304. package/src/Inputs/KeyboardController.ts +49 -232
  305. package/src/Inputs/MouseController.ts +71 -297
  306. package/src/Inputs/MouseControllerHovering.ts +118 -0
  307. package/src/Inputs/MouseControllerLocked.ts +194 -0
  308. package/src/Inputs/TouchController.ts +49 -105
  309. package/src/Inputs/TouchControllerFake.ts +132 -0
  310. package/src/Inputs/XRGamepadController.ts +35 -44
  311. package/src/PeerConnectionController/AggregatedStats.ts +46 -75
  312. package/src/PeerConnectionController/CandidatePairStats.ts +1 -1
  313. package/src/PeerConnectionController/CandidateStat.ts +1 -1
  314. package/src/PeerConnectionController/PeerConnectionController.ts +214 -170
  315. package/src/PixelStreaming/PixelStreaming.ts +174 -226
  316. package/src/UI/OnScreenKeyboard.ts +14 -9
  317. package/src/UeInstanceMessage/ResponseController.ts +6 -15
  318. package/src/UeInstanceMessage/SendMessageController.ts +16 -18
  319. package/src/UeInstanceMessage/StreamMessageController.ts +3 -12
  320. package/src/UeInstanceMessage/ToStreamerMessagesController.ts +3 -9
  321. package/src/Util/EventEmitter.ts +17 -22
  322. package/src/Util/FileUtil.ts +11 -34
  323. package/src/Util/IURLSearchParams.ts +25 -0
  324. package/src/Util/InputCoordTranslator.ts +73 -0
  325. package/src/Util/RTCUtils.ts +23 -15
  326. package/src/VideoPlayer/StreamController.ts +6 -23
  327. package/src/VideoPlayer/VideoPlayer.ts +9 -30
  328. package/src/WebRtcPlayer/WebRtcPlayerController.ts +328 -690
  329. package/src/WebXR/WebXRController.ts +82 -94
  330. package/src/pixelstreamingfrontend.ts +8 -6
  331. package/tsconfig.cjs.json +9 -0
  332. package/tsconfig.esm.json +7 -0
  333. package/tsconfig.json +4 -6
  334. package/dist/lib-pixelstreamingfrontend.esm.js +0 -1
  335. package/dist/lib-pixelstreamingfrontend.js +0 -1
  336. package/src/Inputs/FakeTouchController.ts +0 -199
  337. package/src/Inputs/HoveringMouseEvents.ts +0 -192
  338. package/src/Inputs/IMouseEvents.ts +0 -64
  339. package/src/Inputs/ITouchController.ts +0 -29
  340. package/src/Inputs/LockedMouseEvents.ts +0 -287
  341. package/src/Util/CoordinateConverter.ts +0 -290
  342. package/src/Util/EventListenerTracker.ts +0 -29
  343. package/types/Inputs/FakeTouchController.d.ts +0 -61
  344. package/types/Inputs/GamepadController.d.ts +0 -85
  345. package/types/Inputs/GamepadTypes.d.ts +0 -8
  346. package/types/Inputs/HoveringMouseEvents.d.ts +0 -56
  347. package/types/Inputs/IMouseEvents.d.ts +0 -53
  348. package/types/Inputs/ITouchController.d.ts +0 -24
  349. package/types/Inputs/KeyboardController.d.ts +0 -62
  350. package/types/Inputs/LockedMouseEvents.d.ts +0 -80
  351. package/types/Inputs/MouseController.d.ts +0 -75
  352. package/types/Inputs/TouchController.d.ts +0 -53
  353. package/types/Util/CoordinateConverter.d.ts +0 -100
  354. package/types/Util/EventListenerTracker.d.ts +0 -14
  355. package/webpack.common.js +0 -35
  356. package/webpack.dev.js +0 -35
  357. package/webpack.prod.js +0 -36
@@ -6,6 +6,8 @@
6
6
  export class SettingBase {
7
7
  id: string;
8
8
  description: string;
9
+ useUrlParams: boolean;
10
+ _urlParams: Record<string, string>;
9
11
  _label: string;
10
12
  _value: unknown;
11
13
  onChange: (changedValue: unknown, setting: SettingBase) => void;
@@ -16,9 +18,13 @@ export class SettingBase {
16
18
  label: string,
17
19
  description: string,
18
20
  defaultSettingValue: unknown,
19
- // eslint-disable-next-line @typescript-eslint/no-empty-function
20
- defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => { /* Do nothing, to be overridden. */ }
21
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
22
+ defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
23
+ /* Do nothing, to be overridden. */
24
+ }
21
25
  ) {
26
+ this.parseURLParams();
27
+
22
28
  this.onChange = defaultOnChangeListener;
23
29
 
24
30
  this.onChangeEmit = () => {
@@ -62,4 +68,57 @@ export class SettingBase {
62
68
  this.onChange(this._value, this);
63
69
  this.onChangeEmit(this._value);
64
70
  }
71
+
72
+ /**
73
+ * Persist the setting value in URL.
74
+ */
75
+ public updateURLParams() {
76
+ if (this.useUrlParams) {
77
+ // set url params
78
+ const urlParams = new URLSearchParams(window.location.search);
79
+ const valueString = this.getValueAsString();
80
+ let set = false;
81
+ for (const [name, _value] of urlParams) {
82
+ if (name.toLowerCase() == this.id.toLowerCase()) {
83
+ urlParams.set(name, valueString);
84
+ set = true;
85
+ break;
86
+ }
87
+ }
88
+ if (!set) {
89
+ urlParams.set(this.id, valueString);
90
+ }
91
+ window.history.replaceState(
92
+ {},
93
+ '',
94
+ urlParams.toString() !== '' ? `${location.pathname}?${urlParams}` : `${location.pathname}`
95
+ );
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Allows sub types to provide their value for the url search params.
101
+ */
102
+ protected getValueAsString(): string {
103
+ return '';
104
+ }
105
+
106
+ private parseURLParams(): void {
107
+ this._urlParams = {};
108
+ const params = new URLSearchParams(window.location.search);
109
+ for (const [name, value] of params) {
110
+ this._urlParams[name.toLowerCase()] = value;
111
+ }
112
+ }
113
+
114
+ protected hasURLParam(name: string): boolean {
115
+ return name.toLowerCase() in this._urlParams;
116
+ }
117
+
118
+ protected getURLParam(name: string): string {
119
+ if (this.hasURLParam(name)) {
120
+ return this._urlParams[name.toLowerCase()];
121
+ }
122
+ return '';
123
+ }
65
124
  }
@@ -6,12 +6,9 @@ import { SettingBase } from './SettingBase';
6
6
  /**
7
7
  * A boolean flag setting object with a text label.
8
8
  */
9
- export class SettingFlag<
10
- CustomIds extends string = FlagsIds
11
- > extends SettingBase {
9
+ export class SettingFlag<CustomIds extends string = FlagsIds> extends SettingBase {
12
10
  id: FlagsIds | CustomIds;
13
11
  onChangeEmit: (changedValue: boolean) => void;
14
- useUrlParams: boolean;
15
12
 
16
13
  constructor(
17
14
  id: FlagsIds | CustomIds,
@@ -19,60 +16,25 @@ export class SettingFlag<
19
16
  description: string,
20
17
  defaultFlagValue: boolean,
21
18
  useUrlParams: boolean,
22
- // eslint-disable-next-line @typescript-eslint/no-empty-function
23
- defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => { /* Do nothing, to be overridden. */ }
19
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+ defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
21
+ /* Do nothing, to be overridden. */
22
+ }
24
23
  ) {
25
24
  super(id, label, description, defaultFlagValue, defaultOnChangeListener);
26
25
 
27
- const urlParams = new URLSearchParams(window.location.search);
28
- if (!useUrlParams || !urlParams.has(this.id)) {
26
+ if (!useUrlParams || !this.hasURLParam(this.id)) {
29
27
  this.flag = defaultFlagValue;
30
28
  } else {
31
29
  // parse flag from url parameters
32
- const urlParamFlag = this.getUrlParamFlag();
33
- this.flag = urlParamFlag;
30
+ const urlParamFlag = this.getURLParam(this.id);
31
+ this.flag = urlParamFlag.toLowerCase() != 'false';
34
32
  }
35
33
  this.useUrlParams = useUrlParams;
36
34
  }
37
35
 
38
- /**
39
- * Parse the flag value from the url parameters.
40
- * @returns True if the url parameters contains /?id, but False if /?id=false
41
- */
42
- getUrlParamFlag(): boolean {
43
- const urlParams = new URLSearchParams(window.location.search);
44
- if (urlParams.has(this.id)) {
45
- if (
46
- urlParams.get(this.id) === 'false' ||
47
- urlParams.get(this.id) === 'False'
48
- ) {
49
- return false;
50
- }
51
- return true;
52
- }
53
- return false;
54
- }
55
-
56
- /**
57
- * Persist the setting value in URL.
58
- */
59
- public updateURLParams() {
60
- if (this.useUrlParams) {
61
- // set url params
62
- const urlParams = new URLSearchParams(window.location.search);
63
- if (this.flag === true) {
64
- urlParams.set(this.id, 'true');
65
- } else {
66
- urlParams.set(this.id, 'false');
67
- }
68
- window.history.replaceState(
69
- {},
70
- '',
71
- urlParams.toString() !== ''
72
- ? `${location.pathname}?${urlParams}`
73
- : `${location.pathname}`
74
- );
75
- }
36
+ protected getValueAsString(): string {
37
+ return this.flag ? 'true' : 'false';
76
38
  }
77
39
 
78
40
  /**
@@ -6,26 +6,25 @@ import { SettingBase } from './SettingBase';
6
6
  /**
7
7
  * A number setting object with a text label. Min and max limit the range of allowed values.
8
8
  */
9
- export class SettingNumber<
10
- CustomIds extends string = NumericParametersIds
11
- > extends SettingBase {
12
- _min: number;
13
- _max: number;
9
+ export class SettingNumber<CustomIds extends string = NumericParametersIds> extends SettingBase {
10
+ _min: number | null;
11
+ _max: number | null;
14
12
 
15
13
  id: NumericParametersIds | CustomIds;
16
14
  onChangeEmit: (changedValue: number) => void;
17
- useUrlParams: boolean;
18
15
 
19
16
  constructor(
20
17
  id: NumericParametersIds | CustomIds,
21
18
  label: string,
22
19
  description: string,
23
- min: number,
24
- max: number,
20
+ min: number | null,
21
+ max: number | null,
25
22
  defaultNumber: number,
26
23
  useUrlParams: boolean,
27
- // eslint-disable-next-line @typescript-eslint/no-empty-function
28
- defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => { /* Do nothing, to be overridden. */ }
24
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
25
+ defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
26
+ /* Do nothing, to be overridden. */
27
+ }
29
28
  ) {
30
29
  super(id, label, description, defaultNumber, defaultOnChangeListener);
31
30
 
@@ -33,34 +32,17 @@ export class SettingNumber<
33
32
  this._max = max;
34
33
 
35
34
  // attempt to read the number from the url params
36
- const urlParams = new URLSearchParams(window.location.search);
37
- if (!useUrlParams || !urlParams.has(this.id)) {
35
+ if (!useUrlParams || !this.hasURLParam(this.id)) {
38
36
  this.number = defaultNumber;
39
37
  } else {
40
- const parsedValue = Number.parseFloat(urlParams.get(this.id));
41
- this.number = Number.isNaN(parsedValue)
42
- ? defaultNumber
43
- : parsedValue;
38
+ const parsedValue = Number.parseFloat(this.getURLParam(this.id));
39
+ this.number = Number.isNaN(parsedValue) ? defaultNumber : parsedValue;
44
40
  }
45
41
  this.useUrlParams = useUrlParams;
46
42
  }
47
43
 
48
- /**
49
- * Persist the setting value in URL.
50
- */
51
- public updateURLParams(): void {
52
- if (this.useUrlParams) {
53
- // set url params like ?id=number
54
- const urlParams = new URLSearchParams(window.location.search);
55
- urlParams.set(this.id, this.number.toString());
56
- window.history.replaceState(
57
- {},
58
- '',
59
- urlParams.toString() !== ''
60
- ? `${location.pathname}?${urlParams}`
61
- : `${location.pathname}`
62
- );
63
- }
44
+ protected getValueAsString(): string {
45
+ return this.number.toString();
64
46
  }
65
47
 
66
48
  /**
@@ -83,7 +65,15 @@ export class SettingNumber<
83
65
  * @returns The clamped number.
84
66
  */
85
67
  public clamp(inNumber: number): number {
86
- return Math.max(Math.min(this._max, inNumber), this._min);
68
+ if (this._min == null && this._max == null) {
69
+ return inNumber;
70
+ } else if (this._min == null) {
71
+ return Math.min(this._max, inNumber);
72
+ } else if (this._max == null) {
73
+ return Math.max(this._min, inNumber);
74
+ } else {
75
+ return Math.max(Math.min(this._max, inNumber), this._min);
76
+ }
87
77
  }
88
78
 
89
79
  /**
@@ -1,18 +1,19 @@
1
1
  // Copyright Epic Games, Inc. All Rights Reserved.
2
2
 
3
+ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
3
4
  import type { OptionParametersIds } from './Config';
4
5
  import { SettingBase } from './SettingBase';
5
6
 
6
7
  /**
7
8
  * An Option setting object with a text label. Allows you to specify an array of options and select one of them.
8
9
  */
9
- export class SettingOption<
10
- CustomIds extends string = OptionParametersIds
11
- > extends SettingBase {
10
+ export class SettingOption<CustomIds extends string = OptionParametersIds> extends SettingBase {
12
11
  id: OptionParametersIds | CustomIds;
13
12
  onChangeEmit: (changedValue: string) => void;
14
13
  _options: Array<string>;
15
- useUrlParams: boolean;
14
+
15
+ /* Transforms the url parameter value into something else, by default no transformation is made, the url param is returned as-is. */
16
+ _urlParamResolver: (urlParamValue: string) => string;
16
17
 
17
18
  constructor(
18
19
  id: OptionParametersIds | CustomIds,
@@ -21,49 +22,31 @@ export class SettingOption<
21
22
  defaultTextValue: string,
22
23
  options: Array<string>,
23
24
  useUrlParams: boolean,
24
- // eslint-disable-next-line @typescript-eslint/no-empty-function
25
- defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => { /* Do nothing, to be overridden. */ }
25
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
26
+ defaultUrlParamResolver: (urlParamValue: string) => string = function (value: string) {
27
+ /* Return the string as-is by default */
28
+ return value;
29
+ },
30
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
31
+ defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
32
+ /* Do nothing, to be overridden. */
33
+ }
26
34
  ) {
27
35
  super(id, label, description, defaultTextValue, defaultOnChangeListener);
28
36
 
29
- this.options = options;
30
- const urlParams = new URLSearchParams(window.location.search);
31
- const stringToMatch: string =
32
- useUrlParams && urlParams.has(this.id)
33
- ? this.getUrlParamText()
34
- : defaultTextValue;
37
+ this._urlParamResolver = defaultUrlParamResolver;
38
+
39
+ const stringToMatch: string = this.hasURLParam(this.id)
40
+ ? this._urlParamResolver(this.getURLParam(this.id))
41
+ : defaultTextValue;
42
+
43
+ this.options = options ?? [stringToMatch];
35
44
  this.selected = stringToMatch;
36
45
  this.useUrlParams = useUrlParams;
37
46
  }
38
47
 
39
- /**
40
- * Parse the text value from the url parameters.
41
- * @returns The text value parsed from the url if the url parameters contains /?id=value, but empty string if just /?id or no url param found.
42
- */
43
- getUrlParamText(): string {
44
- const urlParams = new URLSearchParams(window.location.search);
45
- if (urlParams.has(this.id)) {
46
- return urlParams.get(this.id) ?? '';
47
- }
48
- return '';
49
- }
50
-
51
- /**
52
- * Persist the setting value in URL.
53
- */
54
- public updateURLParams() {
55
- if (this.useUrlParams) {
56
- // set url params
57
- const urlParams = new URLSearchParams(window.location.search);
58
- urlParams.set(this.id, this.selected);
59
- window.history.replaceState(
60
- {},
61
- '',
62
- urlParams.toString() !== ''
63
- ? `${location.pathname}?${urlParams}`
64
- : `${location.pathname}`
65
- );
66
- }
48
+ protected getValueAsString(): string {
49
+ return this.selected;
67
50
  }
68
51
 
69
52
  /**
@@ -101,24 +84,26 @@ export class SettingOption<
101
84
  * @param value Selected option
102
85
  */
103
86
  public set selected(value: string) {
104
- // A user may not specify the full possible value so we instead use the closest match.
105
- // eg ?xxx=H264 would select 'H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f'
106
- let filteredList = this.options.filter(
107
- (option: string) => option.indexOf(value) !== -1
108
- );
109
- if (filteredList.length) {
110
- this.value = filteredList[0];
87
+ if (value === undefined) {
111
88
  return;
112
- }
89
+ }
113
90
 
114
- // A user has specified a codec with a fmtp string but this codec + fmtp line isn't available.
115
- // in that case, just use the codec
116
- filteredList = this.options.filter(
117
- (option: string) => option.indexOf(value.split(' ')[0]) !== -1
118
- );
119
- if (filteredList.length) {
120
- this.value = filteredList[0];
121
- return;
91
+ // If options contains the value, then set that as selected
92
+ if (this.options.includes(value)) {
93
+ this.value = value;
94
+ } else {
95
+ Logger.Error(
96
+ `Could not set "${value}" as the selected option for ${this.id} because it wasn't one of the options.`
97
+ );
122
98
  }
123
99
  }
100
+
101
+ /**
102
+ * Set the url parameter resolver to do some transformation to the string value
103
+ * that is extracted from the url parameters.
104
+ * @param urlParam A function that transforms the extracted url parameter string for this setting to something else.
105
+ */
106
+ public set urlParamResolver(value: (urlParam: string) => string) {
107
+ this._urlParamResolver = value;
108
+ }
124
109
  }
@@ -6,9 +6,7 @@ import { SettingBase } from './SettingBase';
6
6
  /**
7
7
  * A text setting object with a text label.
8
8
  */
9
- export class SettingText<
10
- CustomIds extends string = TextParametersIds
11
- > extends SettingBase {
9
+ export class SettingText<CustomIds extends string = TextParametersIds> extends SettingBase {
12
10
  id: TextParametersIds | CustomIds;
13
11
  onChangeEmit: (changedValue: string) => void;
14
12
  useUrlParams: boolean;
@@ -19,50 +17,24 @@ export class SettingText<
19
17
  description: string,
20
18
  defaultTextValue: string,
21
19
  useUrlParams: boolean,
22
- // eslint-disable-next-line @typescript-eslint/no-empty-function
23
- defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => { /* Do nothing, to be overridden. */ }
20
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
21
+ defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
22
+ /* Do nothing, to be overridden. */
23
+ }
24
24
  ) {
25
25
  super(id, label, description, defaultTextValue, defaultOnChangeListener);
26
26
 
27
- const urlParams = new URLSearchParams(window.location.search);
28
- if (!useUrlParams || !urlParams.has(this.id)) {
27
+ if (!useUrlParams || !this.hasURLParam(this.id)) {
29
28
  this.text = defaultTextValue;
30
29
  } else {
31
30
  // parse flag from url parameters
32
- const urlParamFlag = this.getUrlParamText();
33
- this.text = urlParamFlag;
31
+ this.text = this.getURLParam(this.id);
34
32
  }
35
33
  this.useUrlParams = useUrlParams;
36
34
  }
37
35
 
38
- /**
39
- * Parse the text value from the url parameters.
40
- * @returns The text value parsed from the url if the url parameters contains /?id=value, but empty string if just /?id or no url param found.
41
- */
42
- getUrlParamText(): string {
43
- const urlParams = new URLSearchParams(window.location.search);
44
- if (urlParams.has(this.id)) {
45
- return urlParams.get(this.id) ?? '';
46
- }
47
- return '';
48
- }
49
-
50
- /**
51
- * Persist the setting value in URL.
52
- */
53
- public updateURLParams() {
54
- if (this.useUrlParams) {
55
- // set url params
56
- const urlParams = new URLSearchParams(window.location.search);
57
- urlParams.set(this.id, this.text);
58
- window.history.replaceState(
59
- {},
60
- '',
61
- urlParams.toString() !== ''
62
- ? `${location.pathname}?${urlParams}`
63
- : `${location.pathname}`
64
- );
65
- }
36
+ protected getValueAsString(): string {
37
+ return this.text;
66
38
  }
67
39
 
68
40
  /**
@@ -39,10 +39,7 @@ export class DataChannelController {
39
39
  this.datachannelOptions.ordered = true;
40
40
  }
41
41
 
42
- this.dataChannel = this.peerConnection.createDataChannel(
43
- this.label,
44
- this.datachannelOptions
45
- );
42
+ this.dataChannel = this.peerConnection.createDataChannel(this.label, this.datachannelOptions);
46
43
  this.setupDataChannel();
47
44
  }
48
45
 
@@ -51,8 +48,7 @@ export class DataChannelController {
51
48
  this.dataChannel.binaryType = 'arraybuffer';
52
49
  this.dataChannel.onopen = (ev: Event) => this.handleOnOpen(ev);
53
50
  this.dataChannel.onclose = (ev: Event) => this.handleOnClose(ev);
54
- this.dataChannel.onmessage = (ev: MessageEvent) =>
55
- this.handleOnMessage(ev);
51
+ this.dataChannel.onmessage = (ev: MessageEvent) => this.handleOnMessage(ev);
56
52
  this.dataChannel.onerror = (ev: MessageEvent) => this.handleOnError(ev);
57
53
  }
58
54
 
@@ -60,11 +56,7 @@ export class DataChannelController {
60
56
  * Handles when the Data Channel is opened
61
57
  */
62
58
  handleOnOpen(ev: Event) {
63
- Logger.Log(
64
- Logger.GetStackTrace(),
65
- `Data Channel (${this.label}) opened.`,
66
- 7
67
- );
59
+ Logger.Info(`Data Channel (${this.label}) opened.`);
68
60
  this.onOpen(this.dataChannel?.label, ev);
69
61
  }
70
62
 
@@ -72,11 +64,7 @@ export class DataChannelController {
72
64
  * Handles when the Data Channel is closed
73
65
  */
74
66
  handleOnClose(ev: Event) {
75
- Logger.Log(
76
- Logger.GetStackTrace(),
77
- `Data Channel (${this.label}) closed.`,
78
- 7
79
- );
67
+ Logger.Info(`Data Channel (${this.label}) closed.`);
80
68
  this.onClose(this.dataChannel?.label, ev);
81
69
  }
82
70
 
@@ -86,11 +74,7 @@ export class DataChannelController {
86
74
  */
87
75
  handleOnMessage(event: MessageEvent) {
88
76
  // Higher log level to prevent log spam with messages received
89
- Logger.Log(
90
- Logger.GetStackTrace(),
91
- `Data Channel (${this.label}) message: ${event}`,
92
- 8
93
- );
77
+ Logger.Info(`Data Channel (${this.label}) message: ${event}`);
94
78
  }
95
79
 
96
80
  /**
@@ -98,11 +82,7 @@ export class DataChannelController {
98
82
  * @param event - Error Event
99
83
  */
100
84
  handleOnError(event: MessageEvent) {
101
- Logger.Log(
102
- Logger.GetStackTrace(),
103
- `Data Channel (${this.label}) error: ${event}`,
104
- 7
105
- );
85
+ Logger.Info(`Data Channel (${this.label}) error: ${event}`);
106
86
  this.onError(this.dataChannel?.label, event);
107
87
  }
108
88
 
@@ -8,7 +8,7 @@ import {
8
8
  DataChannelLatencyTestResult,
9
9
  DataChannelLatencyTestSeq,
10
10
  DataChannelLatencyTestTimestamp
11
- } from "./DataChannelLatencyTestResults";
11
+ } from './DataChannelLatencyTestResults';
12
12
 
13
13
  export type DataChannelLatencyTestConfig = {
14
14
  // test duration in milliseconds
@@ -19,7 +19,7 @@ export type DataChannelLatencyTestConfig = {
19
19
  requestSize: number;
20
20
  //response filler size
21
21
  responseSize: number;
22
- }
22
+ };
23
23
 
24
24
  export type DataChannelLatencyTestSink = (request: DataChannelLatencyTestRequest) => void;
25
25
  export type DataChannelLatencyTestResultCallback = (result: DataChannelLatencyTestResult) => void;
@@ -30,7 +30,7 @@ export class DataChannelLatencyTestController {
30
30
  callback: DataChannelLatencyTestResultCallback;
31
31
  records: Map<DataChannelLatencyTestSeq, DataChannelLatencyTestRecord>;
32
32
  seq: DataChannelLatencyTestSeq;
33
- interval: NodeJS.Timer;
33
+ intervalHandle: number = undefined;
34
34
 
35
35
  constructor(sink: DataChannelLatencyTestSink, callback: DataChannelLatencyTestResultCallback) {
36
36
  this.sink = sink;
@@ -45,20 +45,23 @@ export class DataChannelLatencyTestController {
45
45
  }
46
46
  this.startTime = Date.now();
47
47
  this.records.clear();
48
- this.interval = setInterval((() => {
49
- if (Date.now() - this.startTime >= config.duration) {
50
- this.stop();
51
- } else {
52
- this.sendRequest(config.requestSize, config.responseSize);
53
- }
54
- }).bind(this), Math.floor(1000/config.rps));
48
+ this.intervalHandle = window.setInterval(
49
+ (() => {
50
+ if (Date.now() - this.startTime >= config.duration) {
51
+ this.stop();
52
+ } else {
53
+ this.sendRequest(config.requestSize, config.responseSize);
54
+ }
55
+ }).bind(this),
56
+ Math.floor(1000 / config.rps)
57
+ );
55
58
  return true;
56
59
  }
57
60
 
58
61
  stop() {
59
- if (this.interval) {
60
- clearInterval(this.interval);
61
- this.interval = undefined;
62
+ if (this.intervalHandle) {
63
+ window.clearInterval(this.intervalHandle);
64
+ this.intervalHandle = undefined;
62
65
  this.callback(this.produceResult());
63
66
  }
64
67
  }
@@ -67,31 +70,37 @@ export class DataChannelLatencyTestController {
67
70
  const resultRecords = new Map(this.records);
68
71
  return {
69
72
  records: resultRecords,
70
- dataChannelRtt: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
71
- return acc + (next.playerReceivedTimestamp - next.playerSentTimestamp);
72
- }, 0) / this.records.size),
73
- playerToStreamerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
74
- return acc + (next.streamerReceivedTimestamp - next.playerSentTimestamp);
75
- }, 0) / this.records.size),
76
- streamerToPlayerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
77
- return acc + (next.playerReceivedTimestamp - next.streamerSentTimestamp);
78
- }, 0) / this.records.size),
73
+ dataChannelRtt: Math.ceil(
74
+ Array.from(this.records.values()).reduce((acc, next) => {
75
+ return acc + (next.playerReceivedTimestamp - next.playerSentTimestamp);
76
+ }, 0) / this.records.size
77
+ ),
78
+ playerToStreamerTime: Math.ceil(
79
+ Array.from(this.records.values()).reduce((acc, next) => {
80
+ return acc + (next.streamerReceivedTimestamp - next.playerSentTimestamp);
81
+ }, 0) / this.records.size
82
+ ),
83
+ streamerToPlayerTime: Math.ceil(
84
+ Array.from(this.records.values()).reduce((acc, next) => {
85
+ return acc + (next.playerReceivedTimestamp - next.streamerSentTimestamp);
86
+ }, 0) / this.records.size
87
+ ),
79
88
  exportLatencyAsCSV: () => {
80
- let csv = "Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\n";
89
+ let csv = 'Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\n';
81
90
  resultRecords.forEach((record) => {
82
- csv += record.playerSentTimestamp + ";";
83
- csv += (record.playerReceivedTimestamp - record.playerSentTimestamp) + ";";
84
- csv += (record.streamerReceivedTimestamp - record.playerSentTimestamp) + ";";
85
- csv += (record.playerReceivedTimestamp - record.streamerSentTimestamp) + ";";
86
- csv += "\n";
87
- })
91
+ csv += record.playerSentTimestamp + ';';
92
+ csv += record.playerReceivedTimestamp - record.playerSentTimestamp + ';';
93
+ csv += record.streamerReceivedTimestamp - record.playerSentTimestamp + ';';
94
+ csv += record.playerReceivedTimestamp - record.streamerSentTimestamp + ';';
95
+ csv += '\n';
96
+ });
88
97
  return csv;
89
98
  }
90
- }
99
+ };
91
100
  }
92
101
 
93
102
  isRunning() {
94
- return !!this.interval;
103
+ return !!this.intervalHandle;
95
104
  }
96
105
 
97
106
  receive(response: DataChannelLatencyTestResponse) {
@@ -99,10 +108,7 @@ export class DataChannelLatencyTestController {
99
108
  return;
100
109
  }
101
110
  if (!response) {
102
- Logger.Error(
103
- Logger.GetStackTrace(),
104
- "Undefined response from server"
105
- );
111
+ Logger.Error('Undefined response from server');
106
112
  return;
107
113
  }
108
114
  const record = this.records.get(response.Seq);
@@ -122,8 +128,7 @@ export class DataChannelLatencyTestController {
122
128
  return {
123
129
  Seq: this.seq++,
124
130
  FillResponseSize: responseSize,
125
- Filler: requestSize ? "A".repeat(requestSize) : ""
126
- }
131
+ Filler: requestSize ? 'A'.repeat(requestSize) : ''
132
+ };
127
133
  }
128
-
129
134
  }