@vindral/web-sdk 2.0.6 → 2.0.10

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/index.d.ts CHANGED
@@ -85,6 +85,7 @@ declare class Emitter<TEvents, TEmits = TEvents, ArgLessEvents extends VoidKeys<
85
85
  once<T extends ArgEvents>(eventName: T, fn: (args: TEvents[T]) => void): void;
86
86
  private add;
87
87
  }
88
+ declare type FilterFunc<T> = (item: T) => boolean;
88
89
  declare class Fifo<T> {
89
90
  readonly maxSize: number;
90
91
  private values;
@@ -97,6 +98,7 @@ declare class Fifo<T> {
97
98
  isFull: () => boolean;
98
99
  isEmpty: () => boolean;
99
100
  items: () => ReadonlyArray<T>;
101
+ filterPop: (filter: FilterFunc<T>) => void;
100
102
  }
101
103
  declare type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<T>;
102
104
  interface MinMaxAverage {
@@ -171,6 +173,62 @@ declare class LoggerInstance implements Logger {
171
173
  error: (message: string, meta?: Meta | undefined) => void;
172
174
  critical: (message: string, meta?: Meta | undefined) => void;
173
175
  }
176
+ export declare type PlayInitiator = "user input" | "programatically";
177
+ export interface PlaybackSource {
178
+ volume: number;
179
+ muted: boolean;
180
+ currentTime: number;
181
+ playbackRate?: number;
182
+ readonly seekTime: number;
183
+ readonly isSeeking: boolean;
184
+ play(initiator: PlayInitiator): Promise<void>;
185
+ }
186
+ interface MediaElementOptions {
187
+ autoplay: boolean;
188
+ muted: boolean;
189
+ type: "audio" | "video";
190
+ logger: Logger;
191
+ }
192
+ interface NeedsUserInputContext {
193
+ forAudio: boolean;
194
+ forVideo: boolean;
195
+ }
196
+ interface MediaElementEvents {
197
+ ["needs user input"]: NeedsUserInputContext;
198
+ ["buffer state"]: Readonly<BufferState>;
199
+ }
200
+ declare class MediaElement extends Emitter<MediaElementEvents> {
201
+ readonly element: HTMLMediaElement;
202
+ private logger;
203
+ private seekTimes;
204
+ private seekStartTime?;
205
+ private _userProvidedMuted;
206
+ private _userHasProvidedInput;
207
+ constructor({ type, autoplay, muted, logger }: MediaElementOptions);
208
+ attach: (container: HTMLElement) => void;
209
+ get seekTime(): number;
210
+ get isSeeking(): boolean;
211
+ get currentTime(): number;
212
+ set currentTime(value: number);
213
+ get playbackRate(): number;
214
+ set playbackRate(rate: number);
215
+ get volume(): number;
216
+ set volume(volume: number);
217
+ get muted(): boolean;
218
+ set muted(muted: boolean);
219
+ get userHasProvidedInput(): boolean;
220
+ get paused(): boolean;
221
+ getPlaybackRate: () => number;
222
+ getPlaybackState: () => PlaybackState;
223
+ setPlaybackRate: (rate: number) => void;
224
+ getBuffer: () => TimeRange[];
225
+ play: (initiator: PlayInitiator) => Promise<void>;
226
+ private _play;
227
+ private onEvent;
228
+ private onBufferStateChange;
229
+ private onSeekStart;
230
+ private onSeekEnd;
231
+ }
174
232
  declare type PlaybackState = "buffering" | "playing";
175
233
  declare type BufferStateEvent = "filled" | "drained";
176
234
  declare type BufferState = {
@@ -180,6 +238,7 @@ declare type BufferState = {
180
238
  };
181
239
  interface PlaybackModuleListeners {
182
240
  ["buffer state"]: Readonly<BufferState>;
241
+ ["needs user input"]: NeedsUserInputContext;
183
242
  }
184
243
  interface PlaybackModuleEvents {
185
244
  ["buffer state event"]: Readonly<BufferStateEvent>;
@@ -191,6 +250,8 @@ interface ClockSource {
191
250
  }
192
251
  interface PlaybackModuleStatistics {
193
252
  bufferTime: number;
253
+ needsInputForAudioCount: number;
254
+ needsInputForVideoCount: number;
194
255
  }
195
256
  declare class PlaybackModule {
196
257
  private emitter;
@@ -201,6 +262,8 @@ declare class PlaybackModule {
201
262
  private targetBufferTime;
202
263
  private lastBufferStateEvent;
203
264
  private firstFrameTime?;
265
+ private needsInputForAudioCount;
266
+ private needsInputForVideoCount;
204
267
  constructor(emitter: Emitter<PlaybackModuleListeners, PlaybackModuleEvents>, logger: Logger, clockSource: ClockSource, targetBufferTime: number);
205
268
  static create: (emitter: Emitter<PlaybackModuleListeners, PlaybackModuleEvents>, logger: Logger, clockSource: ClockSource, targetBufferTime: number) => PlaybackModule;
206
269
  unload: () => void;
@@ -212,6 +275,7 @@ declare class PlaybackModule {
212
275
  getFirstFrameTime: () => number | undefined;
213
276
  getStatistics: () => PlaybackModuleStatistics;
214
277
  private onBufferedStateChanged;
278
+ private onNeedsUserInput;
215
279
  }
216
280
  declare type Direction = "upgrade" | "downgrade" | "double downgrade" | "reconnect";
217
281
  interface QualityOfServiceConfig {
@@ -271,7 +335,7 @@ interface AudioPlayerModuleListeners {
271
335
  ["decoded frame"]: Readonly<DecodedSample>;
272
336
  }
273
337
  interface AudioPlayerModuleEvents {
274
- ["needs user input"]: void;
338
+ ["needs user input"]: NeedsUserInputContext;
275
339
  }
276
340
  interface ClockSource {
277
341
  readonly currentTime: number;
@@ -283,14 +347,18 @@ declare class AudioPlayerModule {
283
347
  private audio?;
284
348
  private gainNode?;
285
349
  private _volume;
350
+ private _userProvidedMuted;
351
+ private _muted;
286
352
  private startTime;
287
353
  private samples;
354
+ private preInitSampleQueue;
288
355
  private sampleRate;
289
356
  private channels;
290
357
  private index;
291
358
  private clockSource;
292
359
  private clockDelta?;
293
360
  private startTimeIsInvalidated;
361
+ private lastSampleTimestamp;
294
362
  get volume(): number;
295
363
  set volume(volume: number);
296
364
  get seekTime(): number;
@@ -299,11 +367,11 @@ declare class AudioPlayerModule {
299
367
  set muted(muted: boolean);
300
368
  get currentTime(): number;
301
369
  set currentTime(currentTime: number);
302
- constructor(emitter: Emitter<AudioPlayerModuleListeners, AudioPlayerModuleEvents>, logger: Logger, clockSource: ClockSource);
370
+ constructor(emitter: Emitter<AudioPlayerModuleListeners, AudioPlayerModuleEvents>, logger: Logger, clockSource: ClockSource, muted: boolean);
303
371
  unload: () => Promise<void>;
304
372
  suspend: () => void;
305
373
  unsuspend: () => void;
306
- static create: (emitter: Emitter<AudioPlayerModuleListeners, AudioPlayerModuleEvents>, logger: Logger, clockSource: ClockSource) => AudioPlayerModule;
374
+ static create: (emitter: Emitter<AudioPlayerModuleListeners, AudioPlayerModuleEvents>, logger: Logger, clockSource: ClockSource, muted: boolean) => AudioPlayerModule;
307
375
  private flush;
308
376
  private onDecodedFrame;
309
377
  play: () => Promise<void>;
@@ -323,6 +391,8 @@ export declare const AUTHENTICATION_EXPIRED_CODE = "authentication_expired";
323
391
  export declare const CHANNEL_NOT_FOUND_CODE = "channel_not_found";
324
392
  export declare const NO_INCOMING_DATA = "no_incoming_data_error";
325
393
  export declare const INACTIVITY_CODE = "connection_inactivity";
394
+ export declare const MISSING_INIT_SEGMENT = "missing_init_segment";
395
+ export declare const NO_TRACK_CONTEXT = "no_track_context";
326
396
  export declare class VindralError extends Error {
327
397
  private props;
328
398
  private extra;
@@ -333,20 +403,22 @@ export declare class VindralError extends Error {
333
403
  toStringifiable: () => Record<string, unknown>;
334
404
  }
335
405
  export declare const mediaElementError: (isFatal: boolean, mediaError: MediaError) => VindralError;
406
+ export declare const missingInitSegmentError: (renditionId: number, channelId: string) => VindralError;
407
+ export declare const noTrackContextError: (type: "audio" | "video", renditionId: number, channelId: string) => VindralError;
336
408
  export declare const audioContextTimeoutError: () => VindralError;
337
409
  export declare const authenticationError: () => VindralError;
338
410
  export declare const authenticationExpiredError: () => VindralError;
339
411
  export declare const inactivityError: () => VindralError;
340
412
  export declare const channelNotFoundError: () => VindralError;
341
413
  export declare const noIncomingDataError: () => VindralError;
342
- export declare const unableToConnectError: () => VindralError;
414
+ export declare const unableToConnectError: (source?: Error | undefined) => VindralError;
343
415
  export declare const unableToConnectAfterRetriesError: () => VindralError;
344
- export declare const isValidOptions: (options: unknown) => options is Options;
345
- export declare const validateOptions: (options: Options) => Options;
346
416
  declare type State = "connected" | "disconnected" | "connecting";
417
+ declare type ContextSwitchState = "completed" | "started";
347
418
  interface ConnectionModuleListeners {
348
419
  ["send signal"]: Readonly<string>;
349
420
  ["disconnect"]: void;
421
+ ["reconnect"]: string;
350
422
  }
351
423
  interface ConnectionModuleEvents {
352
424
  ["received signal"]: Readonly<Signal>;
@@ -354,6 +426,8 @@ interface ConnectionModuleEvents {
354
426
  ["connection state"]: Readonly<State>;
355
427
  ["rtt"]: number;
356
428
  ["error"]: Readonly<VindralError>;
429
+ ["context switch complete"]: Readonly<void>;
430
+ ["context switch started"]: Readonly<void>;
357
431
  }
358
432
  interface ConnectOptions {
359
433
  connectHandler: () => Promise<string>;
@@ -367,6 +441,7 @@ interface ConnectionStatistics {
367
441
  }
368
442
  declare class ConnectionModule {
369
443
  private static PING_INTERVAL;
444
+ private static MAX_MISSED_PINGS;
370
445
  private static TLS_ROUNDTRIPS;
371
446
  private timers;
372
447
  private emitter;
@@ -379,6 +454,7 @@ declare class ConnectionModule {
379
454
  private connectCount;
380
455
  private _firstConnectionTime?;
381
456
  private _lastConnectionTime?;
457
+ private missedPings;
382
458
  private contextSwitchesInProgress;
383
459
  private contextSwitchesCompleted;
384
460
  private buffer;
@@ -403,6 +479,13 @@ declare class ConnectionModule {
403
479
  reconnect: (reason: string) => void;
404
480
  private sendPing;
405
481
  }
482
+ interface Size {
483
+ width: number;
484
+ height: number;
485
+ }
486
+ interface PictureInPictureSizeSource {
487
+ getPictureInPictureSize(): Size | undefined;
488
+ }
406
489
  export interface RenditionLevel {
407
490
  audio?: AudioRendition;
408
491
  video?: VideoRendition;
@@ -468,6 +551,7 @@ declare class RenditionsModule {
468
551
  setRenditions: (channelId: ChannelId, renditions: Rendition[]) => void;
469
552
  getLanguages: () => ReadonlyArray<string>;
470
553
  getVideoRendition: (renditionId: number, channelId?: string) => Readonly<VideoRendition> | undefined;
554
+ getAudioRenditions: (channelId: ChannelId) => Readonly<AudioRendition[]> | undefined;
471
555
  getAudioRendition: (renditionId: number, channelId?: string) => Readonly<AudioRendition> | undefined;
472
556
  getRendition: (renditionId: number, channelId?: string) => Readonly<Rendition> | undefined;
473
557
  getStatistics: () => RenditionsModuleStatistics;
@@ -477,192 +561,6 @@ declare class RenditionsModule {
477
561
  private createRenditionLevels;
478
562
  private getCurrentSubscription;
479
563
  }
480
- interface Size {
481
- width: number;
482
- height: number;
483
- }
484
- interface SubscriptionModuleListeners {
485
- ["subscription changed"]: Readonly<SubscriptionChange>;
486
- }
487
- declare class SubscriptionModule {
488
- private logger;
489
- private timers;
490
- private emitter;
491
- private targetSubscription;
492
- private currentSubscription;
493
- private _isSwitchingSubscription;
494
- private pendingSubscriptionTimeoutId?;
495
- private constructor();
496
- unload: () => void;
497
- static create: (logger: Logger, emitter: Emitter<SubscriptionModuleListeners>, subscription: Subscription) => SubscriptionModule;
498
- isSwitchingSubscription: () => boolean;
499
- getTargetSubscription: () => Subscription;
500
- getCurrentSubscription: () => Subscription;
501
- setSize: (size: Readonly<Size>) => void;
502
- setVideoConstraint: (constraint: VideoConstraint) => void;
503
- setAudioConstraint: (constraint: AudioConstraint) => void;
504
- setVideoBitRate: (bitRate: number) => void;
505
- setAudioBitRate: (bitRate: number) => void;
506
- setChannelId: (channelId: string) => void;
507
- setLanguage: (language: string | undefined) => void;
508
- setVideoCodec: (videoCodec: VideoCodec | undefined) => void;
509
- setAudioCodec: (audioCodec: AudioCodec | undefined) => void;
510
- private onSubscriptionChanged;
511
- private scheduleSubscriptionChange;
512
- }
513
- interface UserAgentInformation {
514
- userAgent: string;
515
- locationOrigin: string;
516
- locationPath: string;
517
- ancestorOrigins?: string[];
518
- }
519
- declare type StatisticsType<K> = K extends {
520
- getStatistics: () => unknown;
521
- } ? ReturnType<K["getStatistics"]> : never;
522
- declare type StatisticsTypes = {
523
- [Property in keyof Modules]: StatisticsType<Modules[Property]>;
524
- };
525
- export declare type ModuleStatistics = Flatten<StatisticsTypes>;
526
- export declare type Statistics = ModuleStatistics & UserAgentInformation & {
527
- version: string;
528
- ip?: string;
529
- url: string;
530
- sessionId: string;
531
- uptime: number;
532
- videoBitRate?: number;
533
- audioBitRate?: number;
534
- bytesReceived: number;
535
- channelId: string;
536
- channelGroupId?: string;
537
- timeToFirstFrame?: number;
538
- };
539
- export declare class Vindral extends Emitter<PublicVindralEvents> {
540
- private static INITIAL_MAX_BIT_RATE;
541
- readonly pictureInPicture: {
542
- enter: () => Promise<void>;
543
- exit: () => Promise<void>;
544
- isActive: () => boolean;
545
- isSupported: () => boolean;
546
- };
547
- readonly cast: {
548
- init: () => Promise<void>;
549
- start: () => void;
550
- stop: () => void;
551
- };
552
- private browser;
553
- private options;
554
- private element;
555
- private playbackSource;
556
- private emitter;
557
- private logger;
558
- private modules;
559
- private clientIp?;
560
- private sessionId;
561
- private _channels;
562
- private createdAt;
563
- private hasCalledConnect;
564
- private apiClient;
565
- private durationSessions;
566
- constructor(options: Options);
567
- attach: (container: HTMLElement) => void;
568
- set volume(volume: number);
569
- get volume(): number;
570
- get videoBitRate(): number;
571
- get audioBitRate(): number;
572
- get connectionState(): Readonly<State>;
573
- get playbackState(): Readonly<PlaybackState>;
574
- get bufferFullness(): number;
575
- get abrEnabled(): boolean;
576
- set abrEnabled(enabled: boolean);
577
- get serverEdgeTime(): number | undefined;
578
- get serverWallclockTime(): number | undefined;
579
- get currentTime(): number;
580
- get targetBufferTime(): number;
581
- set targetBufferTime(bufferTimeMs: number);
582
- get playbackLatency(): number | undefined;
583
- get playbackWallclockTime(): number | undefined;
584
- get channels(): ReadonlyArray<Channel>;
585
- get languages(): ReadonlyArray<string>;
586
- get language(): string | undefined;
587
- set language(language: string | undefined);
588
- get channelId(): string;
589
- set channelId(channelId: string);
590
- get maxSize(): Size;
591
- set maxSize(size: Size);
592
- get maxBitRate(): number;
593
- set maxBitRate(bitRate: number);
594
- get maxVideoBitrate(): number;
595
- set maxVideoBitrate(bitRate: number);
596
- get maxAudioBitrate(): number;
597
- set maxAudioBitrate(bitRate: number);
598
- get renditionLevels(): ReadonlyArray<RenditionLevel>;
599
- get currentRenditionLevel(): Readonly<RenditionLevel> | undefined;
600
- get targetRenditionLevel(): Readonly<RenditionLevel> | undefined;
601
- get isSwitchingRenditionLevel(): boolean;
602
- get videoBufferedRanges(): ReadonlyArray<TimeRange>;
603
- get audioBufferedRanges(): ReadonlyArray<TimeRange>;
604
- get lastBufferEvent(): Readonly<BufferStateEvent>;
605
- get activeRatios(): Map<string, number>;
606
- get bufferingRatios(): Map<string, number>;
607
- get timeSpentBuffering(): number;
608
- get timeActive(): number;
609
- updateAuthenticationToken: (token: string) => void;
610
- connect: () => void;
611
- private connectionInfo;
612
- private connectHandler;
613
- private filterRenditions;
614
- private patchSubscription;
615
- private isSupportedVideoCodecProfile;
616
- private supportedAudioCodecs;
617
- private initializeDecodingModule;
618
- unload: () => Promise<void>;
619
- userInput: () => void;
620
- private play;
621
- get uptime(): number;
622
- getStatistics: () => Statistics;
623
- private onBufferEvent;
624
- private alignSizeAndBitRate;
625
- private get currentSubscription();
626
- private get targetSubscription();
627
- private timeToFirstFrame;
628
- private willUseMediaSource;
629
- }
630
- interface CastModuleListeners {
631
- ["cast"]: void;
632
- }
633
- interface CastModuleEvents {
634
- ["cast started"]: void;
635
- ["cast resumed"]: void;
636
- ["cast stopped"]: void;
637
- ["cast failed"]: void;
638
- }
639
- interface CastConfig {
640
- options: Options;
641
- background?: string;
642
- receiverApplicationId?: string;
643
- }
644
- declare class CastModule {
645
- private emitter;
646
- private logger;
647
- private state;
648
- get volume(): number;
649
- set volume(volume: number);
650
- constructor(emitter: Emitter<CastModuleListeners, CastModuleEvents>, logger: Logger);
651
- static create: (emitter: Emitter<CastModuleListeners, CastModuleEvents>, logger: Logger) => CastModule;
652
- unload: () => void;
653
- start: (config: CastConfig) => Promise<void>;
654
- stop: () => void;
655
- private onGCastApiAvailable;
656
- private onSessionStateChanged;
657
- private getInstance;
658
- }
659
- interface Size {
660
- width: number;
661
- height: number;
662
- }
663
- interface PictureInPictureSizeSource {
664
- getPictureInPictureSize(): Size | undefined;
665
- }
666
564
  declare type DeepPartial<T> = {
667
565
  [P in keyof T]?: DeepPartial<T[P]>;
668
566
  };
@@ -786,6 +684,10 @@ declare class DecoderModule {
786
684
  }
787
685
  type ConnectionType = "bluetooth" | "cellular" | "ethernet" | "mixed" | "none" | "other" | "unknown" | "wifi" | "wimax";
788
686
  type EffectiveConnectionType = "2g" | "3g" | "4g" | "slow-2g";
687
+ interface DocumentState {
688
+ readonly isVisible: boolean;
689
+ readonly isOnline: boolean;
690
+ }
789
691
  interface DocumentStateEvents {
790
692
  ["page active"]: boolean;
791
693
  ["pagehide"]: PageTransitionEvent;
@@ -803,7 +705,7 @@ interface DocumentStateModulesStatistics {
803
705
  navigatorSaveData?: boolean;
804
706
  navigatorDownlink?: number;
805
707
  }
806
- declare class DocumentStateModule {
708
+ declare class DocumentStateModule implements DocumentState {
807
709
  private emitter;
808
710
  private isVisibleCount;
809
711
  private isHiddenCount;
@@ -816,6 +718,8 @@ declare class DocumentStateModule {
816
718
  load: () => void;
817
719
  unsuspend: () => void;
818
720
  getStatistics: () => DocumentStateModulesStatistics;
721
+ get isOnline(): boolean;
722
+ get isVisible(): boolean;
819
723
  private onOnline;
820
724
  private onOffline;
821
725
  private onPageHide;
@@ -828,6 +732,7 @@ interface IncomingDataModuleListeners {
828
732
  }
829
733
  interface IncomingDataModuleEvents {
830
734
  ["no data timeout"]: number;
735
+ ["reconnect"]: string;
831
736
  ["error"]: Readonly<VindralError>;
832
737
  }
833
738
  interface IncomingDataModuleStatistics {
@@ -996,6 +901,39 @@ declare class QualityOfServiceModule {
996
901
  private setActive;
997
902
  private unsetActive;
998
903
  }
904
+ interface Size {
905
+ width: number;
906
+ height: number;
907
+ }
908
+ interface SubscriptionModuleListeners {
909
+ ["subscription changed"]: Readonly<SubscriptionChange>;
910
+ }
911
+ declare class SubscriptionModule {
912
+ private logger;
913
+ private timers;
914
+ private emitter;
915
+ private targetSubscription;
916
+ private currentSubscription;
917
+ private _isSwitchingSubscription;
918
+ private pendingSubscriptionTimeoutId?;
919
+ private constructor();
920
+ unload: () => void;
921
+ static create: (logger: Logger, emitter: Emitter<SubscriptionModuleListeners>, subscription: Subscription) => SubscriptionModule;
922
+ isSwitchingSubscription: () => boolean;
923
+ getTargetSubscription: () => Subscription;
924
+ getCurrentSubscription: () => Subscription;
925
+ setSize: (size: Readonly<Size>) => void;
926
+ setVideoConstraint: (constraint: VideoConstraint) => void;
927
+ setAudioConstraint: (constraint: AudioConstraint) => void;
928
+ setVideoBitRate: (bitRate: number) => void;
929
+ setAudioBitRate: (bitRate: number) => void;
930
+ setChannelId: (channelId: string) => void;
931
+ setLanguage: (language: string | undefined) => void;
932
+ setVideoCodec: (videoCodec: VideoCodec | undefined) => void;
933
+ setAudioCodec: (audioCodec: AudioCodec | undefined) => void;
934
+ private onSubscriptionChanged;
935
+ private scheduleSubscriptionChange;
936
+ }
999
937
  interface SyncSample {
1000
938
  type: Type;
1001
939
  isSync: boolean;
@@ -1041,7 +979,7 @@ declare class SyncModule {
1041
979
  readonly catchupRate: 1.05;
1042
980
  readonly slowdownRate: 0.95;
1043
981
  };
1044
- readonly maxTimeSyncDifferenceTolerance = 150;
982
+ readonly maxTimeSyncDifferenceTolerance = 20;
1045
983
  private timers;
1046
984
  private rtt;
1047
985
  private channelSyncInfo;
@@ -1065,7 +1003,9 @@ declare class SyncModule {
1065
1003
  getCurrentChannelId: () => string | undefined;
1066
1004
  updateChannelSyncInfo(channelId: string, syncInfo: SyncInfo): void;
1067
1005
  getLiveEdgeTime: (channelId: string) => number | undefined;
1006
+ getLiveEdgeTimeLatencyAdjusted: (channelId: string) => number | undefined;
1068
1007
  getWallclockTime: (channelId: string) => number | undefined;
1008
+ getWallclockTimeLatencyAdjusted: (channelId: string) => number | undefined;
1069
1009
  get serverCurrentTime(): number;
1070
1010
  processSample: <T extends SyncSample>(sample: T) => T;
1071
1011
  getStatistics: () => SyncModuleStatistics;
@@ -1081,6 +1021,147 @@ declare class SyncModule {
1081
1021
  number
1082
1022
  ];
1083
1023
  }
1024
+ declare const defaultOptions: {
1025
+ sizeBasedResolutionCapEnabled: boolean;
1026
+ pictureInPictureEnabled: boolean;
1027
+ abrEnabled: boolean;
1028
+ mseEnabled: boolean;
1029
+ mseOpusEnabled: boolean;
1030
+ muted: boolean;
1031
+ minBufferTime: number;
1032
+ maxBufferTime: number;
1033
+ logLevel: Level;
1034
+ maxSize: Size;
1035
+ maxVideoBitRate: number;
1036
+ maxAudioBitRate: number;
1037
+ tags: string[];
1038
+ media: Media;
1039
+ reconnectHandler: (state: ReconnectState) => Promise<boolean> | boolean;
1040
+ advanced: {
1041
+ wasmDecodingConstraint: Partial<VideoConstraint>;
1042
+ };
1043
+ };
1044
+ interface UserAgentInformation {
1045
+ userAgent: string;
1046
+ locationOrigin: string;
1047
+ locationPath: string;
1048
+ ancestorOrigins?: string[];
1049
+ }
1050
+ declare type StatisticsType<K> = K extends {
1051
+ getStatistics: () => unknown;
1052
+ } ? ReturnType<K["getStatistics"]> : never;
1053
+ declare type StatisticsTypes = {
1054
+ [Property in keyof Modules]: StatisticsType<Modules[Property]>;
1055
+ };
1056
+ export declare type ModuleStatistics = Flatten<StatisticsTypes>;
1057
+ export declare type Statistics = ModuleStatistics & UserAgentInformation & {
1058
+ version: string;
1059
+ ip?: string;
1060
+ url: string;
1061
+ sessionId: string;
1062
+ uptime: number;
1063
+ videoBitRate?: number;
1064
+ audioBitRate?: number;
1065
+ bytesReceived: number;
1066
+ channelId: string;
1067
+ channelGroupId?: string;
1068
+ timeToFirstFrame?: number;
1069
+ };
1070
+ export declare class Vindral extends Emitter<PublicVindralEvents> {
1071
+ private static INITIAL_MAX_BIT_RATE;
1072
+ private static PING_TIMEOUT;
1073
+ readonly pictureInPicture: {
1074
+ enter: () => Promise<void>;
1075
+ exit: () => Promise<void>;
1076
+ isActive: () => boolean;
1077
+ isSupported: () => boolean;
1078
+ };
1079
+ private browser;
1080
+ private options;
1081
+ private element;
1082
+ private playbackSource;
1083
+ private emitter;
1084
+ private logger;
1085
+ private modules;
1086
+ private clientIp?;
1087
+ private sessionId;
1088
+ private _channels;
1089
+ private createdAt;
1090
+ private hasCalledConnect;
1091
+ private apiClient;
1092
+ private latestEmittedLanguages;
1093
+ private durationSessions;
1094
+ constructor(options: Options);
1095
+ attach: (container: HTMLElement) => void;
1096
+ set volume(volume: number);
1097
+ get volume(): number;
1098
+ set muted(muted: boolean);
1099
+ get muted(): boolean;
1100
+ get media(): Media;
1101
+ get videoBitRate(): number;
1102
+ get audioBitRate(): number;
1103
+ get connectionState(): Readonly<State>;
1104
+ get playbackState(): Readonly<PlaybackState>;
1105
+ get bufferFullness(): number;
1106
+ get sizeBasedResolutionCapEnabled(): boolean;
1107
+ set sizeBasedResolutionCapEnabled(enabled: boolean);
1108
+ get abrEnabled(): boolean;
1109
+ set abrEnabled(enabled: boolean);
1110
+ get serverEdgeTime(): number | undefined;
1111
+ get serverWallclockTime(): number | undefined;
1112
+ get currentTime(): number;
1113
+ get targetBufferTime(): number;
1114
+ set targetBufferTime(bufferTimeMs: number);
1115
+ get playbackLatency(): number | undefined;
1116
+ get playbackWallclockTime(): number | undefined;
1117
+ get channels(): ReadonlyArray<Channel>;
1118
+ get languages(): ReadonlyArray<string>;
1119
+ get language(): string | undefined;
1120
+ set language(language: string | undefined);
1121
+ get channelId(): string;
1122
+ set channelId(channelId: string);
1123
+ get maxSize(): Size;
1124
+ set maxSize(size: Size);
1125
+ get maxVideoBitRate(): number;
1126
+ set maxVideoBitRate(bitRate: number);
1127
+ get maxAudioBitRate(): number;
1128
+ set maxAudioBitRate(bitRate: number);
1129
+ get renditionLevels(): ReadonlyArray<RenditionLevel>;
1130
+ get currentRenditionLevel(): Readonly<RenditionLevel> | undefined;
1131
+ get targetRenditionLevel(): Readonly<RenditionLevel> | undefined;
1132
+ get isSwitchingRenditionLevel(): boolean;
1133
+ get videoBufferedRanges(): ReadonlyArray<TimeRange>;
1134
+ get audioBufferedRanges(): ReadonlyArray<TimeRange>;
1135
+ get lastBufferEvent(): Readonly<BufferStateEvent>;
1136
+ get activeRatios(): Map<string, number>;
1137
+ get bufferingRatios(): Map<string, number>;
1138
+ get timeSpentBuffering(): number;
1139
+ get timeActive(): number;
1140
+ getOptions: () => Options & typeof defaultOptions;
1141
+ updateAuthenticationToken: (token: string) => void;
1142
+ connect: () => void;
1143
+ getCastOptions: () => Options;
1144
+ private connectionInfo;
1145
+ private estimateRTT;
1146
+ private connectHandler;
1147
+ private emitLanguagesIfChanged;
1148
+ private filterRenditions;
1149
+ private patchSubscription;
1150
+ private isSupportedVideoCodecProfile;
1151
+ private supportedAudioCodecs;
1152
+ private initializeDecodingModule;
1153
+ unload: () => Promise<void>;
1154
+ userInput: () => void;
1155
+ private play;
1156
+ get uptime(): number;
1157
+ getStatistics: () => Statistics;
1158
+ private onBufferEvent;
1159
+ private alignSizeAndBitRate;
1160
+ private get currentSubscription();
1161
+ private get targetSubscription();
1162
+ private timeToFirstFrame;
1163
+ private willUseMediaSource;
1164
+ }
1084
1165
  interface TelemetryModuleOptions {
1085
1166
  url: string;
1086
1167
  interval?: number;
@@ -1138,6 +1219,16 @@ declare class TimerModule {
1138
1219
  setInterval: (callback: (...args: unknown[]) => void, interval: number, ...args: unknown[]) => number;
1139
1220
  unload: () => void;
1140
1221
  }
1222
+ declare class UnpauseModule {
1223
+ private logger;
1224
+ private element;
1225
+ private documentState;
1226
+ private timers;
1227
+ private constructor();
1228
+ static create: (logger: Logger, element: MediaElement, documentState: DocumentState) => UnpauseModule;
1229
+ unload: () => void;
1230
+ private unpause;
1231
+ }
1141
1232
  interface VideoPlayerModuleListeners {
1142
1233
  ["decoded frame"]: Readonly<DecodedSample>;
1143
1234
  }
@@ -1184,10 +1275,10 @@ export interface Modules {
1184
1275
  qualityOfService: QualityOfServiceModule;
1185
1276
  metadata: MetadataModule;
1186
1277
  sync: SyncModule;
1187
- cast: CastModule;
1188
1278
  telemetry?: TelemetryModule;
1189
1279
  documentState: DocumentStateModule;
1190
1280
  incomingData: IncomingDataModule;
1281
+ unpause?: UnpauseModule;
1191
1282
  }
1192
1283
  export interface ReconnectState {
1193
1284
  reconnectRetries: number;
@@ -1224,18 +1315,9 @@ export interface Options {
1224
1315
  advanced?: AdvancedOptions;
1225
1316
  media?: Media;
1226
1317
  }
1227
- export interface PlaybackSource {
1228
- volume: number;
1229
- muted: boolean;
1230
- currentTime: number;
1231
- playbackRate?: number;
1232
- readonly seekTime: number;
1233
- readonly isSeeking: boolean;
1234
- play(): Promise<void>;
1235
- }
1236
1318
  export interface PublicVindralEvents {
1237
1319
  ["error"]: Readonly<VindralError>;
1238
- ["needs user input"]: void;
1320
+ ["needs user input"]: NeedsUserInputContext;
1239
1321
  ["metadata"]: Readonly<Metadata>;
1240
1322
  ["playback state"]: Readonly<PlaybackState>;
1241
1323
  ["connection state"]: Readonly<State>;
@@ -1243,6 +1325,7 @@ export interface PublicVindralEvents {
1243
1325
  ["rendition level"]: Readonly<RenditionLevel>;
1244
1326
  ["languages"]: ReadonlyArray<string>;
1245
1327
  ["channels"]: ReadonlyArray<Channel>;
1328
+ ["context switch"]: Readonly<ContextSwitchState>;
1246
1329
  ["server wallclock time"]: Readonly<number>;
1247
1330
  ["buffer state event"]: Readonly<BufferStateEvent>;
1248
1331
  ["initialized media"]: void;
@@ -1400,6 +1483,60 @@ export declare class ApiClient {
1400
1483
  private toChannels;
1401
1484
  private toChannel;
1402
1485
  }
1486
+ export declare type CastState = "casting" | "not casting";
1487
+ export interface CastSenderEvents {
1488
+ ["connected"]: void;
1489
+ ["resumed"]: void;
1490
+ ["disconnected"]: void;
1491
+ ["failed"]: void;
1492
+ ["metadata"]: Metadata;
1493
+ ["server wallclock time"]: number;
1494
+ }
1495
+ export interface CastConfig {
1496
+ options: Options;
1497
+ background?: string;
1498
+ receiverApplicationId?: string;
1499
+ }
1500
+ export declare type CustomCastMessageType = "stop" | "start" | "updateAuthToken" | "serverWallclockTime" | "metadata" | "setChannelId" | "setLanguage";
1501
+ export interface CastCustomMessage {
1502
+ type: CustomCastMessageType;
1503
+ channelId?: string;
1504
+ language?: string;
1505
+ config?: CastConfig;
1506
+ token?: string;
1507
+ serverWallclockTime?: number;
1508
+ metadata?: Metadata;
1509
+ }
1510
+ export declare class CastSender extends Emitter<CastSenderEvents> {
1511
+ private state;
1512
+ private config;
1513
+ private unloaded;
1514
+ constructor(config: CastConfig);
1515
+ get casting(): boolean;
1516
+ get volume(): number;
1517
+ set volume(volume: number);
1518
+ get language(): string | undefined;
1519
+ set language(language: string | undefined);
1520
+ get channelId(): string;
1521
+ set channelId(channelId: string);
1522
+ updateAuthenticationToken: (token: string) => void;
1523
+ unload: () => void;
1524
+ init: () => Promise<void>;
1525
+ start: () => Promise<void>;
1526
+ stop: () => void;
1527
+ private onGCastApiAvailable;
1528
+ private send;
1529
+ private onMessage;
1530
+ private onSessionStarted;
1531
+ private onSessionStateChanged;
1532
+ private getInstance;
1533
+ private getSession;
1534
+ private getReceiverName;
1535
+ private castLibrariesAdded;
1536
+ private verifyCastLibraries;
1537
+ }
1538
+ export declare const isValidOptions: (options: unknown) => options is Options;
1539
+ export declare const validateOptions: (options: Options) => Options;
1403
1540
  interface FullscreenEvents {
1404
1541
  ["on fullscreen change"]: boolean;
1405
1542
  }
@@ -1417,13 +1554,26 @@ declare class Fullscreen extends Emitter<FullscreenEvents> {
1417
1554
  }
1418
1555
  export interface PlayerOptions {
1419
1556
  controlsEnabled?: boolean;
1557
+ castEnabled?: boolean;
1420
1558
  fullscreenButtonEnabled?: boolean;
1421
1559
  pipButtonEnabled?: boolean;
1422
1560
  channelSelectionEnabled?: boolean;
1561
+ channelSelectionOptions?: {
1562
+ barButton?: {
1563
+ enabled?: boolean;
1564
+ thumbnails?: boolean;
1565
+ };
1566
+ list?: {
1567
+ enabled?: boolean;
1568
+ };
1569
+ };
1423
1570
  renditionLevelsEnabled?: boolean;
1424
1571
  languagesButtonEnabled?: boolean;
1425
1572
  oneToOneButtonEnabled?: boolean;
1426
1573
  hideTimeout?: number;
1574
+ castBackground?: string;
1575
+ castReceiverApplicationId?: string;
1576
+ thumbnailUpdateInterval?: number;
1427
1577
  }
1428
1578
  export interface PlayerState {
1429
1579
  isBuffering: boolean;
@@ -1432,16 +1582,21 @@ export interface PlayerState {
1432
1582
  }
1433
1583
  export declare class Player {
1434
1584
  readonly core: Vindral;
1585
+ readonly castSender: CastSender;
1435
1586
  private options;
1436
1587
  private state;
1437
1588
  private playerElement;
1438
1589
  private bufferingOverlay;
1590
+ private playOverlay;
1591
+ private channelSelectionList?;
1439
1592
  private bar;
1440
1593
  private stateInterval?;
1441
1594
  private showBufferingTimeout?;
1595
+ private thumbnailModule?;
1442
1596
  constructor(optionsOrInstance: Options | Vindral, playerOptions?: PlayerOptions);
1443
1597
  unload: () => void;
1444
1598
  attach: (container: HTMLElement) => void;
1599
+ private setupCastSender;
1445
1600
  private onMouseMove;
1446
1601
  private onClick;
1447
1602
  private togglePip;
@@ -1452,6 +1607,7 @@ export declare class Player {
1452
1607
  private lockOrientation;
1453
1608
  private unlockOrientation;
1454
1609
  private checkState;
1610
+ private needsThumbnails;
1455
1611
  private bumpInteractTime;
1456
1612
  }
1457
1613