@norskvideo/norsk-studio-built-ins 1.27.0-2025-03-25-b3450d18 → 1.27.0-2025-03-27-1a33b215

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 (129) hide show
  1. package/client/info.js +14888 -13757
  2. package/client/style.css +6 -10
  3. package/lib/info.js +6 -4
  4. package/lib/info.js.map +1 -1
  5. package/lib/input.rtmp/info.js +2 -0
  6. package/lib/input.rtmp/info.js.map +1 -1
  7. package/lib/input.silence/info.js +2 -0
  8. package/lib/input.silence/info.js.map +1 -1
  9. package/lib/input.srt-caller/info.d.ts +2 -2
  10. package/lib/input.srt-caller/info.js +39 -0
  11. package/lib/input.srt-caller/info.js.map +1 -1
  12. package/lib/input.srt-caller/inline-view.d.ts +6 -0
  13. package/lib/input.srt-caller/inline-view.js +10 -0
  14. package/lib/input.srt-caller/inline-view.js.map +1 -0
  15. package/lib/input.srt-caller/runtime.d.ts +25 -5
  16. package/lib/input.srt-caller/runtime.js +56 -24
  17. package/lib/input.srt-caller/runtime.js.map +1 -1
  18. package/lib/input.srt-listener/info.js +27 -1
  19. package/lib/input.srt-listener/info.js.map +1 -1
  20. package/lib/input.srt-listener/inline-view.js +1 -1
  21. package/lib/input.srt-listener/inline-view.js.map +1 -1
  22. package/lib/input.srt-listener/runtime.d.ts +8 -1
  23. package/lib/input.srt-listener/runtime.js +14 -3
  24. package/lib/input.srt-listener/runtime.js.map +1 -1
  25. package/lib/input.udp-ts/info.js +2 -0
  26. package/lib/input.udp-ts/info.js.map +1 -1
  27. package/lib/input.videoTestCard/info.js +2 -0
  28. package/lib/input.videoTestCard/info.js.map +1 -1
  29. package/lib/output.autoCmaf/info.js +2 -0
  30. package/lib/output.autoCmaf/info.js.map +1 -1
  31. package/lib/output.autoHls/info.js +2 -0
  32. package/lib/output.autoHls/info.js.map +1 -1
  33. package/lib/output.facebook/info.js +2 -0
  34. package/lib/output.facebook/info.js.map +1 -1
  35. package/lib/output.linkedin/info.js +2 -0
  36. package/lib/output.linkedin/info.js.map +1 -1
  37. package/lib/output.preview/info.js +2 -0
  38. package/lib/output.preview/info.js.map +1 -1
  39. package/lib/output.rtmp/info.d.ts +2 -0
  40. package/lib/output.rtmp/info.js +10 -1
  41. package/lib/output.rtmp/info.js.map +1 -1
  42. package/lib/output.rtmp/inline-view.js +5 -1
  43. package/lib/output.rtmp/inline-view.js.map +1 -1
  44. package/lib/output.rtmp/runtime.d.ts +6 -0
  45. package/lib/output.rtmp/runtime.js +8 -0
  46. package/lib/output.rtmp/runtime.js.map +1 -1
  47. package/lib/output.srt-caller/info.js +12 -4
  48. package/lib/output.srt-caller/info.js.map +1 -1
  49. package/lib/output.srt-caller/inline-view.js +5 -1
  50. package/lib/output.srt-caller/inline-view.js.map +1 -1
  51. package/lib/output.srt-caller/runtime.d.ts +7 -7
  52. package/lib/output.srt-caller/runtime.js +7 -7
  53. package/lib/output.srt-caller/runtime.js.map +1 -1
  54. package/lib/output.srt-listener/info.js +10 -4
  55. package/lib/output.srt-listener/info.js.map +1 -1
  56. package/lib/output.srt-listener/inline-view.d.ts +3 -4
  57. package/lib/output.srt-listener/inline-view.js +5 -1
  58. package/lib/output.srt-listener/inline-view.js.map +1 -1
  59. package/lib/output.srt-listener/runtime.d.ts +7 -7
  60. package/lib/output.srt-listener/runtime.js +7 -10
  61. package/lib/output.srt-listener/runtime.js.map +1 -1
  62. package/lib/output.statistics/info.js +2 -0
  63. package/lib/output.statistics/info.js.map +1 -1
  64. package/lib/output.twitch/info.js +2 -0
  65. package/lib/output.twitch/info.js.map +1 -1
  66. package/lib/output.udpTs/info.d.ts +2 -2
  67. package/lib/output.udpTs/info.js +26 -0
  68. package/lib/output.udpTs/info.js.map +1 -1
  69. package/lib/output.udpTs/inline-view.d.ts +6 -0
  70. package/lib/output.udpTs/inline-view.js +12 -0
  71. package/lib/output.udpTs/inline-view.js.map +1 -0
  72. package/lib/output.udpTs/runtime.d.ts +25 -5
  73. package/lib/output.udpTs/runtime.js +36 -4
  74. package/lib/output.udpTs/runtime.js.map +1 -1
  75. package/lib/output.whep/info.js +2 -0
  76. package/lib/output.whep/info.js.map +1 -1
  77. package/lib/output.youtube/info.js +2 -0
  78. package/lib/output.youtube/info.js.map +1 -1
  79. package/lib/processor.audioEncoder/info.js +2 -0
  80. package/lib/processor.audioEncoder/info.js.map +1 -1
  81. package/lib/processor.browserOverlay/info.js +2 -0
  82. package/lib/processor.browserOverlay/info.js.map +1 -1
  83. package/lib/processor.cascadingSwitch/info.js +2 -0
  84. package/lib/processor.cascadingSwitch/info.js.map +1 -1
  85. package/lib/processor.fixedLadder/info.js +2 -0
  86. package/lib/processor.fixedLadder/info.js.map +1 -1
  87. package/lib/processor.makeProgram/info.js +2 -0
  88. package/lib/processor.makeProgram/info.js.map +1 -1
  89. package/lib/processor.multiview/info.d.ts +21 -0
  90. package/lib/processor.multiview/info.js +130 -0
  91. package/lib/processor.multiview/info.js.map +1 -0
  92. package/lib/processor.multiview/runtime.d.ts +43 -0
  93. package/lib/processor.multiview/runtime.js +254 -0
  94. package/lib/processor.multiview/runtime.js.map +1 -0
  95. package/lib/processor.onscreenGraphic/info.js +2 -0
  96. package/lib/processor.onscreenGraphic/info.js.map +1 -1
  97. package/lib/processor.streamKeyOverride/info.js +2 -0
  98. package/lib/processor.streamKeyOverride/info.js.map +1 -1
  99. package/lib/processor.videoDecoder/info.js +2 -0
  100. package/lib/processor.videoDecoder/info.js.map +1 -1
  101. package/lib/shared/jitter-buffer-inline.d.ts +15 -0
  102. package/lib/shared/jitter-buffer-inline.js +26 -0
  103. package/lib/shared/jitter-buffer-inline.js.map +1 -0
  104. package/lib/shared/srt-caller-metrics.d.ts +8 -0
  105. package/lib/shared/srt-caller-metrics.js +13 -0
  106. package/lib/shared/srt-caller-metrics.js.map +1 -0
  107. package/lib/shared/srt-listener-metrics.d.ts +9 -0
  108. package/lib/shared/srt-listener-metrics.js +12 -0
  109. package/lib/shared/srt-listener-metrics.js.map +1 -0
  110. package/lib/shared/srt-types.d.ts +17 -0
  111. package/lib/shared/srt-types.js +25 -0
  112. package/lib/shared/srt-types.js.map +1 -1
  113. package/lib/shared/stream-statistics-view.d.ts +3 -0
  114. package/lib/shared/stream-statistics-view.js +132 -0
  115. package/lib/shared/stream-statistics-view.js.map +1 -0
  116. package/lib/test/multiview.d.ts +1 -0
  117. package/lib/test/multiview.js +237 -0
  118. package/lib/test/multiview.js.map +1 -0
  119. package/lib/test/udp-output.js +1 -1
  120. package/lib/test/udp-output.js.map +1 -1
  121. package/lib/util.stats.latency/info.js +2 -0
  122. package/lib/util.stats.latency/info.js.map +1 -1
  123. package/package.json +7 -5
  124. package/lib/output.srt-caller/srt-packet-metrics.d.ts +0 -4
  125. package/lib/output.srt-caller/srt-packet-metrics.js +0 -10
  126. package/lib/output.srt-caller/srt-packet-metrics.js.map +0 -1
  127. package/lib/output.srt-listener/srt-packet-metrics.d.ts +0 -4
  128. package/lib/output.srt-listener/srt-packet-metrics.js +0 -12
  129. package/lib/output.srt-listener/srt-packet-metrics.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.streamKeyOverride/info.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.streamKeyOverride/info.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = default_1;
4
+ const FaFileVideo_1 = require("@react-icons/all-files/fa/FaFileVideo");
4
5
  function default_1({ defineComponent, }) {
5
6
  return defineComponent({
6
7
  identifier: 'processor.videoDecoder',
7
8
  category: 'processor',
8
9
  name: "Video Decoder",
9
10
  description: "Explicit video decode.",
11
+ icon: FaFileVideo_1.FaFileVideo,
10
12
  subscription: {
11
13
  accepts: {
12
14
  type: 'simple-stream',
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.videoDecoder/info.ts"],"names":[],"mappings":";;AAGA,4BA6CC;AA7CD,mBAAwB,EACtB,eAAe,GACF;IACb,OAAO,eAAe,CAAqB;QACzC,UAAU,EAAE,wBAAwB;QACpC,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;SACF;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACtB,MAAM,SAAS,GAA2B;gBACxC,YAAY,EAAE,MAAM,CAAC,IAAI;aAC1B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,UAAU;wBACxB,OAAO,EAAE;4BACP,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;4BAC1C,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACtC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;yBACvC;qBACF;iBACF;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;aACtF;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.videoDecoder/info.ts"],"names":[],"mappings":";;AAIA,4BA8CC;AAhDD,uEAAoE;AAEpE,mBAAwB,EACtB,eAAe,GACF;IACb,OAAO,eAAe,CAAqB;QACzC,UAAU,EAAE,wBAAwB;QACpC,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,yBAAW;QACjB,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;SACF;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACtB,MAAM,SAAS,GAA2B;gBACxC,YAAY,EAAE,MAAM,CAAC,IAAI;aAC1B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,UAAU;wBACxB,OAAO,EAAE;4BACP,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;4BAC1C,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACtC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;yBACvC;qBACF;iBACF;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;aACtF;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { BaseConfig, GatheredMetric, MetricViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ export type BaseState = object;
3
+ export type Props = Pick<MetricViewProps<BaseConfig>, "metrics" | "config">;
4
+ export type JitterBufferState = {
5
+ target: number;
6
+ value: number;
7
+ percentage: number;
8
+ };
9
+ export declare function initialJitterBufferState(): {
10
+ target: number;
11
+ value: number;
12
+ percentage: number;
13
+ };
14
+ export declare function extractJitterBufferFromMetrics(metrics: readonly GatheredMetric[]): JitterBufferState;
15
+ export default function JitterBufferInline(jb: JitterBufferState): React.JSX.Element;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initialJitterBufferState = initialJitterBufferState;
4
+ exports.extractJitterBufferFromMetrics = extractJitterBufferFromMetrics;
5
+ exports.default = JitterBufferInline;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ function initialJitterBufferState() {
8
+ return { target: 0.0, value: 0, percentage: 0 };
9
+ }
10
+ function extractJitterBufferFromMetrics(metrics) {
11
+ const jb = metrics.find((v) => v.name == "norsk_queue_duration_ms");
12
+ if (!jb)
13
+ return initialJitterBufferState();
14
+ const target = parseFloat(jb.labels['target']);
15
+ const currentValue = Math.min(jb.history.at(-1)?.value ?? 0, target);
16
+ const percentage = currentValue / target * 100.0;
17
+ return {
18
+ target,
19
+ value: currentValue,
20
+ percentage
21
+ };
22
+ }
23
+ function JitterBufferInline(jb) {
24
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", { children: ["Buffer: ", (0, jsx_runtime_1.jsx)("meter", { value: jb.percentage, max: 100.0, high: 50, low: 25 })] }) });
25
+ }
26
+ //# sourceMappingURL=jitter-buffer-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jitter-buffer-inline.js","sourceRoot":"","sources":["../../src/shared/jitter-buffer-inline.tsx"],"names":[],"mappings":";;AAaA,4DAEC;AAED,wEAYC;AAED,qCAOC;;AAzBD,SAAgB,wBAAwB;IACtC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;AACjD,CAAC;AAED,SAAgB,8BAA8B,CAAC,OAAkC;IAC/E,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,yBAAyB,CAAC,CAAC;IACpE,IAAI,CAAC,EAAE;QAAE,OAAO,wBAAwB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;IAEjD,OAAO;QACL,MAAM;QACN,KAAK,EAAE,YAAY;QACnB,UAAU;KACX,CAAA;AACH,CAAC;AAED,SAAwB,kBAAkB,CAAC,EAAqB;IAC9D,OAAO,2DACL,wDACU,kCAAO,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAU,IACxE,GACL,CAAA;AAEL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { BaseConfig, MetricViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ import React from "react";
3
+ import { SrtCallerMetrics } from "./srt-types";
4
+ export type BaseState = {
5
+ metrics: SrtCallerMetrics;
6
+ enabled?: boolean;
7
+ };
8
+ export default function MetricsView<Config extends BaseConfig, State extends BaseState, Command extends object>({ state }: MetricViewProps<Config, State, Command>): React.JSX.Element;
@@ -0,0 +1,13 @@
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.jsxs)("div", { className: "srt-output", children: [(0, jsx_runtime_1.jsx)("div", { children: "SRT Packets" }), (state.enabled || state.enabled === undefined) ? ((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: "Component Enabled" }), state.metrics.packetsSent >= 0 ?
9
+ (0, jsx_runtime_1.jsxs)("div", { children: ["Sent: ", state.metrics.packetsSent] })
10
+ :
11
+ (0, jsx_runtime_1.jsxs)("div", { children: ["Received: ", state.metrics.packetsReceived] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Lost/Retransmitted: ", state.metrics.packetsLost, "/", state.metrics.packetsResent] })] }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Component disabled" }))] }));
12
+ }
13
+ //# sourceMappingURL=srt-caller-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"srt-caller-metrics.js","sourceRoot":"","sources":["../../src/shared/srt-caller-metrics.tsx"],"names":[],"mappings":";;AAWA,8BA6BC;;AA7BD,SAAwB,WAAW,CAA6E,EAAE,KAAK,EAA2C;IAChK,OAAO,CACL,iCAAK,SAAS,EAAC,YAAY,aACzB,0DAAsB,EACrB,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAChD,0CACG,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;oBACnC,gCAAK,SAAS,EAAC,uCAAuC,8BAEhD;oBACN,CAAC,CAAC,6DACA,gCAAK,SAAS,EAAC,2CAA2C,kCAEpD,EACL,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;gCAC/B,sDAAY,KAAK,CAAC,OAAO,CAAC,WAAW,IAAO;gCAC5C,CAAC;oCACD,0DAAgB,KAAK,CAAC,OAAO,CAAC,eAAe,IAAO,EAEtD,oEAA0B,KAAK,CAAC,OAAO,CAAC,WAAW,OAAG,KAAK,CAAC,OAAO,CAAC,aAAa,IAAO,IACvF,GACD,CACP,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,2CAA2C,mCAEpD,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { BaseConfig, MetricViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ import React from "react";
3
+ import type { SrtListenerMetrics } from "./srt-types";
4
+ export type BaseState = {
5
+ metrics: SrtListenerMetrics;
6
+ names?: string[];
7
+ enabled?: boolean;
8
+ };
9
+ export default function MetricsView<State extends BaseState, Command extends object>({ state }: MetricViewProps<BaseConfig, State, Command>): React.JSX.Element;
@@ -0,0 +1,12 @@
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.jsxs)("div", { className: "srt-output", children: [(0, jsx_runtime_1.jsx)("div", { children: "SRT Packets" }), (state.enabled === undefined || state.enabled) ? (state.metrics.connectionCount == 0 ?
7
+ (0, jsx_runtime_1.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "No connections" })
8
+ : (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", { className: "divide-y", children: (state.metrics.packetsSent.length == 0 ? state.metrics.packetsReceived : state.metrics.packetsSent).map((p, i) => {
9
+ return (0, jsx_runtime_1.jsxs)("div", { className: "sm:grid sm:grid-cols-2 mt-2", children: [(0, jsx_runtime_1.jsx)("dt", { children: "Connection" }), (0, jsx_runtime_1.jsx)("dd", { className: "", children: state.names?.[i] ?? i }), (0, jsx_runtime_1.jsx)("dt", { className: "", children: state.metrics.packetsSent.length == 0 ? "Received" : "Sent" }), (0, jsx_runtime_1.jsx)("dd", { className: "", children: p }), (0, jsx_runtime_1.jsx)("dt", { className: "", children: "Retransmitted" }), (0, jsx_runtime_1.jsx)("dd", { className: "", children: state.metrics.packetsResent[i] }), (0, jsx_runtime_1.jsx)("dt", { className: "", children: "Lost" }), (0, jsx_runtime_1.jsx)("dd", { className: "", children: state.metrics.packetsLost[i] })] }, i);
10
+ }) }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Component disabled" }))] }));
11
+ }
12
+ //# sourceMappingURL=srt-listener-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"srt-listener-metrics.js","sourceRoot":"","sources":["../../src/shared/srt-listener-metrics.tsx"],"names":[],"mappings":";;AAaA,8BAgCC;;AAhCD,SAAwB,WAAW,CAAkD,EAAE,KAAK,EAA+C;IACzI,OAAO,CACL,iCAAK,SAAS,EAAC,YAAY,aACzB,0DAAsB,EACrB,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAChD,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;gBAClC,gCAAK,SAAS,EAAC,uCAAuC,+BAEhD;gBACN,CAAC,CAAC,2DACA,gCAAK,SAAS,EAAC,UAAU,YACtB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BAChH,OAAO,iCAAa,SAAS,EAAC,6BAA6B,aACzD,wDAAmB,EACnB,+BAAI,SAAS,EAAC,EAAE,YAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAM,EAC7C,+BAAI,SAAS,EAAC,EAAE,YAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAM,EACnF,+BAAI,SAAS,EAAC,EAAE,YAAE,CAAC,GAAM,EACzB,+BAAI,SAAS,EAAC,EAAE,8BAAmB,EACnC,+BAAI,SAAS,EAAC,EAAE,YAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAM,EACtD,+BAAI,SAAS,EAAC,EAAE,qBAAU,EAC1B,+BAAI,SAAS,EAAC,EAAE,YAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAM,KARrC,CAAC,CASZ,CAAA;wBACR,CAAC,CAAC,GACE,GACL,CACN,CAAC,CAAC,CAAC,CACF,gCAAK,SAAS,EAAC,2CAA2C,mCAEpD,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,2 +1,19 @@
1
1
  import type { SrtOutputSettings as SdkSettings } from '@norskvideo/norsk-sdk';
2
+ import type { GatheredMetric } from '@norskvideo/norsk-studio/lib/extension/client-types';
2
3
  export type SocketOptions = Pick<SdkSettings, 'peerLatency' | 'receiveLatency' | 'inputBandwidth' | 'overheadBandwidth' | 'maxBandwidth'>;
4
+ export type SrtListenerMetrics = {
5
+ connectionCount: number;
6
+ packetsLost: number[];
7
+ packetsResent: number[];
8
+ packetsSent: number[];
9
+ packetsReceived: number[];
10
+ };
11
+ export type SrtCallerMetrics = {
12
+ connectionCount: number;
13
+ packetsLost: number;
14
+ packetsResent: number;
15
+ packetsSent: number;
16
+ packetsReceived: number;
17
+ };
18
+ export declare function extractSrtCallerMetricsForNode(targetNodeId: string, latest: readonly GatheredMetric[]): SrtCallerMetrics;
19
+ export declare function extractSrtListenerMetricsForNode(targetNodeId: string, latest: readonly GatheredMetric[]): SrtListenerMetrics;
@@ -1,3 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractSrtCallerMetricsForNode = extractSrtCallerMetricsForNode;
4
+ exports.extractSrtListenerMetricsForNode = extractSrtListenerMetricsForNode;
5
+ function extractSrtCallerMetricsForNode(targetNodeId, latest) {
6
+ const matching = latest.filter((l) => l.nodeId == targetNodeId);
7
+ return {
8
+ connectionCount: matching.find((m) => m.name == "norsk_connection_count")?.history.at(-1)?.value ?? 0,
9
+ packetsSent: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'sent')?.history.at(-1)?.value ?? 0,
10
+ packetsResent: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'retransmitted')?.history.at(-1)?.value ?? 0,
11
+ packetsLost: matching.find((m) => m.name == "norsk_packet_count" && (m.labels['type'] == 'sent_lost' || m.labels['type'] == 'received_lost'))?.history.at(-1)?.value ?? 0,
12
+ packetsReceived: matching.find((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'received')?.history.at(-1)?.value ?? 0,
13
+ };
14
+ }
15
+ function extractSrtListenerMetricsForNode(targetNodeId, latest) {
16
+ const matching = latest.filter((l) => l.nodeId == targetNodeId);
17
+ return {
18
+ connectionCount: matching.find((m) => m.name == "norsk_connection_count")?.history.at(-1)?.value ?? 0,
19
+ packetsSent: matching.filter((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'sent').sort(byIndex).map((m) => m.history.at(-1)?.value ?? -1),
20
+ packetsResent: matching.filter((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'retransmitted').sort(byIndex).map((m) => m.history.at(-1)?.value ?? 0),
21
+ packetsLost: matching.filter((m) => m.name == "norsk_packet_count" && (m.labels['type'] == 'sent_lost' || m.labels['type'] == 'received_lost')).sort(byIndex).map((m) => m.history.at(-1)?.value ?? 0),
22
+ packetsReceived: matching.filter((m) => m.name == "norsk_packet_count" && m.labels['type'] == 'received').sort(byIndex).map((m) => m.history.at(-1)?.value ?? -1),
23
+ };
24
+ }
25
+ function byIndex(l, r) {
26
+ return (l.labels['index'] ?? "").localeCompare(r.labels['index'] ?? "");
27
+ }
3
28
  //# sourceMappingURL=srt-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"srt-types.js","sourceRoot":"","sources":["../../src/shared/srt-types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"srt-types.js","sourceRoot":"","sources":["../../src/shared/srt-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BaseConfig, MetricViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ export type BaseState = object;
3
+ export default function MetricsView<State extends BaseState, Command extends object>({ metrics, config, global, charting }: MetricViewProps<BaseConfig, State, Command>): React.JSX.Element;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = MetricsView;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_chartjs_2_1 = require("react-chartjs-2");
6
+ const chart_js_1 = require("chart.js");
7
+ function displayStreamKey(streamKey) {
8
+ if (!streamKey) {
9
+ return "unknown";
10
+ }
11
+ return `${streamKey.sourceName}-${streamKey.programNumber}-${streamKey.streamId}-${streamKey.renditionName}`;
12
+ }
13
+ chart_js_1.Chart.register(...chart_js_1.registerables);
14
+ function MetricsView({ metrics, config, global, charting }) {
15
+ const { isDarkMode } = global;
16
+ const themeColors = isDarkMode ? charting.dark : charting.light;
17
+ const cpuChartOptions = {
18
+ responsive: false,
19
+ maintainAspectRatio: false,
20
+ animation: {
21
+ duration: 0,
22
+ },
23
+ scales: {
24
+ x: {
25
+ type: "linear",
26
+ display: true,
27
+ title: {
28
+ display: true,
29
+ text: "Seconds",
30
+ },
31
+ ticks: {
32
+ callback: (value) => {
33
+ const numValue = typeof value === "string" ? parseFloat(value) : value;
34
+ if (isNaN(numValue))
35
+ return "";
36
+ return 60 - Math.round((numValue - (Date.now() - 60000)) / 1000);
37
+ },
38
+ stepSize: 10000,
39
+ },
40
+ min: Date.now() - 250000,
41
+ max: Date.now(),
42
+ },
43
+ y: {
44
+ type: "logarithmic",
45
+ min: 0,
46
+ grid: {
47
+ color: themeColors.grid,
48
+ drawTicks: false,
49
+ },
50
+ border: { display: false },
51
+ display: false
52
+ },
53
+ },
54
+ plugins: {
55
+ legend: {
56
+ display: false,
57
+ },
58
+ tooltip: {
59
+ mode: "index",
60
+ intersect: false,
61
+ callbacks: {
62
+ label: (context) => {
63
+ const value = context.parsed.y;
64
+ return `${context.dataset.label}: ${value.toFixed(1)}bps`;
65
+ },
66
+ title: (tooltipItems) => {
67
+ if (tooltipItems.length === 0)
68
+ return "";
69
+ const time = tooltipItems[0].parsed.x;
70
+ const seconds = Math.round((Date.now() - time) / 1000);
71
+ return `${seconds} second${seconds !== 1 ? "s" : ""} ago`;
72
+ },
73
+ },
74
+ backgroundColor: themeColors.tooltip,
75
+ titleColor: themeColors.line,
76
+ bodyColor: themeColors.text,
77
+ borderColor: themeColors.line,
78
+ borderWidth: 1,
79
+ padding: 10,
80
+ },
81
+ },
82
+ elements: {
83
+ line: {
84
+ tension: 0.4,
85
+ borderWidth: 2,
86
+ borderCapStyle: "round",
87
+ borderJoinStyle: "round",
88
+ },
89
+ point: {
90
+ radius: 0,
91
+ hoverRadius: 5,
92
+ },
93
+ },
94
+ };
95
+ if (!metrics[config.id])
96
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Loading statistics.." });
97
+ const allBitrates = metrics[config.id]
98
+ .filter((v) => v.name == "norsk_measured_bitrate")
99
+ .sort((l, r) => displayStreamKey(l.streamKey).localeCompare(displayStreamKey(r.streamKey)));
100
+ const createInitialDataset = (label, color, initialValue) => ({
101
+ label,
102
+ data: Array(50)
103
+ .fill(null)
104
+ .map((_, index) => ({
105
+ x: index,
106
+ y: initialValue,
107
+ })),
108
+ borderColor: color,
109
+ backgroundColor: "transparent",
110
+ borderWidth: 2,
111
+ fill: false,
112
+ });
113
+ const bitrates = {
114
+ labels: Array(50)
115
+ .fill(null)
116
+ .map((_, index) => index),
117
+ datasets: allBitrates.map((b, i) => {
118
+ return createInitialDataset(`${displayStreamKey(b.streamKey)}`, charting.colours[i], b.history[0]?.value ?? 0);
119
+ })
120
+ };
121
+ allBitrates.forEach((b, bi) => {
122
+ b.history.forEach((h, hi) => {
123
+ const dataIndex = hi;
124
+ bitrates.datasets[bi].data[dataIndex] = {
125
+ x: h.time,
126
+ y: h.value
127
+ };
128
+ });
129
+ });
130
+ return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { children: "Measured Bitrates" }), (0, jsx_runtime_1.jsx)(react_chartjs_2_1.Line, { options: cpuChartOptions, data: bitrates })] });
131
+ }
132
+ //# sourceMappingURL=stream-statistics-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-statistics-view.js","sourceRoot":"","sources":["../../src/shared/stream-statistics-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
30
+ const __1 = require("../");
31
+ const builder_1 = require("@norskvideo/norsk-studio/lib/test/_util/builder");
32
+ const document = __importStar(require("@norskvideo/norsk-studio/lib/runtime/document"));
33
+ const yaml_1 = __importDefault(require("yaml"));
34
+ const execution_1 = __importStar(require("@norskvideo/norsk-studio/lib/runtime/execution"));
35
+ const sources_1 = require("@norskvideo/norsk-studio/lib/test/_util/sources");
36
+ const sinks_1 = require("@norskvideo/norsk-studio/lib/test/_util/sinks");
37
+ const info_1 = require("../processor.multiview/info");
38
+ const info_2 = __importDefault(require("../processor.multiview/info"));
39
+ const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
40
+ const chai_1 = require("chai");
41
+ async function defaultRuntime() {
42
+ const runtime = (0, builder_1.emptyRuntime)();
43
+ await (0, __1.registerAll)(runtime);
44
+ return runtime;
45
+ }
46
+ describe("Multiview", () => {
47
+ let testCounter = 0;
48
+ async function testDocument(rows = 2, columns = 2, resolution = { width: 1920, height: 1080 }) {
49
+ const testId = `multiview-test-${testCounter++}`;
50
+ const runtime = await defaultRuntime();
51
+ const yaml = new builder_1.YamlBuilder()
52
+ .addNode(new builder_1.YamlNodeBuilder(testId, (0, info_2.default)(client_types_1.RegistrationConsts), {
53
+ rows,
54
+ columns,
55
+ resolution,
56
+ notes: "Test multiview component",
57
+ }).reify())
58
+ .reify();
59
+ const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml), {
60
+ resolveConfig: true,
61
+ });
62
+ return { compiled, testId };
63
+ }
64
+ afterEach(async () => {
65
+ if (norsk) {
66
+ await norsk.close();
67
+ norsk = undefined;
68
+ }
69
+ });
70
+ let norsk = undefined;
71
+ it("Initializes properly with reference stream", async () => {
72
+ const { compiled, testId } = await testDocument();
73
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
74
+ const result = await (0, execution_1.default)(norsk, compiled);
75
+ const multiview = result.components[testId];
76
+ (0, chai_1.expect)(multiview).to.exist;
77
+ (0, chai_1.expect)(multiview.cfg.rows).to.equal(2);
78
+ (0, chai_1.expect)(multiview.cfg.columns).to.equal(2);
79
+ await (0, sinks_1.waitForAssert)(() => !!multiview.referenceStream, () => (0, chai_1.expect)(multiview.referenceStream).to.exist, 10000, 500);
80
+ await multiview.initialised;
81
+ (0, chai_1.expect)(multiview.referenceStream).to.exist;
82
+ });
83
+ it("Handles a single source video/audio correctly", async () => {
84
+ const { compiled, testId } = await testDocument();
85
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
86
+ const result = await (0, execution_1.default)(norsk, compiled);
87
+ const multiview = result.components[testId];
88
+ const sink = new sinks_1.TraceSink(norsk, `${testId}-sink`);
89
+ await sink.initialised;
90
+ const source = await (0, sources_1.videoAndAudio)(norsk, `${testId}-source`, {
91
+ resolution: { width: 640, height: 360 },
92
+ frameRate: { frames: 25, seconds: 1 },
93
+ });
94
+ new execution_1.ComponentSubscriptions(multiview).setSources([
95
+ new execution_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), {
96
+ type: "take-all-streams",
97
+ filter: [{ media: "video" }, { media: "audio" }],
98
+ }),
99
+ ]);
100
+ new execution_1.ComponentSubscriptions(sink).setSources([
101
+ new execution_1.StudioNodeSubscriptionSource(multiview, compiled.components[testId].yaml, {
102
+ type: "take-all-streams",
103
+ filter: [{ media: "audio" }, { media: "video" }],
104
+ }, (0, info_2.default)(client_types_1.RegistrationConsts)),
105
+ ]);
106
+ await (0, sinks_1.waitForAssert)(() => sink.streamCount() === 2, () => sink.streamCount() === 2, 10000, 500);
107
+ await (0, sinks_1.waitForAssert)(() => !!multiview.composeNode, () => (0, chai_1.expect)(multiview.composeNode).to.exist, 10000, 500);
108
+ });
109
+ it("Handles video sources with no audio", async () => {
110
+ const { compiled, testId } = await testDocument();
111
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
112
+ const result = await (0, execution_1.default)(norsk, compiled);
113
+ const multiview = result.components[testId];
114
+ const sink = new sinks_1.TraceSink(norsk, `${testId}-sink`);
115
+ await sink.initialised;
116
+ const source = await (0, sources_1.videoAndAudio)(norsk, `${testId}-source`, {
117
+ resolution: { width: 640, height: 360 },
118
+ frameRate: { frames: 25, seconds: 1 },
119
+ });
120
+ new execution_1.ComponentSubscriptions(multiview).setSources([
121
+ new execution_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), {
122
+ type: "take-all-streams",
123
+ filter: [{ media: "video" }],
124
+ }),
125
+ ]);
126
+ new execution_1.ComponentSubscriptions(sink).setSources([
127
+ new execution_1.StudioNodeSubscriptionSource(multiview, compiled.components[testId].yaml, {
128
+ type: "take-all-streams",
129
+ filter: [{ media: "audio" }, { media: "video" }],
130
+ }, (0, info_2.default)(client_types_1.RegistrationConsts)),
131
+ ]);
132
+ await (0, sinks_1.waitForAssert)(() => sink.streamCount() === 1, () => sink.streamCount() === 1, 10000, 500);
133
+ await (0, sinks_1.waitForAssert)(() => !!multiview.composeNode, () => (0, chai_1.expect)(multiview.composeNode).to.exist, 10000, 500);
134
+ });
135
+ it("Handles different output resolutions", async () => {
136
+ const customResolution = { width: 1280, height: 720 };
137
+ const { compiled, testId } = await testDocument(2, 2, customResolution);
138
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
139
+ const result = await (0, execution_1.default)(norsk, compiled);
140
+ const multiview = result.components[testId];
141
+ const source = await (0, sources_1.videoAndAudio)(norsk, `${testId}-source`, {
142
+ resolution: { width: 640, height: 360 },
143
+ frameRate: { frames: 25, seconds: 1 },
144
+ });
145
+ new execution_1.ComponentSubscriptions(multiview).setSources([
146
+ new execution_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), {
147
+ type: "take-all-streams",
148
+ filter: [{ media: "video" }, { media: "audio" }],
149
+ }),
150
+ ]);
151
+ await (0, sinks_1.waitForAssert)(() => !!multiview.composeNode, () => {
152
+ (0, chai_1.expect)(multiview.composeNode).to.exist;
153
+ }, 10000, 500);
154
+ await (0, sinks_1.assertNodeOutputsVideoFrames)(norsk, result, testId, {
155
+ resolution: customResolution,
156
+ frameRate: { frames: 25, seconds: 1 },
157
+ });
158
+ });
159
+ it("Creates correct stream keys for different grid configurations", async () => {
160
+ const testMappings = [
161
+ { rows: 2, columns: 2, expected: 4 },
162
+ { rows: 3, columns: 2, expected: 6 },
163
+ { rows: 1, columns: 4, expected: 4 },
164
+ ];
165
+ for (const test of testMappings) {
166
+ const mapping = (0, info_1.getStreamKeyMapping)("test", test.rows, test.columns);
167
+ (0, chai_1.expect)(mapping.videoStreamKey.sourceName).to.equal("test");
168
+ (0, chai_1.expect)(mapping.videoStreamKey.streamId).to.equal(1);
169
+ (0, chai_1.expect)(mapping.videoStreamKey.renditionName).to.equal("default");
170
+ (0, chai_1.expect)(mapping.audioStreamKeys.length).to.equal(test.expected);
171
+ (0, chai_1.expect)(mapping.audioStreamKeys[0].key.sourceName).to.equal("test");
172
+ (0, chai_1.expect)(mapping.audioStreamKeys[0].key.streamId).to.equal(100);
173
+ (0, chai_1.expect)(mapping.audioStreamKeys[0].key.renditionName).to.equal("audio_0_0");
174
+ const lastIndex = test.expected - 1;
175
+ const lastRow = test.rows - 1;
176
+ const lastCol = test.columns - 1;
177
+ (0, chai_1.expect)(mapping.audioStreamKeys[lastIndex].key.sourceName).to.equal("test");
178
+ (0, chai_1.expect)(mapping.audioStreamKeys[lastIndex].key.renditionName).to.equal(`audio_${lastRow}_${lastCol}`);
179
+ for (let i = 0; i < test.expected; i++) {
180
+ const r = Math.floor(i / test.columns);
181
+ const c = i % test.columns;
182
+ (0, chai_1.expect)(mapping.audioStreamKeys[i].row).to.equal(r);
183
+ (0, chai_1.expect)(mapping.audioStreamKeys[i].column).to.equal(c);
184
+ }
185
+ }
186
+ });
187
+ it("Assigns video sources to grid positions for various source counts", async () => {
188
+ const { compiled, testId } = await testDocument(2, 2);
189
+ norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
190
+ const result = await (0, execution_1.default)(norsk, compiled);
191
+ const multiview = result.components[testId];
192
+ const source = await (0, sources_1.videoAndAudio)(norsk, `${testId}-source`, {
193
+ resolution: { width: 640, height: 360 },
194
+ frameRate: { frames: 25, seconds: 1 },
195
+ });
196
+ new execution_1.ComponentSubscriptions(multiview).setSources([
197
+ new execution_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), {
198
+ type: "take-all-streams",
199
+ filter: [{ media: "video" }, { media: "audio" }],
200
+ }),
201
+ ]);
202
+ await (0, sinks_1.waitForAssert)(() => !!multiview.composeNode, () => (0, chai_1.expect)(multiview.composeNode).to.exist, 10000, 500);
203
+ const extraSources = await Promise.all([
204
+ (0, sources_1.videoAndAudio)(norsk, `${testId}-source2`, {
205
+ resolution: { width: 640, height: 360 },
206
+ frameRate: { frames: 25, seconds: 1 },
207
+ }),
208
+ (0, sources_1.videoAndAudio)(norsk, `${testId}-source3`, {
209
+ resolution: { width: 640, height: 360 },
210
+ frameRate: { frames: 25, seconds: 1 },
211
+ }),
212
+ (0, sources_1.videoAndAudio)(norsk, `${testId}-source4`, {
213
+ resolution: { width: 640, height: 360 },
214
+ frameRate: { frames: 25, seconds: 1 },
215
+ }),
216
+ (0, sources_1.videoAndAudio)(norsk, `${testId}-source5`, {
217
+ resolution: { width: 640, height: 360 },
218
+ frameRate: { frames: 25, seconds: 1 },
219
+ }),
220
+ ]);
221
+ const allSources = [source, ...extraSources];
222
+ new execution_1.ComponentSubscriptions(multiview).setSources(allSources.map((src) => new execution_1.StudioNodeSubscriptionSource(src, (0, sources_1.testSourceDescription)(), {
223
+ type: "take-all-streams",
224
+ filter: [{ media: "video" }, { media: "audio" }],
225
+ })));
226
+ const sink = new sinks_1.TraceSink(norsk, `${testId}-sink`);
227
+ await sink.initialised;
228
+ new execution_1.ComponentSubscriptions(sink).setSources([
229
+ new execution_1.StudioNodeSubscriptionSource(multiview, compiled.components[testId].yaml, {
230
+ type: "take-all-streams",
231
+ filter: [{ media: "audio" }, { media: "video" }],
232
+ }, (0, info_2.default)(client_types_1.RegistrationConsts)),
233
+ ]);
234
+ await (0, sinks_1.waitForAssert)(() => sink.streamCount() === 5, () => sink.streamCount() === 5, 10000, 500);
235
+ });
236
+ });
237
+ //# sourceMappingURL=multiview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiview.js","sourceRoot":"","sources":["../../src/test/multiview.ts"],"names":[],"mappings":"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"}