@norskvideo/norsk-studio-built-ins 1.27.0-2025-03-23-1dbee9e6 → 1.27.0-2025-03-25-1268af9f
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/client/info.js +279 -147
- package/client/style.css +28 -0
- package/lib/info.js +17 -15
- package/lib/info.js.map +1 -1
- package/lib/output.srt-caller/info.js +102 -0
- package/lib/output.srt-caller/info.js.map +1 -0
- package/lib/output.srt-caller/inline-view.js +10 -0
- package/lib/output.srt-caller/inline-view.js.map +1 -0
- package/lib/{output.srt → output.srt-caller}/runtime.d.ts +12 -1
- package/lib/{output.srt → output.srt-caller}/runtime.js +18 -0
- package/lib/output.srt-caller/runtime.js.map +1 -0
- package/lib/output.srt-caller/srt-packet-metrics.d.ts +4 -0
- package/lib/output.srt-caller/srt-packet-metrics.js +10 -0
- package/lib/output.srt-caller/srt-packet-metrics.js.map +1 -0
- package/lib/output.srt-caller/summary-view.js.map +1 -0
- package/lib/{output.srt → output.srt-caller}/types.js.map +1 -1
- package/lib/output.srt-listener/info.d.ts +3 -0
- package/lib/{output.srt → output.srt-listener}/info.js +18 -20
- package/lib/output.srt-listener/info.js.map +1 -0
- package/lib/output.srt-listener/inline-view.d.ts +6 -0
- package/lib/output.srt-listener/inline-view.js +10 -0
- package/lib/output.srt-listener/inline-view.js.map +1 -0
- package/lib/output.srt-listener/runtime.d.ts +51 -0
- package/lib/output.srt-listener/runtime.js +160 -0
- package/lib/output.srt-listener/runtime.js.map +1 -0
- package/lib/output.srt-listener/srt-packet-metrics.d.ts +4 -0
- package/lib/output.srt-listener/srt-packet-metrics.js +12 -0
- package/lib/output.srt-listener/srt-packet-metrics.js.map +1 -0
- package/lib/output.srt-listener/summary-view.d.ts +4 -0
- package/lib/output.srt-listener/summary-view.js +24 -0
- package/lib/output.srt-listener/summary-view.js.map +1 -0
- package/lib/output.srt-listener/types.d.ts +101 -0
- package/lib/output.srt-listener/types.js +3 -0
- package/lib/output.srt-listener/types.js.map +1 -0
- package/lib/output.srt-listener/types.yaml +31 -0
- package/lib/test/srt-output-caller.js +176 -0
- package/lib/test/srt-output-caller.js.map +1 -0
- package/lib/test/srt-output-listener.d.ts +1 -0
- package/lib/test/{srt-output.js → srt-output-listener.js} +3 -4
- package/lib/test/srt-output-listener.js.map +1 -0
- package/package.json +3 -3
- package/lib/output.srt/info.js.map +0 -1
- package/lib/output.srt/inline-view.js +0 -8
- package/lib/output.srt/inline-view.js.map +0 -1
- package/lib/output.srt/runtime.js.map +0 -1
- package/lib/output.srt/summary-view.js.map +0 -1
- package/lib/test/srt-output.js.map +0 -1
- /package/lib/{output.srt → output.srt-caller}/info.d.ts +0 -0
- /package/lib/{output.srt → output.srt-caller}/inline-view.d.ts +0 -0
- /package/lib/{output.srt → output.srt-caller}/summary-view.d.ts +0 -0
- /package/lib/{output.srt → output.srt-caller}/summary-view.js +0 -0
- /package/lib/{output.srt → output.srt-caller}/types.d.ts +0 -0
- /package/lib/{output.srt → output.srt-caller}/types.js +0 -0
- /package/lib/{output.srt → output.srt-caller}/types.yaml +0 -0
- /package/lib/test/{srt-output.d.ts → srt-output-caller.d.ts} +0 -0
package/client/style.css
CHANGED
@@ -392,6 +392,12 @@
|
|
392
392
|
margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
|
393
393
|
}
|
394
394
|
|
395
|
+
.divide-y > :not([hidden]) ~ :not([hidden]) {
|
396
|
+
--tw-divide-y-reverse: 0;
|
397
|
+
border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
|
398
|
+
border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
|
399
|
+
}
|
400
|
+
|
395
401
|
.truncate {
|
396
402
|
overflow: hidden;
|
397
403
|
text-overflow: ellipsis;
|
@@ -656,6 +662,11 @@
|
|
656
662
|
color: rgb(255 90 31 / var(--tw-text-opacity));
|
657
663
|
}
|
658
664
|
|
665
|
+
.text-red-300 {
|
666
|
+
--tw-text-opacity: 1;
|
667
|
+
color: rgb(248 180 180 / var(--tw-text-opacity));
|
668
|
+
}
|
669
|
+
|
659
670
|
.text-red-600 {
|
660
671
|
--tw-text-opacity: 1;
|
661
672
|
color: rgb(224 36 36 / var(--tw-text-opacity));
|
@@ -666,6 +677,10 @@
|
|
666
677
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
667
678
|
}
|
668
679
|
|
680
|
+
.underline {
|
681
|
+
text-decoration-line: underline;
|
682
|
+
}
|
683
|
+
|
669
684
|
.opacity-50 {
|
670
685
|
opacity: 0.5;
|
671
686
|
}
|
@@ -1102,6 +1117,11 @@
|
|
1102
1117
|
color: rgb(253 186 140 / var(--tw-text-opacity));
|
1103
1118
|
}
|
1104
1119
|
|
1120
|
+
.dark\:text-red-300:is(.dark *) {
|
1121
|
+
--tw-text-opacity: 1;
|
1122
|
+
color: rgb(248 180 180 / var(--tw-text-opacity));
|
1123
|
+
}
|
1124
|
+
|
1105
1125
|
.dark\:text-white:is(.dark *) {
|
1106
1126
|
--tw-text-opacity: 1;
|
1107
1127
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
@@ -1153,6 +1173,14 @@
|
|
1153
1173
|
}
|
1154
1174
|
|
1155
1175
|
@media (min-width: 640px) {
|
1176
|
+
.sm\:grid {
|
1177
|
+
display: grid;
|
1178
|
+
}
|
1179
|
+
|
1180
|
+
.sm\:grid-cols-2 {
|
1181
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
1182
|
+
}
|
1183
|
+
|
1156
1184
|
.sm\:text-sm {
|
1157
1185
|
font-size: 0.875rem;
|
1158
1186
|
line-height: 1.25rem;
|
package/lib/info.js
CHANGED
@@ -41,34 +41,36 @@ const info_11 = __importDefault(require("./output.preview/info"));
|
|
41
41
|
AllComponents.push((r) => (0, info_11.default)(r));
|
42
42
|
const info_12 = __importDefault(require("./output.rtmp/info"));
|
43
43
|
AllComponents.push((r) => (0, info_12.default)(r));
|
44
|
-
const info_13 = __importDefault(require("./output.srt/info"));
|
44
|
+
const info_13 = __importDefault(require("./output.srt-caller/info"));
|
45
45
|
AllComponents.push((r) => (0, info_13.default)(r));
|
46
|
-
const info_14 = __importDefault(require("./output.
|
46
|
+
const info_14 = __importDefault(require("./output.srt-listener/info"));
|
47
47
|
AllComponents.push((r) => (0, info_14.default)(r));
|
48
|
-
const info_15 = __importDefault(require("./output.
|
48
|
+
const info_15 = __importDefault(require("./output.statistics/info"));
|
49
49
|
AllComponents.push((r) => (0, info_15.default)(r));
|
50
|
-
const info_16 = __importDefault(require("./output.
|
50
|
+
const info_16 = __importDefault(require("./output.twitch/info"));
|
51
51
|
AllComponents.push((r) => (0, info_16.default)(r));
|
52
|
-
const info_17 = __importDefault(require("./output.
|
52
|
+
const info_17 = __importDefault(require("./output.udpTs/info"));
|
53
53
|
AllComponents.push((r) => (0, info_17.default)(r));
|
54
|
-
const info_18 = __importDefault(require("./output.
|
54
|
+
const info_18 = __importDefault(require("./output.whep/info"));
|
55
55
|
AllComponents.push((r) => (0, info_18.default)(r));
|
56
|
-
const info_19 = __importDefault(require("./
|
56
|
+
const info_19 = __importDefault(require("./output.youtube/info"));
|
57
57
|
AllComponents.push((r) => (0, info_19.default)(r));
|
58
|
-
const info_20 = __importDefault(require("./processor.
|
58
|
+
const info_20 = __importDefault(require("./processor.audioEncoder/info"));
|
59
59
|
AllComponents.push((r) => (0, info_20.default)(r));
|
60
|
-
const info_21 = __importDefault(require("./processor.
|
60
|
+
const info_21 = __importDefault(require("./processor.browserOverlay/info"));
|
61
61
|
AllComponents.push((r) => (0, info_21.default)(r));
|
62
|
-
const info_22 = __importDefault(require("./processor.
|
62
|
+
const info_22 = __importDefault(require("./processor.cascadingSwitch/info"));
|
63
63
|
AllComponents.push((r) => (0, info_22.default)(r));
|
64
|
-
const info_23 = __importDefault(require("./processor.
|
64
|
+
const info_23 = __importDefault(require("./processor.fixedLadder/info"));
|
65
65
|
AllComponents.push((r) => (0, info_23.default)(r));
|
66
|
-
const info_24 = __importDefault(require("./processor.
|
66
|
+
const info_24 = __importDefault(require("./processor.makeProgram/info"));
|
67
67
|
AllComponents.push((r) => (0, info_24.default)(r));
|
68
|
-
const info_25 = __importDefault(require("./processor.
|
68
|
+
const info_25 = __importDefault(require("./processor.onscreenGraphic/info"));
|
69
69
|
AllComponents.push((r) => (0, info_25.default)(r));
|
70
|
-
const info_26 = __importDefault(require("./processor.
|
70
|
+
const info_26 = __importDefault(require("./processor.streamKeyOverride/info"));
|
71
71
|
AllComponents.push((r) => (0, info_26.default)(r));
|
72
|
-
const info_27 = __importDefault(require("./
|
72
|
+
const info_27 = __importDefault(require("./processor.videoDecoder/info"));
|
73
73
|
AllComponents.push((r) => (0, info_27.default)(r));
|
74
|
+
const info_28 = __importDefault(require("./util.stats.latency/info"));
|
75
|
+
AllComponents.push((r) => (0, info_28.default)(r));
|
74
76
|
//# sourceMappingURL=info.js.map
|
package/lib/info.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../src/info.ts"],"names":[],"mappings":";;;;;AAYA,8BASC;AAdD,MAAM,qBAAqB,GAA4C,EAAE,CAAC;AAC1E,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,aAAa,GAAkD,EAAE,CAAC;AAExE,SAAwB,WAAW,CAAC,CAAe,EAAE,IAAY;IAC/D,IAAG,CAAC,WAAW,EAAE,CAAC;QAChB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAA;QACF,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,6DAA2C;AAC3C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAU,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC1F,gEAAiD;AACjD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAa,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC7F,mEAAuD;AACvD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAgB,EAAC,CAAC,CAAoC,CAAC,CAAC;AAChG,qEAA2D;AAC3D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAkB,EAAC,CAAC,CAAoC,CAAC,CAAC;AAClG,+DAA+C;AAC/C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAY,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC5F,sEAA6D;AAC7D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAmB,EAAC,CAAC,CAAoC,CAAC,CAAC;AACnG,kEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAe,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC/F,iEAAmD;AACnD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAc,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC9F,kEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAe,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC/F,mEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,eAAe,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC/F,kEAAmD;AACnD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,eAAc,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC9F,+DAA6C;AAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,eAAW,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC3F,
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../src/info.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,102 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.default = default_1;
|
7
|
+
const srt_socket_options_1 = __importDefault(require("../shared/srt-socket-options"));
|
8
|
+
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
9
|
+
const summary_view_1 = __importDefault(require("./summary-view"));
|
10
|
+
const inline_view_1 = __importDefault(require("./inline-view"));
|
11
|
+
const srt_packet_metrics_1 = __importDefault(require("./srt-packet-metrics"));
|
12
|
+
const srt_form_views_1 = require("../shared/srt-form-views");
|
13
|
+
function default_1(registration) {
|
14
|
+
const { defineComponent, All, validation, } = registration;
|
15
|
+
const { Port, Hostname, JitterBuffer, SrtPassphrase, SrtStreamId } = validation;
|
16
|
+
return defineComponent({
|
17
|
+
identifier: 'output.srt-caller',
|
18
|
+
category: 'output',
|
19
|
+
name: "SRT Caller Egest",
|
20
|
+
description: "This component manages the sending of SRT (Secure Reliable Transport) streams. It allows you to configure various settings to control how the SRT output is handled, including connection details, buffer settings, and delay options.",
|
21
|
+
subscription: {
|
22
|
+
accepts: {
|
23
|
+
type: "dynamic-streams",
|
24
|
+
mode: 'any',
|
25
|
+
streams: () => All.map((media) => ({ media }))
|
26
|
+
},
|
27
|
+
},
|
28
|
+
display: (desc) => {
|
29
|
+
return {
|
30
|
+
port: desc.config.port?.toString() ?? '',
|
31
|
+
host: desc.config.host,
|
32
|
+
bufferDelayMs: desc.config.bufferDelayMs?.toString() ?? 'none'
|
33
|
+
};
|
34
|
+
},
|
35
|
+
runtime: {
|
36
|
+
initialState: () => ({
|
37
|
+
enabled: true,
|
38
|
+
metrics: {
|
39
|
+
connectionCount: 0,
|
40
|
+
packetsLost: 0,
|
41
|
+
packetsResent: 0,
|
42
|
+
packetsSent: 0
|
43
|
+
}
|
44
|
+
}),
|
45
|
+
handleEvent(ev, state) {
|
46
|
+
const evType = ev.type;
|
47
|
+
switch (evType) {
|
48
|
+
case 'output-enabled':
|
49
|
+
state.enabled = true;
|
50
|
+
break;
|
51
|
+
case 'output-disabled':
|
52
|
+
state.enabled = false;
|
53
|
+
break;
|
54
|
+
case 'metrics-updated':
|
55
|
+
state.metrics = ev.metrics;
|
56
|
+
break;
|
57
|
+
default:
|
58
|
+
(0, util_1.assertUnreachable)(evType);
|
59
|
+
}
|
60
|
+
return { ...state };
|
61
|
+
},
|
62
|
+
summary: summary_view_1.default,
|
63
|
+
inline: inline_view_1.default,
|
64
|
+
metrics: [
|
65
|
+
{
|
66
|
+
title: "SRT Transmission",
|
67
|
+
view: srt_packet_metrics_1.default
|
68
|
+
}
|
69
|
+
]
|
70
|
+
},
|
71
|
+
configForm: {
|
72
|
+
form: {
|
73
|
+
port: {
|
74
|
+
help: "The port this SRT output will connect to",
|
75
|
+
hint: {
|
76
|
+
type: 'numeric',
|
77
|
+
validation: Port,
|
78
|
+
defaultValue: 5101,
|
79
|
+
}
|
80
|
+
},
|
81
|
+
host: { help: "The IP address/Hostname this SRT output will connect to", hint: { type: 'text', validation: Hostname, defaultValue: "127.0.0.1" } },
|
82
|
+
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 500.0 } },
|
83
|
+
avDelayMs: { help: "How many milliseconds to delay A/V to account for subtitles/ancillary data", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 50.0 } },
|
84
|
+
passphrase: { help: "Optional: Authentication for this SRT output", hint: { type: 'text', optional: true, validation: SrtPassphrase } },
|
85
|
+
streamId: { help: "Optional: StreamId to use when calling a remote listener", hint: { type: 'text', optional: true, validation: SrtStreamId } },
|
86
|
+
socketOptions: {
|
87
|
+
help: "Socket Options",
|
88
|
+
hint: {
|
89
|
+
type: "form-item",
|
90
|
+
view: srt_form_views_1.SocketConfiguration,
|
91
|
+
form: (0, srt_socket_options_1.default)(validation)
|
92
|
+
}
|
93
|
+
},
|
94
|
+
notes: {
|
95
|
+
help: "Additional notes about this component",
|
96
|
+
hint: { type: 'text', optional: true }
|
97
|
+
},
|
98
|
+
}
|
99
|
+
}
|
100
|
+
});
|
101
|
+
}
|
102
|
+
//# sourceMappingURL=info.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.srt-caller/info.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
4
|
+
function InlineView({ state }) {
|
5
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "srt-output", children: state.enabled ? ((0, jsx_runtime_1.jsx)("div", { children: state.metrics.connectionCount == 0 ?
|
6
|
+
(0, jsx_runtime_1.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "Not Connected" })
|
7
|
+
: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Output enabled" }), (0, jsx_runtime_1.jsxs)("div", { children: ["Sent: ", state.metrics.packetsSent] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Lost/Resent: ", state.metrics.packetsLost, "/", state.metrics.packetsResent] })] }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" })) }));
|
8
|
+
}
|
9
|
+
exports.default = InlineView;
|
10
|
+
//# sourceMappingURL=inline-view.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.srt-caller/inline-view.tsx"],"names":[],"mappings":";;;AAGA,SAAS,UAAU,CAAC,EAAE,KAAK,EAA6B;IACtD,OAAO,CACL,gCAAK,SAAS,EAAC,YAAY,YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,0CACG,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;gBACnC,gCAAK,SAAS,EAAC,uCAAuC,8BAEhD;gBACN,CAAC,CAAC,6DACA,gCAAK,SAAS,EAAC,2CAA2C,+BAEpD,EACN,sDAAY,KAAK,CAAC,OAAO,CAAC,WAAW,IAAO,EAC5C,6DAAmB,KAAK,CAAC,OAAO,CAAC,WAAW,OAAG,KAAK,CAAC,OAAO,CAAC,aAAa,IAAO,IAChF,GACD,CACP,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,2CAA2C,gCAEpD,CACP,GACG,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,UAAU,CAAC"}
|
@@ -2,7 +2,7 @@ import { Norsk, SrtOutputSettings as SdkSettings, SrtOutputNode } from '@norskvi
|
|
2
2
|
import { InstanceRouteInfo, OnCreated, ServerComponentDefinition, StudioRuntime, StudioComponentInputStream } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
3
|
import { CustomSinkNode } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
|
4
4
|
import type { SocketOptions } from '../shared/srt-types';
|
5
|
-
export type SrtOutputSettings = Pick<SdkSettings, 'port' | 'host' | '
|
5
|
+
export type SrtOutputSettings = Pick<SdkSettings, 'port' | 'host' | 'passphrase' | 'streamId' | 'bufferDelayMs' | 'avDelayMs'> & {
|
6
6
|
id: string;
|
7
7
|
displayName: string;
|
8
8
|
notes?: string;
|
@@ -10,12 +10,22 @@ export type SrtOutputSettings = Pick<SdkSettings, 'port' | 'host' | 'mode' | 'pa
|
|
10
10
|
};
|
11
11
|
export type SrtOutputState = {
|
12
12
|
enabled: boolean;
|
13
|
+
metrics: SrtMetrics;
|
14
|
+
};
|
15
|
+
export type SrtMetrics = {
|
16
|
+
connectionCount: number;
|
17
|
+
packetsLost: number;
|
18
|
+
packetsResent: number;
|
19
|
+
packetsSent: number;
|
13
20
|
};
|
14
21
|
export type SrtOutputCommand = {
|
15
22
|
type: 'enable-output' | 'disable-output';
|
16
23
|
};
|
17
24
|
export type SrtOutputEvent = {
|
18
25
|
type: 'output-enabled' | 'output-disabled';
|
26
|
+
} | {
|
27
|
+
type: 'metrics-updated';
|
28
|
+
metrics: SrtMetrics;
|
19
29
|
};
|
20
30
|
declare class SrtOutput extends CustomSinkNode {
|
21
31
|
norsk: Norsk;
|
@@ -35,6 +45,7 @@ declare class SrtOutput extends CustomSinkNode {
|
|
35
45
|
export default class SrtOutputDefinition implements ServerComponentDefinition<SrtOutputSettings, SrtOutput, SrtOutputState, SrtOutputCommand, SrtOutputEvent> {
|
36
46
|
create(norsk: Norsk, cfg: SrtOutputSettings, cb: OnCreated<SrtOutput>, runtime: StudioRuntime<SrtOutputState, SrtOutputCommand, SrtOutputEvent>): Promise<void>;
|
37
47
|
handleCommand(node: SrtOutput, command: SrtOutputCommand): Promise<void>;
|
48
|
+
handleMetricsUpdate(node: SrtOutput): Promise<void>;
|
38
49
|
instanceRoutes(): Promise<InstanceRouteInfo<SrtOutputSettings, SrtOutput, SrtOutputState, SrtOutputCommand, SrtOutputEvent>[]>;
|
39
50
|
}
|
40
51
|
export {};
|
@@ -65,8 +65,10 @@ class SrtOutput extends base_nodes_1.CustomSinkNode {
|
|
65
65
|
...this.cfg,
|
66
66
|
...this.cfg.socketOptions,
|
67
67
|
id: this.cfg.id,
|
68
|
+
mode: 'caller'
|
68
69
|
});
|
69
70
|
this.srtOutputNode = node;
|
71
|
+
this.setup({ sink: node });
|
70
72
|
}
|
71
73
|
this.srtOutputNode.subscribe(sources.map((s) => s.select()), (ctx) => ctx.streams.length == sources.length);
|
72
74
|
}
|
@@ -86,6 +88,22 @@ class SrtOutputDefinition {
|
|
86
88
|
break;
|
87
89
|
}
|
88
90
|
}
|
91
|
+
async handleMetricsUpdate(node) {
|
92
|
+
const latest = node.runtime.updates.latestMetrics();
|
93
|
+
const targetNodeId = node.srtOutputNode?.id;
|
94
|
+
if (!targetNodeId)
|
95
|
+
return;
|
96
|
+
const matching = latest.filter((l) => l.nodeId == targetNodeId);
|
97
|
+
node.runtime.updates.raiseEvent({
|
98
|
+
type: 'metrics-updated',
|
99
|
+
metrics: {
|
100
|
+
connectionCount: matching.find((m) => m.name == "norsk_connection_count")?.history.at(-1) ?? 0,
|
101
|
+
packetsSent: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'sent')?.history.at(-1) ?? 0,
|
102
|
+
packetsResent: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'retransmitted')?.history.at(-1) ?? 0,
|
103
|
+
packetsLost: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'sent_lost')?.history.at(-1) ?? 0,
|
104
|
+
}
|
105
|
+
});
|
106
|
+
}
|
89
107
|
async instanceRoutes() {
|
90
108
|
return (0, api_1.defineApi)(path_1.default.join(__dirname, 'types.yaml'), {
|
91
109
|
'/enable': {
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.srt-caller/runtime.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { MetricViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
|
2
|
+
import React from "react";
|
3
|
+
import type { SrtOutputCommand, SrtOutputSettings, SrtOutputState } from "./runtime";
|
4
|
+
export default function MetricsView({ state }: MetricViewProps<SrtOutputSettings, SrtOutputState, SrtOutputCommand>): React.JSX.Element;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.default = MetricsView;
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
5
|
+
function MetricsView({ state }) {
|
6
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "srt-output", children: state.enabled ? ((0, jsx_runtime_1.jsx)("div", { children: state.metrics.connectionCount == 0 ?
|
7
|
+
(0, jsx_runtime_1.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "Not Connected" })
|
8
|
+
: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Output enabled" }), (0, jsx_runtime_1.jsxs)("div", { children: ["Sent: ", state.metrics.packetsSent] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Lost/Resent: ", state.metrics.packetsLost, "/", state.metrics.packetsResent] })] }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" })) }));
|
9
|
+
}
|
10
|
+
//# sourceMappingURL=srt-packet-metrics.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"srt-packet-metrics.js","sourceRoot":"","sources":["../../src/output.srt-caller/srt-packet-metrics.tsx"],"names":[],"mappings":";;AAMA,8BAwBC;;AAxBD,SAAwB,WAAW,CAAC,EAAE,KAAK,EAAwE;IACjH,OAAO,CACL,gCAAK,SAAS,EAAC,YAAY,YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,0CACG,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;gBACnC,gCAAK,SAAS,EAAC,uCAAuC,8BAEhD;gBACN,CAAC,CAAC,6DACA,gCAAK,SAAS,EAAC,2CAA2C,+BAEpD,EACN,sDAAY,KAAK,CAAC,OAAO,CAAC,WAAW,IAAO,EAC5C,6DAAmB,KAAK,CAAC,OAAO,CAAC,WAAW,OAAG,KAAK,CAAC,OAAO,CAAC,aAAa,IAAO,IAChF,GACD,CACP,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,2CAA2C,gCAEpD,CACP,GACG,CACP,CAAC;AACJ,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"summary-view.js","sourceRoot":"","sources":["../../src/output.srt-caller/summary-view.tsx"],"names":[],"mappings":";;;AAOA,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,GACoD;IAE/D,MAAM,kBAAkB,GAAG,GAAS,EAAE;QACpC,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,WAAW,CAAC;YACV,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAS,EAAE;QACrC,KAAK,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,WAAW,CAAC;YACV,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACL,gCAAK,SAAS,EAAC,MAAM,YACnB,iCAAK,SAAS,EAAC,wCAAwC,aACrD,iCAAK,SAAS,EAAC,6BAA6B,aAC1C,iCACE,SAAS,EAAE,qCACT,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YACnC,EAAE,GACI,EACR,kCAAM,SAAS,EAAC,SAAS,yBACd,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAC1C,IACH,EACN,0CACG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,mCACE,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAC,kEAAkE,+BAGrE,CACV,CAAC,CAAC,CAAC,CACF,mCACE,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAC,qEAAqE,8BAGxE,CACV,GACG,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,WAAW,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/output.srt/types.ts"],"names":[],"mappings":""}
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/output.srt-caller/types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import type { SrtOutputCommand, SrtOutputEvent, SrtOutputSettings, SrtOutputState } from "./runtime";
|
2
|
+
import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
|
3
|
+
export default function (registration: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<SrtOutputSettings, SrtOutputState, SrtOutputCommand, SrtOutputEvent>;
|
@@ -8,14 +8,15 @@ const srt_socket_options_1 = __importDefault(require("../shared/srt-socket-optio
|
|
8
8
|
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
9
9
|
const summary_view_1 = __importDefault(require("./summary-view"));
|
10
10
|
const inline_view_1 = __importDefault(require("./inline-view"));
|
11
|
+
const srt_packet_metrics_1 = __importDefault(require("./srt-packet-metrics"));
|
11
12
|
const srt_form_views_1 = require("../shared/srt-form-views");
|
12
13
|
function default_1(registration) {
|
13
14
|
const { defineComponent, All, validation, } = registration;
|
14
15
|
const { Port, Hostname, JitterBuffer, SrtPassphrase, SrtStreamId } = validation;
|
15
16
|
return defineComponent({
|
16
|
-
identifier: 'output.srt',
|
17
|
+
identifier: 'output.srt-listener',
|
17
18
|
category: 'output',
|
18
|
-
name: "SRT Egest",
|
19
|
+
name: "SRT Listener Egest",
|
19
20
|
description: "This component manages the sending of SRT (Secure Reliable Transport) streams. It allows you to configure various settings to control how the SRT output is handled, including connection details, buffer settings, and delay options.",
|
20
21
|
subscription: {
|
21
22
|
accepts: {
|
@@ -28,13 +29,18 @@ function default_1(registration) {
|
|
28
29
|
return {
|
29
30
|
port: desc.config.port?.toString() ?? '',
|
30
31
|
host: desc.config.host,
|
31
|
-
mode: desc.config.mode,
|
32
32
|
bufferDelayMs: desc.config.bufferDelayMs?.toString() ?? 'none'
|
33
33
|
};
|
34
34
|
},
|
35
35
|
runtime: {
|
36
36
|
initialState: () => ({
|
37
37
|
enabled: true,
|
38
|
+
metrics: {
|
39
|
+
connectionCount: 0,
|
40
|
+
packetsLost: [],
|
41
|
+
packetsResent: [],
|
42
|
+
packetsSent: []
|
43
|
+
}
|
38
44
|
}),
|
39
45
|
handleEvent(ev, state) {
|
40
46
|
const evType = ev.type;
|
@@ -45,6 +51,9 @@ function default_1(registration) {
|
|
45
51
|
case 'output-disabled':
|
46
52
|
state.enabled = false;
|
47
53
|
break;
|
54
|
+
case 'metrics-updated':
|
55
|
+
state.metrics = ev.metrics;
|
56
|
+
break;
|
48
57
|
default:
|
49
58
|
(0, util_1.assertUnreachable)(evType);
|
50
59
|
}
|
@@ -52,38 +61,27 @@ function default_1(registration) {
|
|
52
61
|
},
|
53
62
|
summary: summary_view_1.default,
|
54
63
|
inline: inline_view_1.default,
|
64
|
+
metrics: [
|
65
|
+
{ title: "SRT Transmission", view: srt_packet_metrics_1.default }
|
66
|
+
]
|
55
67
|
},
|
56
68
|
configForm: {
|
57
69
|
form: {
|
58
70
|
port: {
|
59
|
-
help: "The port this SRT output will
|
71
|
+
help: "The port this SRT output will listen on",
|
60
72
|
hint: {
|
61
73
|
type: 'numeric',
|
62
74
|
validation: Port,
|
63
75
|
defaultValue: 5101,
|
64
76
|
global: {
|
65
77
|
constraint: 'unique',
|
66
|
-
key: "port"
|
67
|
-
include: (cfg) => cfg.mode == "listener"
|
78
|
+
key: "port"
|
68
79
|
},
|
69
80
|
}
|
70
81
|
},
|
71
|
-
host: { help: "The IP address/Hostname this SRT output will
|
82
|
+
host: { help: "The IP address/Hostname this SRT output will listen on", hint: { type: 'text', validation: Hostname, defaultValue: "0.0.0.0" } },
|
72
83
|
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 500.0 } },
|
73
84
|
avDelayMs: { help: "How many milliseconds to delay A/V to account for subtitles/ancillary data", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 50.0 } },
|
74
|
-
mode: {
|
75
|
-
help: "Whether this SRT Output is calling a remote host, or listening on this host", hint: {
|
76
|
-
defaultValue: "listener",
|
77
|
-
type: 'select', options: [{
|
78
|
-
value: "listener",
|
79
|
-
display: "Listener"
|
80
|
-
},
|
81
|
-
{
|
82
|
-
value: "caller",
|
83
|
-
display: "Caller"
|
84
|
-
}]
|
85
|
-
}
|
86
|
-
},
|
87
85
|
passphrase: { help: "Optional: Authentication for this SRT output", hint: { type: 'text', optional: true, validation: SrtPassphrase } },
|
88
86
|
streamId: { help: "Optional: StreamId to use when calling a remote listener", hint: { type: 'text', optional: true, validation: SrtStreamId } },
|
89
87
|
socketOptions: {
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.srt-listener/info.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
4
|
+
function InlineView({ state }) {
|
5
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "srt-output", children: state.enabled ? (state.metrics.connectionCount == 0 ?
|
6
|
+
(0, jsx_runtime_1.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "No connections" })
|
7
|
+
: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Output enabled" }), (0, jsx_runtime_1.jsxs)("div", { children: ["Connections: ", state.metrics.connectionCount] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Sent: ", state.metrics.packetsSent.reduce((a, i) => a + i, 0)] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Lost/Resent: ", state.metrics.packetsLost.reduce((a, i) => a + i, 0), "/", state.metrics.packetsResent.reduce((a, i) => a + i, 0)] })] })) : ((0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" })) }));
|
8
|
+
}
|
9
|
+
exports.default = InlineView;
|
10
|
+
//# sourceMappingURL=inline-view.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.srt-listener/inline-view.tsx"],"names":[],"mappings":";;;AAGA,SAAS,UAAU,CAAC,EAAE,KAAK,EAA6B;IACtD,OAAO,CACL,gCAAK,SAAS,EAAC,YAAY,YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YAClC,gCAAK,SAAS,EAAC,uCAAuC,+BAEhD;YACN,CAAC,CAAC,6DACA,gCAAK,SAAS,EAAC,2CAA2C,+BAEpD,EACN,6DAAmB,KAAK,CAAC,OAAO,CAAC,eAAe,IAAO,EACvD,sDAAY,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAO,EACvE,6DAAmB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAO,IACtI,CACN,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,2CAA2C,gCAEpD,CACP,GACG,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,UAAU,CAAC"}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { Norsk, SrtOutputSettings as SdkSettings, SrtOutputNode } from '@norskvideo/norsk-sdk';
|
2
|
+
import { InstanceRouteInfo, OnCreated, ServerComponentDefinition, StudioRuntime, StudioComponentInputStream } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
|
+
import { CustomSinkNode } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
|
4
|
+
import type { SocketOptions } from '../shared/srt-types';
|
5
|
+
export type SrtOutputSettings = Pick<SdkSettings, 'port' | 'host' | 'passphrase' | 'streamId' | 'bufferDelayMs' | 'avDelayMs'> & {
|
6
|
+
id: string;
|
7
|
+
displayName: string;
|
8
|
+
notes?: string;
|
9
|
+
socketOptions: SocketOptions;
|
10
|
+
};
|
11
|
+
export type SrtOutputState = {
|
12
|
+
enabled: boolean;
|
13
|
+
metrics: SrtMetrics;
|
14
|
+
};
|
15
|
+
export type SrtMetrics = {
|
16
|
+
connectionCount: number;
|
17
|
+
packetsLost: number[];
|
18
|
+
packetsResent: number[];
|
19
|
+
packetsSent: number[];
|
20
|
+
};
|
21
|
+
export type SrtOutputCommand = {
|
22
|
+
type: 'enable-output' | 'disable-output';
|
23
|
+
};
|
24
|
+
export type SrtOutputEvent = {
|
25
|
+
type: 'output-enabled' | 'output-disabled';
|
26
|
+
} | {
|
27
|
+
type: 'metrics-updated';
|
28
|
+
metrics: SrtMetrics;
|
29
|
+
};
|
30
|
+
declare class SrtOutput extends CustomSinkNode {
|
31
|
+
norsk: Norsk;
|
32
|
+
cfg: SrtOutputSettings;
|
33
|
+
srtOutputNode: SrtOutputNode | null;
|
34
|
+
enabled: boolean;
|
35
|
+
initialised: Promise<void>;
|
36
|
+
runtime: StudioRuntime<SrtOutputState, SrtOutputCommand, SrtOutputEvent>;
|
37
|
+
currentSources: StudioComponentInputStream[];
|
38
|
+
static create(norsk: Norsk, cfg: SrtOutputSettings, runtime: StudioRuntime<SrtOutputState, SrtOutputCommand, SrtOutputEvent>): Promise<SrtOutput>;
|
39
|
+
constructor(cfg: SrtOutputSettings, norsk: Norsk, runtime: StudioRuntime<SrtOutputState, SrtOutputCommand, SrtOutputEvent>);
|
40
|
+
enableOutput(): Promise<void>;
|
41
|
+
disableOutput(): Promise<void>;
|
42
|
+
subscribe(sources: StudioComponentInputStream[]): Promise<void>;
|
43
|
+
subscribeImpl(sources: StudioComponentInputStream[]): Promise<void>;
|
44
|
+
}
|
45
|
+
export default class SrtOutputDefinition implements ServerComponentDefinition<SrtOutputSettings, SrtOutput, SrtOutputState, SrtOutputCommand, SrtOutputEvent> {
|
46
|
+
create(norsk: Norsk, cfg: SrtOutputSettings, cb: OnCreated<SrtOutput>, runtime: StudioRuntime<SrtOutputState, SrtOutputCommand, SrtOutputEvent>): Promise<void>;
|
47
|
+
handleCommand(node: SrtOutput, command: SrtOutputCommand): Promise<void>;
|
48
|
+
handleMetricsUpdate(node: SrtOutput): Promise<void>;
|
49
|
+
instanceRoutes(): Promise<InstanceRouteInfo<SrtOutputSettings, SrtOutput, SrtOutputState, SrtOutputCommand, SrtOutputEvent>[]>;
|
50
|
+
}
|
51
|
+
export {};
|