@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.2 → 0.4.4
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 +14 -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.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 +60 -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 +4 -15
- 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 +80 -64
- 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 +119 -115
- 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 +280 -217
- 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 +58 -23
- package/dist/esm/pixelstreamingfrontend.js.map +1 -1
- package/dist/types/Config/Config.d.ts +5 -0
- package/dist/types/DataChannel/DataChannelController.d.ts +1 -1
- 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 +1 -0
- package/dist/types/WebXR/WebXRController.d.ts +0 -1
- package/dist/types/pixelstreamingfrontend.d.ts +4 -4
- package/package.json +8 -8
- package/src/Config/Config.ts +19 -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/Inputs/MouseControllerHovering.ts +2 -2
- package/src/Inputs/MouseControllerLocked.ts +2 -2
- package/src/PeerConnectionController/PeerConnectionController.ts +5 -5
- 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 +82 -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 +4 -27
- 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({
|
|
@@ -960,7 +1022,7 @@ export class WebRtcPlayerController {
|
|
|
960
1022
|
* 100 = Best quality.
|
|
961
1023
|
*/
|
|
962
1024
|
sendEncoderMinQuality(minQuality) {
|
|
963
|
-
Logger.Info(`MinQuality=${minQuality}\n`);
|
|
1025
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MinQuality=${minQuality}\n`);
|
|
964
1026
|
if (minQuality != null) {
|
|
965
1027
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
966
1028
|
JSON.stringify({
|
|
@@ -977,7 +1039,7 @@ export class WebRtcPlayerController {
|
|
|
977
1039
|
* 100 = Best quality.
|
|
978
1040
|
*/
|
|
979
1041
|
sendEncoderMaxQuality(maxQuality) {
|
|
980
|
-
Logger.Info(`MaxQuality=${maxQuality}\n`);
|
|
1042
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`MaxQuality=${maxQuality}\n`);
|
|
981
1043
|
if (maxQuality != null) {
|
|
982
1044
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
983
1045
|
JSON.stringify({
|
|
@@ -993,7 +1055,7 @@ export class WebRtcPlayerController {
|
|
|
993
1055
|
* @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.
|
|
994
1056
|
*/
|
|
995
1057
|
sendWebRTCMinBitrate(minBitrate) {
|
|
996
|
-
Logger.Info(`WebRTC Min Bitrate=${minBitrate}`);
|
|
1058
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC Min Bitrate=${minBitrate}`);
|
|
997
1059
|
if (minBitrate != null) {
|
|
998
1060
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
999
1061
|
JSON.stringify({
|
|
@@ -1009,7 +1071,7 @@ export class WebRtcPlayerController {
|
|
|
1009
1071
|
* @param minBitrate - The minimum bitrate we would like WebRTC to not fall below.
|
|
1010
1072
|
*/
|
|
1011
1073
|
sendWebRTCMaxBitrate(maxBitrate) {
|
|
1012
|
-
Logger.Info(`WebRTC Max Bitrate=${maxBitrate}`);
|
|
1074
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC Max Bitrate=${maxBitrate}`);
|
|
1013
1075
|
if (maxBitrate != null) {
|
|
1014
1076
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1015
1077
|
JSON.stringify({
|
|
@@ -1025,7 +1087,7 @@ export class WebRtcPlayerController {
|
|
|
1025
1087
|
* @param fps - The maximum stream fps.
|
|
1026
1088
|
*/
|
|
1027
1089
|
sendWebRTCFps(fps) {
|
|
1028
|
-
Logger.Info(`WebRTC FPS=${fps}`);
|
|
1090
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`WebRTC FPS=${fps}`);
|
|
1029
1091
|
if (fps != null) {
|
|
1030
1092
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1031
1093
|
JSON.stringify({ 'WebRTC.Fps': fps })
|
|
@@ -1040,35 +1102,35 @@ export class WebRtcPlayerController {
|
|
|
1040
1102
|
* Sends the UI Descriptor `stat fps` to the UE Instance
|
|
1041
1103
|
*/
|
|
1042
1104
|
sendShowFps() {
|
|
1043
|
-
Logger.Info('---- Sending show stat to UE ----');
|
|
1105
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending show stat to UE ----');
|
|
1044
1106
|
this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify({ 'stat.fps': '' })]);
|
|
1045
1107
|
}
|
|
1046
1108
|
/**
|
|
1047
1109
|
* Send an Iframe request to the streamer
|
|
1048
1110
|
*/
|
|
1049
1111
|
sendIframeRequest() {
|
|
1050
|
-
Logger.Info('---- Sending Request for an IFrame ----');
|
|
1112
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending Request for an IFrame ----');
|
|
1051
1113
|
this.streamMessageController.toStreamerHandlers.get('IFrameRequest')();
|
|
1052
1114
|
}
|
|
1053
1115
|
/**
|
|
1054
1116
|
* Send a UIInteraction message
|
|
1055
1117
|
*/
|
|
1056
1118
|
emitUIInteraction(descriptor) {
|
|
1057
|
-
Logger.Info('---- Sending custom UIInteraction message ----');
|
|
1119
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom UIInteraction message ----');
|
|
1058
1120
|
this.streamMessageController.toStreamerHandlers.get('UIInteraction')([JSON.stringify(descriptor)]);
|
|
1059
1121
|
}
|
|
1060
1122
|
/**
|
|
1061
1123
|
* Send a Command message
|
|
1062
1124
|
*/
|
|
1063
1125
|
emitCommand(descriptor) {
|
|
1064
|
-
Logger.Info('---- Sending custom Command message ----');
|
|
1126
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom Command message ----');
|
|
1065
1127
|
this.streamMessageController.toStreamerHandlers.get('Command')([JSON.stringify(descriptor)]);
|
|
1066
1128
|
}
|
|
1067
1129
|
/**
|
|
1068
1130
|
* Send a console command message
|
|
1069
1131
|
*/
|
|
1070
1132
|
emitConsoleCommand(command) {
|
|
1071
|
-
Logger.Info('---- Sending custom Command:ConsoleCommand message ----');
|
|
1133
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending custom Command:ConsoleCommand message ----');
|
|
1072
1134
|
this.streamMessageController.toStreamerHandlers.get('Command')([
|
|
1073
1135
|
JSON.stringify({
|
|
1074
1136
|
ConsoleCommand: command
|
|
@@ -1079,7 +1141,7 @@ export class WebRtcPlayerController {
|
|
|
1079
1141
|
* Sends a request to the UE Instance to have ownership of Quality
|
|
1080
1142
|
*/
|
|
1081
1143
|
sendRequestQualityControlOwnership() {
|
|
1082
|
-
Logger.Info('---- Sending Request to Control Quality ----');
|
|
1144
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('---- Sending Request to Control Quality ----');
|
|
1083
1145
|
this.toStreamerMessagesController.SendRequestQualityControl();
|
|
1084
1146
|
}
|
|
1085
1147
|
/**
|
|
@@ -1087,9 +1149,9 @@ export class WebRtcPlayerController {
|
|
|
1087
1149
|
* @param message - Latency Test Timings
|
|
1088
1150
|
*/
|
|
1089
1151
|
handleLatencyTestResult(message) {
|
|
1090
|
-
Logger.Info('DataChannelReceiveMessageType.latencyTest');
|
|
1152
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.latencyTest');
|
|
1091
1153
|
const latencyAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1092
|
-
const latencyTestResults = new LatencyTestResults();
|
|
1154
|
+
const latencyTestResults = new LatencyTestResults_1.LatencyTestResults();
|
|
1093
1155
|
Object.assign(latencyTestResults, JSON.parse(latencyAsString));
|
|
1094
1156
|
latencyTestResults.processFields();
|
|
1095
1157
|
latencyTestResults.testStartTimeMs = this.latencyStartTime;
|
|
@@ -1109,7 +1171,7 @@ export class WebRtcPlayerController {
|
|
|
1109
1171
|
* @param message - Data Channel Latency Test Response
|
|
1110
1172
|
*/
|
|
1111
1173
|
handleDataChannelLatencyTestResponse(message) {
|
|
1112
|
-
Logger.Info('DataChannelReceiveMessageType.dataChannelLatencyResponse');
|
|
1174
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.dataChannelLatencyResponse');
|
|
1113
1175
|
const responseAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1114
1176
|
const latencyTestResponse = JSON.parse(responseAsString);
|
|
1115
1177
|
this.pixelStreaming._onDataChannelLatencyTestResponse(latencyTestResponse);
|
|
@@ -1119,10 +1181,10 @@ export class WebRtcPlayerController {
|
|
|
1119
1181
|
* @param message - Initial Encoder and Web RTC Settings
|
|
1120
1182
|
*/
|
|
1121
1183
|
handleInitialSettings(message) {
|
|
1122
|
-
Logger.Info('DataChannelReceiveMessageType.InitialSettings');
|
|
1184
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.InitialSettings');
|
|
1123
1185
|
const payloadAsString = new TextDecoder('utf-16').decode(message.slice(1));
|
|
1124
1186
|
const parsedInitialSettings = JSON.parse(payloadAsString);
|
|
1125
|
-
const initialSettings = new InitialSettings();
|
|
1187
|
+
const initialSettings = new InitialSettings_1.InitialSettings();
|
|
1126
1188
|
if (parsedInitialSettings.Encoder) {
|
|
1127
1189
|
initialSettings.EncoderSettings = parsedInitialSettings.Encoder;
|
|
1128
1190
|
}
|
|
@@ -1134,10 +1196,10 @@ export class WebRtcPlayerController {
|
|
|
1134
1196
|
}
|
|
1135
1197
|
if (parsedInitialSettings.ConfigOptions &&
|
|
1136
1198
|
parsedInitialSettings.ConfigOptions.DefaultToHover !== undefined) {
|
|
1137
|
-
this.config.setFlagEnabled(Flags.HoveringMouseMode, !!parsedInitialSettings.ConfigOptions.DefaultToHover);
|
|
1199
|
+
this.config.setFlagEnabled(Config_1.Flags.HoveringMouseMode, !!parsedInitialSettings.ConfigOptions.DefaultToHover);
|
|
1138
1200
|
}
|
|
1139
1201
|
initialSettings.ueCompatible();
|
|
1140
|
-
Logger.Info(payloadAsString);
|
|
1202
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(payloadAsString);
|
|
1141
1203
|
this.pixelStreaming._onInitialSettings(initialSettings);
|
|
1142
1204
|
}
|
|
1143
1205
|
/**
|
|
@@ -1145,7 +1207,7 @@ export class WebRtcPlayerController {
|
|
|
1145
1207
|
* @param message - Encoders Quantization Parameter
|
|
1146
1208
|
*/
|
|
1147
1209
|
handleVideoEncoderAvgQP(message) {
|
|
1148
|
-
Logger.Info('DataChannelReceiveMessageType.VideoEncoderAvgQP');
|
|
1210
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.VideoEncoderAvgQP');
|
|
1149
1211
|
const AvgQP = Number(new TextDecoder('utf-16').decode(message.slice(1)));
|
|
1150
1212
|
this.setVideoEncoderAvgQP(AvgQP);
|
|
1151
1213
|
}
|
|
@@ -1165,9 +1227,9 @@ export class WebRtcPlayerController {
|
|
|
1165
1227
|
*/
|
|
1166
1228
|
onQualityControlOwnership(message) {
|
|
1167
1229
|
const view = new Uint8Array(message);
|
|
1168
|
-
Logger.Info('DataChannelReceiveMessageType.QualityControlOwnership');
|
|
1230
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info('DataChannelReceiveMessageType.QualityControlOwnership');
|
|
1169
1231
|
this.isQualityController = new Boolean(view[1]).valueOf();
|
|
1170
|
-
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}`);
|
|
1171
1233
|
this.pixelStreaming._onQualityControlOwnership(this.isQualityController);
|
|
1172
1234
|
}
|
|
1173
1235
|
/**
|
|
@@ -1211,9 +1273,9 @@ export class WebRtcPlayerController {
|
|
|
1211
1273
|
var _a;
|
|
1212
1274
|
(_a = this.mouseController) === null || _a === void 0 ? void 0 : _a.unregister();
|
|
1213
1275
|
if (isEnabled) {
|
|
1214
|
-
const mouseMode = this.config.isFlagEnabled(Flags.HoveringMouseMode)
|
|
1215
|
-
? ControlSchemeType.HoveringMouse
|
|
1216
|
-
: ControlSchemeType.LockedMouse;
|
|
1276
|
+
const mouseMode = this.config.isFlagEnabled(Config_1.Flags.HoveringMouseMode)
|
|
1277
|
+
? Config_1.ControlSchemeType.HoveringMouse
|
|
1278
|
+
: Config_1.ControlSchemeType.LockedMouse;
|
|
1217
1279
|
this.mouseController = this.inputClassesFactory.registerMouse(mouseMode);
|
|
1218
1280
|
}
|
|
1219
1281
|
}
|
|
@@ -1224,7 +1286,7 @@ export class WebRtcPlayerController {
|
|
|
1224
1286
|
var _a;
|
|
1225
1287
|
(_a = this.touchController) === null || _a === void 0 ? void 0 : _a.unregister();
|
|
1226
1288
|
if (isEnabled) {
|
|
1227
|
-
this.touchController = this.inputClassesFactory.registerTouch(this.config.isFlagEnabled(Flags.FakeMouseWithTouches));
|
|
1289
|
+
this.touchController = this.inputClassesFactory.registerTouch(this.config.isFlagEnabled(Config_1.Flags.FakeMouseWithTouches));
|
|
1228
1290
|
}
|
|
1229
1291
|
}
|
|
1230
1292
|
/**
|
|
@@ -1238,17 +1300,18 @@ export class WebRtcPlayerController {
|
|
|
1238
1300
|
}
|
|
1239
1301
|
}
|
|
1240
1302
|
registerDataChannelEventEmitters(dataChannel) {
|
|
1241
|
-
dataChannel.onOpen = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelOpenEvent({ label, event }));
|
|
1242
|
-
dataChannel.onClose = (label, event) => this.pixelStreaming.dispatchEvent(new DataChannelCloseEvent({ label, event }));
|
|
1243
|
-
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 }));
|
|
1244
1306
|
}
|
|
1245
1307
|
registerMessageHandler(name, direction, handler) {
|
|
1246
|
-
if (direction === MessageDirection.FromStreamer && typeof handler === 'undefined') {
|
|
1247
|
-
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`);
|
|
1248
1310
|
}
|
|
1249
|
-
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
|
|
1250
1312
|
? this.sendMessageController.sendMessageToStreamer(name, data)
|
|
1251
1313
|
: handler(data));
|
|
1252
1314
|
}
|
|
1253
1315
|
}
|
|
1316
|
+
exports.WebRtcPlayerController = WebRtcPlayerController;
|
|
1254
1317
|
//# sourceMappingURL=WebRtcPlayerController.js.map
|