@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.
Files changed (55) hide show
  1. package/client/info.js +279 -147
  2. package/client/style.css +28 -0
  3. package/lib/info.js +17 -15
  4. package/lib/info.js.map +1 -1
  5. package/lib/output.srt-caller/info.js +102 -0
  6. package/lib/output.srt-caller/info.js.map +1 -0
  7. package/lib/output.srt-caller/inline-view.js +10 -0
  8. package/lib/output.srt-caller/inline-view.js.map +1 -0
  9. package/lib/{output.srt → output.srt-caller}/runtime.d.ts +12 -1
  10. package/lib/{output.srt → output.srt-caller}/runtime.js +18 -0
  11. package/lib/output.srt-caller/runtime.js.map +1 -0
  12. package/lib/output.srt-caller/srt-packet-metrics.d.ts +4 -0
  13. package/lib/output.srt-caller/srt-packet-metrics.js +10 -0
  14. package/lib/output.srt-caller/srt-packet-metrics.js.map +1 -0
  15. package/lib/output.srt-caller/summary-view.js.map +1 -0
  16. package/lib/{output.srt → output.srt-caller}/types.js.map +1 -1
  17. package/lib/output.srt-listener/info.d.ts +3 -0
  18. package/lib/{output.srt → output.srt-listener}/info.js +18 -20
  19. package/lib/output.srt-listener/info.js.map +1 -0
  20. package/lib/output.srt-listener/inline-view.d.ts +6 -0
  21. package/lib/output.srt-listener/inline-view.js +10 -0
  22. package/lib/output.srt-listener/inline-view.js.map +1 -0
  23. package/lib/output.srt-listener/runtime.d.ts +51 -0
  24. package/lib/output.srt-listener/runtime.js +160 -0
  25. package/lib/output.srt-listener/runtime.js.map +1 -0
  26. package/lib/output.srt-listener/srt-packet-metrics.d.ts +4 -0
  27. package/lib/output.srt-listener/srt-packet-metrics.js +12 -0
  28. package/lib/output.srt-listener/srt-packet-metrics.js.map +1 -0
  29. package/lib/output.srt-listener/summary-view.d.ts +4 -0
  30. package/lib/output.srt-listener/summary-view.js +24 -0
  31. package/lib/output.srt-listener/summary-view.js.map +1 -0
  32. package/lib/output.srt-listener/types.d.ts +101 -0
  33. package/lib/output.srt-listener/types.js +3 -0
  34. package/lib/output.srt-listener/types.js.map +1 -0
  35. package/lib/output.srt-listener/types.yaml +31 -0
  36. package/lib/test/srt-output-caller.js +176 -0
  37. package/lib/test/srt-output-caller.js.map +1 -0
  38. package/lib/test/srt-output-listener.d.ts +1 -0
  39. package/lib/test/{srt-output.js → srt-output-listener.js} +3 -4
  40. package/lib/test/srt-output-listener.js.map +1 -0
  41. package/package.json +3 -3
  42. package/lib/output.srt/info.js.map +0 -1
  43. package/lib/output.srt/inline-view.js +0 -8
  44. package/lib/output.srt/inline-view.js.map +0 -1
  45. package/lib/output.srt/runtime.js.map +0 -1
  46. package/lib/output.srt/summary-view.js.map +0 -1
  47. package/lib/test/srt-output.js.map +0 -1
  48. /package/lib/{output.srt → output.srt-caller}/info.d.ts +0 -0
  49. /package/lib/{output.srt → output.srt-caller}/inline-view.d.ts +0 -0
  50. /package/lib/{output.srt → output.srt-caller}/summary-view.d.ts +0 -0
  51. /package/lib/{output.srt → output.srt-caller}/summary-view.js +0 -0
  52. /package/lib/{output.srt → output.srt-caller}/types.d.ts +0 -0
  53. /package/lib/{output.srt → output.srt-caller}/types.js +0 -0
  54. /package/lib/{output.srt → output.srt-caller}/types.yaml +0 -0
  55. /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.statistics/info"));
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.twitch/info"));
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.udpTs/info"));
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.whep/info"));
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.youtube/info"));
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("./processor.audioEncoder/info"));
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.browserOverlay/info"));
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.cascadingSwitch/info"));
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.fixedLadder/info"));
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.makeProgram/info"));
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.onscreenGraphic/info"));
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.streamKeyOverride/info"));
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.videoDecoder/info"));
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("./util.stats.latency/info"));
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":"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"}
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":";;;;;AASA,4BA6FC;AApGD,sFAA4D;AAC5D,mEAA6E;AAC7E,kEAAyC;AACzC,gEAAuC;AACvC,8EAAuD;AACvD,6DAA8D;AAE9D,mBAAwB,YAA0B;IAChD,MAAM,EACJ,eAAe,EACf,GAAG,EACH,UAAU,GACX,GAAG,YAAY,CAAC;IACjB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAEhF,OAAO,eAAe,CAAsE;QAC1F,UAAU,EAAE,mBAAmB;QAC/B,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wOAAwO;QACrP,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aAC/C;SACF;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACxC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,MAAM;aAC/D,CAAA;QACH,CAAC;QACD,OAAO,EAAE;YACP,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,CAAC;oBAClB,WAAW,EAAE,CAAC;oBACd,aAAa,EAAE,CAAC;oBAChB,WAAW,EAAE,CAAC;iBACf;aACF,CAAC;YACF,WAAW,CAAC,EAAE,EAAE,KAAK;gBACnB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;gBACvB,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,gBAAgB;wBACnB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;wBACrB,MAAM;oBACR,KAAK,iBAAiB;wBACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;wBACtB,MAAM;oBACR,KAAK,iBAAiB;wBACpB,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;wBAC3B,MAAM;oBACR;wBACE,IAAA,wBAAiB,EAAC,MAAM,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;YACtB,CAAC;YACD,OAAO,EAAE,sBAAW;YACpB,MAAM,EAAE,qBAAU;YAClB,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,kBAAkB;oBACzB,IAAI,EAAE,4BAAoB;iBAC3B;aACF;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,0CAA0C;oBAChD,IAAI,EAAE;wBACJ,IAAI,EAAE,SAAS;wBACf,UAAU,EAAE,IAAI;wBAChB,YAAY,EAAE,IAAI;qBACnB;iBACF;gBACD,IAAI,EAAE,EAAE,IAAI,EAAE,yDAAyD,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;gBAClJ,aAAa,EAAE,EAAE,IAAI,EAAE,4CAA4C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;gBAC/I,SAAS,EAAE,EAAE,IAAI,EAAE,4EAA4E,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;gBAC1K,UAAU,EAAE,EAAE,IAAI,EAAE,8CAA8C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE;gBACvI,QAAQ,EAAE,EAAE,IAAI,EAAE,0DAA0D,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE;gBAC/I,aAAa,EAAE;oBACb,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,oCAAmB;wBACzB,IAAI,EAAE,IAAA,4BAAgB,EAAC,UAAU,CAAC;qBACnC;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,uCAAuC;oBAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACvC;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -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' | 'mode' | 'passphrase' | 'streamId' | 'bufferDelayMs' | 'avDelayMs'> & {
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 connect to or listen on",
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 connect to or listen on", hint: { type: 'text', validation: Hostname, defaultValue: "0.0.0.0" } },
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,6 @@
1
+ import { SrtOutputState } from "./runtime";
2
+ import React from "react";
3
+ declare function InlineView({ state }: {
4
+ state: SrtOutputState;
5
+ }): React.JSX.Element;
6
+ export default InlineView;
@@ -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 {};