@norskvideo/norsk-sdk 1.0.351 → 1.0.354

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.
@@ -22,7 +22,6 @@ import { PlainMessage } from '@bufbuild/protobuf';
22
22
  import { Readable } from 'stream';
23
23
  import { RtmpError_UnsupportedAudio } from '@norskvideo/norsk-api/lib/media_pb';
24
24
  import { RtmpError_UnsupportedVideo } from '@norskvideo/norsk-api/lib/media_pb';
25
- import { Scte35SpliceInfoSection as Scte35SpliceInfoSection_2 } from '@norskvideo/norsk-api/lib/media_pb';
26
25
  import { StreamKey as StreamKey_2 } from '@norskvideo/norsk-api/lib/media_pb';
27
26
  import { StreamStatisticsSampling } from '@norskvideo/norsk-api/lib/media_pb';
28
27
  import { Subscription } from '@norskvideo/norsk-api/lib/media_pb';
@@ -31,6 +30,7 @@ import { TsInputEvent } from '@norskvideo/norsk-api/lib/media_pb';
31
30
  import { UdpTsInputMessage } from '@norskvideo/norsk-api/lib/media_pb';
32
31
  import { VancPayloadFormat as VancPayloadFormat_2 } from '@norskvideo/norsk-api/lib/media_pb';
33
32
  import { Version } from '@norskvideo/norsk-api/lib/shared/common_pb';
33
+ import { VideoTransformConfiguration } from '@norskvideo/norsk-api/lib/media_pb';
34
34
  import { Wave } from '@norskvideo/norsk-api/lib/media_pb';
35
35
  import { Writable } from 'stream';
36
36
 
@@ -59,11 +59,11 @@ export declare interface AdMarker {
59
59
  }
60
60
 
61
61
  export declare class AncillaryNode extends AutoProcessorMediaNode<"ancillary"> {
62
- sendScte35(key: StreamKey, info: Scte35SpliceInfoSection_2): void;
62
+ sendScte35(key: StreamKey, info: Scte35SpliceInfoSection): void;
63
63
  }
64
64
 
65
65
  export declare interface AncillarySettings extends ProcessorNodeSettings<AncillaryNode> {
66
- onScte35?: (stream: StreamKey, message: Scte35SpliceInfoSection_2) => void;
66
+ onScte35?: (stream: StreamKey, message: Scte35SpliceInfoSection) => void;
67
67
  onSmpte2038?: (stream: StreamKey, message: Smpte2038Message) => void;
68
68
  }
69
69
 
@@ -440,11 +440,18 @@ export declare class AudioTranscribeWhisperNode extends AutoProcessorMediaNode<"
440
440
 
441
441
  /**
442
442
  * @public
443
- * Settings for an Audio Transcribe operation using Whisper sdk
443
+ * Settings for an Audio Transcribe operation using Whisper sdk (whisper-cpp)
444
444
  * see: {@link NorskTransform.audioTranscribeWhisper}
445
445
  * */
446
446
  export declare interface AudioTranscribeWhisperSettings extends ProcessorNodeSettings<AudioTranscribeWhisperNode> {
447
447
  outputStreamId: number;
448
+ /** The duration of audio that is accumulated before performing one transcription step. Decreasing this
449
+ * value will decrease latency but also decrease performance. Visualiser metrics are available to monitor the
450
+ * duration of each "step" operation, if this is not clearly faster than the audio duration real-time output will not be
451
+ * attained and the workflow will back up.
452
+ *
453
+ * Default 3000ms.
454
+ */
448
455
  stepMs?: number;
449
456
  lengthMs?: number;
450
457
  keepMs?: number;
@@ -452,12 +459,38 @@ export declare interface AudioTranscribeWhisperSettings extends ProcessorNodeSet
452
459
  speedUp?: boolean;
453
460
  noFallback?: boolean;
454
461
  numThreads?: number;
462
+ /**
463
+ * Use GPU if available. In the cases where GPU is available, it may not necessarily increase performance, but instead opt
464
+ * to move load from CPU to GPU.
465
+ */
455
466
  useGpu?: boolean;
467
+ /**
468
+ * Language setting for the Whisper model. Leave unset to auto-detect (with a multi-language model)
469
+ */
456
470
  language?: string;
471
+ /**
472
+ * The file name of the GGML-format whisper model.
473
+ *
474
+ * Information: https://github.com/ggerganov/whisper.cpp/blob/master/models/README.md
475
+ *
476
+ * Model downloads: https://huggingface.co/ggerganov/whisper.cpp/tree/main
477
+ */
457
478
  model: string;
479
+ /**
480
+ * Whether to translate a non-English input to English, or leave the foreign-language transcription in the source language.
481
+ */
458
482
  translate?: boolean;
483
+ /**
484
+ * Enable tiny-diarize if supported in the given model
485
+ */
459
486
  tinyDiarize?: boolean;
487
+ /**
488
+ * Initial prompt to prime the model - this is in addition to prompting based on past transcription history.
489
+ */
460
490
  initialPrompt?: string;
491
+ /**
492
+ * Whether to suppress non-speech tokens
493
+ */
461
494
  suppressNonSpeechTokens?: boolean;
462
495
  samplingStrategy?: WhisperSamplingStrategy;
463
496
  }
@@ -539,6 +572,22 @@ export declare interface AwsS3PushDestinationSettings {
539
572
  * in order to generate an accurate playlist
540
573
  */
541
574
  retentionPeriodSeconds: number;
575
+ /**
576
+ * In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
577
+ * this effectively controls how far back in time a player can seek from first load (as long as the data exists)
578
+ */
579
+ defaultSegmentCount?: number;
580
+ /**
581
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
582
+ this should take into account the end to end latency from source capture, to the segment and playlist being published
583
+ */
584
+ holdBackSeconds?: number;
585
+ /**
586
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
587
+ when using the lower latency parts
588
+ this should take into account the end to end latency from source capture, to the part and playlist being published
589
+ */
590
+ partHoldBackSeconds?: number;
542
591
  }
543
592
 
544
593
  /**
@@ -795,6 +844,8 @@ export declare type CmafDestinationSettings = HlsPushDestinationSettings | AwsS3
795
844
  export declare class CmafMultiVariantOutputNode extends CmafNodeBase<CmafMultiVariantMessage, "video" | "audio" | "subtitle", CmafMultiVariantOutputNode> {
796
845
  /** @public The URL of the file based multi variant playlist */
797
846
  url: string;
847
+ /** @public The URL of the file based DASH manifest */
848
+ dashUrl: string;
798
849
  /**
799
850
  * @public
800
851
  * Updates the credentials for a specific destination within this output by id
@@ -848,7 +899,6 @@ declare class CmafNodeBase<ClientMessage, Pins extends string, T extends MediaNo
848
899
  }
849
900
 
850
901
  declare class CmafNodeWithPlaylist<ClientMessage, Pins extends string, T extends MediaNodeState> extends CmafNodeBase<ClientMessage, Pins, T> {
851
- 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);
852
902
  /**
853
903
  * @public
854
904
  * Returns the URL to the HLS playlist entry. Note this can only be evaluated once the stream is active as it
@@ -874,18 +924,6 @@ export declare interface CmafOutputSettings extends SinkNodeSettings<CmafAudioOu
874
924
  * without going over this target
875
925
  */
876
926
  partDurationSeconds: number;
877
- /**
878
- * By default, the program date time or event start time will be based on the
879
- * timestamp of the first video packet received by Norsk in a stream.
880
- *
881
- * Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
882
- * or synchronisation with external streams can then result in players requesting segments that don't exist yet
883
- *
884
- * delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
885
- *
886
- * This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
887
- */
888
- delayOutputMs?: number;
889
927
  /**
890
928
  * Settings for encrypting the content.
891
929
  */
@@ -906,10 +944,6 @@ export declare interface CmafOutputSettings extends SinkNodeSettings<CmafAudioOu
906
944
  * Audio or video bitrate for the {@link NorskOutput.cmafMultiVariant} playlist
907
945
  */
908
946
  bitrate?: number;
909
- /**
910
- * The maximum number of segments to display in a single generated playlist
911
- */
912
- maximumPlaylistSegments?: number;
913
947
  }
914
948
 
915
949
  /**
@@ -955,18 +989,6 @@ export declare interface CmafWebVttOutputSettings extends SinkNodeSettings<CmafW
955
989
  * in a compliant manner if necessary
956
990
  */
957
991
  segmentDurationSeconds: number;
958
- /**
959
- * By default, the program date time or event start time will be based on the
960
- * timestamp of the first video packet received by Norsk in a stream.
961
- *
962
- * Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
963
- * or synchronisation with external streams can then result in players requesting segments that don't exist yet
964
- *
965
- * delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
966
- *
967
- * This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
968
- */
969
- delayOutputMs?: number;
970
992
  /**
971
993
  * A list of destinations {@link CmafDestinationSettings} for this stream to be published to
972
994
  */
@@ -975,10 +997,6 @@ export declare interface CmafWebVttOutputSettings extends SinkNodeSettings<CmafW
975
997
  * A local directory in which to store the segments while they're available
976
998
  */
977
999
  hlsCacheDirectory: string;
978
- /**
979
- * The maximum number of segments to display in a single generated playlist
980
- */
981
- maximumPlaylistSegments?: number;
982
1000
  }
983
1001
 
984
1002
  /** @public */
@@ -1148,6 +1166,11 @@ export declare type DeckLinkVideoIOSupport = "capture" | "playback";
1148
1166
  /** @public */
1149
1167
  export declare type DeferredVideoComposeSettings<Pins extends string> = (streams: StreamMetadata[]) => VideoComposeSettings<Pins> | undefined;
1150
1168
 
1169
+ export declare type DeinterlaceSettings = {
1170
+ type: 'software';
1171
+ algorithm: 'bwdif' | 'kerndeint' | 'nnedi' | 'w3fdif' | 'yadif';
1172
+ };
1173
+
1151
1174
  /** @public */
1152
1175
  export declare type DestinationId = string;
1153
1176
 
@@ -1251,6 +1274,8 @@ export declare class FileMp4InputNode extends SourceMediaNode {
1251
1274
  * */
1252
1275
  nudge(nudge: number): void;
1253
1276
  updateSettings(settings: FileMp4InputSettingsUpdate): void;
1277
+ pause(): void;
1278
+ play(): void;
1254
1279
  }
1255
1280
 
1256
1281
  /**
@@ -1269,6 +1294,8 @@ export declare interface FileMp4InputSettings extends SourceNodeSettings<FileMp4
1269
1294
  onInfo?: (info: FileMp4Info) => void;
1270
1295
  /** Whether to loop back to the start of the file after reaching the end (default false) */
1271
1296
  loop?: boolean;
1297
+ /** Whether to start paused or already playing (default: playing) */
1298
+ start?: 'playing' | 'paused';
1272
1299
  }
1273
1300
 
1274
1301
  export declare interface FileMp4InputSettingsUpdate {
@@ -1325,12 +1352,16 @@ export declare interface FileMp4OutputSettings extends SinkNodeSettings<FileMp4O
1325
1352
  */
1326
1353
  export declare class FileTsInputNode extends TsCommonInputNode<FileTsInputMessage, FileTsInputNode> {
1327
1354
  updateSettings(settings: FileTsInputSettingsUpdate): void;
1355
+ pause(): void;
1356
+ play(): void;
1328
1357
  }
1329
1358
 
1330
1359
  /** @public */
1331
1360
  export declare interface FileTsInputSettings extends LocalFileInputSettings, StreamStatisticsMixin {
1332
1361
  /** Whether to loop back to the start of the file after reaching the end */
1333
1362
  loop?: boolean;
1363
+ /** Whether to start paused or already playing (default: playing) */
1364
+ start?: 'playing' | 'paused';
1334
1365
  }
1335
1366
 
1336
1367
  /** @public */
@@ -1407,7 +1438,7 @@ export declare type FrameStoreExpiry = FrameStoreExpireBySize | FrameStoreExpire
1407
1438
 
1408
1439
  /**
1409
1440
  * @public
1410
- * see: {@link NorskInput.frameStorePlayer}
1441
+ * see: {@link NorskInput.frameStore}
1411
1442
  */
1412
1443
  export declare class FrameStorePlayerNode extends SourceMediaNode {
1413
1444
  }
@@ -1415,7 +1446,7 @@ export declare class FrameStorePlayerNode extends SourceMediaNode {
1415
1446
  /**
1416
1447
  * @public
1417
1448
  * Settings for Frame Store playback
1418
- * see: {@link NorskInput.frameStorePlayer}
1449
+ * see: {@link NorskInput.frameStore}
1419
1450
  */
1420
1451
  export declare interface FrameStorePlayerSettings extends InputSettings<FrameStorePlayerNode>, StreamStatisticsMixin {
1421
1452
  /**
@@ -1440,7 +1471,7 @@ export declare interface FrameStorePlayerSettings extends InputSettings<FrameSto
1440
1471
 
1441
1472
  /**
1442
1473
  * @public
1443
- * see: {@link NorskOutput.frameStoreRecording}
1474
+ * see: {@link NorskOutput.frameStore}
1444
1475
  */
1445
1476
  export declare class FrameStoreRecorderNode extends AutoSinkMediaNode<"audio" | "video"> {
1446
1477
  makeCut(request: FrameStoreCutRequest): void;
@@ -1449,7 +1480,7 @@ export declare class FrameStoreRecorderNode extends AutoSinkMediaNode<"audio" |
1449
1480
  /**
1450
1481
  * @public
1451
1482
  * Settings to configure a frame store recorder
1452
- * see {@link NorskOutput.frameStoreRecorder}
1483
+ * see {@link NorskOutput.frameStore}
1453
1484
  */
1454
1485
  export declare interface FrameStoreRecorderSettings extends SinkNodeSettings<FrameStoreRecorderNode>, StreamStatisticsMixin {
1455
1486
  /**
@@ -1547,6 +1578,22 @@ export declare interface HlsPushDestinationSettings {
1547
1578
  * in order to generate an accurate playlist
1548
1579
  */
1549
1580
  retentionPeriodSeconds: number;
1581
+ /**
1582
+ * In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
1583
+ * this effectively controls how far back in time a player can seek from first load (as long as the data exists)
1584
+ */
1585
+ defaultSegmentCount?: number;
1586
+ /**
1587
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
1588
+ this should take into account the end to end latency from source capture, to the segment and playlist being published
1589
+ */
1590
+ holdBackSeconds?: number;
1591
+ /**
1592
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
1593
+ when using the lower latency parts
1594
+ this should take into account the end to end latency from source capture, to the part and playlist being published
1595
+ */
1596
+ partHoldBackSeconds?: number;
1550
1597
  }
1551
1598
 
1552
1599
  /** @public */
@@ -1582,18 +1629,6 @@ export declare interface HlsTsAudioOutputSettings extends SinkNodeSettings<HlsTs
1582
1629
  * without going over this target using the durations of the individual audio frames
1583
1630
  */
1584
1631
  segmentDurationSeconds: number;
1585
- /**
1586
- * By default, the program date time or event start time will be based on the
1587
- * timestamp of the first video packet received by Norsk in a stream.
1588
- *
1589
- * Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
1590
- * or synchronisation with external streams can then result in players requesting segments that don't exist yet
1591
- *
1592
- * delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
1593
- *
1594
- * This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
1595
- */
1596
- delayOutputMs?: number;
1597
1632
  /**
1598
1633
  * A list of destinations {@link CmafDestinationSettings} for this stream to be published to
1599
1634
  */
@@ -1610,10 +1645,6 @@ export declare interface HlsTsAudioOutputSettings extends SinkNodeSettings<HlsTs
1610
1645
  * Audio bitrate for the {@link NorskOutput.hlsTsMultiVariant} playlist
1611
1646
  */
1612
1647
  bitrate?: number;
1613
- /**
1614
- * The maximum number of segments to display in a single generated playlist
1615
- */
1616
- maximumPlaylistSegments?: number;
1617
1648
  }
1618
1649
 
1619
1650
  /**
@@ -1635,18 +1666,6 @@ export declare interface HlsTsCombinedPushOutputSettings extends SinkNodeSetting
1635
1666
  * using timestamps to line them up
1636
1667
  */
1637
1668
  segmentDurationSeconds: number;
1638
- /**
1639
- * By default, the program date time or event start time will be based on the
1640
- * timestamp of the first video packet received by Norsk in a stream.
1641
- *
1642
- * Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
1643
- * or synchronisation with external streams can then result in players requesting segments that don't exist yet
1644
- *
1645
- * delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
1646
- *
1647
- * This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
1648
- */
1649
- delayOutputMs?: number;
1650
1669
  /**
1651
1670
  * The destination {@link CmafDestinationSettings} for this stream to be published to
1652
1671
  */
@@ -1733,18 +1752,6 @@ export declare interface HlsTsVideoOutputSettings extends SinkNodeSettings<HlsTs
1733
1752
  * to produce compliant segments that are less than or equal to this in duration
1734
1753
  */
1735
1754
  segmentDurationSeconds: number;
1736
- /**
1737
- * By default, the program date time or event start time will be based on the
1738
- * timestamp of the first video packet received by Norsk in a stream.
1739
- *
1740
- * Assuming minimal latency in Norsk itself, this behaviour is fine - but encodes and composition
1741
- * or synchronisation with external streams can then result in players requesting segments that don't exist yet
1742
- *
1743
- * delayOutputMs can be used to push the timestamp forwards so that players can calculate the edge of the stream accurately.
1744
- *
1745
- * This number should match the delayOutputMs of other streams which will be served within the same multi variant playlist
1746
- */
1747
- delayOutputMs?: number;
1748
1755
  /**
1749
1756
  * A list of destinations {@link CmafDestinationSettings} for this stream to be published to
1750
1757
  */
@@ -1761,10 +1768,6 @@ export declare interface HlsTsVideoOutputSettings extends SinkNodeSettings<HlsTs
1761
1768
  * Video bitrate for the {@link NorskOutput.hlsTsMultiVariant} playlist
1762
1769
  */
1763
1770
  bitrate?: number;
1764
- /**
1765
- * The maximum number of segments to display in a single generated playlist
1766
- */
1767
- maximumPlaylistSegments?: number;
1768
1771
  }
1769
1772
 
1770
1773
  /** @public */
@@ -1875,6 +1878,22 @@ export declare interface LocalPullDestinationSettings {
1875
1878
  * and informs the local web server how long to retain those segments
1876
1879
  */
1877
1880
  retentionPeriodSeconds: number;
1881
+ /**
1882
+ * In the absence of a HLS_SKIP query parameter, how many segments should be served in a playlist
1883
+ * this effectively controls how far back in time a player can seek from first load (as long as the data exists)
1884
+ */
1885
+ defaultSegmentCount?: number;
1886
+ /**
1887
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
1888
+ this should take into account the end to end latency from source capture, to the segment and playlist being published
1889
+ */
1890
+ holdBackSeconds?: number;
1891
+ /**
1892
+ Server control directive, informs the client how far back in the stream (in seconds) it should attempt to play
1893
+ when using the lower latency parts
1894
+ this should take into account the end to end latency from source capture, to the part and playlist being published
1895
+ */
1896
+ partHoldBackSeconds?: number;
1878
1897
  }
1879
1898
 
1880
1899
  /** @public */
@@ -2024,17 +2043,17 @@ export declare function mkSine(freq: number): Wave;
2024
2043
 
2025
2044
  /**
2026
2045
  * @public
2027
- * see: {@link NorskOutput.moqEgest}
2046
+ * see: {@link NorskOutput.moq}
2028
2047
  */
2029
- export declare class MoqEgestNode extends AutoSinkMediaNode<"audio" | "video"> {
2048
+ export declare class MoqOutputNode extends AutoSinkMediaNode<"audio" | "video"> {
2030
2049
  }
2031
2050
 
2032
2051
  /**
2033
2052
  * @public
2034
2053
  * Settings to configure a Moq Egest
2035
- * see {@link NorskOutput.moqEgest}
2054
+ * see {@link NorskOutput.moq}
2036
2055
  */
2037
- export declare interface MoqEgestSettings extends SinkNodeSettings<MoqEgestNode>, StreamStatisticsMixin {
2056
+ export declare interface MoqOutputSettings extends SinkNodeSettings<MoqOutputNode>, StreamStatisticsMixin {
2038
2057
  }
2039
2058
 
2040
2059
  /** @public */
@@ -2278,7 +2297,7 @@ export declare interface NorskInput {
2278
2297
  /**
2279
2298
  * Playback from an existing Frame Store recording
2280
2299
  */
2281
- frameStorePlayer(settings: FrameStorePlayerSettings): Promise<FrameStorePlayerNode>;
2300
+ frameStore(settings: FrameStorePlayerSettings): Promise<FrameStorePlayerNode>;
2282
2301
  }
2283
2302
 
2284
2303
  /**
@@ -2422,13 +2441,13 @@ export declare interface NorskOutput {
2422
2441
  *
2423
2442
  * @param settings - Configuration for the frame store recorder
2424
2443
  */
2425
- frameStoreRecording(settings: FrameStoreRecorderSettings): Promise<FrameStoreRecorderNode>;
2444
+ frameStore(settings: FrameStoreRecorderSettings): Promise<FrameStoreRecorderNode>;
2426
2445
  /**
2427
2446
  * Create a Moq Egest
2428
2447
  *
2429
2448
  * @param settings - Configuration for the egest
2430
2449
  */
2431
- moqEgest(settings: MoqEgestSettings): Promise<MoqEgestNode>;
2450
+ moq(settings: MoqOutputSettings): Promise<MoqOutputNode>;
2432
2451
  }
2433
2452
 
2434
2453
  /** @public */
@@ -2495,6 +2514,14 @@ export declare interface NorskTransform {
2495
2514
  * @param settings - Encode ladder settings
2496
2515
  */
2497
2516
  videoEncode(settings: VideoEncodeSettings): Promise<VideoEncodeNode>;
2517
+ /**
2518
+ * Decode a video stream to a specific type of 'raw' format
2519
+ * this isn't usually needed because decode will happen automatically for nodes that need raw data
2520
+ * however if we definitely want a hardware decode and we're creating nodes that accept inMemory raw, we can use this node
2521
+ * to ensure that the hardware decode takes place
2522
+ * @param settings - Decode settings
2523
+ */
2524
+ videoDecode(settings: VideoDecodeSettings): Promise<VideoDecodeNode>;
2498
2525
  /**
2499
2526
  * Transform a single video stream (rescale, frame rate, etc)
2500
2527
  * @param settings - Transform settings
@@ -2529,7 +2556,10 @@ export declare interface NorskTransform {
2529
2556
  audioTranscribeAzure(settings: AudioTranscribeAzureSettings): Promise<AudioTranscribeAzureNode>;
2530
2557
  /**
2531
2558
  * Create a Media Node performing transcription into subtitles using the
2532
- * Whisper speech recognition model.
2559
+ * Whisper speech recognition model via the whisper-cpp SDK.
2560
+ *
2561
+ * For reference on general concepts https://github.com/ggerganov/whisper.cpp - many settings are directly settings on the
2562
+ * underlying library and can be evaluted via the CLI tool there also.
2533
2563
  * @param settings - Settings and credentials for Whisper transcribe
2534
2564
  */
2535
2565
  audioTranscribeWhisper(settings: AudioTranscribeWhisperSettings): Promise<AudioTranscribeWhisperNode>;
@@ -2571,6 +2601,10 @@ export declare interface NorskTransform {
2571
2601
  * bitrate.
2572
2602
  */
2573
2603
  audioEncode(settings: AudioEncodeSettings): Promise<AudioEncodeNode>;
2604
+ /**
2605
+ * Translate subtitles using the AWS Translate service
2606
+ */
2607
+ subtitleTranslateAws(settings: SubtitleTranslateAwsSettings): Promise<SubtitleTranslateAwsNode>;
2574
2608
  /**
2575
2609
  * A node to nudge the timestamps on a stream, which affects how it syncs
2576
2610
  * with other streams. Useful for correcting for drift between different
@@ -2772,13 +2806,13 @@ export declare type NvidiaPreset = "p1" | "p2" | "p3" | "p4" | "p5" | "p6" | "p7
2772
2806
  export declare interface NvidiaRateControl {
2773
2807
  /** the mode to use for this rate control operation */
2774
2808
  mode: NvidiaRateControlMode;
2775
- /** The average bitrate of this encode */
2809
+ /** The average bitrate of this encode (bits/sec) */
2776
2810
  averageBitrate: number;
2777
- /** The max bitrate of this encode */
2811
+ /** The max bitrate of this encode (bits/sec) */
2778
2812
  maxBitrate?: number;
2779
- /** The vbv buffer size used for this encode */
2813
+ /** The vbv buffer size used for this encode (bits) */
2780
2814
  vbvBufferSize?: number;
2781
- /** The vbv initial delay used for this encode */
2815
+ /** The vbv initial delay used for this encode (bits) */
2782
2816
  vbvInitialDelay?: number;
2783
2817
  /** Enable lookahead or not:
2784
2818
  * Note: enabling lookahead will introduce scene cuts unless this is specifically disabled
@@ -2871,12 +2905,6 @@ export declare type PlaylistOnChangeFn<ClientMessage> = {
2871
2905
  hlsTsMultiVariantPlaylist?: (grpcStream: grpc.ClientDuplexStream<ClientMessage, HlsOutputEvent>, destinationId: DestinationId, playlist: string) => void;
2872
2906
  };
2873
2907
 
2874
- /** @public */
2875
- declare enum PlaylistPath {
2876
- Cmaf = 0,
2877
- Ts = 1
2878
- }
2879
-
2880
2908
  /**
2881
2909
  * @public
2882
2910
  * Returns the stream keys for playlist streams in a media context
@@ -3745,6 +3773,26 @@ export declare interface SrtInputSettings extends RemoteInputSettings<SrtInputNo
3745
3773
  * Stream ID to set on the socket when acting in caller mode
3746
3774
  */
3747
3775
  streamId?: string;
3776
+ /**
3777
+ * The latency value in the receiving direction of the socket (SRTO_RCVLATENCY)
3778
+ */
3779
+ receiveLatency?: number;
3780
+ /**
3781
+ * The latency value provided by the sender side as a minimum value for the receiver (SRTO_PEERLATENCY)
3782
+ */
3783
+ peerLatency?: number;
3784
+ /**
3785
+ * Input bandwidth (SRTO_INPUTBW)
3786
+ */
3787
+ inputBandwidth?: number;
3788
+ /**
3789
+ * Overhead bandwidth (SRTO_OHEADBW)
3790
+ */
3791
+ overheadBandwidth?: number;
3792
+ /**
3793
+ * Max bandwidth (SRTO_MAXBW)
3794
+ */
3795
+ maxBandwidth?: number;
3748
3796
  /**
3749
3797
  * On connect callback, notifying that a new caller has connected (in listener mode) and set the source name accordingly
3750
3798
  * @eventProperty
@@ -3797,6 +3845,26 @@ export declare interface SrtOutputSettings extends SinkNodeSettings<SrtOutputNod
3797
3845
  * Stream ID to set on the socket when acting in caller mode
3798
3846
  */
3799
3847
  streamId?: string;
3848
+ /**
3849
+ * The latency value in the receiving direction of the socket (SRTO_RCVLATENCY)
3850
+ */
3851
+ receiveLatency?: number;
3852
+ /**
3853
+ * The latency value provided by the sender side as a minimum value for the receiver (SRTO_PEERLATENCY)
3854
+ */
3855
+ peerLatency?: number;
3856
+ /**
3857
+ * Input bandwidth (SRTO_INPUTBW)
3858
+ */
3859
+ inputBandwidth?: number;
3860
+ /**
3861
+ * Overhead bandwidth (SRTO_OHEADBW)
3862
+ */
3863
+ overheadBandwidth?: number;
3864
+ /**
3865
+ * Max bandwidth (SRTO_MAXBW)
3866
+ */
3867
+ maxBandwidth?: number;
3800
3868
  /**
3801
3869
  * The mode to act in (see {@link SrtMode})
3802
3870
  */
@@ -3976,6 +4044,12 @@ export declare interface StreamMetadataOverrideSettingsUpdate {
3976
4044
  subtitles?: {
3977
4045
  /** Override the language metadata of a subtitles stream, or `""` to clear. RFC 5646 language tag. */
3978
4046
  language?: string;
4047
+ /** Override the property of whether a subtitles string is the default/primary rendition or not */
4048
+ default?: boolean;
4049
+ };
4050
+ playlist?: {
4051
+ /** Override the name of a playlist stream, or `""` to clear. Free form text. */
4052
+ name?: string;
3979
4053
  };
3980
4054
  }
3981
4055
 
@@ -4249,6 +4323,31 @@ export declare interface SubtitleStreamMetadata {
4249
4323
  */
4250
4324
  export declare function subtitleStreams(streams: readonly StreamMetadata[]): StreamMetadata[];
4251
4325
 
4326
+ /**
4327
+ * @public
4328
+ * see: {@link NorskTransform.subtitleTranslateAws}
4329
+ */
4330
+ export declare class SubtitleTranslateAwsNode extends AutoProcessorMediaNode<"audio"> {
4331
+ }
4332
+
4333
+ /**
4334
+ * @public
4335
+ * Settings for an Audio Transcribe operation using AWS
4336
+ * see: {@link NorskTransform.subtitleTranslateAws}
4337
+ * */
4338
+ export declare interface SubtitleTranslateAwsSettings extends ProcessorNodeSettings<SubtitleTranslateAwsNode> {
4339
+ /** Source language code/tag, e.g. de or fr-CA (omit to use the source subtitle language / AWS automatic detection) */
4340
+ sourceLanguage?: string;
4341
+ /** Target language code/tag, e.g. en or es-MX */
4342
+ targetLanguage: string;
4343
+ /** Enable brevity option */
4344
+ brevity?: boolean;
4345
+ /** Enable profanity masking */
4346
+ maskProfanity?: boolean;
4347
+ }
4348
+
4349
+ export declare function toDeinterlaceSettings(settings: DeinterlaceSettings): VideoTransformConfiguration["deinterlace"];
4350
+
4252
4351
  declare class TsCommonInputNode<SourceMessage, T extends SourceMediaNode> extends SourceMediaNode {
4253
4352
  constructor(tsType: TsInputType, client: MediaClient, unregisterNode: (node: MediaNodeState) => void, settings: SourceNodeSettings<T> & StreamStatisticsMixin, nudgeFn: (nudge: TimestampProgramNudge) => SourceMessage, onEof: (() => void) | undefined, grpcStartFn: () => grpc.ClientDuplexStream<SourceMessage, TsInputEvent>);
4254
4353
  /**
@@ -4432,6 +4531,22 @@ export declare interface VideoComposeSettingsUpdate<Pins extends string> {
4432
4531
  parts: readonly ComposePart<Pins>[];
4433
4532
  }
4434
4533
 
4534
+ /**
4535
+ * @public
4536
+ * see: {@link NorskTransform.videoDecode}
4537
+ */
4538
+ export declare class VideoDecodeNode extends AutoProcessorMediaNode<"video"> {
4539
+ }
4540
+
4541
+ /**
4542
+ * @public
4543
+ * Settings for a VideoDecode operation
4544
+ * see: {@link NorskTransform.videoDecode}
4545
+ * */
4546
+ export declare interface VideoDecodeSettings extends ProcessorNodeSettings<VideoDecodeNode> {
4547
+ decoder: 'software' | 'nvidia' | 'quadra' | 'logan' | 'xilinx';
4548
+ }
4549
+
4435
4550
  /**
4436
4551
  * @public
4437
4552
  * see: {@link NorskTransform.videoEncode}
@@ -4563,6 +4678,8 @@ export declare interface VideoTransformSettings extends ProcessorNodeSettings<Vi
4563
4678
  resolution?: Resolution;
4564
4679
  /** An optional framerate to resample this single stream to */
4565
4680
  frameRate?: FrameRate;
4681
+ /** An optional de-interlace algorithm to apply on this stream */
4682
+ deinterlace?: DeinterlaceSettings;
4566
4683
  /** An optional SAR to set on the outgoing stream
4567
4684
  * Note: You can set this and only this if the SAR on your incoming stream is incorrect
4568
4685
  * for example (An often-seen problem with sources)
@@ -4737,7 +4854,7 @@ export declare interface X264Codec {
4737
4854
  */
4738
4855
  cabac?: boolean;
4739
4856
  /**
4740
- * Sets the maximum rate the VBV buffer should be assumed to refill at
4857
+ * Sets the maximum rate the VBV buffer should be assumed to refill at (kbit/s)
4741
4858
  */
4742
4859
  vbvMaxRate?: number;
4743
4860
  /**
@@ -4839,7 +4956,7 @@ export declare interface X265Codec {
4839
4956
  */
4840
4957
  frameReference?: number;
4841
4958
  /**
4842
- * Sets the maximum rate the VBV buffer should be assumed to refill at
4959
+ * Sets the maximum rate the VBV buffer should be assumed to refill at (kbit/s)
4843
4960
  */
4844
4961
  vbvMaxRate?: number;
4845
4962
  /**
@@ -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
  };