@norskvideo/norsk-studio-built-ins 1.27.0-2025-04-01-fb49b69d → 1.27.0-2025-04-04-1ee9db09
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/client/info.js +60 -118
- package/client/output.preview/styles.css +4 -3
- package/client/output.whep/styles.css +3 -1
- package/client/style.css +52 -42
- package/lib/output.autoCmaf/runtime.js +1 -0
- package/lib/output.autoCmaf/runtime.js.map +1 -1
- package/lib/output.preview/inline-view.js +16 -24
- package/lib/output.preview/inline-view.js.map +1 -1
- package/lib/output.preview/runtime.js +1 -0
- package/lib/output.preview/runtime.js.map +1 -1
- package/lib/output.whep/inline-view.js +1 -1
- package/lib/output.whep/inline-view.js.map +1 -1
- package/lib/output.whep/runtime.js +1 -0
- package/lib/output.whep/runtime.js.map +1 -1
- package/lib/processor.browserOverlay/runtime.js +3 -1
- package/lib/processor.browserOverlay/runtime.js.map +1 -1
- package/lib/processor.fixedLadder/info.d.ts +0 -12
- package/lib/processor.fixedLadder/info.js +0 -77
- package/lib/processor.fixedLadder/info.js.map +1 -1
- package/lib/processor.fixedLadder/runtime.d.ts +1 -3
- package/lib/processor.fixedLadder/runtime.js.map +1 -1
- package/lib/processor.fixedLadder/types.d.ts +1 -118
- package/lib/processor.fixedLadder/types.yaml +3 -287
- package/lib/processor.makeProgram/info.js +7 -4
- package/lib/processor.makeProgram/info.js.map +1 -1
- package/lib/processor.makeProgram/runtime.js +2 -2
- package/lib/processor.makeProgram/runtime.js.map +1 -1
- package/lib/processor.onscreenGraphic/runtime.js +3 -1
- package/lib/processor.onscreenGraphic/runtime.js.map +1 -1
- package/lib/shared/srt-caller-metrics.js +1 -1
- package/lib/shared/srt-caller-metrics.js.map +1 -1
- package/lib/shared/srt-listener-metrics.js +3 -3
- package/lib/shared/srt-listener-metrics.js.map +1 -1
- package/lib/shared/stream-statistics-view.js +5 -7
- package/lib/shared/stream-statistics-view.js.map +1 -1
- package/lib/test/auto-cmaf.js +3 -3
- package/lib/test/auto-cmaf.js.map +1 -1
- package/lib/test/browser-overlay.js +3 -3
- package/lib/test/browser-overlay.js.map +1 -1
- package/lib/test/cascading-switch.js +4 -4
- package/lib/test/cascading-switch.js.map +1 -1
- package/lib/test/fixed-ladder.js +3 -3
- package/lib/test/fixed-ladder.js.map +1 -1
- package/lib/test/multiview.js +8 -8
- package/lib/test/multiview.js.map +1 -1
- package/lib/test/onscreen-graphic.js +9 -9
- package/lib/test/onscreen-graphic.js.map +1 -1
- package/lib/test/preview.js +1 -1
- package/lib/test/preview.js.map +1 -1
- package/lib/test/rtmp-input.js +8 -8
- package/lib/test/rtmp-input.js.map +1 -1
- package/lib/test/rtmp-output.js +10 -10
- package/lib/test/rtmp-output.js.map +1 -1
- package/lib/test/srt-input-caller.js +1 -1
- package/lib/test/srt-input-caller.js.map +1 -1
- package/lib/test/srt-input-listener.js +12 -12
- package/lib/test/srt-input-listener.js.map +1 -1
- package/lib/test/srt-output-caller.js +3 -3
- package/lib/test/srt-output-caller.js.map +1 -1
- package/lib/test/srt-output-listener.js +3 -3
- package/lib/test/srt-output-listener.js.map +1 -1
- package/lib/test/udp-output.js +1 -1
- package/lib/test/udp-output.js.map +1 -1
- package/lib/test/whep-output.js +142 -208
- package/lib/test/whep-output.js.map +1 -1
- package/package.json +9 -9
package/client/info.js
CHANGED
@@ -345,6 +345,8 @@ var require_util = __commonJS({
|
|
345
345
|
exports.shortStreamNameFromFilter = shortStreamNameFromFilter;
|
346
346
|
exports.streamNameFromDefinition = streamNameFromDefinition;
|
347
347
|
exports.streamNameFromFilter = streamNameFromFilter;
|
348
|
+
exports.missingFeaturePacks = missingFeaturePacks;
|
349
|
+
exports.describeFeaturePacks = describeFeaturePacks;
|
348
350
|
function baseUrl(env, websocket) {
|
349
351
|
const guess = new URL(window.location.origin);
|
350
352
|
const base = env.studioUrlPrefix ? new URL(env.studioUrlPrefix, guess) : guess;
|
@@ -491,6 +493,26 @@ var require_util = __commonJS({
|
|
491
493
|
components.push(s.renditionName.toString());
|
492
494
|
return components.join("-");
|
493
495
|
}
|
496
|
+
function missingFeaturePacks(featurePacks, preconnect) {
|
497
|
+
if (featurePacks) {
|
498
|
+
const packs = preconnect?.license?.activeFeaturePacks;
|
499
|
+
if (packs !== void 0 && !packs.includes("ALL")) {
|
500
|
+
if (!featurePacks.some((pack) => packs.includes(pack)))
|
501
|
+
return true;
|
502
|
+
}
|
503
|
+
}
|
504
|
+
return false;
|
505
|
+
}
|
506
|
+
function describeFeaturePacks(featurePacks) {
|
507
|
+
const packs = featurePacks.map((pack) => JSON.stringify(pack));
|
508
|
+
if (featurePacks.length > 2) {
|
509
|
+
return `${packs.slice(0, -1).join(", ")}, or ${packs.at(-1)}`;
|
510
|
+
} else if (featurePacks.length) {
|
511
|
+
return `${packs.join(" or ")}`;
|
512
|
+
} else {
|
513
|
+
return `"ALL"`;
|
514
|
+
}
|
515
|
+
}
|
494
516
|
}
|
495
517
|
});
|
496
518
|
|
@@ -712,10 +734,8 @@ var require_config = __commonJS({
|
|
712
734
|
type: "select",
|
713
735
|
optional: true,
|
714
736
|
options: [
|
715
|
-
{ value: "
|
716
|
-
{ value: "
|
717
|
-
{ value: "nvidia", display: "Nvidia" },
|
718
|
-
{ value: "logan", display: "Logan" }
|
737
|
+
{ value: "quadra", display: "NETINT Quadra" },
|
738
|
+
{ value: "nvidia", display: "NVIDIA" }
|
719
739
|
]
|
720
740
|
}
|
721
741
|
}
|
@@ -5377,6 +5397,7 @@ var require_client_types = __commonJS({
|
|
5377
5397
|
help: "Advanced stream mapping for this input",
|
5378
5398
|
hint: {
|
5379
5399
|
type: "custom-form",
|
5400
|
+
optional: true,
|
5380
5401
|
form: (0, advanced_stream_mapping_1.advancedStreamMappingEditor)(defaultValue, data),
|
5381
5402
|
view: (0, advanced_stream_mapping_1.advancedStreamMappingView)(defaultValue)
|
5382
5403
|
}
|
@@ -5952,7 +5973,7 @@ var import_FaPhone = __toESM(require_FaPhone());
|
|
5952
5973
|
// build/shared/srt-caller-metrics.js
|
5953
5974
|
var import_jsx_runtime4 = __toESM(require_jsx_runtime());
|
5954
5975
|
function MetricsView({ state }) {
|
5955
|
-
return (0, import_jsx_runtime4.jsxs)("div", { className: "srt-output", children: [(0, import_jsx_runtime4.jsx)("
|
5976
|
+
return (0, import_jsx_runtime4.jsxs)("div", { className: "srt-output", children: [(0, import_jsx_runtime4.jsx)("h4", { className: "font-bold dark:text-white text-black", children: "SRT Packets" }), state.enabled || state.enabled === void 0 ? (0, import_jsx_runtime4.jsx)("div", { children: state.metrics.connectionCount == 0 ? (0, import_jsx_runtime4.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "Not Connected" }) : (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [(0, import_jsx_runtime4.jsx)("div", { className: "active text-green-500 dark:text-green-300", children: "Component Enabled" }), state.metrics.packetsSent >= 0 ? (0, import_jsx_runtime4.jsxs)("div", { children: ["Sent: ", state.metrics.packetsSent] }) : (0, import_jsx_runtime4.jsxs)("div", { children: ["Received: ", state.metrics.packetsReceived] }), (0, import_jsx_runtime4.jsxs)("div", { children: ["Lost/Retransmitted: ", state.metrics.packetsLost, "/", state.metrics.packetsResent] })] }) }) : (0, import_jsx_runtime4.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Component disabled" })] });
|
5956
5977
|
}
|
5957
5978
|
|
5958
5979
|
// build/shared/stream-statistics-view.js
|
@@ -20494,10 +20515,10 @@ function MetricsView2({ metrics, config, global, charting }) {
|
|
20494
20515
|
const allBitrates = metrics[config.id].filter((v) => v.name == "norsk_measured_bitrate").sort((l, r) => displayStreamKey(l.streamKey).localeCompare(displayStreamKey(r.streamKey)));
|
20495
20516
|
const createInitialDataset = (label, color2, initialValue) => ({
|
20496
20517
|
label,
|
20497
|
-
data:
|
20498
|
-
x:
|
20518
|
+
data: [{
|
20519
|
+
x: 0,
|
20499
20520
|
y: initialValue
|
20500
|
-
}
|
20521
|
+
}],
|
20501
20522
|
borderColor: color2,
|
20502
20523
|
backgroundColor: "transparent",
|
20503
20524
|
borderWidth: 2,
|
@@ -20518,7 +20539,7 @@ function MetricsView2({ metrics, config, global, charting }) {
|
|
20518
20539
|
};
|
20519
20540
|
});
|
20520
20541
|
});
|
20521
|
-
return (0, import_jsx_runtime5.jsxs)(
|
20542
|
+
return (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-2", children: [(0, import_jsx_runtime5.jsx)("h4", { className: "font-bold dark:text-white text-black", children: "Measured Bitrates" }), (0, import_jsx_runtime5.jsx)("div", { className: "py-2 dark:px-2 dark:bg-gray-900 rounded-lg dark:border dark:border-gray-600 flex justify-center items-center", children: (0, import_jsx_runtime5.jsx)(Line, { className: "w-fit max-w-fit", width: 272, options: cpuChartOptions, data: bitrates }) })] });
|
20522
20543
|
}
|
20523
20544
|
|
20524
20545
|
// build/input.srt-caller/inline-view.js
|
@@ -20687,8 +20708,8 @@ var import_FaHeadphones = __toESM(require_FaHeadphones());
|
|
20687
20708
|
// build/shared/srt-listener-metrics.js
|
20688
20709
|
var import_jsx_runtime9 = __toESM(require_jsx_runtime());
|
20689
20710
|
function MetricsView3({ state }) {
|
20690
|
-
return (0, import_jsx_runtime9.jsxs)("div", { className: "srt-output", children: [(0, import_jsx_runtime9.jsx)("
|
20691
|
-
return (0, import_jsx_runtime9.jsxs)("div", { className: "
|
20711
|
+
return (0, import_jsx_runtime9.jsxs)("div", { className: "srt-output space-y-2", children: [(0, import_jsx_runtime9.jsx)("h4", { className: "font-bold dark:text-white text-black", children: "SRT Packets" }), state.enabled === void 0 || state.enabled ? state.metrics.connectionCount == 0 ? (0, import_jsx_runtime9.jsx)("div", { className: "active text-red-300 dark:text-red-300", children: "No connections" }) : (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: (0, import_jsx_runtime9.jsx)("div", { className: "p-2 flex flex-col gap-2 border border-gray-200 dark:border-gray-700", children: (state.metrics.packetsSent.length == 0 ? state.metrics.packetsReceived : state.metrics.packetsSent).map((p, i) => {
|
20712
|
+
return (0, import_jsx_runtime9.jsxs)("div", { className: "grid grid-cols-2", children: [(0, import_jsx_runtime9.jsx)("dt", { className: "font-medium", children: "Connection" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.names?.[i] ?? i }), (0, import_jsx_runtime9.jsx)("dt", { className: "font-medium", children: state.metrics.packetsSent.length == 0 ? "Received" : "Sent" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: p }), (0, import_jsx_runtime9.jsx)("dt", { className: "font-medium", children: "Retransmitted" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.metrics.packetsResent[i] }), (0, import_jsx_runtime9.jsx)("dt", { className: "font-medium", children: "Lost" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.metrics.packetsLost[i] })] }, i);
|
20692
20713
|
}) }) }) : (0, import_jsx_runtime9.jsx)("div", { className: "disabled text-gray-500 dark:text-gray-400", children: "Component disabled" })] });
|
20693
20714
|
}
|
20694
20715
|
|
@@ -21556,43 +21577,35 @@ function InlineView6({ state, config, raise }) {
|
|
21556
21577
|
video.remove();
|
21557
21578
|
});
|
21558
21579
|
};
|
21559
|
-
const [
|
21560
|
-
(0, import_react3.useEffect)(() => {
|
21561
|
-
const container = document.getElementById(`preview-${id}`) ?? void 0;
|
21562
|
-
if (!container)
|
21563
|
-
return;
|
21564
|
-
container.innerHTML = "";
|
21565
|
-
if (loadedImage) {
|
21566
|
-
container.appendChild(loadedImage);
|
21567
|
-
}
|
21568
|
-
}, [loadedImage]);
|
21580
|
+
const [imageUrl, setImageUrl] = (0, import_react3.useState)(null);
|
21569
21581
|
(0, import_react3.useEffect)(() => {
|
21570
21582
|
if (!url || !showPreview) {
|
21571
21583
|
if (client) {
|
21572
21584
|
cleanupClient(client);
|
21573
21585
|
setClient(null);
|
21574
21586
|
}
|
21587
|
+
setImageUrl(null);
|
21575
21588
|
return;
|
21576
21589
|
}
|
21577
21590
|
if (config.previewMode == "image") {
|
21578
|
-
|
21579
|
-
|
21580
|
-
|
21581
|
-
|
21582
|
-
|
21583
|
-
img.height = 236;
|
21584
|
-
img.onload = () => {
|
21585
|
-
setLoadedImage(img);
|
21586
|
-
};
|
21587
|
-
img.src = url;
|
21591
|
+
if (client) {
|
21592
|
+
cleanupClient(client);
|
21593
|
+
setClient(null);
|
21594
|
+
}
|
21595
|
+
setImageUrl(url);
|
21588
21596
|
} else {
|
21597
|
+
setImageUrl(null);
|
21598
|
+
const container = document.getElementById(`preview-${id}`);
|
21599
|
+
if (container) {
|
21600
|
+
container.innerHTML = "";
|
21601
|
+
}
|
21589
21602
|
const newClient = createClient(url);
|
21590
21603
|
setClient(newClient);
|
21591
21604
|
return () => {
|
21592
21605
|
cleanupClient(newClient);
|
21593
21606
|
};
|
21594
21607
|
}
|
21595
|
-
}, [
|
21608
|
+
}, [url, showPreview, config.previewMode, id]);
|
21596
21609
|
(0, import_react3.useEffect)(() => {
|
21597
21610
|
setShowPreview(config.showPreview ?? true);
|
21598
21611
|
}, [config.showPreview]);
|
@@ -21608,9 +21621,9 @@ function InlineView6({ state, config, raise }) {
|
|
21608
21621
|
const snapped = Math.floor(capped * 10) * 10;
|
21609
21622
|
return Math.max(0, 100 - snapped);
|
21610
21623
|
}
|
21611
|
-
return (0, import_jsx_runtime17.jsxs)("div", { className: "preview-outer-container", children: [(0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2
|
21612
|
-
|
21613
|
-
|
21624
|
+
return (0, import_jsx_runtime17.jsxs)("div", { className: "preview-outer-container", children: [(0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2", children: [(0, import_jsx_runtime17.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime17.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-stretch h-full", children: [showPreview ? (0, import_jsx_runtime17.jsxs)("div", { className: "preview-video", id: `preview-${id}`, children: [imageUrl && (0, import_jsx_runtime17.jsx)("img", { src: imageUrl, width: 420, height: 236, alt: "Preview" }), (0, import_jsx_runtime17.jsx)("style", { children: `
|
21625
|
+
#preview-${id} video::-webkit-media-controls-play-button { display: none; },
|
21626
|
+
` })] }) : (0, import_jsx_runtime17.jsx)("div", { className: "preview-video bg-black flex items-center justify-center text-white h-full py-4", children: "Preview turned off" }), (0, import_jsx_runtime17.jsx)("div", { className: "preview-levels", children: (0, import_jsx_runtime17.jsx)("div", { className: `preview-level clip-${percentage(state.levels)}-preview` }) })] })] });
|
21614
21627
|
}
|
21615
21628
|
var inline_view_default6 = InlineView6;
|
21616
21629
|
|
@@ -22181,7 +22194,7 @@ function InlineView11({ state, config, raise }) {
|
|
22181
22194
|
display: none;
|
22182
22195
|
}
|
22183
22196
|
`;
|
22184
|
-
return (0, import_jsx_runtime24.jsxs)("div", { className: "whep-container", children: [(0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2
|
22197
|
+
return (0, import_jsx_runtime24.jsxs)("div", { className: "whep-container", children: [(0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [(0, import_jsx_runtime24.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime24.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), (0, import_jsx_runtime24.jsx)("div", { className: "flex items-stretch h-full", children: showPreview ? (0, import_jsx_runtime24.jsx)("div", { className: "whep-video", id: `whep-${id}`, children: (0, import_jsx_runtime24.jsx)("style", { children: videoStyles }) }) : (0, import_jsx_runtime24.jsx)("div", { className: "whep-video bg-black flex items-center justify-center text-white h-full py-4", children: "Preview turned off" }) })] });
|
22185
22198
|
}
|
22186
22199
|
var inline_view_default11 = InlineView11;
|
22187
22200
|
|
@@ -22835,9 +22848,7 @@ function info_default23({ defineComponent, common: { FrameRates } }) {
|
|
22835
22848
|
name: x.name,
|
22836
22849
|
software: createRungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e3, threads: 4 }),
|
22837
22850
|
quadra: createQuadraRungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e6 }),
|
22838
|
-
|
22839
|
-
nvidia: createNvidiaRungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e6 }),
|
22840
|
-
ma35d: createMa35DH264RungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e6 })
|
22851
|
+
nvidia: createNvidiaRungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e6 })
|
22841
22852
|
})
|
22842
22853
|
},
|
22843
22854
|
form: {
|
@@ -22850,9 +22861,7 @@ function info_default23({ defineComponent, common: { FrameRates } }) {
|
|
22850
22861
|
},
|
22851
22862
|
software: rungEditorForm("software"),
|
22852
22863
|
quadra: rungEditorForm("quadra"),
|
22853
|
-
|
22854
|
-
nvidia: rungEditorForm("nvidia"),
|
22855
|
-
ma35d: rungEditorForm("ma35d")
|
22864
|
+
nvidia: rungEditorForm("nvidia")
|
22856
22865
|
},
|
22857
22866
|
view: rung_view_default,
|
22858
22867
|
defaultValue: rungNames.map((n) => {
|
@@ -22860,9 +22869,7 @@ function info_default23({ defineComponent, common: { FrameRates } }) {
|
|
22860
22869
|
name: n,
|
22861
22870
|
software: createSoftwareRung(n),
|
22862
22871
|
quadra: createQuadraRung(n),
|
22863
|
-
|
22864
|
-
nvidia: createNvidiaRung(n),
|
22865
|
-
ma35d: createMa35dRung(n)
|
22872
|
+
nvidia: createNvidiaRung(n)
|
22866
22873
|
};
|
22867
22874
|
})
|
22868
22875
|
}
|
@@ -22934,20 +22941,6 @@ function createSoftwareRung(rung) {
|
|
22934
22941
|
return assertUnreachable14(rung);
|
22935
22942
|
}
|
22936
22943
|
}
|
22937
|
-
function createMa35dRung(rung) {
|
22938
|
-
switch (rung) {
|
22939
|
-
case "h264_1920x1080":
|
22940
|
-
return createMa35DHevcRungImpl({ name: rung, bitrate: 1e4 });
|
22941
|
-
case "h264_1280x720":
|
22942
|
-
return createMa35DH264RungImpl({ name: rung, bitrate: 5e3 });
|
22943
|
-
case "h264_640x360":
|
22944
|
-
return createMa35DH264RungImpl({ name: rung, bitrate: 2e3 });
|
22945
|
-
case "h264_320x180":
|
22946
|
-
return createMa35DH264RungImpl({ name: rung, bitrate: 1e3 });
|
22947
|
-
default:
|
22948
|
-
return assertUnreachable14(rung);
|
22949
|
-
}
|
22950
|
-
}
|
22951
22944
|
function createNvidiaRung(rung) {
|
22952
22945
|
switch (rung) {
|
22953
22946
|
case "h264_1920x1080":
|
@@ -22976,20 +22969,6 @@ function createQuadraRung(rung) {
|
|
22976
22969
|
return assertUnreachable14(rung);
|
22977
22970
|
}
|
22978
22971
|
}
|
22979
|
-
function createLoganRung(rung) {
|
22980
|
-
switch (rung) {
|
22981
|
-
case "h264_1920x1080":
|
22982
|
-
return createLoganRungImpl({ name: rung, bitrate: 5e6 });
|
22983
|
-
case "h264_1280x720":
|
22984
|
-
return createLoganRungImpl({ name: rung, bitrate: 25e5 });
|
22985
|
-
case "h264_640x360":
|
22986
|
-
return createLoganRungImpl({ name: rung, bitrate: 1e6 });
|
22987
|
-
case "h264_320x180":
|
22988
|
-
return createLoganRungImpl({ name: rung, bitrate: 8e5 });
|
22989
|
-
default:
|
22990
|
-
return assertUnreachable14(rung);
|
22991
|
-
}
|
22992
|
-
}
|
22993
22972
|
function createRungImpl({ name, threads, bitrate }) {
|
22994
22973
|
const codec = {
|
22995
22974
|
type: "x264",
|
@@ -23012,34 +22991,6 @@ function createRungImpl({ name, threads, bitrate }) {
|
|
23012
22991
|
frameRate: { frames: 25, seconds: 1 }
|
23013
22992
|
};
|
23014
22993
|
}
|
23015
|
-
function createMa35DHevcRungImpl({ name, bitrate }) {
|
23016
|
-
const codec = {
|
23017
|
-
type: "amdMA35D-hevc",
|
23018
|
-
profile: "main",
|
23019
|
-
rateControl: { mode: "cbr", bitrate },
|
23020
|
-
gopSize: 50
|
23021
|
-
};
|
23022
|
-
return {
|
23023
|
-
width: rungWidth(name),
|
23024
|
-
height: rungHeight(name),
|
23025
|
-
codec,
|
23026
|
-
frameRate: { frames: 25, seconds: 1 }
|
23027
|
-
};
|
23028
|
-
}
|
23029
|
-
function createMa35DH264RungImpl({ name, bitrate }) {
|
23030
|
-
const codec = {
|
23031
|
-
type: "amdMA35D-h264",
|
23032
|
-
profile: "main",
|
23033
|
-
rateControl: { mode: "cbr", bitrate },
|
23034
|
-
gopSize: 50
|
23035
|
-
};
|
23036
|
-
return {
|
23037
|
-
width: rungWidth(name),
|
23038
|
-
height: rungHeight(name),
|
23039
|
-
codec,
|
23040
|
-
frameRate: { frames: 25, seconds: 1 }
|
23041
|
-
};
|
23042
|
-
}
|
23043
22994
|
function createQuadraRungImpl({ name, bitrate }) {
|
23044
22995
|
const codec = {
|
23045
22996
|
type: "quadra-h264",
|
@@ -23053,19 +23004,6 @@ function createQuadraRungImpl({ name, bitrate }) {
|
|
23053
23004
|
frameRate: { frames: 25, seconds: 1 }
|
23054
23005
|
};
|
23055
23006
|
}
|
23056
|
-
function createLoganRungImpl({ name, bitrate }) {
|
23057
|
-
const codec = {
|
23058
|
-
type: "logan-h264",
|
23059
|
-
intraPeriod: 50,
|
23060
|
-
bitrate
|
23061
|
-
};
|
23062
|
-
return {
|
23063
|
-
width: rungWidth(name),
|
23064
|
-
height: rungHeight(name),
|
23065
|
-
codec,
|
23066
|
-
frameRate: { frames: 25, seconds: 1 }
|
23067
|
-
};
|
23068
|
-
}
|
23069
23007
|
function createNvidiaRungImpl({ name, bitrate }) {
|
23070
23008
|
const codec = {
|
23071
23009
|
type: "nv-h264",
|
@@ -23113,7 +23051,7 @@ function info_default24({ defineComponent, All, validation: { Z } }) {
|
|
23113
23051
|
return inputs?.map((s, i) => {
|
23114
23052
|
const output = { ...s };
|
23115
23053
|
output.programNumber = cfg.programNumber;
|
23116
|
-
output.sourceName = cfg.sourceName;
|
23054
|
+
output.sourceName = cfg.sourceName ? cfg.sourceName : cfg.id;
|
23117
23055
|
output.streamId = cfg.startingStreamId + i;
|
23118
23056
|
if (cfg.renditionName)
|
23119
23057
|
output.renditionName = cfg.renditionName;
|
@@ -23138,14 +23076,17 @@ function info_default24({ defineComponent, All, validation: { Z } }) {
|
|
23138
23076
|
form: {
|
23139
23077
|
sourceName: {
|
23140
23078
|
help: "Source name for the new program",
|
23079
|
+
advanced: true,
|
23141
23080
|
hint: {
|
23142
23081
|
type: "text",
|
23143
|
-
optional:
|
23144
|
-
defaultValue: "
|
23082
|
+
optional: true,
|
23083
|
+
defaultValue: ""
|
23084
|
+
// we'll manually default to 'id'
|
23145
23085
|
}
|
23146
23086
|
},
|
23147
23087
|
programNumber: {
|
23148
23088
|
help: "Program number for the new program",
|
23089
|
+
advanced: true,
|
23149
23090
|
hint: {
|
23150
23091
|
type: "numeric",
|
23151
23092
|
optional: false,
|
@@ -23154,7 +23095,7 @@ function info_default24({ defineComponent, All, validation: { Z } }) {
|
|
23154
23095
|
}
|
23155
23096
|
},
|
23156
23097
|
startingStreamId: {
|
23157
|
-
help: "The
|
23098
|
+
help: "The initial stream id to assign, all streams will then increment from this",
|
23158
23099
|
hint: {
|
23159
23100
|
type: "numeric",
|
23160
23101
|
optional: true,
|
@@ -23164,6 +23105,7 @@ function info_default24({ defineComponent, All, validation: { Z } }) {
|
|
23164
23105
|
},
|
23165
23106
|
renditionName: {
|
23166
23107
|
help: "The rendition name for each stream",
|
23108
|
+
advanced: true,
|
23167
23109
|
hint: {
|
23168
23110
|
type: "text",
|
23169
23111
|
defaultValue: "default",
|
@@ -1,6 +1,8 @@
|
|
1
1
|
.preview-outer-container {
|
2
|
-
height: 237px;
|
3
2
|
width: 450px;
|
3
|
+
display: flex;
|
4
|
+
flex-direction: column;
|
5
|
+
gap: 8px;
|
4
6
|
}
|
5
7
|
|
6
8
|
.preview-video {
|
@@ -12,14 +14,13 @@
|
|
12
14
|
}
|
13
15
|
|
14
16
|
.preview-levels {
|
15
|
-
height: 100%;
|
16
17
|
width: 30px;
|
17
18
|
background-color: #333;
|
18
19
|
border-radius: 2px;
|
19
20
|
display: flex;
|
20
21
|
flex-direction: row;
|
21
22
|
padding: 4px 3px;
|
22
|
-
margin:
|
23
|
+
margin: 0px;
|
23
24
|
margin-top: 0px;
|
24
25
|
}
|
25
26
|
|
package/client/style.css
CHANGED
@@ -48,69 +48,41 @@
|
|
48
48
|
--tw-drop-shadow: ;
|
49
49
|
}
|
50
50
|
|
51
|
-
.\!container {
|
52
|
-
width: 100% !important;
|
53
|
-
}
|
54
|
-
|
55
51
|
.container {
|
56
52
|
width: 100%;
|
57
53
|
}
|
58
54
|
|
59
55
|
@media (min-width: 300px) {
|
60
|
-
.\!container {
|
61
|
-
max-width: 300px !important;
|
62
|
-
}
|
63
|
-
|
64
56
|
.container {
|
65
57
|
max-width: 300px;
|
66
58
|
}
|
67
59
|
}
|
68
60
|
|
69
61
|
@media (min-width: 640px) {
|
70
|
-
.\!container {
|
71
|
-
max-width: 640px !important;
|
72
|
-
}
|
73
|
-
|
74
62
|
.container {
|
75
63
|
max-width: 640px;
|
76
64
|
}
|
77
65
|
}
|
78
66
|
|
79
67
|
@media (min-width: 768px) {
|
80
|
-
.\!container {
|
81
|
-
max-width: 768px !important;
|
82
|
-
}
|
83
|
-
|
84
68
|
.container {
|
85
69
|
max-width: 768px;
|
86
70
|
}
|
87
71
|
}
|
88
72
|
|
89
73
|
@media (min-width: 1024px) {
|
90
|
-
.\!container {
|
91
|
-
max-width: 1024px !important;
|
92
|
-
}
|
93
|
-
|
94
74
|
.container {
|
95
75
|
max-width: 1024px;
|
96
76
|
}
|
97
77
|
}
|
98
78
|
|
99
79
|
@media (min-width: 1280px) {
|
100
|
-
.\!container {
|
101
|
-
max-width: 1280px !important;
|
102
|
-
}
|
103
|
-
|
104
80
|
.container {
|
105
81
|
max-width: 1280px;
|
106
82
|
}
|
107
83
|
}
|
108
84
|
|
109
85
|
@media (min-width: 1536px) {
|
110
|
-
.\!container {
|
111
|
-
max-width: 1536px !important;
|
112
|
-
}
|
113
|
-
|
114
86
|
.container {
|
115
87
|
max-width: 1536px;
|
116
88
|
}
|
@@ -298,10 +270,20 @@
|
|
298
270
|
width: 16rem;
|
299
271
|
}
|
300
272
|
|
273
|
+
.w-fit {
|
274
|
+
width: -moz-fit-content;
|
275
|
+
width: fit-content;
|
276
|
+
}
|
277
|
+
|
301
278
|
.w-full {
|
302
279
|
width: 100%;
|
303
280
|
}
|
304
281
|
|
282
|
+
.max-w-fit {
|
283
|
+
max-width: -moz-fit-content;
|
284
|
+
max-width: fit-content;
|
285
|
+
}
|
286
|
+
|
305
287
|
.max-w-lg {
|
306
288
|
max-width: 32rem;
|
307
289
|
}
|
@@ -334,6 +316,10 @@
|
|
334
316
|
grid-auto-flow: row dense;
|
335
317
|
}
|
336
318
|
|
319
|
+
.grid-cols-2 {
|
320
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
321
|
+
}
|
322
|
+
|
337
323
|
.grid-cols-3 {
|
338
324
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
339
325
|
}
|
@@ -358,6 +344,10 @@
|
|
358
344
|
align-items: center;
|
359
345
|
}
|
360
346
|
|
347
|
+
.items-stretch {
|
348
|
+
align-items: stretch;
|
349
|
+
}
|
350
|
+
|
361
351
|
.justify-center {
|
362
352
|
justify-content: center;
|
363
353
|
}
|
@@ -392,12 +382,6 @@
|
|
392
382
|
margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
|
393
383
|
}
|
394
384
|
|
395
|
-
.divide-y > :not([hidden]) ~ :not([hidden]) {
|
396
|
-
--tw-divide-y-reverse: 0;
|
397
|
-
border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
|
398
|
-
border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
|
399
|
-
}
|
400
|
-
|
401
385
|
.truncate {
|
402
386
|
overflow: hidden;
|
403
387
|
text-overflow: ellipsis;
|
@@ -444,6 +428,11 @@
|
|
444
428
|
border-width: 1px;
|
445
429
|
}
|
446
430
|
|
431
|
+
.border-gray-200 {
|
432
|
+
--tw-border-opacity: 1;
|
433
|
+
border-color: rgb(229 231 235 / var(--tw-border-opacity));
|
434
|
+
}
|
435
|
+
|
447
436
|
.border-gray-300 {
|
448
437
|
--tw-border-opacity: 1;
|
449
438
|
border-color: rgb(209 213 219 / var(--tw-border-opacity));
|
@@ -554,11 +543,21 @@
|
|
554
543
|
padding-bottom: 0.25rem;
|
555
544
|
}
|
556
545
|
|
546
|
+
.py-2 {
|
547
|
+
padding-top: 0.5rem;
|
548
|
+
padding-bottom: 0.5rem;
|
549
|
+
}
|
550
|
+
|
557
551
|
.py-2\.5 {
|
558
552
|
padding-top: 0.625rem;
|
559
553
|
padding-bottom: 0.625rem;
|
560
554
|
}
|
561
555
|
|
556
|
+
.py-4 {
|
557
|
+
padding-top: 1rem;
|
558
|
+
padding-bottom: 1rem;
|
559
|
+
}
|
560
|
+
|
562
561
|
.text-center {
|
563
562
|
text-align: center;
|
564
563
|
}
|
@@ -1054,11 +1053,20 @@
|
|
1054
1053
|
--tw-ring-color: rgb(164 202 254 / var(--tw-ring-opacity));
|
1055
1054
|
}
|
1056
1055
|
|
1056
|
+
.dark\:border:is(.dark *) {
|
1057
|
+
border-width: 1px;
|
1058
|
+
}
|
1059
|
+
|
1057
1060
|
.dark\:border-gray-600:is(.dark *) {
|
1058
1061
|
--tw-border-opacity: 1;
|
1059
1062
|
border-color: rgb(75 85 99 / var(--tw-border-opacity));
|
1060
1063
|
}
|
1061
1064
|
|
1065
|
+
.dark\:border-gray-700:is(.dark *) {
|
1066
|
+
--tw-border-opacity: 1;
|
1067
|
+
border-color: rgb(55 65 81 / var(--tw-border-opacity));
|
1068
|
+
}
|
1069
|
+
|
1062
1070
|
.dark\:\!bg-gray-700:is(.dark *) {
|
1063
1071
|
--tw-bg-opacity: 1 !important;
|
1064
1072
|
background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
|
@@ -1079,6 +1087,11 @@
|
|
1079
1087
|
background-color: rgb(30 37 48 / var(--tw-bg-opacity));
|
1080
1088
|
}
|
1081
1089
|
|
1090
|
+
.dark\:bg-gray-900:is(.dark *) {
|
1091
|
+
--tw-bg-opacity: 1;
|
1092
|
+
background-color: rgb(18 25 35 / var(--tw-bg-opacity));
|
1093
|
+
}
|
1094
|
+
|
1082
1095
|
.dark\:bg-primary-600:is(.dark *) {
|
1083
1096
|
--tw-bg-opacity: 1;
|
1084
1097
|
background-color: rgb(37 99 235 / var(--tw-bg-opacity));
|
@@ -1093,6 +1106,11 @@
|
|
1093
1106
|
stroke: #F9FAFB;
|
1094
1107
|
}
|
1095
1108
|
|
1109
|
+
.dark\:px-2:is(.dark *) {
|
1110
|
+
padding-left: 0.5rem;
|
1111
|
+
padding-right: 0.5rem;
|
1112
|
+
}
|
1113
|
+
|
1096
1114
|
.dark\:text-gray-300:is(.dark *) {
|
1097
1115
|
--tw-text-opacity: 1;
|
1098
1116
|
color: rgb(209 213 219 / var(--tw-text-opacity));
|
@@ -1169,14 +1187,6 @@
|
|
1169
1187
|
}
|
1170
1188
|
|
1171
1189
|
@media (min-width: 640px) {
|
1172
|
-
.sm\:grid {
|
1173
|
-
display: grid;
|
1174
|
-
}
|
1175
|
-
|
1176
|
-
.sm\:grid-cols-2 {
|
1177
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
1178
|
-
}
|
1179
|
-
|
1180
1190
|
.sm\:text-sm {
|
1181
1191
|
font-size: 0.875rem;
|
1182
1192
|
line-height: 1.25rem;
|
@@ -359,6 +359,7 @@ class AutoCmaf extends base_nodes_1.CustomSinkNode {
|
|
359
359
|
partDurationSeconds: this.cfg.segments.targetPartDuration,
|
360
360
|
destinations: this.destinations,
|
361
361
|
id: `${this.id}-${streamKeyString}-audio-cmaf`,
|
362
|
+
name: stream.metadata.streamKey.renditionName + "-" + (stream.metadata.message.value.language ?? "default"),
|
362
363
|
...audioCryptoSettings,
|
363
364
|
});
|
364
365
|
local.onPlaylistAddition = (_, p) => p;
|