@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.
- package/.eslintrc.js +1 -1
- package/.prettierrc.json +1 -0
- package/dist/commonjs/AFK/AFKController.js +110 -0
- package/dist/commonjs/AFK/AFKController.js.map +1 -0
- package/dist/commonjs/Config/Config.js +560 -0
- package/dist/commonjs/Config/Config.js.map +1 -0
- package/dist/commonjs/Config/SettingBase.js +99 -0
- package/dist/commonjs/Config/SettingBase.js.map +1 -0
- package/dist/commonjs/Config/SettingFlag.js +50 -0
- package/dist/commonjs/Config/SettingFlag.js.map +1 -0
- package/dist/commonjs/Config/SettingNumber.js +84 -0
- package/dist/commonjs/Config/SettingNumber.js.map +1 -0
- package/dist/commonjs/Config/SettingOption.js +85 -0
- package/dist/commonjs/Config/SettingOption.js.map +1 -0
- package/dist/commonjs/Config/SettingText.js +43 -0
- package/dist/commonjs/Config/SettingText.js.map +1 -0
- package/dist/commonjs/DataChannel/DataChannelController.js +107 -0
- package/dist/commonjs/DataChannel/DataChannelController.js.map +1 -0
- package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +95 -0
- package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js.map +1 -0
- package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +19 -0
- package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js.map +1 -0
- package/dist/commonjs/DataChannel/DataChannelSender.js +44 -0
- package/dist/commonjs/DataChannel/DataChannelSender.js.map +1 -0
- package/dist/commonjs/DataChannel/InitialSettings.js +42 -0
- package/dist/commonjs/DataChannel/InitialSettings.js.map +1 -0
- package/dist/commonjs/DataChannel/LatencyTestResults.js +61 -0
- package/dist/commonjs/DataChannel/LatencyTestResults.js.map +1 -0
- package/dist/commonjs/FreezeFrame/FreezeFrame.js +94 -0
- package/dist/commonjs/FreezeFrame/FreezeFrame.js.map +1 -0
- package/dist/commonjs/FreezeFrame/FreezeFrameController.js +96 -0
- package/dist/commonjs/FreezeFrame/FreezeFrameController.js.map +1 -0
- package/dist/commonjs/Inputs/GamepadController.js +189 -0
- package/dist/commonjs/Inputs/GamepadController.js.map +1 -0
- package/dist/commonjs/Inputs/GamepadTypes.js +22 -0
- package/dist/commonjs/Inputs/GamepadTypes.js.map +1 -0
- package/dist/commonjs/Inputs/IInputController.js +3 -0
- package/dist/commonjs/Inputs/IInputController.js.map +1 -0
- package/dist/commonjs/Inputs/InputClassesFactory.js +97 -0
- package/dist/commonjs/Inputs/InputClassesFactory.js.map +1 -0
- package/dist/commonjs/Inputs/KeyCodes.js +113 -0
- package/dist/commonjs/Inputs/KeyCodes.js.map +1 -0
- package/dist/commonjs/Inputs/KeyboardController.js +138 -0
- package/dist/commonjs/Inputs/KeyboardController.js.map +1 -0
- package/dist/commonjs/Inputs/MouseButtons.js +29 -0
- package/dist/commonjs/Inputs/MouseButtons.js.map +1 -0
- package/dist/commonjs/Inputs/MouseController.js +98 -0
- package/dist/commonjs/Inputs/MouseController.js.map +1 -0
- package/dist/commonjs/Inputs/MouseControllerHovering.js +94 -0
- package/dist/commonjs/Inputs/MouseControllerHovering.js.map +1 -0
- package/dist/commonjs/Inputs/MouseControllerLocked.js +154 -0
- package/dist/commonjs/Inputs/MouseControllerLocked.js.map +1 -0
- package/dist/commonjs/Inputs/SpecialKeyCodes.js +20 -0
- package/dist/commonjs/Inputs/SpecialKeyCodes.js.map +1 -0
- package/dist/commonjs/Inputs/TouchController.js +124 -0
- package/dist/commonjs/Inputs/TouchController.js.map +1 -0
- package/dist/commonjs/Inputs/TouchControllerFake.js +92 -0
- package/dist/commonjs/Inputs/TouchControllerFake.js.map +1 -0
- package/dist/commonjs/Inputs/XRGamepadController.js +125 -0
- package/dist/commonjs/Inputs/XRGamepadController.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js +253 -0
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/CandidatePairStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/CandidateStat.js +11 -0
- package/dist/commonjs/PeerConnectionController/CandidateStat.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/CodecStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/CodecStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/DataChannelStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/DataChannelStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +23 -0
- package/dist/commonjs/PeerConnectionController/InboundRTPStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/InboundTrackStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +17 -0
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +585 -0
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/SessionStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/SessionStats.js.map +1 -0
- package/dist/commonjs/PeerConnectionController/StreamStats.js +11 -0
- package/dist/commonjs/PeerConnectionController/StreamStats.js.map +1 -0
- package/dist/commonjs/PixelStreaming/PixelStreaming.js +608 -0
- package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +1 -0
- package/dist/commonjs/UI/OnScreenKeyboard.js +83 -0
- package/dist/commonjs/UI/OnScreenKeyboard.js.map +1 -0
- package/dist/commonjs/UeInstanceMessage/ResponseController.js +39 -0
- package/dist/commonjs/UeInstanceMessage/ResponseController.js.map +1 -0
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js +121 -0
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js.map +1 -0
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +211 -0
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js.map +1 -0
- package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +50 -0
- package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -0
- package/dist/commonjs/Util/EventEmitter.js +387 -0
- package/dist/commonjs/Util/EventEmitter.js.map +1 -0
- package/dist/commonjs/Util/FileUtil.js +109 -0
- package/dist/commonjs/Util/FileUtil.js.map +1 -0
- package/dist/commonjs/Util/IURLSearchParams.js +26 -0
- package/dist/commonjs/Util/IURLSearchParams.js.map +1 -0
- package/dist/commonjs/Util/InputCoordTranslator.js +50 -0
- package/dist/commonjs/Util/InputCoordTranslator.js.map +1 -0
- package/dist/commonjs/Util/RTCUtils.js +41 -0
- package/dist/commonjs/Util/RTCUtils.js.map +1 -0
- package/dist/commonjs/VideoPlayer/StreamController.js +68 -0
- package/dist/commonjs/VideoPlayer/StreamController.js.map +1 -0
- package/dist/commonjs/VideoPlayer/VideoPlayer.js +178 -0
- package/dist/commonjs/VideoPlayer/VideoPlayer.js.map +1 -0
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1224 -0
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
- package/dist/commonjs/WebXR/WebXRController.js +361 -0
- package/dist/commonjs/WebXR/WebXRController.js.map +1 -0
- package/dist/commonjs/pixelstreamingfrontend.js +71 -0
- package/dist/commonjs/pixelstreamingfrontend.js.map +1 -0
- package/dist/esm/AFK/AFKController.js +106 -0
- package/dist/esm/AFK/AFKController.js.map +1 -0
- package/dist/esm/Config/Config.js +552 -0
- package/dist/esm/Config/Config.js.map +1 -0
- package/dist/esm/Config/SettingBase.js +95 -0
- package/dist/esm/Config/SettingBase.js.map +1 -0
- package/dist/esm/Config/SettingFlag.js +46 -0
- package/dist/esm/Config/SettingFlag.js.map +1 -0
- package/dist/esm/Config/SettingNumber.js +80 -0
- package/dist/esm/Config/SettingNumber.js.map +1 -0
- package/dist/esm/Config/SettingOption.js +81 -0
- package/dist/esm/Config/SettingOption.js.map +1 -0
- package/dist/esm/Config/SettingText.js +39 -0
- package/dist/esm/Config/SettingText.js.map +1 -0
- package/dist/esm/DataChannel/DataChannelController.js +103 -0
- package/dist/esm/DataChannel/DataChannelController.js.map +1 -0
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js +91 -0
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js.map +1 -0
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +15 -0
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js.map +1 -0
- package/dist/esm/DataChannel/DataChannelSender.js +40 -0
- package/dist/esm/DataChannel/DataChannelSender.js.map +1 -0
- package/dist/esm/DataChannel/InitialSettings.js +35 -0
- package/dist/esm/DataChannel/InitialSettings.js.map +1 -0
- package/dist/esm/DataChannel/LatencyTestResults.js +57 -0
- package/dist/esm/DataChannel/LatencyTestResults.js.map +1 -0
- package/dist/esm/FreezeFrame/FreezeFrame.js +90 -0
- package/dist/esm/FreezeFrame/FreezeFrame.js.map +1 -0
- package/dist/esm/FreezeFrame/FreezeFrameController.js +92 -0
- package/dist/esm/FreezeFrame/FreezeFrameController.js.map +1 -0
- package/dist/esm/Inputs/GamepadController.js +185 -0
- package/dist/esm/Inputs/GamepadController.js.map +1 -0
- package/dist/esm/Inputs/GamepadTypes.js +18 -0
- package/dist/esm/Inputs/GamepadTypes.js.map +1 -0
- package/dist/esm/Inputs/IInputController.js +2 -0
- package/dist/esm/Inputs/IInputController.js.map +1 -0
- package/dist/esm/Inputs/InputClassesFactory.js +92 -0
- package/dist/esm/Inputs/InputClassesFactory.js.map +1 -0
- package/dist/esm/Inputs/KeyCodes.js +110 -0
- package/dist/esm/Inputs/KeyCodes.js.map +1 -0
- package/dist/esm/Inputs/KeyboardController.js +134 -0
- package/dist/esm/Inputs/KeyboardController.js.map +1 -0
- package/dist/esm/Inputs/MouseButtons.js +24 -0
- package/dist/esm/Inputs/MouseButtons.js.map +1 -0
- package/dist/esm/Inputs/MouseController.js +94 -0
- package/dist/esm/Inputs/MouseController.js.map +1 -0
- package/dist/esm/Inputs/MouseControllerHovering.js +90 -0
- package/dist/esm/Inputs/MouseControllerHovering.js.map +1 -0
- package/dist/esm/Inputs/MouseControllerLocked.js +150 -0
- package/dist/esm/Inputs/MouseControllerLocked.js.map +1 -0
- package/dist/esm/Inputs/SpecialKeyCodes.js +16 -0
- package/dist/esm/Inputs/SpecialKeyCodes.js.map +1 -0
- package/dist/esm/Inputs/TouchController.js +120 -0
- package/dist/esm/Inputs/TouchController.js.map +1 -0
- package/dist/esm/Inputs/TouchControllerFake.js +88 -0
- package/dist/esm/Inputs/TouchControllerFake.js.map +1 -0
- package/dist/esm/Inputs/XRGamepadController.js +121 -0
- package/dist/esm/Inputs/XRGamepadController.js.map +1 -0
- package/dist/esm/PeerConnectionController/AggregatedStats.js +249 -0
- package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/CandidatePairStats.js +7 -0
- package/dist/esm/PeerConnectionController/CandidatePairStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/CandidateStat.js +7 -0
- package/dist/esm/PeerConnectionController/CandidateStat.js.map +1 -0
- package/dist/esm/PeerConnectionController/CodecStats.js +7 -0
- package/dist/esm/PeerConnectionController/CodecStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/DataChannelStats.js +7 -0
- package/dist/esm/PeerConnectionController/DataChannelStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/InboundRTPStats.js +17 -0
- package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/InboundTrackStats.js +7 -0
- package/dist/esm/PeerConnectionController/InboundTrackStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +12 -0
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/PeerConnectionController.js +581 -0
- package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -0
- package/dist/esm/PeerConnectionController/SessionStats.js +7 -0
- package/dist/esm/PeerConnectionController/SessionStats.js.map +1 -0
- package/dist/esm/PeerConnectionController/StreamStats.js +7 -0
- package/dist/esm/PeerConnectionController/StreamStats.js.map +1 -0
- package/dist/esm/PixelStreaming/PixelStreaming.js +604 -0
- package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -0
- package/dist/esm/UI/OnScreenKeyboard.js +79 -0
- package/dist/esm/UI/OnScreenKeyboard.js.map +1 -0
- package/dist/esm/UeInstanceMessage/ResponseController.js +35 -0
- package/dist/esm/UeInstanceMessage/ResponseController.js.map +1 -0
- package/dist/esm/UeInstanceMessage/SendMessageController.js +117 -0
- package/dist/esm/UeInstanceMessage/SendMessageController.js.map +1 -0
- package/dist/esm/UeInstanceMessage/StreamMessageController.js +206 -0
- package/dist/esm/UeInstanceMessage/StreamMessageController.js.map +1 -0
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +46 -0
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -0
- package/dist/esm/Util/EventEmitter.js +346 -0
- package/dist/esm/Util/EventEmitter.js.map +1 -0
- package/dist/esm/Util/FileUtil.js +104 -0
- package/dist/esm/Util/FileUtil.js.map +1 -0
- package/dist/esm/Util/IURLSearchParams.js +22 -0
- package/dist/esm/Util/IURLSearchParams.js.map +1 -0
- package/dist/esm/Util/InputCoordTranslator.js +46 -0
- package/dist/esm/Util/InputCoordTranslator.js.map +1 -0
- package/dist/esm/Util/RTCUtils.js +37 -0
- package/dist/esm/Util/RTCUtils.js.map +1 -0
- package/dist/esm/VideoPlayer/StreamController.js +64 -0
- package/dist/esm/VideoPlayer/StreamController.js.map +1 -0
- package/dist/esm/VideoPlayer/VideoPlayer.js +174 -0
- package/dist/esm/VideoPlayer/VideoPlayer.js.map +1 -0
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1220 -0
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
- package/dist/esm/WebXR/WebXRController.js +357 -0
- package/dist/esm/WebXR/WebXRController.js.map +1 -0
- package/dist/esm/pixelstreamingfrontend.js +25 -0
- package/dist/esm/pixelstreamingfrontend.js.map +1 -0
- package/{types → dist/types}/AFK/AFKController.d.ts +38 -39
- package/{types → dist/types}/Config/Config.d.ts +220 -219
- package/{types → dist/types}/Config/SettingBase.d.ts +43 -30
- package/{types → dist/types}/Config/SettingFlag.d.ts +24 -33
- package/{types → dist/types}/Config/SettingNumber.d.ts +41 -45
- package/{types → dist/types}/Config/SettingOption.d.ts +41 -43
- package/{types → dist/types}/Config/SettingText.d.ts +21 -29
- package/{types → dist/types}/DataChannel/DataChannelController.d.ts +59 -59
- package/{types → dist/types}/DataChannel/DataChannelLatencyTestController.d.ts +25 -26
- package/{types → dist/types}/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
- package/{types → dist/types}/DataChannel/DataChannelSender.d.ts +21 -21
- package/{types → dist/types}/DataChannel/InitialSettings.d.ts +44 -44
- package/{types → dist/types}/DataChannel/LatencyTestResults.d.ts +31 -31
- package/{types → dist/types}/FreezeFrame/FreezeFrame.d.ts +36 -36
- package/{types → dist/types}/FreezeFrame/FreezeFrameController.d.ts +37 -37
- package/dist/types/Inputs/GamepadController.d.ts +61 -0
- package/dist/types/Inputs/GamepadTypes.d.ts +15 -0
- package/dist/types/Inputs/IInputController.d.ts +16 -0
- package/{types → dist/types}/Inputs/InputClassesFactory.d.ts +53 -54
- package/dist/types/Inputs/KeyCodes.d.ts +5 -0
- package/dist/types/Inputs/KeyboardController.d.ts +34 -0
- package/{types → dist/types}/Inputs/MouseButtons.d.ts +22 -22
- package/dist/types/Inputs/MouseController.d.ts +40 -0
- package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -0
- package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -0
- package/{types → dist/types}/Inputs/SpecialKeyCodes.d.ts +14 -14
- package/dist/types/Inputs/TouchController.d.ts +28 -0
- package/dist/types/Inputs/TouchControllerFake.d.ts +29 -0
- package/{types → dist/types}/Inputs/XRGamepadController.d.ts +15 -22
- package/{types → dist/types}/PeerConnectionController/AggregatedStats.d.ts +82 -84
- package/{types → dist/types}/PeerConnectionController/CandidatePairStats.d.ts +22 -22
- package/{types → dist/types}/PeerConnectionController/CandidateStat.d.ts +13 -13
- package/{types → dist/types}/PeerConnectionController/CodecStats.d.ts +14 -14
- package/{types → dist/types}/PeerConnectionController/DataChannelStats.d.ts +15 -15
- package/{types → dist/types}/PeerConnectionController/InboundRTPStats.d.ts +141 -141
- package/{types → dist/types}/PeerConnectionController/InboundTrackStats.d.ts +32 -32
- package/{types → dist/types}/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
- package/{types → dist/types}/PeerConnectionController/PeerConnectionController.d.ts +143 -140
- package/{types → dist/types}/PeerConnectionController/SessionStats.d.ts +8 -8
- package/{types → dist/types}/PeerConnectionController/StreamStats.d.ts +9 -9
- package/{types → dist/types}/PixelStreaming/PixelStreaming.d.ts +271 -259
- package/{types → dist/types}/UI/OnScreenKeyboard.d.ts +30 -30
- package/{types → dist/types}/UeInstanceMessage/ResponseController.d.ts +19 -19
- package/{types → dist/types}/UeInstanceMessage/SendMessageController.d.ts +18 -18
- package/{types → dist/types}/UeInstanceMessage/StreamMessageController.d.ts +29 -29
- package/{types → dist/types}/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
- package/{types → dist/types}/Util/EventEmitter.d.ts +429 -429
- package/{types → dist/types}/Util/FileUtil.d.ts +32 -32
- package/dist/types/Util/IURLSearchParams.d.ts +9 -0
- package/dist/types/Util/InputCoordTranslator.d.ts +29 -0
- package/{types → dist/types}/Util/RTCUtils.d.ts +8 -8
- package/{types → dist/types}/VideoPlayer/StreamController.d.ts +22 -24
- package/{types → dist/types}/VideoPlayer/VideoPlayer.d.ts +78 -78
- package/{types → dist/types}/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -377
- package/{types → dist/types}/WebXR/WebXRController.d.ts +42 -42
- package/{types → dist/types}/pixelstreamingfrontend.d.ts +23 -22
- package/package.json +14 -17
- package/readme.md +9 -1
- package/src/AFK/AFKController.ts +10 -32
- package/src/Config/Config.ts +232 -205
- package/src/Config/SettingBase.ts +61 -2
- package/src/Config/SettingFlag.ts +10 -48
- package/src/Config/SettingNumber.ts +23 -33
- package/src/Config/SettingOption.ts +41 -56
- package/src/Config/SettingText.ts +9 -37
- package/src/DataChannel/DataChannelController.ts +6 -26
- package/src/DataChannel/DataChannelLatencyTestController.ts +43 -38
- package/src/DataChannel/DataChannelLatencyTestResults.ts +8 -10
- package/src/DataChannel/DataChannelSender.ts +5 -15
- package/src/DataChannel/LatencyTestResults.ts +5 -15
- package/src/FreezeFrame/FreezeFrame.ts +7 -19
- package/src/FreezeFrame/FreezeFrameController.ts +3 -14
- package/src/Inputs/GamepadController.ts +123 -221
- package/src/Inputs/GamepadTypes.ts +23 -0
- package/src/Inputs/IInputController.ts +17 -0
- package/src/Inputs/InputClassesFactory.ts +38 -45
- package/src/Inputs/KeyCodes.ts +114 -0
- package/src/Inputs/KeyboardController.ts +49 -232
- package/src/Inputs/MouseController.ts +71 -297
- package/src/Inputs/MouseControllerHovering.ts +118 -0
- package/src/Inputs/MouseControllerLocked.ts +194 -0
- package/src/Inputs/TouchController.ts +49 -105
- package/src/Inputs/TouchControllerFake.ts +132 -0
- package/src/Inputs/XRGamepadController.ts +35 -44
- package/src/PeerConnectionController/AggregatedStats.ts +46 -75
- package/src/PeerConnectionController/CandidatePairStats.ts +1 -1
- package/src/PeerConnectionController/CandidateStat.ts +1 -1
- package/src/PeerConnectionController/PeerConnectionController.ts +214 -170
- package/src/PixelStreaming/PixelStreaming.ts +174 -226
- package/src/UI/OnScreenKeyboard.ts +14 -9
- package/src/UeInstanceMessage/ResponseController.ts +6 -15
- package/src/UeInstanceMessage/SendMessageController.ts +16 -18
- package/src/UeInstanceMessage/StreamMessageController.ts +3 -12
- package/src/UeInstanceMessage/ToStreamerMessagesController.ts +3 -9
- package/src/Util/EventEmitter.ts +17 -22
- package/src/Util/FileUtil.ts +11 -34
- package/src/Util/IURLSearchParams.ts +25 -0
- package/src/Util/InputCoordTranslator.ts +73 -0
- package/src/Util/RTCUtils.ts +23 -15
- package/src/VideoPlayer/StreamController.ts +6 -23
- package/src/VideoPlayer/VideoPlayer.ts +9 -30
- package/src/WebRtcPlayer/WebRtcPlayerController.ts +328 -690
- package/src/WebXR/WebXRController.ts +82 -94
- package/src/pixelstreamingfrontend.ts +8 -6
- package/tsconfig.cjs.json +9 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +4 -6
- package/dist/lib-pixelstreamingfrontend.esm.js +0 -1
- package/dist/lib-pixelstreamingfrontend.js +0 -1
- package/src/Inputs/FakeTouchController.ts +0 -199
- package/src/Inputs/HoveringMouseEvents.ts +0 -192
- package/src/Inputs/IMouseEvents.ts +0 -64
- package/src/Inputs/ITouchController.ts +0 -29
- package/src/Inputs/LockedMouseEvents.ts +0 -287
- package/src/Util/CoordinateConverter.ts +0 -290
- package/src/Util/EventListenerTracker.ts +0 -29
- package/types/Inputs/FakeTouchController.d.ts +0 -61
- package/types/Inputs/GamepadController.d.ts +0 -85
- package/types/Inputs/GamepadTypes.d.ts +0 -8
- package/types/Inputs/HoveringMouseEvents.d.ts +0 -56
- package/types/Inputs/IMouseEvents.d.ts +0 -53
- package/types/Inputs/ITouchController.d.ts +0 -24
- package/types/Inputs/KeyboardController.d.ts +0 -62
- package/types/Inputs/LockedMouseEvents.d.ts +0 -80
- package/types/Inputs/MouseController.d.ts +0 -75
- package/types/Inputs/TouchController.d.ts +0 -53
- package/types/Util/CoordinateConverter.d.ts +0 -100
- package/types/Util/EventListenerTracker.d.ts +0 -14
- package/webpack.common.js +0 -35
- package/webpack.dev.js +0 -35
- 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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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.
|
|
30
|
-
|
|
31
|
-
const stringToMatch: string =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
this.text = urlParamFlag;
|
|
31
|
+
this.text = this.getURLParam(this.id);
|
|
34
32
|
}
|
|
35
33
|
this.useUrlParams = useUrlParams;
|
|
36
34
|
}
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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.
|
|
60
|
-
clearInterval(this.
|
|
61
|
-
this.
|
|
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(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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 =
|
|
89
|
+
let csv = 'Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\n';
|
|
81
90
|
resultRecords.forEach((record) => {
|
|
82
|
-
csv += record.playerSentTimestamp +
|
|
83
|
-
csv +=
|
|
84
|
-
csv +=
|
|
85
|
-
csv +=
|
|
86
|
-
csv +=
|
|
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.
|
|
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 ?
|
|
126
|
-
}
|
|
131
|
+
Filler: requestSize ? 'A'.repeat(requestSize) : ''
|
|
132
|
+
};
|
|
127
133
|
}
|
|
128
|
-
|
|
129
134
|
}
|