@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/AFK/AFKController.js.map +1 -1
- package/dist/commonjs/Config/Config.js +30 -6
- package/dist/commonjs/Config/Config.js.map +1 -1
- package/dist/commonjs/Config/SettingBase.js.map +1 -1
- package/dist/commonjs/Config/SettingFlag.js.map +1 -1
- package/dist/commonjs/Config/SettingNumber.js.map +1 -1
- package/dist/commonjs/Config/SettingOption.js.map +1 -1
- package/dist/commonjs/Config/SettingText.js.map +1 -1
- package/dist/commonjs/DataChannel/DataChannelController.js.map +1 -1
- package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js.map +1 -1
- package/dist/commonjs/DataChannel/DataChannelSender.js.map +1 -1
- package/dist/commonjs/DataChannel/InitialSettings.js.map +1 -1
- package/dist/commonjs/DataChannel/LatencyTestResults.js.map +1 -1
- package/dist/commonjs/FreezeFrame/FreezeFrame.js.map +1 -1
- package/dist/commonjs/FreezeFrame/FreezeFrameController.js.map +1 -1
- package/dist/commonjs/Inputs/GamepadController.js +1 -1
- package/dist/commonjs/Inputs/GamepadController.js.map +1 -1
- package/dist/commonjs/Inputs/GamepadTypes.js +1 -2
- package/dist/commonjs/Inputs/GamepadTypes.js.map +1 -1
- package/dist/commonjs/Inputs/InputClassesFactory.js.map +1 -1
- package/dist/commonjs/Inputs/KeyboardController.js.map +1 -1
- package/dist/commonjs/Inputs/MouseController.js.map +1 -1
- package/dist/commonjs/Inputs/MouseControllerHovering.js.map +1 -1
- package/dist/commonjs/Inputs/MouseControllerLocked.js.map +1 -1
- package/dist/commonjs/Inputs/TouchController.js.map +1 -1
- package/dist/commonjs/Inputs/TouchControllerFake.js.map +1 -1
- package/dist/commonjs/Inputs/XRGamepadController.js.map +1 -1
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +1 -1
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +4 -4
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +1 -1
- package/dist/commonjs/PixelStreaming/PixelStreaming.js +66 -10
- package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +1 -1
- package/dist/commonjs/UI/OnScreenKeyboard.js.map +1 -1
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js +1 -0
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js.map +1 -1
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +1 -1
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js.map +1 -1
- package/dist/commonjs/Util/EventEmitter.js.map +1 -1
- package/dist/commonjs/Util/FileUtil.js.map +1 -1
- package/dist/commonjs/Util/IURLSearchParams.js.map +1 -1
- package/dist/commonjs/Util/InputCoordTranslator.js.map +1 -1
- package/dist/commonjs/VideoPlayer/StreamController.js.map +1 -1
- package/dist/commonjs/VideoPlayer/VideoPlayer.js.map +1 -1
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +94 -1
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
- package/dist/commonjs/WebXR/WebXRController.js +2 -2
- package/dist/commonjs/WebXR/WebXRController.js.map +1 -1
- package/dist/commonjs/pixelstreamingfrontend.js +5 -1
- package/dist/commonjs/pixelstreamingfrontend.js.map +1 -1
- package/dist/esm/AFK/AFKController.js +20 -16
- package/dist/esm/AFK/AFKController.js.map +1 -1
- package/dist/esm/Config/Config.js +92 -60
- package/dist/esm/Config/Config.js.map +1 -1
- package/dist/esm/Config/SettingBase.js +5 -1
- package/dist/esm/Config/SettingBase.js.map +1 -1
- package/dist/esm/Config/SettingFlag.js +6 -2
- package/dist/esm/Config/SettingFlag.js.map +1 -1
- package/dist/esm/Config/SettingNumber.js +6 -2
- package/dist/esm/Config/SettingNumber.js.map +1 -1
- package/dist/esm/Config/SettingOption.js +8 -4
- package/dist/esm/Config/SettingOption.js.map +1 -1
- package/dist/esm/Config/SettingText.js +6 -2
- package/dist/esm/Config/SettingText.js.map +1 -1
- package/dist/esm/DataChannel/DataChannelController.js +10 -6
- package/dist/esm/DataChannel/DataChannelController.js.map +1 -1
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js +9 -5
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js.map +1 -1
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +5 -1
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js.map +1 -1
- package/dist/esm/DataChannel/DataChannelSender.js +8 -4
- package/dist/esm/DataChannel/DataChannelSender.js.map +1 -1
- package/dist/esm/DataChannel/InitialSettings.js +11 -4
- package/dist/esm/DataChannel/InitialSettings.js.map +1 -1
- package/dist/esm/DataChannel/LatencyTestResults.js +8 -4
- package/dist/esm/DataChannel/LatencyTestResults.js.map +1 -1
- package/dist/esm/FreezeFrame/FreezeFrame.js +5 -1
- package/dist/esm/FreezeFrame/FreezeFrame.js.map +1 -1
- package/dist/esm/FreezeFrame/FreezeFrameController.js +11 -7
- package/dist/esm/FreezeFrame/FreezeFrameController.js.map +1 -1
- package/dist/esm/Inputs/GamepadController.js +11 -7
- package/dist/esm/Inputs/GamepadController.js.map +1 -1
- package/dist/esm/Inputs/GamepadTypes.js +4 -1
- package/dist/esm/Inputs/GamepadTypes.js.map +1 -1
- package/dist/esm/Inputs/IInputController.js +2 -1
- package/dist/esm/Inputs/InputClassesFactory.js +26 -21
- package/dist/esm/Inputs/InputClassesFactory.js.map +1 -1
- package/dist/esm/Inputs/KeyCodes.js +4 -1
- package/dist/esm/Inputs/KeyCodes.js.map +1 -1
- package/dist/esm/Inputs/KeyboardController.js +22 -18
- package/dist/esm/Inputs/KeyboardController.js.map +1 -1
- package/dist/esm/Inputs/MouseButtons.js +7 -2
- package/dist/esm/Inputs/MouseButtons.js.map +1 -1
- package/dist/esm/Inputs/MouseController.js +26 -22
- package/dist/esm/Inputs/MouseController.js.map +1 -1
- package/dist/esm/Inputs/MouseControllerHovering.js +6 -2
- package/dist/esm/Inputs/MouseControllerHovering.js.map +1 -1
- package/dist/esm/Inputs/MouseControllerLocked.js +9 -5
- package/dist/esm/Inputs/MouseControllerLocked.js.map +1 -1
- package/dist/esm/Inputs/SpecialKeyCodes.js +5 -1
- package/dist/esm/Inputs/SpecialKeyCodes.js.map +1 -1
- package/dist/esm/Inputs/TouchController.js +8 -4
- package/dist/esm/Inputs/TouchController.js.map +1 -1
- package/dist/esm/Inputs/TouchControllerFake.js +8 -4
- package/dist/esm/Inputs/TouchControllerFake.js.map +1 -1
- package/dist/esm/Inputs/XRGamepadController.js +8 -4
- package/dist/esm/Inputs/XRGamepadController.js.map +1 -1
- package/dist/esm/PeerConnectionController/AggregatedStats.js +23 -19
- package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/CandidatePairStats.js +5 -1
- package/dist/esm/PeerConnectionController/CandidatePairStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/CandidateStat.js +5 -1
- package/dist/esm/PeerConnectionController/CandidateStat.js.map +1 -1
- package/dist/esm/PeerConnectionController/CodecStats.js +5 -1
- package/dist/esm/PeerConnectionController/CodecStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/DataChannelStats.js +5 -1
- package/dist/esm/PeerConnectionController/DataChannelStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/InboundRTPStats.js +9 -3
- package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/InboundTrackStats.js +5 -1
- package/dist/esm/PeerConnectionController/InboundTrackStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +7 -2
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/PeerConnectionController.js +45 -41
- package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
- package/dist/esm/PeerConnectionController/SessionStats.js +5 -1
- package/dist/esm/PeerConnectionController/SessionStats.js.map +1 -1
- package/dist/esm/PeerConnectionController/StreamStats.js +5 -1
- package/dist/esm/PeerConnectionController/StreamStats.js.map +1 -1
- package/dist/esm/PixelStreaming/PixelStreaming.js +154 -94
- package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
- package/dist/esm/UI/OnScreenKeyboard.js +5 -1
- package/dist/esm/UI/OnScreenKeyboard.js.map +1 -1
- package/dist/esm/UeInstanceMessage/ResponseController.js +8 -4
- package/dist/esm/UeInstanceMessage/ResponseController.js.map +1 -1
- package/dist/esm/UeInstanceMessage/SendMessageController.js +10 -5
- package/dist/esm/UeInstanceMessage/SendMessageController.js.map +1 -1
- package/dist/esm/UeInstanceMessage/StreamMessageController.js +11 -6
- package/dist/esm/UeInstanceMessage/StreamMessageController.js.map +1 -1
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +5 -1
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js.map +1 -1
- package/dist/esm/Util/EventEmitter.js +79 -38
- package/dist/esm/Util/EventEmitter.js.map +1 -1
- package/dist/esm/Util/FileUtil.js +16 -11
- package/dist/esm/Util/FileUtil.js.map +1 -1
- package/dist/esm/Util/IURLSearchParams.js +5 -1
- package/dist/esm/Util/IURLSearchParams.js.map +1 -1
- package/dist/esm/Util/InputCoordTranslator.js +5 -1
- package/dist/esm/Util/InputCoordTranslator.js.map +1 -1
- package/dist/esm/Util/RTCUtils.js +5 -1
- package/dist/esm/Util/RTCUtils.js.map +1 -1
- package/dist/esm/VideoPlayer/StreamController.js +10 -6
- package/dist/esm/VideoPlayer/StreamController.js.map +1 -1
- package/dist/esm/VideoPlayer/VideoPlayer.js +11 -7
- package/dist/esm/VideoPlayer/VideoPlayer.js.map +1 -1
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +312 -215
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
- package/dist/esm/WebXR/WebXRController.js +16 -12
- package/dist/esm/WebXR/WebXRController.js.map +1 -1
- package/dist/esm/pixelstreamingfrontend.js +73 -23
- package/dist/esm/pixelstreamingfrontend.js.map +1 -1
- package/dist/types/Config/Config.d.ts +9 -0
- package/dist/types/DataChannel/DataChannelController.d.ts +1 -1
- package/dist/types/DataChannel/InitialSettings.d.ts +2 -0
- package/dist/types/Inputs/XRGamepadController.d.ts +0 -1
- package/dist/types/PixelStreaming/PixelStreaming.d.ts +1 -1
- package/dist/types/Util/EventEmitter.d.ts +0 -1
- package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
- package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +17 -0
- package/dist/types/WebXR/WebXRController.d.ts +0 -1
- package/dist/types/pixelstreamingfrontend.d.ts +1 -1
- package/package.json +8 -8
- package/src/Config/Config.ts +83 -4
- package/src/Config/SettingFlag.ts +3 -3
- package/src/Config/SettingNumber.ts +3 -3
- package/src/Config/SettingOption.ts +3 -3
- package/src/Config/SettingText.ts +4 -4
- package/src/DataChannel/DataChannelController.ts +2 -2
- package/src/DataChannel/InitialSettings.ts +2 -0
- package/src/Inputs/MouseControllerHovering.ts +2 -2
- package/src/Inputs/MouseControllerLocked.ts +2 -2
- package/src/PeerConnectionController/PeerConnectionController.ts +5 -5
- package/src/PixelStreaming/PixelStreaming.ts +94 -15
- package/src/UeInstanceMessage/SendMessageController.ts +1 -0
- package/src/Util/EventEmitter.ts +40 -40
- package/src/VideoPlayer/VideoPlayer.ts +1 -1
- package/src/WebRtcPlayer/WebRtcPlayerController.ts +120 -1
- package/src/WebXR/WebXRController.ts +1 -1
- package/src/__test__/mockRTCRtpReceiver.ts +1 -1
- package/src/__test__/mockWebSocket.ts +3 -3
- package/src/pixelstreamingfrontend.ts +6 -1
- package/tsconfig.esm.json +2 -1
- package/tsconfig.json +6 -2
|
@@ -1,28 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.WebRtcPlayerController = void 0;
|
|
5
|
+
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
+
const StreamController_1 = require("../VideoPlayer/StreamController");
|
|
7
|
+
const FreezeFrameController_1 = require("../FreezeFrame/FreezeFrameController");
|
|
8
|
+
const AFKController_1 = require("../AFK/AFKController");
|
|
9
|
+
const DataChannelController_1 = require("../DataChannel/DataChannelController");
|
|
10
|
+
const PeerConnectionController_1 = require("../PeerConnectionController/PeerConnectionController");
|
|
11
|
+
const Config_1 = require("../Config/Config");
|
|
12
|
+
const InitialSettings_1 = require("../DataChannel/InitialSettings");
|
|
13
|
+
const LatencyTestResults_1 = require("../DataChannel/LatencyTestResults");
|
|
14
|
+
const FileUtil_1 = require("../Util/FileUtil");
|
|
15
|
+
const InputClassesFactory_1 = require("../Inputs/InputClassesFactory");
|
|
16
|
+
const VideoPlayer_1 = require("../VideoPlayer/VideoPlayer");
|
|
17
|
+
const StreamMessageController_1 = require("../UeInstanceMessage/StreamMessageController");
|
|
18
|
+
const ResponseController_1 = require("../UeInstanceMessage/ResponseController");
|
|
19
|
+
const SendMessageController_1 = require("../UeInstanceMessage/SendMessageController");
|
|
20
|
+
const ToStreamerMessagesController_1 = require("../UeInstanceMessage/ToStreamerMessagesController");
|
|
21
|
+
const DataChannelSender_1 = require("../DataChannel/DataChannelSender");
|
|
22
|
+
const InputCoordTranslator_1 = require("../Util/InputCoordTranslator");
|
|
23
|
+
const EventEmitter_1 = require("../Util/EventEmitter");
|
|
24
|
+
const IURLSearchParams_1 = require("../Util/IURLSearchParams");
|
|
22
25
|
/**
|
|
23
26
|
* Entry point for the WebRTC Player
|
|
24
27
|
*/
|
|
25
|
-
|
|
28
|
+
class WebRtcPlayerController {
|
|
26
29
|
/**
|
|
27
30
|
*
|
|
28
31
|
* @param config - the frontend config object
|
|
@@ -33,19 +36,19 @@ export class WebRtcPlayerController {
|
|
|
33
36
|
this.autoJoinTimer = undefined;
|
|
34
37
|
this.config = config;
|
|
35
38
|
this.pixelStreaming = pixelStreaming;
|
|
36
|
-
this.responseController = new ResponseController();
|
|
37
|
-
this.file = new FileTemplate();
|
|
39
|
+
this.responseController = new ResponseController_1.ResponseController();
|
|
40
|
+
this.file = new FileUtil_1.FileTemplate();
|
|
38
41
|
this.sdpConstraints = {
|
|
39
42
|
offerToReceiveAudio: true,
|
|
40
43
|
offerToReceiveVideo: true
|
|
41
44
|
};
|
|
42
45
|
// set up the afk logic class and connect up its method for closing the signaling server
|
|
43
|
-
this.afkController = new AFKController(this.config, this.pixelStreaming, this.onAfkTriggered.bind(this));
|
|
46
|
+
this.afkController = new AFKController_1.AFKController(this.config, this.pixelStreaming, this.onAfkTriggered.bind(this));
|
|
44
47
|
this.afkController.onAFKTimedOutCallback = () => {
|
|
45
48
|
this.closeSignalingServer('You have been disconnected due to inactivity.', false);
|
|
46
49
|
};
|
|
47
|
-
this.freezeFrameController = new FreezeFrameController(this.pixelStreaming.videoElementParent);
|
|
48
|
-
this.videoPlayer = new VideoPlayer(this.pixelStreaming.videoElementParent, this.config);
|
|
50
|
+
this.freezeFrameController = new FreezeFrameController_1.FreezeFrameController(this.pixelStreaming.videoElementParent);
|
|
51
|
+
this.videoPlayer = new VideoPlayer_1.VideoPlayer(this.pixelStreaming.videoElementParent, this.config);
|
|
49
52
|
this.videoPlayer.onVideoInitialized = () => this.handleVideoInitialized();
|
|
50
53
|
// When in match viewport resolution mode, when the browser viewport is resized we send a resize command back to UE.
|
|
51
54
|
this.videoPlayer.onMatchViewportResolutionCallback = (width, height) => {
|
|
@@ -59,41 +62,41 @@ export class WebRtcPlayerController {
|
|
|
59
62
|
this.videoPlayer.onResizePlayerCallback = () => {
|
|
60
63
|
this.setUpMouseAndFreezeFrame();
|
|
61
64
|
};
|
|
62
|
-
this.streamController = new StreamController(this.videoPlayer);
|
|
63
|
-
this.coordinateConverter = new InputCoordTranslator();
|
|
64
|
-
this.sendrecvDataChannelController = new DataChannelController();
|
|
65
|
-
this.recvDataChannelController = new DataChannelController();
|
|
65
|
+
this.streamController = new StreamController_1.StreamController(this.videoPlayer);
|
|
66
|
+
this.coordinateConverter = new InputCoordTranslator_1.InputCoordTranslator();
|
|
67
|
+
this.sendrecvDataChannelController = new DataChannelController_1.DataChannelController();
|
|
68
|
+
this.recvDataChannelController = new DataChannelController_1.DataChannelController();
|
|
66
69
|
this.registerDataChannelEventEmitters(this.sendrecvDataChannelController);
|
|
67
70
|
this.registerDataChannelEventEmitters(this.recvDataChannelController);
|
|
68
|
-
this.dataChannelSender = new DataChannelSender(this.sendrecvDataChannelController);
|
|
71
|
+
this.dataChannelSender = new DataChannelSender_1.DataChannelSender(this.sendrecvDataChannelController);
|
|
69
72
|
this.dataChannelSender.resetAfkWarningTimerOnDataSend = () => this.afkController.resetAfkWarningTimer();
|
|
70
|
-
this.streamMessageController = new StreamMessageController();
|
|
73
|
+
this.streamMessageController = new StreamMessageController_1.StreamMessageController();
|
|
71
74
|
// set up websocket methods
|
|
72
|
-
this.transport = new WebSocketTransport();
|
|
73
|
-
this.protocol = new SignallingProtocol(this.transport);
|
|
74
|
-
this.protocol.addListener(Messages.config.typeName, (msg) => this.handleOnConfigMessage(msg));
|
|
75
|
-
this.protocol.addListener(Messages.streamerList.typeName, (msg) => this.handleStreamerListMessage(msg));
|
|
76
|
-
this.protocol.addListener(Messages.streamerIdChanged.typeName, (msg) => this.handleStreamerIDChangedMessage(msg));
|
|
77
|
-
this.protocol.addListener(Messages.playerCount.typeName, (msg) => {
|
|
75
|
+
this.transport = new lib_pixelstreamingcommon_ue5_5_1.WebSocketTransport();
|
|
76
|
+
this.protocol = new lib_pixelstreamingcommon_ue5_5_1.SignallingProtocol(this.transport);
|
|
77
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.config.typeName, (msg) => this.handleOnConfigMessage(msg));
|
|
78
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.streamerList.typeName, (msg) => this.handleStreamerListMessage(msg));
|
|
79
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.streamerIdChanged.typeName, (msg) => this.handleStreamerIDChangedMessage(msg));
|
|
80
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.playerCount.typeName, (msg) => {
|
|
78
81
|
const playerCountMessage = msg;
|
|
79
82
|
this.pixelStreaming._onPlayerCount(playerCountMessage.count);
|
|
80
83
|
});
|
|
81
|
-
this.protocol.addListener(Messages.answer.typeName, (msg) => this.handleWebRtcAnswer(msg));
|
|
82
|
-
this.protocol.addListener(Messages.offer.typeName, (msg) => this.handleWebRtcOffer(msg));
|
|
83
|
-
this.protocol.addListener(Messages.peerDataChannels.typeName, (msg) => this.handleWebRtcSFUPeerDatachannels(msg));
|
|
84
|
-
this.protocol.addListener(Messages.iceCandidate.typeName, (msg) => {
|
|
84
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.answer.typeName, (msg) => this.handleWebRtcAnswer(msg));
|
|
85
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.offer.typeName, (msg) => this.handleWebRtcOffer(msg));
|
|
86
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.peerDataChannels.typeName, (msg) => this.handleWebRtcSFUPeerDatachannels(msg));
|
|
87
|
+
this.protocol.addListener(lib_pixelstreamingcommon_ue5_5_1.Messages.iceCandidate.typeName, (msg) => {
|
|
85
88
|
const iceCandidateMessage = msg;
|
|
86
89
|
this.handleIceCandidate(iceCandidateMessage.candidate);
|
|
87
90
|
});
|
|
88
91
|
this.protocol.transport.addListener('open', () => {
|
|
89
|
-
const message = MessageHelpers.createMessage(Messages.listStreamers);
|
|
92
|
+
const message = lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.listStreamers);
|
|
90
93
|
this.protocol.sendMessage(message);
|
|
91
94
|
this.reconnectAttempt = 0;
|
|
92
95
|
this.isReconnecting = false;
|
|
93
96
|
});
|
|
94
97
|
this.protocol.transport.addListener('error', () => {
|
|
95
98
|
// dont really need to do anything here since the close event should follow.
|
|
96
|
-
Logger.Error(`Got a transport error.`);
|
|
99
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`Got a transport error.`);
|
|
97
100
|
});
|
|
98
101
|
this.protocol.transport.addListener('close', (event) => {
|
|
99
102
|
// when we refresh the page during a stream we get the going away code.
|
|
@@ -101,7 +104,7 @@ export class WebRtcPlayerController {
|
|
|
101
104
|
// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code
|
|
102
105
|
// lists all the codes.
|
|
103
106
|
const CODE_GOING_AWAY = 1001;
|
|
104
|
-
const maxReconnectAttempts = this.config.getNumericSettingValue(NumericParameters.MaxReconnectAttempts);
|
|
107
|
+
const maxReconnectAttempts = this.config.getNumericSettingValue(Config_1.NumericParameters.MaxReconnectAttempts);
|
|
105
108
|
const attemptsLeft = this.reconnectAttempt < maxReconnectAttempts;
|
|
106
109
|
const reconnectEnabled = this.forceReconnect || (this.enableAutoReconnect && maxReconnectAttempts > 0 && attemptsLeft);
|
|
107
110
|
const willTryReconnect = reconnectEnabled && event.code != CODE_GOING_AWAY;
|
|
@@ -130,19 +133,20 @@ export class WebRtcPlayerController {
|
|
|
130
133
|
}
|
|
131
134
|
});
|
|
132
135
|
// set up the final webRtc player controller methods from within our application so a connection can be activated
|
|
133
|
-
this.sendMessageController = new SendMessageController(this.dataChannelSender, this.streamMessageController);
|
|
134
|
-
this.toStreamerMessagesController = new ToStreamerMessagesController(this.sendMessageController);
|
|
136
|
+
this.sendMessageController = new SendMessageController_1.SendMessageController(this.dataChannelSender, this.streamMessageController);
|
|
137
|
+
this.toStreamerMessagesController = new ToStreamerMessagesController_1.ToStreamerMessagesController(this.sendMessageController);
|
|
135
138
|
this.registerMessageHandlers();
|
|
136
139
|
this.streamMessageController.populateDefaultProtocol();
|
|
137
|
-
this.inputClassesFactory = new InputClassesFactory(this.streamMessageController, this.videoPlayer, this.coordinateConverter);
|
|
140
|
+
this.inputClassesFactory = new InputClassesFactory_1.InputClassesFactory(this.streamMessageController, this.videoPlayer, this.coordinateConverter);
|
|
138
141
|
this.isUsingSFU = false;
|
|
142
|
+
this.isUsingSVC = false;
|
|
139
143
|
this.isQualityController = false;
|
|
140
144
|
this.preferredCodec = '';
|
|
141
145
|
this.enableAutoReconnect = true;
|
|
142
146
|
this.forceReconnect = false;
|
|
143
147
|
this.reconnectAttempt = 0;
|
|
144
148
|
this.isReconnecting = false;
|
|
145
|
-
this.config._addOnOptionSettingChangedListener(OptionParameters.StreamerId, (streamerid) => {
|
|
149
|
+
this.config._addOnOptionSettingChangedListener(Config_1.OptionParameters.StreamerId, (streamerid) => {
|
|
146
150
|
if (streamerid === undefined || streamerid === '') {
|
|
147
151
|
return;
|
|
148
152
|
}
|
|
@@ -150,12 +154,35 @@ export class WebRtcPlayerController {
|
|
|
150
154
|
this.peerConnectionController.peerConnection.close();
|
|
151
155
|
this.peerConnectionController.createPeerConnection(this.peerConfig, this.preferredCodec);
|
|
152
156
|
this.subscribedStream = streamerid;
|
|
153
|
-
const message = MessageHelpers.createMessage(Messages.subscribe, { streamerId: streamerid });
|
|
157
|
+
const message = lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.subscribe, { streamerId: streamerid });
|
|
158
|
+
this.protocol.sendMessage(message);
|
|
159
|
+
});
|
|
160
|
+
this.config._addOnOptionSettingChangedListener(Config_1.OptionParameters.PreferredQuality, (preferredQuality) => {
|
|
161
|
+
if (preferredQuality === undefined || preferredQuality === '') {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
let message;
|
|
165
|
+
if (this.isUsingSVC) {
|
|
166
|
+
// User is using SVC so selected quality will be of the form SxTy(h). Just extract the x and y numbers
|
|
167
|
+
message = lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.layerPreference, {
|
|
168
|
+
spatialLayer: +preferredQuality[1] - 1,
|
|
169
|
+
temporalLayer: +preferredQuality[3] - 1
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// User is not using SVC so the selected quality will be either Low, Medium or High so we extract the appropriate spatial layer index
|
|
174
|
+
const allQualities = this.config.getSettingOption(Config_1.OptionParameters.PreferredQuality).options;
|
|
175
|
+
const qualityIndex = allQualities.indexOf(preferredQuality);
|
|
176
|
+
message = lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.layerPreference, {
|
|
177
|
+
spatialLayer: qualityIndex,
|
|
178
|
+
temporalLayer: 0
|
|
179
|
+
});
|
|
180
|
+
}
|
|
154
181
|
this.protocol.sendMessage(message);
|
|
155
182
|
});
|
|
156
183
|
this.setVideoEncoderAvgQP(-1);
|
|
157
184
|
this.signallingUrlBuilder = () => {
|
|
158
|
-
const signallingServerUrl = this.config.getTextSettingValue(TextParameters.SignallingServerUrl);
|
|
185
|
+
const signallingServerUrl = this.config.getTextSettingValue(Config_1.TextParameters.SignallingServerUrl);
|
|
159
186
|
return signallingServerUrl;
|
|
160
187
|
};
|
|
161
188
|
}
|
|
@@ -173,7 +200,7 @@ export class WebRtcPlayerController {
|
|
|
173
200
|
*/
|
|
174
201
|
handleOnMessage(event) {
|
|
175
202
|
const message = new Uint8Array(event.data);
|
|
176
|
-
Logger.Info('Message incoming:' + message);
|
|
203
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Message incoming:' + message);
|
|
177
204
|
//try {
|
|
178
205
|
const messageType = this.streamMessageController.fromStreamerMessages.get(message[0]);
|
|
179
206
|
this.streamMessageController.fromStreamerHandlers.get(messageType)(event.data);
|
|
@@ -187,77 +214,86 @@ export class WebRtcPlayerController {
|
|
|
187
214
|
registerMessageHandlers() {
|
|
188
215
|
// From Streamer
|
|
189
216
|
// Message events from the streamer have a data type of ArrayBuffer as we force this type in the DatachannelController
|
|
190
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'QualityControlOwnership', (data) => this.onQualityControlOwnership(data));
|
|
191
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Response', (data) => this.responseController.onResponse(data));
|
|
192
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'Command', (data) => {
|
|
217
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'QualityControlOwnership', (data) => this.onQualityControlOwnership(data));
|
|
218
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'Response', (data) => this.responseController.onResponse(data));
|
|
219
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'Command', (data) => {
|
|
193
220
|
this.onCommand(data);
|
|
194
221
|
});
|
|
195
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FreezeFrame', (data) => this.onFreezeFrameMessage(data));
|
|
196
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'UnfreezeFrame', () => this.invalidateFreezeFrameAndEnableVideo());
|
|
197
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'VideoEncoderAvgQP', (data) => this.handleVideoEncoderAvgQP(data));
|
|
198
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'LatencyTest', (data) => this.handleLatencyTestResult(data));
|
|
199
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'DataChannelLatencyTest', (data) => this.handleDataChannelLatencyTestResponse(data));
|
|
200
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'InitialSettings', (data) => this.handleInitialSettings(data));
|
|
201
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileExtension', (data) => this.onFileExtension(data));
|
|
202
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileMimeType', (data) => this.onFileMimeType(data));
|
|
203
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'FileContents', (data) => this.onFileContents(data));
|
|
204
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'TestEcho', () => {
|
|
222
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'FreezeFrame', (data) => this.onFreezeFrameMessage(data));
|
|
223
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'UnfreezeFrame', () => this.invalidateFreezeFrameAndEnableVideo());
|
|
224
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'VideoEncoderAvgQP', (data) => this.handleVideoEncoderAvgQP(data));
|
|
225
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'LatencyTest', (data) => this.handleLatencyTestResult(data));
|
|
226
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'DataChannelLatencyTest', (data) => this.handleDataChannelLatencyTestResponse(data));
|
|
227
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'InitialSettings', (data) => this.handleInitialSettings(data));
|
|
228
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'FileExtension', (data) => this.onFileExtension(data));
|
|
229
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'FileMimeType', (data) => this.onFileMimeType(data));
|
|
230
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'FileContents', (data) => this.onFileContents(data));
|
|
231
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'TestEcho', () => {
|
|
205
232
|
/* Do nothing */
|
|
206
233
|
});
|
|
207
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'InputControlOwnership', (data) => this.onInputControlOwnership(data));
|
|
208
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, 'GamepadResponse', (data) => this.onGamepadResponse(data));
|
|
209
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.FromStreamer, '
|
|
234
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'InputControlOwnership', (data) => this.onInputControlOwnership(data));
|
|
235
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'GamepadResponse', (data) => this.onGamepadResponse(data));
|
|
236
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'Multiplexed', () => {
|
|
237
|
+
/* Do nothing as this message type is used only by the SFU */
|
|
238
|
+
});
|
|
239
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.FromStreamer, 'Protocol', (data) => this.onProtocolMessage(data));
|
|
210
240
|
// To Streamer
|
|
211
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'IFrameRequest', () => this.sendMessageController.sendMessageToStreamer('IFrameRequest'));
|
|
212
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'RequestQualityControl', () => this.sendMessageController.sendMessageToStreamer('RequestQualityControl'));
|
|
213
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'FpsRequest', () => this.sendMessageController.sendMessageToStreamer('FpsRequest'));
|
|
214
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'AverageBitrateRequest', () => this.sendMessageController.sendMessageToStreamer('AverageBitrateRequest'));
|
|
215
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'StartStreaming', () => this.sendMessageController.sendMessageToStreamer('StartStreaming'));
|
|
216
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'StopStreaming', () => this.sendMessageController.sendMessageToStreamer('StopStreaming'));
|
|
217
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'LatencyTest', (data) => this.sendMessageController.sendMessageToStreamer('LatencyTest', data));
|
|
218
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'RequestInitialSettings', () => this.sendMessageController.sendMessageToStreamer('RequestInitialSettings'));
|
|
219
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TestEcho', () => {
|
|
241
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'IFrameRequest', () => this.sendMessageController.sendMessageToStreamer('IFrameRequest'));
|
|
242
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'RequestQualityControl', () => this.sendMessageController.sendMessageToStreamer('RequestQualityControl'));
|
|
243
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'FpsRequest', () => this.sendMessageController.sendMessageToStreamer('FpsRequest'));
|
|
244
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'AverageBitrateRequest', () => this.sendMessageController.sendMessageToStreamer('AverageBitrateRequest'));
|
|
245
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'StartStreaming', () => this.sendMessageController.sendMessageToStreamer('StartStreaming'));
|
|
246
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'StopStreaming', () => this.sendMessageController.sendMessageToStreamer('StopStreaming'));
|
|
247
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'LatencyTest', (data) => this.sendMessageController.sendMessageToStreamer('LatencyTest', data));
|
|
248
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'RequestInitialSettings', () => this.sendMessageController.sendMessageToStreamer('RequestInitialSettings'));
|
|
249
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'TestEcho', () => {
|
|
220
250
|
/* Do nothing */
|
|
221
251
|
});
|
|
222
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'UIInteraction', (data) => this.sendMessageController.sendMessageToStreamer('UIInteraction', data));
|
|
223
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'Command', (data) => this.sendMessageController.sendMessageToStreamer('Command', data));
|
|
224
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TextboxEntry', (data) => this.sendMessageController.sendMessageToStreamer('TextboxEntry', data));
|
|
225
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyDown', (data) => this.sendMessageController.sendMessageToStreamer('KeyDown', data));
|
|
226
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyUp', (data) => this.sendMessageController.sendMessageToStreamer('KeyUp', data));
|
|
227
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'KeyPress', (data) => this.sendMessageController.sendMessageToStreamer('KeyPress', data));
|
|
228
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseEnter', (data) => this.sendMessageController.sendMessageToStreamer('MouseEnter', data));
|
|
229
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseLeave', (data) => this.sendMessageController.sendMessageToStreamer('MouseLeave', data));
|
|
230
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseDown', (data) => this.sendMessageController.sendMessageToStreamer('MouseDown', data));
|
|
231
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseUp', (data) => this.sendMessageController.sendMessageToStreamer('MouseUp', data));
|
|
232
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseMove', (data) => this.sendMessageController.sendMessageToStreamer('MouseMove', data));
|
|
233
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseWheel', (data) => this.sendMessageController.sendMessageToStreamer('MouseWheel', data));
|
|
234
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'MouseDouble', (data) => this.sendMessageController.sendMessageToStreamer('MouseDouble', data));
|
|
235
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchStart', (data) => this.sendMessageController.sendMessageToStreamer('TouchStart', data));
|
|
236
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchEnd', (data) => this.sendMessageController.sendMessageToStreamer('TouchEnd', data));
|
|
237
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'TouchMove', (data) => this.sendMessageController.sendMessageToStreamer('TouchMove', data));
|
|
238
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadConnected', () => this.sendMessageController.sendMessageToStreamer('GamepadConnected'));
|
|
239
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonPressed', data));
|
|
240
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonReleased', data));
|
|
241
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadAnalog', (data) => this.sendMessageController.sendMessageToStreamer('GamepadAnalog', data));
|
|
242
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'GamepadDisconnected', (data) => this.sendMessageController.sendMessageToStreamer('GamepadDisconnected', data));
|
|
243
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XREyeViews', (data) => this.sendMessageController.sendMessageToStreamer('XREyeViews', data));
|
|
244
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRHMDTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRHMDTransform', data));
|
|
245
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRControllerTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRControllerTransform', data));
|
|
246
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRSystem', (data) => this.sendMessageController.sendMessageToStreamer('XRSystem', data));
|
|
247
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonTouched', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouched', data));
|
|
248
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonTouchReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouchReleased', data));
|
|
249
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonPressed', data));
|
|
250
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonReleased', data));
|
|
251
|
-
this.streamMessageController.registerMessageHandler(MessageDirection.ToStreamer, 'XRAnalog', (data) => this.sendMessageController.sendMessageToStreamer('XRAnalog', data));
|
|
252
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'UIInteraction', (data) => this.sendMessageController.sendMessageToStreamer('UIInteraction', data));
|
|
253
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'Command', (data) => this.sendMessageController.sendMessageToStreamer('Command', data));
|
|
254
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'TextboxEntry', (data) => this.sendMessageController.sendMessageToStreamer('TextboxEntry', data));
|
|
255
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'KeyDown', (data) => this.sendMessageController.sendMessageToStreamer('KeyDown', data));
|
|
256
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'KeyUp', (data) => this.sendMessageController.sendMessageToStreamer('KeyUp', data));
|
|
257
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'KeyPress', (data) => this.sendMessageController.sendMessageToStreamer('KeyPress', data));
|
|
258
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseEnter', (data) => this.sendMessageController.sendMessageToStreamer('MouseEnter', data));
|
|
259
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseLeave', (data) => this.sendMessageController.sendMessageToStreamer('MouseLeave', data));
|
|
260
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseDown', (data) => this.sendMessageController.sendMessageToStreamer('MouseDown', data));
|
|
261
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseUp', (data) => this.sendMessageController.sendMessageToStreamer('MouseUp', data));
|
|
262
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseMove', (data) => this.sendMessageController.sendMessageToStreamer('MouseMove', data));
|
|
263
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseWheel', (data) => this.sendMessageController.sendMessageToStreamer('MouseWheel', data));
|
|
264
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'MouseDouble', (data) => this.sendMessageController.sendMessageToStreamer('MouseDouble', data));
|
|
265
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'TouchStart', (data) => this.sendMessageController.sendMessageToStreamer('TouchStart', data));
|
|
266
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'TouchEnd', (data) => this.sendMessageController.sendMessageToStreamer('TouchEnd', data));
|
|
267
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'TouchMove', (data) => this.sendMessageController.sendMessageToStreamer('TouchMove', data));
|
|
268
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'GamepadConnected', () => this.sendMessageController.sendMessageToStreamer('GamepadConnected'));
|
|
269
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'GamepadButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonPressed', data));
|
|
270
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'GamepadButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('GamepadButtonReleased', data));
|
|
271
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'GamepadAnalog', (data) => this.sendMessageController.sendMessageToStreamer('GamepadAnalog', data));
|
|
272
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'GamepadDisconnected', (data) => this.sendMessageController.sendMessageToStreamer('GamepadDisconnected', data));
|
|
273
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XREyeViews', (data) => this.sendMessageController.sendMessageToStreamer('XREyeViews', data));
|
|
274
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRHMDTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRHMDTransform', data));
|
|
275
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRControllerTransform', (data) => this.sendMessageController.sendMessageToStreamer('XRControllerTransform', data));
|
|
276
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRSystem', (data) => this.sendMessageController.sendMessageToStreamer('XRSystem', data));
|
|
277
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRButtonTouched', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouched', data));
|
|
278
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRButtonTouchReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonTouchReleased', data));
|
|
279
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRButtonPressed', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonPressed', data));
|
|
280
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRButtonReleased', (data) => this.sendMessageController.sendMessageToStreamer('XRButtonReleased', data));
|
|
281
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'XRAnalog', (data) => this.sendMessageController.sendMessageToStreamer('XRAnalog', data));
|
|
282
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'ChannelRelayStatus', () => {
|
|
283
|
+
/* Do nothing as this message type is used only by the SFU */
|
|
284
|
+
});
|
|
285
|
+
this.streamMessageController.registerMessageHandler(StreamMessageController_1.MessageDirection.ToStreamer, 'Multiplexed', () => {
|
|
286
|
+
/* Do nothing as this message type is used only by the SFU */
|
|
287
|
+
});
|
|
252
288
|
}
|
|
253
289
|
/**
|
|
254
290
|
* Activate the logic associated with a command from UE
|
|
255
291
|
* @param message
|
|
256
292
|
*/
|
|
257
293
|
onCommand(message) {
|
|
258
|
-
Logger.Info('DataChannelReceiveMessageType.Command');
|
|
294
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.Command');
|
|
259
295
|
const commandAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
260
|
-
Logger.Info('Data Channel Command: ' + commandAsString);
|
|
296
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Data Channel Command: ' + commandAsString);
|
|
261
297
|
const command = JSON.parse(commandAsString);
|
|
262
298
|
if (command.command === 'onScreenKeyboard') {
|
|
263
299
|
this.pixelStreaming._activateOnScreenKeyboard(command);
|
|
@@ -272,18 +308,18 @@ export class WebRtcPlayerController {
|
|
|
272
308
|
const protocolString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
273
309
|
const protocolJSON = JSON.parse(protocolString);
|
|
274
310
|
if (!Object.prototype.hasOwnProperty.call(protocolJSON, 'Direction')) {
|
|
275
|
-
Logger.Error('Malformed protocol received. Ensure the protocol message contains a direction');
|
|
311
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error('Malformed protocol received. Ensure the protocol message contains a direction');
|
|
276
312
|
}
|
|
277
313
|
const direction = protocolJSON.Direction;
|
|
278
314
|
delete protocolJSON.Direction;
|
|
279
|
-
Logger.Info(`Received new ${direction == MessageDirection.FromStreamer ? 'FromStreamer' : 'ToStreamer'} protocol. Updating existing protocol...`);
|
|
315
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Received new ${direction == StreamMessageController_1.MessageDirection.FromStreamer ? 'FromStreamer' : 'ToStreamer'} protocol. Updating existing protocol...`);
|
|
280
316
|
Object.keys(protocolJSON).forEach((messageType) => {
|
|
281
317
|
const message = protocolJSON[messageType];
|
|
282
318
|
switch (direction) {
|
|
283
|
-
case MessageDirection.ToStreamer:
|
|
319
|
+
case StreamMessageController_1.MessageDirection.ToStreamer:
|
|
284
320
|
// Check that the message contains all the relevant params
|
|
285
321
|
if (!Object.prototype.hasOwnProperty.call(message, 'id')) {
|
|
286
|
-
Logger.Error(`ToStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\n
|
|
322
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`ToStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\n
|
|
287
323
|
Definition was: ${JSON.stringify(message, null, 2)}`);
|
|
288
324
|
// return in a forEach is equivalent to a continue in a normal for loop
|
|
289
325
|
return;
|
|
@@ -299,13 +335,13 @@ export class WebRtcPlayerController {
|
|
|
299
335
|
this.streamMessageController.toStreamerMessages.set(messageType, message);
|
|
300
336
|
}
|
|
301
337
|
else {
|
|
302
|
-
Logger.Error(`There was no registered handler for "${messageType}" - try adding one using registerMessageHandler(MessageDirection.ToStreamer, "${messageType}", myHandler)`);
|
|
338
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`There was no registered handler for "${messageType}" - try adding one using registerMessageHandler(MessageDirection.ToStreamer, "${messageType}", myHandler)`);
|
|
303
339
|
}
|
|
304
340
|
break;
|
|
305
|
-
case MessageDirection.FromStreamer:
|
|
341
|
+
case StreamMessageController_1.MessageDirection.FromStreamer:
|
|
306
342
|
// Check that the message contains all the relevant params
|
|
307
343
|
if (!Object.prototype.hasOwnProperty.call(message, 'id')) {
|
|
308
|
-
Logger.Error(`FromStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\n
|
|
344
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`FromStreamer->${messageType} protocol definition was malformed as it didn't contain at least an id\n
|
|
309
345
|
Definition was: ${JSON.stringify(message, null, 2)}`);
|
|
310
346
|
// return in a forEach is equivalent to a continue in a normal for loop
|
|
311
347
|
return;
|
|
@@ -315,11 +351,11 @@ export class WebRtcPlayerController {
|
|
|
315
351
|
this.streamMessageController.fromStreamerMessages.set(message.id, messageType);
|
|
316
352
|
}
|
|
317
353
|
else {
|
|
318
|
-
Logger.Error(`There was no registered handler for "${message}" - try adding one using registerMessageHandler(MessageDirection.FromStreamer, "${messageType}", myHandler)`);
|
|
354
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`There was no registered handler for "${message}" - try adding one using registerMessageHandler(MessageDirection.FromStreamer, "${messageType}", myHandler)`);
|
|
319
355
|
}
|
|
320
356
|
break;
|
|
321
357
|
default:
|
|
322
|
-
Logger.Error(`Unknown direction: ${direction}`);
|
|
358
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`Unknown direction: ${direction}`);
|
|
323
359
|
}
|
|
324
360
|
});
|
|
325
361
|
// Once the protocol has been received, we can send our control messages
|
|
@@ -327,7 +363,7 @@ export class WebRtcPlayerController {
|
|
|
327
363
|
this.toStreamerMessagesController.SendRequestQualityControl();
|
|
328
364
|
}
|
|
329
365
|
catch (e) {
|
|
330
|
-
Logger.Info(e);
|
|
366
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(e);
|
|
331
367
|
}
|
|
332
368
|
}
|
|
333
369
|
/**
|
|
@@ -336,9 +372,9 @@ export class WebRtcPlayerController {
|
|
|
336
372
|
*/
|
|
337
373
|
onInputControlOwnership(message) {
|
|
338
374
|
const view = new Uint8Array(message);
|
|
339
|
-
Logger.Info('DataChannelReceiveMessageType.InputControlOwnership');
|
|
375
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.InputControlOwnership');
|
|
340
376
|
const inputControlOwnership = new Boolean(view[1]).valueOf();
|
|
341
|
-
Logger.Info(`Received input controller message - will your input control the stream: ${inputControlOwnership}`);
|
|
377
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Received input controller message - will your input control the stream: ${inputControlOwnership}`);
|
|
342
378
|
this.pixelStreaming._onInputControlOwnership(inputControlOwnership);
|
|
343
379
|
}
|
|
344
380
|
/**
|
|
@@ -382,7 +418,7 @@ export class WebRtcPlayerController {
|
|
|
382
418
|
doReconnect(message) {
|
|
383
419
|
// if there is no webSocketController return immediately or this will not work
|
|
384
420
|
if (!this.protocol) {
|
|
385
|
-
Logger.Info('This player has no protocol connection.');
|
|
421
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('This player has no protocol connection.');
|
|
386
422
|
return;
|
|
387
423
|
}
|
|
388
424
|
this.isReconnecting = true;
|
|
@@ -402,17 +438,17 @@ export class WebRtcPlayerController {
|
|
|
402
438
|
* Loads a freeze frame if it is required otherwise shows the play overlay
|
|
403
439
|
*/
|
|
404
440
|
loadFreezeFrameOrShowPlayOverlay() {
|
|
405
|
-
this.pixelStreaming.dispatchEvent(new LoadFreezeFrameEvent({
|
|
441
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.LoadFreezeFrameEvent({
|
|
406
442
|
shouldShowPlayOverlay: this.shouldShowPlayOverlay,
|
|
407
443
|
isValid: this.freezeFrameController.valid,
|
|
408
444
|
jpegData: this.freezeFrameController.jpeg
|
|
409
445
|
}));
|
|
410
446
|
if (this.shouldShowPlayOverlay === true) {
|
|
411
|
-
Logger.Info('showing play overlay');
|
|
447
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('showing play overlay');
|
|
412
448
|
this.resizePlayerStyle();
|
|
413
449
|
}
|
|
414
450
|
else {
|
|
415
|
-
Logger.Info('showing freeze frame');
|
|
451
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('showing freeze frame');
|
|
416
452
|
this.freezeFrameController.showFreezeFrame();
|
|
417
453
|
}
|
|
418
454
|
setTimeout(() => {
|
|
@@ -424,7 +460,7 @@ export class WebRtcPlayerController {
|
|
|
424
460
|
* @param message The freeze frame data in bytes
|
|
425
461
|
*/
|
|
426
462
|
onFreezeFrameMessage(message) {
|
|
427
|
-
Logger.Info('DataChannelReceiveMessageType.FreezeFrame');
|
|
463
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.FreezeFrame');
|
|
428
464
|
const view = new Uint8Array(message);
|
|
429
465
|
this.freezeFrameController.processFreezeFrameMessage(view, () => this.loadFreezeFrameOrShowPlayOverlay());
|
|
430
466
|
}
|
|
@@ -432,9 +468,9 @@ export class WebRtcPlayerController {
|
|
|
432
468
|
* Enable the video after hiding a freeze frame
|
|
433
469
|
*/
|
|
434
470
|
invalidateFreezeFrameAndEnableVideo() {
|
|
435
|
-
Logger.Info('DataChannelReceiveMessageType.FreezeFrame');
|
|
471
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.FreezeFrame');
|
|
436
472
|
setTimeout(() => {
|
|
437
|
-
this.pixelStreaming.dispatchEvent(new HideFreezeFrameEvent());
|
|
473
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.HideFreezeFrameEvent());
|
|
438
474
|
this.freezeFrameController.hideFreezeFrame();
|
|
439
475
|
}, this.freezeFrameController.freezeFrameDelay);
|
|
440
476
|
if (this.videoPlayer.getVideoElement()) {
|
|
@@ -447,7 +483,7 @@ export class WebRtcPlayerController {
|
|
|
447
483
|
*/
|
|
448
484
|
onFileExtension(data) {
|
|
449
485
|
const view = new Uint8Array(data);
|
|
450
|
-
FileUtil.setExtensionFromBytes(view, this.file);
|
|
486
|
+
FileUtil_1.FileUtil.setExtensionFromBytes(view, this.file);
|
|
451
487
|
}
|
|
452
488
|
/**
|
|
453
489
|
* Prep datachannel data for processing the file mime type
|
|
@@ -455,7 +491,7 @@ export class WebRtcPlayerController {
|
|
|
455
491
|
*/
|
|
456
492
|
onFileMimeType(data) {
|
|
457
493
|
const view = new Uint8Array(data);
|
|
458
|
-
FileUtil.setMimeTypeFromBytes(view, this.file);
|
|
494
|
+
FileUtil_1.FileUtil.setMimeTypeFromBytes(view, this.file);
|
|
459
495
|
}
|
|
460
496
|
/**
|
|
461
497
|
* Prep datachannel data for processing the file contents
|
|
@@ -463,7 +499,7 @@ export class WebRtcPlayerController {
|
|
|
463
499
|
*/
|
|
464
500
|
onFileContents(data) {
|
|
465
501
|
const view = new Uint8Array(data);
|
|
466
|
-
FileUtil.setContentsFromBytes(view, this.file);
|
|
502
|
+
FileUtil_1.FileUtil.setContentsFromBytes(view, this.file);
|
|
467
503
|
}
|
|
468
504
|
/**
|
|
469
505
|
* Plays the stream audio and video source and sets up other pieces while the stream starts
|
|
@@ -471,20 +507,20 @@ export class WebRtcPlayerController {
|
|
|
471
507
|
playStream() {
|
|
472
508
|
if (!this.videoPlayer.getVideoElement()) {
|
|
473
509
|
const message = 'Could not play video stream because the video player was not initialized correctly.';
|
|
474
|
-
this.pixelStreaming.dispatchEvent(new PlayStreamErrorEvent({ message }));
|
|
475
|
-
Logger.Error(message);
|
|
510
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.PlayStreamErrorEvent({ message }));
|
|
511
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(message);
|
|
476
512
|
// close the connection
|
|
477
513
|
this.closeSignalingServer('Stream not initialized correctly', false);
|
|
478
514
|
return;
|
|
479
515
|
}
|
|
480
516
|
if (!this.videoPlayer.hasVideoSource()) {
|
|
481
|
-
Logger.Warning('Cannot play stream, the video element has no srcObject to play.');
|
|
517
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Warning('Cannot play stream, the video element has no srcObject to play.');
|
|
482
518
|
return;
|
|
483
519
|
}
|
|
484
|
-
this.setTouchInputEnabled(this.config.isFlagEnabled(Flags.TouchInput));
|
|
485
|
-
this.pixelStreaming.dispatchEvent(new PlayStreamEvent());
|
|
520
|
+
this.setTouchInputEnabled(this.config.isFlagEnabled(Config_1.Flags.TouchInput));
|
|
521
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.PlayStreamEvent());
|
|
486
522
|
if (this.streamController.audioElement.srcObject) {
|
|
487
|
-
const startMuted = this.config.isFlagEnabled(Flags.StartVideoMuted);
|
|
523
|
+
const startMuted = this.config.isFlagEnabled(Config_1.Flags.StartVideoMuted);
|
|
488
524
|
this.streamController.audioElement.muted = startMuted;
|
|
489
525
|
if (startMuted) {
|
|
490
526
|
this.playVideo();
|
|
@@ -496,9 +532,9 @@ export class WebRtcPlayerController {
|
|
|
496
532
|
this.playVideo();
|
|
497
533
|
})
|
|
498
534
|
.catch((onRejectedReason) => {
|
|
499
|
-
Logger.Info(onRejectedReason);
|
|
500
|
-
Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');
|
|
501
|
-
this.pixelStreaming.dispatchEvent(new PlayStreamRejectedEvent({
|
|
535
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(onRejectedReason);
|
|
536
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');
|
|
537
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.PlayStreamRejectedEvent({
|
|
502
538
|
reason: onRejectedReason
|
|
503
539
|
}));
|
|
504
540
|
});
|
|
@@ -519,16 +555,16 @@ export class WebRtcPlayerController {
|
|
|
519
555
|
if (this.streamController.audioElement.srcObject) {
|
|
520
556
|
this.streamController.audioElement.pause();
|
|
521
557
|
}
|
|
522
|
-
Logger.Info(onRejectedReason);
|
|
523
|
-
Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');
|
|
524
|
-
this.pixelStreaming.dispatchEvent(new PlayStreamRejectedEvent({ reason: onRejectedReason }));
|
|
558
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(onRejectedReason);
|
|
559
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Browser does not support autoplaying video without interaction - to resolve this we are going to show the play button overlay.');
|
|
560
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.PlayStreamRejectedEvent({ reason: onRejectedReason }));
|
|
525
561
|
});
|
|
526
562
|
}
|
|
527
563
|
/**
|
|
528
564
|
* Enable the video to play automatically if enableAutoplay is true
|
|
529
565
|
*/
|
|
530
566
|
autoPlayVideoOrSetUpPlayOverlay() {
|
|
531
|
-
if (this.config.isFlagEnabled(Flags.AutoPlayVideo)) {
|
|
567
|
+
if (this.config.isFlagEnabled(Config_1.Flags.AutoPlayVideo)) {
|
|
532
568
|
// attempt to play the video
|
|
533
569
|
this.playStream();
|
|
534
570
|
}
|
|
@@ -552,18 +588,18 @@ export class WebRtcPlayerController {
|
|
|
552
588
|
startSession(peerConfig) {
|
|
553
589
|
this.peerConfig = peerConfig;
|
|
554
590
|
// check for forcing turn
|
|
555
|
-
if (this.config.isFlagEnabled(Flags.ForceTURN)) {
|
|
591
|
+
if (this.config.isFlagEnabled(Config_1.Flags.ForceTURN)) {
|
|
556
592
|
// check for a turn server
|
|
557
593
|
const hasTurnServer = this.checkTurnServerAvailability(peerConfig);
|
|
558
594
|
// close and error if turn is forced and there is no turn server
|
|
559
595
|
if (!hasTurnServer) {
|
|
560
|
-
Logger.Info('No turn server was found in the Peer Connection Options. TURN cannot be forced, closing connection. Please use STUN instead');
|
|
596
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('No turn server was found in the Peer Connection Options. TURN cannot be forced, closing connection. Please use STUN instead');
|
|
561
597
|
this.closeSignalingServer('TURN cannot be forced, closing connection. Please use STUN instead.', false);
|
|
562
598
|
return;
|
|
563
599
|
}
|
|
564
600
|
}
|
|
565
601
|
// set up the peer connection controller
|
|
566
|
-
this.peerConnectionController = new PeerConnectionController(this.peerConfig, this.config, this.preferredCodec);
|
|
602
|
+
this.peerConnectionController = new PeerConnectionController_1.PeerConnectionController(this.peerConfig, this.config, this.preferredCodec);
|
|
567
603
|
// set up peer connection controller video stats
|
|
568
604
|
this.peerConnectionController.onVideoStats = (event) => this.handleVideoStats(event);
|
|
569
605
|
/* When the Peer Connection wants to send an offer have it handled */
|
|
@@ -597,19 +633,19 @@ export class WebRtcPlayerController {
|
|
|
597
633
|
checkTurnServerAvailability(options) {
|
|
598
634
|
// if iceServers is empty return false this should not be the general use case but is here incase
|
|
599
635
|
if (!options.iceServers) {
|
|
600
|
-
Logger.Info('A turn sever was not found');
|
|
636
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('A turn sever was not found');
|
|
601
637
|
return false;
|
|
602
638
|
}
|
|
603
639
|
// loop through the ice servers to check for a turn url
|
|
604
640
|
for (const iceServer of options.iceServers) {
|
|
605
641
|
for (const url of iceServer.urls) {
|
|
606
642
|
if (url.includes('turn')) {
|
|
607
|
-
Logger.Info(`A turn sever was found at ${url}`);
|
|
643
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`A turn sever was found at ${url}`);
|
|
608
644
|
return true;
|
|
609
645
|
}
|
|
610
646
|
}
|
|
611
647
|
}
|
|
612
|
-
Logger.Info('A turn sever was not found');
|
|
648
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('A turn sever was not found');
|
|
613
649
|
return false;
|
|
614
650
|
}
|
|
615
651
|
/**
|
|
@@ -625,10 +661,10 @@ export class WebRtcPlayerController {
|
|
|
625
661
|
* Handles when the signalling server gives us the list of streamer ids.
|
|
626
662
|
*/
|
|
627
663
|
handleStreamerListMessage(messageStreamerList) {
|
|
628
|
-
Logger.Info(`Got streamer list ${messageStreamerList.ids}`);
|
|
664
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Got streamer list ${messageStreamerList.ids}`);
|
|
629
665
|
let wantedStreamerId = '';
|
|
630
666
|
// get the current selected streamer id option
|
|
631
|
-
const streamerIDOption = this.config.getSettingOption(OptionParameters.StreamerId);
|
|
667
|
+
const streamerIDOption = this.config.getSettingOption(Config_1.OptionParameters.StreamerId);
|
|
632
668
|
const existingSelection = streamerIDOption.selected.toString().trim();
|
|
633
669
|
if (existingSelection) {
|
|
634
670
|
// default to selected option if it exists
|
|
@@ -637,17 +673,17 @@ export class WebRtcPlayerController {
|
|
|
637
673
|
// add the streamers to the UI
|
|
638
674
|
const settingOptions = [...messageStreamerList.ids]; // copy the original messageStreamerList.ids
|
|
639
675
|
settingOptions.unshift(''); // add an empty option at the top
|
|
640
|
-
this.config.setOptionSettingOptions(OptionParameters.StreamerId, settingOptions);
|
|
676
|
+
this.config.setOptionSettingOptions(Config_1.OptionParameters.StreamerId, settingOptions);
|
|
641
677
|
let autoSelectedStreamerId = '';
|
|
642
|
-
const waitForStreamer = this.config.isFlagEnabled(Flags.WaitForStreamer);
|
|
643
|
-
const reconnectLimit = this.config.getNumericSettingValue(NumericParameters.MaxReconnectAttempts);
|
|
644
|
-
const reconnectDelay = this.config.getNumericSettingValue(NumericParameters.StreamerAutoJoinInterval);
|
|
678
|
+
const waitForStreamer = this.config.isFlagEnabled(Config_1.Flags.WaitForStreamer);
|
|
679
|
+
const reconnectLimit = this.config.getNumericSettingValue(Config_1.NumericParameters.MaxReconnectAttempts);
|
|
680
|
+
const reconnectDelay = this.config.getNumericSettingValue(Config_1.NumericParameters.StreamerAutoJoinInterval);
|
|
645
681
|
// first we figure out a wanted streamer id through various means
|
|
646
682
|
const useUrlParams = this.config.useUrlParams;
|
|
647
|
-
const urlParams = new IURLSearchParams(window.location.search);
|
|
648
|
-
if (useUrlParams && urlParams.has(OptionParameters.StreamerId)) {
|
|
683
|
+
const urlParams = new IURLSearchParams_1.IURLSearchParams(window.location.search);
|
|
684
|
+
if (useUrlParams && urlParams.has(Config_1.OptionParameters.StreamerId)) {
|
|
649
685
|
// if we've set the streamer id on the url we only want that streamer id
|
|
650
|
-
wantedStreamerId = urlParams.get(OptionParameters.StreamerId);
|
|
686
|
+
wantedStreamerId = urlParams.get(Config_1.OptionParameters.StreamerId);
|
|
651
687
|
}
|
|
652
688
|
else if (this.subscribedStream) {
|
|
653
689
|
// we were previously subscribed to a streamer, we want that
|
|
@@ -666,7 +702,7 @@ export class WebRtcPlayerController {
|
|
|
666
702
|
if (autoSelectedStreamerId) {
|
|
667
703
|
this.reconnectAttempt = 0;
|
|
668
704
|
this.isReconnecting = false;
|
|
669
|
-
this.config.setOptionSettingValue(OptionParameters.StreamerId, autoSelectedStreamerId);
|
|
705
|
+
this.config.setOptionSettingValue(Config_1.OptionParameters.StreamerId, autoSelectedStreamerId);
|
|
670
706
|
}
|
|
671
707
|
else {
|
|
672
708
|
// no auto selected streamer.
|
|
@@ -677,7 +713,7 @@ export class WebRtcPlayerController {
|
|
|
677
713
|
this.reconnectAttempt++;
|
|
678
714
|
this.isReconnecting = true;
|
|
679
715
|
setTimeout(() => {
|
|
680
|
-
this.protocol.sendMessage(MessageHelpers.createMessage(Messages.listStreamers));
|
|
716
|
+
this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.listStreamers));
|
|
681
717
|
}, reconnectDelay);
|
|
682
718
|
}
|
|
683
719
|
else {
|
|
@@ -689,7 +725,7 @@ export class WebRtcPlayerController {
|
|
|
689
725
|
}
|
|
690
726
|
}
|
|
691
727
|
// dispatch this event finally
|
|
692
|
-
this.pixelStreaming.dispatchEvent(new StreamerListMessageEvent({
|
|
728
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.StreamerListMessageEvent({
|
|
693
729
|
messageStreamerList,
|
|
694
730
|
autoSelectedStreamerId,
|
|
695
731
|
wantedStreamerId
|
|
@@ -698,7 +734,7 @@ export class WebRtcPlayerController {
|
|
|
698
734
|
handleStreamerIDChangedMessage(streamerIDChangedMessage) {
|
|
699
735
|
const newID = streamerIDChangedMessage.newID;
|
|
700
736
|
// need to edit the selected streamer in the settings list
|
|
701
|
-
const streamerListOptions = this.config.getSettingOption(OptionParameters.StreamerId);
|
|
737
|
+
const streamerListOptions = this.config.getSettingOption(Config_1.OptionParameters.StreamerId);
|
|
702
738
|
// temporarily prevent onChange from firing (it would try to subscribe to the streamer again)
|
|
703
739
|
const oldOnChange = streamerListOptions.onChange;
|
|
704
740
|
streamerListOptions.onChange = () => { };
|
|
@@ -719,7 +755,7 @@ export class WebRtcPlayerController {
|
|
|
719
755
|
// remember which stream we're subscribe to
|
|
720
756
|
this.subscribedStream = streamerIDChangedMessage.newID;
|
|
721
757
|
// notify any listeners
|
|
722
|
-
this.pixelStreaming.dispatchEvent(new StreamerIDChangedMessageEvent({
|
|
758
|
+
this.pixelStreaming.dispatchEvent(new EventEmitter_1.StreamerIDChangedMessageEvent({
|
|
723
759
|
newID
|
|
724
760
|
}));
|
|
725
761
|
}
|
|
@@ -728,7 +764,7 @@ export class WebRtcPlayerController {
|
|
|
728
764
|
* @param Answer - Answer SDP from the peer.
|
|
729
765
|
*/
|
|
730
766
|
handleWebRtcAnswer(Answer) {
|
|
731
|
-
Logger.Info(`Got answer sdp ${Answer.sdp}`);
|
|
767
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Got answer sdp ${Answer.sdp}`);
|
|
732
768
|
const sdpAnswer = {
|
|
733
769
|
sdp: Answer.sdp,
|
|
734
770
|
type: 'answer'
|
|
@@ -741,12 +777,38 @@ export class WebRtcPlayerController {
|
|
|
741
777
|
* @param Offer - Offer SDP from the peer.
|
|
742
778
|
*/
|
|
743
779
|
handleWebRtcOffer(Offer) {
|
|
744
|
-
Logger.Info(`Got offer sdp ${Offer.sdp}`);
|
|
780
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Got offer sdp ${Offer.sdp}`);
|
|
745
781
|
this.isUsingSFU = Offer.sfu ? Offer.sfu : false;
|
|
746
|
-
|
|
782
|
+
this.isUsingSVC = Offer.scalabilityMode ? Offer.scalabilityMode != 'L1T1' : false;
|
|
783
|
+
if (this.isUsingSFU || this.isUsingSVC) {
|
|
747
784
|
// Disable negotiating with the sfu as the sfu only supports one codec at a time
|
|
748
785
|
this.peerConnectionController.preferredCodec = '';
|
|
749
786
|
}
|
|
787
|
+
// NOTE: These two settings configurations are done outside of an if(this.isUsingSFU) so that users
|
|
788
|
+
// can switch between a default and SFU stream and have the settings reconfigure appropriately
|
|
789
|
+
const scalabilityMode = Offer.scalabilityMode ? Offer.scalabilityMode : 'L1T1';
|
|
790
|
+
let availableQualities = ['Default'];
|
|
791
|
+
if (this.isUsingSFU) {
|
|
792
|
+
if (!this.isUsingSVC) {
|
|
793
|
+
// User is using an SFU without any temporal scalability. Just offer easily readable names
|
|
794
|
+
availableQualities = ['Low', 'Medium', 'High'];
|
|
795
|
+
}
|
|
796
|
+
else {
|
|
797
|
+
// User is using SVC. Generate all available options.
|
|
798
|
+
availableQualities = [];
|
|
799
|
+
const maxSpatialLayers = +scalabilityMode[1];
|
|
800
|
+
const maxTemporalLayers = +scalabilityMode[3];
|
|
801
|
+
for (let s = 1; s <= maxSpatialLayers; s++) {
|
|
802
|
+
for (let t = 1; t <= maxTemporalLayers; t++) {
|
|
803
|
+
availableQualities.push(`S${s}T${t}`);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
// Update the possible video quality options
|
|
809
|
+
this.config.setOptionSettingOptions(Config_1.OptionParameters.PreferredQuality, availableQualities);
|
|
810
|
+
// Update the selected video quality with the highest possible resolution
|
|
811
|
+
this.config.setOptionSettingValue(Config_1.OptionParameters.PreferredQuality, availableQualities.slice(-1)[0]);
|
|
750
812
|
const sdpOffer = {
|
|
751
813
|
sdp: Offer.sdp,
|
|
752
814
|
type: 'offer'
|
|
@@ -773,7 +835,7 @@ export class WebRtcPlayerController {
|
|
|
773
835
|
id: DataChannels.recvStreamId
|
|
774
836
|
};
|
|
775
837
|
this.recvDataChannelController.createDataChannel(this.peerConnectionController.peerConnection, 'recv-datachannel', RecvOptions);
|
|
776
|
-
this.recvDataChannelController.handleOnOpen = () => this.protocol.sendMessage(MessageHelpers.createMessage(Messages.peerDataChannelsReady));
|
|
838
|
+
this.recvDataChannelController.handleOnOpen = () => this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.peerDataChannelsReady));
|
|
777
839
|
// If we're uni-directional, only the recv data channel should handle incoming messages
|
|
778
840
|
this.recvDataChannelController.handleOnMessage = (ev) => this.handleOnMessage(ev);
|
|
779
841
|
}
|
|
@@ -792,16 +854,16 @@ export class WebRtcPlayerController {
|
|
|
792
854
|
}
|
|
793
855
|
this.statsTimerHandle = window.setInterval(() => this.getStats(), 1000);
|
|
794
856
|
/* */
|
|
795
|
-
this.setMouseInputEnabled(this.config.isFlagEnabled(Flags.MouseInput));
|
|
796
|
-
this.setKeyboardInputEnabled(this.config.isFlagEnabled(Flags.KeyboardInput));
|
|
797
|
-
this.setGamePadInputEnabled(this.config.isFlagEnabled(Flags.GamepadInput));
|
|
857
|
+
this.setMouseInputEnabled(this.config.isFlagEnabled(Config_1.Flags.MouseInput));
|
|
858
|
+
this.setKeyboardInputEnabled(this.config.isFlagEnabled(Config_1.Flags.KeyboardInput));
|
|
859
|
+
this.setGamePadInputEnabled(this.config.isFlagEnabled(Config_1.Flags.GamepadInput));
|
|
798
860
|
}
|
|
799
861
|
/**
|
|
800
862
|
* When an ice Candidate is received from the Signaling server add it to the Peer Connection Client
|
|
801
863
|
* @param iceCandidate - Ice Candidate from Server
|
|
802
864
|
*/
|
|
803
865
|
handleIceCandidate(iceCandidate) {
|
|
804
|
-
Logger.Info('Web RTC Controller: onWebRtcIce');
|
|
866
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Web RTC Controller: onWebRtcIce');
|
|
805
867
|
const candidate = new RTCIceCandidate(iceCandidate);
|
|
806
868
|
this.peerConnectionController.handleOnIce(candidate);
|
|
807
869
|
}
|
|
@@ -810,9 +872,9 @@ export class WebRtcPlayerController {
|
|
|
810
872
|
* @param iceEvent - RTC Peer ConnectionIceEvent) {
|
|
811
873
|
*/
|
|
812
874
|
handleSendIceCandidate(iceEvent) {
|
|
813
|
-
Logger.Info('OnIceCandidate');
|
|
875
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('OnIceCandidate');
|
|
814
876
|
if (iceEvent.candidate && iceEvent.candidate.candidate) {
|
|
815
|
-
this.protocol.sendMessage(MessageHelpers.createMessage(Messages.iceCandidate, { candidate: iceEvent.candidate }));
|
|
877
|
+
this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.iceCandidate, { candidate: iceEvent.candidate }));
|
|
816
878
|
}
|
|
817
879
|
}
|
|
818
880
|
/**
|
|
@@ -820,7 +882,7 @@ export class WebRtcPlayerController {
|
|
|
820
882
|
* @param iceEvent - RTC Peer ConnectionIceEvent) {
|
|
821
883
|
*/
|
|
822
884
|
handleDataChannel(datachannelEvent) {
|
|
823
|
-
Logger.Info('Data channel created for us by browser as we are a receiving peer.');
|
|
885
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Data channel created for us by browser as we are a receiving peer.');
|
|
824
886
|
this.sendrecvDataChannelController.dataChannel = datachannelEvent.channel;
|
|
825
887
|
// Data channel was created for us, so we just need to setup its callbacks and array type
|
|
826
888
|
this.sendrecvDataChannelController.setupDataChannel();
|
|
@@ -831,28 +893,28 @@ export class WebRtcPlayerController {
|
|
|
831
893
|
* @param offer - RTC Session Description
|
|
832
894
|
*/
|
|
833
895
|
handleSendWebRTCOffer(offer) {
|
|
834
|
-
Logger.Info('Sending the offer to the Server');
|
|
896
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Sending the offer to the Server');
|
|
835
897
|
const extraParams = {
|
|
836
898
|
sdp: offer.sdp,
|
|
837
|
-
minBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMinBitrate),
|
|
838
|
-
maxBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMaxBitrate)
|
|
899
|
+
minBitrateBps: 1000 * this.config.getNumericSettingValue(Config_1.NumericParameters.WebRTCMinBitrate),
|
|
900
|
+
maxBitrateBps: 1000 * this.config.getNumericSettingValue(Config_1.NumericParameters.WebRTCMaxBitrate)
|
|
839
901
|
};
|
|
840
|
-
this.protocol.sendMessage(MessageHelpers.createMessage(Messages.offer, extraParams));
|
|
902
|
+
this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.offer, extraParams));
|
|
841
903
|
}
|
|
842
904
|
/**
|
|
843
905
|
* Send the RTC Offer Session to the Signaling server via websocket
|
|
844
906
|
* @param answer - RTC Session Description
|
|
845
907
|
*/
|
|
846
908
|
handleSendWebRTCAnswer(answer) {
|
|
847
|
-
Logger.Info('Sending the answer to the Server');
|
|
909
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('Sending the answer to the Server');
|
|
848
910
|
const extraParams = {
|
|
849
911
|
sdp: answer.sdp,
|
|
850
|
-
minBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMinBitrate),
|
|
851
|
-
maxBitrateBps: 1000 * this.config.getNumericSettingValue(NumericParameters.WebRTCMaxBitrate)
|
|
912
|
+
minBitrateBps: 1000 * this.config.getNumericSettingValue(Config_1.NumericParameters.WebRTCMinBitrate),
|
|
913
|
+
maxBitrateBps: 1000 * this.config.getNumericSettingValue(Config_1.NumericParameters.WebRTCMaxBitrate)
|
|
852
914
|
};
|
|
853
|
-
this.protocol.sendMessage(MessageHelpers.createMessage(Messages.answer, extraParams));
|
|
915
|
+
this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.answer, extraParams));
|
|
854
916
|
if (this.isUsingSFU) {
|
|
855
|
-
this.protocol.sendMessage(MessageHelpers.createMessage(Messages.dataChannelRequest));
|
|
917
|
+
this.protocol.sendMessage(lib_pixelstreamingcommon_ue5_5_1.MessageHelpers.createMessage(lib_pixelstreamingcommon_ue5_5_1.Messages.dataChannelRequest));
|
|
856
918
|
}
|
|
857
919
|
}
|
|
858
920
|
/**
|
|
@@ -924,7 +986,7 @@ export class WebRtcPlayerController {
|
|
|
924
986
|
* to aim for the best quality it can on the given network link.
|
|
925
987
|
*/
|
|
926
988
|
sendEncoderMinQP(minQP) {
|
|
927
|
-
Logger.Info(`MinQP=${minQP}\n`);
|
|
989
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MinQP=${minQP}\n`);
|
|
928
990
|
if (minQP != null) {
|
|
929
991
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
930
992
|
JSON.stringify({
|
|
@@ -943,7 +1005,7 @@ export class WebRtcPlayerController {
|
|
|
943
1005
|
* to drop quality as low as needed on the given network link.
|
|
944
1006
|
*/
|
|
945
1007
|
sendEncoderMaxQP(maxQP) {
|
|
946
|
-
Logger.Info(`MaxQP=${maxQP}\n`);
|
|
1008
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MaxQP=${maxQP}\n`);
|
|
947
1009
|
if (maxQP != null) {
|
|
948
1010
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
949
1011
|
JSON.stringify({
|
|
@@ -952,6 +1014,40 @@ export class WebRtcPlayerController {
|
|
|
952
1014
|
]);
|
|
953
1015
|
}
|
|
954
1016
|
}
|
|
1017
|
+
/**
|
|
1018
|
+
* Send the MinQuality encoder setting to the UE Instance.
|
|
1019
|
+
* @param minQuality - The lower bound for quality when encoding
|
|
1020
|
+
* valid values are (0-100) where:
|
|
1021
|
+
* 0 = Worst quality.
|
|
1022
|
+
* 100 = Best quality.
|
|
1023
|
+
*/
|
|
1024
|
+
sendEncoderMinQuality(minQuality) {
|
|
1025
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MinQuality=${minQuality}\n`);
|
|
1026
|
+
if (minQuality != null) {
|
|
1027
|
+
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1028
|
+
JSON.stringify({
|
|
1029
|
+
'Encoder.MinQuality': minQuality
|
|
1030
|
+
})
|
|
1031
|
+
]);
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
/**
|
|
1035
|
+
* Send the MaxQuality encoder setting to the UE Instance.
|
|
1036
|
+
* @param maxQuality - The upper bound for quality when encoding
|
|
1037
|
+
* valid values are (0-100) where:
|
|
1038
|
+
* 0 = Worst quality.
|
|
1039
|
+
* 100 = Best quality.
|
|
1040
|
+
*/
|
|
1041
|
+
sendEncoderMaxQuality(maxQuality) {
|
|
1042
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MaxQuality=${maxQuality}\n`);
|
|
1043
|
+
if (maxQuality != null) {
|
|
1044
|
+
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1045
|
+
JSON.stringify({
|
|
1046
|
+
'Encoder.MaxQuality': maxQuality
|
|
1047
|
+
})
|
|
1048
|
+
]);
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
955
1051
|
/**
|
|
956
1052
|
* Send the { WebRTC.MinBitrate: SomeNumber }} command to UE to set
|
|
957
1053
|
* the minimum bitrate that we allow WebRTC to use
|
|
@@ -959,7 +1055,7 @@ export class WebRtcPlayerController {
|
|
|
959
1055
|
* @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.
|
|
960
1056
|
*/
|
|
961
1057
|
sendWebRTCMinBitrate(minBitrate) {
|
|
962
|
-
Logger.Info(`WebRTC Min Bitrate=${minBitrate}`);
|
|
1058
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC Min Bitrate=${minBitrate}`);
|
|
963
1059
|
if (minBitrate != null) {
|
|
964
1060
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
965
1061
|
JSON.stringify({
|
|
@@ -975,7 +1071,7 @@ export class WebRtcPlayerController {
|
|
|
975
1071
|
* @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.
|
|
976
1072
|
*/
|
|
977
1073
|
sendWebRTCMaxBitrate(maxBitrate) {
|
|
978
|
-
Logger.Info(`WebRTC Max Bitrate=${maxBitrate}`);
|
|
1074
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC Max Bitrate=${maxBitrate}`);
|
|
979
1075
|
if (maxBitrate != null) {
|
|
980
1076
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
981
1077
|
JSON.stringify({
|
|
@@ -991,7 +1087,7 @@ export class WebRtcPlayerController {
|
|
|
991
1087
|
* @param fps - The maximum stream fps.
|
|
992
1088
|
*/
|
|
993
1089
|
sendWebRTCFps(fps) {
|
|
994
|
-
Logger.Info(`WebRTC FPS=${fps}`);
|
|
1090
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC FPS=${fps}`);
|
|
995
1091
|
if (fps != null) {
|
|
996
1092
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
997
1093
|
JSON.stringify({ 'WebRTC.Fps': fps })
|
|
@@ -1006,35 +1102,35 @@ export class WebRtcPlayerController {
|
|
|
1006
1102
|
* Sends the UI Descriptor `stat fps` to the UE Instance
|
|
1007
1103
|
*/
|
|
1008
1104
|
sendShowFps() {
|
|
1009
|
-
Logger.Info('---- Sending show stat to UE ----');
|
|
1105
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending show stat to UE ----');
|
|
1010
1106
|
this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify({ 'stat.fps': '' })]);
|
|
1011
1107
|
}
|
|
1012
1108
|
/**
|
|
1013
1109
|
* Send an Iframe request to the streamer
|
|
1014
1110
|
*/
|
|
1015
1111
|
sendIframeRequest() {
|
|
1016
|
-
Logger.Info('---- Sending Request for an IFrame ----');
|
|
1112
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending Request for an IFrame ----');
|
|
1017
1113
|
this.streamMessageController.toStreamerHandlers.get('IFrameRequest')();
|
|
1018
1114
|
}
|
|
1019
1115
|
/**
|
|
1020
1116
|
* Send a UIInteraction message
|
|
1021
1117
|
*/
|
|
1022
1118
|
emitUIInteraction(descriptor) {
|
|
1023
|
-
Logger.Info('---- Sending custom UIInteraction message ----');
|
|
1119
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom UIInteraction message ----');
|
|
1024
1120
|
this.streamMessageController.toStreamerHandlers.get('UIInteraction')([JSON.stringify(descriptor)]);
|
|
1025
1121
|
}
|
|
1026
1122
|
/**
|
|
1027
1123
|
* Send a Command message
|
|
1028
1124
|
*/
|
|
1029
1125
|
emitCommand(descriptor) {
|
|
1030
|
-
Logger.Info('---- Sending custom Command message ----');
|
|
1126
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom Command message ----');
|
|
1031
1127
|
this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify(descriptor)]);
|
|
1032
1128
|
}
|
|
1033
1129
|
/**
|
|
1034
1130
|
* Send a console command message
|
|
1035
1131
|
*/
|
|
1036
1132
|
emitConsoleCommand(command) {
|
|
1037
|
-
Logger.Info('---- Sending custom Command:ConsoleCommand message ----');
|
|
1133
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom Command:ConsoleCommand message ----');
|
|
1038
1134
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1039
1135
|
JSON.stringify({
|
|
1040
1136
|
ConsoleCommand: command
|
|
@@ -1045,7 +1141,7 @@ export class WebRtcPlayerController {
|
|
|
1045
1141
|
* Sends a request to the UE Instance to have ownership of Quality
|
|
1046
1142
|
*/
|
|
1047
1143
|
sendRequestQualityControlOwnership() {
|
|
1048
|
-
Logger.Info('---- Sending Request to Control Quality ----');
|
|
1144
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending Request to Control Quality ----');
|
|
1049
1145
|
this.toStreamerMessagesController.SendRequestQualityControl();
|
|
1050
1146
|
}
|
|
1051
1147
|
/**
|
|
@@ -1053,9 +1149,9 @@ export class WebRtcPlayerController {
|
|
|
1053
1149
|
* @param message - Latency Test Timings
|
|
1054
1150
|
*/
|
|
1055
1151
|
handleLatencyTestResult(message) {
|
|
1056
|
-
Logger.Info('DataChannelReceiveMessageType.latencyTest');
|
|
1152
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.latencyTest');
|
|
1057
1153
|
const latencyAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1058
|
-
const latencyTestResults = new LatencyTestResults();
|
|
1154
|
+
const latencyTestResults = new LatencyTestResults_1.LatencyTestResults();
|
|
1059
1155
|
Object.assign(latencyTestResults, JSON.parse(latencyAsString));
|
|
1060
1156
|
latencyTestResults.processFields();
|
|
1061
1157
|
latencyTestResults.testStartTimeMs = this.latencyStartTime;
|
|
@@ -1075,7 +1171,7 @@ export class WebRtcPlayerController {
|
|
|
1075
1171
|
* @param message - Data Channel Latency Test Response
|
|
1076
1172
|
*/
|
|
1077
1173
|
handleDataChannelLatencyTestResponse(message) {
|
|
1078
|
-
Logger.Info('DataChannelReceiveMessageType.dataChannelLatencyResponse');
|
|
1174
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.dataChannelLatencyResponse');
|
|
1079
1175
|
const responseAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1080
1176
|
const latencyTestResponse = JSON.parse(responseAsString);
|
|
1081
1177
|
this.pixelStreaming._onDataChannelLatencyTestResponse(latencyTestResponse);
|
|
@@ -1085,10 +1181,10 @@ export class WebRtcPlayerController {
|
|
|
1085
1181
|
* @param message - Initial Encoder and Web RTC Settings
|
|
1086
1182
|
*/
|
|
1087
1183
|
handleInitialSettings(message) {
|
|
1088
|
-
Logger.Info('DataChannelReceiveMessageType.InitialSettings');
|
|
1184
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.InitialSettings');
|
|
1089
1185
|
const payloadAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1090
1186
|
const parsedInitialSettings = JSON.parse(payloadAsString);
|
|
1091
|
-
const initialSettings = new InitialSettings();
|
|
1187
|
+
const initialSettings = new InitialSettings_1.InitialSettings();
|
|
1092
1188
|
if (parsedInitialSettings.Encoder) {
|
|
1093
1189
|
initialSettings.EncoderSettings = parsedInitialSettings.Encoder;
|
|
1094
1190
|
}
|
|
@@ -1100,10 +1196,10 @@ export class WebRtcPlayerController {
|
|
|
1100
1196
|
}
|
|
1101
1197
|
if (parsedInitialSettings.ConfigOptions &&
|
|
1102
1198
|
parsedInitialSettings.ConfigOptions.DefaultToHover !== undefined) {
|
|
1103
|
-
this.config.setFlagEnabled(Flags.HoveringMouseMode, !!parsedInitialSettings.ConfigOptions.DefaultToHover);
|
|
1199
|
+
this.config.setFlagEnabled(Config_1.Flags.HoveringMouseMode, !!parsedInitialSettings.ConfigOptions.DefaultToHover);
|
|
1104
1200
|
}
|
|
1105
1201
|
initialSettings.ueCompatible();
|
|
1106
|
-
Logger.Info(payloadAsString);
|
|
1202
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(payloadAsString);
|
|
1107
1203
|
this.pixelStreaming._onInitialSettings(initialSettings);
|
|
1108
1204
|
}
|
|
1109
1205
|
/**
|
|
@@ -1111,7 +1207,7 @@ export class WebRtcPlayerController {
|
|
|
1111
1207
|
* @param message - Encoders Quantization Parameter
|
|
1112
1208
|
*/
|
|
1113
1209
|
handleVideoEncoderAvgQP(message) {
|
|
1114
|
-
Logger.Info('DataChannelReceiveMessageType.VideoEncoderAvgQP');
|
|
1210
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.VideoEncoderAvgQP');
|
|
1115
1211
|
const AvgQP = Number(new TextDecoder('utf-16').decode(message.slice(1)));
|
|
1116
1212
|
this.setVideoEncoderAvgQP(AvgQP);
|
|
1117
1213
|
}
|
|
@@ -1131,9 +1227,9 @@ export class WebRtcPlayerController {
|
|
|
1131
1227
|
*/
|
|
1132
1228
|
onQualityControlOwnership(message) {
|
|
1133
1229
|
const view = new Uint8Array(message);
|
|
1134
|
-
Logger.Info('DataChannelReceiveMessageType.QualityControlOwnership');
|
|
1230
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.QualityControlOwnership');
|
|
1135
1231
|
this.isQualityController = new Boolean(view[1]).valueOf();
|
|
1136
|
-
Logger.Info(`Received quality controller message, will control quality: ${this.isQualityController}`);
|
|
1232
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Received quality controller message, will control quality: ${this.isQualityController}`);
|
|
1137
1233
|
this.pixelStreaming._onQualityControlOwnership(this.isQualityController);
|
|
1138
1234
|
}
|
|
1139
1235
|
/**
|
|
@@ -1177,9 +1273,9 @@ export class WebRtcPlayerController {
|
|
|
1177
1273
|
var _a;
|
|
1178
1274
|
(_a = this.mouseController) === null || _a === void 0 ? void 0 : _a.unregister();
|
|
1179
1275
|
if (isEnabled) {
|
|
1180
|
-
const mouseMode = this.config.isFlagEnabled(Flags.HoveringMouseMode)
|
|
1181
|
-
? ControlSchemeType.HoveringMouse
|
|
1182
|
-
: ControlSchemeType.LockedMouse;
|
|
1276
|
+
const mouseMode = this.config.isFlagEnabled(Config_1.Flags.HoveringMouseMode)
|
|
1277
|
+
? Config_1.ControlSchemeType.HoveringMouse
|
|
1278
|
+
: Config_1.ControlSchemeType.LockedMouse;
|
|
1183
1279
|
this.mouseController = this.inputClassesFactory.registerMouse(mouseMode);
|
|
1184
1280
|
}
|
|
1185
1281
|
}
|
|
@@ -1190,7 +1286,7 @@ export class WebRtcPlayerController {
|
|
|
1190
1286
|
var _a;
|
|
1191
1287
|
(_a = this.touchController) === null || _a === void 0 ? void 0 : _a.unregister();
|
|
1192
1288
|
if (isEnabled) {
|
|
1193
|
-
this.touchController = this.inputClassesFactory.registerTouch(this.config.isFlagEnabled(Flags.FakeMouseWithTouches));
|
|
1289
|
+
this.touchController = this.inputClassesFactory.registerTouch(this.config.isFlagEnabled(Config_1.Flags.FakeMouseWithTouches));
|
|
1194
1290
|
}
|
|
1195
1291
|
}
|
|
1196
1292
|
/**
|
|
@@ -1204,17 +1300,18 @@ export class WebRtcPlayerController {
|
|
|
1204
1300
|
}
|
|
1205
1301
|
}
|
|
1206
1302
|
registerDataChannelEventEmitters(dataChannel) {
|
|
1207
|
-
dataChannel.onOpen = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelOpenEvent({ label, event }));
|
|
1208
|
-
dataChannel.onClose = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelCloseEvent({ label, event }));
|
|
1209
|
-
dataChannel.onError = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelErrorEvent({ label, event }));
|
|
1303
|
+
dataChannel.onOpen = (label, event) => this.pixelStreaming.dispatchEvent(new EventEmitter_1.DataChannelOpenEvent({ label, event }));
|
|
1304
|
+
dataChannel.onClose = (label, event) => this.pixelStreaming.dispatchEvent(new EventEmitter_1.DataChannelCloseEvent({ label, event }));
|
|
1305
|
+
dataChannel.onError = (label, event) => this.pixelStreaming.dispatchEvent(new EventEmitter_1.DataChannelErrorEvent({ label, event }));
|
|
1210
1306
|
}
|
|
1211
1307
|
registerMessageHandler(name, direction, handler) {
|
|
1212
|
-
if (direction === MessageDirection.FromStreamer && typeof handler === 'undefined') {
|
|
1213
|
-
Logger.Warning(`Unable to register handler for ${name} as no handler was passed`);
|
|
1308
|
+
if (direction === StreamMessageController_1.MessageDirection.FromStreamer && typeof handler === 'undefined') {
|
|
1309
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Warning(`Unable to register handler for ${name} as no handler was passed`);
|
|
1214
1310
|
}
|
|
1215
|
-
this.streamMessageController.registerMessageHandler(direction, name, (data) => typeof handler === 'undefined' && direction === MessageDirection.ToStreamer
|
|
1311
|
+
this.streamMessageController.registerMessageHandler(direction, name, (data) => typeof handler === 'undefined' && direction === StreamMessageController_1.MessageDirection.ToStreamer
|
|
1216
1312
|
? this.sendMessageController.sendMessageToStreamer(name, data)
|
|
1217
1313
|
: handler(data));
|
|
1218
1314
|
}
|
|
1219
1315
|
}
|
|
1316
|
+
exports.WebRtcPlayerController = WebRtcPlayerController;
|
|
1220
1317
|
//# sourceMappingURL=WebRtcPlayerController.js.map
|