@norskvideo/norsk-studio-built-ins 1.18.0 → 1.26.0-2025-02-19-33cde15d

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 (247) hide show
  1. package/client/info.js +5979 -695
  2. package/client/output.preview/styles.css +69 -69
  3. package/client/output.whep/styles.css +9 -0
  4. package/client/style.css +283 -856
  5. package/lib/info.js +14 -14
  6. package/lib/info.js.map +1 -1
  7. package/lib/input.rtmp/info.js +19 -5
  8. package/lib/input.rtmp/info.js.map +1 -1
  9. package/lib/input.rtmp/inline-view.js +3 -3
  10. package/lib/input.rtmp/runtime.d.ts +46 -7
  11. package/lib/input.rtmp/runtime.js +245 -59
  12. package/lib/input.rtmp/runtime.js.map +1 -1
  13. package/lib/input.rtmp/summary-view.d.ts +3 -5
  14. package/lib/input.rtmp/summary-view.js +51 -6
  15. package/lib/input.rtmp/summary-view.js.map +1 -1
  16. package/lib/input.rtmp/types.d.ts +193 -0
  17. package/lib/{processor.browserOverlay/openApi.js → input.rtmp/types.js} +1 -1
  18. package/lib/input.rtmp/types.js.map +1 -0
  19. package/lib/input.rtmp/types.yaml +147 -0
  20. package/lib/input.silence/info.js +9 -2
  21. package/lib/input.silence/info.js.map +1 -1
  22. package/lib/input.silence/runtime.d.ts +1 -0
  23. package/lib/input.silence/runtime.js.map +1 -1
  24. package/lib/input.srt-caller/info.js +8 -1
  25. package/lib/input.srt-caller/info.js.map +1 -1
  26. package/lib/input.srt-caller/runtime.d.ts +1 -0
  27. package/lib/input.srt-caller/runtime.js.map +1 -1
  28. package/lib/input.srt-listener/info.js +15 -2
  29. package/lib/input.srt-listener/info.js.map +1 -1
  30. package/lib/input.srt-listener/runtime.d.ts +41 -5
  31. package/lib/input.srt-listener/runtime.js +236 -57
  32. package/lib/input.srt-listener/runtime.js.map +1 -1
  33. package/lib/input.srt-listener/summary-view.d.ts +3 -5
  34. package/lib/input.srt-listener/summary-view.js +45 -6
  35. package/lib/input.srt-listener/summary-view.js.map +1 -1
  36. package/lib/input.srt-listener/types.d.ts +193 -0
  37. package/lib/input.srt-listener/types.js +3 -0
  38. package/lib/input.srt-listener/types.js.map +1 -0
  39. package/lib/input.srt-listener/types.yaml +145 -0
  40. package/lib/input.udp-ts/info.js +2 -1
  41. package/lib/input.udp-ts/info.js.map +1 -1
  42. package/lib/input.udp-ts/runtime.d.ts +1 -0
  43. package/lib/input.udp-ts/runtime.js.map +1 -1
  44. package/lib/input.videoTestCard/info.d.ts +1 -1
  45. package/lib/input.videoTestCard/info.js +17 -4
  46. package/lib/input.videoTestCard/info.js.map +1 -1
  47. package/lib/input.videoTestCard/runtime.d.ts +1 -0
  48. package/lib/output.autoCmaf/form-views.d.ts +2 -2
  49. package/lib/output.autoCmaf/form-views.js +13 -3
  50. package/lib/output.autoCmaf/form-views.js.map +1 -1
  51. package/lib/output.autoCmaf/info.d.ts +21 -2
  52. package/lib/output.autoCmaf/info.js +106 -32
  53. package/lib/output.autoCmaf/info.js.map +1 -1
  54. package/lib/output.autoCmaf/inline-view.d.ts +6 -0
  55. package/lib/output.autoCmaf/inline-view.js +8 -0
  56. package/lib/output.autoCmaf/inline-view.js.map +1 -0
  57. package/lib/output.autoCmaf/runtime.d.ts +31 -46
  58. package/lib/output.autoCmaf/runtime.js +334 -108
  59. package/lib/output.autoCmaf/runtime.js.map +1 -1
  60. package/lib/output.autoCmaf/summary-view.d.ts +4 -0
  61. package/lib/output.autoCmaf/summary-view.js +24 -0
  62. package/lib/output.autoCmaf/summary-view.js.map +1 -0
  63. package/lib/output.autoCmaf/summary.js +3 -0
  64. package/lib/output.autoCmaf/summary.js.map +1 -1
  65. package/lib/output.autoCmaf/types.d.ts +158 -0
  66. package/lib/output.autoCmaf/types.js +3 -0
  67. package/lib/output.autoCmaf/types.js.map +1 -0
  68. package/lib/output.autoCmaf/types.yaml +182 -0
  69. package/lib/output.autoHls/info.d.ts +3 -0
  70. package/lib/output.autoHls/info.js +22 -0
  71. package/lib/output.autoHls/info.js.map +1 -0
  72. package/lib/output.autoHls/runtime.d.ts +6 -0
  73. package/lib/output.autoHls/runtime.js +13 -0
  74. package/lib/output.autoHls/runtime.js.map +1 -0
  75. package/lib/output.preview/info.d.ts +5 -2
  76. package/lib/output.preview/info.js +23 -3
  77. package/lib/output.preview/info.js.map +1 -1
  78. package/lib/output.preview/inline-view.d.ts +2 -4
  79. package/lib/output.preview/inline-view.js +65 -7
  80. package/lib/output.preview/inline-view.js.map +1 -1
  81. package/lib/output.preview/runtime.d.ts +18 -12
  82. package/lib/output.preview/runtime.js +122 -33
  83. package/lib/output.preview/runtime.js.map +1 -1
  84. package/lib/output.preview/types.d.ts +56 -0
  85. package/lib/output.preview/types.js +3 -0
  86. package/lib/output.preview/types.js.map +1 -0
  87. package/lib/output.preview/types.yaml +37 -0
  88. package/lib/output.rtmp/info.js +14 -2
  89. package/lib/output.rtmp/info.js.map +1 -1
  90. package/lib/output.rtmp/inline-view.js +5 -2
  91. package/lib/output.rtmp/inline-view.js.map +1 -1
  92. package/lib/output.rtmp/runtime.d.ts +31 -5
  93. package/lib/output.rtmp/runtime.js +169 -34
  94. package/lib/output.rtmp/runtime.js.map +1 -1
  95. package/lib/output.rtmp/summary-view.d.ts +4 -0
  96. package/lib/output.rtmp/summary-view.js +24 -0
  97. package/lib/output.rtmp/summary-view.js.map +1 -0
  98. package/lib/output.rtmp/types.d.ts +101 -0
  99. package/lib/output.rtmp/types.js +3 -0
  100. package/lib/output.rtmp/types.js.map +1 -0
  101. package/lib/output.rtmp/types.yaml +30 -0
  102. package/lib/output.srt/info.d.ts +2 -2
  103. package/lib/output.srt/info.js +29 -1
  104. package/lib/output.srt/info.js.map +1 -1
  105. package/lib/output.srt/inline-view.d.ts +6 -0
  106. package/lib/output.srt/inline-view.js +8 -0
  107. package/lib/output.srt/inline-view.js.map +1 -0
  108. package/lib/output.srt/runtime.d.ts +35 -5
  109. package/lib/output.srt/runtime.js +174 -6
  110. package/lib/output.srt/runtime.js.map +1 -1
  111. package/lib/output.srt/summary-view.d.ts +4 -0
  112. package/lib/output.srt/summary-view.js +24 -0
  113. package/lib/output.srt/summary-view.js.map +1 -0
  114. package/lib/output.srt/types.d.ts +101 -0
  115. package/lib/output.srt/types.js +3 -0
  116. package/lib/output.srt/types.js.map +1 -0
  117. package/lib/output.srt/types.yaml +31 -0
  118. package/lib/output.statistics/info.js +3 -1
  119. package/lib/output.statistics/info.js.map +1 -1
  120. package/lib/output.statistics/inline-view.js +3 -2
  121. package/lib/output.statistics/inline-view.js.map +1 -1
  122. package/lib/output.statistics/runtime.d.ts +1 -0
  123. package/lib/output.statistics/runtime.js.map +1 -1
  124. package/lib/output.udpTs/info.js +4 -0
  125. package/lib/output.udpTs/info.js.map +1 -1
  126. package/lib/output.udpTs/runtime.d.ts +1 -0
  127. package/lib/output.udpTs/runtime.js.map +1 -1
  128. package/lib/output.whep/info.d.ts +2 -2
  129. package/lib/output.whep/info.js +61 -1
  130. package/lib/output.whep/info.js.map +1 -1
  131. package/lib/output.whep/inline-view.d.ts +4 -0
  132. package/lib/output.whep/inline-view.js +57 -0
  133. package/lib/output.whep/inline-view.js.map +1 -0
  134. package/lib/output.whep/runtime.d.ts +39 -5
  135. package/lib/output.whep/runtime.js +175 -13
  136. package/lib/output.whep/runtime.js.map +1 -1
  137. package/lib/output.whep/summary-view.d.ts +4 -0
  138. package/lib/output.whep/summary-view.js +24 -0
  139. package/lib/output.whep/summary-view.js.map +1 -0
  140. package/lib/output.whep/types.d.ts +101 -0
  141. package/lib/output.whep/types.js +3 -0
  142. package/lib/output.whep/types.js.map +1 -0
  143. package/lib/output.whep/types.yaml +30 -0
  144. package/lib/processor.audioEncoder/form-views.d.ts +8 -0
  145. package/lib/processor.audioEncoder/form-views.js +8 -0
  146. package/lib/processor.audioEncoder/form-views.js.map +1 -0
  147. package/lib/processor.audioEncoder/info.d.ts +3 -0
  148. package/lib/processor.audioEncoder/info.js +160 -0
  149. package/lib/processor.audioEncoder/info.js.map +1 -0
  150. package/lib/processor.audioEncoder/runtime.d.ts +21 -0
  151. package/lib/processor.audioEncoder/runtime.js +20 -0
  152. package/lib/processor.audioEncoder/runtime.js.map +1 -0
  153. package/lib/processor.browserOverlay/info.js +1 -0
  154. package/lib/processor.browserOverlay/info.js.map +1 -1
  155. package/lib/processor.browserOverlay/runtime.d.ts +1 -0
  156. package/lib/processor.browserOverlay/runtime.js +6 -26
  157. package/lib/processor.browserOverlay/runtime.js.map +1 -1
  158. package/lib/processor.browserOverlay/types.js +3 -0
  159. package/lib/processor.browserOverlay/types.js.map +1 -0
  160. package/lib/processor.cascadingSwitch/info.js +3 -2
  161. package/lib/processor.cascadingSwitch/info.js.map +1 -1
  162. package/lib/processor.cascadingSwitch/inline-view.js +3 -3
  163. package/lib/processor.cascadingSwitch/runtime.d.ts +1 -0
  164. package/lib/processor.cascadingSwitch/runtime.js +2 -2
  165. package/lib/processor.cascadingSwitch/runtime.js.map +1 -1
  166. package/lib/processor.fixedLadder/codec-editor.js +1 -1
  167. package/lib/processor.fixedLadder/codec-editor.js.map +1 -1
  168. package/lib/processor.fixedLadder/codec-view.d.ts +1 -1
  169. package/lib/processor.fixedLadder/codec-view.js +1 -1
  170. package/lib/processor.fixedLadder/codec-view.js.map +1 -1
  171. package/lib/processor.fixedLadder/info.d.ts +33 -7
  172. package/lib/processor.fixedLadder/info.js +19 -6
  173. package/lib/processor.fixedLadder/info.js.map +1 -1
  174. package/lib/processor.fixedLadder/runtime.d.ts +16 -29
  175. package/lib/processor.fixedLadder/runtime.js +16 -1
  176. package/lib/processor.fixedLadder/runtime.js.map +1 -1
  177. package/lib/processor.fixedLadder/types.d.ts +240 -0
  178. package/lib/processor.fixedLadder/types.js +3 -0
  179. package/lib/processor.fixedLadder/types.js.map +1 -0
  180. package/lib/processor.fixedLadder/types.yaml +541 -0
  181. package/lib/processor.onscreenGraphic/info.js +11 -5
  182. package/lib/processor.onscreenGraphic/info.js.map +1 -1
  183. package/lib/processor.onscreenGraphic/runtime.d.ts +27 -2
  184. package/lib/processor.onscreenGraphic/runtime.js +116 -52
  185. package/lib/processor.onscreenGraphic/runtime.js.map +1 -1
  186. package/lib/processor.onscreenGraphic/summary-view.d.ts +1 -1
  187. package/lib/processor.onscreenGraphic/summary-view.js +235 -11
  188. package/lib/processor.onscreenGraphic/summary-view.js.map +1 -1
  189. package/lib/processor.onscreenGraphic/types.d.ts +15 -1
  190. package/lib/processor.onscreenGraphic/types.yaml +63 -14
  191. package/lib/processor.streamKeyOverride/info.d.ts +3 -0
  192. package/lib/processor.streamKeyOverride/info.js +151 -0
  193. package/lib/processor.streamKeyOverride/info.js.map +1 -0
  194. package/lib/processor.streamKeyOverride/runtime.d.ts +55 -0
  195. package/lib/processor.streamKeyOverride/runtime.js +226 -0
  196. package/lib/processor.streamKeyOverride/runtime.js.map +1 -0
  197. package/lib/shared/api.d.ts +35 -0
  198. package/lib/shared/api.js +34 -0
  199. package/lib/shared/api.js.map +1 -0
  200. package/lib/test/auto-cmaf.js +219 -43
  201. package/lib/test/auto-cmaf.js.map +1 -1
  202. package/lib/test/onscreen-graphic.js +79 -42
  203. package/lib/test/onscreen-graphic.js.map +1 -1
  204. package/lib/test/preview.js +69 -64
  205. package/lib/test/preview.js.map +1 -1
  206. package/lib/test/rtmp-input.js +6 -3
  207. package/lib/test/rtmp-input.js.map +1 -1
  208. package/lib/test/rtmp-output.js +105 -1
  209. package/lib/test/rtmp-output.js.map +1 -1
  210. package/lib/test/srt-input-listener.js +331 -0
  211. package/lib/test/srt-input-listener.js.map +1 -1
  212. package/lib/test/srt-output.js +93 -4
  213. package/lib/test/srt-output.js.map +1 -1
  214. package/lib/test/whep-output.js +192 -5
  215. package/lib/test/whep-output.js.map +1 -1
  216. package/lib/util.stats.latency/info.js +1 -0
  217. package/lib/util.stats.latency/info.js.map +1 -1
  218. package/lib/util.stats.latency/runtime.d.ts +1 -0
  219. package/lib/util.stats.latency/runtime.js +2 -2
  220. package/lib/util.stats.latency/runtime.js.map +1 -1
  221. package/package.json +4 -4
  222. package/lib/processor.browserOverlay/openApi.js.map +0 -1
  223. package/lib/processor.whisper-transcribe/info.d.ts +0 -3
  224. package/lib/processor.whisper-transcribe/info.js +0 -44
  225. package/lib/processor.whisper-transcribe/info.js.map +0 -1
  226. package/lib/processor.whisper-transcribe/runtime.d.ts +0 -29
  227. package/lib/processor.whisper-transcribe/runtime.js +0 -83
  228. package/lib/processor.whisper-transcribe/runtime.js.map +0 -1
  229. package/lib/util.stats.ma35d/info.d.ts +0 -3
  230. package/lib/util.stats.ma35d/info.js +0 -79
  231. package/lib/util.stats.ma35d/info.js.map +0 -1
  232. package/lib/util.stats.ma35d/inline-view.d.ts +0 -6
  233. package/lib/util.stats.ma35d/inline-view.js +0 -76
  234. package/lib/util.stats.ma35d/inline-view.js.map +0 -1
  235. package/lib/util.stats.ma35d/runtime.d.ts +0 -21
  236. package/lib/util.stats.ma35d/runtime.js +0 -49
  237. package/lib/util.stats.ma35d/runtime.js.map +0 -1
  238. package/lib/util.timestamps/info.d.ts +0 -5
  239. package/lib/util.timestamps/info.js +0 -87
  240. package/lib/util.timestamps/info.js.map +0 -1
  241. package/lib/util.timestamps/inline-view.d.ts +0 -6
  242. package/lib/util.timestamps/inline-view.js +0 -94
  243. package/lib/util.timestamps/inline-view.js.map +0 -1
  244. package/lib/util.timestamps/runtime.d.ts +0 -29
  245. package/lib/util.timestamps/runtime.js +0 -40
  246. package/lib/util.timestamps/runtime.js.map +0 -1
  247. /package/lib/processor.browserOverlay/{openApi.d.ts → types.d.ts} +0 -0
@@ -3,15 +3,71 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const react_1 = require("react");
5
5
  const webrtc_client_1 = require("@norskvideo/webrtc-client");
6
- function InlineView({ state, config }) {
6
+ function InlineView({ state, config, raise }) {
7
7
  const url = state.url;
8
8
  const id = config.id;
9
+ const [showPreview, setShowPreview] = (0, react_1.useState)(config.showPreview ?? true);
10
+ const [client, setClient] = (0, react_1.useState)(null);
11
+ const createClient = (url) => {
12
+ const client = new webrtc_client_1.WhepClient({
13
+ url,
14
+ container: document.getElementById(`preview-${id}`) ?? undefined,
15
+ });
16
+ client.start().catch(console.error);
17
+ return client;
18
+ };
19
+ const cleanupClient = (client) => {
20
+ client.outputVideoTracks.forEach(track => track.stop());
21
+ if (client.outputAudioTrack) {
22
+ client.outputAudioTrack.stop();
23
+ }
24
+ client.videoElements.forEach(video => {
25
+ video.srcObject = null;
26
+ video.remove();
27
+ });
28
+ };
29
+ const [loadedImage, setLoadedImage] = (0, react_1.useState)(undefined);
30
+ (0, react_1.useEffect)(() => {
31
+ const container = document.getElementById(`preview-${id}`) ?? undefined;
32
+ if (!container)
33
+ return;
34
+ container.innerHTML = '';
35
+ if (loadedImage) {
36
+ container.appendChild(loadedImage);
37
+ }
38
+ }, [loadedImage]);
9
39
  (0, react_1.useEffect)(() => {
10
- if (!url)
40
+ if (!url || !showPreview) {
41
+ if (client) {
42
+ cleanupClient(client);
43
+ setClient(null);
44
+ }
11
45
  return;
12
- const client = new webrtc_client_1.WhepClient({ url, container: document.getElementById(`preview-${id}`) ?? undefined });
13
- void client.start();
14
- }, [state.url]);
46
+ }
47
+ if (config.previewMode == "image") {
48
+ const container = document.getElementById(`preview-${id}`) ?? undefined;
49
+ if (!container)
50
+ return;
51
+ const img = document.createElement('img');
52
+ img.width = 420;
53
+ img.height = 236;
54
+ img.onload = () => {
55
+ setLoadedImage(img);
56
+ };
57
+ img.src = url;
58
+ }
59
+ else {
60
+ const newClient = createClient(url);
61
+ setClient(newClient);
62
+ return () => {
63
+ cleanupClient(newClient);
64
+ };
65
+ }
66
+ }, [state.url, showPreview]);
67
+ (0, react_1.useEffect)(() => {
68
+ setShowPreview(config.showPreview ?? true);
69
+ }, [config.showPreview]);
70
+ raise && (0, react_1.useEffect)(raise, []);
15
71
  if (!url)
16
72
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "..." });
17
73
  function percentage(levels) {
@@ -19,11 +75,13 @@ function InlineView({ state, config }) {
19
75
  return 0;
20
76
  }
21
77
  const rebase = levels.rms - 12.0;
22
- const capped = 0 - (rebase / 112);
78
+ const capped = 0 - rebase / 112;
23
79
  const snapped = Math.floor(capped * 10.0) * 10;
24
80
  return Math.max(0, 100 - snapped);
25
81
  }
26
- return (0, jsx_runtime_1.jsxs)("div", { className: "preview-outer-container", children: [(0, jsx_runtime_1.jsx)("div", { className: "preview-video", id: `preview-${id}` }), (0, jsx_runtime_1.jsx)("div", { className: "preview-levels", children: (0, jsx_runtime_1.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}-preview` }) })] });
82
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "preview-outer-container", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, jsx_runtime_1.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? ((0, jsx_runtime_1.jsx)("div", { className: "preview-video", id: `preview-${id}`, children: (0, jsx_runtime_1.jsx)("style", { children: `
83
+ #preview-${id} video::-webkit-media-controls-play-button { display: none; },
84
+ ` }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "preview-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" })), (0, jsx_runtime_1.jsx)("div", { className: "preview-levels", children: (0, jsx_runtime_1.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}-preview` }) })] }));
27
85
  }
28
86
  exports.default = InlineView;
29
87
  //# sourceMappingURL=inline-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.preview/inline-view.tsx"],"names":[],"mappings":";;;AAAA,iCAAkC;AAGlC,6DAAsD;AAEtD,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAgE;IACjG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,MAAM,GAAG,IAAI,0BAAU,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QACzG,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,mEAAQ,CAAA;IAEzB,SAAS,UAAU,CAAC,MAAkD;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAG1B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;QAGjC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAGlC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;IACpC,CAAC;IAGD,OAAO,iCAAK,SAAS,EAAC,yBAAyB,aAC7C,gCAAK,SAAS,EAAC,eAAe,EAAC,EAAE,EAAE,WAAW,EAAE,EAAE,GAC5C,EACN,gCAAK,SAAS,EAAC,gBAAgB,YAC7B,gCAAK,SAAS,EAAE,sBAAsB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAQ,GAC5E,IACD,CAAA;AACT,CAAC;AAED,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.preview/inline-view.tsx"],"names":[],"mappings":"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"}
@@ -1,24 +1,23 @@
1
- import { AudioMeasureLevelsNode, Norsk, WhepOutputSettings as SdkSettings, SourceMediaNode, WhepOutputNode } from '@norskvideo/norsk-sdk';
2
- import { OnCreated, RuntimeUpdates, ServerComponentDefinition, StudioNodeSubscriptionSource, StudioRuntime, StudioShared } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
3
- import { CustomSinkNode, SimpleSinkWrapper, SubscriptionOpts } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
1
+ import { AudioMeasureLevelsNode, ImagePreviewOutputNode, Norsk, ReceiveFromAddressAuto, WhepOutputSettings as SdkSettings, SourceMediaNode, SubscriptionError, WhepOutputNode } from '@norskvideo/norsk-sdk';
2
+ import { InstanceRouteInfo, OnCreated, RuntimeUpdates, ServerComponentDefinition, StudioNodeSubscriptionSource, StudioRuntime, StudioShared } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
3
+ import { CustomSinkNode, SubscriptionOpts } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
4
4
  import { HardwareAccelerationType, IceServer } from '@norskvideo/norsk-studio/lib/shared/config';
5
5
  import { ContextPromiseControl } from '@norskvideo/norsk-studio/lib/runtime/util';
6
+ import { components } from './types';
7
+ export type PreviewMode = 'video_passthrough' | 'video_encode' | 'image';
6
8
  export type PreviewOutputSettings = {
7
9
  id: string;
8
10
  displayName: string;
11
+ notes?: string;
9
12
  bufferDelayMs?: SdkSettings['bufferDelayMs'];
13
+ previewMode: PreviewMode;
14
+ showPreview?: boolean;
10
15
  __global: {
11
16
  iceServers: IceServer[];
12
17
  hardware?: HardwareAccelerationType;
13
18
  };
14
19
  };
15
- export type PreviewOutputState = {
16
- url?: string;
17
- levels?: {
18
- peak: number;
19
- rms: number;
20
- };
21
- };
20
+ export type PreviewOutputState = components['schemas']['latest_state'];
22
21
  export type PreviewOutputEvent = {
23
22
  type: 'url-published';
24
23
  url: string;
@@ -28,10 +27,13 @@ export type PreviewOutputEvent = {
28
27
  peak: number;
29
28
  rms: number;
30
29
  };
30
+ } | {
31
+ type: 'source-lost';
31
32
  };
32
33
  export type PreviewOutputCommand = object;
33
- export default class WhepOutputDefinition implements ServerComponentDefinition<PreviewOutputSettings, SimpleSinkWrapper, PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent> {
34
- create(norsk: Norsk, cfg: PreviewOutputSettings, cb: OnCreated<SimpleSinkWrapper>, runtime: StudioRuntime<PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent>): Promise<void>;
34
+ export default class WhepOutputDefinition implements ServerComponentDefinition<PreviewOutputSettings, PreviewOutput, PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent> {
35
+ create(norsk: Norsk, cfg: PreviewOutputSettings, cb: OnCreated<PreviewOutput>, runtime: StudioRuntime<PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent>): Promise<void>;
36
+ instanceRoutes(): Promise<InstanceRouteInfo<PreviewOutputSettings, PreviewOutput, PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent>[]>;
35
37
  }
36
38
  export declare class PreviewOutput extends CustomSinkNode {
37
39
  initialised: Promise<void>;
@@ -41,10 +43,14 @@ export declare class PreviewOutput extends CustomSinkNode {
41
43
  cfg: PreviewOutputSettings;
42
44
  encoder?: SourceMediaNode;
43
45
  whep?: WhepOutputNode;
46
+ images?: ImagePreviewOutputNode;
44
47
  audioLevels?: AudioMeasureLevelsNode;
45
48
  context: ContextPromiseControl;
49
+ currentSources: StudioNodeSubscriptionSource[];
46
50
  constructor(norsk: Norsk, { updates, shared }: StudioRuntime<PreviewOutputState, PreviewOutputCommand, PreviewOutputEvent>, cfg: PreviewOutputSettings);
47
51
  initialise(): Promise<void>;
48
52
  subscribe(sources: StudioNodeSubscriptionSource[], _opts?: SubscriptionOpts | undefined): void;
53
+ sourceContextChange(_responseCallback: (error?: SubscriptionError) => void): Promise<boolean>;
49
54
  subscribeImpl(sources: StudioNodeSubscriptionSource[]): Promise<void>;
55
+ setupWhep(subscriptions: ReceiveFromAddressAuto[]): Promise<void>;
50
56
  }
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.PreviewOutput = void 0;
4
7
  const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
@@ -6,12 +9,32 @@ const base_nodes_1 = require("@norskvideo/norsk-studio/lib/extension/base-nodes"
6
9
  const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
7
10
  const webrtcSettings_1 = require("../shared/webrtcSettings");
8
11
  const util_1 = require("@norskvideo/norsk-studio/lib/runtime/util");
12
+ const promises_1 = __importDefault(require("fs/promises"));
13
+ const yaml_1 = __importDefault(require("yaml"));
14
+ const json_refs_1 = require("json-refs");
15
+ const path_1 = __importDefault(require("path"));
16
+ const api_1 = require("../shared/api");
9
17
  class WhepOutputDefinition {
10
18
  async create(norsk, cfg, cb, runtime) {
11
19
  const node = new PreviewOutput(norsk, runtime, cfg);
12
20
  await node.initialised;
13
21
  cb(node);
14
22
  }
23
+ async instanceRoutes() {
24
+ const types = await promises_1.default.readFile(path_1.default.join(__dirname, 'types.yaml'));
25
+ const root = yaml_1.default.parse(types.toString());
26
+ const resolved = await (0, json_refs_1.resolveRefs)(root, {}).then((r) => r.resolved);
27
+ const paths = resolved.paths;
28
+ return [
29
+ {
30
+ ...(0, api_1.get)('/latest', paths),
31
+ handler: ({ runtime }) => ((_req, res) => {
32
+ const latest = runtime.updates.latest();
33
+ res.json(latest);
34
+ }),
35
+ },
36
+ ];
37
+ }
15
38
  }
16
39
  exports.default = WhepOutputDefinition;
17
40
  class PreviewOutput extends base_nodes_1.CustomSinkNode {
@@ -22,14 +45,17 @@ class PreviewOutput extends base_nodes_1.CustomSinkNode {
22
45
  cfg;
23
46
  encoder;
24
47
  whep;
48
+ images;
25
49
  audioLevels;
26
50
  context = new util_1.ContextPromiseControl(this.subscribeImpl.bind(this));
51
+ currentSources;
27
52
  constructor(norsk, { updates, shared }, cfg) {
28
53
  super(cfg.id);
29
54
  this.cfg = cfg;
30
55
  this.norsk = norsk;
31
56
  this.updates = updates;
32
57
  this.shared = shared;
58
+ this.currentSources = [];
33
59
  this.initialised = this.initialise();
34
60
  }
35
61
  async initialise() {
@@ -37,15 +63,15 @@ class PreviewOutput extends base_nodes_1.CustomSinkNode {
37
63
  id: `${this.cfg.id}-audiolevels`,
38
64
  onData: (levels) => {
39
65
  const total = levels.channelLevels.reduce((acc, l) => {
40
- acc.peak += l.peak ?? 0;
41
- acc.rms += l.rms ?? 0;
66
+ acc.peak += l.peak ?? -90;
67
+ acc.rms += l.rms ?? -90;
42
68
  return acc;
43
- }, { rms: 0, peak: 0 });
69
+ }, { rms: -90, peak: -90 });
44
70
  this.updates.raiseEvent({
45
71
  type: 'audio-levels',
46
72
  levels: {
47
- peak: levels.channelLevels.length == 0 ? 0 : total.peak / levels.channelLevels.length,
48
- rms: levels.channelLevels.length == 0 ? 0 : total.rms / levels.channelLevels.length
73
+ peak: levels.channelLevels.length == 0 ? -90 : total.peak / levels.channelLevels.length,
74
+ rms: levels.channelLevels.length == 0 ? -90 : total.rms / levels.channelLevels.length
49
75
  }
50
76
  });
51
77
  }
@@ -53,52 +79,115 @@ class PreviewOutput extends base_nodes_1.CustomSinkNode {
53
79
  this.registerInput(this.audioLevels);
54
80
  }
55
81
  subscribe(sources, _opts) {
82
+ this.currentSources.forEach((source) => source.unregisterForContextChange(this));
83
+ this.currentSources = sources;
84
+ this.currentSources.forEach((source) => source.registerForContextChange(this));
56
85
  this.context.setSources(sources);
57
86
  }
87
+ async sourceContextChange(_responseCallback) {
88
+ await this.context.schedule();
89
+ return false;
90
+ }
58
91
  async subscribeImpl(sources) {
59
- const videoSource = sources.filter((s) => s.streams.select.includes("video")).at(0);
60
- const audioSource = sources.filter((s) => s.streams.select.includes("audio")).at(0);
61
- if (videoSource && videoSource.selectVideo().length > 0) {
62
- if (!this.encoder) {
63
- (0, logging_1.debuglog)("Finding preview encode for preview node", this.id);
64
- this.encoder = await this.shared.previewEncode(videoSource.selectVideo()[0], this.cfg.__global.hardware);
65
- this.registerInput(this.encoder);
66
- }
67
- }
68
- else {
69
- this.encoder = undefined;
70
- }
92
+ const videoSourceActual = sources.filter((s) => s.streams.select.includes("video")).at(0);
93
+ const videoStream = videoSourceActual?.filterStreams(videoSourceActual.latestStreams().filter((s) => s.metadata.message.case == "video"))[0];
94
+ const videoSource = videoSourceActual?.selectVideo();
95
+ const audioSource = sources.filter((s) => s.streams.select.includes("audio")).at(0)?.selectAudio();
71
96
  if (audioSource) {
72
- this.audioLevels?.subscribe(audioSource.selectAudio());
97
+ this.audioLevels?.subscribe(audioSource);
73
98
  }
74
99
  else {
75
100
  this.audioLevels?.subscribe([]);
76
101
  }
77
- const subscriptions = [];
78
- if (this.encoder) {
79
- subscriptions.push({
80
- source: this.encoder,
81
- sourceSelector: norsk_sdk_1.selectVideo
82
- });
83
- }
84
- if (audioSource) {
85
- subscriptions.push(audioSource.selectAudio()[0]);
102
+ switch (this.cfg.previewMode) {
103
+ case 'video_passthrough': {
104
+ (0, logging_1.sillylog)("Setting up preview node in passthrough mode", { id: this.id });
105
+ this.encoder = undefined;
106
+ const subscriptions = [];
107
+ if (videoSource?.[0])
108
+ subscriptions.push(videoSource[0]);
109
+ if (audioSource?.[0])
110
+ subscriptions.push(audioSource[0]);
111
+ await this.setupWhep(subscriptions);
112
+ break;
113
+ }
114
+ case 'video_encode': {
115
+ (0, logging_1.debuglog)("Setting up preview node in encode mode", { id: this.id });
116
+ const subscriptions = [];
117
+ if (!this.encoder && videoSource?.[0]) {
118
+ (0, logging_1.debuglog)("Fetching encode for preview", { id: this.id, acceleration: this.cfg.__global.hardware });
119
+ this.encoder = await this.shared.previewEncode(videoSource[0], this.cfg.__global.hardware, {
120
+ width: 320,
121
+ height: 180,
122
+ preset: 'ultrafast',
123
+ });
124
+ this.registerInput(this.encoder);
125
+ subscriptions.push({
126
+ source: this.encoder,
127
+ sourceSelector: norsk_sdk_1.selectVideo
128
+ });
129
+ }
130
+ if (audioSource?.[0])
131
+ subscriptions.push(audioSource[0]);
132
+ await this.setupWhep(subscriptions);
133
+ break;
134
+ }
135
+ case 'image': {
136
+ (0, logging_1.sillylog)("Setting up preview node in image mode", { id: this.id });
137
+ if (!videoSource?.[0]) {
138
+ (0, logging_1.sillylog)("No video source yet, can't do that", { id: this.id });
139
+ this.updates.raiseEvent({ type: 'source-lost' });
140
+ return;
141
+ }
142
+ if (!videoStream) {
143
+ (0, logging_1.sillylog)("No stream in video source yet, can't do that", { id: this.id });
144
+ this.updates.raiseEvent({ type: 'source-lost' });
145
+ return;
146
+ }
147
+ (0, logging_1.sillylog)("Checking video stream type", videoStream.metadata.message.case);
148
+ if (videoStream.metadata.message.case != 'video')
149
+ return;
150
+ const fr = videoStream.metadata.message.value.frameRate ?? { frames: 25, seconds: 1 };
151
+ const frequency = Math.floor(fr.frames / fr.seconds);
152
+ if (!this.images) {
153
+ (0, logging_1.debuglog)("Creating image output for preview", { id: this.id, frequency });
154
+ this.images = await this.norsk.output.imagePreview({
155
+ id: `${this.id}-image-preview`,
156
+ frequency,
157
+ keep: 10,
158
+ resolution: { width: 320, height: 180 },
159
+ quality: 80,
160
+ onImagePublished: (f) => {
161
+ this.updates.raiseEvent({
162
+ type: 'url-published',
163
+ url: this.images?.baseUrl + f
164
+ });
165
+ }
166
+ });
167
+ }
168
+ this.images.subscribe(videoSource);
169
+ break;
170
+ }
86
171
  }
172
+ }
173
+ async setupWhep(subscriptions) {
87
174
  const whepCfg = {
88
175
  id: `${this.cfg.id}-whep`,
89
176
  bufferDelayMs: this.cfg.bufferDelayMs,
90
177
  onPublishStart: () => {
91
178
  const url = this.whep?.endpointUrl;
92
179
  if (url) {
180
+ (0, logging_1.debuglog)("WHEP Now has an endpoint", { id: this.id, url });
93
181
  this.updates.raiseEvent({ type: 'url-published', url });
94
182
  }
95
183
  },
96
184
  ...(0, webrtcSettings_1.webRtcSettings)(this.cfg.__global.iceServers)
97
185
  };
98
- if (!this.whep) {
99
- this.whep = await this.norsk.output.whep(whepCfg);
100
- }
101
186
  if (subscriptions.length > 0) {
187
+ if (!this.whep) {
188
+ (0, logging_1.debuglog)("Creating WHEP output for preview", { id: this.id });
189
+ this.whep = await this.norsk.output.whep(whepCfg);
190
+ }
102
191
  this.whep?.subscribe(subscriptions, (ctx) => {
103
192
  return ctx.streams.length == subscriptions.length;
104
193
  });
@@ -106,10 +195,10 @@ class PreviewOutput extends base_nodes_1.CustomSinkNode {
106
195
  if (subscriptions.length == 0) {
107
196
  await this.whep?.close();
108
197
  this.whep = undefined;
109
- this.updates.update({});
198
+ this.updates.raiseEvent({ type: 'source-lost' });
110
199
  }
111
- if (subscriptions.length > 0 && !audioSource) {
112
- this.updates.update({ url: this.whep?.endpointUrl });
200
+ if (this.whep?.endpointUrl && !this.updates.latest().url) {
201
+ this.updates.raiseEvent({ type: 'url-published', url: this.whep?.endpointUrl });
113
202
  }
114
203
  }
115
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.preview/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.preview/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export interface paths {
2
+ "/latest": {
3
+ parameters: {
4
+ query?: never;
5
+ header?: never;
6
+ path?: never;
7
+ cookie?: never;
8
+ };
9
+ get: {
10
+ parameters: {
11
+ query?: never;
12
+ header?: never;
13
+ path?: never;
14
+ cookie?: never;
15
+ };
16
+ requestBody?: never;
17
+ responses: {
18
+ 200: {
19
+ headers: {
20
+ [name: string]: unknown;
21
+ };
22
+ content: {
23
+ "application/json": components["schemas"]["latest_state"];
24
+ };
25
+ };
26
+ };
27
+ };
28
+ put?: never;
29
+ post?: never;
30
+ delete?: never;
31
+ options?: never;
32
+ head?: never;
33
+ patch?: never;
34
+ trace?: never;
35
+ };
36
+ }
37
+ export type webhooks = Record<string, never>;
38
+ export interface components {
39
+ schemas: {
40
+ audio_level: {
41
+ peak: number;
42
+ rms: number;
43
+ };
44
+ latest_state: {
45
+ url?: string;
46
+ levels?: components["schemas"]["audio_level"];
47
+ };
48
+ };
49
+ responses: never;
50
+ parameters: never;
51
+ requestBodies: never;
52
+ headers: never;
53
+ pathItems: never;
54
+ }
55
+ export type $defs = Record<string, never>;
56
+ export type operations = Record<string, never>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/output.preview/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ openapi: 3.0.0
2
+ info:
3
+ title: Preview Component
4
+ version: 1.0.0
5
+ components:
6
+ schemas:
7
+ audio_level:
8
+ type: object
9
+ required:
10
+ - peak
11
+ - rms
12
+ properties:
13
+ peak:
14
+ type: number
15
+ rms:
16
+ type: number
17
+ latest_state:
18
+ type: object
19
+ properties:
20
+ url:
21
+ type: string
22
+ levels:
23
+ $ref: '#/components/schemas/audio_level'
24
+
25
+ paths:
26
+ /latest:
27
+ get:
28
+ summary: Returns the latest preview image location + audio levels
29
+ x-route-type: instance
30
+ responses:
31
+ 200:
32
+ description: Successful operation
33
+ content:
34
+ application/json:
35
+ schema:
36
+ $ref: "#/components/schemas/latest_state"
37
+ description: The latest available state
@@ -29,6 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.default = default_1;
30
30
  const react_1 = __importDefault(require("react"));
31
31
  function default_1({ defineComponent, Av, validation: { Z, JitterBuffer }, }) {
32
+ const SummaryView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./summary-view'))));
32
33
  const InlineView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./inline-view'))));
33
34
  return defineComponent({
34
35
  identifier: 'output.rtmp',
@@ -47,7 +48,7 @@ function default_1({ defineComponent, Av, validation: { Z, JitterBuffer }, }) {
47
48
  };
48
49
  },
49
50
  runtime: {
50
- initialState: () => ({ connected: false, connectRetries: 0 }),
51
+ initialState: () => ({ connected: false, connectRetries: 0, enabled: true }),
51
52
  handleEvent: (ev, state) => {
52
53
  const evType = ev.type;
53
54
  switch (evType) {
@@ -58,19 +59,30 @@ function default_1({ defineComponent, Av, validation: { Z, JitterBuffer }, }) {
58
59
  state.connected = false;
59
60
  state.connectRetries++;
60
61
  break;
62
+ case "output-enabled":
63
+ state.enabled = true;
64
+ break;
65
+ case "output-disabled":
66
+ state.enabled = false;
67
+ break;
61
68
  default:
62
69
  assertUnreachable(evType);
63
70
  }
64
71
  return { ...state };
65
72
  },
66
73
  inline: InlineView,
74
+ summary: SummaryView
67
75
  },
68
76
  configForm: {
69
77
  form: {
70
78
  url: { help: "The URL of the remote RTMP server to connect to, including the full stream path and credentials", hint: { type: "text", validation: Z.string().min(5) } },
71
79
  bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 500.0 } },
72
80
  avDelayMs: { help: "How many milliseconds to delay A/V to account for subtitles", hint: { type: 'numeric', validation: JitterBuffer, defaultValue: 50.0 } },
73
- retryConnectionTimeout: { help: "Number of seconds to wait until a retry is attempted to the RTMP server", hint: { type: "numeric", validation: Z.number().min(1).max(10), defaultValue: 5 } }
81
+ retryConnectionTimeout: { help: "Number of seconds to wait until a retry is attempted to the RTMP server", hint: { type: "numeric", validation: Z.number().min(1).max(10), defaultValue: 5 } },
82
+ notes: {
83
+ help: "Additional notes about this component",
84
+ hint: { type: 'text', optional: true }
85
+ },
74
86
  }
75
87
  }
76
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.rtmp/info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,4BAyDC;AA3DD,kDAA0B;AAE1B,mBAAyB,EACvB,eAAe,EACf,EAAE,EACF,UAAU,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAClB;IAEb,MAAM,UAAU,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,mDAAQ,eAAe,GAAC,CAAC,CAAC;IAEnE,OAAO,eAAe,CAA+D;QACnF,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,qKAAqK;QAClL,YAAY,EAAE;YAMZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,EAAE;aACV;SACF;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO;gBACL,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;aACrB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE;YACP,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YAC7D,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;gBACzB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;gBACvB,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,sCAAsC;wBACzC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;wBACvB,MAAM;oBACR,KAAK,qCAAqC;wBACxC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;wBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM;oBACR;wBACE,iBAAiB,CAAC,MAAM,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;YACtB,CAAC;YACD,MAAM,EAAE,UAAU;SACnB;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,GAAG,EAAE,EAAE,IAAI,EAAE,iGAAiG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACvK,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,6DAA6D,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;gBAC3J,sBAAsB,EAAE,EAAE,IAAI,EAAE,yEAAyE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;aAC/L;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAQ;IACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.rtmp/info.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  function InlineView({ state, config }) {
5
- const connected = (0, jsx_runtime_1.jsx)("div", { className: "active text-green-300 dark:text-green-300", children: "Connected and publishing" });
6
- const disconnected = (0, jsx_runtime_1.jsxs)("div", { className: "inactive text-orange-300 dark:text-orange-300", children: ["Disconnected ", state.connectRetries > 0 ? `- retrying(${state.connectRetries})` : ""] });
5
+ if (!state.enabled) {
6
+ return (0, jsx_runtime_1.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Output disabled" });
7
+ }
8
+ const connected = (0, jsx_runtime_1.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Connected and publishing" });
9
+ const disconnected = (0, jsx_runtime_1.jsxs)("div", { className: "inactive text-orange-500 dark:text-orange-300", children: ["Disconnected ", state.connectRetries > 0 ? `- retrying(${state.connectRetries})` : ""] });
7
10
  return (0, jsx_runtime_1.jsx)("div", { className: "rtmp-output", id: `rtmp-output-${config.id}`, children: state.connected ? connected : disconnected });
8
11
  }
9
12
  exports.default = InlineView;
@@ -1 +1 @@
1
- {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.rtmp/inline-view.tsx"],"names":[],"mappings":";;;AAEA,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAA0D;IAC3F,MAAM,SAAS,GAAG,gCAAK,SAAS,EAAC,2CAA2C,yCAA+B,CAAA;IAC3G,MAAM,YAAY,GAAG,iCAAK,SAAS,EAAC,+CAA+C,8BAAe,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,IAAO,CAAA;IAC9K,OAAO,gCAAK,SAAS,EAAC,aAAa,EAAC,EAAE,EAAE,eAAe,MAAM,CAAC,EAAE,EAAE,YAC/D,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GACvC,CAAA;AACR,CAAC;AAED,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.rtmp/inline-view.tsx"],"names":[],"mappings":";;;AAEA,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAA0D;IAC3F,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,gCAAK,SAAS,EAAC,2CAA2C,gCAAsB,CAAA;IACzF,CAAC;IAED,MAAM,SAAS,GAAG,gCAAK,SAAS,EAAC,2CAA2C,yCAA+B,CAAA;IAC3G,MAAM,YAAY,GAAG,iCAAK,SAAS,EAAC,+CAA+C,8BAAe,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,IAAO,CAAA;IAC9K,OAAO,gCAAK,SAAS,EAAC,aAAa,EAAC,EAAE,EAAE,eAAe,MAAM,CAAC,EAAE,EAAE,YAC/D,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GACvC,CAAA;AACR,CAAC;AAED,kBAAe,UAAU,CAAC"}