@norskvideo/norsk-studio-built-ins 1.9.0 → 1.10.1

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 (110) hide show
  1. package/client/info.js +4 -4
  2. package/lib/storage.s3/info.d.ts +2 -0
  3. package/lib/storage.s3/info.js +11 -0
  4. package/lib/storage.s3/info.js.map +1 -0
  5. package/lib/storage.s3/storage.d.ts +13 -0
  6. package/lib/storage.s3/storage.js +173 -0
  7. package/lib/storage.s3/storage.js.map +1 -0
  8. package/package.json +8 -3
  9. package/lib/input.mediaconnect/flow-selection.d.ts +0 -9
  10. package/lib/input.mediaconnect/flow-selection.js +0 -40
  11. package/lib/input.mediaconnect/flow-selection.js.map +0 -1
  12. package/lib/input.mediaconnect/info.d.ts +0 -3
  13. package/lib/input.mediaconnect/info.js +0 -70
  14. package/lib/input.mediaconnect/info.js.map +0 -1
  15. package/lib/input.mediaconnect/node-view.d.ts +0 -6
  16. package/lib/input.mediaconnect/node-view.js +0 -38
  17. package/lib/input.mediaconnect/node-view.js.map +0 -1
  18. package/lib/input.mediaconnect/output-selection.d.ts +0 -9
  19. package/lib/input.mediaconnect/output-selection.js +0 -55
  20. package/lib/input.mediaconnect/output-selection.js.map +0 -1
  21. package/lib/input.mediaconnect/runtime.d.ts +0 -23
  22. package/lib/input.mediaconnect/runtime.js +0 -133
  23. package/lib/input.mediaconnect/runtime.js.map +0 -1
  24. package/lib/output.medialive/channel-selection.d.ts +0 -9
  25. package/lib/output.medialive/channel-selection.js +0 -40
  26. package/lib/output.medialive/channel-selection.js.map +0 -1
  27. package/lib/output.medialive/fullscreen.d.ts +0 -6
  28. package/lib/output.medialive/fullscreen.js +0 -31
  29. package/lib/output.medialive/fullscreen.js.map +0 -1
  30. package/lib/output.medialive/info.d.ts +0 -3
  31. package/lib/output.medialive/info.js +0 -111
  32. package/lib/output.medialive/info.js.map +0 -1
  33. package/lib/output.medialive/inline.d.ts +0 -6
  34. package/lib/output.medialive/inline.js +0 -30
  35. package/lib/output.medialive/inline.js.map +0 -1
  36. package/lib/output.medialive/input-selection.d.ts +0 -9
  37. package/lib/output.medialive/input-selection.js +0 -58
  38. package/lib/output.medialive/input-selection.js.map +0 -1
  39. package/lib/output.medialive/node-view.d.ts +0 -6
  40. package/lib/output.medialive/node-view.js +0 -36
  41. package/lib/output.medialive/node-view.js.map +0 -1
  42. package/lib/output.medialive/runtime.d.ts +0 -34
  43. package/lib/output.medialive/runtime.js +0 -142
  44. package/lib/output.medialive/runtime.js.map +0 -1
  45. package/lib/output.medialive/url-selection.d.ts +0 -9
  46. package/lib/output.medialive/url-selection.js +0 -45
  47. package/lib/output.medialive/url-selection.js.map +0 -1
  48. package/lib/processor.actionReplay/info.d.ts +0 -5
  49. package/lib/processor.actionReplay/info.js +0 -100
  50. package/lib/processor.actionReplay/info.js.map +0 -1
  51. package/lib/processor.actionReplay/runtime.d.ts +0 -59
  52. package/lib/processor.actionReplay/runtime.js +0 -224
  53. package/lib/processor.actionReplay/runtime.js.map +0 -1
  54. package/lib/processor.actionReplay/summary.d.ts +0 -7
  55. package/lib/processor.actionReplay/summary.js +0 -76
  56. package/lib/processor.actionReplay/summary.js.map +0 -1
  57. package/lib/processor.audioLevel/info.d.ts +0 -3
  58. package/lib/processor.audioLevel/info.js +0 -83
  59. package/lib/processor.audioLevel/info.js.map +0 -1
  60. package/lib/processor.audioLevel/inline-view.d.ts +0 -6
  61. package/lib/processor.audioLevel/inline-view.js +0 -23
  62. package/lib/processor.audioLevel/inline-view.js.map +0 -1
  63. package/lib/processor.audioLevel/runtime.d.ts +0 -49
  64. package/lib/processor.audioLevel/runtime.js +0 -82
  65. package/lib/processor.audioLevel/runtime.js.map +0 -1
  66. package/lib/processor.audioLevel/summary-view.d.ts +0 -7
  67. package/lib/processor.audioLevel/summary-view.js +0 -36
  68. package/lib/processor.audioLevel/summary-view.js.map +0 -1
  69. package/lib/processor.audioMixer/fullscreen-view.d.ts +0 -8
  70. package/lib/processor.audioMixer/fullscreen-view.js +0 -121
  71. package/lib/processor.audioMixer/fullscreen-view.js.map +0 -1
  72. package/lib/processor.audioMixer/info.d.ts +0 -4
  73. package/lib/processor.audioMixer/info.js +0 -148
  74. package/lib/processor.audioMixer/info.js.map +0 -1
  75. package/lib/processor.audioMixer/inline-view.d.ts +0 -7
  76. package/lib/processor.audioMixer/inline-view.js +0 -43
  77. package/lib/processor.audioMixer/inline-view.js.map +0 -1
  78. package/lib/processor.audioMixer/runtime.d.ts +0 -119
  79. package/lib/processor.audioMixer/runtime.js +0 -142
  80. package/lib/processor.audioMixer/runtime.js.map +0 -1
  81. package/lib/processor.audioMixer/summary-view.d.ts +0 -7
  82. package/lib/processor.audioMixer/summary-view.js +0 -11
  83. package/lib/processor.audioMixer/summary-view.js.map +0 -1
  84. package/lib/processor.aws-transcribe/info.d.ts +0 -3
  85. package/lib/processor.aws-transcribe/info.js +0 -81
  86. package/lib/processor.aws-transcribe/info.js.map +0 -1
  87. package/lib/processor.aws-transcribe/runtime.d.ts +0 -39
  88. package/lib/processor.aws-transcribe/runtime.js +0 -164
  89. package/lib/processor.aws-transcribe/runtime.js.map +0 -1
  90. package/lib/processor.aws-transcribe/transcribe-language-selection.d.ts +0 -9
  91. package/lib/processor.aws-transcribe/transcribe-language-selection.js +0 -40
  92. package/lib/processor.aws-transcribe/transcribe-language-selection.js.map +0 -1
  93. package/lib/processor.aws-transcribe/translate-language-selection.d.ts +0 -9
  94. package/lib/processor.aws-transcribe/translate-language-selection.js +0 -40
  95. package/lib/processor.aws-transcribe/translate-language-selection.js.map +0 -1
  96. package/lib/processor.fixedLadder/newFile.d.ts +0 -3
  97. package/lib/processor.fixedLadder/newFile.js +0 -145
  98. package/lib/processor.fixedLadder/newFile.js.map +0 -1
  99. package/lib/processor.monetise/info.d.ts +0 -3
  100. package/lib/processor.monetise/info.js +0 -90
  101. package/lib/processor.monetise/info.js.map +0 -1
  102. package/lib/processor.monetise/runtime.d.ts +0 -57
  103. package/lib/processor.monetise/runtime.js +0 -141
  104. package/lib/processor.monetise/runtime.js.map +0 -1
  105. package/lib/processor.monetise/summary.d.ts +0 -7
  106. package/lib/processor.monetise/summary.js +0 -39
  107. package/lib/processor.monetise/summary.js.map +0 -1
  108. package/lib/test/audio-mixer.d.ts +0 -0
  109. package/lib/test/audio-mixer.js +0 -2
  110. package/lib/test/audio-mixer.js.map +0 -1
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MediaConnectSource = void 0;
7
- const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
8
- const base_nodes_1 = require("@norskvideo/norsk-studio/lib/extension/base-nodes");
9
- const express_1 = __importDefault(require("express"));
10
- const client_mediaconnect_1 = require("@aws-sdk/client-mediaconnect");
11
- const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
12
- class MediaConnectSourceDefinition {
13
- async create(norsk, cfg, cb) {
14
- const node = await MediaConnectSource.create(norsk, cfg);
15
- cb(node);
16
- }
17
- routes() {
18
- const router = express_1.default.Router();
19
- router.get("/flows", async (_req, res) => {
20
- let flows = [];
21
- try {
22
- const client = new client_mediaconnect_1.MediaConnectClient({ region: process.env.AWS_REGION ?? "eu-west-2" });
23
- const response = await client.send(new client_mediaconnect_1.ListFlowsCommand({ MaxResults: 100 }));
24
- flows = response.Flows ?? [];
25
- client.destroy();
26
- }
27
- catch (e) {
28
- handleAwsException(e, res);
29
- return;
30
- }
31
- res.writeHead(200);
32
- res.end(JSON.stringify(flows));
33
- });
34
- router.get("/flows/:arn", async (req, res) => {
35
- let flow = undefined;
36
- try {
37
- const client = new client_mediaconnect_1.MediaConnectClient({ region: process.env.AWS_REGION ?? "eu-west-2" });
38
- const response = await client.send(new client_mediaconnect_1.DescribeFlowCommand({ FlowArn: req.params.arn }));
39
- flow = response.Flow;
40
- client.destroy();
41
- }
42
- catch (e) {
43
- handleAwsException(e, res);
44
- return;
45
- }
46
- if (!flow) {
47
- res.writeHead(404);
48
- res.end("Flow not found?");
49
- return;
50
- }
51
- res.writeHead(200);
52
- res.end(JSON.stringify(flow));
53
- });
54
- return router;
55
- }
56
- }
57
- exports.default = MediaConnectSourceDefinition;
58
- function handleAwsException(e, res) {
59
- (0, logging_1.errorlog)("AWS exception", e);
60
- if (e instanceof client_mediaconnect_1.MediaConnectServiceException) {
61
- res.writeHead(e?.$metadata?.httpStatusCode ?? 500);
62
- res.end(JSON.stringify(e));
63
- }
64
- else {
65
- res.writeHead(500);
66
- res.end(JSON.stringify(e));
67
- }
68
- }
69
- class MediaConnectSource extends base_nodes_1.CustomSourceNode {
70
- norsk;
71
- cfg;
72
- initialised;
73
- static async create(norsk, cfg) {
74
- const node = new MediaConnectSource(cfg, norsk);
75
- await node.initialised;
76
- return node;
77
- }
78
- constructor(cfg, norsk) {
79
- super(cfg.id);
80
- this.norsk = norsk;
81
- this.cfg = cfg;
82
- this.initialised = this.initialise();
83
- }
84
- async initialise() {
85
- let flow = undefined;
86
- let output = undefined;
87
- try {
88
- const client = new client_mediaconnect_1.MediaConnectClient({ region: process.env.AWS_REGION ?? "eu-west-2" });
89
- const response = await client.send(new client_mediaconnect_1.DescribeFlowCommand({ FlowArn: this.cfg.flowArn }));
90
- flow = response.Flow;
91
- client.destroy();
92
- }
93
- catch (e) {
94
- (0, logging_1.errorlog)("Failed to retrieve flow from AWS, cannot start media node", e);
95
- return;
96
- }
97
- output = flow?.Outputs?.find((o) => o.OutputArn == this.cfg.outputArn);
98
- if (!flow || !output) {
99
- (0, logging_1.errorlog)("Failed to load flow and output details, cannot start node", this.id, this.cfg);
100
- return;
101
- }
102
- if (!output.ListenerAddress) {
103
- (0, logging_1.errorlog)("No listener address on flow output, cannot start", this.id, this.cfg);
104
- return;
105
- }
106
- if (!output.Port) {
107
- (0, logging_1.errorlog)("No listener port on flow output, cannot start", this.id, this.cfg);
108
- return;
109
- }
110
- const srt = await this.norsk.input.srt({
111
- id: `${this.id}-srt`,
112
- mode: 'caller',
113
- ip: output.ListenerAddress,
114
- port: output.Port,
115
- sourceName: this.id
116
- });
117
- const align = await this.norsk.processor.transform.streamAlign({
118
- id: `${this.id}-align`,
119
- frameRate: { frames: 25, seconds: 1 },
120
- sampleRate: 96000,
121
- syncAv: true
122
- });
123
- align.subscribe([{
124
- source: srt, sourceSelector: norsk_sdk_1.selectAll
125
- }], norsk_sdk_1.requireAV);
126
- this.setup({ output: [align] });
127
- }
128
- async close() {
129
- await super.close();
130
- }
131
- }
132
- exports.MediaConnectSource = MediaConnectSource;
133
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/input.mediaconnect/runtime.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { MediaLiveConfig } from "./runtime";
2
- type ChannelSelectionProps = {
3
- defaultValue?: string;
4
- id: string;
5
- onChanged: (value: string) => void;
6
- latest: Partial<MediaLiveConfig>;
7
- };
8
- declare function ChannelSelection(props: ChannelSelectionProps): import("react/jsx-runtime").JSX.Element;
9
- export default ChannelSelection;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("react");
5
- function ChannelSelection(props) {
6
- const [loading, setLoading] = (0, react_1.useState)(true);
7
- (0, react_1.useEffect)(() => {
8
- const fn = async () => {
9
- const result = await fetch('components/output.medialive/channels');
10
- if (result.ok && result.body) {
11
- const channels = await result.json();
12
- setChannels(channels);
13
- setLoading(false);
14
- if (props.defaultValue)
15
- props.onChanged(props.defaultValue);
16
- }
17
- else {
18
- const text = await result.text();
19
- throw new Error(text);
20
- }
21
- };
22
- fn().catch(console.error);
23
- }, []);
24
- const [channels, setChannels] = (0, react_1.useState)([]);
25
- if (loading) {
26
- return (0, jsx_runtime_1.jsx)("div", { children: "Loading.." });
27
- }
28
- if (channels.length == 0) {
29
- return (0, jsx_runtime_1.jsx)("div", { children: "No channels loaded" });
30
- }
31
- return (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, jsx_runtime_1.jsx)("option", { value: '', children: "---" }, "empty"), channels.map((o, i) => {
32
- const val = o.Id;
33
- return (0, jsx_runtime_1.jsx)("option", { value: val, children: o.Name }, i);
34
- })] }) });
35
- function myOnChange(e) {
36
- props.onChanged(e.target.value);
37
- }
38
- }
39
- exports.default = ChannelSelection;
40
- //# sourceMappingURL=channel-selection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-selection.js","sourceRoot":"","sources":["../../src/output.medialive/channel-selection.tsx"],"names":[],"mappings":";;;AAAA,iCAAyD;AAYzD,SAAS,gBAAgB,CAAC,KAA4B;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAA;YAClE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAsB,CAAC;gBACzD,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,IAAI,KAAK,CAAC,YAAY;oBACpB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAA;QACD,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAC;IAE/D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,wDAAoB,CAAA;IAC7B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,iEAA6B,CAAA;IACtC,CAAC;IAED,OAAO,0CACL,oCAAQ,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,aACrI,mCAAoB,KAAK,EAAC,EAAE,qBAAhB,OAAO,CAAsB,EACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACrB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;oBACjB,OAAO,mCAAgB,KAAK,EAAE,GAAG,YAAG,CAAC,CAAC,IAAI,IAAtB,CAAC,CAA+B,CAAA;gBACtD,CAAC,CAAC,IACK,GACL,CAAA;IAGN,SAAS,UAAU,CAAC,CAAiC;QACnD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,kBAAe,gBAAgB,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { MediaLiveState, MediaLiveConfig } from "./runtime";
2
- declare function FullscreenView({ state, config }: {
3
- state: MediaLiveState;
4
- config: MediaLiveConfig;
5
- }): import("react/jsx-runtime").JSX.Element;
6
- export default FullscreenView;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const hls_js_1 = __importDefault(require("hls.js"));
9
- function FullscreenView({ state, config }) {
10
- const url = state.url;
11
- const id = config.id;
12
- (0, react_1.useEffect)(() => {
13
- if (!url)
14
- return;
15
- const element = document.getElementById(`${id}-video`);
16
- if (hls_js_1.default.isSupported()) {
17
- const hls = new hls_js_1.default();
18
- hls.loadSource(url);
19
- hls.attachMedia(element);
20
- }
21
- else if (element.canPlayType('application/vnd.apple.mpegurl')) {
22
- element.src = url;
23
- }
24
- }, [state.url]);
25
- if (!url)
26
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "..." });
27
- { }
28
- return (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("video", { controls: true, autoPlay: true, muted: true, id: `${id}-video` }) });
29
- }
30
- exports.default = FullscreenView;
31
- //# sourceMappingURL=fullscreen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fullscreen.js","sourceRoot":"","sources":["../../src/output.medialive/fullscreen.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAkC;AAElC,oDAAyB;AAEzB,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAsD;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAqB,CAAC;QAE3E,IAAI,gBAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,gBAAG,EAAE,CAAC;YACtB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;aACI,IAAI,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,mEAAQ,CAAA;IAEzB,CAAC,CAA8D,CAAC;IAChE,OAAO,0CACL,kCAAO,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAU,GAC1E,CAAA;AACT,CAAC;AAED,kBAAe,cAAc,CAAC"}
@@ -1,3 +0,0 @@
1
- import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
2
- import type { MediaLiveConfig, MediaLiveEvent, MediaLiveState } from "./runtime";
3
- export default function ({ defineComponent, validation: { Z }, All }: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<MediaLiveConfig, MediaLiveState, object, MediaLiveEvent>;
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importDefault(require("react"));
30
- function default_1({ defineComponent, validation: { Z }, All }) {
31
- const ChannelSelection = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./channel-selection'))));
32
- const InputSelection = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./input-selection'))));
33
- const UrlSelection = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./url-selection'))));
34
- const NodeView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./node-view'))));
35
- const InlineView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./inline'))));
36
- const FullscreenView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./fullscreen'))));
37
- return defineComponent({
38
- identifier: 'output.medialive',
39
- category: 'output',
40
- name: "Media Live Output",
41
- subscription: {
42
- accepts: {
43
- type: "multi-stream",
44
- media: All
45
- },
46
- },
47
- extraValidation: function (ctx) {
48
- const audioStreams = ctx.subscriptions.filter((s) => s.streams.select.includes("audio"));
49
- const videoStreams = ctx.subscriptions.filter((s) => s.streams.select.includes("video"));
50
- if (audioStreams.length == 0) {
51
- ctx.addWarning("Output has no audio, is this intentional");
52
- }
53
- if (videoStreams.length == 0) {
54
- ctx.addWarning("Output has no video, is this intentional");
55
- }
56
- },
57
- designtime: {
58
- node: NodeView
59
- },
60
- runtime: {
61
- initialState: () => ({
62
- url: undefined
63
- }),
64
- handleEvent: (ev, state) => {
65
- const evType = ev.type;
66
- switch (evType) {
67
- case "url-located":
68
- return { ...state, url: ev.url };
69
- default:
70
- assertUnreachable(evType);
71
- }
72
- },
73
- inline: InlineView,
74
- fullscreen: FullscreenView,
75
- },
76
- configForm: {
77
- form: {
78
- channelId: {
79
- help: "The channel to output to",
80
- hint: {
81
- type: "custom",
82
- component: ChannelSelection,
83
- validation: Z.string().min(1, "Choosing a channel is mandatory")
84
- }
85
- },
86
- inputId: {
87
- help: "The input of the channel to output to",
88
- hint: {
89
- type: "custom",
90
- component: InputSelection,
91
- validation: Z.string().min(1, "Choosing an input is mandatory")
92
- }
93
- },
94
- destinationIndex: {
95
- help: "The publish URL to output to",
96
- hint: {
97
- type: "custom",
98
- defaultValue: 0,
99
- component: UrlSelection,
100
- validation: Z.number().min(0, "Choosing a url is mandatory")
101
- }
102
- }
103
- }
104
- }
105
- });
106
- }
107
- exports.default = default_1;
108
- function assertUnreachable(_) {
109
- throw new Error("Didn't expect to get here");
110
- }
111
- //# sourceMappingURL=info.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.medialive/info.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { MediaLiveConfig, MediaLiveState } from "./runtime";
2
- declare function InlineView({ state, config }: {
3
- state: MediaLiveState;
4
- config: MediaLiveConfig;
5
- }): import("react/jsx-runtime").JSX.Element;
6
- export default InlineView;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const hls_js_1 = __importDefault(require("hls.js"));
9
- function InlineView({ state, config }) {
10
- const url = state.url;
11
- const id = config.id;
12
- (0, react_1.useEffect)(() => {
13
- if (!url)
14
- return;
15
- const element = document.getElementById(`${id}-video`);
16
- if (hls_js_1.default.isSupported()) {
17
- const hls = new hls_js_1.default();
18
- hls.loadSource(url);
19
- hls.attachMedia(element);
20
- }
21
- else if (element.canPlayType('application/vnd.apple.mpegurl')) {
22
- element.src = url;
23
- }
24
- }, [state.url]);
25
- if (!url)
26
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "..." });
27
- return (0, jsx_runtime_1.jsx)("div", { className: "preview-outer-container", children: (0, jsx_runtime_1.jsx)("video", { autoPlay: true, muted: true, id: `${id}-video` }) });
28
- }
29
- exports.default = InlineView;
30
- //# sourceMappingURL=inline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/output.medialive/inline.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAkC;AAElC,oDAAyB;AAEzB,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAsD;IACvF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAqB,CAAC;QAE3E,IAAI,gBAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,gBAAG,EAAE,CAAC;YACtB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;aACI,IAAI,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,mEAAQ,CAAA;IAEzB,OAAO,gCAAK,SAAS,EAAC,yBAAyB,YAC7C,kCAAO,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAU,GAC1D,CAAA;AACT,CAAC;AAED,kBAAe,UAAU,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { MediaLiveConfig } from "./runtime";
2
- type InputSelectionProps = {
3
- defaultValue?: string;
4
- id: string;
5
- onChanged: (value: string) => void;
6
- latest: Partial<MediaLiveConfig>;
7
- };
8
- declare function inputSelection(props: InputSelectionProps): import("react/jsx-runtime").JSX.Element;
9
- export default inputSelection;
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("react");
5
- function inputSelection(props) {
6
- const [loading, setLoading] = (0, react_1.useState)(true);
7
- const [channels, setChannels] = (0, react_1.useState)(undefined);
8
- const [channel, setChannel] = (0, react_1.useState)(undefined);
9
- (0, react_1.useEffect)(() => {
10
- console.log("Loading channels for input", props);
11
- const fn = async () => {
12
- setLoading(true);
13
- const result = await fetch('components/output.medialive/channels');
14
- if (result.ok && result.body) {
15
- const channels = await result.json();
16
- setChannels(channels);
17
- setLoading(false);
18
- if (props.defaultValue)
19
- props.onChanged(props.defaultValue);
20
- }
21
- else {
22
- const text = await result.text();
23
- throw new Error(text);
24
- }
25
- };
26
- fn().catch(console.error);
27
- }, []);
28
- (0, react_1.useEffect)(() => {
29
- const channel = channels?.find((c) => c.Id == props.latest.channelId);
30
- setChannel(channel);
31
- const firstInput = channel?.InputAttachments?.[0]?.InputId;
32
- if (firstInput && channel?.InputAttachments?.length == 1 && firstInput !== props.defaultValue) {
33
- props.onChanged(firstInput);
34
- }
35
- }, [channels, props.latest.channelId]);
36
- if (loading) {
37
- return (0, jsx_runtime_1.jsx)("div", { children: "..." });
38
- }
39
- if (channel == undefined) {
40
- return (0, jsx_runtime_1.jsx)("div", { children: "..." });
41
- }
42
- if (!channel.InputAttachments) {
43
- return (0, jsx_runtime_1.jsx)("div", { children: "Channel has no inputs" });
44
- }
45
- const firstInput = channel.InputAttachments?.[0];
46
- if (firstInput && channel.InputAttachments.length == 1) {
47
- return (0, jsx_runtime_1.jsx)("div", { children: firstInput.InputAttachmentName });
48
- }
49
- return (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "---" }, "empty"), channel.InputAttachments.map((o, i) => {
50
- const val = o.InputId;
51
- return (0, jsx_runtime_1.jsx)("option", { value: val, children: o.InputAttachmentName }, i);
52
- })] }) });
53
- function myOnChange(e) {
54
- props.onChanged(e.target.value);
55
- }
56
- }
57
- exports.default = inputSelection;
58
- //# sourceMappingURL=input-selection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-selection.js","sourceRoot":"","sources":["../../src/output.medialive/input-selection.tsx"],"names":[],"mappings":";;;AAAA,iCAAyD;AAYzD,SAAS,cAAc,CAAC,KAA0B;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAA+B,SAAS,CAAC,CAAC;IAClF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAA6B,SAAS,CAAC,CAAC;IAE9E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAA;YAClE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAsB,CAAC;gBACzD,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAElB,IAAI,KAAK,CAAC,YAAY;oBACpB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAExC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAA;QACD,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,UAAU,CAAC,OAAO,CAAC,CAAC;QAEpB,MAAM,UAAU,GAAG,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAC3D,IAAI,UAAU,IAAI,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC,IAAI,UAAU,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9F,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IAEtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,kDAAc,CAAA;IACvB,CAAC;IAED,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,kDAAc,CAAA;IACvB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9B,OAAO,oEAAgC,CAAA;IACzC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjD,IAAI,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,0CAAM,UAAU,CAAC,mBAAmB,GAAO,CAAA;IACpD,CAAC;IAED,OAAO,0CACL,oCAAQ,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,aACrI,mCAAoB,KAAK,EAAC,EAAE,qBAAhB,OAAO,CAAsB,EACxC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;oBACtB,OAAO,mCAAgB,KAAK,EAAE,GAAG,YAAG,CAAC,CAAC,mBAAmB,IAArC,CAAC,CAA8C,CAAA;gBACrE,CAAC,CAAC,IACK,GACL,CAAA;IAEN,SAAS,UAAU,CAAC,CAAiC;QACnD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,kBAAe,cAAc,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { NodeDescription } from "@norskvideo/norsk-studio/lib/shared/document";
2
- import type { MediaLiveConfig } from "./runtime";
3
- declare function NodeView(props: {
4
- node: NodeDescription<MediaLiveConfig>;
5
- }): import("react/jsx-runtime").JSX.Element;
6
- export default NodeView;
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("react");
5
- function NodeView(props) {
6
- const [loading, setLoading] = (0, react_1.useState)(true);
7
- const [channel, setChannel] = (0, react_1.useState)(undefined);
8
- const [input, setInput] = (0, react_1.useState)(undefined);
9
- (0, react_1.useEffect)(() => {
10
- if (!props.node.config.channelId)
11
- return;
12
- if (!props.node.config.inputId)
13
- return;
14
- const fn = async () => {
15
- const channels = await fetch('components/output.medialive/channels').then(async (f) => f.json());
16
- const input = await fetch('components/output.medialive/inputs/' + props.node.config.inputId).then(async (f) => f.json());
17
- const channel = channels.find((c) => c.Id == props.node.config.channelId);
18
- setChannel(channel);
19
- setInput(input);
20
- setLoading(false);
21
- };
22
- fn().catch(console.error);
23
- }, [props.node.config.channelId, props.node.config.inputId]);
24
- if (loading) {
25
- return (0, jsx_runtime_1.jsx)("div", { children: "..." });
26
- }
27
- if (!channel) {
28
- return (0, jsx_runtime_1.jsx)("div", { children: "[Error: Failed to load channel]" });
29
- }
30
- if (!input) {
31
- return (0, jsx_runtime_1.jsx)("div", { children: "[Error: Missing input on channel]" });
32
- }
33
- return (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Name: ", channel.Name] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Input: ", input.Name] }), (0, jsx_runtime_1.jsxs)("div", { children: ["Url: ", input.Destinations?.[props.node.config.destinationIndex].Url] })] });
34
- }
35
- exports.default = NodeView;
36
- //# sourceMappingURL=node-view.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-view.js","sourceRoot":"","sources":["../../src/output.medialive/node-view.tsx"],"names":[],"mappings":";;;AAIA,iCAA4C;AAE5C,SAAS,QAAQ,CAAC,KAAiD;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAA6B,SAAS,CAAC,CAAC;IAC9E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAyC,SAAS,CAAC,CAAC;IAEtF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEvC,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;YACpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAqB,CAAA;YACpH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,qCAAqC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAA+B,CAAC;YACvJ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1E,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEhB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAA;QACD,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAE5D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,kDAAc,CAAA;IACvB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,8EAA0C,CAAA;IACnD,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,gFAA4C,CAAA;IACrD,CAAC;IAED,OAAO,4CACL,sDAAY,OAAO,CAAC,IAAI,IAAO,EAC/B,uDAAa,KAAK,CAAC,IAAI,IAAO,EAC9B,qDAAW,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAO,IAC1E,CAAA;AACR,CAAC;AAED,kBAAe,QAAQ,CAAC"}
@@ -1,34 +0,0 @@
1
- /// <reference types="express-ws" />
2
- import { Norsk } from '@norskvideo/norsk-sdk';
3
- import { CustomSinkNode } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
4
- import { OnCreated, RuntimeUpdates, ServerComponentDefinition, StudioRuntime } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
5
- export type MediaLiveConfig = {
6
- id: string;
7
- displayName: string;
8
- channelId: string;
9
- inputId: string;
10
- destinationIndex: number;
11
- };
12
- export type MediaLiveState = {
13
- url?: string;
14
- };
15
- export type MediaLiveEvent = {
16
- type: 'url-located';
17
- url: string;
18
- };
19
- export type MediaLiveCommand = object;
20
- export default class MediaConnectSourceDefinition implements ServerComponentDefinition<MediaLiveConfig, MediaLiveOutput, MediaLiveState, MediaLiveCommand, MediaLiveEvent> {
21
- create(norsk: Norsk, cfg: MediaLiveConfig, cb: OnCreated<MediaLiveOutput>, { updates }: StudioRuntime<MediaLiveState, MediaLiveEvent>): Promise<void>;
22
- routes(): import("express-ws").Router;
23
- }
24
- export declare class MediaLiveOutput extends CustomSinkNode {
25
- norsk: Norsk;
26
- cfg: MediaLiveConfig;
27
- initialised: Promise<void>;
28
- updates: RuntimeUpdates<MediaLiveState, MediaLiveEvent>;
29
- static create(norsk: Norsk, cfg: MediaLiveConfig, updates: RuntimeUpdates<MediaLiveState, MediaLiveEvent>): Promise<MediaLiveOutput>;
30
- constructor(cfg: MediaLiveConfig, norsk: Norsk, updates: RuntimeUpdates<MediaLiveState, MediaLiveEvent>);
31
- initialise(): Promise<void>;
32
- loadOutputInformation(): Promise<void>;
33
- close(): Promise<void>;
34
- }