@norskvideo/norsk-studio-built-ins 1.15.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 +571 -302
- package/client/style.css +321 -112
- 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/info.js +3 -3
- package/lib/processor.onscreenGraphic/info.js.map +1 -1
- package/lib/processor.onscreenGraphic/runtime.js +54 -106
- package/lib/processor.onscreenGraphic/runtime.js.map +1 -1
- package/lib/processor.onscreenGraphic/summary-view.js +1 -1
- package/lib/processor.onscreenGraphic/summary-view.js.map +1 -1
- package/lib/processor.onscreenGraphic/types.d.ts +239 -1
- package/lib/processor.onscreenGraphic/types.yaml +142 -5
- 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/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/client/info.js
CHANGED
@@ -172,123 +172,30 @@ var init_summary_view2 = __esm({
|
|
172
172
|
}
|
173
173
|
});
|
174
174
|
|
175
|
-
//
|
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
|
-
// node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js
|
175
|
+
// ../../node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js
|
277
176
|
var require_shared_views = __commonJS({
|
278
|
-
"node_modules/@norskvideo/norsk-studio/lib/shared/shared-views.js"(exports) {
|
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
|
|
289
|
-
// node_modules/@norskvideo/norsk-studio/lib/shared/config.js
|
196
|
+
// ../../node_modules/@norskvideo/norsk-studio/lib/shared/config.js
|
290
197
|
var require_config = __commonJS({
|
291
|
-
"node_modules/@norskvideo/norsk-studio/lib/shared/config.js"(exports) {
|
198
|
+
"../../node_modules/@norskvideo/norsk-studio/lib/shared/config.js"(exports) {
|
292
199
|
"use strict";
|
293
200
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
294
201
|
if (k2 === void 0)
|
@@ -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,33 +779,33 @@ 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;
|
643
809
|
}
|
644
810
|
});
|
645
811
|
|
@@ -649,13 +815,13 @@ __export(rung_view_exports, {
|
|
649
815
|
default: () => rung_view_default
|
650
816
|
});
|
651
817
|
function rung_view_default(rung) {
|
652
|
-
return (0,
|
818
|
+
return (0, import_jsx_runtime16.jsx)("div", { className: "text-gray-900 dark:text-white", children: rung.name });
|
653
819
|
}
|
654
|
-
var
|
820
|
+
var import_jsx_runtime16;
|
655
821
|
var init_rung_view = __esm({
|
656
822
|
"build/processor.fixedLadder/rung-view.js"() {
|
657
823
|
"use strict";
|
658
|
-
|
824
|
+
import_jsx_runtime16 = __toESM(require_jsx_runtime());
|
659
825
|
}
|
660
826
|
});
|
661
827
|
|
@@ -665,20 +831,20 @@ __export(codec_editor_exports, {
|
|
665
831
|
default: () => CodecEditor
|
666
832
|
});
|
667
833
|
function CodecEditor(props) {
|
668
|
-
(0,
|
834
|
+
(0, import_react15.useEffect)(() => {
|
669
835
|
if (props.defaultValue)
|
670
836
|
props.onChanged(props.defaultValue);
|
671
837
|
}, [props.defaultValue]);
|
672
|
-
const textAreaRef = (0,
|
673
|
-
const [value, setValue] = (0,
|
674
|
-
(0,
|
838
|
+
const textAreaRef = (0, import_react15.useRef)(null);
|
839
|
+
const [value, setValue] = (0, import_react15.useState)(props.defaultValue);
|
840
|
+
(0, import_react15.useEffect)(() => {
|
675
841
|
if (textAreaRef.current) {
|
676
842
|
const target = textAreaRef.current;
|
677
843
|
target.style.height = "";
|
678
844
|
target.style.height = target.scrollHeight + "px";
|
679
845
|
}
|
680
846
|
}, []);
|
681
|
-
return (0,
|
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) => {
|
682
848
|
const target = e.currentTarget;
|
683
849
|
try {
|
684
850
|
const codec = JSON.parse(target.value);
|
@@ -688,12 +854,12 @@ function CodecEditor(props) {
|
|
688
854
|
}
|
689
855
|
}, defaultValue: JSON.stringify(value, void 0, 2) });
|
690
856
|
}
|
691
|
-
var
|
857
|
+
var import_jsx_runtime17, import_react15;
|
692
858
|
var init_codec_editor = __esm({
|
693
859
|
"build/processor.fixedLadder/codec-editor.js"() {
|
694
860
|
"use strict";
|
695
|
-
|
696
|
-
|
861
|
+
import_jsx_runtime17 = __toESM(require_jsx_runtime());
|
862
|
+
import_react15 = __toESM(require_react());
|
697
863
|
}
|
698
864
|
});
|
699
865
|
|
@@ -703,13 +869,13 @@ __export(codec_view_exports, {
|
|
703
869
|
default: () => CodecEditor2
|
704
870
|
});
|
705
871
|
function CodecEditor2(props) {
|
706
|
-
return (0,
|
872
|
+
return (0, import_jsx_runtime18.jsxs)("div", { className: "text-gray-900 dark:text-white", children: [props.width, "x", props.height] });
|
707
873
|
}
|
708
|
-
var
|
874
|
+
var import_jsx_runtime18;
|
709
875
|
var init_codec_view = __esm({
|
710
876
|
"build/processor.fixedLadder/codec-view.js"() {
|
711
877
|
"use strict";
|
712
|
-
|
878
|
+
import_jsx_runtime18 = __toESM(require_jsx_runtime());
|
713
879
|
}
|
714
880
|
});
|
715
881
|
|
@@ -719,8 +885,8 @@ __export(image_selection_exports, {
|
|
719
885
|
default: () => image_selection_default
|
720
886
|
});
|
721
887
|
function GraphicSelection(props) {
|
722
|
-
const [loading, setLoading] = (0,
|
723
|
-
(0,
|
888
|
+
const [loading, setLoading] = (0, import_react17.useState)(true);
|
889
|
+
(0, import_react17.useEffect)(() => {
|
724
890
|
const fn = async () => {
|
725
891
|
const result2 = await fetch("components/processor.onscreenGraphic/graphics");
|
726
892
|
if (result2.ok && result2.body) {
|
@@ -736,46 +902,46 @@ function GraphicSelection(props) {
|
|
736
902
|
};
|
737
903
|
fn().catch(console.error);
|
738
904
|
}, []);
|
739
|
-
const [graphcs, setGraphics] = (0,
|
905
|
+
const [graphcs, setGraphics] = (0, import_react17.useState)([]);
|
740
906
|
if (loading) {
|
741
|
-
return (0,
|
907
|
+
return (0, import_jsx_runtime19.jsx)("div", { children: "Loading.." });
|
742
908
|
}
|
743
909
|
if (graphcs.length == 0) {
|
744
|
-
return (0,
|
910
|
+
return (0, import_jsx_runtime19.jsx)("div", { children: "No graphics loaded" });
|
745
911
|
}
|
746
|
-
return (0,
|
747
|
-
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);
|
748
914
|
})] }) });
|
749
915
|
function myOnChange(e) {
|
750
916
|
props.onChanged(e.target.value);
|
751
917
|
}
|
752
918
|
}
|
753
|
-
var
|
919
|
+
var import_jsx_runtime19, import_react17, image_selection_default;
|
754
920
|
var init_image_selection = __esm({
|
755
921
|
"build/processor.onscreenGraphic/image-selection.js"() {
|
756
922
|
"use strict";
|
757
|
-
|
758
|
-
|
923
|
+
import_jsx_runtime19 = __toESM(require_jsx_runtime());
|
924
|
+
import_react17 = __toESM(require_react());
|
759
925
|
image_selection_default = GraphicSelection;
|
760
926
|
}
|
761
927
|
});
|
762
928
|
|
763
929
|
// build/processor.onscreenGraphic/summary-view.js
|
764
|
-
var
|
765
|
-
__export(
|
766
|
-
default: () =>
|
930
|
+
var summary_view_exports4 = {};
|
931
|
+
__export(summary_view_exports4, {
|
932
|
+
default: () => summary_view_default4
|
767
933
|
});
|
768
|
-
function
|
769
|
-
const [graphic, setGraphic] = (0,
|
770
|
-
const [position, setPosition] = (0,
|
771
|
-
const [graphics, setGraphics] = (0,
|
772
|
-
const [fileToUpload, setFileToUpload] = (0,
|
773
|
-
const [showFileInput, setShowFileInput] = (0,
|
774
|
-
const [showUploadButton, setShowUploadButton] = (0,
|
775
|
-
const [uploadStatus, setUploadStatus] = (0,
|
776
|
-
const [showDeleteDropdown, setShowDeleteDropdown] = (0,
|
777
|
-
const [graphicToDelete, setGraphicToDelete] = (0,
|
778
|
-
const updateGraphics = (0,
|
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 () => {
|
779
945
|
try {
|
780
946
|
const result2 = await fetch(`${urls.componentUrl}/graphics`);
|
781
947
|
if (result2.ok) {
|
@@ -792,7 +958,7 @@ function SummaryView5({ state, sendCommand, urls }) {
|
|
792
958
|
});
|
793
959
|
}
|
794
960
|
}, [urls.componentUrl]);
|
795
|
-
(0,
|
961
|
+
(0, import_react18.useEffect)(() => {
|
796
962
|
updateGraphics().catch(console.error);
|
797
963
|
}, [updateGraphics]);
|
798
964
|
const onFileChange = (e) => {
|
@@ -877,15 +1043,15 @@ function SummaryView5({ state, sendCommand, urls }) {
|
|
877
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";
|
878
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";
|
879
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";
|
880
|
-
return (0,
|
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 })] });
|
881
1047
|
}
|
882
|
-
var
|
883
|
-
var
|
1048
|
+
var import_jsx_runtime20, import_react18, summary_view_default4;
|
1049
|
+
var init_summary_view4 = __esm({
|
884
1050
|
"build/processor.onscreenGraphic/summary-view.js"() {
|
885
1051
|
"use strict";
|
886
|
-
|
887
|
-
|
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,21 +16794,22 @@ function info_default15({ defineComponent, Av, React: React14, common: { Resolut
|
|
16530
16794
|
}
|
16531
16795
|
});
|
16532
16796
|
}
|
16533
|
-
function
|
16797
|
+
function assertUnreachable8(_) {
|
16534
16798
|
throw new Error("Didn't expect to get here");
|
16535
16799
|
}
|
16536
16800
|
|
16537
16801
|
// build/processor.fixedLadder/info.js
|
16538
|
-
var
|
16539
|
-
var
|
16802
|
+
var import_react16 = __toESM(require_react());
|
16803
|
+
var import_config5 = __toESM(require_config());
|
16540
16804
|
function info_default16({ defineComponent, Video }) {
|
16541
|
-
const RungView =
|
16542
|
-
const CodecEditor3 =
|
16543
|
-
const CodecView =
|
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)));
|
16544
16808
|
return defineComponent({
|
16545
16809
|
identifier: "processor.fixedLadder",
|
16546
16810
|
category: "processor",
|
16547
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.",
|
16548
16813
|
subscription: {
|
16549
16814
|
// Only accept a single video stream
|
16550
16815
|
accepts: {
|
@@ -16580,7 +16845,7 @@ function info_default16({ defineComponent, Video }) {
|
|
16580
16845
|
},
|
16581
16846
|
configForm: {
|
16582
16847
|
global: {
|
16583
|
-
hardware: (0,
|
16848
|
+
hardware: (0, import_config5.HardwareSelection)()
|
16584
16849
|
},
|
16585
16850
|
form: {
|
16586
16851
|
rungs: {
|
@@ -16702,7 +16967,7 @@ function createSoftwareRung(rung) {
|
|
16702
16967
|
case "h264_320x180":
|
16703
16968
|
return createRungImpl({ name: rung, threads: 1, bitrate: 800 });
|
16704
16969
|
default:
|
16705
|
-
return
|
16970
|
+
return assertUnreachable9(rung);
|
16706
16971
|
}
|
16707
16972
|
}
|
16708
16973
|
function createMa35dRung(rung) {
|
@@ -16716,7 +16981,7 @@ function createMa35dRung(rung) {
|
|
16716
16981
|
case "h264_320x180":
|
16717
16982
|
return createMa35DH264RungImpl({ name: rung, bitrate: 1e3 });
|
16718
16983
|
default:
|
16719
|
-
return
|
16984
|
+
return assertUnreachable9(rung);
|
16720
16985
|
}
|
16721
16986
|
}
|
16722
16987
|
function createNvidiaRung(rung) {
|
@@ -16730,7 +16995,7 @@ function createNvidiaRung(rung) {
|
|
16730
16995
|
case "h264_320x180":
|
16731
16996
|
return createNvidiaRungImpl({ name: rung, bitrate: 8e5 });
|
16732
16997
|
default:
|
16733
|
-
return
|
16998
|
+
return assertUnreachable9(rung);
|
16734
16999
|
}
|
16735
17000
|
}
|
16736
17001
|
function createQuadraRung(rung) {
|
@@ -16744,7 +17009,7 @@ function createQuadraRung(rung) {
|
|
16744
17009
|
case "h264_320x180":
|
16745
17010
|
return createQuadraRungImpl({ name: rung, bitrate: 8e5 });
|
16746
17011
|
default:
|
16747
|
-
return
|
17012
|
+
return assertUnreachable9(rung);
|
16748
17013
|
}
|
16749
17014
|
}
|
16750
17015
|
function createLoganRung(rung) {
|
@@ -16758,7 +17023,7 @@ function createLoganRung(rung) {
|
|
16758
17023
|
case "h264_320x180":
|
16759
17024
|
return createLoganRungImpl({ name: rung, bitrate: 8e5 });
|
16760
17025
|
default:
|
16761
|
-
return
|
17026
|
+
return assertUnreachable9(rung);
|
16762
17027
|
}
|
16763
17028
|
}
|
16764
17029
|
function createRungImpl({ name, threads, bitrate }) {
|
@@ -16856,21 +17121,21 @@ function rungWidth(rungName) {
|
|
16856
17121
|
function rungHeight(rungName) {
|
16857
17122
|
return parseInt(rungName.split("_")[1].split(`x`)[1]);
|
16858
17123
|
}
|
16859
|
-
function
|
17124
|
+
function assertUnreachable9(_) {
|
16860
17125
|
throw new Error("Didn't expect to get here");
|
16861
17126
|
}
|
16862
17127
|
|
16863
17128
|
// build/processor.onscreenGraphic/info.js
|
16864
|
-
var
|
16865
|
-
var
|
17129
|
+
var import_config6 = __toESM(require_config());
|
17130
|
+
var import_react19 = __toESM(require_react());
|
16866
17131
|
function info_default17({ defineComponent, Video }) {
|
16867
|
-
const GraphicSelection2 =
|
16868
|
-
const
|
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)));
|
16869
17134
|
return defineComponent({
|
16870
17135
|
identifier: "processor.onscreenGraphic",
|
16871
17136
|
category: "processor",
|
16872
17137
|
name: "Onscreen Graphic",
|
16873
|
-
description: "",
|
17138
|
+
description: "Overlay graphics onto a video",
|
16874
17139
|
subscription: {
|
16875
17140
|
// Only accept a single video stream
|
16876
17141
|
accepts: {
|
@@ -16891,7 +17156,7 @@ function info_default17({ defineComponent, Video }) {
|
|
16891
17156
|
};
|
16892
17157
|
},
|
16893
17158
|
runtime: {
|
16894
|
-
summary:
|
17159
|
+
summary: SummaryView8,
|
16895
17160
|
initialState: () => ({}),
|
16896
17161
|
handleEvent: (ev, state) => {
|
16897
17162
|
const evType = ev.type;
|
@@ -16899,13 +17164,13 @@ function info_default17({ defineComponent, Video }) {
|
|
16899
17164
|
case "graphic-changed":
|
16900
17165
|
return { ...state, activeGraphic: { file: ev.file, position: ev.position } };
|
16901
17166
|
default:
|
16902
|
-
|
17167
|
+
assertUnreachable10(evType);
|
16903
17168
|
}
|
16904
17169
|
}
|
16905
17170
|
},
|
16906
17171
|
configForm: {
|
16907
17172
|
global: {
|
16908
|
-
hardware: (0,
|
17173
|
+
hardware: (0, import_config6.HardwareSelection)()
|
16909
17174
|
},
|
16910
17175
|
form: {
|
16911
17176
|
initialGraphic: {
|
@@ -16933,7 +17198,7 @@ function info_default17({ defineComponent, Video }) {
|
|
16933
17198
|
}
|
16934
17199
|
});
|
16935
17200
|
}
|
16936
|
-
function
|
17201
|
+
function assertUnreachable10(_) {
|
16937
17202
|
throw new Error("Didn't expect to get here");
|
16938
17203
|
}
|
16939
17204
|
|
@@ -16943,6 +17208,7 @@ function info_default18({ defineComponent, Av, Subtitle, validation: { Z } }) {
|
|
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
|
|