stormcloud-video-player 0.3.17 → 0.4.1

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/index.d.cts CHANGED
@@ -7,7 +7,6 @@ interface AdBreak {
7
7
  id?: string;
8
8
  startTimeMs: number;
9
9
  durationMs?: number;
10
- vastTagUrl?: string;
11
10
  }
12
11
  interface AdSchedule {
13
12
  breaks: AdBreak[];
@@ -32,16 +31,11 @@ interface StormcloudVideoPlayerConfig {
32
31
  onFullscreenToggle?: () => void;
33
32
  onControlClick?: () => void;
34
33
  licenseKey?: string;
35
- adPlayerType?: 'ima' | 'hls';
36
- vastTagUrl?: string;
37
- vastMode?: 'adstorm' | 'default';
38
34
  minSegmentsBeforePlay?: number;
39
35
  }
40
- interface ImaController {
36
+ interface AdController {
41
37
  initialize: () => void;
42
- requestAds: (vastTagUrl: string) => Promise<void>;
43
- preloadAds: (vastTagUrl: string) => Promise<void>;
44
- hasPreloadedAd: (vastTagUrl: string) => boolean;
38
+ requestAds: (duration: string) => Promise<void>;
45
39
  play: () => Promise<void>;
46
40
  stop: () => Promise<void>;
47
41
  destroy: () => void;
@@ -56,8 +50,9 @@ interface ImaController {
56
50
  getAdVolume: () => number;
57
51
  showPlaceholder: () => void;
58
52
  hidePlaceholder: () => void;
53
+ setAllowNativeHls: (allowNativeHls: boolean) => void;
59
54
  }
60
- interface ImaControllerOptions {
55
+ interface AdControllerOptions {
61
56
  maxRetries?: number;
62
57
  backoffBaseMs?: number;
63
58
  }
@@ -106,53 +101,21 @@ declare class StormcloudVideoPlayer {
106
101
  private readonly video;
107
102
  private readonly config;
108
103
  private hls?;
109
- private ima;
104
+ private adPlayer;
110
105
  private attached;
111
106
  private inAdBreak;
112
- private currentAdBreakStartWallClockMs;
113
107
  private expectedAdBreakDurationMs;
114
108
  private adStopTimerId;
115
- private adStartTimerId;
116
- private adFailsafeTimerId;
117
109
  private ptsDriftEmaMs;
118
- private adPodQueue;
119
- private apiVastTagUrl;
120
- private apiNumberAds;
121
- private lastHeartbeatTime;
122
- private heartbeatInterval;
123
- private currentAdIndex;
124
- private totalAdsInBreak;
125
- private showAds;
126
110
  private isLiveStream;
127
111
  private nativeHlsMode;
128
112
  private videoSrcProtection;
129
113
  private bufferedSegmentsCount;
130
114
  private shouldAutoplayAfterBuffering;
131
115
  private hasInitialBufferCompleted;
132
- private adPodAllUrls;
133
- private preloadingAdUrls;
134
- private vastToMediaUrlMap;
135
- private preloadedMediaUrls;
136
- private preloadingMediaUrls;
137
- private adRequestTokenCounter;
138
- private activeAdRequestToken;
139
- private adRequestWatchdogId;
140
- private adRequestWatchdogToken;
141
- private adFailsafeToken;
142
- private fetchedAdDurations;
143
- private targetAdBreakDurationMs;
144
- private isAdaptiveMode;
145
- private failedVastUrls;
146
- private continuousFetchingActive;
147
- private adRequestQueue;
148
- private successfulAdRequests;
149
- private maxPlaceholderDurationMs;
150
- private placeholderStartTimeMs;
151
- private isShowingPlaceholder;
152
116
  private timeUpdateHandler?;
153
117
  private emptiedHandler?;
154
118
  constructor(config: StormcloudVideoPlayerConfig);
155
- private createAdPlayer;
156
119
  load(): Promise<void>;
157
120
  private attach;
158
121
  private shouldUseNativeHls;
@@ -160,58 +123,19 @@ declare class StormcloudVideoPlayer {
160
123
  private parseScte35FromId3;
161
124
  private decodeId3ValueToText;
162
125
  private onScte35Marker;
126
+ private handleAdStart;
163
127
  private parseCueOutDuration;
164
128
  private parseCueOutCont;
165
129
  private parseAttributeList;
166
130
  private toNumber;
167
- private isManifestBasedMarker;
168
- private parseScte35Binary;
169
- private initializeTracking;
170
- private sendHeartbeatIfNeeded;
171
- private fetchAdConfiguration;
172
- getCurrentAdIndex(): number;
173
- getTotalAdsInBreak(): number;
174
- private generateVastUrlsWithCorrelators;
175
- isAdPlaying(): boolean;
176
- isShowingAds(): boolean;
177
- getStreamType(): "hls" | "other";
178
- shouldShowNativeControls(): boolean;
179
- private shouldContinueLiveStreamDuringAds;
180
- private handleAdStart;
181
- private startContinuousFetching;
182
- private continuousFetchLoop;
183
- private stopContinuousFetching;
184
- private tryNextAvailableAd;
185
- private showPlaceholderAndWaitForAds;
186
- private findCurrentOrNextBreak;
187
- private onTimeUpdate;
188
- private handleMidAdJoin;
189
131
  private scheduleAdStopCountdown;
190
132
  private clearAdStopTimer;
191
- private ensureAdStoppedByTimer;
192
- private scheduleAdStartIn;
193
- private clearAdStartTimer;
194
133
  private updatePtsDrift;
195
- private playSingleAd;
196
134
  private handleAdPodComplete;
197
- private handleAdFailure;
198
- private startAdRequestWatchdog;
199
- private clearAdRequestWatchdog;
200
- private startAdFailsafeTimer;
201
- private clearAdFailsafeTimer;
202
- private selectVastTagsForBreak;
203
- private logAdState;
204
- private fetchAndParseVastXml;
205
- private extractMediaUrlsFromVast;
206
- private fetchVastDuration;
207
- private calculateAdditionalAdsNeeded;
208
- private addAdaptiveAdsToQueue;
209
- private preloadMediaFile;
210
- private preloadAllAdsInBackground;
211
- private preloadSingleAd;
212
- private findNextPreloadedAd;
213
- private getRemainingAdMs;
214
- private findBreakForTime;
135
+ isAdPlaying(): boolean;
136
+ isShowingAds(): boolean;
137
+ getStreamType(): "hls" | "other";
138
+ shouldShowNativeControls(): boolean;
215
139
  toggleMute(): void;
216
140
  toggleFullscreen(): Promise<void>;
217
141
  isMuted(): boolean;
@@ -222,6 +146,8 @@ declare class StormcloudVideoPlayer {
222
146
  get videoElement(): HTMLVideoElement;
223
147
  resize(): void;
224
148
  destroy(): void;
149
+ getCurrentAdIndex(): number;
150
+ getTotalAdsInBreak(): number;
225
151
  }
226
152
 
227
153
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
@@ -3849,34 +3775,26 @@ interface BrowserInfo {
3849
3775
  isSmartTV: boolean;
3850
3776
  isLegacyTV: boolean;
3851
3777
  platform: string;
3852
- supportsIMA: boolean;
3853
3778
  supportsModernJS: boolean;
3854
- recommendedAdPlayer: 'ima' | 'hls';
3855
3779
  }
3856
3780
  declare function detectBrowser(): BrowserInfo;
3857
- declare function supportsGoogleIMA(): boolean;
3858
- declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3859
3781
  declare function supportsModernJS(): boolean;
3860
3782
  declare function logBrowserInfo(debug?: boolean): void;
3861
3783
  declare function getBrowserConfigOverrides(): {
3862
- adPlayerType?: 'ima' | 'hls';
3863
3784
  allowNativeHls?: boolean;
3864
3785
  };
3865
3786
  declare function supportsFeature(feature: string): boolean;
3866
3787
 
3867
- declare global {
3868
- interface Window {
3869
- google?: any;
3870
- }
3871
- }
3872
- declare function createImaController(video: HTMLVideoElement, options?: {
3873
- continueLiveStreamDuringAds?: boolean;
3874
- }): ImaController;
3875
-
3876
3788
  declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3877
3789
  continueLiveStreamDuringAds?: boolean;
3878
3790
  licenseKey?: string;
3879
3791
  mainHlsInstance?: Hls;
3880
- }): ImaController;
3792
+ }): AdController;
3793
+
3794
+ interface AdStormPlayerOptions {
3795
+ licenseKey: string;
3796
+ debug?: boolean;
3797
+ }
3798
+ declare function createAdStormPlayer(contentVideo: HTMLVideoElement, options: AdStormPlayerOptions): AdController;
3881
3799
 
3882
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createHlsAdPlayer, createImaController, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, getRecommendedAdPlayer, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsGoogleIMA, supportsModernJS, supportsWebKitPresentationMode };
3800
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createAdStormPlayer, createHlsAdPlayer, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.d.ts CHANGED
@@ -7,7 +7,6 @@ interface AdBreak {
7
7
  id?: string;
8
8
  startTimeMs: number;
9
9
  durationMs?: number;
10
- vastTagUrl?: string;
11
10
  }
12
11
  interface AdSchedule {
13
12
  breaks: AdBreak[];
@@ -32,16 +31,11 @@ interface StormcloudVideoPlayerConfig {
32
31
  onFullscreenToggle?: () => void;
33
32
  onControlClick?: () => void;
34
33
  licenseKey?: string;
35
- adPlayerType?: 'ima' | 'hls';
36
- vastTagUrl?: string;
37
- vastMode?: 'adstorm' | 'default';
38
34
  minSegmentsBeforePlay?: number;
39
35
  }
40
- interface ImaController {
36
+ interface AdController {
41
37
  initialize: () => void;
42
- requestAds: (vastTagUrl: string) => Promise<void>;
43
- preloadAds: (vastTagUrl: string) => Promise<void>;
44
- hasPreloadedAd: (vastTagUrl: string) => boolean;
38
+ requestAds: (duration: string) => Promise<void>;
45
39
  play: () => Promise<void>;
46
40
  stop: () => Promise<void>;
47
41
  destroy: () => void;
@@ -56,8 +50,9 @@ interface ImaController {
56
50
  getAdVolume: () => number;
57
51
  showPlaceholder: () => void;
58
52
  hidePlaceholder: () => void;
53
+ setAllowNativeHls: (allowNativeHls: boolean) => void;
59
54
  }
60
- interface ImaControllerOptions {
55
+ interface AdControllerOptions {
61
56
  maxRetries?: number;
62
57
  backoffBaseMs?: number;
63
58
  }
@@ -106,53 +101,21 @@ declare class StormcloudVideoPlayer {
106
101
  private readonly video;
107
102
  private readonly config;
108
103
  private hls?;
109
- private ima;
104
+ private adPlayer;
110
105
  private attached;
111
106
  private inAdBreak;
112
- private currentAdBreakStartWallClockMs;
113
107
  private expectedAdBreakDurationMs;
114
108
  private adStopTimerId;
115
- private adStartTimerId;
116
- private adFailsafeTimerId;
117
109
  private ptsDriftEmaMs;
118
- private adPodQueue;
119
- private apiVastTagUrl;
120
- private apiNumberAds;
121
- private lastHeartbeatTime;
122
- private heartbeatInterval;
123
- private currentAdIndex;
124
- private totalAdsInBreak;
125
- private showAds;
126
110
  private isLiveStream;
127
111
  private nativeHlsMode;
128
112
  private videoSrcProtection;
129
113
  private bufferedSegmentsCount;
130
114
  private shouldAutoplayAfterBuffering;
131
115
  private hasInitialBufferCompleted;
132
- private adPodAllUrls;
133
- private preloadingAdUrls;
134
- private vastToMediaUrlMap;
135
- private preloadedMediaUrls;
136
- private preloadingMediaUrls;
137
- private adRequestTokenCounter;
138
- private activeAdRequestToken;
139
- private adRequestWatchdogId;
140
- private adRequestWatchdogToken;
141
- private adFailsafeToken;
142
- private fetchedAdDurations;
143
- private targetAdBreakDurationMs;
144
- private isAdaptiveMode;
145
- private failedVastUrls;
146
- private continuousFetchingActive;
147
- private adRequestQueue;
148
- private successfulAdRequests;
149
- private maxPlaceholderDurationMs;
150
- private placeholderStartTimeMs;
151
- private isShowingPlaceholder;
152
116
  private timeUpdateHandler?;
153
117
  private emptiedHandler?;
154
118
  constructor(config: StormcloudVideoPlayerConfig);
155
- private createAdPlayer;
156
119
  load(): Promise<void>;
157
120
  private attach;
158
121
  private shouldUseNativeHls;
@@ -160,58 +123,19 @@ declare class StormcloudVideoPlayer {
160
123
  private parseScte35FromId3;
161
124
  private decodeId3ValueToText;
162
125
  private onScte35Marker;
126
+ private handleAdStart;
163
127
  private parseCueOutDuration;
164
128
  private parseCueOutCont;
165
129
  private parseAttributeList;
166
130
  private toNumber;
167
- private isManifestBasedMarker;
168
- private parseScte35Binary;
169
- private initializeTracking;
170
- private sendHeartbeatIfNeeded;
171
- private fetchAdConfiguration;
172
- getCurrentAdIndex(): number;
173
- getTotalAdsInBreak(): number;
174
- private generateVastUrlsWithCorrelators;
175
- isAdPlaying(): boolean;
176
- isShowingAds(): boolean;
177
- getStreamType(): "hls" | "other";
178
- shouldShowNativeControls(): boolean;
179
- private shouldContinueLiveStreamDuringAds;
180
- private handleAdStart;
181
- private startContinuousFetching;
182
- private continuousFetchLoop;
183
- private stopContinuousFetching;
184
- private tryNextAvailableAd;
185
- private showPlaceholderAndWaitForAds;
186
- private findCurrentOrNextBreak;
187
- private onTimeUpdate;
188
- private handleMidAdJoin;
189
131
  private scheduleAdStopCountdown;
190
132
  private clearAdStopTimer;
191
- private ensureAdStoppedByTimer;
192
- private scheduleAdStartIn;
193
- private clearAdStartTimer;
194
133
  private updatePtsDrift;
195
- private playSingleAd;
196
134
  private handleAdPodComplete;
197
- private handleAdFailure;
198
- private startAdRequestWatchdog;
199
- private clearAdRequestWatchdog;
200
- private startAdFailsafeTimer;
201
- private clearAdFailsafeTimer;
202
- private selectVastTagsForBreak;
203
- private logAdState;
204
- private fetchAndParseVastXml;
205
- private extractMediaUrlsFromVast;
206
- private fetchVastDuration;
207
- private calculateAdditionalAdsNeeded;
208
- private addAdaptiveAdsToQueue;
209
- private preloadMediaFile;
210
- private preloadAllAdsInBackground;
211
- private preloadSingleAd;
212
- private findNextPreloadedAd;
213
- private getRemainingAdMs;
214
- private findBreakForTime;
135
+ isAdPlaying(): boolean;
136
+ isShowingAds(): boolean;
137
+ getStreamType(): "hls" | "other";
138
+ shouldShowNativeControls(): boolean;
215
139
  toggleMute(): void;
216
140
  toggleFullscreen(): Promise<void>;
217
141
  isMuted(): boolean;
@@ -222,6 +146,8 @@ declare class StormcloudVideoPlayer {
222
146
  get videoElement(): HTMLVideoElement;
223
147
  resize(): void;
224
148
  destroy(): void;
149
+ getCurrentAdIndex(): number;
150
+ getTotalAdsInBreak(): number;
225
151
  }
226
152
 
227
153
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
@@ -3849,34 +3775,26 @@ interface BrowserInfo {
3849
3775
  isSmartTV: boolean;
3850
3776
  isLegacyTV: boolean;
3851
3777
  platform: string;
3852
- supportsIMA: boolean;
3853
3778
  supportsModernJS: boolean;
3854
- recommendedAdPlayer: 'ima' | 'hls';
3855
3779
  }
3856
3780
  declare function detectBrowser(): BrowserInfo;
3857
- declare function supportsGoogleIMA(): boolean;
3858
- declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3859
3781
  declare function supportsModernJS(): boolean;
3860
3782
  declare function logBrowserInfo(debug?: boolean): void;
3861
3783
  declare function getBrowserConfigOverrides(): {
3862
- adPlayerType?: 'ima' | 'hls';
3863
3784
  allowNativeHls?: boolean;
3864
3785
  };
3865
3786
  declare function supportsFeature(feature: string): boolean;
3866
3787
 
3867
- declare global {
3868
- interface Window {
3869
- google?: any;
3870
- }
3871
- }
3872
- declare function createImaController(video: HTMLVideoElement, options?: {
3873
- continueLiveStreamDuringAds?: boolean;
3874
- }): ImaController;
3875
-
3876
3788
  declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3877
3789
  continueLiveStreamDuringAds?: boolean;
3878
3790
  licenseKey?: string;
3879
3791
  mainHlsInstance?: Hls;
3880
- }): ImaController;
3792
+ }): AdController;
3793
+
3794
+ interface AdStormPlayerOptions {
3795
+ licenseKey: string;
3796
+ debug?: boolean;
3797
+ }
3798
+ declare function createAdStormPlayer(contentVideo: HTMLVideoElement, options: AdStormPlayerOptions): AdController;
3881
3799
 
3882
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createHlsAdPlayer, createImaController, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, getRecommendedAdPlayer, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsGoogleIMA, supportsModernJS, supportsWebKitPresentationMode };
3800
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createAdStormPlayer, createHlsAdPlayer, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };