@norskvideo/norsk-sdk 1.0.352 → 1.0.356
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/src/media_nodes/common.js +4 -0
- package/lib/src/media_nodes/input.d.ts +31 -3
- package/lib/src/media_nodes/input.js +22 -11
- package/lib/src/media_nodes/output.d.ts +78 -90
- package/lib/src/media_nodes/output.js +52 -55
- package/lib/src/media_nodes/processor.d.ts +95 -4
- package/lib/src/media_nodes/processor.js +148 -5
- package/lib/src/media_nodes/types.d.ts +12 -7
- package/lib/src/media_nodes/types.js +40 -3
- package/lib/src/sdk.js +3 -3
- package/package.json +4 -2
- package/src/sdk.ts +10 -10
- package/dist/norsk-sdk.d.ts +0 -4957
- package/lib/src/tsdoc-metadata.json +0 -11
|
@@ -123,6 +123,10 @@ class SourceMediaNode extends MediaNodeState {
|
|
|
123
123
|
}
|
|
124
124
|
;
|
|
125
125
|
let index = pending.pendingSubscribes.indexOf(subscriber);
|
|
126
|
+
if (index === -1) {
|
|
127
|
+
(0, utils_1.errorlog)("No pending subscriber %s found for ref %s on %s (%d), something went horribly wrong", subscriber.id, context.blockingCallRef, this.id, pending.pendingSubscribes.length);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
126
130
|
pending.pendingSubscribes.splice(index, 1);
|
|
127
131
|
this.maybeAckPendingContext(context);
|
|
128
132
|
};
|
|
@@ -324,6 +324,8 @@ export declare class FileWebVttInputNode extends SourceMediaNode {
|
|
|
324
324
|
export interface FileTsInputSettings extends LocalFileInputSettings, StreamStatisticsMixin {
|
|
325
325
|
/** Whether to loop back to the start of the file after reaching the end */
|
|
326
326
|
loop?: boolean;
|
|
327
|
+
/** Whether to start paused or already playing (default: playing) */
|
|
328
|
+
start?: 'playing' | 'paused';
|
|
327
329
|
}
|
|
328
330
|
/** @public */
|
|
329
331
|
export interface FileTsInputSettingsUpdate {
|
|
@@ -336,6 +338,8 @@ export interface FileTsInputSettingsUpdate {
|
|
|
336
338
|
*/
|
|
337
339
|
export declare class FileTsInputNode extends TsCommonInputNode<FileTsInputMessage, FileTsInputNode> {
|
|
338
340
|
updateSettings(settings: FileTsInputSettingsUpdate): void;
|
|
341
|
+
pause(): void;
|
|
342
|
+
play(): void;
|
|
339
343
|
}
|
|
340
344
|
/**
|
|
341
345
|
* @public
|
|
@@ -371,6 +375,26 @@ export interface SrtInputSettings extends RemoteInputSettings<SrtInputNode>, Str
|
|
|
371
375
|
* Stream ID to set on the socket when acting in caller mode
|
|
372
376
|
*/
|
|
373
377
|
streamId?: string;
|
|
378
|
+
/**
|
|
379
|
+
* The latency value in the receiving direction of the socket (SRTO_RCVLATENCY)
|
|
380
|
+
*/
|
|
381
|
+
receiveLatency?: number;
|
|
382
|
+
/**
|
|
383
|
+
* The latency value provided by the sender side as a minimum value for the receiver (SRTO_PEERLATENCY)
|
|
384
|
+
*/
|
|
385
|
+
peerLatency?: number;
|
|
386
|
+
/**
|
|
387
|
+
* Input bandwidth (SRTO_INPUTBW)
|
|
388
|
+
*/
|
|
389
|
+
inputBandwidth?: number;
|
|
390
|
+
/**
|
|
391
|
+
* Overhead bandwidth (SRTO_OHEADBW)
|
|
392
|
+
*/
|
|
393
|
+
overheadBandwidth?: number;
|
|
394
|
+
/**
|
|
395
|
+
* Max bandwidth (SRTO_MAXBW)
|
|
396
|
+
*/
|
|
397
|
+
maxBandwidth?: number;
|
|
374
398
|
/**
|
|
375
399
|
* On connect callback, notifying that a new caller has connected (in listener mode) and set the source name accordingly
|
|
376
400
|
* @eventProperty
|
|
@@ -575,6 +599,8 @@ export interface FileMp4InputSettings extends SourceNodeSettings<FileMp4InputNod
|
|
|
575
599
|
onInfo?: (info: FileMp4Info) => void;
|
|
576
600
|
/** Whether to loop back to the start of the file after reaching the end (default false) */
|
|
577
601
|
loop?: boolean;
|
|
602
|
+
/** Whether to start paused or already playing (default: playing) */
|
|
603
|
+
start?: 'playing' | 'paused';
|
|
578
604
|
}
|
|
579
605
|
export interface FileMp4InputSettingsUpdate {
|
|
580
606
|
/** Whether to loop back to the start of the file after reaching the end */
|
|
@@ -601,11 +627,13 @@ export declare class FileMp4InputNode extends SourceMediaNode {
|
|
|
601
627
|
* */
|
|
602
628
|
nudge(nudge: number): void;
|
|
603
629
|
updateSettings(settings: FileMp4InputSettingsUpdate): void;
|
|
630
|
+
pause(): void;
|
|
631
|
+
play(): void;
|
|
604
632
|
}
|
|
605
633
|
/**
|
|
606
634
|
* @public
|
|
607
635
|
* Settings for Frame Store playback
|
|
608
|
-
* see: {@link NorskInput.
|
|
636
|
+
* see: {@link NorskInput.frameStore}
|
|
609
637
|
*/
|
|
610
638
|
export interface FrameStorePlayerSettings extends InputSettings<FrameStorePlayerNode>, StreamStatisticsMixin {
|
|
611
639
|
/**
|
|
@@ -629,7 +657,7 @@ export interface FrameStorePlayerSettings extends InputSettings<FrameStorePlayer
|
|
|
629
657
|
}
|
|
630
658
|
/**
|
|
631
659
|
* @public
|
|
632
|
-
* see: {@link NorskInput.
|
|
660
|
+
* see: {@link NorskInput.frameStore}
|
|
633
661
|
*/
|
|
634
662
|
export declare class FrameStorePlayerNode extends SourceMediaNode {
|
|
635
663
|
}
|
|
@@ -721,7 +749,7 @@ export interface NorskInput {
|
|
|
721
749
|
/**
|
|
722
750
|
* Playback from an existing Frame Store recording
|
|
723
751
|
*/
|
|
724
|
-
|
|
752
|
+
frameStore(settings: FrameStorePlayerSettings): Promise<FrameStorePlayerNode>;
|
|
725
753
|
}
|
|
726
754
|
export {};
|
|
727
755
|
//# sourceMappingURL=input.d.ts.map
|
|
@@ -665,7 +665,8 @@ class FileTsInputNode extends TsCommonInputNode {
|
|
|
665
665
|
: undefined,
|
|
666
666
|
filename: settings.fileName,
|
|
667
667
|
sourceName: settings.sourceName,
|
|
668
|
-
loop: (_a = settings.loop) !== null && _a !== void 0 ? _a : false
|
|
668
|
+
loop: (_a = settings.loop) !== null && _a !== void 0 ? _a : false,
|
|
669
|
+
startMode: settings.start == "paused" ? media_pb_1.FileTsInputConfiguration_StartMode.FILE_TS_START_PAUSED : media_pb_1.FileTsInputConfiguration_StartMode.FILE_TS_START_PLAYING
|
|
669
670
|
});
|
|
670
671
|
const stream = client.createInputFileTs();
|
|
671
672
|
stream.write((0, utils_1.provideFull)(media_pb_1.FileTsInputMessage, (0, utils_1.mkMessageCase)({ initialConfig: config })));
|
|
@@ -675,6 +676,12 @@ class FileTsInputNode extends TsCommonInputNode {
|
|
|
675
676
|
updateSettings(settings) {
|
|
676
677
|
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileTsInputMessage, (0, utils_1.mkMessageCase)({ updateConfig: (0, utils_1.provideFull)(media_pb_1.FileTsInputConfigurationUpdate, { loop: settings.loop !== undefined ? (0, types_1.mkOptBool)(settings.loop) : undefined }) })));
|
|
677
678
|
}
|
|
679
|
+
pause() {
|
|
680
|
+
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileTsInputMessage, (0, utils_1.mkMessageCase)({ pause: (0, utils_1.provideFull)(protobuf_1.Empty, {}) })));
|
|
681
|
+
}
|
|
682
|
+
play() {
|
|
683
|
+
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileTsInputMessage, (0, utils_1.mkMessageCase)({ play: (0, utils_1.provideFull)(protobuf_1.Empty, {}) })));
|
|
684
|
+
}
|
|
678
685
|
}
|
|
679
686
|
exports.FileTsInputNode = FileTsInputNode;
|
|
680
687
|
/**
|
|
@@ -689,13 +696,9 @@ class SrtInputNode extends common_1.SourceMediaNode {
|
|
|
689
696
|
const grpcStartFn = () => {
|
|
690
697
|
const config = (0, utils_1.provideFull)(media_pb_1.SrtInputConfiguration, Object.assign(Object.assign({}, settings), { id: settings.id
|
|
691
698
|
? (0, utils_1.provideFull)(media_pb_1.MediaNodeId, { id: settings.id })
|
|
692
|
-
: undefined, sourceName: settings.sourceName, mode: (0, types_1.toSrtMode)(settings.mode), passphrase: settings.passphrase
|
|
693
|
-
? (0, utils_1.provideFull)(common_pb_1.OptionalString, { value: settings.passphrase })
|
|
694
|
-
: undefined, streamId: settings.streamId !== undefined
|
|
695
|
-
? (0, utils_1.provideFull)(common_pb_1.OptionalString, { value: settings.streamId })
|
|
696
|
-
: undefined, statsSampling: settings.statsSampling
|
|
699
|
+
: undefined, sourceName: settings.sourceName, mode: (0, types_1.toSrtMode)(settings.mode), passphrase: (0, types_1.toOptString)(settings.passphrase), streamId: (0, types_1.toOptString)(settings.streamId), statsSampling: settings.statsSampling
|
|
697
700
|
? (0, utils_1.provideFull)(media_pb_1.StreamStatisticsSampling, settings.statsSampling)
|
|
698
|
-
: undefined }));
|
|
701
|
+
: undefined, receiveLatency: (0, types_1.toOptInt)(settings.receiveLatency), peerLatency: (0, types_1.toOptInt)(settings.peerLatency), inputBandwidth: (0, types_1.toOptInt)(settings.inputBandwidth), maxBandwidth: (0, types_1.toOptInt)(settings.maxBandwidth), overheadBandwidth: (0, types_1.toOptInt)(settings.overheadBandwidth) }));
|
|
699
702
|
const stream = client.createInputSrt();
|
|
700
703
|
stream.write((0, utils_1.provideFull)(media_pb_1.SrtInputMessage, (0, utils_1.mkMessageCase)({ initialConfig: config })));
|
|
701
704
|
return stream;
|
|
@@ -1156,7 +1159,7 @@ class FileMp4InputNode extends common_1.SourceMediaNode {
|
|
|
1156
1159
|
? (0, utils_1.provideFull)(media_pb_1.MediaNodeId, { id: settings.id })
|
|
1157
1160
|
: undefined, statsSampling: settings.statsSampling
|
|
1158
1161
|
? (0, utils_1.provideFull)(media_pb_1.StreamStatisticsSampling, settings.statsSampling)
|
|
1159
|
-
: undefined, loop: (_a = settings.loop) !== null && _a !== void 0 ? _a : false }));
|
|
1162
|
+
: undefined, loop: (_a = settings.loop) !== null && _a !== void 0 ? _a : false, startMode: settings.start == 'paused' ? media_pb_1.FileMp4InputConfiguration_StartMode.FILE_MP4_START_PAUSED : media_pb_1.FileMp4InputConfiguration_StartMode.FILE_MP4_START_PLAYING }));
|
|
1160
1163
|
this.grpcStream = this.client.createInputFileMp4();
|
|
1161
1164
|
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileMp4InputMessage, (0, utils_1.mkMessageCase)({ initialConfig: config })));
|
|
1162
1165
|
this.initialised = new Promise((resolve, reject) => {
|
|
@@ -1225,11 +1228,17 @@ class FileMp4InputNode extends common_1.SourceMediaNode {
|
|
|
1225
1228
|
updateSettings(settings) {
|
|
1226
1229
|
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileMp4InputMessage, (0, utils_1.mkMessageCase)({ updateConfig: (0, utils_1.provideFull)(media_pb_1.FileMp4InputConfigurationUpdate, { loop: settings.loop !== undefined ? (0, types_1.mkOptBool)(settings.loop) : undefined }) })));
|
|
1227
1230
|
}
|
|
1231
|
+
pause() {
|
|
1232
|
+
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileMp4InputMessage, (0, utils_1.mkMessageCase)({ pause: (0, utils_1.provideFull)(protobuf_1.Empty, {}) })));
|
|
1233
|
+
}
|
|
1234
|
+
play() {
|
|
1235
|
+
this.grpcStream.write((0, utils_1.provideFull)(media_pb_1.FileMp4InputMessage, (0, utils_1.mkMessageCase)({ play: (0, utils_1.provideFull)(protobuf_1.Empty, {}) })));
|
|
1236
|
+
}
|
|
1228
1237
|
}
|
|
1229
1238
|
exports.FileMp4InputNode = FileMp4InputNode;
|
|
1230
1239
|
/**
|
|
1231
1240
|
* @public
|
|
1232
|
-
* see: {@link NorskInput.
|
|
1241
|
+
* see: {@link NorskInput.frameStore}
|
|
1233
1242
|
*/
|
|
1234
1243
|
class FrameStorePlayerNode extends common_1.SourceMediaNode {
|
|
1235
1244
|
/** @internal */
|
|
@@ -1246,13 +1255,15 @@ class FrameStorePlayerNode extends common_1.SourceMediaNode {
|
|
|
1246
1255
|
durationMs,
|
|
1247
1256
|
sessionNum: sessionNum ? (0, utils_1.provideFull)(common_pb_1.OptionalInt, { value: sessionNum }) : undefined
|
|
1248
1257
|
})),
|
|
1249
|
-
streamSelection: (0, utils_1.provideFull)(media_pb_1.StreamSelection, {
|
|
1258
|
+
streamSelection: (0, utils_1.provideFull)(media_pb_1.StreamSelection, {
|
|
1259
|
+
streamSelection: (settings.streamSelection == "all") ?
|
|
1250
1260
|
(0, utils_1.mkCase)({ all: (0, utils_1.provideFull)(media_pb_1.StreamSelection_All, {}) }) :
|
|
1251
1261
|
(0, utils_1.mkCase)({
|
|
1252
1262
|
subset: (0, utils_1.provideFull)(media_pb_1.StreamSelection_Subset, {
|
|
1253
1263
|
streamList: settings.streamSelection.map(types_1.mkStreamKey)
|
|
1254
1264
|
})
|
|
1255
|
-
})
|
|
1265
|
+
})
|
|
1266
|
+
}),
|
|
1256
1267
|
trimPartialSegments: settings.trimPartialSegments
|
|
1257
1268
|
});
|
|
1258
1269
|
this.grpcStream = client.createInputFrameStorePlayer();
|
|
@@ -20,18 +20,6 @@ export interface CmafOutputSettings extends SinkNodeSettings<CmafAudioOutputNode
|
|
|
20
20
|
* without going over this target
|
|
21
21
|
*/
|
|
22
22
|
partDurationSeconds: number;
|
|
23
|
-
/**
|
|
24
|
-
* By default, the program date time or event start time will be based on the
|
|
25
|
-
* timestamp of the first video packet received by Norsk in a stream.
|
|
26
|
-
*
|
|
27
|
-
* Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
|
|
28
|
-
* or synchronisation with external streams can then result in players requesting segments that don't exist yet
|
|
29
|
-
*
|
|
30
|
-
* delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
|
|
31
|
-
*
|
|
32
|
-
* This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
|
|
33
|
-
*/
|
|
34
|
-
delayOutputMs?: number;
|
|
35
23
|
/**
|
|
36
24
|
* Settings for encrypting the content.
|
|
37
25
|
*/
|
|
@@ -52,10 +40,6 @@ export interface CmafOutputSettings extends SinkNodeSettings<CmafAudioOutputNode
|
|
|
52
40
|
* Audio or video bitrate for the {@link NorskOutput.cmafMultiVariant} playlist
|
|
53
41
|
*/
|
|
54
42
|
bitrate?: number;
|
|
55
|
-
/**
|
|
56
|
-
* The maximum number of segments to display in a single generated playlist
|
|
57
|
-
*/
|
|
58
|
-
maximumPlaylistSegments?: number;
|
|
59
43
|
}
|
|
60
44
|
/**
|
|
61
45
|
* @public
|
|
@@ -68,18 +52,6 @@ export interface HlsTsVideoOutputSettings extends SinkNodeSettings<HlsTsVideoOut
|
|
|
68
52
|
* to produce compliant segments that are less than or equal to this in duration
|
|
69
53
|
*/
|
|
70
54
|
segmentDurationSeconds: number;
|
|
71
|
-
/**
|
|
72
|
-
* By default, the program date time or event start time will be based on the
|
|
73
|
-
* timestamp of the first video packet received by Norsk in a stream.
|
|
74
|
-
*
|
|
75
|
-
* Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
|
|
76
|
-
* or synchronisation with external streams can then result in players requesting segments that don't exist yet
|
|
77
|
-
*
|
|
78
|
-
* delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
|
|
79
|
-
*
|
|
80
|
-
* This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
|
|
81
|
-
*/
|
|
82
|
-
delayOutputMs?: number;
|
|
83
55
|
/**
|
|
84
56
|
* A list of destinations {@link CmafDestinationSettings} for this stream to be published to
|
|
85
57
|
*/
|
|
@@ -96,10 +68,6 @@ export interface HlsTsVideoOutputSettings extends SinkNodeSettings<HlsTsVideoOut
|
|
|
96
68
|
* Video bitrate for the {@link NorskOutput.hlsTsMultiVariant} playlist
|
|
97
69
|
*/
|
|
98
70
|
bitrate?: number;
|
|
99
|
-
/**
|
|
100
|
-
* The maximum number of segments to display in a single generated playlist
|
|
101
|
-
*/
|
|
102
|
-
maximumPlaylistSegments?: number;
|
|
103
71
|
}
|
|
104
72
|
/**
|
|
105
73
|
* @public
|
|
@@ -112,18 +80,6 @@ export interface HlsTsAudioOutputSettings extends SinkNodeSettings<HlsTsAudioOut
|
|
|
112
80
|
* without going over this target using the durations of the individual audio frames
|
|
113
81
|
*/
|
|
114
82
|
segmentDurationSeconds: number;
|
|
115
|
-
/**
|
|
116
|
-
* By default, the program date time or event start time will be based on the
|
|
117
|
-
* timestamp of the first video packet received by Norsk in a stream.
|
|
118
|
-
*
|
|
119
|
-
* Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
|
|
120
|
-
* or synchronisation with external streams can then result in players requesting segments that don't exist yet
|
|
121
|
-
*
|
|
122
|
-
* delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
|
|
123
|
-
*
|
|
124
|
-
* This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
|
|
125
|
-
*/
|
|
126
|
-
delayOutputMs?: number;
|
|
127
83
|
/**
|
|
128
84
|
* A list of destinations {@link CmafDestinationSettings} for this stream to be published to
|
|
129
85
|
*/
|
|
@@ -140,10 +96,6 @@ export interface HlsTsAudioOutputSettings extends SinkNodeSettings<HlsTsAudioOut
|
|
|
140
96
|
* Audio bitrate for the {@link NorskOutput.hlsTsMultiVariant} playlist
|
|
141
97
|
*/
|
|
142
98
|
bitrate?: number;
|
|
143
|
-
/**
|
|
144
|
-
* The maximum number of segments to display in a single generated playlist
|
|
145
|
-
*/
|
|
146
|
-
maximumPlaylistSegments?: number;
|
|
147
99
|
}
|
|
148
100
|
/**
|
|
149
101
|
* @public
|
|
@@ -156,18 +108,6 @@ export interface CmafWebVttOutputSettings extends SinkNodeSettings<CmafWebVttOut
|
|
|
156
108
|
* in a compliant manner if necessary
|
|
157
109
|
*/
|
|
158
110
|
segmentDurationSeconds: number;
|
|
159
|
-
/**
|
|
160
|
-
* By default, the program date time or event start time will be based on the
|
|
161
|
-
* timestamp of the first video packet received by Norsk in a stream.
|
|
162
|
-
*
|
|
163
|
-
* Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
|
|
164
|
-
* or synchronisation with external streams can then result in players requesting segments that don't exist yet
|
|
165
|
-
*
|
|
166
|
-
* delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
|
|
167
|
-
*
|
|
168
|
-
* This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
|
|
169
|
-
*/
|
|
170
|
-
delayOutputMs?: number;
|
|
171
111
|
/**
|
|
172
112
|
* A list of destinations {@link CmafDestinationSettings} for this stream to be published to
|
|
173
113
|
*/
|
|
@@ -176,10 +116,6 @@ export interface CmafWebVttOutputSettings extends SinkNodeSettings<CmafWebVttOut
|
|
|
176
116
|
* A local directory in which to store the segments while they're available
|
|
177
117
|
*/
|
|
178
118
|
hlsCacheDirectory: string;
|
|
179
|
-
/**
|
|
180
|
-
* The maximum number of segments to display in a single generated playlist
|
|
181
|
-
*/
|
|
182
|
-
maximumPlaylistSegments?: number;
|
|
183
119
|
}
|
|
184
120
|
/**
|
|
185
121
|
* @public
|
|
@@ -207,18 +143,6 @@ export interface HlsTsCombinedPushOutputSettings extends SinkNodeSettings<HlsTsC
|
|
|
207
143
|
* using timestamps to line them up
|
|
208
144
|
*/
|
|
209
145
|
segmentDurationSeconds: number;
|
|
210
|
-
/**
|
|
211
|
-
* By default, the program date time or event start time will be based on the
|
|
212
|
-
* timestamp of the first video packet received by Norsk in a stream.
|
|
213
|
-
*
|
|
214
|
-
* Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
|
|
215
|
-
* or synchronisation with external streams can then result in players requesting segments that don't exist yet
|
|
216
|
-
*
|
|
217
|
-
* delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
|
|
218
|
-
*
|
|
219
|
-
* This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
|
|
220
|
-
*/
|
|
221
|
-
delayOutputMs?: number;
|
|
222
146
|
/**
|
|
223
147
|
* The destination {@link CmafDestinationSettings} for this stream to be published to
|
|
224
148
|
*/
|
|
@@ -315,6 +239,22 @@ export interface HlsPushDestinationSettings {
|
|
|
315
239
|
* in order to generate an accurate playlist
|
|
316
240
|
*/
|
|
317
241
|
retentionPeriodSeconds: number;
|
|
242
|
+
/**
|
|
243
|
+
* In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
|
|
244
|
+
* this effectively controls how far back in time a player can seek from first load (as long as the data exists)
|
|
245
|
+
*/
|
|
246
|
+
defaultSegmentCount?: number;
|
|
247
|
+
/**
|
|
248
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
249
|
+
this should take into account the end to end latency from source capture, to the segment and playlist being published
|
|
250
|
+
*/
|
|
251
|
+
holdBackSeconds?: number;
|
|
252
|
+
/**
|
|
253
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
254
|
+
when using the lower latency parts
|
|
255
|
+
this should take into account the end to end latency from source capture, to the part and playlist being published
|
|
256
|
+
*/
|
|
257
|
+
partHoldBackSeconds?: number;
|
|
318
258
|
}
|
|
319
259
|
/**
|
|
320
260
|
* @public
|
|
@@ -356,6 +296,22 @@ export interface AwsS3PushDestinationSettings {
|
|
|
356
296
|
* in order to generate an accurate playlist
|
|
357
297
|
*/
|
|
358
298
|
retentionPeriodSeconds: number;
|
|
299
|
+
/**
|
|
300
|
+
* In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
|
|
301
|
+
* this effectively controls how far back in time a player can seek from first load (as long as the data exists)
|
|
302
|
+
*/
|
|
303
|
+
defaultSegmentCount?: number;
|
|
304
|
+
/**
|
|
305
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
306
|
+
this should take into account the end to end latency from source capture, to the segment and playlist being published
|
|
307
|
+
*/
|
|
308
|
+
holdBackSeconds?: number;
|
|
309
|
+
/**
|
|
310
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
311
|
+
when using the lower latency parts
|
|
312
|
+
this should take into account the end to end latency from source capture, to the part and playlist being published
|
|
313
|
+
*/
|
|
314
|
+
partHoldBackSeconds?: number;
|
|
359
315
|
}
|
|
360
316
|
/**
|
|
361
317
|
* @public
|
|
@@ -381,6 +337,22 @@ export interface LocalPullDestinationSettings {
|
|
|
381
337
|
* and informs the local web server how long to retain those segments
|
|
382
338
|
*/
|
|
383
339
|
retentionPeriodSeconds: number;
|
|
340
|
+
/**
|
|
341
|
+
* In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
|
|
342
|
+
* this effectively controls how far back in time a player can seek from first load (as long as the data exists)
|
|
343
|
+
*/
|
|
344
|
+
defaultSegmentCount?: number;
|
|
345
|
+
/**
|
|
346
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
347
|
+
this should take into account the end to end latency from source capture, to the segment and playlist being published
|
|
348
|
+
*/
|
|
349
|
+
holdBackSeconds?: number;
|
|
350
|
+
/**
|
|
351
|
+
Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
|
|
352
|
+
when using the lower latency parts
|
|
353
|
+
this should take into account the end to end latency from source capture, to the part and playlist being published
|
|
354
|
+
*/
|
|
355
|
+
partHoldBackSeconds?: number;
|
|
384
356
|
}
|
|
385
357
|
/** @public */
|
|
386
358
|
export declare type MediaPlaylistPart = MediaSegment | AdMarker | HlsTag | ProgramDateTime | ScheduledTag;
|
|
@@ -455,11 +427,6 @@ declare type HlsPlaylistDestination = {
|
|
|
455
427
|
declare type HlsTsPlaylistDestination = {
|
|
456
428
|
[destination: DestinationId]: MediaPlaylistPart[];
|
|
457
429
|
};
|
|
458
|
-
/** @public */
|
|
459
|
-
declare enum PlaylistPath {
|
|
460
|
-
Cmaf = 0,
|
|
461
|
-
Ts = 1
|
|
462
|
-
}
|
|
463
430
|
declare class CmafNodeBase<ClientMessage, Pins extends string, T extends MediaNodeState> extends AutoProcessorMediaNode<Pins> {
|
|
464
431
|
playlists: HlsPlaylistDestination;
|
|
465
432
|
destinations: DestinationId[];
|
|
@@ -473,7 +440,6 @@ export declare type ScheduledTag = [number, MediaPlaylistPart, Date, Destination
|
|
|
473
440
|
/** @public */
|
|
474
441
|
export declare type DestinationId = string;
|
|
475
442
|
declare class CmafNodeWithPlaylist<ClientMessage, Pins extends string, T extends MediaNodeState> extends CmafNodeBase<ClientMessage, Pins, T> {
|
|
476
|
-
constructor(client: MediaClient, unregisterNode: (node: MediaNodeState) => void, settings: ProcessorNodeSettings<T> & StreamStatisticsMixin, grpcInit: () => grpc.ClientDuplexStream<ClientMessage, HlsOutputEvent>, subscribeFn: (subscription: Subscription) => Promise<boolean>, playlistPath: PlaylistPath, segmentDuration: number, onPlaylistAddition: PlaylistOnChangeFn<ClientMessage>, destinations: DestinationId[], localDestination?: LocalPullDestinationSettings, maximumPlaylistSegments?: number);
|
|
477
443
|
/**
|
|
478
444
|
* @public
|
|
479
445
|
* Returns the URL to the HLS playlist entry. Note this can only be evaluated once the stream is active as it
|
|
@@ -572,6 +538,8 @@ export declare class CmafWebVttOutputNode extends CmafNodeWithPlaylist<CmafWebVt
|
|
|
572
538
|
export declare class CmafMultiVariantOutputNode extends CmafNodeBase<CmafMultiVariantMessage, "video" | "audio" | "subtitle", CmafMultiVariantOutputNode> {
|
|
573
539
|
/** @public The URL of the file based multi variant playlist */
|
|
574
540
|
url: string;
|
|
541
|
+
/** @public The URL of the file based DASH manifest */
|
|
542
|
+
dashUrl: string;
|
|
575
543
|
/**
|
|
576
544
|
* @public
|
|
577
545
|
* Updates the credentials for a specific destination within this output by id
|
|
@@ -641,6 +609,26 @@ export interface SrtOutputSettings extends SinkNodeSettings<SrtOutputNode>, Stre
|
|
|
641
609
|
* Stream ID to set on the socket when acting in caller mode
|
|
642
610
|
*/
|
|
643
611
|
streamId?: string;
|
|
612
|
+
/**
|
|
613
|
+
* The latency value in the receiving direction of the socket (SRTO_RCVLATENCY)
|
|
614
|
+
*/
|
|
615
|
+
receiveLatency?: number;
|
|
616
|
+
/**
|
|
617
|
+
* The latency value provided by the sender side as a minimum value for the receiver (SRTO_PEERLATENCY)
|
|
618
|
+
*/
|
|
619
|
+
peerLatency?: number;
|
|
620
|
+
/**
|
|
621
|
+
* Input bandwidth (SRTO_INPUTBW)
|
|
622
|
+
*/
|
|
623
|
+
inputBandwidth?: number;
|
|
624
|
+
/**
|
|
625
|
+
* Overhead bandwidth (SRTO_OHEADBW)
|
|
626
|
+
*/
|
|
627
|
+
overheadBandwidth?: number;
|
|
628
|
+
/**
|
|
629
|
+
* Max bandwidth (SRTO_MAXBW)
|
|
630
|
+
*/
|
|
631
|
+
maxBandwidth?: number;
|
|
644
632
|
/**
|
|
645
633
|
* The mode to act in (see {@link SrtMode})
|
|
646
634
|
*/
|
|
@@ -840,7 +828,7 @@ export declare type FrameStoreCutRequest = {
|
|
|
840
828
|
/**
|
|
841
829
|
* @public
|
|
842
830
|
* Settings to configure a frame store recorder
|
|
843
|
-
* see {@link NorskOutput.
|
|
831
|
+
* see {@link NorskOutput.frameStore}
|
|
844
832
|
*/
|
|
845
833
|
export interface FrameStoreRecorderSettings extends SinkNodeSettings<FrameStoreRecorderNode>, StreamStatisticsMixin {
|
|
846
834
|
/**
|
|
@@ -862,7 +850,7 @@ export interface FrameStoreRecorderSettings extends SinkNodeSettings<FrameStoreR
|
|
|
862
850
|
}
|
|
863
851
|
/**
|
|
864
852
|
* @public
|
|
865
|
-
* see: {@link NorskOutput.
|
|
853
|
+
* see: {@link NorskOutput.frameStore}
|
|
866
854
|
*/
|
|
867
855
|
export declare class FrameStoreRecorderNode extends AutoSinkMediaNode<"audio" | "video"> {
|
|
868
856
|
makeCut(request: FrameStoreCutRequest): void;
|
|
@@ -870,15 +858,15 @@ export declare class FrameStoreRecorderNode extends AutoSinkMediaNode<"audio" |
|
|
|
870
858
|
/**
|
|
871
859
|
* @public
|
|
872
860
|
* Settings to configure a Moq Egest
|
|
873
|
-
* see {@link NorskOutput.
|
|
861
|
+
* see {@link NorskOutput.moq}
|
|
874
862
|
*/
|
|
875
|
-
export interface
|
|
863
|
+
export interface MoqOutputSettings extends SinkNodeSettings<MoqOutputNode>, StreamStatisticsMixin {
|
|
876
864
|
}
|
|
877
865
|
/**
|
|
878
866
|
* @public
|
|
879
|
-
* see: {@link NorskOutput.
|
|
867
|
+
* see: {@link NorskOutput.moq}
|
|
880
868
|
*/
|
|
881
|
-
export declare class
|
|
869
|
+
export declare class MoqOutputNode extends AutoSinkMediaNode<"audio" | "video"> {
|
|
882
870
|
}
|
|
883
871
|
/**
|
|
884
872
|
* @public
|
|
@@ -1021,13 +1009,13 @@ export interface NorskOutput {
|
|
|
1021
1009
|
*
|
|
1022
1010
|
* @param settings - Configuration for the frame store recorder
|
|
1023
1011
|
*/
|
|
1024
|
-
|
|
1012
|
+
frameStore(settings: FrameStoreRecorderSettings): Promise<FrameStoreRecorderNode>;
|
|
1025
1013
|
/**
|
|
1026
1014
|
* Create a Moq Egest
|
|
1027
1015
|
*
|
|
1028
1016
|
* @param settings - Configuration for the egest
|
|
1029
1017
|
*/
|
|
1030
|
-
|
|
1018
|
+
moq(settings: MoqOutputSettings): Promise<MoqOutputNode>;
|
|
1031
1019
|
}
|
|
1032
1020
|
export {};
|
|
1033
1021
|
//# sourceMappingURL=output.d.ts.map
|