@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
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
|
|
12
|
+
import { OptionParameters, Flags } from '../Config/Config';
|
|
13
|
+
import { AggregatedStats } from './AggregatedStats';
|
|
14
|
+
import { parseRtpParameters, splitSections } from 'sdp';
|
|
15
|
+
import { RTCUtils } from '../Util/RTCUtils';
|
|
16
|
+
/**
|
|
17
|
+
* Handles the Peer Connection
|
|
18
|
+
*/
|
|
19
|
+
export class PeerConnectionController {
|
|
20
|
+
/**
|
|
21
|
+
* Create a new RTC Peer Connection client
|
|
22
|
+
* @param options - Peer connection Options
|
|
23
|
+
* @param config - The config for our PS experience.
|
|
24
|
+
*/
|
|
25
|
+
constructor(options, config, preferredCodec) {
|
|
26
|
+
this.config = config;
|
|
27
|
+
this.createPeerConnection(options, preferredCodec);
|
|
28
|
+
}
|
|
29
|
+
createPeerConnection(options, preferredCodec) {
|
|
30
|
+
// Set the ICE transport to relay if TURN enabled
|
|
31
|
+
if (this.config.isFlagEnabled(Flags.ForceTURN)) {
|
|
32
|
+
options.iceTransportPolicy = 'relay';
|
|
33
|
+
Logger.Info('Forcing TURN usage by setting ICE Transport Policy in peer connection config.');
|
|
34
|
+
}
|
|
35
|
+
// build a new peer connection with the options
|
|
36
|
+
this.peerConnection = new RTCPeerConnection(options);
|
|
37
|
+
this.peerConnection.onsignalingstatechange = (ev) => this.handleSignalStateChange(ev);
|
|
38
|
+
this.peerConnection.oniceconnectionstatechange = (ev) => this.handleIceConnectionStateChange(ev);
|
|
39
|
+
this.peerConnection.onicegatheringstatechange = (ev) => this.handleIceGatheringStateChange(ev);
|
|
40
|
+
this.peerConnection.ontrack = (ev) => this.handleOnTrack(ev);
|
|
41
|
+
this.peerConnection.onicecandidate = (ev) => this.handleIceCandidate(ev);
|
|
42
|
+
this.peerConnection.ondatachannel = (ev) => this.handleDataChannel(ev);
|
|
43
|
+
this.aggregatedStats = new AggregatedStats();
|
|
44
|
+
this.preferredCodec = preferredCodec;
|
|
45
|
+
this.updateCodecSelection = true;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create an offer for the Web RTC handshake and send the offer to the signaling server via websocket
|
|
49
|
+
* @param offerOptions - RTC Offer Options
|
|
50
|
+
*/
|
|
51
|
+
createOffer(offerOptions, config) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
Logger.Info('Create Offer');
|
|
54
|
+
const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';
|
|
55
|
+
const isHttpsConnection = location.protocol === 'https:';
|
|
56
|
+
let useMic = config.isFlagEnabled(Flags.UseMic);
|
|
57
|
+
let useCamera = config.isFlagEnabled(Flags.UseCamera);
|
|
58
|
+
if ((useMic || useCamera) && !(isLocalhostConnection || isHttpsConnection)) {
|
|
59
|
+
useMic = false;
|
|
60
|
+
useCamera = false;
|
|
61
|
+
Logger.Error('Microphone and Webcam access in the browser will not work if you are not on HTTPS or localhost. Disabling mic and webcam access.');
|
|
62
|
+
Logger.Error("For testing you can enable HTTP microphone access Chrome by visiting chrome://flags/ and enabling 'unsafely-treat-insecure-origin-as-secure'");
|
|
63
|
+
}
|
|
64
|
+
this.setupTransceiversAsync(useMic, useCamera).finally(() => {
|
|
65
|
+
var _a;
|
|
66
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.createOffer(offerOptions).then((offer) => {
|
|
67
|
+
var _a;
|
|
68
|
+
this.showTextOverlayConnecting();
|
|
69
|
+
offer.sdp = this.mungeSDP(offer.sdp, useMic);
|
|
70
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(offer);
|
|
71
|
+
this.onSendWebRTCOffer(offer);
|
|
72
|
+
}).catch(() => {
|
|
73
|
+
this.showTextOverlaySetupFailure();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
*/
|
|
81
|
+
receiveOffer(offer, config) {
|
|
82
|
+
var _a;
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
Logger.Info('Receive Offer');
|
|
85
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(offer).then(() => {
|
|
86
|
+
const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';
|
|
87
|
+
const isHttpsConnection = location.protocol === 'https:';
|
|
88
|
+
let useMic = config.isFlagEnabled(Flags.UseMic);
|
|
89
|
+
let useCamera = config.isFlagEnabled(Flags.UseCamera);
|
|
90
|
+
if ((useMic || useCamera) && !(isLocalhostConnection || isHttpsConnection)) {
|
|
91
|
+
useMic = false;
|
|
92
|
+
useCamera = false;
|
|
93
|
+
Logger.Error('Microphone and Webcam access in the browser will not work if you are not on HTTPS or localhost. Disabling mic and webcam access.');
|
|
94
|
+
Logger.Error("For testing you can enable HTTP microphone access Chrome by visiting chrome://flags/ and enabling 'unsafely-treat-insecure-origin-as-secure'");
|
|
95
|
+
}
|
|
96
|
+
// Add our list of preferred codecs, in order of preference
|
|
97
|
+
this.config.setOptionSettingOptions(OptionParameters.PreferredCodec, this.fuzzyIntersectUEAndBrowserCodecs(offer));
|
|
98
|
+
this.setupTransceiversAsync(useMic, useCamera).finally(() => {
|
|
99
|
+
var _a;
|
|
100
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.createAnswer().then((Answer) => {
|
|
101
|
+
var _a;
|
|
102
|
+
Answer.sdp = this.mungeSDP(Answer.sdp, useMic);
|
|
103
|
+
return (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(Answer);
|
|
104
|
+
}).then(() => {
|
|
105
|
+
var _a;
|
|
106
|
+
this.onSendWebRTCAnswer((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.currentLocalDescription);
|
|
107
|
+
}).catch(() => {
|
|
108
|
+
Logger.Error('createAnswer() failed');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Set the Remote Descriptor from the signaling server to the RTC Peer Connection
|
|
116
|
+
* @param answer - RTC Session Descriptor from the Signaling Server
|
|
117
|
+
*/
|
|
118
|
+
receiveAnswer(answer) {
|
|
119
|
+
var _a;
|
|
120
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(answer);
|
|
121
|
+
// Add our list of preferred codecs, in order of preference
|
|
122
|
+
this.config.setOptionSettingOptions(OptionParameters.PreferredCodec, this.fuzzyIntersectUEAndBrowserCodecs(answer));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate Aggregated Stats and then fire a onVideo Stats event
|
|
126
|
+
*/
|
|
127
|
+
generateStats() {
|
|
128
|
+
var _a, _b;
|
|
129
|
+
const audioPromise = this.audioTrack
|
|
130
|
+
? (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats(this.audioTrack).then((statsData) => {
|
|
131
|
+
this.aggregatedStats.processStats(statsData);
|
|
132
|
+
})
|
|
133
|
+
: Promise.resolve();
|
|
134
|
+
const videoPromise = this.videoTrack
|
|
135
|
+
? (_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.getStats(this.videoTrack).then((statsData) => {
|
|
136
|
+
this.aggregatedStats.processStats(statsData);
|
|
137
|
+
})
|
|
138
|
+
: Promise.resolve();
|
|
139
|
+
Promise.allSettled([audioPromise, videoPromise]).then(() => {
|
|
140
|
+
this.onVideoStats(this.aggregatedStats);
|
|
141
|
+
// Update the preferred codec selection based on what was actually negotiated
|
|
142
|
+
if (this.updateCodecSelection && !!this.aggregatedStats.inboundVideoStats.codecId) {
|
|
143
|
+
// Construct the qualified codec name from the mimetype and fmtp
|
|
144
|
+
const codecStats = this.aggregatedStats.codecs.get(this.aggregatedStats.inboundVideoStats.codecId);
|
|
145
|
+
const codecShortname = codecStats.mimeType.replace('video/', '');
|
|
146
|
+
let fullCodecName = codecShortname;
|
|
147
|
+
if (codecStats.sdpFmtpLine && codecStats.sdpFmtpLine.trim() !== '') {
|
|
148
|
+
fullCodecName = `${codecShortname} ${codecStats.sdpFmtpLine.trim()}`;
|
|
149
|
+
}
|
|
150
|
+
const allBrowserCodecs = this.config.getSettingOption(OptionParameters.PreferredCodec).options;
|
|
151
|
+
// The list of codecs directly contains the one that was negotiated, select that
|
|
152
|
+
if (allBrowserCodecs.includes(fullCodecName)) {
|
|
153
|
+
this.config.setOptionSettingValue(OptionParameters.PreferredCodec, fullCodecName);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// If we couldn't match on the full name, try to match on just the codec shortname
|
|
157
|
+
const filteredList = allBrowserCodecs.filter((option) => option.indexOf(codecShortname) !== -1);
|
|
158
|
+
if (filteredList.length > 0) {
|
|
159
|
+
this.config.setOptionSettingValue(OptionParameters.PreferredCodec, filteredList[0]);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Close The Peer Connection
|
|
167
|
+
*/
|
|
168
|
+
close() {
|
|
169
|
+
if (this.peerConnection) {
|
|
170
|
+
this.peerConnection.close();
|
|
171
|
+
this.peerConnection = null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Modify the Session Descriptor
|
|
176
|
+
* @param sdp - Session Descriptor as a string
|
|
177
|
+
* @param useMic - Is the microphone in use
|
|
178
|
+
* @returns A modified Session Descriptor
|
|
179
|
+
*/
|
|
180
|
+
mungeSDP(sdp, useMic) {
|
|
181
|
+
let mungedSDP = sdp.replace(/(a=fmtp:\d+ .*level-asymmetry-allowed=.*)\r\n/gm, '$1;x-google-start-bitrate=10000;x-google-max-bitrate=100000\r\n');
|
|
182
|
+
// set max bitrate to highest bitrate Opus supports
|
|
183
|
+
let audioSDP = 'maxaveragebitrate=510000;';
|
|
184
|
+
if (useMic) {
|
|
185
|
+
// set the max capture rate to 48khz (so we can send high quality audio from mic)
|
|
186
|
+
audioSDP += 'sprop-maxcapturerate=48000;';
|
|
187
|
+
}
|
|
188
|
+
// Force mono or stereo based on whether ?forceMono was passed or not
|
|
189
|
+
audioSDP += this.config.isFlagEnabled(Flags.ForceMonoAudio) ? 'stereo=0;' : 'stereo=1;';
|
|
190
|
+
// enable in-band forward error correction for opus audio
|
|
191
|
+
audioSDP += 'useinbandfec=1';
|
|
192
|
+
// We use the line 'useinbandfec=1' (which Opus uses) to set our Opus specific audio parameters.
|
|
193
|
+
mungedSDP = mungedSDP.replace('useinbandfec=1', audioSDP);
|
|
194
|
+
return mungedSDP;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* When a Ice Candidate is received add to the RTC Peer Connection
|
|
198
|
+
* @param iceCandidate - RTC Ice Candidate from the Signaling Server
|
|
199
|
+
*/
|
|
200
|
+
handleOnIce(iceCandidate) {
|
|
201
|
+
var _a;
|
|
202
|
+
Logger.Info('peerconnection handleOnIce');
|
|
203
|
+
// // if forcing TURN, reject any candidates not relay
|
|
204
|
+
if (this.config.isFlagEnabled(Flags.ForceTURN)) {
|
|
205
|
+
// check if no relay address is found, if so, we are assuming it means no TURN server
|
|
206
|
+
if (iceCandidate.candidate.indexOf('relay') < 0) {
|
|
207
|
+
Logger.Info(`Dropping candidate because it was not TURN relay. | Type= ${iceCandidate.type} | Protocol= ${iceCandidate.protocol} | Address=${iceCandidate.address} | Port=${iceCandidate.port} |`);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
(_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.addIceCandidate(iceCandidate);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* When the RTC Peer Connection Signaling server state Changes
|
|
215
|
+
* @param state - Signaling Server State Change Event
|
|
216
|
+
*/
|
|
217
|
+
handleSignalStateChange(state) {
|
|
218
|
+
Logger.Info('signaling state change: ' + state);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Handle when the Ice Connection State Changes
|
|
222
|
+
* @param state - Ice Connection State
|
|
223
|
+
*/
|
|
224
|
+
handleIceConnectionStateChange(state) {
|
|
225
|
+
Logger.Info('ice connection state change: ' + state);
|
|
226
|
+
this.onIceConnectionStateChange(state);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Handle when the Ice Gathering State Changes
|
|
230
|
+
* @param state - Ice Gathering State Change
|
|
231
|
+
*/
|
|
232
|
+
handleIceGatheringStateChange(state) {
|
|
233
|
+
Logger.Info('ice gathering state change: ' + JSON.stringify(state));
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Activates the onTrack method
|
|
237
|
+
* @param event - The webRtc track event
|
|
238
|
+
*/
|
|
239
|
+
handleOnTrack(event) {
|
|
240
|
+
if (event.streams.length < 1 || event.streams[0].id == 'probator') {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (event.track.kind == 'video') {
|
|
244
|
+
this.videoTrack = event.track;
|
|
245
|
+
}
|
|
246
|
+
if (event.track.kind == 'audio') {
|
|
247
|
+
this.audioTrack = event.track;
|
|
248
|
+
}
|
|
249
|
+
this.onTrack(event);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Activates the onPeerIceCandidate
|
|
253
|
+
* @param event - The peer ice candidate
|
|
254
|
+
*/
|
|
255
|
+
handleIceCandidate(event) {
|
|
256
|
+
this.onPeerIceCandidate(event);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Activates the onDataChannel
|
|
260
|
+
* @param event - The peer's data channel
|
|
261
|
+
*/
|
|
262
|
+
handleDataChannel(event) {
|
|
263
|
+
this.onDataChannel(event);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* An override method for onTrack for use outside of the PeerConnectionController
|
|
267
|
+
* @param trackEvent - The webRtc track event
|
|
268
|
+
*/
|
|
269
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
270
|
+
onTrack(trackEvent) {
|
|
271
|
+
// Default Functionality: Do Nothing
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* An override method for onIceConnectionStateChange for use outside of the PeerConnectionController
|
|
275
|
+
* @param event - The webRtc iceconnectionstatechange event
|
|
276
|
+
*/
|
|
277
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
278
|
+
onIceConnectionStateChange(event) {
|
|
279
|
+
// Default Functionality: Do Nothing
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* An override method for onPeerIceCandidate for use outside of the PeerConnectionController
|
|
283
|
+
* @param peerConnectionIceEvent - The peer ice candidate
|
|
284
|
+
*/
|
|
285
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
286
|
+
onPeerIceCandidate(peerConnectionIceEvent) {
|
|
287
|
+
// Default Functionality: Do Nothing
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* An override method for onDataChannel for use outside of the PeerConnectionController
|
|
291
|
+
* @param datachannelEvent - The peer's data channel
|
|
292
|
+
*/
|
|
293
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
294
|
+
onDataChannel(datachannelEvent) {
|
|
295
|
+
// Default Functionality: Do Nothing
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Find the intersection between UE and browser codecs, with fuzzy matching if some parameters are mismatched.
|
|
299
|
+
* @param sdp The remote sdp
|
|
300
|
+
* @returns The intersection between browser supported codecs and ue supported codecs.
|
|
301
|
+
*/
|
|
302
|
+
fuzzyIntersectUEAndBrowserCodecs(sdp) {
|
|
303
|
+
// We want to build an array of all supported codecs on both sides
|
|
304
|
+
const allSupportedCodecs = new Array();
|
|
305
|
+
const allUECodecs = this.parseAvailableCodecs(sdp);
|
|
306
|
+
const allBrowserCodecs = this.config.getSettingOption(OptionParameters.PreferredCodec).options;
|
|
307
|
+
for (const ueCodec of allUECodecs) {
|
|
308
|
+
// Check if browser codecs directly matches UE codec (with parameters and everything)
|
|
309
|
+
if (allBrowserCodecs.includes(ueCodec)) {
|
|
310
|
+
allSupportedCodecs.push(ueCodec);
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
// Otherwise check if browser codec at least contains a match for the UE codec name (without parameters).
|
|
314
|
+
else {
|
|
315
|
+
const ueCodecNameAndParams = ueCodec.split(' ');
|
|
316
|
+
const ueCodecName = ueCodecNameAndParams[0];
|
|
317
|
+
for (const browserCodec of allBrowserCodecs) {
|
|
318
|
+
if (browserCodec.includes(ueCodecName)) {
|
|
319
|
+
// We pass browser codec here as they option contain extra parameters.
|
|
320
|
+
allSupportedCodecs.push(browserCodec);
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return allSupportedCodecs;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Setup tracks on the RTC Peer Connection
|
|
330
|
+
* @param useMic - is mic in use
|
|
331
|
+
* @param useCamera - is webcam in use
|
|
332
|
+
*/
|
|
333
|
+
setupTransceiversAsync(useMic, useCamera) {
|
|
334
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
335
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
336
|
+
let hasVideoReceiver = false;
|
|
337
|
+
for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {
|
|
338
|
+
if (transceiver &&
|
|
339
|
+
transceiver.receiver &&
|
|
340
|
+
transceiver.receiver.track &&
|
|
341
|
+
transceiver.receiver.track.kind === 'video') {
|
|
342
|
+
hasVideoReceiver = true;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Setup a transceiver for sending webcam video to UE and receiving video from UE
|
|
347
|
+
if (!useCamera) {
|
|
348
|
+
if (!hasVideoReceiver) {
|
|
349
|
+
(_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver('video', { direction: 'recvonly' });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
yield this.setupVideoSender(hasVideoReceiver);
|
|
354
|
+
}
|
|
355
|
+
if (RTCRtpReceiver.getCapabilities && this.preferredCodec != '') {
|
|
356
|
+
for (const transceiver of (_e = (_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.getTransceivers()) !== null && _e !== void 0 ? _e : []) {
|
|
357
|
+
if (transceiver &&
|
|
358
|
+
transceiver.receiver &&
|
|
359
|
+
transceiver.receiver.track &&
|
|
360
|
+
transceiver.receiver.track.kind === 'video' &&
|
|
361
|
+
transceiver.setCodecPreferences) {
|
|
362
|
+
// Get our preferred codec from the codecs options drop down
|
|
363
|
+
const preferredRTPCodec = this.preferredCodec.split(' ');
|
|
364
|
+
const preferredRTCRtpCodecCapability = {
|
|
365
|
+
mimeType: 'video/' + preferredRTPCodec[0] /* Name */,
|
|
366
|
+
clockRate: 90000 /* All current video formats in browsers have 90khz clock rate */,
|
|
367
|
+
sdpFmtpLine: preferredRTPCodec[1] ? preferredRTPCodec[1] : ''
|
|
368
|
+
};
|
|
369
|
+
// Populate a list of codecs we will support with our preferred one in the first position
|
|
370
|
+
const ourSupportedCodecs = [preferredRTCRtpCodecCapability];
|
|
371
|
+
// Go through all codecs the browser supports and add them to the list (in any order)
|
|
372
|
+
RTCRtpReceiver.getCapabilities('video').codecs.forEach((browserSupportedCodec) => {
|
|
373
|
+
// Don't add our preferred codec again, but add everything else
|
|
374
|
+
if (browserSupportedCodec.mimeType != preferredRTCRtpCodecCapability.mimeType) {
|
|
375
|
+
ourSupportedCodecs.push(browserSupportedCodec);
|
|
376
|
+
}
|
|
377
|
+
else if ((browserSupportedCodec === null || browserSupportedCodec === void 0 ? void 0 : browserSupportedCodec.sdpFmtpLine) !=
|
|
378
|
+
(preferredRTCRtpCodecCapability === null || preferredRTCRtpCodecCapability === void 0 ? void 0 : preferredRTCRtpCodecCapability.sdpFmtpLine)) {
|
|
379
|
+
ourSupportedCodecs.push(browserSupportedCodec);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
for (const codec of ourSupportedCodecs) {
|
|
383
|
+
if ((codec === null || codec === void 0 ? void 0 : codec.sdpFmtpLine) === undefined || codec.sdpFmtpLine === '') {
|
|
384
|
+
// We can't dynamically add members to the codec, so instead remove the field if it's empty
|
|
385
|
+
delete codec.sdpFmtpLine;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
transceiver.setCodecPreferences(ourSupportedCodecs);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
let hasAudioReceiver = false;
|
|
393
|
+
for (const transceiver of (_g = (_f = this.peerConnection) === null || _f === void 0 ? void 0 : _f.getTransceivers()) !== null && _g !== void 0 ? _g : []) {
|
|
394
|
+
if (transceiver &&
|
|
395
|
+
transceiver.receiver &&
|
|
396
|
+
transceiver.receiver.track &&
|
|
397
|
+
transceiver.receiver.track.kind === 'audio') {
|
|
398
|
+
hasAudioReceiver = true;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// Setup a transceiver for sending mic audio to UE and receiving audio from UE
|
|
403
|
+
if (!useMic) {
|
|
404
|
+
if (!hasAudioReceiver) {
|
|
405
|
+
(_h = this.peerConnection) === null || _h === void 0 ? void 0 : _h.addTransceiver('audio', {
|
|
406
|
+
direction: 'recvonly'
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
yield this.setupAudioSender(hasAudioReceiver);
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
setupVideoSender(hasVideoReceiver) {
|
|
416
|
+
var _a, _b, _c, _d;
|
|
417
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
418
|
+
// set the media send options
|
|
419
|
+
const mediaSendOptions = {
|
|
420
|
+
video: true
|
|
421
|
+
};
|
|
422
|
+
// Note using webcam on android chrome requires SSL or chrome://flags/ "unsafely-treat-insecure-origin-as-secure"
|
|
423
|
+
const stream = yield navigator.mediaDevices.getUserMedia(mediaSendOptions);
|
|
424
|
+
if (stream) {
|
|
425
|
+
if (hasVideoReceiver) {
|
|
426
|
+
for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {
|
|
427
|
+
if (RTCUtils.canTransceiverReceiveVideo(transceiver)) {
|
|
428
|
+
for (const track of stream.getTracks()) {
|
|
429
|
+
if (track.kind && track.kind == 'video') {
|
|
430
|
+
transceiver.sender.replaceTrack(track);
|
|
431
|
+
transceiver.direction = 'sendrecv';
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
for (const track of stream.getTracks()) {
|
|
439
|
+
if (track.kind && track.kind == 'video') {
|
|
440
|
+
(_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver(track, {
|
|
441
|
+
direction: 'sendrecv'
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
if (!hasVideoReceiver) {
|
|
449
|
+
(_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.addTransceiver('video', { direction: 'recvonly' });
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
setupAudioSender(hasAudioReceiver) {
|
|
455
|
+
var _a, _b, _c, _d;
|
|
456
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
457
|
+
// set the audio options based on mic usage
|
|
458
|
+
const audioOptions = {
|
|
459
|
+
autoGainControl: false,
|
|
460
|
+
channelCount: 1,
|
|
461
|
+
echoCancellation: false,
|
|
462
|
+
latency: 0,
|
|
463
|
+
noiseSuppression: false,
|
|
464
|
+
sampleRate: 48000,
|
|
465
|
+
sampleSize: 16,
|
|
466
|
+
volume: 1.0
|
|
467
|
+
};
|
|
468
|
+
// set the media send options
|
|
469
|
+
const mediaSendOptions = {
|
|
470
|
+
video: false,
|
|
471
|
+
audio: audioOptions
|
|
472
|
+
};
|
|
473
|
+
// Note using mic on android chrome requires SSL or chrome://flags/ "unsafely-treat-insecure-origin-as-secure"
|
|
474
|
+
const stream = yield navigator.mediaDevices.getUserMedia(mediaSendOptions);
|
|
475
|
+
if (stream) {
|
|
476
|
+
if (hasAudioReceiver) {
|
|
477
|
+
for (const transceiver of (_b = (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : []) {
|
|
478
|
+
if (RTCUtils.canTransceiverReceiveAudio(transceiver)) {
|
|
479
|
+
for (const track of stream.getTracks()) {
|
|
480
|
+
if (track.kind && track.kind == 'audio') {
|
|
481
|
+
transceiver.sender.replaceTrack(track);
|
|
482
|
+
transceiver.direction = 'sendrecv';
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
for (const track of stream.getTracks()) {
|
|
490
|
+
if (track.kind && track.kind == 'audio') {
|
|
491
|
+
(_c = this.peerConnection) === null || _c === void 0 ? void 0 : _c.addTransceiver(track, {
|
|
492
|
+
direction: 'sendrecv'
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
if (!hasAudioReceiver) {
|
|
500
|
+
(_d = this.peerConnection) === null || _d === void 0 ? void 0 : _d.addTransceiver('audio', {
|
|
501
|
+
direction: 'recvonly'
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* And override event for when the video stats are fired
|
|
509
|
+
* @param event - Aggregated Stats
|
|
510
|
+
*/
|
|
511
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
512
|
+
onVideoStats(event) {
|
|
513
|
+
// Default Functionality: Do Nothing
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Event to send the RTC offer to the Signaling server
|
|
517
|
+
* @param offer - RTC Offer
|
|
518
|
+
*/
|
|
519
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
520
|
+
onSendWebRTCOffer(offer) {
|
|
521
|
+
// Default Functionality: Do Nothing
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Event to send the RTC Answer to the Signaling server
|
|
525
|
+
* @param answer - RTC Answer
|
|
526
|
+
*/
|
|
527
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
528
|
+
onSendWebRTCAnswer(answer) {
|
|
529
|
+
// Default Functionality: Do Nothing
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* An override for showing the Peer connection connecting Overlay
|
|
533
|
+
*/
|
|
534
|
+
showTextOverlayConnecting() {
|
|
535
|
+
// Default Functionality: Do Nothing
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* An override for showing the Peer connection Failed overlay
|
|
539
|
+
*/
|
|
540
|
+
showTextOverlaySetupFailure() {
|
|
541
|
+
// Default Functionality: Do Nothing
|
|
542
|
+
}
|
|
543
|
+
parseAvailableCodecs(rtcSessionDescription) {
|
|
544
|
+
// No point in updating the available codecs if on FF
|
|
545
|
+
if (!RTCRtpReceiver.getCapabilities)
|
|
546
|
+
return ['Only available on Chrome'];
|
|
547
|
+
const ueSupportedCodecs = [];
|
|
548
|
+
const sections = splitSections(rtcSessionDescription.sdp);
|
|
549
|
+
// discard the session information as we only want media related info
|
|
550
|
+
sections.shift();
|
|
551
|
+
sections.forEach((mediaSection) => {
|
|
552
|
+
const { codecs } = parseRtpParameters(mediaSection);
|
|
553
|
+
// Filter only for VPX / H26X / AV1
|
|
554
|
+
const matcher = /(VP\d|H26\d|AV1).*/;
|
|
555
|
+
codecs.forEach((c) => {
|
|
556
|
+
const str = c.name +
|
|
557
|
+
' ' +
|
|
558
|
+
Object.keys(c.parameters || {})
|
|
559
|
+
.map((p) => p + '=' + c.parameters[p])
|
|
560
|
+
.join(';');
|
|
561
|
+
const match = matcher.exec(str);
|
|
562
|
+
if (match !== null) {
|
|
563
|
+
if (c.name == 'VP9') {
|
|
564
|
+
// UE answers don't specify profile but we know we want profile 0
|
|
565
|
+
c.parameters = {
|
|
566
|
+
'profile-id': '0'
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
const codecStr = c.name +
|
|
570
|
+
' ' +
|
|
571
|
+
Object.keys(c.parameters || {})
|
|
572
|
+
.map((p) => p + '=' + c.parameters[p])
|
|
573
|
+
.join(';');
|
|
574
|
+
ueSupportedCodecs.push(codecStr);
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
});
|
|
578
|
+
return ueSupportedCodecs;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=PeerConnectionController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerConnectionController.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/PeerConnectionController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionStats.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/SessionStats.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD;;GAEG;AACH,MAAM,OAAO,YAAY;CAIxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamStats.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/StreamStats.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD;;GAEG;AACH,MAAM,OAAO,WAAW;CAKvB"}
|