@norskvideo/norsk-studio-built-ins 1.10.0 → 1.11.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/test/rtmp-input.js +59 -46
- package/lib/test/rtmp-input.js.map +1 -1
- package/lib/test/rtmp-output.js +28 -12
- package/lib/test/rtmp-output.js.map +1 -1
- package/lib/test/srt-input-caller.js +33 -19
- package/lib/test/srt-input-caller.js.map +1 -1
- package/lib/test/srt-input-listener.js +151 -82
- 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-ts-input.js +10 -9
- package/lib/test/udp-ts-input.js.map +1 -1
- package/lib/util.latency/runtime.js.map +1 -1
- package/lib/util.timestamps/runtime.js.map +1 -1
- package/package.json +3 -8
- package/client/processor.audioLevel/styles.css +0 -164
- package/client/processor.audioMixer/styles.css +0 -249
- package/lib/input.mediaconnect/flow-selection.d.ts +0 -9
- package/lib/input.mediaconnect/flow-selection.js +0 -40
- package/lib/input.mediaconnect/flow-selection.js.map +0 -1
- package/lib/input.mediaconnect/info.d.ts +0 -3
- package/lib/input.mediaconnect/info.js +0 -70
- package/lib/input.mediaconnect/info.js.map +0 -1
- package/lib/input.mediaconnect/node-view.d.ts +0 -6
- package/lib/input.mediaconnect/node-view.js +0 -38
- package/lib/input.mediaconnect/node-view.js.map +0 -1
- package/lib/input.mediaconnect/output-selection.d.ts +0 -9
- package/lib/input.mediaconnect/output-selection.js +0 -55
- package/lib/input.mediaconnect/output-selection.js.map +0 -1
- package/lib/input.mediaconnect/runtime.d.ts +0 -23
- package/lib/input.mediaconnect/runtime.js +0 -133
- package/lib/input.mediaconnect/runtime.js.map +0 -1
- package/lib/output.medialive/channel-selection.d.ts +0 -9
- package/lib/output.medialive/channel-selection.js +0 -40
- package/lib/output.medialive/channel-selection.js.map +0 -1
- package/lib/output.medialive/fullscreen.d.ts +0 -6
- package/lib/output.medialive/fullscreen.js +0 -31
- package/lib/output.medialive/fullscreen.js.map +0 -1
- package/lib/output.medialive/info.d.ts +0 -3
- package/lib/output.medialive/info.js +0 -111
- package/lib/output.medialive/info.js.map +0 -1
- package/lib/output.medialive/inline.d.ts +0 -6
- package/lib/output.medialive/inline.js +0 -30
- package/lib/output.medialive/inline.js.map +0 -1
- package/lib/output.medialive/input-selection.d.ts +0 -9
- package/lib/output.medialive/input-selection.js +0 -58
- package/lib/output.medialive/input-selection.js.map +0 -1
- package/lib/output.medialive/node-view.d.ts +0 -6
- package/lib/output.medialive/node-view.js +0 -36
- package/lib/output.medialive/node-view.js.map +0 -1
- package/lib/output.medialive/runtime.d.ts +0 -34
- package/lib/output.medialive/runtime.js +0 -142
- package/lib/output.medialive/runtime.js.map +0 -1
- package/lib/output.medialive/url-selection.d.ts +0 -9
- package/lib/output.medialive/url-selection.js +0 -45
- package/lib/output.medialive/url-selection.js.map +0 -1
- package/lib/processor.actionReplay/info.d.ts +0 -5
- package/lib/processor.actionReplay/info.js +0 -100
- package/lib/processor.actionReplay/info.js.map +0 -1
- package/lib/processor.actionReplay/runtime.d.ts +0 -59
- package/lib/processor.actionReplay/runtime.js +0 -224
- package/lib/processor.actionReplay/runtime.js.map +0 -1
- package/lib/processor.actionReplay/summary.d.ts +0 -7
- package/lib/processor.actionReplay/summary.js +0 -76
- package/lib/processor.actionReplay/summary.js.map +0 -1
- package/lib/processor.audioLevel/info.d.ts +0 -3
- package/lib/processor.audioLevel/info.js +0 -83
- package/lib/processor.audioLevel/info.js.map +0 -1
- package/lib/processor.audioLevel/inline-view.d.ts +0 -6
- package/lib/processor.audioLevel/inline-view.js +0 -23
- package/lib/processor.audioLevel/inline-view.js.map +0 -1
- package/lib/processor.audioLevel/runtime.d.ts +0 -49
- package/lib/processor.audioLevel/runtime.js +0 -82
- package/lib/processor.audioLevel/runtime.js.map +0 -1
- package/lib/processor.audioLevel/summary-view.d.ts +0 -7
- package/lib/processor.audioLevel/summary-view.js +0 -36
- package/lib/processor.audioLevel/summary-view.js.map +0 -1
- package/lib/processor.audioMixer/fullscreen-view.d.ts +0 -8
- package/lib/processor.audioMixer/fullscreen-view.js +0 -121
- package/lib/processor.audioMixer/fullscreen-view.js.map +0 -1
- package/lib/processor.audioMixer/info.d.ts +0 -4
- package/lib/processor.audioMixer/info.js +0 -148
- package/lib/processor.audioMixer/info.js.map +0 -1
- package/lib/processor.audioMixer/inline-view.d.ts +0 -7
- package/lib/processor.audioMixer/inline-view.js +0 -43
- package/lib/processor.audioMixer/inline-view.js.map +0 -1
- package/lib/processor.audioMixer/runtime.d.ts +0 -119
- package/lib/processor.audioMixer/runtime.js +0 -142
- package/lib/processor.audioMixer/runtime.js.map +0 -1
- package/lib/processor.audioMixer/summary-view.d.ts +0 -7
- package/lib/processor.audioMixer/summary-view.js +0 -11
- package/lib/processor.audioMixer/summary-view.js.map +0 -1
- package/lib/processor.aws-transcribe/info.d.ts +0 -3
- package/lib/processor.aws-transcribe/info.js +0 -81
- package/lib/processor.aws-transcribe/info.js.map +0 -1
- package/lib/processor.aws-transcribe/runtime.d.ts +0 -39
- package/lib/processor.aws-transcribe/runtime.js +0 -164
- package/lib/processor.aws-transcribe/runtime.js.map +0 -1
- package/lib/processor.aws-transcribe/transcribe-language-selection.d.ts +0 -9
- package/lib/processor.aws-transcribe/transcribe-language-selection.js +0 -40
- package/lib/processor.aws-transcribe/transcribe-language-selection.js.map +0 -1
- package/lib/processor.aws-transcribe/translate-language-selection.d.ts +0 -9
- package/lib/processor.aws-transcribe/translate-language-selection.js +0 -40
- package/lib/processor.aws-transcribe/translate-language-selection.js.map +0 -1
- package/lib/processor.fixedLadder/newFile.d.ts +0 -3
- package/lib/processor.fixedLadder/newFile.js +0 -145
- package/lib/processor.fixedLadder/newFile.js.map +0 -1
- package/lib/processor.monetise/info.d.ts +0 -3
- package/lib/processor.monetise/info.js +0 -90
- package/lib/processor.monetise/info.js.map +0 -1
- package/lib/processor.monetise/runtime.d.ts +0 -57
- package/lib/processor.monetise/runtime.js +0 -141
- package/lib/processor.monetise/runtime.js.map +0 -1
- package/lib/processor.monetise/summary.d.ts +0 -7
- package/lib/processor.monetise/summary.js +0 -39
- package/lib/processor.monetise/summary.js.map +0 -1
- package/lib/test/audio-mixer.d.ts +0 -0
- package/lib/test/audio-mixer.js +0 -2
- package/lib/test/audio-mixer.js.map +0 -1
package/lib/test/rtmp-input.js
CHANGED
@@ -33,12 +33,12 @@ const document = __importStar(require("@norskvideo/norsk-studio/lib/runtime/docu
|
|
33
33
|
const yaml_1 = __importDefault(require("yaml"));
|
34
34
|
const execution_1 = __importDefault(require("@norskvideo/norsk-studio/lib/runtime/execution"));
|
35
35
|
const sinks_1 = require("@norskvideo/norsk-studio/lib/test/_util/sinks");
|
36
|
-
const ffmpeg_1 = require("@norskvideo/norsk-studio/lib/test/_util/ffmpeg");
|
37
36
|
const info_1 = __importDefault(require("../input.rtmp/info"));
|
38
37
|
const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
|
39
38
|
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
40
39
|
const chai_1 = require("chai");
|
41
40
|
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
41
|
+
const sources_1 = require("@norskvideo/norsk-studio/lib/test/_util/sources");
|
42
42
|
async function defaultRuntime() {
|
43
43
|
const runtime = (0, builder_1.emptyRuntime)();
|
44
44
|
await (0, __1.registerAll)(runtime);
|
@@ -60,17 +60,15 @@ describe("RTMP Input", () => {
|
|
60
60
|
impl("RTMP Input with one streamid", {
|
61
61
|
id: 'rtmp',
|
62
62
|
displayName: "rtmp",
|
63
|
-
port:
|
63
|
+
port: 65403,
|
64
64
|
appName: 'yolo',
|
65
65
|
streamNames: ['first']
|
66
66
|
}, (testDocument, _cfg) => {
|
67
67
|
let norsk = undefined;
|
68
|
-
let ffmpeg = [];
|
69
|
-
afterEach(async () => {
|
70
|
-
await norsk?.close();
|
71
|
-
await Promise.all(ffmpeg.map(async (f) => f.stop()));
|
72
|
-
});
|
73
68
|
describe("A single source connects with no stream id", () => {
|
69
|
+
after(async () => {
|
70
|
+
await norsk?.close();
|
71
|
+
});
|
74
72
|
it("Should output no streams", async () => {
|
75
73
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
76
74
|
const compiled = await testDocument();
|
@@ -81,16 +79,21 @@ describe("RTMP Input", () => {
|
|
81
79
|
sink.subscribe([
|
82
80
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['rtmp'].yaml, { type: 'take-all-streams', select: ["audio", "video"] }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
83
81
|
]);
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
82
|
+
const av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
83
|
+
const rtmp = await norsk.output.rtmp({
|
84
|
+
id: "av-srt",
|
85
|
+
url: 'rtmp://127.0.0.1:65403/yolo'
|
86
|
+
});
|
87
|
+
rtmp.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
88
88
|
await (0, sinks_1.waitForAssert)(() => false, () => {
|
89
89
|
(0, chai_1.expect)(sink.streamCount()).equals(0);
|
90
90
|
}, 5000.0, 10.0);
|
91
91
|
});
|
92
92
|
});
|
93
93
|
describe("a single source connects with the wrong stream id", () => {
|
94
|
+
after(async () => {
|
95
|
+
await norsk?.close();
|
96
|
+
});
|
94
97
|
it("Should output no streams", async () => {
|
95
98
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
96
99
|
const compiled = await testDocument();
|
@@ -101,17 +104,21 @@ describe("RTMP Input", () => {
|
|
101
104
|
sink.subscribe([
|
102
105
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['rtmp'].yaml, { type: 'take-all-streams', select: client_types_1.Av }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
103
106
|
]);
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
107
|
+
const av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
108
|
+
const rtmp = await norsk.output.rtmp({
|
109
|
+
id: "av-rtmp",
|
110
|
+
url: 'rtmp://127.0.0.1:65403/yolo/wrong'
|
111
|
+
});
|
112
|
+
rtmp.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
109
113
|
await (0, sinks_1.waitForAssert)(() => false, () => {
|
110
114
|
(0, chai_1.expect)(sink.streamCount()).equals(0);
|
111
115
|
}, 5000.0, 10.0);
|
112
116
|
});
|
113
117
|
});
|
114
118
|
describe("a single source connects with the right stream id", () => {
|
119
|
+
after(async () => {
|
120
|
+
await norsk?.close();
|
121
|
+
});
|
115
122
|
it("Should output the stream with the right id", async () => {
|
116
123
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
117
124
|
const compiled = await testDocument();
|
@@ -122,11 +129,12 @@ describe("RTMP Input", () => {
|
|
122
129
|
sink.subscribe([
|
123
130
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['rtmp'].yaml, { type: 'take-all-streams', select: client_types_1.Av }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
124
131
|
]);
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
132
|
+
const av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
133
|
+
const rtmp = await norsk.output.rtmp({
|
134
|
+
id: "av-rtmp",
|
135
|
+
url: 'rtmp://127.0.0.1:65403/yolo/first'
|
136
|
+
});
|
137
|
+
rtmp.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
130
138
|
await (0, sinks_1.waitForAssert)(() => sink.streamCount() == 2 && sink.totalMessages() > 25, () => {
|
131
139
|
(0, chai_1.expect)(sink.streamCount()).equals(2);
|
132
140
|
(0, chai_1.expect)(sink.messages.find((m) => m.streamKey.sourceName == 'first')).exist;
|
@@ -134,6 +142,9 @@ describe("RTMP Input", () => {
|
|
134
142
|
});
|
135
143
|
});
|
136
144
|
describe("source re-connects with the right id", () => {
|
145
|
+
after(async () => {
|
146
|
+
await norsk?.close();
|
147
|
+
});
|
137
148
|
it("Should re-output the stream with the right id", async () => {
|
138
149
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
139
150
|
const compiled = await testDocument();
|
@@ -144,19 +155,20 @@ describe("RTMP Input", () => {
|
|
144
155
|
sink.subscribe([
|
145
156
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['rtmp'].yaml, { type: 'take-all-streams', select: client_types_1.Av }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
146
157
|
]);
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
158
|
+
const av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
159
|
+
const rtmp = await norsk.output.rtmp({
|
160
|
+
id: "av-rtmp1",
|
161
|
+
url: 'rtmp://127.0.0.1:65403/yolo/first'
|
162
|
+
});
|
163
|
+
rtmp.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
152
164
|
await (0, util_1.waitForCondition)(() => sink.streamCount() == 2);
|
153
|
-
await
|
165
|
+
await rtmp.close();
|
154
166
|
await (0, util_1.waitForCondition)(() => sink.streamCount() == 0);
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
];
|
167
|
+
const rtmp2 = await norsk.output.rtmp({
|
168
|
+
id: "av-rtmp2",
|
169
|
+
url: 'rtmp://127.0.0.1:65403/yolo/first'
|
170
|
+
});
|
171
|
+
rtmp2.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
160
172
|
await (0, sinks_1.waitForAssert)(() => sink.streamCount() == 2 && sink.totalMessages() > 25, () => {
|
161
173
|
(0, chai_1.expect)(sink.streamCount()).equals(2);
|
162
174
|
(0, chai_1.expect)(sink.messages.find((m) => m.streamKey.sourceName == 'first')).exist;
|
@@ -166,17 +178,15 @@ describe("RTMP Input", () => {
|
|
166
178
|
impl("RTMP Input with two stream names", {
|
167
179
|
id: 'rtmp',
|
168
180
|
displayName: 'rtmp',
|
169
|
-
port:
|
181
|
+
port: 65403,
|
170
182
|
appName: 'yolo',
|
171
183
|
streamNames: ['first', 'second']
|
172
184
|
}, async (testDocument, _cfg) => {
|
173
185
|
let norsk = undefined;
|
174
|
-
let ffmpeg = [];
|
175
|
-
afterEach(async () => {
|
176
|
-
await norsk?.close();
|
177
|
-
await Promise.all(ffmpeg.map(async (f) => f.stop()));
|
178
|
-
});
|
179
186
|
describe("Both sources connect", () => {
|
187
|
+
after(async () => {
|
188
|
+
await norsk?.close();
|
189
|
+
});
|
180
190
|
it("should be able to select those streams", async () => {
|
181
191
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
182
192
|
const compiled = await testDocument();
|
@@ -191,14 +201,17 @@ describe("RTMP Input", () => {
|
|
191
201
|
sink2.subscribe([
|
192
202
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['rtmp'].yaml, { type: 'take-specific-stream', select: ["audio", "video"], filter: 'second' }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
193
203
|
]);
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
204
|
+
const av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
205
|
+
const rtmp = await norsk.output.rtmp({
|
206
|
+
id: "av-rtmp1",
|
207
|
+
url: 'rtmp://127.0.0.1:65403/yolo/first'
|
208
|
+
});
|
209
|
+
rtmp.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
210
|
+
const rtmp2 = await norsk.output.rtmp({
|
211
|
+
id: "av-rtmp2",
|
212
|
+
url: 'rtmp://127.0.0.1:65403/yolo/second'
|
213
|
+
});
|
214
|
+
rtmp2.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }], norsk_sdk_1.requireAV);
|
202
215
|
await (0, sinks_1.waitForAssert)(() => sink1.streamCount() == 2 && sink1.totalMessages() > 25 && sink2.streamCount() == 2 && sink2.totalMessages() > 25, () => {
|
203
216
|
(0, chai_1.expect)(sink1.streamCount()).equal(2);
|
204
217
|
(0, chai_1.expect)(sink2.streamCount()).equal(2);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rtmp-input.js","sourceRoot":"","sources":["../../src/test/rtmp-input.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
1
|
+
{"version":3,"file":"rtmp-input.js","sourceRoot":"","sources":["../../src/test/rtmp-input.ts"],"names":[],"mappings":"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"}
|
package/lib/test/rtmp-output.js
CHANGED
@@ -34,10 +34,12 @@ const yaml_1 = __importDefault(require("yaml"));
|
|
34
34
|
const execution_1 = __importDefault(require("@norskvideo/norsk-studio/lib/runtime/execution"));
|
35
35
|
const sources_1 = require("@norskvideo/norsk-studio/lib/test/_util/sources");
|
36
36
|
const info_1 = __importDefault(require("../output.rtmp/info"));
|
37
|
+
const info_2 = __importDefault(require("../input.rtmp/info"));
|
37
38
|
const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
|
38
39
|
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
39
40
|
const sinks_1 = require("@norskvideo/norsk-studio/lib/test/_util/sinks");
|
40
41
|
const chai_1 = require("chai");
|
42
|
+
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
41
43
|
async function defaultRuntime() {
|
42
44
|
const runtime = (0, builder_1.emptyRuntime)();
|
43
45
|
await (0, __1.registerAll)(runtime);
|
@@ -47,42 +49,56 @@ describe("RTMP Output", () => {
|
|
47
49
|
async function testDocument() {
|
48
50
|
const runtime = await defaultRuntime();
|
49
51
|
const yaml = new builder_1.YamlBuilder()
|
50
|
-
.addNode(new builder_1.YamlNodeBuilder('rtmp', (0, info_1.default)(client_types_1.RegistrationConsts), { url: "rtmp://127.0.0.1:
|
52
|
+
.addNode(new builder_1.YamlNodeBuilder('rtmp', (0, info_1.default)(client_types_1.RegistrationConsts), { url: "rtmp://127.0.0.1:65403/norsk/output" }).reify())
|
53
|
+
.addNode(new builder_1.YamlNodeBuilder('input', (0, info_2.default)(client_types_1.RegistrationConsts), {
|
54
|
+
appName: 'norsk',
|
55
|
+
port: 65403,
|
56
|
+
streamNames: ['output']
|
57
|
+
}).reify())
|
51
58
|
.reify();
|
52
59
|
const compiled = document.load(__filename, runtime, yaml_1.default.stringify(yaml));
|
53
60
|
return compiled;
|
54
61
|
}
|
55
62
|
let norsk = undefined;
|
56
|
-
let ffprobe = undefined;
|
57
63
|
afterEach(async () => {
|
58
64
|
await norsk?.close();
|
59
65
|
});
|
60
66
|
it("Provides an RTMP output when there is a stream", async () => {
|
61
|
-
ffprobe = (0, sinks_1.getStreams)('rtmp://127.0.0.1:5001/norsk/output');
|
62
67
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
63
68
|
const compiled = await testDocument();
|
64
69
|
const result = await (0, execution_1.default)(norsk, compiled);
|
65
70
|
const rtmp = result.components["rtmp"];
|
71
|
+
const input = result.components["input"];
|
66
72
|
const source = await (0, sources_1.videoAndAudio)(norsk, 'source');
|
67
73
|
rtmp.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), { type: "take-first-stream", select: client_types_1.Av })], { requireOneOfEverything: true });
|
68
|
-
const
|
69
|
-
|
74
|
+
const sink = new sinks_1.TraceSink(norsk, "sink");
|
75
|
+
await sink.initialised;
|
76
|
+
sink.subscribe([
|
77
|
+
new runtime_types_1.StudioNodeSubscriptionSource(input, compiled.components['input'].yaml, { type: 'take-all-streams', select: ["audio", "video"] }, (0, info_2.default)(client_types_1.RegistrationConsts))
|
78
|
+
]);
|
79
|
+
await (0, util_1.waitForCondition)(() => sink.streamCount() == 2);
|
80
|
+
(0, chai_1.expect)(sink.streamCount()).equal(2);
|
70
81
|
});
|
71
82
|
it("Provides an RTMP output when the stream changes", async () => {
|
72
83
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
73
84
|
const compiled = await testDocument();
|
74
85
|
const result = await (0, execution_1.default)(norsk, compiled);
|
75
86
|
const source = await (0, sources_1.video)(norsk, 'source1');
|
87
|
+
const input = result.components["input"];
|
76
88
|
const rtmp = result.components["rtmp"];
|
77
89
|
rtmp.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), { type: "take-first-stream", select: client_types_1.Video })], { requireOneOfEverything: true });
|
78
|
-
|
79
|
-
|
80
|
-
|
90
|
+
const sink = new sinks_1.TraceSink(norsk, "sink");
|
91
|
+
await sink.initialised;
|
92
|
+
sink.subscribe([
|
93
|
+
new runtime_types_1.StudioNodeSubscriptionSource(input, compiled.components['input'].yaml, { type: 'take-all-streams', select: ["audio", "video"] }, (0, info_2.default)(client_types_1.RegistrationConsts))
|
94
|
+
], { requireOneOfEverything: false });
|
95
|
+
await (0, util_1.waitForCondition)(() => sink.streamCount() == 1);
|
96
|
+
await source.close();
|
97
|
+
await (0, util_1.waitForCondition)(() => sink.streamCount() == 0, 60000, 10);
|
81
98
|
const source2 = await (0, sources_1.videoAndAudio)(norsk, 'source2');
|
82
|
-
rtmp.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(source2, (0, sources_1.testSourceDescription)(), { type: "take-first-stream", select: client_types_1.Av })]
|
83
|
-
|
84
|
-
|
85
|
-
(0, chai_1.expect)(streams2 ?? []).lengthOf(2);
|
99
|
+
rtmp.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(source2, (0, sources_1.testSourceDescription)(), { type: "take-first-stream", select: client_types_1.Av })]);
|
100
|
+
await (0, util_1.waitForCondition)(() => sink.streamCount() == 2, 60000, 10);
|
101
|
+
(0, chai_1.expect)(sink.streamCount()).equal(2);
|
86
102
|
});
|
87
103
|
});
|
88
104
|
//# sourceMappingURL=rtmp-output.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rtmp-output.js","sourceRoot":"","sources":["../../src/test/rtmp-output.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA8C;AAC9C,2BAAkC;AAElC,6EAA4G;AAC5G,wFAA0E;AAC1E,gDAAwB;AACxB,+FAAgE;AAEhE,6EAA8G;AAC9G,+DAA2C;AAC3C,
|
1
|
+
{"version":3,"file":"rtmp-output.js","sourceRoot":"","sources":["../../src/test/rtmp-output.ts"],"names":[],"mappings":"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"}
|
@@ -33,11 +33,11 @@ const document = __importStar(require("@norskvideo/norsk-studio/lib/runtime/docu
|
|
33
33
|
const yaml_1 = __importDefault(require("yaml"));
|
34
34
|
const execution_1 = __importDefault(require("@norskvideo/norsk-studio/lib/runtime/execution"));
|
35
35
|
const sinks_1 = require("@norskvideo/norsk-studio/lib/test/_util/sinks");
|
36
|
-
const ffmpeg_1 = require("@norskvideo/norsk-studio/lib/test/_util/ffmpeg");
|
37
36
|
const info_1 = __importDefault(require("../input.srt-caller/info"));
|
38
37
|
const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
|
39
38
|
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
40
39
|
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
40
|
+
const sources_1 = require("@norskvideo/norsk-studio/lib/test/_util/sources");
|
41
41
|
async function defaultRuntime() {
|
42
42
|
const runtime = (0, builder_1.emptyRuntime)();
|
43
43
|
await (0, __1.registerAll)(runtime);
|
@@ -49,7 +49,7 @@ describe("SRT Caller Input", () => {
|
|
49
49
|
const yaml = new builder_1.YamlBuilder()
|
50
50
|
.addNode(new builder_1.YamlNodeBuilder('srt', (0, info_1.default)(client_types_1.RegistrationConsts), {
|
51
51
|
sourceName: 'foo',
|
52
|
-
port:
|
52
|
+
port: 65403,
|
53
53
|
ip: '127.0.0.1',
|
54
54
|
socketOptions: {}
|
55
55
|
}).reify())
|
@@ -58,18 +58,23 @@ describe("SRT Caller Input", () => {
|
|
58
58
|
return compiled;
|
59
59
|
}
|
60
60
|
let norsk = undefined;
|
61
|
-
let
|
61
|
+
let srt = undefined;
|
62
|
+
let av = undefined;
|
62
63
|
before(async () => {
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
65
|
+
av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
66
|
+
srt = await norsk.output.srt({
|
67
|
+
id: "av-srt-output",
|
68
|
+
mode: "listener",
|
69
|
+
ip: "0.0.0.0",
|
70
|
+
port: 65403
|
71
|
+
});
|
72
|
+
srt.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }]);
|
66
73
|
});
|
67
74
|
after(async () => {
|
68
75
|
await norsk?.close();
|
69
|
-
await ffmpeg?.stop();
|
70
76
|
});
|
71
77
|
it("Should output some frames", async () => {
|
72
|
-
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
73
78
|
const compiled = await testDocument();
|
74
79
|
const nodes = await (0, execution_1.default)(norsk, compiled);
|
75
80
|
await Promise.all([
|
@@ -84,7 +89,7 @@ describe("SRT Caller Reconnect", () => {
|
|
84
89
|
const yaml = new builder_1.YamlBuilder()
|
85
90
|
.addNode(new builder_1.YamlNodeBuilder('srt', (0, info_1.default)(client_types_1.RegistrationConsts), {
|
86
91
|
sourceName: 'foo',
|
87
|
-
port:
|
92
|
+
port: 65403,
|
88
93
|
ip: '127.0.0.1',
|
89
94
|
socketOptions: {}
|
90
95
|
}).reify())
|
@@ -93,18 +98,23 @@ describe("SRT Caller Reconnect", () => {
|
|
93
98
|
return compiled;
|
94
99
|
}
|
95
100
|
let norsk = undefined;
|
96
|
-
let
|
101
|
+
let srt = undefined;
|
102
|
+
let av = undefined;
|
97
103
|
before(async () => {
|
98
|
-
|
99
|
-
|
100
|
-
|
104
|
+
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
105
|
+
av = await (0, sources_1._videoAndAudio)(norsk, "source");
|
106
|
+
srt = await norsk.output.srt({
|
107
|
+
id: "av-srt-output",
|
108
|
+
mode: "listener",
|
109
|
+
ip: "0.0.0.0",
|
110
|
+
port: 65403
|
111
|
+
});
|
112
|
+
srt.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }]);
|
101
113
|
});
|
102
114
|
after(async () => {
|
103
115
|
await norsk?.close();
|
104
|
-
await ffmpeg?.stop();
|
105
116
|
});
|
106
117
|
it("Should output some frames", async () => {
|
107
|
-
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
108
118
|
const compiled = await testDocument();
|
109
119
|
const nodes = await (0, execution_1.default)(norsk, compiled);
|
110
120
|
const source = nodes.components['srt'];
|
@@ -114,11 +124,15 @@ describe("SRT Caller Reconnect", () => {
|
|
114
124
|
new runtime_types_1.StudioNodeSubscriptionSource(source, compiled.components['srt'].yaml, { type: 'take-all-streams', select: ["audio", "video"] }, (0, info_1.default)(client_types_1.RegistrationConsts))
|
115
125
|
]);
|
116
126
|
await (0, util_1.waitForCondition)(() => sink.streamCount() == 2 && sink.totalMessages() > 25, 10000.0);
|
117
|
-
await
|
127
|
+
await srt?.close();
|
118
128
|
await (0, util_1.waitForCondition)(() => sink.streamCount() == 0, 10000.0);
|
119
|
-
|
120
|
-
|
121
|
-
|
129
|
+
srt = await norsk.output.srt({
|
130
|
+
id: "av-srt-output",
|
131
|
+
mode: "listener",
|
132
|
+
ip: "0.0.0.0",
|
133
|
+
port: 65403
|
134
|
+
});
|
135
|
+
srt.subscribe([{ source: av, sourceSelector: norsk_sdk_1.selectAV }]);
|
122
136
|
await Promise.all([
|
123
137
|
await (0, sinks_1.waitForAssert)(() => sink.streamCount() == 2, () => sink.streamCount() == 2, 10000, 500),
|
124
138
|
await (0, sinks_1.assertNodeOutputsAudioFrames)(norsk, nodes, 'srt'),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"srt-input-caller.js","sourceRoot":"","sources":["../../src/test/srt-input-caller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
1
|
+
{"version":3,"file":"srt-input-caller.js","sourceRoot":"","sources":["../../src/test/srt-input-caller.ts"],"names":[],"mappings":"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"}
|