@norskvideo/norsk-studio-built-ins 1.11.6 → 1.12.0-2025-01-27-b21c8c91
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/README.md +16 -0
- package/client/info.js +1278 -776
- package/client/output.whep/styles.css +9 -0
- package/client/style.css +501 -858
- package/lib/info.js +4 -8
- package/lib/info.js.map +1 -1
- package/lib/input.rtmp/info.js +2 -1
- package/lib/input.rtmp/info.js.map +1 -1
- package/lib/input.rtmp/openApi.d.ts +133 -0
- package/lib/input.rtmp/openApi.js +3 -0
- package/lib/input.rtmp/openApi.js.map +1 -0
- package/lib/input.rtmp/runtime.d.ts +24 -5
- package/lib/input.rtmp/runtime.js +166 -60
- 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 +26 -6
- package/lib/input.rtmp/summary-view.js.map +1 -1
- package/lib/input.rtmp/types.yaml +99 -0
- package/lib/input.silence/info.js +3 -2
- package/lib/input.silence/info.js.map +1 -1
- package/lib/input.srt-caller/info.js +6 -5
- package/lib/input.srt-caller/info.js.map +1 -1
- package/lib/input.srt-caller/runtime.d.ts +1 -1
- package/lib/input.srt-listener/info.js +7 -5
- package/lib/input.srt-listener/info.js.map +1 -1
- package/lib/input.srt-listener/openApi.d.ts +133 -0
- package/lib/input.srt-listener/openApi.js +3 -0
- package/lib/input.srt-listener/openApi.js.map +1 -0
- package/lib/input.srt-listener/runtime.d.ts +26 -6
- package/lib/input.srt-listener/runtime.js +168 -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 +28 -4
- package/lib/input.srt-listener/summary-view.js.map +1 -1
- package/lib/input.srt-listener/types.yaml +99 -0
- package/lib/input.udp-ts/info.d.ts +1 -1
- package/lib/input.udp-ts/info.js +5 -4
- package/lib/input.udp-ts/info.js.map +1 -1
- package/lib/input.udp-ts/runtime.d.ts +1 -1
- package/lib/input.videoTestCard/info.d.ts +1 -1
- package/lib/input.videoTestCard/info.js +14 -4
- package/lib/input.videoTestCard/info.js.map +1 -1
- package/lib/output.autoCmaf/info.d.ts +2 -2
- package/lib/output.autoCmaf/info.js +65 -7
- package/lib/output.autoCmaf/info.js.map +1 -1
- package/lib/output.autoCmaf/runtime.d.ts +29 -9
- package/lib/output.autoCmaf/runtime.js +198 -60
- package/lib/output.autoCmaf/runtime.js.map +1 -1
- package/lib/output.autoCmaf/summary.js +26 -1
- package/lib/output.autoCmaf/summary.js.map +1 -1
- package/lib/output.autoCmaf/types.d.ts +101 -0
- package/lib/output.autoCmaf/types.js +3 -0
- package/lib/output.autoCmaf/types.js.map +1 -0
- package/lib/output.autoCmaf/types.yaml +28 -0
- package/lib/output.preview/info.js +4 -2
- 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 +8 -4
- package/lib/output.preview/inline-view.js.map +1 -1
- package/lib/output.preview/runtime.d.ts +4 -3
- package/lib/output.preview/runtime.js +29 -18
- package/lib/output.preview/runtime.js.map +1 -1
- package/lib/output.rtmp/info.js +1 -0
- package/lib/output.rtmp/info.js.map +1 -1
- package/lib/output.rtmp/inline-view.js +2 -2
- package/lib/output.rtmp/runtime.d.ts +2 -2
- package/lib/output.rtmp/runtime.js.map +1 -1
- package/lib/output.srt/info.d.ts +2 -2
- package/lib/output.srt/info.js +26 -5
- package/lib/output.srt/info.js.map +1 -1
- package/lib/output.srt/runtime.d.ts +30 -5
- package/lib/output.srt/runtime.js +139 -5
- package/lib/output.srt/runtime.js.map +1 -1
- 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 +1 -0
- 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 -1
- package/lib/output.statistics/runtime.js.map +1 -1
- package/lib/output.udpTs/info.d.ts +1 -1
- package/lib/output.udpTs/info.js +4 -3
- package/lib/output.udpTs/info.js.map +1 -1
- package/lib/output.udpTs/runtime.d.ts +1 -1
- package/lib/output.whep/info.d.ts +2 -2
- package/lib/output.whep/info.js +48 -0
- 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 +24 -0
- package/lib/output.whep/inline-view.js.map +1 -0
- package/lib/output.whep/runtime.d.ts +26 -5
- package/lib/output.whep/runtime.js +64 -13
- package/lib/output.whep/runtime.js.map +1 -1
- 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.browserOverlay/info.d.ts +2 -2
- package/lib/processor.browserOverlay/info.js +56 -2
- package/lib/processor.browserOverlay/info.js.map +1 -1
- package/lib/processor.browserOverlay/inline-view.d.ts +6 -0
- package/lib/processor.browserOverlay/inline-view.js +8 -0
- package/lib/processor.browserOverlay/inline-view.js.map +1 -0
- package/lib/processor.browserOverlay/openApi.d.ts +174 -0
- package/lib/processor.browserOverlay/openApi.js +3 -0
- package/lib/processor.browserOverlay/openApi.js.map +1 -0
- package/lib/processor.browserOverlay/runtime.d.ts +40 -6
- package/lib/processor.browserOverlay/runtime.js +151 -23
- package/lib/processor.browserOverlay/runtime.js.map +1 -1
- package/lib/processor.browserOverlay/summary-view.d.ts +4 -0
- package/lib/processor.browserOverlay/summary-view.js +27 -0
- package/lib/processor.browserOverlay/summary-view.js.map +1 -0
- package/lib/processor.browserOverlay/types.yaml +65 -0
- package/lib/processor.cascadingSwitch/info.js +4 -3
- 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 -1
- 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.js +1 -1
- package/lib/processor.fixedLadder/codec-view.js.map +1 -1
- package/lib/processor.fixedLadder/info.js +4 -2
- package/lib/processor.fixedLadder/info.js.map +1 -1
- package/lib/processor.fixedLadder/rung-view.js +1 -1
- package/lib/processor.fixedLadder/rung-view.js.map +1 -1
- package/lib/processor.onscreenGraphic/image-selection.d.ts +9 -0
- package/lib/{processor.dynamicBug/bug-selection.js → processor.onscreenGraphic/image-selection.js} +10 -10
- package/lib/processor.onscreenGraphic/image-selection.js.map +1 -0
- package/lib/processor.onscreenGraphic/info.d.ts +3 -0
- package/lib/{processor.dynamicBug → processor.onscreenGraphic}/info.js +23 -16
- package/lib/processor.onscreenGraphic/info.js.map +1 -0
- package/lib/processor.onscreenGraphic/runtime.d.ts +91 -0
- package/lib/processor.onscreenGraphic/runtime.js +503 -0
- package/lib/processor.onscreenGraphic/runtime.js.map +1 -0
- package/lib/processor.onscreenGraphic/summary-view.d.ts +4 -0
- package/lib/processor.onscreenGraphic/summary-view.js +343 -0
- package/lib/processor.onscreenGraphic/summary-view.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.d.ts +271 -0
- package/lib/processor.onscreenGraphic/types.js +3 -0
- package/lib/processor.onscreenGraphic/types.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.yaml +211 -0
- package/lib/processor.streamKeyOverride/info.d.ts +3 -0
- package/lib/processor.streamKeyOverride/info.js +150 -0
- package/lib/processor.streamKeyOverride/info.js.map +1 -0
- package/lib/processor.streamKeyOverride/runtime.d.ts +54 -0
- package/lib/processor.streamKeyOverride/runtime.js +226 -0
- package/lib/processor.streamKeyOverride/runtime.js.map +1 -0
- package/lib/shared/drm/axinom.d.ts +2 -0
- package/lib/shared/drm/axinom.js +120 -0
- package/lib/shared/drm/axinom.js.map +1 -0
- package/lib/shared/drm/cpix.d.ts +24 -0
- package/lib/shared/drm/cpix.js +97 -0
- package/lib/shared/drm/cpix.js.map +1 -0
- package/lib/shared/drm/ezdrm.d.ts +2 -0
- package/lib/shared/drm/ezdrm.js +26 -0
- package/lib/shared/drm/ezdrm.js.map +1 -0
- package/lib/shared/srt-socket-options.js +6 -6
- package/lib/shared/srt-socket-options.js.map +1 -1
- package/lib/test/auto-cmaf.js +25 -17
- package/lib/test/auto-cmaf.js.map +1 -1
- package/lib/test/browser-overlay.js +1 -0
- package/lib/test/browser-overlay.js.map +1 -1
- package/lib/test/{dynamic-bug.js → onscreen-graphic.js} +139 -106
- package/lib/test/onscreen-graphic.js.map +1 -0
- package/lib/test/preview.js +3 -3
- 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/srt-input-caller.js +5 -5
- package/lib/test/srt-input-caller.js.map +1 -1
- package/lib/test/srt-input-listener.js +99 -18
- package/lib/test/srt-input-listener.js.map +1 -1
- package/lib/test/srt-output.js +2 -2
- package/lib/test/srt-output.js.map +1 -1
- package/lib/test/udp-output.js +2 -2
- package/lib/test/udp-output.js.map +1 -1
- package/lib/test/udp-ts-input.js +2 -2
- package/lib/test/udp-ts-input.js.map +1 -1
- package/lib/test/whep-output.js +8 -2
- package/lib/test/whep-output.js.map +1 -1
- package/lib/{util.latency → util.stats.latency}/info.js +2 -1
- package/lib/util.stats.latency/info.js.map +1 -0
- package/lib/util.stats.latency/inline-view.js.map +1 -0
- package/lib/{util.latency → util.stats.latency}/runtime.d.ts +1 -1
- package/lib/{util.latency → util.stats.latency}/runtime.js +2 -2
- package/lib/util.stats.latency/runtime.js.map +1 -0
- package/lib/util.stats.latency/source-node-selection.js.map +1 -0
- package/package.json +12 -5
- package/lib/processor.dynamicBug/bug-selection.d.ts +0 -9
- package/lib/processor.dynamicBug/bug-selection.js.map +0 -1
- package/lib/processor.dynamicBug/info.d.ts +0 -3
- package/lib/processor.dynamicBug/info.js.map +0 -1
- package/lib/processor.dynamicBug/runtime.d.ts +0 -64
- package/lib/processor.dynamicBug/runtime.js +0 -297
- package/lib/processor.dynamicBug/runtime.js.map +0 -1
- package/lib/processor.dynamicBug/summary-view.d.ts +0 -4
- package/lib/processor.dynamicBug/summary-view.js +0 -60
- package/lib/processor.dynamicBug/summary-view.js.map +0 -1
- package/lib/processor.whisper-transcribe/info.d.ts +0 -3
- package/lib/processor.whisper-transcribe/info.js +0 -43
- 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/test/dynamic-bug.js.map +0 -1
- package/lib/util.latency/info.js.map +0 -1
- package/lib/util.latency/inline-view.js.map +0 -1
- package/lib/util.latency/runtime.js.map +0 -1
- package/lib/util.latency/source-node-selection.js.map +0 -1
- package/lib/util.ma35d/info.d.ts +0 -3
- package/lib/util.ma35d/info.js +0 -78
- package/lib/util.ma35d/info.js.map +0 -1
- package/lib/util.ma35d/inline-view.d.ts +0 -6
- package/lib/util.ma35d/inline-view.js +0 -76
- package/lib/util.ma35d/inline-view.js.map +0 -1
- package/lib/util.ma35d/runtime.d.ts +0 -21
- package/lib/util.ma35d/runtime.js +0 -49
- package/lib/util.ma35d/runtime.js.map +0 -1
- package/lib/util.timestamps/info.d.ts +0 -5
- package/lib/util.timestamps/info.js +0 -86
- 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/test/{dynamic-bug.d.ts → onscreen-graphic.d.ts} +0 -0
- /package/lib/{util.latency → util.stats.latency}/info.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/inline-view.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/inline-view.js +0 -0
- /package/lib/{util.latency → util.stats.latency}/source-node-selection.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/source-node-selection.js +0 -0
@@ -0,0 +1,211 @@
|
|
1
|
+
openapi: 3.0.0
|
2
|
+
info:
|
3
|
+
title: Onscreen Graphics Overlay Component
|
4
|
+
version: 1.0.0
|
5
|
+
|
6
|
+
paths:
|
7
|
+
# Static paths (available at runtime and design time)
|
8
|
+
/graphics:
|
9
|
+
get:
|
10
|
+
summary: Return the currently available graphic files
|
11
|
+
description: Returns all the graphics files on the server
|
12
|
+
x-route-type: static
|
13
|
+
responses:
|
14
|
+
200:
|
15
|
+
description: Successful operation
|
16
|
+
content:
|
17
|
+
application/json:
|
18
|
+
schema:
|
19
|
+
type: array
|
20
|
+
description: A list of the graphic files available
|
21
|
+
items:
|
22
|
+
$ref: "#/components/schemas/graphic"
|
23
|
+
post:
|
24
|
+
summary: Upload a new graphic
|
25
|
+
description: Upload a new graphic as a multi-part form POST
|
26
|
+
x-route-type: static
|
27
|
+
requestBody:
|
28
|
+
description: A multipart form containing the file to upload)
|
29
|
+
content:
|
30
|
+
multipart/form-data:
|
31
|
+
schema:
|
32
|
+
type: object
|
33
|
+
properties:
|
34
|
+
# The property name 'file' will be used for all files.
|
35
|
+
file:
|
36
|
+
type: string
|
37
|
+
format: binary
|
38
|
+
required: [file]
|
39
|
+
responses:
|
40
|
+
204:
|
41
|
+
description: The file was uploaded successfully
|
42
|
+
400:
|
43
|
+
description: No file was uploaded
|
44
|
+
404:
|
45
|
+
description: Not Found
|
46
|
+
409:
|
47
|
+
description: A graphic with the same name already exists
|
48
|
+
500:
|
49
|
+
description: File upload failed
|
50
|
+
/graphic:
|
51
|
+
delete:
|
52
|
+
summary: Delete a graphic file from the server
|
53
|
+
description: Deletes the passed filename from the server if present
|
54
|
+
x-route-type: static
|
55
|
+
tags: [foo]
|
56
|
+
requestBody:
|
57
|
+
description: The graphic to delete
|
58
|
+
content:
|
59
|
+
application/json:
|
60
|
+
schema:
|
61
|
+
type: object
|
62
|
+
properties:
|
63
|
+
filename:
|
64
|
+
type: string
|
65
|
+
description: 'The name of the graphic file to delete'
|
66
|
+
example: graphic.png
|
67
|
+
required: ['filename']
|
68
|
+
responses:
|
69
|
+
204:
|
70
|
+
description: The graphic was successfully deleted
|
71
|
+
404:
|
72
|
+
description: The specified graphic was not found
|
73
|
+
500:
|
74
|
+
description: Failed to delete the graphic
|
75
|
+
# Component instance paths (available at runtime only)
|
76
|
+
/active-graphic:
|
77
|
+
get:
|
78
|
+
summary: Info about the current graphic
|
79
|
+
description: Returns the configuration for current the onscreen graphic is any
|
80
|
+
x-route-type: instance
|
81
|
+
responses:
|
82
|
+
200:
|
83
|
+
description: Details of the configured graphic
|
84
|
+
content:
|
85
|
+
application/json:
|
86
|
+
schema:
|
87
|
+
$ref: "#/components/schemas/config"
|
88
|
+
204:
|
89
|
+
description: No graphic configured
|
90
|
+
404:
|
91
|
+
description: Component not found
|
92
|
+
post:
|
93
|
+
summary: Change the current graphic file and/or position
|
94
|
+
description: Change the current graphic file and/or position
|
95
|
+
x-route-type: instance
|
96
|
+
requestBody:
|
97
|
+
description: The graphic filename and location (sending an empty JSON object will delete the graphic)
|
98
|
+
content:
|
99
|
+
application/json:
|
100
|
+
schema:
|
101
|
+
oneOf:
|
102
|
+
- $ref: "#/components/schemas/config"
|
103
|
+
- $ref: "#/components/schemas/emptyObject"
|
104
|
+
responses:
|
105
|
+
204:
|
106
|
+
description: The active graphic was successfully updated
|
107
|
+
400:
|
108
|
+
description: Invalid request
|
109
|
+
content:
|
110
|
+
application/json:
|
111
|
+
schema:
|
112
|
+
$ref: '#/components/schemas/errorResponse'
|
113
|
+
404:
|
114
|
+
description: Component not found
|
115
|
+
delete:
|
116
|
+
summary: Stop displaying the current graphic
|
117
|
+
x-route-type: instance
|
118
|
+
responses:
|
119
|
+
204:
|
120
|
+
description: The active graphic was successfully hidden
|
121
|
+
404:
|
122
|
+
description: Component not found
|
123
|
+
components:
|
124
|
+
schemas:
|
125
|
+
graphic:
|
126
|
+
type: string
|
127
|
+
description: The name of the image file
|
128
|
+
example: Norsk.png
|
129
|
+
|
130
|
+
coordinatePosition:
|
131
|
+
type: object
|
132
|
+
properties:
|
133
|
+
type:
|
134
|
+
type: string
|
135
|
+
enum: ['coordinate']
|
136
|
+
x:
|
137
|
+
type: number
|
138
|
+
description: X coordinate position (pixels)
|
139
|
+
minimum: 0
|
140
|
+
y:
|
141
|
+
type: number
|
142
|
+
description: Y coordinate position (pixels)
|
143
|
+
minimum: 0
|
144
|
+
required:
|
145
|
+
- type
|
146
|
+
- x
|
147
|
+
- y
|
148
|
+
|
149
|
+
percentagePosition:
|
150
|
+
type: object
|
151
|
+
properties:
|
152
|
+
type:
|
153
|
+
type: string
|
154
|
+
enum: ['percentage']
|
155
|
+
x:
|
156
|
+
type: number
|
157
|
+
description: X coordinate percentage
|
158
|
+
minimum: 0
|
159
|
+
maximum: 100
|
160
|
+
y:
|
161
|
+
type: number
|
162
|
+
description: Y coordinate percentage
|
163
|
+
minimum: 0
|
164
|
+
maximum: 100
|
165
|
+
required:
|
166
|
+
- type
|
167
|
+
- x
|
168
|
+
- y
|
169
|
+
|
170
|
+
namedPosition:
|
171
|
+
type: object
|
172
|
+
properties:
|
173
|
+
type:
|
174
|
+
type: string
|
175
|
+
enum: ['named']
|
176
|
+
position:
|
177
|
+
type: string
|
178
|
+
enum: [topleft, topright, bottomleft, bottomright, center]
|
179
|
+
description: Named position for the graphic
|
180
|
+
required:
|
181
|
+
- type
|
182
|
+
- position
|
183
|
+
|
184
|
+
position:
|
185
|
+
oneOf:
|
186
|
+
- $ref: '#/components/schemas/coordinatePosition'
|
187
|
+
- $ref: '#/components/schemas/namedPosition'
|
188
|
+
|
189
|
+
config:
|
190
|
+
type: object
|
191
|
+
description: The configuration for the onscreen graphic
|
192
|
+
properties:
|
193
|
+
graphic:
|
194
|
+
$ref: "#/components/schemas/graphic"
|
195
|
+
position:
|
196
|
+
$ref: "#/components/schemas/position"
|
197
|
+
|
198
|
+
emptyObject:
|
199
|
+
type: object
|
200
|
+
example: {}
|
201
|
+
|
202
|
+
errorResponse:
|
203
|
+
type: object
|
204
|
+
description: Details of why the request failed
|
205
|
+
properties:
|
206
|
+
error:
|
207
|
+
type: string
|
208
|
+
description: A description of the error
|
209
|
+
details:
|
210
|
+
type: string
|
211
|
+
description: The unacceptable data
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
|
2
|
+
import type { StreamKeyOverrideConfig } from "./runtime";
|
3
|
+
export default function ({ defineComponent, All, validation: { Z }, }: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<StreamKeyOverrideConfig, object, object, object>;
|
@@ -0,0 +1,150 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.default = default_1;
|
4
|
+
function default_1({ defineComponent, All, validation: { Z }, }) {
|
5
|
+
return defineComponent({
|
6
|
+
identifier: 'processor.StreamKeyOverride',
|
7
|
+
category: 'processor',
|
8
|
+
name: "Stream Key Override",
|
9
|
+
description: "Override stream keys for several streams at once, setting some components of the keys and optionally incrementing stream ID.",
|
10
|
+
subscription: {
|
11
|
+
accepts: {
|
12
|
+
type: 'multi-stream',
|
13
|
+
media: All
|
14
|
+
},
|
15
|
+
produces: {
|
16
|
+
type: "fixed-list",
|
17
|
+
possibleMedia: All,
|
18
|
+
keys: (cfg, subs) => {
|
19
|
+
const outputs = subs.flatMap(sub => {
|
20
|
+
const sourceNode = sub.document.components[sub.source];
|
21
|
+
if (!sourceNode)
|
22
|
+
return [];
|
23
|
+
const produces = sourceNode.info.subscription.produces;
|
24
|
+
if (produces?.type === "fixed-list") {
|
25
|
+
return produces
|
26
|
+
.keys(sourceNode.config, sourceNode.subscriptions)
|
27
|
+
.map(sel => ({ ...sel, key: `${sourceNode.id}-${sel.key}`, display: `${sourceNode.config.displayName}: ${sel.display}` }));
|
28
|
+
}
|
29
|
+
else {
|
30
|
+
return [{ key: `${sourceNode.id}`, display: `${sourceNode.config.displayName}`, media: produces ? produces.media : All }];
|
31
|
+
}
|
32
|
+
});
|
33
|
+
if (cfg.output === 'merged') {
|
34
|
+
const media = Array.from(new Set(outputs.flatMap(x => x.media)));
|
35
|
+
return [{ key: `merged`, display: "Merged", media }];
|
36
|
+
}
|
37
|
+
return outputs;
|
38
|
+
},
|
39
|
+
selector: () => {
|
40
|
+
console.error("Use selectOutputs from process.streamKeyOverride/runtime.ts, not selector from info.ts");
|
41
|
+
return [];
|
42
|
+
},
|
43
|
+
}
|
44
|
+
},
|
45
|
+
display: ({ config }) => {
|
46
|
+
const disp = {};
|
47
|
+
disp.mode = config.mode || "simple";
|
48
|
+
disp.output = config.output || "individually-selectable";
|
49
|
+
if (config.sourceName) {
|
50
|
+
disp.sourceName = config.sourceName;
|
51
|
+
}
|
52
|
+
if (config.programNumber !== undefined) {
|
53
|
+
disp.programNumber = String(config.programNumber);
|
54
|
+
}
|
55
|
+
if (config.streamId !== undefined) {
|
56
|
+
disp.streamId = String(config.streamId);
|
57
|
+
}
|
58
|
+
if (config.renditionName) {
|
59
|
+
disp.renditionName = config.renditionName;
|
60
|
+
}
|
61
|
+
return disp;
|
62
|
+
},
|
63
|
+
extraValidation: (ctx) => {
|
64
|
+
const { config, subscriptions } = ctx;
|
65
|
+
if ((config.mode || "simple") == "simple" && config.sourceName && config.programNumber !== undefined && config.streamId !== undefined && config.renditionName) {
|
66
|
+
if (subscriptions.length > 1)
|
67
|
+
ctx.addError("A fully specified stream key override must only subscribe to one stream, or use a mode other than simple");
|
68
|
+
}
|
69
|
+
if (config.mode === "by-media-type" && config.streamId === undefined) {
|
70
|
+
ctx.addError("You must specify the starting streamId for a by-media-type stream key override");
|
71
|
+
}
|
72
|
+
if (config.output === "merged" && !config.sourceName) {
|
73
|
+
ctx.addError("You must specify a sourceName for a single merged output");
|
74
|
+
}
|
75
|
+
},
|
76
|
+
configForm: {
|
77
|
+
form: {
|
78
|
+
mode: {
|
79
|
+
help: "Multi-stream behavior",
|
80
|
+
hint: {
|
81
|
+
type: 'select',
|
82
|
+
defaultValue: "simple",
|
83
|
+
options: [
|
84
|
+
{
|
85
|
+
display: "Override values directly",
|
86
|
+
value: "simple",
|
87
|
+
},
|
88
|
+
{
|
89
|
+
display: "Increment stream ID by media type (video, audio, ...)",
|
90
|
+
value: "by-media-type",
|
91
|
+
},
|
92
|
+
{
|
93
|
+
display: "Increment stream ID per program in order of subscription",
|
94
|
+
value: "in-order",
|
95
|
+
},
|
96
|
+
],
|
97
|
+
},
|
98
|
+
},
|
99
|
+
output: {
|
100
|
+
help: "Output individual streams or a single merged stream",
|
101
|
+
hint: {
|
102
|
+
type: 'select',
|
103
|
+
defaultValue: "individually-selectable",
|
104
|
+
options: [
|
105
|
+
{
|
106
|
+
display: "Individual inputs can be selected in the output",
|
107
|
+
value: "individually-selectable",
|
108
|
+
},
|
109
|
+
{
|
110
|
+
display: "The outputs are merged into a single stream",
|
111
|
+
value: "merged",
|
112
|
+
},
|
113
|
+
],
|
114
|
+
},
|
115
|
+
},
|
116
|
+
sourceName: {
|
117
|
+
help: "Override source name",
|
118
|
+
hint: {
|
119
|
+
type: 'text',
|
120
|
+
optional: true,
|
121
|
+
}
|
122
|
+
},
|
123
|
+
programNumber: {
|
124
|
+
help: "Override program number",
|
125
|
+
hint: {
|
126
|
+
type: 'numeric',
|
127
|
+
optional: true,
|
128
|
+
validation: Z.number().min(0).int().optional(),
|
129
|
+
}
|
130
|
+
},
|
131
|
+
streamId: {
|
132
|
+
help: "Override stream ID",
|
133
|
+
hint: {
|
134
|
+
type: 'numeric',
|
135
|
+
optional: true,
|
136
|
+
validation: Z.number().min(0).int().optional(),
|
137
|
+
}
|
138
|
+
},
|
139
|
+
renditionName: {
|
140
|
+
help: "Override rendition name",
|
141
|
+
hint: {
|
142
|
+
type: 'text',
|
143
|
+
optional: true,
|
144
|
+
}
|
145
|
+
},
|
146
|
+
}
|
147
|
+
}
|
148
|
+
});
|
149
|
+
}
|
150
|
+
//# sourceMappingURL=info.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.streamKeyOverride/info.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { Norsk, StreamKey, StreamKeyOverrideNode, StreamMetadataMessage, SubscribeDestination, SubscriptionError } from '@norskvideo/norsk-sdk';
|
2
|
+
import { ActiveStream, CreatedMediaNode, OnCreated, RelatedMediaNodes, ServerComponentDefinition, StudioNodeSubscriptionSource } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
|
+
import { NodeDescriptionId } from '@norskvideo/norsk-studio/lib/shared/document';
|
4
|
+
export type StreamKeyOverrideConfig = {
|
5
|
+
id: string;
|
6
|
+
displayName: string;
|
7
|
+
mode: "simple" | "by-media-type" | "in-order";
|
8
|
+
output: "merged" | "individually-selectable";
|
9
|
+
sourceName?: string;
|
10
|
+
programNumber?: number;
|
11
|
+
streamId?: number;
|
12
|
+
renditionName?: string;
|
13
|
+
};
|
14
|
+
export default class StreamKeyOverrideDefinition implements ServerComponentDefinition<StreamKeyOverrideConfig, StreamKeyOverride> {
|
15
|
+
create(norsk: Norsk, cfg: StreamKeyOverrideConfig, cb: OnCreated<StreamKeyOverride>): Promise<void>;
|
16
|
+
}
|
17
|
+
type Mapping = {
|
18
|
+
from: ActiveStream;
|
19
|
+
to: StreamKey;
|
20
|
+
node?: StreamKeyOverrideNode;
|
21
|
+
nodeDescriptionId: NodeDescriptionId;
|
22
|
+
};
|
23
|
+
type Diff = {
|
24
|
+
added: Mapping[];
|
25
|
+
removed: Mapping[];
|
26
|
+
unchanged: Mapping[];
|
27
|
+
};
|
28
|
+
type History = {
|
29
|
+
sourceName: string;
|
30
|
+
programNumber: number;
|
31
|
+
lastStreamId: number;
|
32
|
+
}[];
|
33
|
+
export declare class StreamKeyOverride implements CreatedMediaNode, SubscribeDestination {
|
34
|
+
static uid: number;
|
35
|
+
norsk: Norsk;
|
36
|
+
mapping: Mapping[];
|
37
|
+
history: History;
|
38
|
+
currentSources: StudioNodeSubscriptionSource[];
|
39
|
+
cfg: StreamKeyOverrideConfig;
|
40
|
+
initialised: Promise<void>;
|
41
|
+
id: string;
|
42
|
+
relatedMediaNodes: RelatedMediaNodes;
|
43
|
+
static create(norsk: Norsk, cfg: StreamKeyOverrideConfig): Promise<StreamKeyOverride>;
|
44
|
+
constructor(norsk: Norsk, cfg: StreamKeyOverrideConfig);
|
45
|
+
initialise(): Promise<void>;
|
46
|
+
chooseStreamKey(sourceKey: StreamKey, metadata: StreamMetadataMessage): StreamKey;
|
47
|
+
subscribe(sources: StudioNodeSubscriptionSource[]): void;
|
48
|
+
sourceContextChange(_responseCallback: (error?: SubscriptionError) => void): Promise<boolean>;
|
49
|
+
diff(currentMapping: Mapping[]): Diff;
|
50
|
+
updateNodes({ added, removed, unchanged }: Diff): Promise<void>;
|
51
|
+
close(): Promise<void>;
|
52
|
+
selectOutputs(selectionKeys: string[]): StreamKey[];
|
53
|
+
}
|
54
|
+
export {};
|
@@ -0,0 +1,226 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.StreamKeyOverride = void 0;
|
4
|
+
const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
|
5
|
+
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
6
|
+
const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
|
7
|
+
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
8
|
+
class StreamKeyOverrideDefinition {
|
9
|
+
async create(norsk, cfg, cb) {
|
10
|
+
const node = await StreamKeyOverride.create(norsk, cfg);
|
11
|
+
cb(node);
|
12
|
+
}
|
13
|
+
}
|
14
|
+
exports.default = StreamKeyOverrideDefinition;
|
15
|
+
class StreamKeyOverride {
|
16
|
+
static uid = 0;
|
17
|
+
norsk;
|
18
|
+
mapping = [];
|
19
|
+
history = [];
|
20
|
+
currentSources = [];
|
21
|
+
cfg;
|
22
|
+
initialised;
|
23
|
+
id;
|
24
|
+
relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
|
25
|
+
static async create(norsk, cfg) {
|
26
|
+
const node = new StreamKeyOverride(norsk, cfg);
|
27
|
+
await node.initialised;
|
28
|
+
return node;
|
29
|
+
}
|
30
|
+
constructor(norsk, cfg) {
|
31
|
+
this.id = cfg.id;
|
32
|
+
this.cfg = cfg;
|
33
|
+
this.norsk = norsk;
|
34
|
+
this.initialised = this.initialise();
|
35
|
+
}
|
36
|
+
async initialise() {
|
37
|
+
}
|
38
|
+
chooseStreamKey(sourceKey, metadata) {
|
39
|
+
const cfg = this.cfg;
|
40
|
+
const destKey = {
|
41
|
+
sourceName: cfg.sourceName || sourceKey.sourceName,
|
42
|
+
programNumber: cfg.programNumber ?? sourceKey.programNumber,
|
43
|
+
streamId: cfg.streamId ?? sourceKey.streamId,
|
44
|
+
renditionName: cfg.renditionName || sourceKey.renditionName,
|
45
|
+
};
|
46
|
+
switch (cfg.mode) {
|
47
|
+
case "simple":
|
48
|
+
break;
|
49
|
+
case "by-media-type":
|
50
|
+
switch (metadata?.case) {
|
51
|
+
case "video":
|
52
|
+
destKey.streamId += 0;
|
53
|
+
break;
|
54
|
+
case "audio":
|
55
|
+
destKey.streamId += 1;
|
56
|
+
break;
|
57
|
+
case "subtitle":
|
58
|
+
destKey.streamId += 2;
|
59
|
+
break;
|
60
|
+
case "ancillary":
|
61
|
+
destKey.streamId += 3;
|
62
|
+
break;
|
63
|
+
case "playlist":
|
64
|
+
destKey.streamId += 4;
|
65
|
+
break;
|
66
|
+
case undefined:
|
67
|
+
destKey.streamId += 5;
|
68
|
+
break;
|
69
|
+
default:
|
70
|
+
(0, util_1.assertUnreachable)(metadata);
|
71
|
+
}
|
72
|
+
break;
|
73
|
+
case "in-order": {
|
74
|
+
for (const m of this.mapping) {
|
75
|
+
if ((0, norsk_sdk_1.streamKeysAreEqual)(sourceKey, m.from.metadata.streamKey)) {
|
76
|
+
return m.to;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
let streamId = undefined;
|
80
|
+
for (const program of this.history) {
|
81
|
+
if (program.sourceName === destKey.sourceName && program.programNumber === destKey.programNumber) {
|
82
|
+
streamId = ++program.lastStreamId;
|
83
|
+
break;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
if (streamId === undefined) {
|
87
|
+
streamId = cfg.streamId ?? 1;
|
88
|
+
this.history.push({
|
89
|
+
sourceName: destKey.sourceName,
|
90
|
+
programNumber: destKey.programNumber,
|
91
|
+
lastStreamId: streamId,
|
92
|
+
});
|
93
|
+
}
|
94
|
+
destKey.streamId = streamId;
|
95
|
+
break;
|
96
|
+
}
|
97
|
+
default:
|
98
|
+
if (cfg.mode !== undefined && cfg.mode !== "")
|
99
|
+
(0, util_1.assertUnreachable)(cfg.mode);
|
100
|
+
}
|
101
|
+
return destKey;
|
102
|
+
}
|
103
|
+
subscribe(sources) {
|
104
|
+
this.currentSources.forEach((source) => source.unregisterForContextChange(this));
|
105
|
+
this.currentSources = sources;
|
106
|
+
this.currentSources.forEach((source) => source.registerForContextChange(this));
|
107
|
+
void this.sourceContextChange(() => { });
|
108
|
+
}
|
109
|
+
async sourceContextChange(_responseCallback) {
|
110
|
+
const currentMapping = this.currentSources.flatMap(source => source.latestStreams().map(stream => {
|
111
|
+
const sourceKey = stream.metadata.streamKey;
|
112
|
+
const destKey = this.chooseStreamKey(sourceKey, stream.metadata.message);
|
113
|
+
return { from: stream, to: destKey, node: undefined, nodeDescriptionId: source.sourceDescription.id };
|
114
|
+
}));
|
115
|
+
await this.updateNodes(this.diff(currentMapping));
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
diff(currentMapping) {
|
119
|
+
const previousMapping = this.mapping.map(fromTo => ({ ...fromTo, used: false }));
|
120
|
+
const added = [];
|
121
|
+
const removed = [];
|
122
|
+
const unchanged = [];
|
123
|
+
for (const fromTo of currentMapping) {
|
124
|
+
let found = undefined;
|
125
|
+
for (const prev of previousMapping) {
|
126
|
+
if (prev.used)
|
127
|
+
continue;
|
128
|
+
if ((0, norsk_sdk_1.streamKeysAreEqual)(fromTo.from.metadata.streamKey, prev.from.metadata.streamKey)) {
|
129
|
+
found = prev;
|
130
|
+
prev.used = true;
|
131
|
+
break;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
if (!found) {
|
135
|
+
added.push(fromTo);
|
136
|
+
}
|
137
|
+
else if (!(0, norsk_sdk_1.streamKeysAreEqual)(fromTo.to, found.to)) {
|
138
|
+
added.push(fromTo);
|
139
|
+
removed.push(found);
|
140
|
+
}
|
141
|
+
else {
|
142
|
+
unchanged.push(fromTo);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
for (const prev of previousMapping) {
|
146
|
+
if (!prev.used) {
|
147
|
+
removed.push(prev);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
return { added, removed, unchanged };
|
151
|
+
}
|
152
|
+
async updateNodes({ added, removed, unchanged }) {
|
153
|
+
(0, logging_1.debuglog)("SKO update (added/removed)", added.map(showMapping), removed.map(showMapping));
|
154
|
+
const promises = [];
|
155
|
+
for (const fromTo of added) {
|
156
|
+
const awaiting = this.norsk.processor.transform.streamKeyOverride({
|
157
|
+
id: `sko.${StreamKeyOverride.uid++}[${showStreamKey(fromTo.to)}]`,
|
158
|
+
onCreate: (node) => {
|
159
|
+
this.relatedMediaNodes.addInput(node);
|
160
|
+
this.relatedMediaNodes.addOutput(node);
|
161
|
+
fromTo.node = node;
|
162
|
+
node.subscribe([{ source: fromTo.from.mediaNode, sourceSelector: () => [fromTo.from.metadata.streamKey] }]);
|
163
|
+
},
|
164
|
+
streamKey: fromTo.to,
|
165
|
+
});
|
166
|
+
promises.push(awaiting.then());
|
167
|
+
}
|
168
|
+
for (const { node } of removed) {
|
169
|
+
if (!node)
|
170
|
+
continue;
|
171
|
+
this.relatedMediaNodes.removeInput(node);
|
172
|
+
this.relatedMediaNodes.removeOutput(node);
|
173
|
+
const awaiting = node.close();
|
174
|
+
promises.push(awaiting);
|
175
|
+
}
|
176
|
+
this.mapping = added.concat(unchanged);
|
177
|
+
await Promise.all(promises);
|
178
|
+
}
|
179
|
+
async close() {
|
180
|
+
await this.updateNodes({ added: [], removed: this.mapping, unchanged: [] });
|
181
|
+
}
|
182
|
+
selectOutputs(selectionKeys) {
|
183
|
+
if (this.cfg.output === 'merged') {
|
184
|
+
if (!selectionKeys.length)
|
185
|
+
return [];
|
186
|
+
return this.mapping.map(m => m.to);
|
187
|
+
}
|
188
|
+
return this.currentSources.flatMap(source => {
|
189
|
+
const sourceNode = source.sourceDescription;
|
190
|
+
const produces = sourceNode.info.subscription.produces;
|
191
|
+
if (produces?.type != "fixed-list") {
|
192
|
+
if (selectionKeys.includes(sourceNode.id)) {
|
193
|
+
return this.mapping
|
194
|
+
.filter(m => m.nodeDescriptionId === sourceNode.id)
|
195
|
+
.map(m => m.to);
|
196
|
+
}
|
197
|
+
else {
|
198
|
+
return [];
|
199
|
+
}
|
200
|
+
}
|
201
|
+
const prefix = `${sourceNode.id}-`;
|
202
|
+
const upstreamKeys = selectionKeys
|
203
|
+
.filter(k => k.startsWith(prefix))
|
204
|
+
.map(k => k.substring(prefix.length));
|
205
|
+
const upstream = source.latestStreams(upstreamKeys).map(x => x.metadata.streamKey);
|
206
|
+
const downstream = [];
|
207
|
+
for (const sourceKey of upstream) {
|
208
|
+
for (const m of this.mapping) {
|
209
|
+
if ((0, norsk_sdk_1.streamKeysAreEqual)(sourceKey, m.from.metadata.streamKey)) {
|
210
|
+
downstream.push(m.to);
|
211
|
+
break;
|
212
|
+
}
|
213
|
+
}
|
214
|
+
}
|
215
|
+
return downstream;
|
216
|
+
});
|
217
|
+
}
|
218
|
+
}
|
219
|
+
exports.StreamKeyOverride = StreamKeyOverride;
|
220
|
+
function showMapping({ from, to }) {
|
221
|
+
return `${showStreamKey(from.metadata.streamKey)} -> ${showStreamKey(to)}`;
|
222
|
+
}
|
223
|
+
function showStreamKey(key) {
|
224
|
+
return `${key.sourceName}-${key.programNumber}-${key.streamId}-${key.renditionName}`;
|
225
|
+
}
|
226
|
+
//# sourceMappingURL=runtime.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/processor.streamKeyOverride/runtime.ts"],"names":[],"mappings":"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"}
|