@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.3.0 → 0.3.1
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 +109 -109
- package/dist/commonjs/Config/Config.js +559 -559
- package/dist/commonjs/Config/SettingBase.js +98 -98
- package/dist/commonjs/Config/SettingFlag.js +49 -49
- package/dist/commonjs/Config/SettingNumber.js +83 -83
- package/dist/commonjs/Config/SettingOption.js +84 -84
- package/dist/commonjs/Config/SettingText.js +42 -42
- package/dist/commonjs/DataChannel/DataChannelController.js +106 -106
- package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +94 -94
- package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +18 -18
- package/dist/commonjs/DataChannel/DataChannelSender.js +43 -43
- package/dist/commonjs/DataChannel/InitialSettings.js +41 -41
- package/dist/commonjs/DataChannel/LatencyTestResults.js +60 -60
- package/dist/commonjs/FreezeFrame/FreezeFrame.js +93 -93
- package/dist/commonjs/FreezeFrame/FreezeFrameController.js +95 -95
- package/dist/commonjs/Inputs/GamepadController.js +188 -188
- package/dist/commonjs/Inputs/GamepadTypes.js +21 -21
- package/dist/commonjs/Inputs/IInputController.js +2 -2
- package/dist/commonjs/Inputs/InputClassesFactory.js +96 -96
- package/dist/commonjs/Inputs/KeyCodes.js +112 -112
- package/dist/commonjs/Inputs/KeyboardController.js +137 -137
- package/dist/commonjs/Inputs/MouseButtons.js +28 -28
- package/dist/commonjs/Inputs/MouseController.js +97 -97
- package/dist/commonjs/Inputs/MouseControllerHovering.js +93 -93
- package/dist/commonjs/Inputs/MouseControllerLocked.js +153 -153
- package/dist/commonjs/Inputs/SpecialKeyCodes.js +19 -19
- package/dist/commonjs/Inputs/TouchController.js +123 -123
- package/dist/commonjs/Inputs/TouchControllerFake.js +91 -91
- package/dist/commonjs/Inputs/XRGamepadController.js +124 -124
- package/dist/commonjs/PeerConnectionController/AggregatedStats.js +252 -252
- package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/CandidateStat.js +10 -10
- package/dist/commonjs/PeerConnectionController/CodecStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/DataChannelStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +22 -22
- package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +16 -16
- package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +584 -584
- package/dist/commonjs/PeerConnectionController/SessionStats.js +10 -10
- package/dist/commonjs/PeerConnectionController/StreamStats.js +10 -10
- package/dist/commonjs/PixelStreaming/PixelStreaming.js +607 -607
- package/dist/commonjs/UI/OnScreenKeyboard.js +82 -82
- package/dist/commonjs/UeInstanceMessage/ResponseController.js +38 -38
- package/dist/commonjs/UeInstanceMessage/SendMessageController.js +120 -120
- package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +210 -210
- package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +49 -49
- package/dist/commonjs/Util/EventEmitter.js +386 -386
- package/dist/commonjs/Util/FileUtil.js +108 -108
- package/dist/commonjs/Util/IURLSearchParams.js +25 -25
- package/dist/commonjs/Util/InputCoordTranslator.js +49 -49
- package/dist/commonjs/Util/RTCUtils.js +40 -40
- package/dist/commonjs/VideoPlayer/StreamController.js +67 -67
- package/dist/commonjs/VideoPlayer/VideoPlayer.js +177 -177
- package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1221 -1221
- package/dist/commonjs/WebXR/WebXRController.js +335 -335
- package/dist/commonjs/pixelstreamingfrontend.js +70 -70
- package/dist/esm/AFK/AFKController.js +105 -105
- package/dist/esm/Config/Config.js +551 -551
- package/dist/esm/Config/SettingBase.js +94 -94
- package/dist/esm/Config/SettingFlag.js +45 -45
- package/dist/esm/Config/SettingNumber.js +79 -79
- package/dist/esm/Config/SettingOption.js +80 -80
- package/dist/esm/Config/SettingText.js +38 -38
- package/dist/esm/DataChannel/DataChannelController.js +102 -102
- package/dist/esm/DataChannel/DataChannelLatencyTestController.js +90 -90
- package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +14 -14
- package/dist/esm/DataChannel/DataChannelSender.js +39 -39
- package/dist/esm/DataChannel/InitialSettings.js +34 -34
- package/dist/esm/DataChannel/LatencyTestResults.js +56 -56
- package/dist/esm/FreezeFrame/FreezeFrame.js +89 -89
- package/dist/esm/FreezeFrame/FreezeFrameController.js +91 -91
- package/dist/esm/Inputs/GamepadController.js +184 -184
- package/dist/esm/Inputs/GamepadTypes.js +17 -17
- package/dist/esm/Inputs/IInputController.js +1 -1
- package/dist/esm/Inputs/InputClassesFactory.js +91 -91
- package/dist/esm/Inputs/KeyCodes.js +109 -109
- package/dist/esm/Inputs/KeyboardController.js +133 -133
- package/dist/esm/Inputs/MouseButtons.js +23 -23
- package/dist/esm/Inputs/MouseController.js +93 -93
- package/dist/esm/Inputs/MouseControllerHovering.js +89 -89
- package/dist/esm/Inputs/MouseControllerLocked.js +149 -149
- package/dist/esm/Inputs/SpecialKeyCodes.js +15 -15
- package/dist/esm/Inputs/TouchController.js +119 -119
- package/dist/esm/Inputs/TouchControllerFake.js +87 -87
- package/dist/esm/Inputs/XRGamepadController.js +120 -120
- package/dist/esm/PeerConnectionController/AggregatedStats.js +248 -248
- package/dist/esm/PeerConnectionController/CandidatePairStats.js +6 -6
- package/dist/esm/PeerConnectionController/CandidateStat.js +6 -6
- package/dist/esm/PeerConnectionController/CodecStats.js +6 -6
- package/dist/esm/PeerConnectionController/DataChannelStats.js +6 -6
- package/dist/esm/PeerConnectionController/InboundRTPStats.js +16 -16
- package/dist/esm/PeerConnectionController/InboundTrackStats.js +6 -6
- package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +11 -11
- package/dist/esm/PeerConnectionController/PeerConnectionController.js +580 -580
- package/dist/esm/PeerConnectionController/SessionStats.js +6 -6
- package/dist/esm/PeerConnectionController/StreamStats.js +6 -6
- package/dist/esm/PixelStreaming/PixelStreaming.js +603 -603
- package/dist/esm/UI/OnScreenKeyboard.js +78 -78
- package/dist/esm/UeInstanceMessage/ResponseController.js +34 -34
- package/dist/esm/UeInstanceMessage/SendMessageController.js +116 -116
- package/dist/esm/UeInstanceMessage/StreamMessageController.js +205 -205
- package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +45 -45
- package/dist/esm/Util/EventEmitter.js +345 -345
- package/dist/esm/Util/FileUtil.js +103 -103
- package/dist/esm/Util/IURLSearchParams.js +21 -21
- package/dist/esm/Util/InputCoordTranslator.js +45 -45
- package/dist/esm/Util/RTCUtils.js +36 -36
- package/dist/esm/VideoPlayer/StreamController.js +63 -63
- package/dist/esm/VideoPlayer/VideoPlayer.js +173 -173
- package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1217 -1217
- package/dist/esm/WebXR/WebXRController.js +331 -331
- package/dist/esm/pixelstreamingfrontend.js +24 -24
- package/dist/types/AFK/AFKController.d.ts +38 -38
- package/dist/types/Config/Config.d.ts +220 -220
- package/dist/types/Config/SettingBase.d.ts +43 -43
- package/dist/types/Config/SettingFlag.d.ts +24 -24
- package/dist/types/Config/SettingNumber.d.ts +41 -41
- package/dist/types/Config/SettingOption.d.ts +41 -41
- package/dist/types/Config/SettingText.d.ts +21 -21
- package/dist/types/DataChannel/DataChannelController.d.ts +59 -59
- package/dist/types/DataChannel/DataChannelLatencyTestController.d.ts +25 -25
- package/dist/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
- package/dist/types/DataChannel/DataChannelSender.d.ts +21 -21
- package/dist/types/DataChannel/InitialSettings.d.ts +44 -44
- package/dist/types/DataChannel/LatencyTestResults.d.ts +31 -31
- package/dist/types/FreezeFrame/FreezeFrame.d.ts +36 -36
- package/dist/types/FreezeFrame/FreezeFrameController.d.ts +37 -37
- package/dist/types/Inputs/GamepadController.d.ts +61 -61
- package/dist/types/Inputs/GamepadTypes.d.ts +15 -15
- package/dist/types/Inputs/IInputController.d.ts +16 -16
- package/dist/types/Inputs/InputClassesFactory.d.ts +53 -53
- package/dist/types/Inputs/KeyCodes.d.ts +5 -5
- package/dist/types/Inputs/KeyboardController.d.ts +34 -34
- package/dist/types/Inputs/MouseButtons.d.ts +22 -22
- package/dist/types/Inputs/MouseController.d.ts +40 -40
- package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -26
- package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -31
- package/dist/types/Inputs/SpecialKeyCodes.d.ts +14 -14
- package/dist/types/Inputs/TouchController.d.ts +28 -28
- package/dist/types/Inputs/TouchControllerFake.d.ts +29 -29
- package/dist/types/Inputs/XRGamepadController.d.ts +15 -15
- package/dist/types/PeerConnectionController/AggregatedStats.d.ts +82 -82
- package/dist/types/PeerConnectionController/CandidatePairStats.d.ts +22 -22
- package/dist/types/PeerConnectionController/CandidateStat.d.ts +13 -13
- package/dist/types/PeerConnectionController/CodecStats.d.ts +14 -14
- package/dist/types/PeerConnectionController/DataChannelStats.d.ts +15 -15
- package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +141 -141
- package/dist/types/PeerConnectionController/InboundTrackStats.d.ts +32 -32
- package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
- package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +143 -143
- package/dist/types/PeerConnectionController/SessionStats.d.ts +8 -8
- package/dist/types/PeerConnectionController/StreamStats.d.ts +9 -9
- package/dist/types/PixelStreaming/PixelStreaming.d.ts +271 -271
- package/dist/types/UI/OnScreenKeyboard.d.ts +30 -30
- package/dist/types/UeInstanceMessage/ResponseController.d.ts +19 -19
- package/dist/types/UeInstanceMessage/SendMessageController.d.ts +18 -18
- package/dist/types/UeInstanceMessage/StreamMessageController.d.ts +29 -29
- package/dist/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
- package/dist/types/Util/EventEmitter.d.ts +429 -429
- package/dist/types/Util/FileUtil.d.ts +32 -32
- package/dist/types/Util/IURLSearchParams.d.ts +9 -9
- package/dist/types/Util/InputCoordTranslator.d.ts +29 -29
- package/dist/types/Util/RTCUtils.d.ts +8 -8
- package/dist/types/VideoPlayer/StreamController.d.ts +22 -22
- package/dist/types/VideoPlayer/VideoPlayer.d.ts +78 -78
- package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -379
- package/dist/types/WebXR/WebXRController.d.ts +42 -42
- package/dist/types/pixelstreamingfrontend.d.ts +23 -23
- package/package.json +45 -45
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.SettingText = void 0;
|
|
5
|
-
const SettingBase_1 = require("./SettingBase");
|
|
6
|
-
/**
|
|
7
|
-
* A text setting object with a text label.
|
|
8
|
-
*/
|
|
9
|
-
class SettingText extends SettingBase_1.SettingBase {
|
|
10
|
-
constructor(id, label, description, defaultTextValue, useUrlParams,
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
12
|
-
defaultOnChangeListener = () => {
|
|
13
|
-
/* Do nothing, to be overridden. */
|
|
14
|
-
}) {
|
|
15
|
-
super(id, label, description, defaultTextValue, defaultOnChangeListener);
|
|
16
|
-
if (!useUrlParams || !this.hasURLParam(this.id)) {
|
|
17
|
-
this.text = defaultTextValue;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
// parse flag from url parameters
|
|
21
|
-
this.text = this.getURLParam(this.id);
|
|
22
|
-
}
|
|
23
|
-
this.useUrlParams = useUrlParams;
|
|
24
|
-
}
|
|
25
|
-
getValueAsString() {
|
|
26
|
-
return this.text;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @return The setting's value.
|
|
30
|
-
*/
|
|
31
|
-
get text() {
|
|
32
|
-
return this.value;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Update the setting's stored value.
|
|
36
|
-
* @param inValue The new value for the setting.
|
|
37
|
-
*/
|
|
38
|
-
set text(inValue) {
|
|
39
|
-
this.value = inValue;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.SettingText = SettingText;
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SettingText = void 0;
|
|
5
|
+
const SettingBase_1 = require("./SettingBase");
|
|
6
|
+
/**
|
|
7
|
+
* A text setting object with a text label.
|
|
8
|
+
*/
|
|
9
|
+
class SettingText extends SettingBase_1.SettingBase {
|
|
10
|
+
constructor(id, label, description, defaultTextValue, useUrlParams,
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
12
|
+
defaultOnChangeListener = () => {
|
|
13
|
+
/* Do nothing, to be overridden. */
|
|
14
|
+
}) {
|
|
15
|
+
super(id, label, description, defaultTextValue, defaultOnChangeListener);
|
|
16
|
+
if (!useUrlParams || !this.hasURLParam(this.id)) {
|
|
17
|
+
this.text = defaultTextValue;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// parse flag from url parameters
|
|
21
|
+
this.text = this.getURLParam(this.id);
|
|
22
|
+
}
|
|
23
|
+
this.useUrlParams = useUrlParams;
|
|
24
|
+
}
|
|
25
|
+
getValueAsString() {
|
|
26
|
+
return this.text;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @return The setting's value.
|
|
30
|
+
*/
|
|
31
|
+
get text() {
|
|
32
|
+
return this.value;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Update the setting's stored value.
|
|
36
|
+
* @param inValue The new value for the setting.
|
|
37
|
+
*/
|
|
38
|
+
set text(inValue) {
|
|
39
|
+
this.value = inValue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.SettingText = SettingText;
|
|
43
43
|
//# sourceMappingURL=SettingText.js.map
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DataChannelController = void 0;
|
|
5
|
-
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
-
/**
|
|
7
|
-
* Handles the Sending and Receiving of messages to the UE Instance via the Data Channel
|
|
8
|
-
*/
|
|
9
|
-
class DataChannelController {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.isReceivingFreezeFrame = false;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* return the current state of a datachannel controller instance
|
|
15
|
-
* @returns the current DataChannelController instance
|
|
16
|
-
*/
|
|
17
|
-
getDataChannelInstance() {
|
|
18
|
-
return this;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* To Create and Set up a Data Channel
|
|
22
|
-
* @param peerConnection - The RTC Peer Connection
|
|
23
|
-
* @param label - Label of the Data Channel
|
|
24
|
-
* @param datachannelOptions - Optional RTC DataChannel options
|
|
25
|
-
*/
|
|
26
|
-
createDataChannel(peerConnection, label, datachannelOptions) {
|
|
27
|
-
this.peerConnection = peerConnection;
|
|
28
|
-
this.label = label;
|
|
29
|
-
this.datachannelOptions = datachannelOptions;
|
|
30
|
-
if (datachannelOptions == null) {
|
|
31
|
-
this.datachannelOptions = {};
|
|
32
|
-
this.datachannelOptions.ordered = true;
|
|
33
|
-
}
|
|
34
|
-
this.dataChannel = this.peerConnection.createDataChannel(this.label, this.datachannelOptions);
|
|
35
|
-
this.setupDataChannel();
|
|
36
|
-
}
|
|
37
|
-
setupDataChannel() {
|
|
38
|
-
//We Want an Array Buffer not a blob
|
|
39
|
-
this.dataChannel.binaryType = 'arraybuffer';
|
|
40
|
-
this.dataChannel.onopen = (ev) => this.handleOnOpen(ev);
|
|
41
|
-
this.dataChannel.onclose = (ev) => this.handleOnClose(ev);
|
|
42
|
-
this.dataChannel.onmessage = (ev) => this.handleOnMessage(ev);
|
|
43
|
-
this.dataChannel.onerror = (ev) => this.handleOnError(ev);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Handles when the Data Channel is opened
|
|
47
|
-
*/
|
|
48
|
-
handleOnOpen(ev) {
|
|
49
|
-
var _a;
|
|
50
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) opened.`);
|
|
51
|
-
this.onOpen((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Handles when the Data Channel is closed
|
|
55
|
-
*/
|
|
56
|
-
handleOnClose(ev) {
|
|
57
|
-
var _a;
|
|
58
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) closed.`);
|
|
59
|
-
this.onClose((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Handles when a message is received
|
|
63
|
-
* @param event - Message Event
|
|
64
|
-
*/
|
|
65
|
-
handleOnMessage(event) {
|
|
66
|
-
// Higher log level to prevent log spam with messages received
|
|
67
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) message: ${event}`);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Handles when an error is thrown
|
|
71
|
-
* @param event - Error Event
|
|
72
|
-
*/
|
|
73
|
-
handleOnError(event) {
|
|
74
|
-
var _a;
|
|
75
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) error: ${event}`);
|
|
76
|
-
this.onError((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, event);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Override to register onOpen handler
|
|
80
|
-
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
81
|
-
* @param ev event
|
|
82
|
-
*/
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
84
|
-
onOpen(label, ev) {
|
|
85
|
-
// empty default implementation
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Override to register onClose handler
|
|
89
|
-
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
90
|
-
* @param ev event
|
|
91
|
-
*/
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
93
|
-
onClose(label, ev) {
|
|
94
|
-
// empty default implementation
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Override to register onError handler
|
|
98
|
-
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
99
|
-
* @param ev event
|
|
100
|
-
*/
|
|
101
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
102
|
-
onError(label, ev) {
|
|
103
|
-
// empty default implementation
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.DataChannelController = DataChannelController;
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataChannelController = void 0;
|
|
5
|
+
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
+
/**
|
|
7
|
+
* Handles the Sending and Receiving of messages to the UE Instance via the Data Channel
|
|
8
|
+
*/
|
|
9
|
+
class DataChannelController {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.isReceivingFreezeFrame = false;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* return the current state of a datachannel controller instance
|
|
15
|
+
* @returns the current DataChannelController instance
|
|
16
|
+
*/
|
|
17
|
+
getDataChannelInstance() {
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* To Create and Set up a Data Channel
|
|
22
|
+
* @param peerConnection - The RTC Peer Connection
|
|
23
|
+
* @param label - Label of the Data Channel
|
|
24
|
+
* @param datachannelOptions - Optional RTC DataChannel options
|
|
25
|
+
*/
|
|
26
|
+
createDataChannel(peerConnection, label, datachannelOptions) {
|
|
27
|
+
this.peerConnection = peerConnection;
|
|
28
|
+
this.label = label;
|
|
29
|
+
this.datachannelOptions = datachannelOptions;
|
|
30
|
+
if (datachannelOptions == null) {
|
|
31
|
+
this.datachannelOptions = {};
|
|
32
|
+
this.datachannelOptions.ordered = true;
|
|
33
|
+
}
|
|
34
|
+
this.dataChannel = this.peerConnection.createDataChannel(this.label, this.datachannelOptions);
|
|
35
|
+
this.setupDataChannel();
|
|
36
|
+
}
|
|
37
|
+
setupDataChannel() {
|
|
38
|
+
//We Want an Array Buffer not a blob
|
|
39
|
+
this.dataChannel.binaryType = 'arraybuffer';
|
|
40
|
+
this.dataChannel.onopen = (ev) => this.handleOnOpen(ev);
|
|
41
|
+
this.dataChannel.onclose = (ev) => this.handleOnClose(ev);
|
|
42
|
+
this.dataChannel.onmessage = (ev) => this.handleOnMessage(ev);
|
|
43
|
+
this.dataChannel.onerror = (ev) => this.handleOnError(ev);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Handles when the Data Channel is opened
|
|
47
|
+
*/
|
|
48
|
+
handleOnOpen(ev) {
|
|
49
|
+
var _a;
|
|
50
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) opened.`);
|
|
51
|
+
this.onOpen((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Handles when the Data Channel is closed
|
|
55
|
+
*/
|
|
56
|
+
handleOnClose(ev) {
|
|
57
|
+
var _a;
|
|
58
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) closed.`);
|
|
59
|
+
this.onClose((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, ev);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Handles when a message is received
|
|
63
|
+
* @param event - Message Event
|
|
64
|
+
*/
|
|
65
|
+
handleOnMessage(event) {
|
|
66
|
+
// Higher log level to prevent log spam with messages received
|
|
67
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) message: ${event}`);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handles when an error is thrown
|
|
71
|
+
* @param event - Error Event
|
|
72
|
+
*/
|
|
73
|
+
handleOnError(event) {
|
|
74
|
+
var _a;
|
|
75
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Data Channel (${this.label}) error: ${event}`);
|
|
76
|
+
this.onError((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.label, event);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Override to register onOpen handler
|
|
80
|
+
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
81
|
+
* @param ev event
|
|
82
|
+
*/
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
84
|
+
onOpen(label, ev) {
|
|
85
|
+
// empty default implementation
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Override to register onClose handler
|
|
89
|
+
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
90
|
+
* @param ev event
|
|
91
|
+
*/
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
93
|
+
onClose(label, ev) {
|
|
94
|
+
// empty default implementation
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Override to register onError handler
|
|
98
|
+
* @param label Data channel label ("datachannel", "send-datachannel", "recv-datachannel")
|
|
99
|
+
* @param ev event
|
|
100
|
+
*/
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
102
|
+
onError(label, ev) {
|
|
103
|
+
// empty default implementation
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.DataChannelController = DataChannelController;
|
|
107
107
|
//# sourceMappingURL=DataChannelController.js.map
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DataChannelLatencyTestController = void 0;
|
|
5
|
-
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
-
const DataChannelLatencyTestResults_1 = require("./DataChannelLatencyTestResults");
|
|
7
|
-
class DataChannelLatencyTestController {
|
|
8
|
-
constructor(sink, callback) {
|
|
9
|
-
this.intervalHandle = undefined;
|
|
10
|
-
this.sink = sink;
|
|
11
|
-
this.callback = callback;
|
|
12
|
-
this.records = new Map();
|
|
13
|
-
this.seq = 0;
|
|
14
|
-
}
|
|
15
|
-
start(config) {
|
|
16
|
-
if (this.isRunning()) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
this.startTime = Date.now();
|
|
20
|
-
this.records.clear();
|
|
21
|
-
this.intervalHandle = window.setInterval((() => {
|
|
22
|
-
if (Date.now() - this.startTime >= config.duration) {
|
|
23
|
-
this.stop();
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this.sendRequest(config.requestSize, config.responseSize);
|
|
27
|
-
}
|
|
28
|
-
}).bind(this), Math.floor(1000 / config.rps));
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
stop() {
|
|
32
|
-
if (this.intervalHandle) {
|
|
33
|
-
window.clearInterval(this.intervalHandle);
|
|
34
|
-
this.intervalHandle = undefined;
|
|
35
|
-
this.callback(this.produceResult());
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
produceResult() {
|
|
39
|
-
const resultRecords = new Map(this.records);
|
|
40
|
-
return {
|
|
41
|
-
records: resultRecords,
|
|
42
|
-
dataChannelRtt: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
43
|
-
return acc + (next.playerReceivedTimestamp - next.playerSentTimestamp);
|
|
44
|
-
}, 0) / this.records.size),
|
|
45
|
-
playerToStreamerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
46
|
-
return acc + (next.streamerReceivedTimestamp - next.playerSentTimestamp);
|
|
47
|
-
}, 0) / this.records.size),
|
|
48
|
-
streamerToPlayerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
49
|
-
return acc + (next.playerReceivedTimestamp - next.streamerSentTimestamp);
|
|
50
|
-
}, 0) / this.records.size),
|
|
51
|
-
exportLatencyAsCSV: () => {
|
|
52
|
-
let csv = 'Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\n';
|
|
53
|
-
resultRecords.forEach((record) => {
|
|
54
|
-
csv += record.playerSentTimestamp + ';';
|
|
55
|
-
csv += record.playerReceivedTimestamp - record.playerSentTimestamp + ';';
|
|
56
|
-
csv += record.streamerReceivedTimestamp - record.playerSentTimestamp + ';';
|
|
57
|
-
csv += record.playerReceivedTimestamp - record.streamerSentTimestamp + ';';
|
|
58
|
-
csv += '\n';
|
|
59
|
-
});
|
|
60
|
-
return csv;
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
isRunning() {
|
|
65
|
-
return !!this.intervalHandle;
|
|
66
|
-
}
|
|
67
|
-
receive(response) {
|
|
68
|
-
if (!this.isRunning()) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (!response) {
|
|
72
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Error('Undefined response from server');
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const record = this.records.get(response.Seq);
|
|
76
|
-
if (record) {
|
|
77
|
-
record.update(response);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
sendRequest(requestSize, responseSize) {
|
|
81
|
-
const request = this.createRequest(requestSize, responseSize);
|
|
82
|
-
const record = new DataChannelLatencyTestResults_1.DataChannelLatencyTestRecord(request);
|
|
83
|
-
this.records.set(record.seq, record);
|
|
84
|
-
this.sink(request);
|
|
85
|
-
}
|
|
86
|
-
createRequest(requestSize, responseSize) {
|
|
87
|
-
return {
|
|
88
|
-
Seq: this.seq++,
|
|
89
|
-
FillResponseSize: responseSize,
|
|
90
|
-
Filler: requestSize ? 'A'.repeat(requestSize) : ''
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
exports.DataChannelLatencyTestController = DataChannelLatencyTestController;
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataChannelLatencyTestController = void 0;
|
|
5
|
+
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
+
const DataChannelLatencyTestResults_1 = require("./DataChannelLatencyTestResults");
|
|
7
|
+
class DataChannelLatencyTestController {
|
|
8
|
+
constructor(sink, callback) {
|
|
9
|
+
this.intervalHandle = undefined;
|
|
10
|
+
this.sink = sink;
|
|
11
|
+
this.callback = callback;
|
|
12
|
+
this.records = new Map();
|
|
13
|
+
this.seq = 0;
|
|
14
|
+
}
|
|
15
|
+
start(config) {
|
|
16
|
+
if (this.isRunning()) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
this.startTime = Date.now();
|
|
20
|
+
this.records.clear();
|
|
21
|
+
this.intervalHandle = window.setInterval((() => {
|
|
22
|
+
if (Date.now() - this.startTime >= config.duration) {
|
|
23
|
+
this.stop();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.sendRequest(config.requestSize, config.responseSize);
|
|
27
|
+
}
|
|
28
|
+
}).bind(this), Math.floor(1000 / config.rps));
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
stop() {
|
|
32
|
+
if (this.intervalHandle) {
|
|
33
|
+
window.clearInterval(this.intervalHandle);
|
|
34
|
+
this.intervalHandle = undefined;
|
|
35
|
+
this.callback(this.produceResult());
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
produceResult() {
|
|
39
|
+
const resultRecords = new Map(this.records);
|
|
40
|
+
return {
|
|
41
|
+
records: resultRecords,
|
|
42
|
+
dataChannelRtt: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
43
|
+
return acc + (next.playerReceivedTimestamp - next.playerSentTimestamp);
|
|
44
|
+
}, 0) / this.records.size),
|
|
45
|
+
playerToStreamerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
46
|
+
return acc + (next.streamerReceivedTimestamp - next.playerSentTimestamp);
|
|
47
|
+
}, 0) / this.records.size),
|
|
48
|
+
streamerToPlayerTime: Math.ceil(Array.from(this.records.values()).reduce((acc, next) => {
|
|
49
|
+
return acc + (next.playerReceivedTimestamp - next.streamerSentTimestamp);
|
|
50
|
+
}, 0) / this.records.size),
|
|
51
|
+
exportLatencyAsCSV: () => {
|
|
52
|
+
let csv = 'Timestamp;RTT;PlayerToStreamer;StreamerToPlayer;\n';
|
|
53
|
+
resultRecords.forEach((record) => {
|
|
54
|
+
csv += record.playerSentTimestamp + ';';
|
|
55
|
+
csv += record.playerReceivedTimestamp - record.playerSentTimestamp + ';';
|
|
56
|
+
csv += record.streamerReceivedTimestamp - record.playerSentTimestamp + ';';
|
|
57
|
+
csv += record.playerReceivedTimestamp - record.streamerSentTimestamp + ';';
|
|
58
|
+
csv += '\n';
|
|
59
|
+
});
|
|
60
|
+
return csv;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
isRunning() {
|
|
65
|
+
return !!this.intervalHandle;
|
|
66
|
+
}
|
|
67
|
+
receive(response) {
|
|
68
|
+
if (!this.isRunning()) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!response) {
|
|
72
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error('Undefined response from server');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const record = this.records.get(response.Seq);
|
|
76
|
+
if (record) {
|
|
77
|
+
record.update(response);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
sendRequest(requestSize, responseSize) {
|
|
81
|
+
const request = this.createRequest(requestSize, responseSize);
|
|
82
|
+
const record = new DataChannelLatencyTestResults_1.DataChannelLatencyTestRecord(request);
|
|
83
|
+
this.records.set(record.seq, record);
|
|
84
|
+
this.sink(request);
|
|
85
|
+
}
|
|
86
|
+
createRequest(requestSize, responseSize) {
|
|
87
|
+
return {
|
|
88
|
+
Seq: this.seq++,
|
|
89
|
+
FillResponseSize: responseSize,
|
|
90
|
+
Filler: requestSize ? 'A'.repeat(requestSize) : ''
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.DataChannelLatencyTestController = DataChannelLatencyTestController;
|
|
95
95
|
//# sourceMappingURL=DataChannelLatencyTestController.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DataChannelLatencyTestRecord = void 0;
|
|
5
|
-
class DataChannelLatencyTestRecord {
|
|
6
|
-
constructor(request) {
|
|
7
|
-
this.seq = request.Seq;
|
|
8
|
-
this.playerSentTimestamp = Date.now();
|
|
9
|
-
this.requestFillerSize = request.Filler ? request.Filler.length : 0;
|
|
10
|
-
}
|
|
11
|
-
update(response) {
|
|
12
|
-
this.playerReceivedTimestamp = Date.now();
|
|
13
|
-
this.streamerReceivedTimestamp = response.ReceivedTimestamp;
|
|
14
|
-
this.streamerSentTimestamp = response.SentTimestamp;
|
|
15
|
-
this.responseFillerSize = response.Filler ? response.Filler.length : 0;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.DataChannelLatencyTestRecord = DataChannelLatencyTestRecord;
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataChannelLatencyTestRecord = void 0;
|
|
5
|
+
class DataChannelLatencyTestRecord {
|
|
6
|
+
constructor(request) {
|
|
7
|
+
this.seq = request.Seq;
|
|
8
|
+
this.playerSentTimestamp = Date.now();
|
|
9
|
+
this.requestFillerSize = request.Filler ? request.Filler.length : 0;
|
|
10
|
+
}
|
|
11
|
+
update(response) {
|
|
12
|
+
this.playerReceivedTimestamp = Date.now();
|
|
13
|
+
this.streamerReceivedTimestamp = response.ReceivedTimestamp;
|
|
14
|
+
this.streamerSentTimestamp = response.SentTimestamp;
|
|
15
|
+
this.responseFillerSize = response.Filler ? response.Filler.length : 0;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.DataChannelLatencyTestRecord = DataChannelLatencyTestRecord;
|
|
19
19
|
//# sourceMappingURL=DataChannelLatencyTestResults.js.map
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DataChannelSender = void 0;
|
|
5
|
-
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
-
/**
|
|
7
|
-
* A class for sending data channel messages
|
|
8
|
-
*/
|
|
9
|
-
class DataChannelSender {
|
|
10
|
-
/**
|
|
11
|
-
* @param dataChannelProvider - Data channel object type
|
|
12
|
-
*/
|
|
13
|
-
constructor(dataChannelProvider) {
|
|
14
|
-
this.dataChannelProvider = dataChannelProvider;
|
|
15
|
-
}
|
|
16
|
-
canSend() {
|
|
17
|
-
return (this.dataChannelProvider.getDataChannelInstance().dataChannel !== undefined &&
|
|
18
|
-
this.dataChannelProvider.getDataChannelInstance().dataChannel.readyState == 'open');
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Send Data over the Data channel to the UE Instance
|
|
22
|
-
* @param data - Message Data Array Buffer
|
|
23
|
-
*/
|
|
24
|
-
sendData(data) {
|
|
25
|
-
// reset the afk inactivity
|
|
26
|
-
const dataChannelInstance = this.dataChannelProvider.getDataChannelInstance();
|
|
27
|
-
if (dataChannelInstance.dataChannel.readyState == 'open') {
|
|
28
|
-
dataChannelInstance.dataChannel.send(data);
|
|
29
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Message Sent: ${new Uint8Array(data)}`);
|
|
30
|
-
this.resetAfkWarningTimerOnDataSend();
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`Message Failed: ${new Uint8Array(data)}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* An override method for resetting the Afk warning timer when data is sent over the data channel
|
|
38
|
-
*/
|
|
39
|
-
resetAfkWarningTimerOnDataSend() {
|
|
40
|
-
// Base Functionality: Do Nothing
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.DataChannelSender = DataChannelSender;
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataChannelSender = void 0;
|
|
5
|
+
const lib_pixelstreamingcommon_ue5_5_1 = require("@epicgames-ps/lib-pixelstreamingcommon-ue5.5");
|
|
6
|
+
/**
|
|
7
|
+
* A class for sending data channel messages
|
|
8
|
+
*/
|
|
9
|
+
class DataChannelSender {
|
|
10
|
+
/**
|
|
11
|
+
* @param dataChannelProvider - Data channel object type
|
|
12
|
+
*/
|
|
13
|
+
constructor(dataChannelProvider) {
|
|
14
|
+
this.dataChannelProvider = dataChannelProvider;
|
|
15
|
+
}
|
|
16
|
+
canSend() {
|
|
17
|
+
return (this.dataChannelProvider.getDataChannelInstance().dataChannel !== undefined &&
|
|
18
|
+
this.dataChannelProvider.getDataChannelInstance().dataChannel.readyState == 'open');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Send Data over the Data channel to the UE Instance
|
|
22
|
+
* @param data - Message Data Array Buffer
|
|
23
|
+
*/
|
|
24
|
+
sendData(data) {
|
|
25
|
+
// reset the afk inactivity
|
|
26
|
+
const dataChannelInstance = this.dataChannelProvider.getDataChannelInstance();
|
|
27
|
+
if (dataChannelInstance.dataChannel.readyState == 'open') {
|
|
28
|
+
dataChannelInstance.dataChannel.send(data);
|
|
29
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Info(`Message Sent: ${new Uint8Array(data)}`);
|
|
30
|
+
this.resetAfkWarningTimerOnDataSend();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
lib_pixelstreamingcommon_ue5_5_1.Logger.Error(`Message Failed: ${new Uint8Array(data)}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* An override method for resetting the Afk warning timer when data is sent over the data channel
|
|
38
|
+
*/
|
|
39
|
+
resetAfkWarningTimerOnDataSend() {
|
|
40
|
+
// Base Functionality: Do Nothing
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.DataChannelSender = DataChannelSender;
|
|
44
44
|
//# sourceMappingURL=DataChannelSender.js.map
|