@norskvideo/norsk-studio-built-ins 1.27.0-2025-05-12-7048b462 → 1.27.0-2025-05-14-7d3dbd14

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 (49) hide show
  1. package/client/info.js +39762 -1235
  2. package/client/processor.smartSourceSwitch/extra.css +0 -0
  3. package/lib/info.js +10 -8
  4. package/lib/info.js.map +1 -1
  5. package/lib/input.srt-listener/info.js +2 -0
  6. package/lib/input.srt-listener/info.js.map +1 -1
  7. package/lib/processor.smartSingleMediaSwitch/info.d.ts +3 -0
  8. package/lib/{processor.cascadingSwitch → processor.smartSingleMediaSwitch}/info.js +45 -40
  9. package/lib/processor.smartSingleMediaSwitch/info.js.map +1 -0
  10. package/lib/processor.smartSingleMediaSwitch/inline-view.d.ts +6 -0
  11. package/lib/processor.smartSingleMediaSwitch/inline-view.js +15 -0
  12. package/lib/processor.smartSingleMediaSwitch/inline-view.js.map +1 -0
  13. package/lib/processor.smartSingleMediaSwitch/runtime.d.ts +64 -0
  14. package/lib/processor.smartSingleMediaSwitch/runtime.js +135 -0
  15. package/lib/processor.smartSingleMediaSwitch/runtime.js.map +1 -0
  16. package/lib/processor.smartSingleMediaSwitch/source-selection.d.ts +8 -0
  17. package/lib/processor.smartSingleMediaSwitch/source-selection.js +36 -0
  18. package/lib/processor.smartSingleMediaSwitch/source-selection.js.map +1 -0
  19. package/lib/processor.smartSourceSwitch/info.d.ts +3 -0
  20. package/lib/processor.smartSourceSwitch/info.js +155 -0
  21. package/lib/processor.smartSourceSwitch/info.js.map +1 -0
  22. package/lib/processor.smartSourceSwitch/inline-view.d.ts +6 -0
  23. package/lib/processor.smartSourceSwitch/inline-view.js.map +1 -0
  24. package/lib/{processor.cascadingSwitch → processor.smartSourceSwitch}/runtime.d.ts +16 -13
  25. package/lib/{processor.cascadingSwitch → processor.smartSourceSwitch}/runtime.js +17 -13
  26. package/lib/processor.smartSourceSwitch/runtime.js.map +1 -0
  27. package/lib/processor.smartSourceSwitch/source-selection.js.map +1 -0
  28. package/lib/processor.videoDecoder/info.js +1 -1
  29. package/lib/processor.videoDecoder/info.js.map +1 -1
  30. package/lib/shared/whep.js +2 -1
  31. package/lib/shared/whep.js.map +1 -1
  32. package/lib/test/smart-single-media-switch.js +288 -0
  33. package/lib/test/smart-single-media-switch.js.map +1 -0
  34. package/lib/test/smart-source-switch.d.ts +1 -0
  35. package/lib/test/{cascading-switch.js → smart-source-switch.js} +41 -49
  36. package/lib/test/smart-source-switch.js.map +1 -0
  37. package/package.json +3 -3
  38. package/lib/processor.cascadingSwitch/info.d.ts +0 -3
  39. package/lib/processor.cascadingSwitch/info.js.map +0 -1
  40. package/lib/processor.cascadingSwitch/inline-view.d.ts +0 -6
  41. package/lib/processor.cascadingSwitch/inline-view.js.map +0 -1
  42. package/lib/processor.cascadingSwitch/runtime.js.map +0 -1
  43. package/lib/processor.cascadingSwitch/source-selection.js.map +0 -1
  44. package/lib/test/cascading-switch.js.map +0 -1
  45. /package/client/{processor.cascadingSwitch → processor.smartSingleMediaSwitch}/extra.css +0 -0
  46. /package/lib/{processor.cascadingSwitch → processor.smartSourceSwitch}/inline-view.js +0 -0
  47. /package/lib/{processor.cascadingSwitch → processor.smartSourceSwitch}/source-selection.d.ts +0 -0
  48. /package/lib/{processor.cascadingSwitch → processor.smartSourceSwitch}/source-selection.js +0 -0
  49. /package/lib/test/{cascading-switch.d.ts → smart-single-media-switch.d.ts} +0 -0
@@ -0,0 +1,155 @@
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.default = default_1;
7
+ const source_selection_1 = __importDefault(require("./source-selection"));
8
+ const inline_view_1 = __importDefault(require("./inline-view"));
9
+ const FaSlidersH_1 = require("@react-icons/all-files/fa/FaSlidersH");
10
+ function default_1({ defineComponent, Av, common: { Resolutions, FrameRates }, }) {
11
+ function patchConfigFromSubscription(cfg, sub) {
12
+ const potentiallyNewSources = sub.expectedStreams.map((s) => s.sourceName).filter((s) => !!s);
13
+ potentiallyNewSources.forEach((s) => {
14
+ if (!cfg.sources.includes(s)) {
15
+ cfg.sources.push(s);
16
+ }
17
+ });
18
+ }
19
+ function patchMissingSubscriptions(config, subscriptions) {
20
+ const allSourceNames = subscriptions.flatMap((s) => s.expectedStreams).map((s) => s.sourceName).filter((s) => !!s);
21
+ config.sources = config.sources.filter((s) => allSourceNames.includes(s));
22
+ }
23
+ return defineComponent({
24
+ identifier: 'processor.smartSourceSwitch',
25
+ category: 'processor',
26
+ name: "Smart Source Switch",
27
+ description: "This component allows the switching between multiple upstream sources and their respective streams",
28
+ icon: FaSlidersH_1.FaSlidersH,
29
+ subscription: {
30
+ accepts: {
31
+ type: 'dynamic-streams',
32
+ mode: { type: 'multiple', groupBy: "sourceName" },
33
+ streams: () => Av.map((media) => ({ media }))
34
+ },
35
+ produces: {
36
+ type: "dynamic-streams",
37
+ streams: (cfg, input) => {
38
+ const uniqueMedia = input.map((i) => i.media).filter((m, i, a) => a.indexOf(m) === i);
39
+ return uniqueMedia.map((m) => ({
40
+ media: m,
41
+ displayName: m,
42
+ sourceName: cfg.id
43
+ }));
44
+ }
45
+ }
46
+ },
47
+ extraValidation: function (ctx) {
48
+ const streams = ctx.subscriptions.flatMap((s) => s.expectedStreams);
49
+ const uniqueMedia = streams.map((i) => i.media).filter((m, i, a) => a.indexOf(m) === i);
50
+ const uniqueSources = streams.map((i) => i.sourceName).filter((m, i, a) => a.indexOf(m) === i).filter((f) => !!f);
51
+ const missingSourceName = streams.filter((s) => !s.sourceName);
52
+ if (missingSourceName.length > 0) {
53
+ missingSourceName.forEach((s) => ctx.addError(`Stream ${s.displayName} is missing sourceName, this component requires it be set (hint: use makeProgram`));
54
+ return;
55
+ }
56
+ uniqueSources.forEach((source) => {
57
+ const missingMedia = uniqueMedia.filter((m) => !streams.find((s) => s.media == m && s.sourceName == source));
58
+ missingMedia.forEach((m) => ctx.addError(`${source} is missing ${m}, each sourceName needs the same media type`));
59
+ });
60
+ },
61
+ display: (desc) => {
62
+ return {
63
+ resolution: desc.config.resolution.width.toString() + "x" + desc.config.resolution.height.toString(),
64
+ frameRate: desc.config.frameRate.frames.toString() + "/" + desc.config.frameRate.seconds.toString(),
65
+ sources: desc.config.sources.join(",")
66
+ };
67
+ },
68
+ css: ["extra.css"],
69
+ designtime: {
70
+ uiEvents: {
71
+ onSubscriptionAdded: function (sub) {
72
+ patchConfigFromSubscription(this.config, sub);
73
+ },
74
+ onSubscriptionRemoved: function () {
75
+ patchMissingSubscriptions(this.config, this.subscriptions);
76
+ },
77
+ onNodeUpdated: function () {
78
+ this.subscriptions.forEach((s) => patchConfigFromSubscription(this.config, s));
79
+ patchMissingSubscriptions(this.config, this.subscriptions);
80
+ },
81
+ onSubscriptionUpdated: function (sub) {
82
+ patchConfigFromSubscription(this.config, sub);
83
+ patchMissingSubscriptions(this.config, this.subscriptions);
84
+ }
85
+ }
86
+ },
87
+ runtime: {
88
+ initialState: () => ({
89
+ activeSource: '',
90
+ availableSources: []
91
+ }),
92
+ handleEvent: (ev, state) => {
93
+ const evType = ev.type;
94
+ switch (evType) {
95
+ case 'active-source-changed':
96
+ return { ...state, activeSource: ev.activeSource };
97
+ case 'source-online':
98
+ state.availableSources.push(ev.source);
99
+ return { ...state };
100
+ case 'source-offline':
101
+ state.availableSources.splice(state.availableSources.indexOf(ev.source), 1);
102
+ return { ...state };
103
+ default:
104
+ assertUnreachable(evType);
105
+ }
106
+ },
107
+ inline: inline_view_1.default,
108
+ summary: inline_view_1.default,
109
+ fullscreen: inline_view_1.default
110
+ },
111
+ configForm: {
112
+ form: {
113
+ resolution: {
114
+ help: "All video will be normalised to this resolution", hint: { type: 'select', options: Resolutions, defaultValue: { width: 1920, height: 1080 } }
115
+ },
116
+ frameRate: {
117
+ help: "All video will be normalised to this frame rate", hint: { type: 'select', options: FrameRates, defaultValue: { frames: 25, seconds: 1 } }
118
+ },
119
+ sampleRate: {
120
+ help: "All audio will be normalised to this sample rate",
121
+ hint: {
122
+ defaultValue: 48000,
123
+ type: 'select', options: [
124
+ { value: 48000, display: "48000" },
125
+ { value: 44100, display: "44100" }
126
+ ]
127
+ }
128
+ },
129
+ channelLayout: {
130
+ help: "All audio will be normalised to this channel layout",
131
+ hint: {
132
+ defaultValue: "stereo",
133
+ type: 'select', options: [
134
+ { value: "mono", display: "Mono" },
135
+ { value: "stereo", display: "Stereo" }
136
+ ]
137
+ }
138
+ },
139
+ sources: {
140
+ help: "The priority order in which the sources will be chosen when available",
141
+ hint: {
142
+ type: 'custom',
143
+ component: source_selection_1.default,
144
+ defaultValue: []
145
+ }
146
+ },
147
+ notes: { help: "Notes about this component", hint: { type: 'text', optional: true } },
148
+ },
149
+ },
150
+ });
151
+ }
152
+ function assertUnreachable(_) {
153
+ throw new Error("Didn't expect to get here");
154
+ }
155
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.smartSourceSwitch/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SmartSourceSwitchState, SmartSourceSwitchConfig } from "./runtime";
2
+ declare function InlineView({ state, config }: {
3
+ state: SmartSourceSwitchState;
4
+ config: SmartSourceSwitchConfig;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ export default InlineView;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/processor.smartSourceSwitch/inline-view.tsx"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,2CAA2C,CAAC;AAClE,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AACxE,MAAM,eAAe,GAAG,+CAA+C,CAAC;AAOxE,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAsE;IACvG,OAAO,6DACL,qDAAgB,EAChB,2CACG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;wBACvB,gCAAY,SAAS,EAAE,aAAa,aAAG,CAAC,aAA/B,CAAC,CAA2C;wBACrD,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAClC,CAAC,CAAC,gCAAY,SAAS,EAAE,gBAAgB,aAAG,CAAC,qBAAlC,CAAC,CAAmD;4BAC/D,CAAC,CAAC,gCAAY,SAAS,EAAE,eAAe,aAAG,CAAC,oBAAjC,CAAC,CAAiD,CAClE,EACD,+BAAmB,SAAS,EAAE,KAAK,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,0BAAzF,UAAU,CAA8F,IAC7G,IACJ,CAAA;AACL,CAAC;AAED,kBAAe,UAAU,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { ChannelLayout, MediaNodeId, Norsk, SampleRate, StreamMetadata, StreamSwitchSmoothNode, VideoTestcardGeneratorNode } from '@norskvideo/norsk-sdk';
2
2
  import { SilenceSource } from '../input.silence/runtime';
3
3
  import { OnCreated, ServerComponentDefinition, StudioComponentInputStream, StudioRuntime } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
4
- import { CustomAutoDuplexNode, SubscriptionOpts } from "@norskvideo/norsk-studio/lib/extension/base-nodes";
5
- export type CascadingSwitchConfig = {
4
+ import { CustomAutoDuplexNode } from "@norskvideo/norsk-studio/lib/extension/base-nodes";
5
+ import { Media } from '@norskvideo/norsk-studio/lib/extension/client-types';
6
+ export type SmartSourceSwitchConfig = {
6
7
  id: MediaNodeId;
7
8
  displayName: string;
8
9
  notes?: string;
@@ -18,11 +19,11 @@ export type CascadingSwitchConfig = {
18
19
  channelLayout: ChannelLayout;
19
20
  sources: string[];
20
21
  };
21
- export type CascadingSwitchState = {
22
+ export type SmartSourceSwitchState = {
22
23
  activeSource: string;
23
24
  availableSources: string[];
24
25
  };
25
- export type CascadingSwitchEvent = {
26
+ export type SmartSourceSwitchEvent = {
26
27
  type: 'active-source-changed';
27
28
  activeSource: string;
28
29
  } | {
@@ -32,29 +33,31 @@ export type CascadingSwitchEvent = {
32
33
  type: 'source-offline';
33
34
  source: string;
34
35
  };
35
- export type CascadingSwitchCommand = object;
36
- export default class CascadingSwitchDefinition implements ServerComponentDefinition<CascadingSwitchConfig, CascadingSwitch, CascadingSwitchState, CascadingSwitchCommand, CascadingSwitchEvent> {
37
- create(norsk: Norsk, cfg: CascadingSwitchConfig, cb: OnCreated<CascadingSwitch>, { updates }: StudioRuntime<CascadingSwitchState, CascadingSwitchCommand, CascadingSwitchEvent>): Promise<void>;
36
+ export type SmartSourceSwitchCommand = object;
37
+ export default class SmartSourceSwitchDefinition implements ServerComponentDefinition<SmartSourceSwitchConfig, SmartSourceSwitch, SmartSourceSwitchState, SmartSourceSwitchCommand, SmartSourceSwitchEvent> {
38
+ create(norsk: Norsk, cfg: SmartSourceSwitchConfig, cb: OnCreated<SmartSourceSwitch>, { updates }: StudioRuntime<SmartSourceSwitchState, SmartSourceSwitchCommand, SmartSourceSwitchEvent>): Promise<void>;
38
39
  }
39
- type CascadingSwitchConfigComplete = {
40
+ type SmartSourceSwitchConfigComplete = {
40
41
  onActiveSourceChanged: (source: string) => void;
41
42
  onSourceOnline: (source: string) => void;
42
43
  onSourceOffline: (source: string) => void;
43
- } & CascadingSwitchConfig;
44
- export declare class CascadingSwitch extends CustomAutoDuplexNode {
44
+ } & SmartSourceSwitchConfig;
45
+ export declare class SmartSourceSwitch extends CustomAutoDuplexNode {
45
46
  norsk: Norsk;
46
- cfg: CascadingSwitchConfigComplete;
47
+ cfg: SmartSourceSwitchConfigComplete;
47
48
  audio?: SilenceSource;
48
49
  video?: VideoTestcardGeneratorNode;
49
50
  smooth?: StreamSwitchSmoothNode<string>;
50
51
  initialised: Promise<void>;
51
52
  activeSource: string;
52
53
  availableSources: string[];
54
+ subscriptions: StudioComponentInputStream[];
55
+ media: Media[];
53
56
  initialise(): Promise<void>;
54
- constructor(norsk: Norsk, cfg: CascadingSwitchConfigComplete);
57
+ constructor(norsk: Norsk, cfg: SmartSourceSwitchConfigComplete);
55
58
  onTransitionComplete(): void;
56
59
  onSwitchContext(allStreams: Map<string, StreamMetadata[]>): Promise<void>;
57
- subscribe(subs: StudioComponentInputStream[], opts?: SubscriptionOpts): Promise<void>;
60
+ subscribe(subs: StudioComponentInputStream[]): Promise<void>;
58
61
  close(): Promise<void>;
59
62
  }
60
63
  export {};
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CascadingSwitch = void 0;
3
+ exports.SmartSourceSwitch = void 0;
4
4
  const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
5
5
  const runtime_1 = require("../input.silence/runtime");
6
6
  const base_nodes_1 = require("@norskvideo/norsk-studio/lib/extension/base-nodes");
7
- class CascadingSwitchDefinition {
7
+ class SmartSourceSwitchDefinition {
8
8
  async create(norsk, cfg, cb, { updates }) {
9
9
  const onActiveSourceChanged = (activeSource) => {
10
10
  updates.raiseEvent({ type: 'active-source-changed', activeSource });
@@ -16,13 +16,13 @@ class CascadingSwitchDefinition {
16
16
  updates.raiseEvent({ type: 'source-offline', source });
17
17
  };
18
18
  const cfgWithHooks = { onActiveSourceChanged, onSourceOnline, onSourceOffline, ...cfg };
19
- const node = new CascadingSwitch(norsk, cfgWithHooks);
19
+ const node = new SmartSourceSwitch(norsk, cfgWithHooks);
20
20
  await node.initialised;
21
21
  cb(node);
22
22
  }
23
23
  }
24
- exports.default = CascadingSwitchDefinition;
25
- class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
24
+ exports.default = SmartSourceSwitchDefinition;
25
+ class SmartSourceSwitch extends base_nodes_1.CustomAutoDuplexNode {
26
26
  norsk;
27
27
  cfg;
28
28
  audio;
@@ -31,6 +31,8 @@ class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
31
31
  initialised;
32
32
  activeSource = '';
33
33
  availableSources = [];
34
+ subscriptions = [];
35
+ media = [];
34
36
  async initialise() {
35
37
  const audio = await runtime_1.SilenceSource.create(this.norsk, {
36
38
  id: `${this.cfg.id}-audio-silence`,
@@ -47,7 +49,7 @@ class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
47
49
  });
48
50
  const smooth = await this.norsk.processor.control.streamSwitchSmooth({
49
51
  id: `${this.cfg.id}-switch`,
50
- outputSource: "output",
52
+ outputSource: this.cfg.id,
51
53
  activeSource: "fallback",
52
54
  outputResolution: this.cfg.resolution,
53
55
  frameRate: this.cfg.frameRate,
@@ -75,7 +77,7 @@ class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
75
77
  const oldSources = this.availableSources;
76
78
  this.availableSources = this.cfg.sources.filter((s) => {
77
79
  const matching = allStreams.get(s);
78
- return matching?.length == 2;
80
+ return matching?.length == this.media.length;
79
81
  });
80
82
  const active = this.availableSources.at(0);
81
83
  if (active && this.activeSource != active) {
@@ -95,17 +97,19 @@ class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
95
97
  this.cfg?.onSourceOnline(current);
96
98
  }
97
99
  }
98
- async subscribe(subs, opts) {
100
+ async subscribe(subs) {
101
+ this.subscriptions = subs;
102
+ this.media = subs.map((s) => s.definition.media).filter((m, i, a) => a.indexOf(m) == i);
99
103
  const subscriptions = subs.flatMap((s) => {
100
- return s.selectToPin(s.source.id);
104
+ return s.selectToPin(s.definition.sourceName ?? "missing");
101
105
  }).filter((x) => !!x) ?? [];
102
- if (this.audio)
106
+ if (this.audio && this.media.includes("audio"))
103
107
  subscriptions.push({ source: (this.audio.relatedMediaNodes.output[0]), sourceSelector: (0, norsk_sdk_1.audioToPin)("fallback") });
104
- if (this.video)
108
+ if (this.video && this.media.includes("video"))
105
109
  subscriptions.push({
106
110
  source: this.video, sourceSelector: (0, norsk_sdk_1.videoToPin)("fallback")
107
111
  });
108
- this.smooth?.subscribeToPins(subscriptions, opts?.requireOneOfEverything ? (ctx) => ctx.streams.length == (subs.length * 2) + 2 : undefined);
112
+ this.smooth?.subscribeToPins(subscriptions, () => true);
109
113
  }
110
114
  async close() {
111
115
  await super.close();
@@ -113,5 +117,5 @@ class CascadingSwitch extends base_nodes_1.CustomAutoDuplexNode {
113
117
  await this.video?.close();
114
118
  }
115
119
  }
116
- exports.CascadingSwitch = CascadingSwitch;
120
+ exports.SmartSourceSwitch = SmartSourceSwitch;
117
121
  //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/processor.smartSourceSwitch/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-selection.js","sourceRoot":"","sources":["../../src/processor.smartSourceSwitch/source-selection.tsx"],"names":[],"mappings":";;;AAAA,iCAA4C;AAQ5C,SAAS,UAAU,CAAC,KAAsB;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAE7D,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,8BAAG,SAAS,EAAC,yBAAyB,yFAA6E,CAAA;IAC5H,CAAC;SAAM,CAAC;QACN,OAAO,gCAAK,EAAE,EAAE,KAAK,CAAC,EAAE,YACtB,yCACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;oBACnB,OAAO,gCAAY,SAAS,EAAC,MAAM,aACjC,iCAAM,SAAS,EAAC,6BAA6B,YAAE,CAAC,GAAQ,EACvD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,kDAAK,CAAC,CAAC,CAAC,gCAAK,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,EAAE,GAAG,EAAE,SAAS,EAAC,mEAAmE,YAC7M,iCAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,uCAAuC,GAAG,GAC3F,EACL,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kDAAK,CAAC,CAAC,CAAC,gCAAK,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,EAAE,GAAG,EAAE,SAAS,EAAC,mEAAmE,YAC9N,iCAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,2CAA2C,GAAG,GAC/F,KAPQ,CAAC,CAQZ,CAAA;gBACP,CAAC,CAAC,GACC,GACA,CAAA;IACT,CAAC;IAED,SAAS,MAAM,CAAC,EAAU;QACxB,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtB,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAA;IACH,CAAC;IAED,SAAS,QAAQ,CAAC,EAAU;QAC1B,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvB,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAA;IACH,CAAC;AACH,CAAC;AAED,kBAAe,UAAU,CAAC"}
@@ -6,7 +6,7 @@ function default_1({ defineComponent, }) {
6
6
  return defineComponent({
7
7
  identifier: 'processor.videoDecoder',
8
8
  category: 'processor',
9
- name: "Video Decoder",
9
+ name: "Video Decode",
10
10
  description: "Explicit video decode.",
11
11
  icon: FaFileVideo_1.FaFileVideo,
12
12
  subscription: {
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.videoDecoder/info.ts"],"names":[],"mappings":";;AAIA,4BA8CC;AAhDD,uEAAoE;AAEpE,mBAAwB,EACtB,eAAe,GACF;IACb,OAAO,eAAe,CAAqB;QACzC,UAAU,EAAE,wBAAwB;QACpC,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,yBAAW;QACjB,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;SACF;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACtB,MAAM,SAAS,GAA2B;gBACxC,YAAY,EAAE,MAAM,CAAC,IAAI;aAC1B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,UAAU;wBACxB,OAAO,EAAE;4BACP,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;4BAC1C,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACtC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;yBACvC;qBACF;iBACF;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;aACtF;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.videoDecoder/info.ts"],"names":[],"mappings":";;AAIA,4BA8CC;AAhDD,uEAAoE;AAEpE,mBAAwB,EACtB,eAAe,GACF;IACb,OAAO,eAAe,CAAqB;QACzC,UAAU,EAAE,wBAAwB;QACpC,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,yBAAW;QACjB,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;aACZ;SACF;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACtB,MAAM,SAAS,GAA2B;gBACxC,YAAY,EAAE,MAAM,CAAC,IAAI;aAC1B,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,UAAU;wBACxB,OAAO,EAAE;4BACP,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;4BAC1C,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACtC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;yBACvC;qBACF;iBACF;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;aACtF;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -28,7 +28,8 @@ class NorskWhepClient extends webrtc_client_1.WhepClient {
28
28
  const validTracks = [this.outputAudioTrack, this.outputVideoTracks[0]].filter((v) => v !== undefined);
29
29
  console.log("NorskWhepClient adding output element, valid tracks: ", validTracks);
30
30
  const stream = new MediaStream(validTracks);
31
- if (this.container) {
31
+ const numVideoTracks = this.container?.querySelectorAll("video").length || 0;
32
+ if (this.container && numVideoTracks == 0) {
32
33
  this.videoElements.push(createPlayerElement(stream, this.container));
33
34
  }
34
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"whep.js","sourceRoot":"","sources":["../../src/shared/whep.ts"],"names":[],"mappings":";;;AAAA,6DAAuD;AAEvD,MAAa,eAAgB,SAAQ,0BAAU;IAC7C,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;IAE1B,KAAK,CAAC,cAAc,CAAC,EAAiB;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;QAG/C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC;YACnC,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAGD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACzI,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF;AAtCD,0CAsCC;AAGD,SAAS,mBAAmB,CAAC,MAAmB,EAAE,SAAsB;IACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"whep.js","sourceRoot":"","sources":["../../src/shared/whep.ts"],"names":[],"mappings":";;;AAAA,6DAAuD;AAEvD,MAAa,eAAgB,SAAQ,0BAAU;IAC7C,QAAQ,GAAY,KAAK,CAAC;IAC1B,QAAQ,GAAY,KAAK,CAAC;IAE1B,KAAK,CAAC,cAAc,CAAC,EAAiB;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;QAG/C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC;YACnC,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAGD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACzI,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;QAG5C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAA;QAE5E,IAAI,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF;AAzCD,0CAyCC;AAGD,SAAS,mBAAmB,CAAC,MAAmB,EAAE,SAAsB;IACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}