@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.
Files changed (66) hide show
  1. package/client/info.js +60 -118
  2. package/client/output.preview/styles.css +4 -3
  3. package/client/output.whep/styles.css +3 -1
  4. package/client/style.css +52 -42
  5. package/lib/output.autoCmaf/runtime.js +1 -0
  6. package/lib/output.autoCmaf/runtime.js.map +1 -1
  7. package/lib/output.preview/inline-view.js +16 -24
  8. package/lib/output.preview/inline-view.js.map +1 -1
  9. package/lib/output.preview/runtime.js +1 -0
  10. package/lib/output.preview/runtime.js.map +1 -1
  11. package/lib/output.whep/inline-view.js +1 -1
  12. package/lib/output.whep/inline-view.js.map +1 -1
  13. package/lib/output.whep/runtime.js +1 -0
  14. package/lib/output.whep/runtime.js.map +1 -1
  15. package/lib/processor.browserOverlay/runtime.js +3 -1
  16. package/lib/processor.browserOverlay/runtime.js.map +1 -1
  17. package/lib/processor.fixedLadder/info.d.ts +0 -12
  18. package/lib/processor.fixedLadder/info.js +0 -77
  19. package/lib/processor.fixedLadder/info.js.map +1 -1
  20. package/lib/processor.fixedLadder/runtime.d.ts +1 -3
  21. package/lib/processor.fixedLadder/runtime.js.map +1 -1
  22. package/lib/processor.fixedLadder/types.d.ts +1 -118
  23. package/lib/processor.fixedLadder/types.yaml +3 -287
  24. package/lib/processor.makeProgram/info.js +7 -4
  25. package/lib/processor.makeProgram/info.js.map +1 -1
  26. package/lib/processor.makeProgram/runtime.js +2 -2
  27. package/lib/processor.makeProgram/runtime.js.map +1 -1
  28. package/lib/processor.onscreenGraphic/runtime.js +3 -1
  29. package/lib/processor.onscreenGraphic/runtime.js.map +1 -1
  30. package/lib/shared/srt-caller-metrics.js +1 -1
  31. package/lib/shared/srt-caller-metrics.js.map +1 -1
  32. package/lib/shared/srt-listener-metrics.js +3 -3
  33. package/lib/shared/srt-listener-metrics.js.map +1 -1
  34. package/lib/shared/stream-statistics-view.js +5 -7
  35. package/lib/shared/stream-statistics-view.js.map +1 -1
  36. package/lib/test/auto-cmaf.js +3 -3
  37. package/lib/test/auto-cmaf.js.map +1 -1
  38. package/lib/test/browser-overlay.js +3 -3
  39. package/lib/test/browser-overlay.js.map +1 -1
  40. package/lib/test/cascading-switch.js +4 -4
  41. package/lib/test/cascading-switch.js.map +1 -1
  42. package/lib/test/fixed-ladder.js +3 -3
  43. package/lib/test/fixed-ladder.js.map +1 -1
  44. package/lib/test/multiview.js +8 -8
  45. package/lib/test/multiview.js.map +1 -1
  46. package/lib/test/onscreen-graphic.js +9 -9
  47. package/lib/test/onscreen-graphic.js.map +1 -1
  48. package/lib/test/preview.js +1 -1
  49. package/lib/test/preview.js.map +1 -1
  50. package/lib/test/rtmp-input.js +8 -8
  51. package/lib/test/rtmp-input.js.map +1 -1
  52. package/lib/test/rtmp-output.js +10 -10
  53. package/lib/test/rtmp-output.js.map +1 -1
  54. package/lib/test/srt-input-caller.js +1 -1
  55. package/lib/test/srt-input-caller.js.map +1 -1
  56. package/lib/test/srt-input-listener.js +12 -12
  57. package/lib/test/srt-input-listener.js.map +1 -1
  58. package/lib/test/srt-output-caller.js +3 -3
  59. package/lib/test/srt-output-caller.js.map +1 -1
  60. package/lib/test/srt-output-listener.js +3 -3
  61. package/lib/test/srt-output-listener.js.map +1 -1
  62. package/lib/test/udp-output.js +1 -1
  63. package/lib/test/udp-output.js.map +1 -1
  64. package/lib/test/whep-output.js +142 -208
  65. package/lib/test/whep-output.js.map +1 -1
  66. 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: "ma35d", display: "MA35D" },
716
- { value: "quadra", display: "Quadra" },
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)("div", { 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" })] });
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: Array(50).fill(null).map((_, index2) => ({
20498
- x: index2,
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)(import_jsx_runtime5.Fragment, { children: [(0, import_jsx_runtime5.jsx)("div", { children: "Measured Bitrates" }), (0, import_jsx_runtime5.jsx)(Line, { options: cpuChartOptions, data: bitrates })] });
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)("div", { 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: "divide-y", children: (state.metrics.packetsSent.length == 0 ? state.metrics.packetsReceived : state.metrics.packetsSent).map((p, i) => {
20691
- return (0, import_jsx_runtime9.jsxs)("div", { className: "sm:grid sm:grid-cols-2 mt-2", children: [(0, import_jsx_runtime9.jsx)("dt", { children: "Connection" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.names?.[i] ?? i }), (0, import_jsx_runtime9.jsx)("dt", { className: "", children: state.metrics.packetsSent.length == 0 ? "Received" : "Sent" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: p }), (0, import_jsx_runtime9.jsx)("dt", { className: "", children: "Retransmitted" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.metrics.packetsResent[i] }), (0, import_jsx_runtime9.jsx)("dt", { className: "", children: "Lost" }), (0, import_jsx_runtime9.jsx)("dd", { className: "", children: state.metrics.packetsLost[i] })] }, i);
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 [loadedImage, setLoadedImage] = (0, import_react3.useState)(void 0);
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
- const container = document.getElementById(`preview-${id}`) ?? void 0;
21579
- if (!container)
21580
- return;
21581
- const img = document.createElement("img");
21582
- img.width = 420;
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
- }, [state.url, showPreview]);
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 mb-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" })] }), showPreview ? (0, import_jsx_runtime17.jsx)("div", { className: "preview-video", id: `preview-${id}`, children: (0, import_jsx_runtime17.jsx)("style", { children: `
21612
- #preview-${id} video::-webkit-media-controls-play-button { display: none; },
21613
- ` }) }) : (0, import_jsx_runtime17.jsx)("div", { className: "preview-video bg-black flex items-center justify-center text-white h-full", 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` }) })] });
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 mb-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" })] }), 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", children: "Preview turned off" })] });
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
- logan: createLoganRungImpl({ name: `hack_${x.width}x${x.height}`, bitrate: 5e6 }),
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
- logan: rungEditorForm("logan"),
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
- logan: createLoganRung(n),
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: false,
23144
- defaultValue: "new"
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 start stream",
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: auto;
23
+ margin: 0px;
23
24
  margin-top: 0px;
24
25
  }
25
26
 
@@ -1,6 +1,8 @@
1
1
  .whep-container {
2
- height: 237px;
3
2
  width: 450px;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 8px;
4
6
  }
5
7
 
6
8
  .whep-video {
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;