@norskvideo/norsk-studio-source-switcher 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/runtime.js ADDED
@@ -0,0 +1,580 @@
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.SourceSwitch = void 0;
7
+ const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
8
+ const runtime_1 = require("@norskvideo/norsk-studio-built-ins/lib/input.silence/runtime");
9
+ const base_nodes_1 = require("@norskvideo/norsk-studio/lib/extension/base-nodes");
10
+ const path_1 = __importDefault(require("path"));
11
+ const promises_1 = __importDefault(require("fs/promises"));
12
+ const yaml_1 = __importDefault(require("yaml"));
13
+ const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
14
+ const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
15
+ const config_1 = require("@norskvideo/norsk-studio/lib/shared/config");
16
+ const webrtcSettings_1 = require("@norskvideo/norsk-studio-built-ins/lib/shared/webrtcSettings");
17
+ const json_refs_1 = require("json-refs");
18
+ class SourceSwitchDefinition {
19
+ async create(norsk, cfg, cb, runtime) {
20
+ const updates = runtime.updates;
21
+ const onActiveSourceChanged = (source, overlays) => {
22
+ updates.raiseEvent({ type: 'active-source-changed', activeSource: source, overlays });
23
+ };
24
+ const onSourceOnline = (source) => {
25
+ updates.raiseEvent({ type: 'source-online', source });
26
+ };
27
+ const onPlayerOnline = ({ source, url }) => {
28
+ updates.raiseEvent({ type: 'player-online', source, url });
29
+ };
30
+ const onSourceOffline = (source) => {
31
+ updates.raiseEvent({ type: 'source-offline', source });
32
+ };
33
+ const onSourcesDiscovered = (sources) => {
34
+ updates.raiseEvent({ type: 'sources-discovered', sources });
35
+ };
36
+ const cfgWithHooks = { onActiveSourceChanged, onSourcesDiscovered, onSourceOnline, onSourceOffline, onPlayerOnline, ...cfg };
37
+ const node = new SourceSwitch(norsk, cfgWithHooks, runtime);
38
+ await node.initialised;
39
+ if (node.whepPreview?.endpointUrl)
40
+ updates.raiseEvent({ type: 'preview-player-online', url: node.whepPreview?.endpointUrl });
41
+ cb(node);
42
+ }
43
+ handleCommand(node, command) {
44
+ const commandType = command.type;
45
+ switch (commandType) {
46
+ case 'select-source':
47
+ node.setActiveSource(command.source, command.overlays);
48
+ break;
49
+ default:
50
+ (0, util_1.assertUnreachable)(commandType);
51
+ }
52
+ }
53
+ async instanceRoutes() {
54
+ const types = await promises_1.default.readFile(path_1.default.join(__dirname, 'types.yaml'));
55
+ const root = yaml_1.default.parse(types.toString());
56
+ const resolved = await (0, json_refs_1.resolveRefs)(root, {}).then((r) => r.resolved);
57
+ return [
58
+ {
59
+ url: '/status',
60
+ method: 'GET',
61
+ handler: ({ runtime: { updates } }) => ((_req, res) => {
62
+ const { availableSources, activeOverlays, activeSource } = updates.latest();
63
+ const value = {
64
+ available: availableSources.map((f) => ({
65
+ source: sourceSwitchSourceToPin(f),
66
+ resolution: f.resolution,
67
+ frameRate: f.frameRate,
68
+ age: (new Date().valueOf() - f.wentLiveAt) / 1000.0
69
+ })),
70
+ active: {
71
+ primary: sourceSwitchSourceToPin(activeSource),
72
+ overlays: activeOverlays.map((o) => ({
73
+ sourceRect: o.sourceRect,
74
+ destRect: o.destRect,
75
+ source: sourceSwitchSourceToPin(o.source)
76
+ }))
77
+ }
78
+ };
79
+ res.json(value);
80
+ }),
81
+ responses: {
82
+ '200': {
83
+ description: "Information about the presently active source and any configured overlays",
84
+ content: {
85
+ "application/json": {
86
+ schema: resolved.components.schemas['status']
87
+ },
88
+ }
89
+ }
90
+ }
91
+ },
92
+ {
93
+ url: '/active',
94
+ method: 'POST',
95
+ handler: ({ runtime: { updates } }) => ((req, res) => {
96
+ const update = req.body;
97
+ const primary = update.primary;
98
+ if (!primary) {
99
+ res.status(400).send(`Source ${primary} does not exist`);
100
+ return;
101
+ }
102
+ const latest = updates.latest();
103
+ const converted = pinToSourceSwitchSource(primary);
104
+ const exists = latest.availableSources.find((s) => s.id == converted.id && s.key == converted.key);
105
+ const overlays = update.overlays?.map((o) => {
106
+ const convertedSource = pinToSourceSwitchSource(o.source);
107
+ return {
108
+ source: convertedSource,
109
+ sourceRect: o.sourceRect,
110
+ destRect: o.destRect,
111
+ };
112
+ });
113
+ if (!exists) {
114
+ res.status(400).send("source isn't active or doesn't exist");
115
+ return;
116
+ }
117
+ if (overlays?.reduce((a, o) => {
118
+ if (a)
119
+ return a;
120
+ const exists = latest.availableSources.find((s) => s.id == o.source.id && s.key == o.source.key);
121
+ if (!exists) {
122
+ res.status(400).send(`overlay ${sourceSwitchSourceToPin(o.source)} isn't active or doesn't exist`);
123
+ }
124
+ return !exists;
125
+ }, false))
126
+ return;
127
+ if (typeof update.transition?.durationMs === 'number') {
128
+ if (update.transition.durationMs > 10000.0) {
129
+ res.status(400).send("fadeMs too large");
130
+ return;
131
+ }
132
+ }
133
+ else {
134
+ if (update.transition)
135
+ update.transition.durationMs = 0;
136
+ }
137
+ updates.sendCommand({
138
+ type: 'select-source',
139
+ source: converted,
140
+ overlays: overlays ?? []
141
+ });
142
+ res.send("ok");
143
+ }),
144
+ requestBody: {
145
+ description: "The new primary source and any overlays required on it",
146
+ content: {
147
+ "application/json": {
148
+ schema: resolved.components.schemas['status-update']
149
+ },
150
+ }
151
+ },
152
+ responses: {
153
+ '200': {
154
+ description: "The update was requested succesfully, and will be applied in due course"
155
+ },
156
+ '400': {
157
+ description: "There was a problem with the request"
158
+ }
159
+ }
160
+ }
161
+ ];
162
+ }
163
+ }
164
+ exports.default = SourceSwitchDefinition;
165
+ class SourceSwitch extends base_nodes_1.CustomAutoDuplexNode {
166
+ norsk;
167
+ cfg;
168
+ audio;
169
+ video;
170
+ smooth;
171
+ initialised;
172
+ activeSource = { pin: '', primary: { id: '' }, overlays: [] };
173
+ desiredSource = { pin: '', primary: { id: '' }, overlays: [] };
174
+ availableSources = [];
175
+ lastSmoothSwitchContext = new Map();
176
+ whepOutputs = new Map();
177
+ encodePreview;
178
+ whepPreview;
179
+ subscriptions = [];
180
+ updates;
181
+ shared;
182
+ composeCount = 0;
183
+ pendingCompose;
184
+ activeCompose;
185
+ async initialise() {
186
+ const audio = await runtime_1.SilenceSource.create(this.norsk, {
187
+ id: `${this.cfg.id}-audio-silence`,
188
+ displayName: `${this.cfg.id}-audio-silence`,
189
+ channelLayout: this.cfg.channelLayout,
190
+ sampleRate: this.cfg.sampleRate,
191
+ });
192
+ const video = await this.norsk.input.videoTestCard({
193
+ id: `${this.cfg.id}-video-card`,
194
+ sourceName: 'video-card',
195
+ resolution: this.cfg.resolution,
196
+ frameRate: this.cfg.frameRate,
197
+ pattern: 'black',
198
+ });
199
+ const smooth = await this.norsk.processor.control.streamSwitchSmooth({
200
+ id: `${this.cfg.id}-switch`,
201
+ outputSource: "output",
202
+ activeSource: "fallback",
203
+ outputResolution: this.cfg.resolution,
204
+ frameRate: this.cfg.frameRate,
205
+ alignment: "aligned",
206
+ sampleRate: this.cfg.sampleRate,
207
+ channelLayout: this.cfg.channelLayout,
208
+ onInboundContextChange: this.onSwitchContext.bind(this),
209
+ onTransitionComplete: this.onTransitionComplete.bind(this),
210
+ hardwareAcceleration: (0, config_1.contractHardwareAcceleration)(this.cfg.__global.hardware, ['quadra', 'nvidia'])
211
+ });
212
+ this.encodePreview = await this.shared.previewEncode({ source: smooth, sourceSelector: norsk_sdk_1.selectVideo }, this.cfg.__global.hardware);
213
+ this.whepPreview = await this.norsk.output.whep({
214
+ id: `${this.cfg.id}-preview`,
215
+ ...(0, webrtcSettings_1.webRtcSettings)(this.cfg.__global.iceServers),
216
+ });
217
+ this.whepPreview?.subscribe([{
218
+ source: this.encodePreview,
219
+ sourceSelector: norsk_sdk_1.selectVideo
220
+ },
221
+ {
222
+ source: smooth,
223
+ sourceSelector: norsk_sdk_1.selectAudio
224
+ }], norsk_sdk_1.requireAV);
225
+ {
226
+ let prev = 0.0;
227
+ let lastDiff = 0.0;
228
+ const debug = await this.norsk.debug.streamTimestampReport({
229
+ onTimestamp: async (_, t) => {
230
+ const now = Number((t.n * 100n) / t.d) / 100;
231
+ const diff = now - prev;
232
+ if (Math.abs(lastDiff - diff) > 0.01)
233
+ (0, logging_1.debuglog)('ABNORMAL AUDIO GAP DETECTED', { gap: now - prev, lastGap: lastDiff });
234
+ prev = now;
235
+ lastDiff = diff;
236
+ }
237
+ });
238
+ debug.subscribe([
239
+ { source: smooth, sourceSelector: norsk_sdk_1.selectAudio }
240
+ ]);
241
+ }
242
+ {
243
+ let prev = 0.0;
244
+ let lastDiff = 0.0;
245
+ const debug = await this.norsk.debug.streamTimestampReport({
246
+ onTimestamp: async (_, t) => {
247
+ const now = Number((t.n * 100n) / t.d) / 100;
248
+ const diff = now - prev;
249
+ if (Math.abs(lastDiff - diff) > 0.01)
250
+ (0, logging_1.debuglog)('ABNORMAL VIDEO GAP DETECTED', { gap: now - prev, lastGap: lastDiff });
251
+ prev = now;
252
+ lastDiff = diff;
253
+ }
254
+ });
255
+ debug.subscribe([
256
+ { source: smooth, sourceSelector: norsk_sdk_1.selectVideo }
257
+ ]);
258
+ }
259
+ this.audio = audio;
260
+ this.video = video;
261
+ this.smooth = smooth;
262
+ this.setup({ input: smooth, output: [smooth] });
263
+ this.subscribe([]);
264
+ }
265
+ constructor(norsk, cfg, runtime) {
266
+ super(cfg.id);
267
+ this.norsk = norsk;
268
+ this.cfg = cfg;
269
+ this.updates = runtime.updates;
270
+ this.shared = runtime.shared;
271
+ this.initialised = this.initialise();
272
+ }
273
+ onTransitionComplete(pin) {
274
+ (0, logging_1.debuglog)("Transition complete", { id: this.id, source: this.activeSource });
275
+ this.cfg.onActiveSourceChanged?.(this.activeSource.primary, this.activeSource.overlays);
276
+ if (pin == this.pendingCompose?.id) {
277
+ this.activeCompose = this.pendingCompose;
278
+ this.pendingCompose = undefined;
279
+ this.doSubscriptions();
280
+ }
281
+ else if (this.pendingCompose) {
282
+ void this.pendingCompose.compose.close();
283
+ void this.pendingCompose.output.close();
284
+ this.pendingCompose = undefined;
285
+ }
286
+ }
287
+ async onSwitchContext(allStreams) {
288
+ this.lastSmoothSwitchContext = allStreams;
289
+ await this.maybeSwitchSource();
290
+ }
291
+ setActiveSource(source, overlays) {
292
+ if (!this.sourceIsAvailable(source))
293
+ return;
294
+ if (this.pendingCompose) {
295
+ void this.pendingCompose.compose.close();
296
+ void this.pendingCompose.output.close();
297
+ this.pendingCompose = undefined;
298
+ }
299
+ if (overlays.length > 0) {
300
+ void this.setupComposeSource(source, overlays);
301
+ }
302
+ else {
303
+ this.desiredSource = { pin: sourceSwitchSourceToPin(source), primary: source, overlays: [] };
304
+ void this.maybeSwitchSource();
305
+ }
306
+ }
307
+ async maybeSwitchSource() {
308
+ const oldSources = this.availableSources;
309
+ const allStreams = this.lastSmoothSwitchContext;
310
+ this.availableSources = [...allStreams.keys()].map(pinToSourceSwitchSource);
311
+ if (this.activeSource.pin !== this.desiredSource.pin) {
312
+ const currentAvailable = this.sourceIsAvailable(this.desiredSource.primary) && allStreams.get(this.desiredSource.pin)?.length == 2;
313
+ if (currentAvailable) {
314
+ this.activeSource = this.desiredSource;
315
+ this.smooth?.switchSource(this.desiredSource.pin);
316
+ }
317
+ }
318
+ if (this.activeSource.pin !== 'fallback') {
319
+ const currentUnavailable = !this.sourceIsAvailable(this.desiredSource.primary) || allStreams.get(this.desiredSource.pin)?.length !== 2;
320
+ const fallbackAvailable = this.sourceIsAvailable({ id: 'fallback' }) && allStreams.get(sourceSwitchSourceToPin({ id: 'fallback' }))?.length == 2;
321
+ if (currentUnavailable && fallbackAvailable) {
322
+ (0, logging_1.debuglog)("Switching to fallback source", { id: this.id });
323
+ if (this.desiredSource.pin == this.activeSource.pin) {
324
+ this.desiredSource = { pin: 'fallback', primary: { id: 'fallback' }, overlays: [] };
325
+ }
326
+ this.activeSource = { pin: 'fallback', primary: { id: 'fallback' }, overlays: [] };
327
+ this.smooth?.switchSource("fallback");
328
+ }
329
+ }
330
+ for (const existing of oldSources) {
331
+ if (existing.id == this.pendingCompose?.id)
332
+ continue;
333
+ if (existing.id == this.activeCompose?.id)
334
+ continue;
335
+ const pin = sourceSwitchSourceToPin(existing);
336
+ if (!this.sourceIsAvailable(existing) || allStreams.get(pin)?.length == 0) {
337
+ const player = this.whepOutputs.get(pin);
338
+ if (player) {
339
+ (0, logging_1.debuglog)("Source offline", { id: this.id, source: existing });
340
+ this.whepOutputs.delete(pin);
341
+ await player.whep.close();
342
+ this.cfg?.onSourceOffline(existing);
343
+ }
344
+ }
345
+ }
346
+ for (const current of this.availableSources) {
347
+ if (current.id == this.pendingCompose?.id)
348
+ continue;
349
+ if (current.id == this.activeCompose?.id)
350
+ continue;
351
+ const pin = sourceSwitchSourceToPin(current);
352
+ if (!this.whepOutputs.get(pin) && allStreams.get(pin)?.length == 2) {
353
+ (0, logging_1.debuglog)("Source online", { id: this.id, source: current });
354
+ const whep = await this.norsk.output.whep({
355
+ id: `${this.id}-whep-${pin}`,
356
+ ...(0, webrtcSettings_1.webRtcSettings)(this.cfg.__global.iceServers),
357
+ });
358
+ const streams = allStreams.get(pin);
359
+ const video = streams?.find((f) => f.message.case == "video");
360
+ if (video && video.message.case == "video") {
361
+ this.whepOutputs.set(pin, { whep });
362
+ this.cfg?.onSourceOnline({
363
+ resolution: {
364
+ width: video.message.value.width,
365
+ height: video.message.value.height
366
+ },
367
+ frameRate: video.message.value.frameRate,
368
+ wentLiveAt: new Date().valueOf(),
369
+ ...current
370
+ });
371
+ this.cfg?.onPlayerOnline({ source: current, url: whep.endpointUrl });
372
+ }
373
+ }
374
+ }
375
+ void this.setupPreviewPlayers();
376
+ }
377
+ async setupComposeSource(source, overlays) {
378
+ const id = `${this.id}-compose-${this.composeCount++}`;
379
+ this.pendingCompose = {
380
+ id,
381
+ compose: await this.norsk.processor.transform.videoCompose({
382
+ id,
383
+ outputResolution: this.cfg.resolution,
384
+ referenceStream: 'background',
385
+ missingStreamBehaviour: 'drop_part',
386
+ parts: [
387
+ {
388
+ pin: "background",
389
+ compose: norsk_sdk_1.VideoComposeDefaults.fullscreen(),
390
+ opacity: 1.0,
391
+ zIndex: 0
392
+ },
393
+ ...overlays.map((o, i) => ({
394
+ pin: `overlay-${i}`,
395
+ opacity: 1.0,
396
+ zIndex: i + 1,
397
+ compose: (metadata, settings) => ({
398
+ sourceRect: o.sourceRect ?? { x: 0, y: 0, width: metadata.width, height: metadata.height },
399
+ destRect: o.destRect ?? { x: 0, y: 0, width: settings.outputResolution.width, height: settings.outputResolution.height }
400
+ })
401
+ }))
402
+ ]
403
+ }),
404
+ output: await this.norsk.processor.transform.streamKeyOverride({
405
+ id: `${id}-video`,
406
+ streamKey: {
407
+ streamId: 256,
408
+ programNumber: 1,
409
+ sourceName: id,
410
+ renditionName: 'default'
411
+ }
412
+ }),
413
+ audio: await this.norsk.processor.transform.streamKeyOverride({
414
+ id: `${id}-audio`,
415
+ streamKey: {
416
+ streamId: 257,
417
+ programNumber: 1,
418
+ sourceName: id,
419
+ renditionName: 'default'
420
+ }
421
+ })
422
+ };
423
+ const background = this.subscriptions.find((s) => s.source.id == source.id);
424
+ if (!background) {
425
+ (0, logging_1.warninglog)("Unable to find source for stream", { source });
426
+ await this.pendingCompose.compose.close();
427
+ await this.pendingCompose.output.close();
428
+ this.pendingCompose = undefined;
429
+ return;
430
+ }
431
+ this.pendingCompose.output.subscribe([
432
+ { source: this.pendingCompose.compose, sourceSelector: norsk_sdk_1.selectVideo }
433
+ ]);
434
+ this.pendingCompose.compose.subscribeToPins([
435
+ source.key ?
436
+ background.selectVideoToPinForKey("background", source.key)[0] :
437
+ background.selectVideoToPin("background")[0],
438
+ ...overlays.flatMap((o, i) => {
439
+ const source = this.subscriptions.find((s) => s.source.id == o.source.id);
440
+ if (!source)
441
+ return [];
442
+ return o.source.key ?
443
+ [source.selectVideoToPinForKey(`overlay-${i}`, o.source.key)[0]] :
444
+ [source.selectVideoToPin(`overlay-${i}`)[0]];
445
+ })
446
+ ]);
447
+ this.pendingCompose.audio.subscribe([
448
+ source.key ?
449
+ background.selectAudioForKey(source.key)[0] :
450
+ background.selectAudio()[0]
451
+ ]);
452
+ this.desiredSource = {
453
+ pin: `${this.pendingCompose.id}`, overlays, primary: source
454
+ };
455
+ this.doSubscriptions();
456
+ }
457
+ sourceIsAvailable(source) {
458
+ return !!this.availableSources.find((s) => s.id == source.id && s.key == source.key);
459
+ }
460
+ subscribe(subs, opts) {
461
+ this.subscriptions = subs;
462
+ this.doSubscriptions(opts);
463
+ void this.setupPreviewPlayers();
464
+ }
465
+ doSubscriptions(opts) {
466
+ const knownSources = [];
467
+ const subs = this.subscriptions;
468
+ const subscriptions = subs.flatMap((s) => {
469
+ const sType = s.streams.type;
470
+ switch (sType) {
471
+ case 'take-all-streams':
472
+ return s.activeSourceKeys().flatMap((key) => {
473
+ knownSources.push({ id: s.source.id });
474
+ return s.selectAvToPinForKey(pinName(s.source.id, key), key);
475
+ });
476
+ case 'take-first-stream':
477
+ knownSources.push({ id: s.source.id });
478
+ return s.selectAvToPin(pinName(s.source.id));
479
+ case 'take-specific-stream':
480
+ knownSources.push({ id: s.source.id });
481
+ return s.selectAvToPin((pinName(s.source.id)));
482
+ case 'take-specific-streams':
483
+ return s.activeSourceKeys().flatMap((key) => {
484
+ knownSources.push({ id: s.source.id, key });
485
+ return s.selectAvToPinForKey(pinName(s.source.id, key), key);
486
+ });
487
+ default:
488
+ (0, util_1.assertUnreachable)(sType);
489
+ }
490
+ }).filter((x) => !!x) ?? [];
491
+ if (this.audio)
492
+ subscriptions.push({ source: (this.audio.relatedMediaNodes.output[0]), sourceSelector: (0, norsk_sdk_1.audioToPin)("fallback") });
493
+ if (this.video) {
494
+ subscriptions.push({ source: this.video, sourceSelector: (0, norsk_sdk_1.videoToPin)("fallback") });
495
+ knownSources.push({ id: "fallback" });
496
+ }
497
+ this.cfg.onSourcesDiscovered(knownSources);
498
+ if (this.pendingCompose) {
499
+ subscriptions.push({
500
+ source: this.pendingCompose.output,
501
+ sourceSelector: (0, norsk_sdk_1.videoToPin)(`${this.pendingCompose.id}`)
502
+ });
503
+ subscriptions.push({
504
+ source: this.pendingCompose.audio,
505
+ sourceSelector: (0, norsk_sdk_1.audioToPin)(`${this.pendingCompose.id}`)
506
+ });
507
+ }
508
+ if (this.activeCompose) {
509
+ subscriptions.push({
510
+ source: this.activeCompose.output,
511
+ sourceSelector: (0, norsk_sdk_1.videoToPin)(`${this.activeCompose.id}`)
512
+ });
513
+ subscriptions.push({
514
+ source: this.activeCompose.audio,
515
+ sourceSelector: (0, norsk_sdk_1.audioToPin)(`${this.activeCompose.id}`)
516
+ });
517
+ }
518
+ (0, logging_1.debuglog)("Subcription complete, known sources", { id: this.id, knownSources });
519
+ this.smooth?.subscribeToPins(subscriptions, opts?.requireOneOfEverything ? (ctx) => ctx.streams.length == (subs.length * 2) + 2 : undefined);
520
+ }
521
+ async setupPreviewPlayers() {
522
+ for (const [active, player] of this.whepOutputs) {
523
+ const [id, key] = pinToSourceAndKey(active);
524
+ const source = this.subscriptions.find((s) => s.source.id == id);
525
+ if (!player)
526
+ continue;
527
+ if (active === "fallback") {
528
+ const subscriptions = [];
529
+ if (this.audio)
530
+ subscriptions.push({ source: (this.audio.relatedMediaNodes.output[0]), sourceSelector: norsk_sdk_1.selectAudio });
531
+ if (this.video) {
532
+ if (!player.encoder) {
533
+ player.encoder = await this.shared.previewEncode({ source: this.video, sourceSelector: norsk_sdk_1.selectVideo }, this.cfg.__global.hardware);
534
+ }
535
+ subscriptions.push({ source: player.encoder, sourceSelector: norsk_sdk_1.selectVideo });
536
+ }
537
+ player.whep.subscribe(subscriptions);
538
+ }
539
+ else {
540
+ if (!source)
541
+ continue;
542
+ if (!player.encoder) {
543
+ player.encoder = await this.shared.previewEncode(key ? source.selectVideoForKey(key)[0] : source.selectVideo()[0], this.cfg.__global.hardware);
544
+ }
545
+ player.whep.subscribe((key ? source.selectAudioForKey(key) : source.selectAudio()).concat([
546
+ { source: player.encoder, sourceSelector: norsk_sdk_1.selectVideo }
547
+ ]));
548
+ }
549
+ }
550
+ }
551
+ async close() {
552
+ await super.close();
553
+ await this.audio?.close();
554
+ await this.video?.close();
555
+ }
556
+ }
557
+ exports.SourceSwitch = SourceSwitch;
558
+ function pinName(sourceId, key) {
559
+ if (key) {
560
+ return `${sourceId}__${key}`;
561
+ }
562
+ else {
563
+ return sourceId;
564
+ }
565
+ }
566
+ function pinToSourceAndKey(pin) {
567
+ if (pin.indexOf('__') >= 0) {
568
+ const result = pin.split('__', 2);
569
+ return [result[0], result[1]];
570
+ }
571
+ return [pin, undefined];
572
+ }
573
+ function pinToSourceSwitchSource(pin) {
574
+ const [id, key] = pinToSourceAndKey(pin);
575
+ return { id, key };
576
+ }
577
+ function sourceSwitchSourceToPin(source) {
578
+ return pinName(source.id, source.key);
579
+ }
580
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}