@vindral/web-sdk 2.0.12 → 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/index.d.ts +43 -20
- package/package.json +1 -1
- package/web-sdk.esm.js +1 -1
- package/web-sdk.umd.js +1 -1
package/README.md
CHANGED
|
@@ -60,10 +60,10 @@ This example attaches a player to an element with the id `#root`. The player wil
|
|
|
60
60
|
|
|
61
61
|
The example assumes that there is a html page that loads this script that has at least a div with `id="#root"`.
|
|
62
62
|
|
|
63
|
-
```
|
|
63
|
+
```javascript
|
|
64
64
|
import { Player } from "@vindral/web-sdk"
|
|
65
65
|
|
|
66
|
-
const root = document.querySelector
|
|
66
|
+
const root = document.querySelector("#root")
|
|
67
67
|
|
|
68
68
|
const player = new Player({
|
|
69
69
|
url: "https://lb.cdn.vindral.com",
|
|
@@ -85,12 +85,12 @@ The Core SDK is the lowest level method to integrate that provides only a video
|
|
|
85
85
|
|
|
86
86
|
The example assumes that there is a html page that loads this script that has at least a div with `id="#root"`, `id="#playback-state"` and a button with `id="#activate-audio-button"`.
|
|
87
87
|
|
|
88
|
-
```
|
|
88
|
+
```javascript
|
|
89
89
|
import { Vindral } from "@vindral/web-sdk"
|
|
90
90
|
|
|
91
|
-
const root = document.querySelector
|
|
92
|
-
const button = document.querySelector
|
|
93
|
-
const playbackState = document.querySelector
|
|
91
|
+
const root = document.querySelector("#root")!
|
|
92
|
+
const button = document.querySelector("#activate-audio-button")!
|
|
93
|
+
const playbackState = document.querySelector("#playback-state")!
|
|
94
94
|
|
|
95
95
|
button.style.display = "none"
|
|
96
96
|
|
package/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ interface BaseCodedSample {
|
|
|
7
7
|
timescale: number;
|
|
8
8
|
duration: number;
|
|
9
9
|
data: ArrayBuffer;
|
|
10
|
+
compositionTimeOffset?: number;
|
|
10
11
|
}
|
|
11
12
|
interface CodedAudioSample extends BaseCodedSample {
|
|
12
13
|
type: "audio";
|
|
@@ -179,7 +180,9 @@ export interface PlaybackSource {
|
|
|
179
180
|
muted: boolean;
|
|
180
181
|
currentTime: number;
|
|
181
182
|
playbackRate?: number;
|
|
183
|
+
isActivated: boolean;
|
|
182
184
|
readonly seekTime: number;
|
|
185
|
+
readonly paused: boolean;
|
|
183
186
|
readonly isSeeking: boolean;
|
|
184
187
|
play(initiator: PlayInitiator): Promise<void>;
|
|
185
188
|
}
|
|
@@ -204,6 +207,7 @@ declare class MediaElement extends Emitter<MediaElementEvents> {
|
|
|
204
207
|
private seekStartTime?;
|
|
205
208
|
private _userProvidedMuted;
|
|
206
209
|
private _userHasProvidedInput;
|
|
210
|
+
isActivated: boolean;
|
|
207
211
|
constructor({ type, autoplay, muted, logger }: MediaElementOptions);
|
|
208
212
|
attach: (container: HTMLElement) => void;
|
|
209
213
|
get seekTime(): number;
|
|
@@ -359,12 +363,14 @@ declare class AudioPlayerModule {
|
|
|
359
363
|
private clockDelta?;
|
|
360
364
|
private startTimeIsInvalidated;
|
|
361
365
|
private lastSampleTimestamp;
|
|
366
|
+
isActivated: boolean;
|
|
362
367
|
get volume(): number;
|
|
363
368
|
set volume(volume: number);
|
|
364
369
|
get seekTime(): number;
|
|
365
370
|
get isSeeking(): boolean;
|
|
366
371
|
get muted(): boolean;
|
|
367
372
|
set muted(muted: boolean);
|
|
373
|
+
get paused(): boolean;
|
|
368
374
|
get currentTime(): number;
|
|
369
375
|
set currentTime(currentTime: number);
|
|
370
376
|
constructor(emitter: Emitter<AudioPlayerModuleListeners, AudioPlayerModuleEvents>, logger: Logger, clockSource: ClockSource, muted: boolean);
|
|
@@ -477,6 +483,7 @@ declare class ConnectionModule {
|
|
|
477
483
|
private onTransportChange;
|
|
478
484
|
disconnect: (reason?: string) => void;
|
|
479
485
|
reconnect: (reason: string) => void;
|
|
486
|
+
private cleanupPingIntervals;
|
|
480
487
|
private sendPing;
|
|
481
488
|
}
|
|
482
489
|
interface Size {
|
|
@@ -724,7 +731,6 @@ declare class DocumentStateModule implements DocumentState {
|
|
|
724
731
|
private onOffline;
|
|
725
732
|
private onPageHide;
|
|
726
733
|
private onVisibilityChanged;
|
|
727
|
-
private onFocusChange;
|
|
728
734
|
private setIsActive;
|
|
729
735
|
}
|
|
730
736
|
interface IncomingDataModuleListeners {
|
|
@@ -773,19 +779,23 @@ declare class LoggerModule {
|
|
|
773
779
|
interface MetadataModuleEvents {
|
|
774
780
|
["metadata"]: Readonly<Metadata>;
|
|
775
781
|
}
|
|
776
|
-
interface
|
|
777
|
-
|
|
782
|
+
interface TimeSource {
|
|
783
|
+
readonly drift: number | undefined;
|
|
784
|
+
readonly serverCurrentTime: number;
|
|
778
785
|
}
|
|
779
786
|
declare class MetadataModule {
|
|
780
787
|
private static METADATA_TIMEOUT;
|
|
788
|
+
private static METADATA_CHECK_INTERVAL;
|
|
781
789
|
private logger;
|
|
782
790
|
private emitter;
|
|
783
791
|
private waitingMetadata;
|
|
784
792
|
private isTriggered;
|
|
785
|
-
|
|
793
|
+
private timeSource;
|
|
794
|
+
private timers;
|
|
795
|
+
constructor(emitter: Emitter<unknown, MetadataModuleEvents>, logger: Logger, timeSource: TimeSource);
|
|
786
796
|
load: () => void;
|
|
787
797
|
unload: () => void;
|
|
788
|
-
static create: (emitter: Emitter<
|
|
798
|
+
static create: (emitter: Emitter<unknown, MetadataModuleEvents>, logger: Logger, timeSource: TimeSource) => MetadataModule;
|
|
789
799
|
addMetadata: (metadata: Metadata) => void;
|
|
790
800
|
private onBufferedStateChanged;
|
|
791
801
|
}
|
|
@@ -916,12 +926,14 @@ declare class SubscriptionModule {
|
|
|
916
926
|
private currentSubscription;
|
|
917
927
|
private _isSwitchingSubscription;
|
|
918
928
|
private pendingSubscriptionTimeoutId?;
|
|
929
|
+
private burstMs;
|
|
919
930
|
private constructor();
|
|
920
931
|
unload: () => void;
|
|
921
932
|
static create: (logger: Logger, emitter: Emitter<SubscriptionModuleListeners>, subscription: Subscription) => SubscriptionModule;
|
|
922
933
|
isSwitchingSubscription: () => boolean;
|
|
923
934
|
getTargetSubscription: () => Subscription;
|
|
924
935
|
getCurrentSubscription: () => Subscription;
|
|
936
|
+
enableBurst: (bufferTimeMs: number) => void;
|
|
925
937
|
setSize: (size: Readonly<Size>) => void;
|
|
926
938
|
setVideoConstraint: (constraint: VideoConstraint) => void;
|
|
927
939
|
setAudioConstraint: (constraint: AudioConstraint) => void;
|
|
@@ -931,6 +943,7 @@ declare class SubscriptionModule {
|
|
|
931
943
|
setLanguage: (language: string | undefined) => void;
|
|
932
944
|
setVideoCodec: (videoCodec: VideoCodec | undefined) => void;
|
|
933
945
|
setAudioCodec: (audioCodec: AudioCodec | undefined) => void;
|
|
946
|
+
private setBurst;
|
|
934
947
|
private onSubscriptionChanged;
|
|
935
948
|
private scheduleSubscriptionChange;
|
|
936
949
|
}
|
|
@@ -957,8 +970,9 @@ interface BufferSource {
|
|
|
957
970
|
interface SyncModuleStatistics {
|
|
958
971
|
drift: number | undefined;
|
|
959
972
|
driftAdjustmentCount: number;
|
|
960
|
-
|
|
973
|
+
timeshiftDriftAdjustmentCount: number;
|
|
961
974
|
discardedTimeInfoCount: number;
|
|
975
|
+
seekTime: number;
|
|
962
976
|
}
|
|
963
977
|
declare class SyncModule {
|
|
964
978
|
private emitter;
|
|
@@ -966,25 +980,29 @@ declare class SyncModule {
|
|
|
966
980
|
private playbackSource;
|
|
967
981
|
private bufferSource;
|
|
968
982
|
private lastSeekTime;
|
|
969
|
-
readonly seekCooldownTime =
|
|
983
|
+
readonly seekCooldownTime = 1000;
|
|
984
|
+
readonly seekTimeoutTime = 3000;
|
|
970
985
|
readonly syncMaxBehind: number;
|
|
971
986
|
readonly syncMaxBehindMultiplierStep = 1;
|
|
972
987
|
readonly syncMaxBehindIncreaseEvery = 5;
|
|
973
988
|
readonly syncMaxBehindMaximumAllowed = 1000;
|
|
974
989
|
syncMaxBehindMultiplier: number;
|
|
975
990
|
readonly syncMaxAhead = 150;
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
991
|
+
timeshiftSync: {
|
|
992
|
+
enabled: boolean;
|
|
993
|
+
maxBehind: number;
|
|
994
|
+
multiplier: number;
|
|
995
|
+
maxBehindAllowed: number;
|
|
996
|
+
overshoot: number;
|
|
997
|
+
minOvershootAllowed: number;
|
|
998
|
+
maxOvershootAllowed: number;
|
|
981
999
|
};
|
|
982
|
-
readonly maxTimeSyncDifferenceTolerance =
|
|
1000
|
+
readonly maxTimeSyncDifferenceTolerance = 150;
|
|
983
1001
|
private timers;
|
|
984
1002
|
private rtt;
|
|
985
1003
|
private channelSyncInfo;
|
|
986
1004
|
private driftAdjustmentsCount;
|
|
987
|
-
private
|
|
1005
|
+
private timeshiftDriftAdjustmentCount;
|
|
988
1006
|
private timestampOffset?;
|
|
989
1007
|
private currentChannelId?;
|
|
990
1008
|
private highestSeenTimestamps;
|
|
@@ -997,11 +1015,12 @@ declare class SyncModule {
|
|
|
997
1015
|
suspend: () => void;
|
|
998
1016
|
unsuspend: () => void;
|
|
999
1017
|
activateSyncAdjustments: () => void;
|
|
1000
|
-
static create: (emitter: Emitter<SyncModuleListeners, SyncModuleEvents>, logger: Logger, playbackSource: PlaybackSource, bufferSource: BufferSource,
|
|
1018
|
+
static create: (emitter: Emitter<SyncModuleListeners, SyncModuleEvents>, logger: Logger, playbackSource: PlaybackSource, bufferSource: BufferSource, isTimeshiftSyncEnabled: boolean) => SyncModule;
|
|
1001
1019
|
reset: () => void;
|
|
1002
1020
|
getTimeshiftOffset: () => number;
|
|
1003
1021
|
getCurrentChannelId: () => string | undefined;
|
|
1004
1022
|
updateChannelSyncInfo(channelId: string, syncInfo: SyncInfo): void;
|
|
1023
|
+
private tryApplySyncInfo;
|
|
1005
1024
|
getLiveEdgeTime: (channelId: string) => number | undefined;
|
|
1006
1025
|
getLiveEdgeTimeLatencyAdjusted: (channelId: string) => number | undefined;
|
|
1007
1026
|
getWallclockTime: (channelId: string) => number | undefined;
|
|
@@ -1012,19 +1031,21 @@ declare class SyncModule {
|
|
|
1012
1031
|
get drift(): number | undefined;
|
|
1013
1032
|
private updateRtt;
|
|
1014
1033
|
isPlaybackSourceReadyToSeek: () => boolean;
|
|
1034
|
+
private isSeeking;
|
|
1015
1035
|
private isAllowedToSync;
|
|
1016
1036
|
private isSeekCooldownExpired;
|
|
1037
|
+
private isSeekTimeoutExpired;
|
|
1038
|
+
private currentTimeshiftMaxBehind;
|
|
1017
1039
|
private currentSyncMaxBehind;
|
|
1040
|
+
private currentSyncMaxAhead;
|
|
1041
|
+
private tryTimeshiftSync;
|
|
1018
1042
|
private onSync;
|
|
1019
|
-
playbackRateSync: (drift: number, playbackRate: number) => [
|
|
1020
|
-
boolean,
|
|
1021
|
-
number
|
|
1022
|
-
];
|
|
1023
1043
|
}
|
|
1024
1044
|
declare const defaultOptions: {
|
|
1025
1045
|
sizeBasedResolutionCapEnabled: boolean;
|
|
1026
1046
|
pictureInPictureEnabled: boolean;
|
|
1027
1047
|
abrEnabled: boolean;
|
|
1048
|
+
burstEnabled: boolean;
|
|
1028
1049
|
mseEnabled: boolean;
|
|
1029
1050
|
mseOpusEnabled: boolean;
|
|
1030
1051
|
muted: boolean;
|
|
@@ -1299,6 +1320,7 @@ export interface Options {
|
|
|
1299
1320
|
maxBufferTime?: number;
|
|
1300
1321
|
sizeBasedResolutionCapEnabled?: boolean;
|
|
1301
1322
|
pictureInPictureEnabled?: boolean;
|
|
1323
|
+
burstEnabled?: boolean;
|
|
1302
1324
|
mseEnabled?: boolean;
|
|
1303
1325
|
mseOpusEnabled?: boolean;
|
|
1304
1326
|
abrEnabled?: boolean;
|
|
@@ -1389,6 +1411,7 @@ interface Subscription {
|
|
|
1389
1411
|
channelId: string;
|
|
1390
1412
|
video: VideoConstraint;
|
|
1391
1413
|
audio: AudioConstraint;
|
|
1414
|
+
burstMs?: number;
|
|
1392
1415
|
meta?: Record<string, string>;
|
|
1393
1416
|
initiator?: SubscriptionInitiator;
|
|
1394
1417
|
}
|
|
@@ -1524,6 +1547,7 @@ export declare class CastSender extends Emitter<CastSenderEvents> {
|
|
|
1524
1547
|
init: () => Promise<void>;
|
|
1525
1548
|
start: () => Promise<void>;
|
|
1526
1549
|
stop: () => void;
|
|
1550
|
+
getReceiverName: () => string | undefined;
|
|
1527
1551
|
private onGCastApiAvailable;
|
|
1528
1552
|
private send;
|
|
1529
1553
|
private onMessage;
|
|
@@ -1531,7 +1555,6 @@ export declare class CastSender extends Emitter<CastSenderEvents> {
|
|
|
1531
1555
|
private onSessionStateChanged;
|
|
1532
1556
|
private getInstance;
|
|
1533
1557
|
private getSession;
|
|
1534
|
-
private getReceiverName;
|
|
1535
1558
|
private castLibrariesAdded;
|
|
1536
1559
|
private verifyCastLibraries;
|
|
1537
1560
|
}
|
package/package.json
CHANGED