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