@norskvideo/norsk-studio-built-ins 1.14.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/client/info.js +725 -456
- package/client/style.css +321 -112
- package/lib/info.js +2 -2
- package/lib/info.js.map +1 -1
- package/lib/input.rtmp/info.js +1 -1
- package/lib/input.rtmp/info.js.map +1 -1
- package/lib/input.silence/info.js +1 -0
- package/lib/input.silence/info.js.map +1 -1
- package/lib/input.srt-caller/info.js +6 -5
- package/lib/input.srt-caller/info.js.map +1 -1
- package/lib/input.srt-caller/runtime.d.ts +1 -1
- package/lib/input.srt-listener/info.js +7 -5
- package/lib/input.srt-listener/info.js.map +1 -1
- package/lib/input.srt-listener/runtime.d.ts +1 -1
- package/lib/input.udp-ts/info.d.ts +1 -1
- package/lib/input.udp-ts/info.js +5 -4
- package/lib/input.udp-ts/info.js.map +1 -1
- package/lib/input.udp-ts/runtime.d.ts +1 -1
- package/lib/input.videoTestCard/info.js +1 -0
- package/lib/input.videoTestCard/info.js.map +1 -1
- package/lib/output.autoCmaf/info.d.ts +1 -1
- package/lib/output.autoCmaf/info.js +54 -1
- package/lib/output.autoCmaf/info.js.map +1 -1
- package/lib/output.autoCmaf/runtime.d.ts +10 -0
- package/lib/output.autoCmaf/runtime.js +35 -4
- package/lib/output.autoCmaf/runtime.js.map +1 -1
- package/lib/output.autoCmaf/summary.js +23 -1
- package/lib/output.autoCmaf/summary.js.map +1 -1
- package/lib/output.preview/info.js +1 -0
- package/lib/output.preview/info.js.map +1 -1
- package/lib/output.preview/runtime.js +8 -4
- package/lib/output.preview/runtime.js.map +1 -1
- package/lib/output.rtmp/info.js +1 -0
- package/lib/output.rtmp/info.js.map +1 -1
- package/lib/output.srt/info.js +6 -5
- package/lib/output.srt/info.js.map +1 -1
- package/lib/output.srt/runtime.d.ts +1 -1
- package/lib/output.statistics/info.js +1 -0
- package/lib/output.statistics/info.js.map +1 -1
- package/lib/output.udpTs/info.d.ts +1 -1
- package/lib/output.udpTs/info.js +4 -3
- package/lib/output.udpTs/info.js.map +1 -1
- package/lib/output.udpTs/runtime.d.ts +1 -1
- package/lib/output.whep/info.js +1 -0
- package/lib/output.whep/info.js.map +1 -1
- package/lib/processor.browserOverlay/info.d.ts +2 -2
- package/lib/processor.browserOverlay/info.js +55 -1
- package/lib/processor.browserOverlay/info.js.map +1 -1
- package/lib/processor.browserOverlay/inline-view.d.ts +6 -0
- package/lib/processor.browserOverlay/inline-view.js +8 -0
- package/lib/processor.browserOverlay/inline-view.js.map +1 -0
- package/lib/processor.browserOverlay/openApi.d.ts +174 -0
- package/lib/processor.browserOverlay/openApi.js +3 -0
- package/lib/processor.browserOverlay/openApi.js.map +1 -0
- package/lib/processor.browserOverlay/runtime.d.ts +40 -6
- package/lib/processor.browserOverlay/runtime.js +147 -18
- package/lib/processor.browserOverlay/runtime.js.map +1 -1
- package/lib/processor.browserOverlay/summary-view.d.ts +4 -0
- package/lib/processor.browserOverlay/summary-view.js +27 -0
- package/lib/processor.browserOverlay/summary-view.js.map +1 -0
- package/lib/processor.browserOverlay/types.yaml +65 -0
- package/lib/processor.cascadingSwitch/info.js +1 -0
- package/lib/processor.cascadingSwitch/info.js.map +1 -1
- package/lib/processor.fixedLadder/codec-editor.js +1 -1
- package/lib/processor.fixedLadder/codec-editor.js.map +1 -1
- package/lib/processor.fixedLadder/codec-view.js +1 -1
- package/lib/processor.fixedLadder/codec-view.js.map +1 -1
- package/lib/processor.fixedLadder/info.js +1 -0
- package/lib/processor.fixedLadder/info.js.map +1 -1
- package/lib/processor.fixedLadder/rung-view.js +1 -1
- package/lib/processor.fixedLadder/rung-view.js.map +1 -1
- package/lib/processor.onscreenGraphic/image-selection.d.ts +9 -0
- package/lib/{processor.dynamicBug/bug-selection.js → processor.onscreenGraphic/image-selection.js} +10 -10
- package/lib/processor.onscreenGraphic/image-selection.js.map +1 -0
- package/lib/processor.onscreenGraphic/info.d.ts +3 -0
- package/lib/{processor.dynamicBug → processor.onscreenGraphic}/info.js +12 -12
- package/lib/processor.onscreenGraphic/info.js.map +1 -0
- package/lib/processor.onscreenGraphic/runtime.d.ts +67 -0
- package/lib/{processor.dynamicBug → processor.onscreenGraphic}/runtime.js +109 -161
- package/lib/processor.onscreenGraphic/runtime.js.map +1 -0
- package/lib/processor.onscreenGraphic/summary-view.d.ts +4 -0
- package/lib/processor.onscreenGraphic/summary-view.js +128 -0
- package/lib/processor.onscreenGraphic/summary-view.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.d.ts +257 -0
- package/lib/processor.onscreenGraphic/types.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.yaml +162 -0
- package/lib/processor.whisper-transcribe/info.js +3 -2
- package/lib/processor.whisper-transcribe/info.js.map +1 -1
- package/lib/shared/drm/axinom.d.ts +2 -0
- package/lib/shared/drm/axinom.js +120 -0
- package/lib/shared/drm/axinom.js.map +1 -0
- package/lib/shared/drm/cpix.d.ts +24 -0
- package/lib/shared/drm/cpix.js +97 -0
- package/lib/shared/drm/cpix.js.map +1 -0
- package/lib/shared/drm/ezdrm.d.ts +2 -0
- package/lib/shared/drm/ezdrm.js +26 -0
- package/lib/shared/drm/ezdrm.js.map +1 -0
- package/lib/shared/srt-socket-options.js +6 -6
- package/lib/shared/srt-socket-options.js.map +1 -1
- package/lib/test/{dynamic-bug.js → onscreen-graphic.js} +79 -79
- package/lib/test/onscreen-graphic.js.map +1 -0
- package/lib/test/srt-input-caller.js +5 -5
- package/lib/test/srt-input-caller.js.map +1 -1
- package/lib/test/srt-input-listener.js +18 -18
- package/lib/test/srt-input-listener.js.map +1 -1
- package/lib/test/srt-output.js +2 -2
- package/lib/test/srt-output.js.map +1 -1
- package/lib/test/udp-output.js +2 -2
- package/lib/test/udp-output.js.map +1 -1
- package/lib/test/udp-ts-input.js +2 -2
- package/lib/test/udp-ts-input.js.map +1 -1
- package/lib/util.stats.latency/info.js +1 -0
- package/lib/util.stats.latency/info.js.map +1 -1
- package/lib/util.stats.ma35d/info.js +1 -0
- package/lib/util.stats.ma35d/info.js.map +1 -1
- package/lib/util.timestamps/info.js +1 -0
- package/lib/util.timestamps/info.js.map +1 -1
- package/package.json +10 -6
- package/Readme.adoc +0 -16
- package/lib/processor.dynamicBug/bug-selection.d.ts +0 -9
- package/lib/processor.dynamicBug/bug-selection.js.map +0 -1
- package/lib/processor.dynamicBug/info.d.ts +0 -3
- package/lib/processor.dynamicBug/info.js.map +0 -1
- package/lib/processor.dynamicBug/runtime.d.ts +0 -67
- package/lib/processor.dynamicBug/runtime.js.map +0 -1
- package/lib/processor.dynamicBug/summary-view.d.ts +0 -4
- package/lib/processor.dynamicBug/summary-view.js +0 -128
- package/lib/processor.dynamicBug/summary-view.js.map +0 -1
- package/lib/processor.dynamicBug/types.d.ts +0 -19
- package/lib/processor.dynamicBug/types.js.map +0 -1
- package/lib/processor.dynamicBug/types.yaml +0 -25
- package/lib/test/dynamic-bug.js.map +0 -1
- /package/lib/{processor.dynamicBug → processor.onscreenGraphic}/types.js +0 -0
- /package/lib/test/{dynamic-bug.d.ts → onscreen-graphic.d.ts} +0 -0
package/client/info.js
CHANGED
@@ -172,117 +172,24 @@ var init_summary_view2 = __esm({
|
|
172
172
|
}
|
173
173
|
});
|
174
174
|
|
175
|
-
// external-global-plugin:hls.js
|
176
|
-
var require_hls = __commonJS({
|
177
|
-
"external-global-plugin:hls.js"(exports, module) {
|
178
|
-
module.exports = window.HlsJs;
|
179
|
-
}
|
180
|
-
});
|
181
|
-
|
182
|
-
// build/output.autoCmaf/summary.js
|
183
|
-
var summary_exports = {};
|
184
|
-
__export(summary_exports, {
|
185
|
-
default: () => summary_default
|
186
|
-
});
|
187
|
-
function InlineView5({ state, config }) {
|
188
|
-
const url = state.url;
|
189
|
-
const id = config.id;
|
190
|
-
const previewVideo = (0, import_react4.useRef)(null);
|
191
|
-
(0, import_react4.useEffect)(() => {
|
192
|
-
if (!url)
|
193
|
-
return;
|
194
|
-
if (!previewVideo.current)
|
195
|
-
return;
|
196
|
-
if (import_hls.default.isSupported()) {
|
197
|
-
const hls = new import_hls.default();
|
198
|
-
hls.loadSource(url);
|
199
|
-
hls.attachMedia(previewVideo.current);
|
200
|
-
} else if (previewVideo.current.canPlayType("application/vnd.apple.mpegurl")) {
|
201
|
-
previewVideo.current.src = url;
|
202
|
-
}
|
203
|
-
}, [state.url]);
|
204
|
-
if (!url)
|
205
|
-
return (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: "..." });
|
206
|
-
return (0, import_jsx_runtime6.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime6.jsx)("video", { ref: previewVideo, autoPlay: true, muted: true, id: `${id}-video` }) });
|
207
|
-
}
|
208
|
-
var import_jsx_runtime6, import_react4, import_hls, summary_default;
|
209
|
-
var init_summary = __esm({
|
210
|
-
"build/output.autoCmaf/summary.js"() {
|
211
|
-
"use strict";
|
212
|
-
import_jsx_runtime6 = __toESM(require_jsx_runtime());
|
213
|
-
import_react4 = __toESM(require_react());
|
214
|
-
import_hls = __toESM(require_hls());
|
215
|
-
summary_default = InlineView5;
|
216
|
-
}
|
217
|
-
});
|
218
|
-
|
219
|
-
// build/output.autoCmaf/fullscreen.js
|
220
|
-
var fullscreen_exports = {};
|
221
|
-
__export(fullscreen_exports, {
|
222
|
-
default: () => fullscreen_default
|
223
|
-
});
|
224
|
-
function FullscreenView({ state, config }) {
|
225
|
-
const url = state.url;
|
226
|
-
const id = config.id;
|
227
|
-
(0, import_react5.useEffect)(() => {
|
228
|
-
if (!url)
|
229
|
-
return;
|
230
|
-
const element = document.getElementById(`${id}-video`);
|
231
|
-
if (import_hls2.default.isSupported()) {
|
232
|
-
const hls = new import_hls2.default();
|
233
|
-
hls.loadSource(url);
|
234
|
-
hls.attachMedia(element);
|
235
|
-
} else if (element.canPlayType("application/vnd.apple.mpegurl")) {
|
236
|
-
element.src = url;
|
237
|
-
}
|
238
|
-
}, [state.url]);
|
239
|
-
if (!url)
|
240
|
-
return (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: "..." });
|
241
|
-
{
|
242
|
-
}
|
243
|
-
return (0, import_jsx_runtime7.jsx)("div", { children: (0, import_jsx_runtime7.jsx)("video", { controls: true, autoPlay: true, muted: true, id: `${id}-video` }) });
|
244
|
-
}
|
245
|
-
var import_jsx_runtime7, import_react5, import_hls2, fullscreen_default;
|
246
|
-
var init_fullscreen = __esm({
|
247
|
-
"build/output.autoCmaf/fullscreen.js"() {
|
248
|
-
"use strict";
|
249
|
-
import_jsx_runtime7 = __toESM(require_jsx_runtime());
|
250
|
-
import_react5 = __toESM(require_react());
|
251
|
-
import_hls2 = __toESM(require_hls());
|
252
|
-
fullscreen_default = FullscreenView;
|
253
|
-
}
|
254
|
-
});
|
255
|
-
|
256
|
-
// build/output.autoCmaf/form-views.js
|
257
|
-
var form_views_exports = {};
|
258
|
-
__export(form_views_exports, {
|
259
|
-
S3Destination: () => S3Destination,
|
260
|
-
SegmentConfiguration: () => SegmentConfiguration
|
261
|
-
});
|
262
|
-
function S3Destination(destination) {
|
263
|
-
return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Host" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.host }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Path" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.prefix }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Include Ads" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.includeAdInsertions ? "yes" : "no" })] });
|
264
|
-
}
|
265
|
-
function SegmentConfiguration(cfg) {
|
266
|
-
return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segments" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: cfg.defaultSegmentCount == 0 ? "all" : cfg.defaultSegmentCount }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segment Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetSegmentDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Part Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetPartDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Retention" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.retentionPeriod, "s"] })] });
|
267
|
-
}
|
268
|
-
var import_jsx_runtime8;
|
269
|
-
var init_form_views = __esm({
|
270
|
-
"build/output.autoCmaf/form-views.js"() {
|
271
|
-
"use strict";
|
272
|
-
import_jsx_runtime8 = __toESM(require_jsx_runtime());
|
273
|
-
}
|
274
|
-
});
|
275
|
-
|
276
175
|
// ../../node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js
|
277
176
|
var require_shared_views = __commonJS({
|
278
177
|
"../../node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js"(exports) {
|
279
178
|
"use strict";
|
280
179
|
Object.defineProperty(exports, "__esModule", { value: true });
|
281
180
|
exports.GlobalIceServerView = GlobalIceServerView;
|
181
|
+
exports.EzDrmConfigView = EzDrmConfigView;
|
182
|
+
exports.AxinomConfigView = AxinomConfigView;
|
282
183
|
var jsx_runtime_1 = require_jsx_runtime();
|
283
184
|
function GlobalIceServerView(i) {
|
284
185
|
return (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "URL" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.url }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Reported URL" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.reportedUrl ?? "" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Username" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.username ?? "" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Password" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2", children: i.credential ?? "" })] });
|
285
186
|
}
|
187
|
+
function EzDrmConfigView(i) {
|
188
|
+
return (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-2 text-sm", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-span-2 node-editor-helper-text", children: "For Encryption (required)" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Token" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.token?.trim() ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2 node-editor-helper-text", children: "For Local Preview (optional)" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "pX" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.pX?.trim() ? "Yes" : "No" })] });
|
189
|
+
}
|
190
|
+
function AxinomConfigView(i) {
|
191
|
+
return (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-2 text-sm", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-span-2 node-editor-helper-text", children: "For Encryption (required)" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Tenant ID" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.tenantId?.trim() ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Management Key" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.managementKey?.trim() ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-2 node-editor-helper-text", children: "For Local Preview (optional)" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Communication ID" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.comKeyId?.trim() ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: "Communication Key" }), (0, jsx_runtime_1.jsx)("div", { className: "col-span-1", children: i.comKey?.trim() ? "Yes" : "No" })] });
|
192
|
+
}
|
286
193
|
}
|
287
194
|
});
|
288
195
|
|
@@ -327,6 +234,8 @@ var require_config = __commonJS({
|
|
327
234
|
};
|
328
235
|
Object.defineProperty(exports, "__esModule", { value: true });
|
329
236
|
exports.GlobalIceServers = GlobalIceServers3;
|
237
|
+
exports.GlobalEzDrmConfig = GlobalEzDrmConfig2;
|
238
|
+
exports.GlobalAxinomConfig = GlobalAxinomConfig2;
|
330
239
|
exports.contractHardwareAcceleration = contractHardwareAcceleration;
|
331
240
|
exports.HardwareSelection = HardwareSelection5;
|
332
241
|
exports.RootDataDir = RootDataDir;
|
@@ -382,6 +291,87 @@ var require_config = __commonJS({
|
|
382
291
|
}
|
383
292
|
};
|
384
293
|
}
|
294
|
+
function GlobalEzDrmConfig2(_f) {
|
295
|
+
const EzDrmConfigView = react_1.default.lazy(async () => {
|
296
|
+
const views = await Promise.resolve().then(() => __importStar(require_shared_views()));
|
297
|
+
return { default: views.EzDrmConfigView };
|
298
|
+
});
|
299
|
+
return {
|
300
|
+
id: "ezdrm-config",
|
301
|
+
form: {
|
302
|
+
help: "Configuration for EZDRM",
|
303
|
+
hint: {
|
304
|
+
envOverride: true,
|
305
|
+
type: "form-item",
|
306
|
+
optional: true,
|
307
|
+
form: {
|
308
|
+
token: {
|
309
|
+
help: "Token for EZDRM",
|
310
|
+
hint: {
|
311
|
+
envOverride: true,
|
312
|
+
type: "text"
|
313
|
+
}
|
314
|
+
},
|
315
|
+
pX: {
|
316
|
+
help: "The last six digits of your Widevine Profile ID",
|
317
|
+
hint: {
|
318
|
+
envOverride: true,
|
319
|
+
type: "text"
|
320
|
+
}
|
321
|
+
}
|
322
|
+
},
|
323
|
+
view: EzDrmConfigView
|
324
|
+
}
|
325
|
+
}
|
326
|
+
};
|
327
|
+
}
|
328
|
+
function GlobalAxinomConfig2(_f) {
|
329
|
+
const AxinomConfigView = react_1.default.lazy(async () => {
|
330
|
+
const views = await Promise.resolve().then(() => __importStar(require_shared_views()));
|
331
|
+
return { default: views.AxinomConfigView };
|
332
|
+
});
|
333
|
+
return {
|
334
|
+
id: "axinom-config",
|
335
|
+
form: {
|
336
|
+
help: "Configuration for Axinom DRM",
|
337
|
+
hint: {
|
338
|
+
envOverride: true,
|
339
|
+
type: "form-item",
|
340
|
+
form: {
|
341
|
+
tenantId: {
|
342
|
+
help: "Tenant ID from your Axinom DRM account",
|
343
|
+
hint: {
|
344
|
+
envOverride: true,
|
345
|
+
type: "text"
|
346
|
+
}
|
347
|
+
},
|
348
|
+
managementKey: {
|
349
|
+
help: "Management Key from your Axinom DRM account",
|
350
|
+
hint: {
|
351
|
+
envOverride: true,
|
352
|
+
type: "text"
|
353
|
+
}
|
354
|
+
},
|
355
|
+
comKeyId: {
|
356
|
+
help: "Communication Key ID from your Axinom DRM account",
|
357
|
+
hint: {
|
358
|
+
envOverride: true,
|
359
|
+
type: "text"
|
360
|
+
}
|
361
|
+
},
|
362
|
+
comKey: {
|
363
|
+
help: "Communication Key from your Axinom DRM account",
|
364
|
+
hint: {
|
365
|
+
envOverride: true,
|
366
|
+
type: "text"
|
367
|
+
}
|
368
|
+
}
|
369
|
+
},
|
370
|
+
view: AxinomConfigView
|
371
|
+
}
|
372
|
+
}
|
373
|
+
};
|
374
|
+
}
|
385
375
|
function contractHardwareAcceleration(value, accepted) {
|
386
376
|
if (!value)
|
387
377
|
return void 0;
|
@@ -424,6 +414,129 @@ var require_config = __commonJS({
|
|
424
414
|
}
|
425
415
|
});
|
426
416
|
|
417
|
+
// external-global-plugin:hls.js
|
418
|
+
var require_hls = __commonJS({
|
419
|
+
"external-global-plugin:hls.js"(exports, module) {
|
420
|
+
module.exports = window.HlsJs;
|
421
|
+
}
|
422
|
+
});
|
423
|
+
|
424
|
+
// build/output.autoCmaf/summary.js
|
425
|
+
var summary_exports = {};
|
426
|
+
__export(summary_exports, {
|
427
|
+
default: () => summary_default
|
428
|
+
});
|
429
|
+
function InlineView5({ state, config }) {
|
430
|
+
const url = state.url;
|
431
|
+
const id = config.id;
|
432
|
+
const previewVideo = (0, import_react4.useRef)(null);
|
433
|
+
(0, import_react4.useEffect)(() => {
|
434
|
+
if (!url)
|
435
|
+
return;
|
436
|
+
if (!previewVideo.current)
|
437
|
+
return;
|
438
|
+
if (import_hls.default.isSupported()) {
|
439
|
+
let widevineLicenseUrl;
|
440
|
+
const headers = {};
|
441
|
+
if (config.drmProvider === "ezdrm") {
|
442
|
+
if (config.__global?.ezdrmConfig?.pX || state.drmToken) {
|
443
|
+
widevineLicenseUrl = `https://widevine-dash.ezdrm.com/widevine-php/widevine-foreignkey.php?pX=${config.__global?.ezdrmConfig?.pX || state.drmToken}`;
|
444
|
+
}
|
445
|
+
}
|
446
|
+
if (config.drmProvider === "axinom") {
|
447
|
+
widevineLicenseUrl = `https://drm-widevine-licensing.axprod.net/AcquireLicense`;
|
448
|
+
headers["X-AxDrm-Message"] = state.drmToken;
|
449
|
+
}
|
450
|
+
const hls = new import_hls.default({
|
451
|
+
widevineLicenseUrl,
|
452
|
+
emeEnabled: !!widevineLicenseUrl,
|
453
|
+
licenseXhrSetup: (xhr) => {
|
454
|
+
for (const k in headers) {
|
455
|
+
const v = headers[k];
|
456
|
+
if (v !== void 0) {
|
457
|
+
xhr.setRequestHeader(k, v);
|
458
|
+
}
|
459
|
+
}
|
460
|
+
}
|
461
|
+
});
|
462
|
+
hls.loadSource(url);
|
463
|
+
hls.attachMedia(previewVideo.current);
|
464
|
+
} else if (previewVideo.current.canPlayType("application/vnd.apple.mpegurl")) {
|
465
|
+
previewVideo.current.src = url;
|
466
|
+
}
|
467
|
+
}, [state.url]);
|
468
|
+
if (!url)
|
469
|
+
return (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: "..." });
|
470
|
+
return (0, import_jsx_runtime6.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime6.jsx)("video", { ref: previewVideo, autoPlay: true, muted: true, id: `${id}-video` }) });
|
471
|
+
}
|
472
|
+
var import_jsx_runtime6, import_react4, import_hls, summary_default;
|
473
|
+
var init_summary = __esm({
|
474
|
+
"build/output.autoCmaf/summary.js"() {
|
475
|
+
"use strict";
|
476
|
+
import_jsx_runtime6 = __toESM(require_jsx_runtime());
|
477
|
+
import_react4 = __toESM(require_react());
|
478
|
+
import_hls = __toESM(require_hls());
|
479
|
+
summary_default = InlineView5;
|
480
|
+
}
|
481
|
+
});
|
482
|
+
|
483
|
+
// build/output.autoCmaf/fullscreen.js
|
484
|
+
var fullscreen_exports = {};
|
485
|
+
__export(fullscreen_exports, {
|
486
|
+
default: () => fullscreen_default
|
487
|
+
});
|
488
|
+
function FullscreenView({ state, config }) {
|
489
|
+
const url = state.url;
|
490
|
+
const id = config.id;
|
491
|
+
(0, import_react5.useEffect)(() => {
|
492
|
+
if (!url)
|
493
|
+
return;
|
494
|
+
const element = document.getElementById(`${id}-video`);
|
495
|
+
if (import_hls2.default.isSupported()) {
|
496
|
+
const hls = new import_hls2.default();
|
497
|
+
hls.loadSource(url);
|
498
|
+
hls.attachMedia(element);
|
499
|
+
} else if (element.canPlayType("application/vnd.apple.mpegurl")) {
|
500
|
+
element.src = url;
|
501
|
+
}
|
502
|
+
}, [state.url]);
|
503
|
+
if (!url)
|
504
|
+
return (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: "..." });
|
505
|
+
{
|
506
|
+
}
|
507
|
+
return (0, import_jsx_runtime7.jsx)("div", { children: (0, import_jsx_runtime7.jsx)("video", { controls: true, autoPlay: true, muted: true, id: `${id}-video` }) });
|
508
|
+
}
|
509
|
+
var import_jsx_runtime7, import_react5, import_hls2, fullscreen_default;
|
510
|
+
var init_fullscreen = __esm({
|
511
|
+
"build/output.autoCmaf/fullscreen.js"() {
|
512
|
+
"use strict";
|
513
|
+
import_jsx_runtime7 = __toESM(require_jsx_runtime());
|
514
|
+
import_react5 = __toESM(require_react());
|
515
|
+
import_hls2 = __toESM(require_hls());
|
516
|
+
fullscreen_default = FullscreenView;
|
517
|
+
}
|
518
|
+
});
|
519
|
+
|
520
|
+
// build/output.autoCmaf/form-views.js
|
521
|
+
var form_views_exports = {};
|
522
|
+
__export(form_views_exports, {
|
523
|
+
S3Destination: () => S3Destination,
|
524
|
+
SegmentConfiguration: () => SegmentConfiguration
|
525
|
+
});
|
526
|
+
function S3Destination(destination) {
|
527
|
+
return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Host" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.host }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Path" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.prefix }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Include Ads" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: destination.includeAdInsertions ? "yes" : "no" })] });
|
528
|
+
}
|
529
|
+
function SegmentConfiguration(cfg) {
|
530
|
+
return (0, import_jsx_runtime8.jsxs)("div", { className: "grid grid-flow-row-dense grid-cols-3 text-sm", children: [(0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segments" }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-2", children: cfg.defaultSegmentCount == 0 ? "all" : cfg.defaultSegmentCount }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Segment Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetSegmentDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Part Target" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.targetPartDuration, "s"] }), (0, import_jsx_runtime8.jsx)("div", { className: "col-span-1", children: "Retention" }), (0, import_jsx_runtime8.jsxs)("div", { className: "col-span-2", children: [cfg.retentionPeriod, "s"] })] });
|
531
|
+
}
|
532
|
+
var import_jsx_runtime8;
|
533
|
+
var init_form_views = __esm({
|
534
|
+
"build/output.autoCmaf/form-views.js"() {
|
535
|
+
"use strict";
|
536
|
+
import_jsx_runtime8 = __toESM(require_jsx_runtime());
|
537
|
+
}
|
538
|
+
});
|
539
|
+
|
427
540
|
// external-global-plugin:@norskvideo/webrtc-client
|
428
541
|
var require_webrtc_client = __commonJS({
|
429
542
|
"external-global-plugin:@norskvideo/webrtc-client"(exports, module) {
|
@@ -531,11 +644,12 @@ var init_inline_view5 = __esm({
|
|
531
644
|
|
532
645
|
// build/output.statistics/info.js
|
533
646
|
function info_default11({ defineComponent, All }) {
|
534
|
-
const
|
647
|
+
const InlineView15 = import_react11.default.lazy(async () => Promise.resolve().then(() => (init_inline_view5(), inline_view_exports5)));
|
535
648
|
return defineComponent({
|
536
649
|
identifier: "output.statistics",
|
537
650
|
category: "output",
|
538
651
|
name: "Statistics",
|
652
|
+
description: "This component accepts multiple media streams, captures and reports metrics or statistical data related to the media streams.",
|
539
653
|
subscription: {
|
540
654
|
// No validation required
|
541
655
|
accepts: {
|
@@ -559,7 +673,7 @@ function info_default11({ defineComponent, All }) {
|
|
559
673
|
}
|
560
674
|
return { ...state };
|
561
675
|
},
|
562
|
-
inline:
|
676
|
+
inline: InlineView15
|
563
677
|
},
|
564
678
|
configForm: {
|
565
679
|
form: {}
|
@@ -577,21 +691,73 @@ var init_info = __esm({
|
|
577
691
|
}
|
578
692
|
});
|
579
693
|
|
694
|
+
// build/processor.browserOverlay/summary-view.js
|
695
|
+
var summary_view_exports3 = {};
|
696
|
+
__export(summary_view_exports3, {
|
697
|
+
default: () => summary_view_default3
|
698
|
+
});
|
699
|
+
function SummaryView5({ state, sendCommand }) {
|
700
|
+
const [url, setUrl] = (0, import_react12.useState)(state.currentUrl);
|
701
|
+
const [enabled, setEnabled] = (0, import_react12.useState)(state.enabled);
|
702
|
+
const stateChanged = (0, import_react12.useMemo)(() => {
|
703
|
+
return url !== state.currentUrl || enabled !== state.enabled;
|
704
|
+
}, [url, enabled]);
|
705
|
+
const buttonClass = "mt-2 mb-5 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800";
|
706
|
+
return (0, import_jsx_runtime12.jsxs)("div", { className: "space-y-3 mb-5", children: [(0, import_jsx_runtime12.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime12.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime12.jsx)("label", { htmlFor: "url", className: "mb-2 mr-2 text-sm font-medium text-gray-900 dark:text-white", children: "URL" }), (0, import_jsx_runtime12.jsx)("input", { type: "email", id: "url", className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", value: url, onChange: (e) => setUrl(e.target.value), required: true })] }), (0, import_jsx_runtime12.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime12.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime12.jsx)("span", { className: "me-3 text-sm font-medium text-gray-900 dark:text-gray-300", children: "Enabled" }), (0, import_jsx_runtime12.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => setEnabled(e.target.checked), className: "sr-only peer" }), (0, import_jsx_runtime12.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) }), (0, import_jsx_runtime12.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, disabled: !stateChanged, onClick: () => {
|
707
|
+
if (url !== state.currentUrl) {
|
708
|
+
sendCommand({ type: "change-url", url });
|
709
|
+
}
|
710
|
+
if (enabled !== state.enabled) {
|
711
|
+
if (enabled) {
|
712
|
+
sendCommand({ type: "enable" });
|
713
|
+
} else {
|
714
|
+
sendCommand({ type: "disable" });
|
715
|
+
}
|
716
|
+
}
|
717
|
+
}, children: "Commit" })] });
|
718
|
+
}
|
719
|
+
var import_jsx_runtime12, import_react12, summary_view_default3;
|
720
|
+
var init_summary_view3 = __esm({
|
721
|
+
"build/processor.browserOverlay/summary-view.js"() {
|
722
|
+
"use strict";
|
723
|
+
import_jsx_runtime12 = __toESM(require_jsx_runtime());
|
724
|
+
import_react12 = __toESM(require_react());
|
725
|
+
summary_view_default3 = SummaryView5;
|
726
|
+
}
|
727
|
+
});
|
728
|
+
|
729
|
+
// build/processor.browserOverlay/inline-view.js
|
730
|
+
var inline_view_exports6 = {};
|
731
|
+
__export(inline_view_exports6, {
|
732
|
+
default: () => inline_view_default6
|
733
|
+
});
|
734
|
+
function InlineView9({ state, config }) {
|
735
|
+
return (0, import_jsx_runtime13.jsx)("div", { id: `browser-overlay-${config.id}`, children: (0, import_jsx_runtime13.jsxs)("div", { className: "w-64 grid grid-cols-[min-content,1fr] gap-2", children: [(0, import_jsx_runtime13.jsx)("div", { children: "URL:" }), (0, import_jsx_runtime13.jsx)("div", { className: "truncate", children: state.currentUrl }), (0, import_jsx_runtime13.jsx)("div", { children: "Enabled:" }), (0, import_jsx_runtime13.jsx)("div", { children: (0, import_jsx_runtime13.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime13.jsx)("input", { type: "checkbox", checked: state.enabled, disabled: true, className: "sr-only peer" }), (0, import_jsx_runtime13.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) })] }) });
|
736
|
+
}
|
737
|
+
var import_jsx_runtime13, inline_view_default6;
|
738
|
+
var init_inline_view6 = __esm({
|
739
|
+
"build/processor.browserOverlay/inline-view.js"() {
|
740
|
+
"use strict";
|
741
|
+
import_jsx_runtime13 = __toESM(require_jsx_runtime());
|
742
|
+
inline_view_default6 = InlineView9;
|
743
|
+
}
|
744
|
+
});
|
745
|
+
|
580
746
|
// build/processor.cascadingSwitch/source-selection.js
|
581
747
|
var source_selection_exports = {};
|
582
748
|
__export(source_selection_exports, {
|
583
749
|
default: () => source_selection_default
|
584
750
|
});
|
585
751
|
function OrderInput(props) {
|
586
|
-
(0,
|
752
|
+
(0, import_react14.useEffect)(() => {
|
587
753
|
props.onChanged(props.defaultValue ?? []);
|
588
754
|
}, [props.defaultValue]);
|
589
|
-
const [value, setValue] = (0,
|
755
|
+
const [value, setValue] = (0, import_react14.useState)(props.defaultValue ?? []);
|
590
756
|
if (value.length == 0) {
|
591
|
-
return (0,
|
757
|
+
return (0, import_jsx_runtime14.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
|
592
758
|
} else {
|
593
|
-
return (0,
|
594
|
-
return (0,
|
759
|
+
return (0, import_jsx_runtime14.jsx)("div", { id: props.id, children: (0, import_jsx_runtime14.jsx)("ul", { children: value.map((v, ix) => {
|
760
|
+
return (0, import_jsx_runtime14.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime14.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, {}) : (0, import_jsx_runtime14.jsx)("svg", { onClick: moveUp(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime14.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, {}) : (0, import_jsx_runtime14.jsx)("svg", { onClick: moveDown(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime14.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
|
595
761
|
}) }) });
|
596
762
|
}
|
597
763
|
function moveUp(ix) {
|
@@ -613,49 +779,119 @@ function OrderInput(props) {
|
|
613
779
|
};
|
614
780
|
}
|
615
781
|
}
|
616
|
-
var
|
782
|
+
var import_jsx_runtime14, import_react14, source_selection_default;
|
617
783
|
var init_source_selection = __esm({
|
618
784
|
"build/processor.cascadingSwitch/source-selection.js"() {
|
619
785
|
"use strict";
|
620
|
-
|
621
|
-
|
786
|
+
import_jsx_runtime14 = __toESM(require_jsx_runtime());
|
787
|
+
import_react14 = __toESM(require_react());
|
622
788
|
source_selection_default = OrderInput;
|
623
789
|
}
|
624
790
|
});
|
625
791
|
|
626
792
|
// build/processor.cascadingSwitch/inline-view.js
|
627
|
-
var
|
628
|
-
__export(
|
629
|
-
default: () =>
|
793
|
+
var inline_view_exports7 = {};
|
794
|
+
__export(inline_view_exports7, {
|
795
|
+
default: () => inline_view_default7
|
630
796
|
});
|
631
|
-
function
|
632
|
-
return (0,
|
797
|
+
function InlineView11({ state, config }) {
|
798
|
+
return (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [(0, import_jsx_runtime15.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime15.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime15.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime15.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime15.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime15.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
|
633
799
|
}
|
634
|
-
var
|
635
|
-
var
|
800
|
+
var import_jsx_runtime15, activeClasses, availableClasses, inactiveClasses, inline_view_default7;
|
801
|
+
var init_inline_view7 = __esm({
|
636
802
|
"build/processor.cascadingSwitch/inline-view.js"() {
|
637
803
|
"use strict";
|
638
|
-
|
804
|
+
import_jsx_runtime15 = __toESM(require_jsx_runtime());
|
639
805
|
activeClasses = "active text-green-300 dark:text-green-300";
|
640
806
|
availableClasses = "available text-green-300 dark:text-green-300";
|
641
807
|
inactiveClasses = "inactive text-orange-300 dark:text-orange-300";
|
642
|
-
|
808
|
+
inline_view_default7 = InlineView11;
|
809
|
+
}
|
810
|
+
});
|
811
|
+
|
812
|
+
// build/processor.fixedLadder/rung-view.js
|
813
|
+
var rung_view_exports = {};
|
814
|
+
__export(rung_view_exports, {
|
815
|
+
default: () => rung_view_default
|
816
|
+
});
|
817
|
+
function rung_view_default(rung) {
|
818
|
+
return (0, import_jsx_runtime16.jsx)("div", { className: "text-gray-900 dark:text-white", children: rung.name });
|
819
|
+
}
|
820
|
+
var import_jsx_runtime16;
|
821
|
+
var init_rung_view = __esm({
|
822
|
+
"build/processor.fixedLadder/rung-view.js"() {
|
823
|
+
"use strict";
|
824
|
+
import_jsx_runtime16 = __toESM(require_jsx_runtime());
|
825
|
+
}
|
826
|
+
});
|
827
|
+
|
828
|
+
// build/processor.fixedLadder/codec-editor.js
|
829
|
+
var codec_editor_exports = {};
|
830
|
+
__export(codec_editor_exports, {
|
831
|
+
default: () => CodecEditor
|
832
|
+
});
|
833
|
+
function CodecEditor(props) {
|
834
|
+
(0, import_react15.useEffect)(() => {
|
835
|
+
if (props.defaultValue)
|
836
|
+
props.onChanged(props.defaultValue);
|
837
|
+
}, [props.defaultValue]);
|
838
|
+
const textAreaRef = (0, import_react15.useRef)(null);
|
839
|
+
const [value, setValue] = (0, import_react15.useState)(props.defaultValue);
|
840
|
+
(0, import_react15.useEffect)(() => {
|
841
|
+
if (textAreaRef.current) {
|
842
|
+
const target = textAreaRef.current;
|
843
|
+
target.style.height = "";
|
844
|
+
target.style.height = target.scrollHeight + "px";
|
845
|
+
}
|
846
|
+
}, []);
|
847
|
+
return (0, import_jsx_runtime17.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit bg-white text-gray-900 dark:text-white dark:bg-black", onChange: (e) => {
|
848
|
+
const target = e.currentTarget;
|
849
|
+
try {
|
850
|
+
const codec = JSON.parse(target.value);
|
851
|
+
setValue(codec);
|
852
|
+
props.onChanged(codec);
|
853
|
+
} catch (e2) {
|
854
|
+
}
|
855
|
+
}, defaultValue: JSON.stringify(value, void 0, 2) });
|
856
|
+
}
|
857
|
+
var import_jsx_runtime17, import_react15;
|
858
|
+
var init_codec_editor = __esm({
|
859
|
+
"build/processor.fixedLadder/codec-editor.js"() {
|
860
|
+
"use strict";
|
861
|
+
import_jsx_runtime17 = __toESM(require_jsx_runtime());
|
862
|
+
import_react15 = __toESM(require_react());
|
863
|
+
}
|
864
|
+
});
|
865
|
+
|
866
|
+
// build/processor.fixedLadder/codec-view.js
|
867
|
+
var codec_view_exports = {};
|
868
|
+
__export(codec_view_exports, {
|
869
|
+
default: () => CodecEditor2
|
870
|
+
});
|
871
|
+
function CodecEditor2(props) {
|
872
|
+
return (0, import_jsx_runtime18.jsxs)("div", { className: "text-gray-900 dark:text-white", children: [props.width, "x", props.height] });
|
873
|
+
}
|
874
|
+
var import_jsx_runtime18;
|
875
|
+
var init_codec_view = __esm({
|
876
|
+
"build/processor.fixedLadder/codec-view.js"() {
|
877
|
+
"use strict";
|
878
|
+
import_jsx_runtime18 = __toESM(require_jsx_runtime());
|
643
879
|
}
|
644
880
|
});
|
645
881
|
|
646
|
-
// build/processor.
|
647
|
-
var
|
648
|
-
__export(
|
649
|
-
default: () =>
|
882
|
+
// build/processor.onscreenGraphic/image-selection.js
|
883
|
+
var image_selection_exports = {};
|
884
|
+
__export(image_selection_exports, {
|
885
|
+
default: () => image_selection_default
|
650
886
|
});
|
651
|
-
function
|
652
|
-
const [loading, setLoading] = (0,
|
653
|
-
(0,
|
887
|
+
function GraphicSelection(props) {
|
888
|
+
const [loading, setLoading] = (0, import_react17.useState)(true);
|
889
|
+
(0, import_react17.useEffect)(() => {
|
654
890
|
const fn = async () => {
|
655
|
-
const result2 = await fetch("components/processor.
|
891
|
+
const result2 = await fetch("components/processor.onscreenGraphic/graphics");
|
656
892
|
if (result2.ok && result2.body) {
|
657
|
-
const
|
658
|
-
|
893
|
+
const graphics = await result2.json();
|
894
|
+
setGraphics(graphics);
|
659
895
|
setLoading(false);
|
660
896
|
if (props.defaultValue)
|
661
897
|
props.onChanged(props.defaultValue);
|
@@ -666,65 +902,65 @@ function BugSelection(props) {
|
|
666
902
|
};
|
667
903
|
fn().catch(console.error);
|
668
904
|
}, []);
|
669
|
-
const [
|
905
|
+
const [graphcs, setGraphics] = (0, import_react17.useState)([]);
|
670
906
|
if (loading) {
|
671
|
-
return (0,
|
907
|
+
return (0, import_jsx_runtime19.jsx)("div", { children: "Loading.." });
|
672
908
|
}
|
673
|
-
if (
|
674
|
-
return (0,
|
909
|
+
if (graphcs.length == 0) {
|
910
|
+
return (0, import_jsx_runtime19.jsx)("div", { children: "No graphics loaded" });
|
675
911
|
}
|
676
|
-
return (0,
|
677
|
-
return (0,
|
912
|
+
return (0, import_jsx_runtime19.jsx)("div", { children: (0, import_jsx_runtime19.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime19.jsx)("option", { value: "", children: "---" }, "empty"), graphcs.map((o, i) => {
|
913
|
+
return (0, import_jsx_runtime19.jsx)("option", { value: o, children: o }, i);
|
678
914
|
})] }) });
|
679
915
|
function myOnChange(e) {
|
680
916
|
props.onChanged(e.target.value);
|
681
917
|
}
|
682
918
|
}
|
683
|
-
var
|
684
|
-
var
|
685
|
-
"build/processor.
|
919
|
+
var import_jsx_runtime19, import_react17, image_selection_default;
|
920
|
+
var init_image_selection = __esm({
|
921
|
+
"build/processor.onscreenGraphic/image-selection.js"() {
|
686
922
|
"use strict";
|
687
|
-
|
688
|
-
|
689
|
-
|
923
|
+
import_jsx_runtime19 = __toESM(require_jsx_runtime());
|
924
|
+
import_react17 = __toESM(require_react());
|
925
|
+
image_selection_default = GraphicSelection;
|
690
926
|
}
|
691
927
|
});
|
692
928
|
|
693
|
-
// build/processor.
|
694
|
-
var
|
695
|
-
__export(
|
696
|
-
default: () =>
|
929
|
+
// build/processor.onscreenGraphic/summary-view.js
|
930
|
+
var summary_view_exports4 = {};
|
931
|
+
__export(summary_view_exports4, {
|
932
|
+
default: () => summary_view_default4
|
697
933
|
});
|
698
|
-
function
|
699
|
-
const [
|
700
|
-
const [position, setPosition] = (0,
|
701
|
-
const [
|
702
|
-
const [fileToUpload, setFileToUpload] = (0,
|
703
|
-
const [showFileInput, setShowFileInput] = (0,
|
704
|
-
const [showUploadButton, setShowUploadButton] = (0,
|
705
|
-
const [uploadStatus, setUploadStatus] = (0,
|
706
|
-
const [showDeleteDropdown, setShowDeleteDropdown] = (0,
|
707
|
-
const [
|
708
|
-
const
|
934
|
+
function SummaryView7({ state, sendCommand, urls }) {
|
935
|
+
const [graphic, setGraphic] = (0, import_react18.useState)(state.activeGraphic?.file);
|
936
|
+
const [position, setPosition] = (0, import_react18.useState)(state.activeGraphic?.position);
|
937
|
+
const [graphics, setGraphics] = (0, import_react18.useState)([]);
|
938
|
+
const [fileToUpload, setFileToUpload] = (0, import_react18.useState)(void 0);
|
939
|
+
const [showFileInput, setShowFileInput] = (0, import_react18.useState)(false);
|
940
|
+
const [showUploadButton, setShowUploadButton] = (0, import_react18.useState)(false);
|
941
|
+
const [uploadStatus, setUploadStatus] = (0, import_react18.useState)({ success: false, message: null });
|
942
|
+
const [showDeleteDropdown, setShowDeleteDropdown] = (0, import_react18.useState)(false);
|
943
|
+
const [graphicToDelete, setGraphicToDelete] = (0, import_react18.useState)("");
|
944
|
+
const updateGraphics = (0, import_react18.useCallback)(async () => {
|
709
945
|
try {
|
710
|
-
const result2 = await fetch(`${urls.componentUrl}/
|
946
|
+
const result2 = await fetch(`${urls.componentUrl}/graphics`);
|
711
947
|
if (result2.ok) {
|
712
|
-
const
|
713
|
-
|
948
|
+
const newGraphics = await result2.json();
|
949
|
+
setGraphics(newGraphics);
|
714
950
|
} else {
|
715
951
|
throw new Error(await result2.text());
|
716
952
|
}
|
717
953
|
} catch (error) {
|
718
|
-
console.error("Failed to update
|
954
|
+
console.error("Failed to update graphics:", error);
|
719
955
|
setUploadStatus({
|
720
956
|
success: false,
|
721
|
-
message: "Failed to update
|
957
|
+
message: "Failed to update graphic list."
|
722
958
|
});
|
723
959
|
}
|
724
960
|
}, [urls.componentUrl]);
|
725
|
-
(0,
|
726
|
-
|
727
|
-
}, [
|
961
|
+
(0, import_react18.useEffect)(() => {
|
962
|
+
updateGraphics().catch(console.error);
|
963
|
+
}, [updateGraphics]);
|
728
964
|
const onFileChange = (e) => {
|
729
965
|
const file = e.target.files?.[0];
|
730
966
|
setFileToUpload(file);
|
@@ -737,7 +973,7 @@ function SummaryView5({ state, sendCommand, urls }) {
|
|
737
973
|
try {
|
738
974
|
const form = new FormData();
|
739
975
|
form.append("file", fileToUpload);
|
740
|
-
const response = await fetch(`${urls.componentUrl}/
|
976
|
+
const response = await fetch(`${urls.componentUrl}/graphics`, {
|
741
977
|
method: "POST",
|
742
978
|
body: form
|
743
979
|
});
|
@@ -745,7 +981,7 @@ function SummaryView5({ state, sendCommand, urls }) {
|
|
745
981
|
const errorData = await response.json();
|
746
982
|
setUploadStatus({
|
747
983
|
success: false,
|
748
|
-
message: `${errorData.error}. Delete the existing
|
984
|
+
message: `${errorData.error}. Delete the existing graphic first if you want to replace it.`
|
749
985
|
});
|
750
986
|
} else if (!response.ok) {
|
751
987
|
throw new Error("Upload failed");
|
@@ -754,138 +990,68 @@ function SummaryView5({ state, sendCommand, urls }) {
|
|
754
990
|
setShowFileInput(false);
|
755
991
|
setUploadStatus({
|
756
992
|
success: true,
|
757
|
-
message: "
|
993
|
+
message: "Graphic uploaded successfully!"
|
758
994
|
});
|
759
|
-
await
|
995
|
+
await updateGraphics();
|
760
996
|
}
|
761
997
|
} catch (error) {
|
762
998
|
console.error("Failed to upload file:", error);
|
763
|
-
setUploadStatus({ success: false, message: "Failed to upload
|
999
|
+
setUploadStatus({ success: false, message: "Failed to upload graphic." });
|
764
1000
|
}
|
765
1001
|
setTimeout(() => setUploadStatus({ success: false, message: null }), 5e3);
|
766
1002
|
};
|
767
1003
|
const deleteBug = async () => {
|
768
|
-
if (!
|
1004
|
+
if (!graphicToDelete)
|
769
1005
|
return;
|
770
1006
|
try {
|
771
|
-
const response = await fetch(`${urls.componentUrl}/
|
1007
|
+
const response = await fetch(`${urls.componentUrl}/graphic`, {
|
772
1008
|
method: "DELETE",
|
773
1009
|
headers: {
|
774
1010
|
"Content-Type": "application/json"
|
775
1011
|
},
|
776
|
-
body: JSON.stringify({ filename:
|
1012
|
+
body: JSON.stringify({ filename: graphicToDelete })
|
777
1013
|
});
|
778
1014
|
if (response.ok) {
|
779
1015
|
setUploadStatus({
|
780
1016
|
success: true,
|
781
|
-
message: "
|
1017
|
+
message: "Graphic deleted successfully!"
|
782
1018
|
});
|
783
|
-
await
|
784
|
-
if (
|
785
|
-
|
1019
|
+
await updateGraphics();
|
1020
|
+
if (graphic === graphicToDelete) {
|
1021
|
+
setGraphic(void 0);
|
786
1022
|
sendCommand({
|
787
|
-
type: "change-
|
1023
|
+
type: "change-graphic",
|
788
1024
|
file: void 0,
|
789
1025
|
position: void 0
|
790
1026
|
});
|
791
1027
|
}
|
792
|
-
|
1028
|
+
setGraphicToDelete("");
|
793
1029
|
setShowDeleteDropdown(false);
|
794
1030
|
} else {
|
795
1031
|
const errorData = await response.json();
|
796
1032
|
setUploadStatus({
|
797
1033
|
success: false,
|
798
|
-
message: errorData.error || "Failed to delete
|
1034
|
+
message: errorData.error || "Failed to delete graphic"
|
799
1035
|
});
|
800
1036
|
}
|
801
1037
|
} catch (error) {
|
802
|
-
console.error("Failed to delete
|
803
|
-
setUploadStatus({ success: false, message: "Failed to delete
|
1038
|
+
console.error("Failed to delete graphic:", error);
|
1039
|
+
setUploadStatus({ success: false, message: "Failed to delete graphic" });
|
804
1040
|
}
|
805
1041
|
setTimeout(() => setUploadStatus({ success: false, message: null }), 3e3);
|
806
|
-
};
|
807
|
-
const buttonClass = "mt-2 mb-5 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800";
|
808
|
-
const deleteButtonClass = "mt-2 text-white w-full justify-center bg-red-600 hover:bg-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-red-700 dark:hover:bg-red-800 dark:focus:ring-red-900";
|
809
|
-
const fileInputClass = "block w-full text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400";
|
810
|
-
return (0,
|
811
|
-
}
|
812
|
-
var import_jsx_runtime15, import_react14, summary_view_default3;
|
813
|
-
var init_summary_view3 = __esm({
|
814
|
-
"build/processor.dynamicBug/summary-view.js"() {
|
815
|
-
"use strict";
|
816
|
-
import_jsx_runtime15 = __toESM(require_jsx_runtime());
|
817
|
-
import_react14 = __toESM(require_react());
|
818
|
-
summary_view_default3 = SummaryView5;
|
819
|
-
}
|
820
|
-
});
|
821
|
-
|
822
|
-
// build/processor.fixedLadder/rung-view.js
|
823
|
-
var rung_view_exports = {};
|
824
|
-
__export(rung_view_exports, {
|
825
|
-
default: () => rung_view_default
|
826
|
-
});
|
827
|
-
function rung_view_default(rung) {
|
828
|
-
return (0, import_jsx_runtime16.jsx)("div", { className: "", children: rung.name });
|
829
|
-
}
|
830
|
-
var import_jsx_runtime16;
|
831
|
-
var init_rung_view = __esm({
|
832
|
-
"build/processor.fixedLadder/rung-view.js"() {
|
833
|
-
"use strict";
|
834
|
-
import_jsx_runtime16 = __toESM(require_jsx_runtime());
|
835
|
-
}
|
836
|
-
});
|
837
|
-
|
838
|
-
// build/processor.fixedLadder/codec-editor.js
|
839
|
-
var codec_editor_exports = {};
|
840
|
-
__export(codec_editor_exports, {
|
841
|
-
default: () => CodecEditor
|
842
|
-
});
|
843
|
-
function CodecEditor(props) {
|
844
|
-
(0, import_react16.useEffect)(() => {
|
845
|
-
if (props.defaultValue)
|
846
|
-
props.onChanged(props.defaultValue);
|
847
|
-
}, [props.defaultValue]);
|
848
|
-
const textAreaRef = (0, import_react16.useRef)(null);
|
849
|
-
const [value, setValue] = (0, import_react16.useState)(props.defaultValue);
|
850
|
-
(0, import_react16.useEffect)(() => {
|
851
|
-
if (textAreaRef.current) {
|
852
|
-
const target = textAreaRef.current;
|
853
|
-
target.style.height = "";
|
854
|
-
target.style.height = target.scrollHeight + "px";
|
855
|
-
}
|
856
|
-
}, []);
|
857
|
-
return (0, import_jsx_runtime17.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit dark:text-white dark:bg-black", onChange: (e) => {
|
858
|
-
const target = e.currentTarget;
|
859
|
-
try {
|
860
|
-
const codec = JSON.parse(target.value);
|
861
|
-
setValue(codec);
|
862
|
-
props.onChanged(codec);
|
863
|
-
} catch (e2) {
|
864
|
-
}
|
865
|
-
}, defaultValue: JSON.stringify(value, void 0, 2) });
|
866
|
-
}
|
867
|
-
var import_jsx_runtime17, import_react16;
|
868
|
-
var init_codec_editor = __esm({
|
869
|
-
"build/processor.fixedLadder/codec-editor.js"() {
|
870
|
-
"use strict";
|
871
|
-
import_jsx_runtime17 = __toESM(require_jsx_runtime());
|
872
|
-
import_react16 = __toESM(require_react());
|
873
|
-
}
|
874
|
-
});
|
875
|
-
|
876
|
-
// build/processor.fixedLadder/codec-view.js
|
877
|
-
var codec_view_exports = {};
|
878
|
-
__export(codec_view_exports, {
|
879
|
-
default: () => CodecEditor2
|
880
|
-
});
|
881
|
-
function CodecEditor2(props) {
|
882
|
-
return (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [props.width, "x", props.height] });
|
1042
|
+
};
|
1043
|
+
const buttonClass = "mt-2 mb-5 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800";
|
1044
|
+
const deleteButtonClass = "mt-2 text-white w-full justify-center bg-red-600 hover:bg-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-red-700 dark:hover:bg-red-800 dark:focus:ring-red-900";
|
1045
|
+
const fileInputClass = "block w-full text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400";
|
1046
|
+
return (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-3", children: [(0, import_jsx_runtime20.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime20.jsxs)("div", { children: [(0, import_jsx_runtime20.jsx)("label", { htmlFor: "select-graphic", className: "block text-gray-900 dark:text-white mb-1", children: "Source" }), (0, import_jsx_runtime20.jsxs)("select", { id: "select-graphic", className: "w-full node-editor-select-input", value: graphic || "", onChange: (e) => setGraphic(e.target.value || void 0), children: [(0, import_jsx_runtime20.jsx)("option", { value: "", children: "---" }), graphics.map((s) => (0, import_jsx_runtime20.jsx)("option", { value: s, children: s }, s))] })] }), graphic && (0, import_jsx_runtime20.jsxs)("div", { children: [(0, import_jsx_runtime20.jsx)("label", { htmlFor: "select-position", className: "block text-gray-900 dark:text-white mb-1", children: "Position" }), (0, import_jsx_runtime20.jsxs)("select", { id: "select-position", className: "w-full node-editor-select-input", value: position, onChange: (e) => setPosition(e.target.value), children: [(0, import_jsx_runtime20.jsx)("option", { value: "topleft", children: "Top Left" }), (0, import_jsx_runtime20.jsx)("option", { value: "topright", children: "Top Right" }), (0, import_jsx_runtime20.jsx)("option", { value: "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime20.jsx)("option", { value: "bottomright", children: "Bottom Right" })] })] }), (graphic !== state.activeGraphic?.file || position !== state.activeGraphic?.position) && (0, import_jsx_runtime20.jsx)("button", { type: "button", className: buttonClass, onClick: () => sendCommand({ type: "change-graphic", file: graphic, position }), children: "Commit" }), !showFileInput && !uploadStatus.success && (0, import_jsx_runtime20.jsx)("button", { type: "button", className: buttonClass, onClick: () => setShowFileInput(true), style: { marginBottom: "1rem" }, children: "Upload Graphic" }), showFileInput && (0, import_jsx_runtime20.jsxs)("form", { style: { display: "block", marginBottom: "1rem" }, children: [(0, import_jsx_runtime20.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange, className: fileInputClass }), showUploadButton && (0, import_jsx_runtime20.jsx)("button", { type: "button", className: buttonClass, onClick: uploadFile, children: "Upload" })] }), (0, import_jsx_runtime20.jsx)("button", { type: "button", className: deleteButtonClass, onClick: () => setShowDeleteDropdown(!showDeleteDropdown), style: { marginBottom: "1rem" }, children: showDeleteDropdown ? "Hide Delete Options" : "Delete Graphics" }), showDeleteDropdown && (0, import_jsx_runtime20.jsxs)("div", { className: "mt-2 p-2 bg-gray-100 dark:bg-gray-800 rounded-lg", children: [(0, import_jsx_runtime20.jsx)("h3", { className: "text-lg font-semibold mb-2 text-gray-900 dark:text-white", children: "Select Graphic to Delete" }), (0, import_jsx_runtime20.jsxs)("select", { className: "w-full mb-2 node-editor-select-input", value: graphicToDelete, onChange: (e) => setGraphicToDelete(e.target.value), children: [(0, import_jsx_runtime20.jsx)("option", { value: "", children: " Select a graphic" }), graphics.map((graphicName) => (0, import_jsx_runtime20.jsx)("option", { value: graphicName, children: graphicName }, graphicName))] }), (0, import_jsx_runtime20.jsx)("button", { onClick: deleteBug, disabled: !graphicToDelete, className: `${deleteButtonClass} ${!graphicToDelete ? "opacity-50 cursor-not-allowed" : ""}`, children: "Delete Selected Graphic" })] }), uploadStatus.message && (0, import_jsx_runtime20.jsx)("div", { className: `mt-2 text-center ${uploadStatus.success ? "text-green-600" : "text-red-600"}`, children: uploadStatus.message })] });
|
883
1047
|
}
|
884
|
-
var
|
885
|
-
var
|
886
|
-
"build/processor.
|
1048
|
+
var import_jsx_runtime20, import_react18, summary_view_default4;
|
1049
|
+
var init_summary_view4 = __esm({
|
1050
|
+
"build/processor.onscreenGraphic/summary-view.js"() {
|
887
1051
|
"use strict";
|
888
|
-
|
1052
|
+
import_jsx_runtime20 = __toESM(require_jsx_runtime());
|
1053
|
+
import_react18 = __toESM(require_react());
|
1054
|
+
summary_view_default4 = SummaryView7;
|
889
1055
|
}
|
890
1056
|
});
|
891
1057
|
|
@@ -15214,13 +15380,13 @@ var init_auto = __esm({
|
|
15214
15380
|
});
|
15215
15381
|
|
15216
15382
|
// build/util.stats.latency/inline-view.js
|
15217
|
-
var
|
15218
|
-
__export(
|
15219
|
-
default: () =>
|
15383
|
+
var inline_view_exports8 = {};
|
15384
|
+
__export(inline_view_exports8, {
|
15385
|
+
default: () => inline_view_default8
|
15220
15386
|
});
|
15221
|
-
function
|
15222
|
-
const chartContainer = (0,
|
15223
|
-
const [chartControl, setChartControl] = (0,
|
15387
|
+
function InlineView12({ state, config: _2 }) {
|
15388
|
+
const chartContainer = (0, import_react20.useRef)(null);
|
15389
|
+
const [chartControl, setChartControl] = (0, import_react20.useState)(void 0);
|
15224
15390
|
function makeDataSet(key, color2, values) {
|
15225
15391
|
return {
|
15226
15392
|
label: key,
|
@@ -15237,7 +15403,7 @@ function InlineView10({ state, config: _2 }) {
|
|
15237
15403
|
datasets: [makeDataSet("latency", "rgba(255, 0, 0, 255)", state2.values)]
|
15238
15404
|
};
|
15239
15405
|
}
|
15240
|
-
(0,
|
15406
|
+
(0, import_react20.useEffect)(() => {
|
15241
15407
|
if (!chartContainer.current)
|
15242
15408
|
return;
|
15243
15409
|
auto_default.defaults.color = "#FFF";
|
@@ -15275,21 +15441,21 @@ function InlineView10({ state, config: _2 }) {
|
|
15275
15441
|
chart.update();
|
15276
15442
|
}, 100);
|
15277
15443
|
}, [chartContainer]);
|
15278
|
-
(0,
|
15444
|
+
(0, import_react20.useEffect)(() => {
|
15279
15445
|
if (!chartControl)
|
15280
15446
|
return;
|
15281
15447
|
chartControl.data = makeData(state);
|
15282
15448
|
}, [state]);
|
15283
|
-
return (0,
|
15449
|
+
return (0, import_jsx_runtime21.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime21.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
|
15284
15450
|
}
|
15285
|
-
var
|
15286
|
-
var
|
15451
|
+
var import_jsx_runtime21, import_react20, inline_view_default8;
|
15452
|
+
var init_inline_view8 = __esm({
|
15287
15453
|
"build/util.stats.latency/inline-view.js"() {
|
15288
15454
|
"use strict";
|
15289
|
-
|
15290
|
-
|
15455
|
+
import_jsx_runtime21 = __toESM(require_jsx_runtime());
|
15456
|
+
import_react20 = __toESM(require_react());
|
15291
15457
|
init_auto();
|
15292
|
-
|
15458
|
+
inline_view_default8 = InlineView12;
|
15293
15459
|
}
|
15294
15460
|
});
|
15295
15461
|
|
@@ -15299,34 +15465,34 @@ __export(source_node_selection_exports, {
|
|
15299
15465
|
default: () => source_node_selection_default
|
15300
15466
|
});
|
15301
15467
|
function SourceNodeSelection(props) {
|
15302
|
-
return (0,
|
15468
|
+
return (0, import_jsx_runtime22.jsx)("div", { children: (0, import_jsx_runtime22.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime22.jsx)("option", { value: "", children: "---" }, "empty"), Object.values(props.latestDocument.components).map((o, i) => {
|
15303
15469
|
if (o.id == props.id)
|
15304
|
-
return (0,
|
15470
|
+
return (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, {});
|
15305
15471
|
if (o.info.category === "output")
|
15306
15472
|
return;
|
15307
|
-
return (0,
|
15473
|
+
return (0, import_jsx_runtime22.jsx)("option", { value: o.id, children: o.config.displayName }, i);
|
15308
15474
|
})] }) });
|
15309
15475
|
function myOnChange(e) {
|
15310
15476
|
props.onChanged(e.target.value);
|
15311
15477
|
}
|
15312
15478
|
}
|
15313
|
-
var
|
15479
|
+
var import_jsx_runtime22, source_node_selection_default;
|
15314
15480
|
var init_source_node_selection = __esm({
|
15315
15481
|
"build/util.stats.latency/source-node-selection.js"() {
|
15316
15482
|
"use strict";
|
15317
|
-
|
15483
|
+
import_jsx_runtime22 = __toESM(require_jsx_runtime());
|
15318
15484
|
source_node_selection_default = SourceNodeSelection;
|
15319
15485
|
}
|
15320
15486
|
});
|
15321
15487
|
|
15322
15488
|
// build/util.stats.ma35d/inline-view.js
|
15323
|
-
var
|
15324
|
-
__export(
|
15325
|
-
default: () =>
|
15489
|
+
var inline_view_exports9 = {};
|
15490
|
+
__export(inline_view_exports9, {
|
15491
|
+
default: () => inline_view_default9
|
15326
15492
|
});
|
15327
|
-
function
|
15328
|
-
const chartContainer = (0,
|
15329
|
-
const [chartControl, setChartControl] = (0,
|
15493
|
+
function InlineView13({ state, config: _2 }) {
|
15494
|
+
const chartContainer = (0, import_react22.useRef)(null);
|
15495
|
+
const [chartControl, setChartControl] = (0, import_react22.useState)(void 0);
|
15330
15496
|
function makeDataSet(key, color2, values) {
|
15331
15497
|
return {
|
15332
15498
|
label: key,
|
@@ -15347,7 +15513,7 @@ function InlineView11({ state, config: _2 }) {
|
|
15347
15513
|
]
|
15348
15514
|
};
|
15349
15515
|
}
|
15350
|
-
(0,
|
15516
|
+
(0, import_react22.useEffect)(() => {
|
15351
15517
|
if (!chartContainer.current)
|
15352
15518
|
return;
|
15353
15519
|
auto_default.defaults.color = "#FFF";
|
@@ -15385,33 +15551,33 @@ function InlineView11({ state, config: _2 }) {
|
|
15385
15551
|
chart.update();
|
15386
15552
|
}, 100);
|
15387
15553
|
}, [chartContainer]);
|
15388
|
-
(0,
|
15554
|
+
(0, import_react22.useEffect)(() => {
|
15389
15555
|
if (!chartControl)
|
15390
15556
|
return;
|
15391
15557
|
chartControl.data = makeData(state);
|
15392
15558
|
}, [state]);
|
15393
|
-
return (0,
|
15559
|
+
return (0, import_jsx_runtime23.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime23.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
|
15394
15560
|
}
|
15395
|
-
var
|
15396
|
-
var
|
15561
|
+
var import_jsx_runtime23, import_react22, inline_view_default9;
|
15562
|
+
var init_inline_view9 = __esm({
|
15397
15563
|
"build/util.stats.ma35d/inline-view.js"() {
|
15398
15564
|
"use strict";
|
15399
|
-
|
15400
|
-
|
15565
|
+
import_jsx_runtime23 = __toESM(require_jsx_runtime());
|
15566
|
+
import_react22 = __toESM(require_react());
|
15401
15567
|
init_auto();
|
15402
|
-
|
15568
|
+
inline_view_default9 = InlineView13;
|
15403
15569
|
}
|
15404
15570
|
});
|
15405
15571
|
|
15406
15572
|
// build/util.timestamps/inline-view.js
|
15407
|
-
var
|
15408
|
-
__export(
|
15409
|
-
default: () =>
|
15573
|
+
var inline_view_exports10 = {};
|
15574
|
+
__export(inline_view_exports10, {
|
15575
|
+
default: () => inline_view_default10
|
15410
15576
|
});
|
15411
|
-
function
|
15412
|
-
const chartContainer = (0,
|
15413
|
-
const [chartControl, setChartControl] = (0,
|
15414
|
-
(0,
|
15577
|
+
function InlineView14({ state, config: _2 }) {
|
15578
|
+
const chartContainer = (0, import_react24.useRef)(null);
|
15579
|
+
const [chartControl, setChartControl] = (0, import_react24.useState)(void 0);
|
15580
|
+
(0, import_react24.useEffect)(() => {
|
15415
15581
|
if (!chartContainer.current)
|
15416
15582
|
return;
|
15417
15583
|
if (state.timestamps.length < 2)
|
@@ -15473,7 +15639,7 @@ function InlineView12({ state, config: _2 }) {
|
|
15473
15639
|
chart.update();
|
15474
15640
|
}, 100);
|
15475
15641
|
}, [chartContainer]);
|
15476
|
-
(0,
|
15642
|
+
(0, import_react24.useEffect)(() => {
|
15477
15643
|
if (!chartControl)
|
15478
15644
|
return;
|
15479
15645
|
chartControl.data = {
|
@@ -15496,16 +15662,16 @@ function InlineView12({ state, config: _2 }) {
|
|
15496
15662
|
})
|
15497
15663
|
};
|
15498
15664
|
}, [state]);
|
15499
|
-
return (0,
|
15665
|
+
return (0, import_jsx_runtime24.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime24.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
|
15500
15666
|
}
|
15501
|
-
var
|
15502
|
-
var
|
15667
|
+
var import_jsx_runtime24, import_react24, inline_view_default10;
|
15668
|
+
var init_inline_view10 = __esm({
|
15503
15669
|
"build/util.timestamps/inline-view.js"() {
|
15504
15670
|
"use strict";
|
15505
|
-
|
15506
|
-
|
15671
|
+
import_jsx_runtime24 = __toESM(require_jsx_runtime());
|
15672
|
+
import_react24 = __toESM(require_react());
|
15507
15673
|
init_auto();
|
15508
|
-
|
15674
|
+
inline_view_default10 = InlineView14;
|
15509
15675
|
}
|
15510
15676
|
});
|
15511
15677
|
|
@@ -15564,7 +15730,7 @@ function info_default({ defineComponent, Av, validation: { Z, Port, SourceName,
|
|
15564
15730
|
configForm: {
|
15565
15731
|
form: {
|
15566
15732
|
port: { help: "The port this RTMP input will listen on", hint: { type: "numeric", validation: Port, defaultValue: defaultPort, global: unique("port") } },
|
15567
|
-
ssl: { help: "Optional: SSL", hint: { type: "boolean" } },
|
15733
|
+
ssl: { help: "Optional: SSL", hint: { type: "boolean", optional: true } },
|
15568
15734
|
appName: { help: "Name of the app", hint: { type: "text", validation: Z.string().min(1), defaultValue: "norsk" } },
|
15569
15735
|
streamNames: {
|
15570
15736
|
help: "List of stream names to assign to the accepted streams",
|
@@ -15589,6 +15755,7 @@ function info_default2({ defineComponent, Audio }) {
|
|
15589
15755
|
identifier: "input.silence",
|
15590
15756
|
category: "input",
|
15591
15757
|
name: "Silence Generator",
|
15758
|
+
description: "A component that produces silent audio streams with configurable sample rate and channel layout.",
|
15592
15759
|
subscription: {
|
15593
15760
|
produces: {
|
15594
15761
|
type: "single-stream",
|
@@ -15636,6 +15803,7 @@ var result = ({ Z }) => ({
|
|
15636
15803
|
help: "The latency value in the receiving direction of the socket (SRTO_RCVLATENCY)",
|
15637
15804
|
hint: {
|
15638
15805
|
type: "numeric",
|
15806
|
+
optional: true,
|
15639
15807
|
validation: Z.optional(Z.number())
|
15640
15808
|
}
|
15641
15809
|
},
|
@@ -15643,13 +15811,15 @@ var result = ({ Z }) => ({
|
|
15643
15811
|
help: "The latency value provided by the sender side as a minimum value for the receiver (SRTO_PEERLATENCY)",
|
15644
15812
|
hint: {
|
15645
15813
|
type: "numeric",
|
15814
|
+
optional: true,
|
15646
15815
|
validation: Z.optional(Z.number())
|
15647
15816
|
}
|
15648
15817
|
},
|
15649
15818
|
inputBandwidth: {
|
15650
|
-
help: "Input bandwidth (SRTO_INPUTBW
|
15819
|
+
help: "Input bandwidth (SRTO_INPUTBW)",
|
15651
15820
|
hint: {
|
15652
15821
|
type: "numeric",
|
15822
|
+
optional: true,
|
15653
15823
|
validation: Z.optional(Z.number())
|
15654
15824
|
}
|
15655
15825
|
},
|
@@ -15657,6 +15827,7 @@ var result = ({ Z }) => ({
|
|
15657
15827
|
help: "Overhead bandwidth (SRTO_OHEADBW)",
|
15658
15828
|
hint: {
|
15659
15829
|
type: "numeric",
|
15830
|
+
optional: true,
|
15660
15831
|
validation: Z.optional(Z.number())
|
15661
15832
|
}
|
15662
15833
|
},
|
@@ -15664,6 +15835,7 @@ var result = ({ Z }) => ({
|
|
15664
15835
|
help: "Max bandwidth (SRTO_MAXBW)",
|
15665
15836
|
hint: {
|
15666
15837
|
type: "numeric",
|
15838
|
+
optional: true,
|
15667
15839
|
validation: Z.optional(Z.number())
|
15668
15840
|
}
|
15669
15841
|
}
|
@@ -15673,7 +15845,7 @@ var srt_socket_options_default = result;
|
|
15673
15845
|
// build/input.srt-caller/info.js
|
15674
15846
|
var import_react2 = __toESM(require_react());
|
15675
15847
|
function info_default3({ defineComponent, Av, validation }) {
|
15676
|
-
const { Port,
|
15848
|
+
const { Port, Hostname, SourceName, SrtPassphrase, SrtStreamId } = validation;
|
15677
15849
|
const SocketConfiguration2 = import_react2.default.lazy(async () => {
|
15678
15850
|
const views = await Promise.resolve().then(() => (init_srt_form_views(), srt_form_views_exports));
|
15679
15851
|
return { default: views.SocketConfiguration };
|
@@ -15682,6 +15854,7 @@ function info_default3({ defineComponent, Av, validation }) {
|
|
15682
15854
|
identifier: "input.srt-caller",
|
15683
15855
|
category: "input",
|
15684
15856
|
name: "SRT Ingest (Caller)",
|
15857
|
+
description: "This component allows you to receive Secure Reliable Transport (SRT) streams by calling a remote SRT listener.",
|
15685
15858
|
subscription: {
|
15686
15859
|
accepts: void 0,
|
15687
15860
|
produces: {
|
@@ -15692,16 +15865,16 @@ function info_default3({ defineComponent, Av, validation }) {
|
|
15692
15865
|
display: (desc) => {
|
15693
15866
|
return {
|
15694
15867
|
port: desc.config.port.toString(),
|
15695
|
-
ip: desc.config.
|
15868
|
+
ip: desc.config.host
|
15696
15869
|
};
|
15697
15870
|
},
|
15698
15871
|
configForm: {
|
15699
15872
|
form: {
|
15700
15873
|
port: { help: "The port this SRT input will connect to", hint: { type: "numeric", validation: Port, defaultValue: 5001 } },
|
15701
|
-
|
15874
|
+
host: { help: "The IP address/hostname this SRT input will connect to", hint: { type: "text", validation: Hostname, defaultValue: "0.0.0.0" } },
|
15702
15875
|
sourceName: { help: "Source name to identify this by", hint: { type: "text", validation: SourceName, defaultValue: "camera1" } },
|
15703
|
-
passphrase: { help: "Optional: Authentication for this SRT input", hint: { type: "text", validation: SrtPassphrase } },
|
15704
|
-
streamId: { help: "Optional: StreamId to use when calling the remote listener", hint: { type: "text", validation: SrtStreamId } },
|
15876
|
+
passphrase: { help: "Optional: Authentication for this SRT input", hint: { type: "text", optional: true, validation: SrtPassphrase } },
|
15877
|
+
streamId: { help: "Optional: StreamId to use when calling the remote listener", hint: { type: "text", optional: true, validation: SrtStreamId } },
|
15705
15878
|
socketOptions: {
|
15706
15879
|
help: "Socket Options",
|
15707
15880
|
hint: {
|
@@ -15720,7 +15893,7 @@ var import_react3 = __toESM(require_react());
|
|
15720
15893
|
var InlineView4 = import_react3.default.lazy(async () => Promise.resolve().then(() => (init_inline_view2(), inline_view_exports2)));
|
15721
15894
|
var SummaryView4 = import_react3.default.lazy(async () => Promise.resolve().then(() => (init_summary_view2(), summary_view_exports2)));
|
15722
15895
|
function info_default4({ defineComponent, Av, validation }) {
|
15723
|
-
const { Z, Port,
|
15896
|
+
const { Z, Port, Hostname, SourceName, SrtPassphrase, unique } = validation;
|
15724
15897
|
const SocketConfiguration2 = import_react3.default.lazy(async () => {
|
15725
15898
|
const views = await Promise.resolve().then(() => (init_srt_form_views(), srt_form_views_exports));
|
15726
15899
|
return { default: views.SocketConfiguration };
|
@@ -15729,6 +15902,7 @@ function info_default4({ defineComponent, Av, validation }) {
|
|
15729
15902
|
identifier: "input.srt-listener",
|
15730
15903
|
category: "input",
|
15731
15904
|
name: "SRT Ingest (Listener)",
|
15905
|
+
description: "This component handles media ingest via the SRT(Secure Reliable Transport) protocol. It acts as a listener, receiving media streams from remote SRT sources and is highly configurable, allowing for custom IP addresses, ports, and stream handling behaviours.",
|
15732
15906
|
subscription: {
|
15733
15907
|
accepts: void 0,
|
15734
15908
|
produces: {
|
@@ -15749,7 +15923,7 @@ function info_default4({ defineComponent, Av, validation }) {
|
|
15749
15923
|
display: (desc) => {
|
15750
15924
|
return {
|
15751
15925
|
port: desc.config.port.toString(),
|
15752
|
-
ip: desc.config.
|
15926
|
+
ip: desc.config.host
|
15753
15927
|
};
|
15754
15928
|
},
|
15755
15929
|
runtime: {
|
@@ -15783,11 +15957,11 @@ function info_default4({ defineComponent, Av, validation }) {
|
|
15783
15957
|
envOverride: true
|
15784
15958
|
}
|
15785
15959
|
},
|
15786
|
-
|
15787
|
-
help: "The IP address this SRT input will listen on",
|
15960
|
+
host: {
|
15961
|
+
help: "The IP address/hostname this SRT input will listen on",
|
15788
15962
|
hint: {
|
15789
15963
|
type: "text",
|
15790
|
-
validation:
|
15964
|
+
validation: Hostname,
|
15791
15965
|
defaultValue: "0.0.0.0",
|
15792
15966
|
envOverride: true
|
15793
15967
|
}
|
@@ -15796,6 +15970,7 @@ function info_default4({ defineComponent, Av, validation }) {
|
|
15796
15970
|
help: "Optional: Authentication for this SRT input",
|
15797
15971
|
hint: {
|
15798
15972
|
type: "text",
|
15973
|
+
optional: true,
|
15799
15974
|
validation: SrtPassphrase,
|
15800
15975
|
envOverride: true
|
15801
15976
|
}
|
@@ -15837,11 +16012,12 @@ function assertUnreachable2(_) {
|
|
15837
16012
|
}
|
15838
16013
|
|
15839
16014
|
// build/input.udp-ts/info.js
|
15840
|
-
function info_default5({ defineComponent, Av, validation: { Z, Port,
|
16015
|
+
function info_default5({ defineComponent, Av, validation: { Z, Port, Hostname, SourceName, unique } }) {
|
15841
16016
|
return defineComponent({
|
15842
16017
|
identifier: "input.udp-ts",
|
15843
16018
|
category: "input",
|
15844
16019
|
name: "UDP TS ingest",
|
16020
|
+
description: "This component receives and processes MPEG Transport Streams (TS) over UDP.",
|
15845
16021
|
subscription: {
|
15846
16022
|
accepts: void 0,
|
15847
16023
|
produces: {
|
@@ -15852,15 +16028,15 @@ function info_default5({ defineComponent, Av, validation: { Z, Port, IpAddress,
|
|
15852
16028
|
display: (desc) => {
|
15853
16029
|
return {
|
15854
16030
|
port: desc.config.port.toString(),
|
15855
|
-
ip: desc.config.
|
16031
|
+
ip: desc.config.host
|
15856
16032
|
};
|
15857
16033
|
},
|
15858
16034
|
configForm: {
|
15859
16035
|
form: {
|
15860
16036
|
port: { help: "The receiving port", hint: { type: "numeric", validation: Port, defaultValue: 5001, global: unique("port") } },
|
15861
|
-
|
16037
|
+
host: { help: "The receiving IP address/hostname", hint: { type: "text", validation: Hostname, defaultValue: "127.0.0.1" } },
|
15862
16038
|
sourceName: { help: "Source name to identify this by", hint: { type: "text", validation: SourceName, defaultValue: "udp-ts", global: unique("sourceName") } },
|
15863
|
-
interface: { help: "Optional interface to bind to", hint: { type: "text", validation: Z.union([Z.string().min(2).max(32), Z.string().length(0)]).optional() } },
|
16039
|
+
interface: { help: "Optional interface to bind to", hint: { type: "text", optional: true, validation: Z.union([Z.string().min(2).max(32), Z.string().length(0)]).optional() } },
|
15864
16040
|
timeout: { help: "Timeout in milliseconds before determining the input is closed", hint: { type: "numeric", validation: Z.number().refine((value) => value > 0 && value < 6e5, "Timeout must be less than 10 minutes"), defaultValue: 1e3 } },
|
15865
16041
|
rtpDecapsulate: { help: "Whether to expect the input TS to be encapsulated in RTP via RFC 2250 (default: false)", hint: { type: "boolean" } }
|
15866
16042
|
}
|
@@ -15874,6 +16050,7 @@ function info_default6({ defineComponent, Video, validation: { SourceName }, com
|
|
15874
16050
|
identifier: "input.videoTestCard",
|
15875
16051
|
category: "input",
|
15876
16052
|
name: "Video Test Card",
|
16053
|
+
description: "The Video Test Card component generates a test card video stream with customizable settings.",
|
15877
16054
|
subscription: {
|
15878
16055
|
accepts: void 0,
|
15879
16056
|
produces: {
|
@@ -15911,9 +16088,11 @@ function info_default6({ defineComponent, Video, validation: { SourceName }, com
|
|
15911
16088
|
}
|
15912
16089
|
|
15913
16090
|
// build/output.autoCmaf/info.js
|
16091
|
+
var import_config = __toESM(require_config());
|
15914
16092
|
var import_react6 = __toESM(require_react());
|
15915
|
-
function info_default7(
|
15916
|
-
const
|
16093
|
+
function info_default7(R) {
|
16094
|
+
const { defineComponent, All, validation: { Z, Hostname } } = R;
|
16095
|
+
const SummaryView8 = import_react6.default.lazy(async () => Promise.resolve().then(() => (init_summary(), summary_exports)));
|
15917
16096
|
const FullscreenView2 = import_react6.default.lazy(async () => Promise.resolve().then(() => (init_fullscreen(), fullscreen_exports)));
|
15918
16097
|
const SegmentConfiguration2 = import_react6.default.lazy(async () => {
|
15919
16098
|
const views = await Promise.resolve().then(() => (init_form_views(), form_views_exports));
|
@@ -15927,6 +16106,7 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
15927
16106
|
identifier: "output.autoCmaf",
|
15928
16107
|
category: "output",
|
15929
16108
|
name: "Auto CMAF",
|
16109
|
+
description: "This component handles the creation of CMAF outputs from multiple video and audio streams.",
|
15930
16110
|
subscription: {
|
15931
16111
|
// Again, accept anything
|
15932
16112
|
// but reject the same stream twice
|
@@ -15941,6 +16121,32 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
15941
16121
|
if (audioStreams.length == 0) {
|
15942
16122
|
ctx.addError("AutoCMAF requires at least one audio stream");
|
15943
16123
|
}
|
16124
|
+
const uniqueVideoStreamNodes = ctx.subscriptions.reduce((acc, s) => {
|
16125
|
+
if (s.streams.select.includes("video")) {
|
16126
|
+
if (!acc.includes(s.source)) {
|
16127
|
+
acc.push(s.source);
|
16128
|
+
}
|
16129
|
+
}
|
16130
|
+
return acc;
|
16131
|
+
}, []);
|
16132
|
+
if (uniqueVideoStreamNodes.length > 1) {
|
16133
|
+
ctx.addWarning("More than one video source detected, did you mean to do this? (For example: Did you subscribe to both a source *and* a ladder?)");
|
16134
|
+
}
|
16135
|
+
if (ctx.config.drmProvider && ctx.config.__global) {
|
16136
|
+
if (ctx.config.drmProvider === "ezdrm") {
|
16137
|
+
if (!ctx.config.__global.ezdrmConfig?.token) {
|
16138
|
+
ctx.addError("Provide EZDRM token in global configuration");
|
16139
|
+
}
|
16140
|
+
}
|
16141
|
+
if (ctx.config.drmProvider === "axinom") {
|
16142
|
+
if (!ctx.config.__global.axinomConfig?.tenantId) {
|
16143
|
+
ctx.addError("Provide Axinom DRM Tenant ID in global configuration");
|
16144
|
+
}
|
16145
|
+
if (!ctx.config.__global.axinomConfig?.managementKey) {
|
16146
|
+
ctx.addError("Provide Axinom DRM Management Key in global configuration");
|
16147
|
+
}
|
16148
|
+
}
|
16149
|
+
}
|
15944
16150
|
},
|
15945
16151
|
display: (desc) => {
|
15946
16152
|
return {
|
@@ -15954,16 +16160,21 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
15954
16160
|
switch (evType) {
|
15955
16161
|
case "url-published":
|
15956
16162
|
state.url = ev.url;
|
16163
|
+
state.drmToken = ev.drmToken;
|
15957
16164
|
break;
|
15958
16165
|
default:
|
15959
16166
|
assertUnreachable3(evType);
|
15960
16167
|
}
|
15961
16168
|
return { ...state };
|
15962
16169
|
},
|
15963
|
-
summary:
|
16170
|
+
summary: SummaryView8,
|
15964
16171
|
fullscreen: FullscreenView2
|
15965
16172
|
},
|
15966
16173
|
configForm: {
|
16174
|
+
global: {
|
16175
|
+
ezdrmConfig: (0, import_config.GlobalEzDrmConfig)(R),
|
16176
|
+
axinomConfig: (0, import_config.GlobalAxinomConfig)(R)
|
16177
|
+
},
|
15967
16178
|
form: {
|
15968
16179
|
name: {
|
15969
16180
|
help: "The name of the multivariant/dash playlist",
|
@@ -16031,6 +16242,7 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
16031
16242
|
help: "How many segments back should a player start",
|
16032
16243
|
hint: {
|
16033
16244
|
type: "numeric",
|
16245
|
+
optional: true,
|
16034
16246
|
validation: Z.number().min(3).max(10).int().optional()
|
16035
16247
|
}
|
16036
16248
|
},
|
@@ -16038,6 +16250,7 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
16038
16250
|
help: "How many parts back should a player start",
|
16039
16251
|
hint: {
|
16040
16252
|
type: "numeric",
|
16253
|
+
optional: true,
|
16041
16254
|
validation: Z.number().min(3).max(10).int().optional()
|
16042
16255
|
}
|
16043
16256
|
}
|
@@ -16075,6 +16288,23 @@ function info_default7({ defineComponent, All, validation: { Z, Hostname } }) {
|
|
16075
16288
|
}
|
16076
16289
|
}
|
16077
16290
|
}
|
16291
|
+
},
|
16292
|
+
drmProvider: {
|
16293
|
+
help: "Encrypt with a DRM provider (if configured globally)",
|
16294
|
+
hint: {
|
16295
|
+
type: "select",
|
16296
|
+
optional: true,
|
16297
|
+
options: [
|
16298
|
+
{
|
16299
|
+
display: "EZDRM",
|
16300
|
+
value: "ezdrm"
|
16301
|
+
},
|
16302
|
+
{
|
16303
|
+
display: "Axinom DRM",
|
16304
|
+
value: "axinom"
|
16305
|
+
}
|
16306
|
+
]
|
16307
|
+
}
|
16078
16308
|
}
|
16079
16309
|
}
|
16080
16310
|
}
|
@@ -16086,14 +16316,15 @@ function assertUnreachable3(_) {
|
|
16086
16316
|
|
16087
16317
|
// build/output.preview/info.js
|
16088
16318
|
var import_react8 = __toESM(require_react());
|
16089
|
-
var
|
16319
|
+
var import_config2 = __toESM(require_config());
|
16090
16320
|
function info_default8(R) {
|
16091
16321
|
const { defineComponent, Av, validation: { JitterBuffer } } = R;
|
16092
|
-
const
|
16322
|
+
const InlineView15 = import_react8.default.lazy(async () => Promise.resolve().then(() => (init_inline_view3(), inline_view_exports3)));
|
16093
16323
|
return defineComponent({
|
16094
16324
|
identifier: "output.preview",
|
16095
16325
|
category: "output",
|
16096
16326
|
name: "Preview",
|
16327
|
+
description: "Preview allows for the real-time preview of media streams. It provides a way to visualize and monitor the output from various media sources before final processing or distribution.",
|
16097
16328
|
subscription: {
|
16098
16329
|
accepts: {
|
16099
16330
|
type: "single-stream",
|
@@ -16139,12 +16370,12 @@ function info_default8(R) {
|
|
16139
16370
|
}
|
16140
16371
|
return { ...state };
|
16141
16372
|
},
|
16142
|
-
inline:
|
16373
|
+
inline: InlineView15
|
16143
16374
|
},
|
16144
16375
|
configForm: {
|
16145
16376
|
global: {
|
16146
|
-
iceServers: (0,
|
16147
|
-
hardware: (0,
|
16377
|
+
iceServers: (0, import_config2.GlobalIceServers)(R),
|
16378
|
+
hardware: (0, import_config2.HardwareSelection)()
|
16148
16379
|
},
|
16149
16380
|
form: {
|
16150
16381
|
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: "numeric", validation: JitterBuffer, defaultValue: 500 } }
|
@@ -16159,11 +16390,12 @@ function assertUnreachable4(_) {
|
|
16159
16390
|
// build/output.rtmp/info.js
|
16160
16391
|
var import_react9 = __toESM(require_react());
|
16161
16392
|
function info_default9({ defineComponent, Av, validation: { Z, JitterBuffer } }) {
|
16162
|
-
const
|
16393
|
+
const InlineView15 = import_react9.default.lazy(async () => Promise.resolve().then(() => (init_inline_view4(), inline_view_exports4)));
|
16163
16394
|
return defineComponent({
|
16164
16395
|
identifier: "output.rtmp",
|
16165
16396
|
category: "output",
|
16166
16397
|
name: "RTMP Egest",
|
16398
|
+
description: "This component handles the output of RTMP (Real-Time Messaging Protocol) streams. It is used to connect to a remote RTMP server and manage the streaming of media. ",
|
16167
16399
|
subscription: {
|
16168
16400
|
// No validation?
|
16169
16401
|
// Accept either *just* audio, or *just* video, or audio *and* video
|
@@ -16197,7 +16429,7 @@ function info_default9({ defineComponent, Av, validation: { Z, JitterBuffer } })
|
|
16197
16429
|
}
|
16198
16430
|
return { ...state };
|
16199
16431
|
},
|
16200
|
-
inline:
|
16432
|
+
inline: InlineView15
|
16201
16433
|
},
|
16202
16434
|
configForm: {
|
16203
16435
|
form: {
|
@@ -16217,7 +16449,7 @@ function assertUnreachable5(_) {
|
|
16217
16449
|
var import_react10 = __toESM(require_react());
|
16218
16450
|
function info_default10(registration) {
|
16219
16451
|
const { defineComponent, All, validation } = registration;
|
16220
|
-
const { Port,
|
16452
|
+
const { Port, Hostname, JitterBuffer, SrtPassphrase, SrtStreamId } = validation;
|
16221
16453
|
const SocketConfiguration2 = import_react10.default.lazy(async () => {
|
16222
16454
|
const views = await Promise.resolve().then(() => (init_srt_form_views(), srt_form_views_exports));
|
16223
16455
|
return { default: views.SocketConfiguration };
|
@@ -16226,6 +16458,7 @@ function info_default10(registration) {
|
|
16226
16458
|
identifier: "output.srt",
|
16227
16459
|
category: "output",
|
16228
16460
|
name: "SRT Egest",
|
16461
|
+
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.",
|
16229
16462
|
subscription: {
|
16230
16463
|
// No validation?
|
16231
16464
|
// Streams have to be unique? That's a stretch goal
|
@@ -16237,7 +16470,7 @@ function info_default10(registration) {
|
|
16237
16470
|
display: (desc) => {
|
16238
16471
|
return {
|
16239
16472
|
port: desc.config.port?.toString() ?? "",
|
16240
|
-
|
16473
|
+
host: desc.config.host,
|
16241
16474
|
mode: desc.config.mode,
|
16242
16475
|
bufferDelayMs: desc.config.bufferDelayMs?.toString() ?? "none"
|
16243
16476
|
};
|
@@ -16257,7 +16490,7 @@ function info_default10(registration) {
|
|
16257
16490
|
}
|
16258
16491
|
}
|
16259
16492
|
},
|
16260
|
-
|
16493
|
+
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" } },
|
16261
16494
|
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: "numeric", validation: JitterBuffer, defaultValue: 500 } },
|
16262
16495
|
avDelayMs: { help: "How many milliseconds to delay A/V to account for subtitles/ancillary data", hint: { type: "numeric", validation: JitterBuffer, defaultValue: 50 } },
|
16263
16496
|
mode: {
|
@@ -16277,8 +16510,8 @@ function info_default10(registration) {
|
|
16277
16510
|
]
|
16278
16511
|
}
|
16279
16512
|
},
|
16280
|
-
passphrase: { help: "Optional: Authentication for this SRT output", hint: { type: "text", validation: SrtPassphrase } },
|
16281
|
-
streamId: { help: "Optional: StreamId to use when calling a remote listener", hint: { type: "text", validation: SrtStreamId } },
|
16513
|
+
passphrase: { help: "Optional: Authentication for this SRT output", hint: { type: "text", optional: true, validation: SrtPassphrase } },
|
16514
|
+
streamId: { help: "Optional: StreamId to use when calling a remote listener", hint: { type: "text", optional: true, validation: SrtStreamId } },
|
16282
16515
|
socketOptions: {
|
16283
16516
|
help: "Socket Options",
|
16284
16517
|
hint: {
|
@@ -16296,11 +16529,12 @@ function info_default10(registration) {
|
|
16296
16529
|
init_info();
|
16297
16530
|
|
16298
16531
|
// build/output.udpTs/info.js
|
16299
|
-
function info_default12({ defineComponent, All, validation: { Port,
|
16532
|
+
function info_default12({ defineComponent, All, validation: { Port, Hostname, JitterBuffer, Iface, Z } }) {
|
16300
16533
|
return defineComponent({
|
16301
16534
|
identifier: "output.udpTs",
|
16302
16535
|
category: "output",
|
16303
16536
|
name: "UDP TS Egest",
|
16537
|
+
description: "This component outputs multiple media streams over UDP in TS (Transport Stream) format. It accepts multiple input streams and sends them to a specified IP address and port.",
|
16304
16538
|
subscription: {
|
16305
16539
|
// Just works with no validation
|
16306
16540
|
// although uniqueness again, stretch goal
|
@@ -16312,7 +16546,7 @@ function info_default12({ defineComponent, All, validation: { Port, IpAddress, J
|
|
16312
16546
|
display: (desc) => {
|
16313
16547
|
return {
|
16314
16548
|
port: desc.config.port.toString(),
|
16315
|
-
destinationIp: desc.config.
|
16549
|
+
destinationIp: desc.config.destinationHost,
|
16316
16550
|
interface: desc.config.interface,
|
16317
16551
|
bufferDelayMs: desc.config.bufferDelayMs?.toString() ?? "none"
|
16318
16552
|
};
|
@@ -16320,7 +16554,7 @@ function info_default12({ defineComponent, All, validation: { Port, IpAddress, J
|
|
16320
16554
|
configForm: {
|
16321
16555
|
form: {
|
16322
16556
|
port: { help: "The port this UDP TS output will send to", hint: { type: "numeric", validation: Port, defaultValue: 8001 } },
|
16323
|
-
|
16557
|
+
destinationHost: { help: "The IP address/Hostname this UDP TS output will send to", hint: { type: "text", validation: Hostname, defaultValue: "127.0.0.1" } },
|
16324
16558
|
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: "numeric", validation: JitterBuffer, defaultValue: 500 } },
|
16325
16559
|
interface: { help: "Which interface to bind to for publishing", hint: { type: "text", validation: Z.union([Z.string().length(0), Iface]), defaultValue: "any" } }
|
16326
16560
|
}
|
@@ -16329,13 +16563,14 @@ function info_default12({ defineComponent, All, validation: { Port, IpAddress, J
|
|
16329
16563
|
}
|
16330
16564
|
|
16331
16565
|
// build/output.whep/info.js
|
16332
|
-
var
|
16566
|
+
var import_config3 = __toESM(require_config());
|
16333
16567
|
function info_default13(R) {
|
16334
16568
|
const { defineComponent, Av, validation: { JitterBuffer } } = R;
|
16335
16569
|
return defineComponent({
|
16336
16570
|
identifier: "output.whep",
|
16337
16571
|
category: "output",
|
16338
16572
|
name: "WHEP Egest",
|
16573
|
+
description: "This component allows us to use WebRTC egress for outputs.",
|
16339
16574
|
subscription: {
|
16340
16575
|
// No validation?
|
16341
16576
|
// Accept either *just* audio, or *just* video, or audio *and* video
|
@@ -16352,7 +16587,7 @@ function info_default13(R) {
|
|
16352
16587
|
},
|
16353
16588
|
configForm: {
|
16354
16589
|
global: {
|
16355
|
-
iceServers: (0,
|
16590
|
+
iceServers: (0, import_config3.GlobalIceServers)(R)
|
16356
16591
|
},
|
16357
16592
|
form: {
|
16358
16593
|
bufferDelayMs: { help: "How many milliseconds in the jitter buffer", hint: { type: "numeric", validation: JitterBuffer, defaultValue: 500 } }
|
@@ -16362,12 +16597,16 @@ function info_default13(R) {
|
|
16362
16597
|
}
|
16363
16598
|
|
16364
16599
|
// build/processor.browserOverlay/info.js
|
16365
|
-
var
|
16600
|
+
var import_config4 = __toESM(require_config());
|
16601
|
+
var import_react13 = __toESM(require_react());
|
16602
|
+
var SummaryView6 = import_react13.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
|
16603
|
+
var InlineView10 = import_react13.default.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
|
16366
16604
|
function info_default14({ defineComponent, Video, validation: { Z } }) {
|
16367
16605
|
return defineComponent({
|
16368
16606
|
identifier: "processor.browserOverlay",
|
16369
16607
|
category: "processor",
|
16370
16608
|
name: "Browser Overlay",
|
16609
|
+
description: "Capture a live URL and overlay onto a video",
|
16371
16610
|
subscription: {
|
16372
16611
|
// Only accept a single video stream
|
16373
16612
|
accepts: {
|
@@ -16384,12 +16623,33 @@ function info_default14({ defineComponent, Video, validation: { Z } }) {
|
|
16384
16623
|
},
|
16385
16624
|
display: (desc) => {
|
16386
16625
|
return {
|
16387
|
-
url: desc.config
|
16626
|
+
url: desc.config.url
|
16388
16627
|
};
|
16389
16628
|
},
|
16629
|
+
runtime: {
|
16630
|
+
summary: SummaryView6,
|
16631
|
+
inline: InlineView10,
|
16632
|
+
initialState: () => ({
|
16633
|
+
currentUrl: "",
|
16634
|
+
enabled: true
|
16635
|
+
}),
|
16636
|
+
handleEvent: (ev, state) => {
|
16637
|
+
const evType = ev.type;
|
16638
|
+
switch (evType) {
|
16639
|
+
case "url-changed":
|
16640
|
+
return { ...state, currentUrl: ev.url };
|
16641
|
+
case "enabled":
|
16642
|
+
return { ...state, enabled: true };
|
16643
|
+
case "disabled":
|
16644
|
+
return { ...state, enabled: false };
|
16645
|
+
default:
|
16646
|
+
assertUnreachable7(evType);
|
16647
|
+
}
|
16648
|
+
}
|
16649
|
+
},
|
16390
16650
|
configForm: {
|
16391
16651
|
global: {
|
16392
|
-
hardware: (0,
|
16652
|
+
hardware: (0, import_config4.HardwareSelection)()
|
16393
16653
|
},
|
16394
16654
|
form: {
|
16395
16655
|
url: { help: "URL to render on top of the video", hint: { type: "text", validation: Z.string().url(), defaultValue: "" } }
|
@@ -16397,15 +16657,19 @@ function info_default14({ defineComponent, Video, validation: { Z } }) {
|
|
16397
16657
|
}
|
16398
16658
|
});
|
16399
16659
|
}
|
16660
|
+
function assertUnreachable7(_) {
|
16661
|
+
throw new Error("Didn't expect to get here");
|
16662
|
+
}
|
16400
16663
|
|
16401
16664
|
// build/processor.cascadingSwitch/info.js
|
16402
|
-
function info_default15({ defineComponent, Av, React:
|
16403
|
-
const SourceSelection =
|
16404
|
-
const
|
16665
|
+
function info_default15({ defineComponent, Av, React: React15, common: { Resolutions, FrameRates } }) {
|
16666
|
+
const SourceSelection = React15.lazy(async () => Promise.resolve().then(() => (init_source_selection(), source_selection_exports)));
|
16667
|
+
const InlineView15 = React15.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
|
16405
16668
|
return defineComponent({
|
16406
16669
|
identifier: "processor.cascadingSwitch",
|
16407
16670
|
category: "processor",
|
16408
16671
|
name: "Cascading Switch",
|
16672
|
+
description: "This component manages multiple A/V (audio and video) sources based on priority, allowing for the configuration of settings such as resolution, frame rate, sample rate, and channel layout.",
|
16409
16673
|
subscription: {
|
16410
16674
|
// This needs to change anyway
|
16411
16675
|
// but it'll be the same as MCS
|
@@ -16479,12 +16743,12 @@ function info_default15({ defineComponent, Av, React: React14, common: { Resolut
|
|
16479
16743
|
state.availableSources.splice(state.availableSources.indexOf(ev.source), 1);
|
16480
16744
|
return { ...state };
|
16481
16745
|
default:
|
16482
|
-
|
16746
|
+
assertUnreachable8(evType);
|
16483
16747
|
}
|
16484
16748
|
},
|
16485
|
-
inline:
|
16486
|
-
summary:
|
16487
|
-
fullscreen:
|
16749
|
+
inline: InlineView15,
|
16750
|
+
summary: InlineView15,
|
16751
|
+
fullscreen: InlineView15
|
16488
16752
|
},
|
16489
16753
|
configForm: {
|
16490
16754
|
form: {
|
@@ -16530,98 +16794,22 @@ function info_default15({ defineComponent, Av, React: React14, common: { Resolut
|
|
16530
16794
|
}
|
16531
16795
|
});
|
16532
16796
|
}
|
16533
|
-
function assertUnreachable7(_) {
|
16534
|
-
throw new Error("Didn't expect to get here");
|
16535
|
-
}
|
16536
|
-
|
16537
|
-
// build/processor.dynamicBug/info.js
|
16538
|
-
var import_config4 = __toESM(require_config());
|
16539
|
-
var import_react15 = __toESM(require_react());
|
16540
|
-
function info_default16({ defineComponent, Video }) {
|
16541
|
-
const BugSelection2 = import_react15.default.lazy(async () => Promise.resolve().then(() => (init_bug_selection(), bug_selection_exports)));
|
16542
|
-
const SummaryView6 = import_react15.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
|
16543
|
-
return defineComponent({
|
16544
|
-
identifier: "processor.dynamicBug",
|
16545
|
-
category: "processor",
|
16546
|
-
name: "Dynamic Bug",
|
16547
|
-
description: "",
|
16548
|
-
subscription: {
|
16549
|
-
// Only accept a single video stream
|
16550
|
-
accepts: {
|
16551
|
-
type: "single-stream",
|
16552
|
-
media: Video
|
16553
|
-
},
|
16554
|
-
produces: {
|
16555
|
-
type: "single-stream",
|
16556
|
-
media: Video
|
16557
|
-
}
|
16558
|
-
},
|
16559
|
-
extraValidation: function(ctx) {
|
16560
|
-
ctx.requireVideo(1);
|
16561
|
-
},
|
16562
|
-
display: (desc) => {
|
16563
|
-
return {
|
16564
|
-
default: desc.config.initialBug ?? "none"
|
16565
|
-
};
|
16566
|
-
},
|
16567
|
-
runtime: {
|
16568
|
-
summary: SummaryView6,
|
16569
|
-
initialState: () => ({}),
|
16570
|
-
handleEvent: (ev, state) => {
|
16571
|
-
const evType = ev.type;
|
16572
|
-
switch (evType) {
|
16573
|
-
case "bug-changed":
|
16574
|
-
return { ...state, activeBug: { file: ev.file, position: ev.position } };
|
16575
|
-
default:
|
16576
|
-
assertUnreachable8(evType);
|
16577
|
-
}
|
16578
|
-
}
|
16579
|
-
},
|
16580
|
-
configForm: {
|
16581
|
-
global: {
|
16582
|
-
hardware: (0, import_config4.HardwareSelection)()
|
16583
|
-
},
|
16584
|
-
form: {
|
16585
|
-
initialBug: {
|
16586
|
-
help: "The initial bug to render on the video (if any)",
|
16587
|
-
hint: {
|
16588
|
-
type: "custom",
|
16589
|
-
optional: true,
|
16590
|
-
component: BugSelection2
|
16591
|
-
}
|
16592
|
-
},
|
16593
|
-
initialPosition: {
|
16594
|
-
help: "The initial location at which to render the bug",
|
16595
|
-
hint: {
|
16596
|
-
type: "select",
|
16597
|
-
optional: true,
|
16598
|
-
options: [
|
16599
|
-
{ value: "topleft", display: "Top Left" },
|
16600
|
-
{ value: "topright", display: "Top Right" },
|
16601
|
-
{ value: "bottomleft", display: "Bottom Left" },
|
16602
|
-
{ value: "bottomright", display: "Bottom Right" }
|
16603
|
-
]
|
16604
|
-
}
|
16605
|
-
}
|
16606
|
-
}
|
16607
|
-
}
|
16608
|
-
});
|
16609
|
-
}
|
16610
16797
|
function assertUnreachable8(_) {
|
16611
16798
|
throw new Error("Didn't expect to get here");
|
16612
16799
|
}
|
16613
16800
|
|
16614
16801
|
// build/processor.fixedLadder/info.js
|
16615
|
-
var
|
16802
|
+
var import_react16 = __toESM(require_react());
|
16616
16803
|
var import_config5 = __toESM(require_config());
|
16617
|
-
function
|
16618
|
-
const RungView =
|
16619
|
-
const CodecEditor3 =
|
16620
|
-
const CodecView =
|
16804
|
+
function info_default16({ defineComponent, Video }) {
|
16805
|
+
const RungView = import_react16.default.lazy(async () => Promise.resolve().then(() => (init_rung_view(), rung_view_exports)));
|
16806
|
+
const CodecEditor3 = import_react16.default.lazy(async () => Promise.resolve().then(() => (init_codec_editor(), codec_editor_exports)));
|
16807
|
+
const CodecView = import_react16.default.lazy(async () => Promise.resolve().then(() => (init_codec_view(), codec_view_exports)));
|
16621
16808
|
return defineComponent({
|
16622
16809
|
identifier: "processor.fixedLadder",
|
16623
16810
|
category: "processor",
|
16624
16811
|
name: "Encode Ladder",
|
16812
|
+
description: "The Fixed Ladder Encoder is a processor component for encoding a single input video stream into multiple encoded renditions. It creates an encoding ladder, where each `rung` represents a different quality level or rendition of the original video, typically varying in resolution and bitrate.",
|
16625
16813
|
subscription: {
|
16626
16814
|
// Only accept a single video stream
|
16627
16815
|
accepts: {
|
@@ -16937,12 +17125,90 @@ function assertUnreachable9(_) {
|
|
16937
17125
|
throw new Error("Didn't expect to get here");
|
16938
17126
|
}
|
16939
17127
|
|
17128
|
+
// build/processor.onscreenGraphic/info.js
|
17129
|
+
var import_config6 = __toESM(require_config());
|
17130
|
+
var import_react19 = __toESM(require_react());
|
17131
|
+
function info_default17({ defineComponent, Video }) {
|
17132
|
+
const GraphicSelection2 = import_react19.default.lazy(async () => Promise.resolve().then(() => (init_image_selection(), image_selection_exports)));
|
17133
|
+
const SummaryView8 = import_react19.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
|
17134
|
+
return defineComponent({
|
17135
|
+
identifier: "processor.onscreenGraphic",
|
17136
|
+
category: "processor",
|
17137
|
+
name: "Onscreen Graphic",
|
17138
|
+
description: "Overlay graphics onto a video",
|
17139
|
+
subscription: {
|
17140
|
+
// Only accept a single video stream
|
17141
|
+
accepts: {
|
17142
|
+
type: "single-stream",
|
17143
|
+
media: Video
|
17144
|
+
},
|
17145
|
+
produces: {
|
17146
|
+
type: "single-stream",
|
17147
|
+
media: Video
|
17148
|
+
}
|
17149
|
+
},
|
17150
|
+
extraValidation: function(ctx) {
|
17151
|
+
ctx.requireVideo(1);
|
17152
|
+
},
|
17153
|
+
display: (desc) => {
|
17154
|
+
return {
|
17155
|
+
default: desc.config.initialGraphic ?? "none"
|
17156
|
+
};
|
17157
|
+
},
|
17158
|
+
runtime: {
|
17159
|
+
summary: SummaryView8,
|
17160
|
+
initialState: () => ({}),
|
17161
|
+
handleEvent: (ev, state) => {
|
17162
|
+
const evType = ev.type;
|
17163
|
+
switch (evType) {
|
17164
|
+
case "graphic-changed":
|
17165
|
+
return { ...state, activeGraphic: { file: ev.file, position: ev.position } };
|
17166
|
+
default:
|
17167
|
+
assertUnreachable10(evType);
|
17168
|
+
}
|
17169
|
+
}
|
17170
|
+
},
|
17171
|
+
configForm: {
|
17172
|
+
global: {
|
17173
|
+
hardware: (0, import_config6.HardwareSelection)()
|
17174
|
+
},
|
17175
|
+
form: {
|
17176
|
+
initialGraphic: {
|
17177
|
+
help: "The initial graphic to render on the video (if any)",
|
17178
|
+
hint: {
|
17179
|
+
type: "custom",
|
17180
|
+
optional: true,
|
17181
|
+
component: GraphicSelection2
|
17182
|
+
}
|
17183
|
+
},
|
17184
|
+
initialPosition: {
|
17185
|
+
help: "The initial location at which to render the graphic",
|
17186
|
+
hint: {
|
17187
|
+
type: "select",
|
17188
|
+
optional: true,
|
17189
|
+
options: [
|
17190
|
+
{ value: "topleft", display: "Top Left" },
|
17191
|
+
{ value: "topright", display: "Top Right" },
|
17192
|
+
{ value: "bottomleft", display: "Bottom Left" },
|
17193
|
+
{ value: "bottomright", display: "Bottom Right" }
|
17194
|
+
]
|
17195
|
+
}
|
17196
|
+
}
|
17197
|
+
}
|
17198
|
+
}
|
17199
|
+
});
|
17200
|
+
}
|
17201
|
+
function assertUnreachable10(_) {
|
17202
|
+
throw new Error("Didn't expect to get here");
|
17203
|
+
}
|
17204
|
+
|
16940
17205
|
// build/processor.whisper-transcribe/info.js
|
16941
17206
|
function info_default18({ defineComponent, Av, Subtitle, validation: { Z } }) {
|
16942
17207
|
return defineComponent({
|
16943
17208
|
identifier: "processor.whisper-transcribe",
|
16944
17209
|
category: "processor",
|
16945
17210
|
name: "Whisper Transcribe",
|
17211
|
+
description: "This component transcribes audio from a video stream.",
|
16946
17212
|
subscription: {
|
16947
17213
|
accepts: {
|
16948
17214
|
type: "single-stream",
|
@@ -16972,23 +17238,24 @@ function info_default18({ defineComponent, Av, Subtitle, validation: { Z } }) {
|
|
16972
17238
|
configForm: {
|
16973
17239
|
form: {
|
16974
17240
|
model: { help: "The ggml model path", hint: { type: "text", validation: Z.string().min(1, "Choosing a model is mandatory") } },
|
16975
|
-
translate: { help: "Whether to translate the output to English", hint: { type: "boolean", defaultValue: false } },
|
16976
|
-
language: { help: "Source language (otherwise automatic)", hint: { type: "text", validation: Z.union([Z.string().length(0), Z.string().min(1)]) } }
|
17241
|
+
translate: { help: "Whether to translate the output to English", hint: { type: "boolean", optional: true, defaultValue: false } },
|
17242
|
+
language: { help: "Source language (otherwise automatic)", hint: { type: "text", optional: true, validation: Z.union([Z.string().length(0), Z.string().min(1)]) } }
|
16977
17243
|
}
|
16978
17244
|
}
|
16979
17245
|
});
|
16980
17246
|
}
|
16981
17247
|
|
16982
17248
|
// build/util.stats.latency/info.js
|
16983
|
-
var
|
17249
|
+
var import_react21 = __toESM(require_react());
|
16984
17250
|
function info_default19(R) {
|
16985
17251
|
const { defineComponent } = R;
|
16986
|
-
const
|
16987
|
-
const SourceNodeSelection2 =
|
17252
|
+
const InlineView15 = import_react21.default.lazy(async () => Promise.resolve().then(() => (init_inline_view8(), inline_view_exports8)));
|
17253
|
+
const SourceNodeSelection2 = import_react21.default.lazy(async () => Promise.resolve().then(() => (init_source_node_selection(), source_node_selection_exports)));
|
16988
17254
|
return defineComponent({
|
16989
17255
|
identifier: "util.stats.latency",
|
16990
17256
|
category: "output",
|
16991
17257
|
name: "Latency Probe",
|
17258
|
+
description: "This component tracks and processes latency statistics within a media processing pipeline.",
|
16992
17259
|
subscription: {
|
16993
17260
|
accepts: void 0,
|
16994
17261
|
produces: void 0
|
@@ -17011,11 +17278,11 @@ function info_default19(R) {
|
|
17011
17278
|
break;
|
17012
17279
|
}
|
17013
17280
|
default:
|
17014
|
-
|
17281
|
+
assertUnreachable11(evType);
|
17015
17282
|
}
|
17016
17283
|
return { ...state };
|
17017
17284
|
},
|
17018
|
-
inline:
|
17285
|
+
inline: InlineView15
|
17019
17286
|
},
|
17020
17287
|
configForm: {
|
17021
17288
|
form: {
|
@@ -17065,19 +17332,20 @@ function info_default19(R) {
|
|
17065
17332
|
}
|
17066
17333
|
});
|
17067
17334
|
}
|
17068
|
-
function
|
17335
|
+
function assertUnreachable11(_) {
|
17069
17336
|
throw new Error("Didn't expect to get here");
|
17070
17337
|
}
|
17071
17338
|
|
17072
17339
|
// build/util.stats.ma35d/info.js
|
17073
|
-
var
|
17340
|
+
var import_react23 = __toESM(require_react());
|
17074
17341
|
function info_default20(R) {
|
17075
17342
|
const { defineComponent } = R;
|
17076
|
-
const
|
17343
|
+
const InlineView15 = import_react23.default.lazy(async () => Promise.resolve().then(() => (init_inline_view9(), inline_view_exports9)));
|
17077
17344
|
return defineComponent({
|
17078
17345
|
identifier: "util.stats.ma35d",
|
17079
17346
|
category: "output",
|
17080
17347
|
name: "MA35D Stats",
|
17348
|
+
description: "Tracks and processes statistics for the AMD MA35D processor which is used for the encoding, scaling and decoding of media.",
|
17081
17349
|
subscription: {
|
17082
17350
|
accepts: void 0,
|
17083
17351
|
produces: void 0
|
@@ -17106,30 +17374,31 @@ function info_default20(R) {
|
|
17106
17374
|
break;
|
17107
17375
|
}
|
17108
17376
|
default:
|
17109
|
-
|
17377
|
+
assertUnreachable12(evType);
|
17110
17378
|
}
|
17111
17379
|
return { ...state };
|
17112
17380
|
},
|
17113
|
-
inline:
|
17381
|
+
inline: InlineView15
|
17114
17382
|
},
|
17115
17383
|
configForm: {
|
17116
17384
|
form: {}
|
17117
17385
|
}
|
17118
17386
|
});
|
17119
17387
|
}
|
17120
|
-
function
|
17388
|
+
function assertUnreachable12(_) {
|
17121
17389
|
throw new Error("Didn't expect to get here");
|
17122
17390
|
}
|
17123
17391
|
|
17124
17392
|
// build/util.timestamps/info.js
|
17125
|
-
var
|
17393
|
+
var import_react25 = __toESM(require_react());
|
17126
17394
|
function info_default21(R) {
|
17127
17395
|
const { defineComponent, All } = R;
|
17128
|
-
const
|
17396
|
+
const InlineView15 = import_react25.default.lazy(async () => Promise.resolve().then(() => (init_inline_view10(), inline_view_exports10)));
|
17129
17397
|
return defineComponent({
|
17130
17398
|
identifier: "util.timestamps",
|
17131
17399
|
category: "output",
|
17132
17400
|
name: "Jitter",
|
17401
|
+
description: "A jitter utility which processes and tracks timestamps.",
|
17133
17402
|
subscription: {
|
17134
17403
|
accepts: {
|
17135
17404
|
type: "multi-stream",
|
@@ -17160,18 +17429,18 @@ function info_default21(R) {
|
|
17160
17429
|
break;
|
17161
17430
|
}
|
17162
17431
|
default:
|
17163
|
-
|
17432
|
+
assertUnreachable13(evType);
|
17164
17433
|
}
|
17165
17434
|
return { ...state };
|
17166
17435
|
},
|
17167
|
-
inline:
|
17436
|
+
inline: InlineView15
|
17168
17437
|
},
|
17169
17438
|
configForm: {
|
17170
17439
|
form: {}
|
17171
17440
|
}
|
17172
17441
|
});
|
17173
17442
|
}
|
17174
|
-
function
|
17443
|
+
function assertUnreachable13(_) {
|
17175
17444
|
throw new Error("Didn't expect to get here");
|
17176
17445
|
}
|
17177
17446
|
|