stormcloud-video-player 0.3.17 → 0.4.0

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;
@@ -57,7 +51,7 @@ interface ImaController {
57
51
  showPlaceholder: () => void;
58
52
  hidePlaceholder: () => void;
59
53
  }
60
- interface ImaControllerOptions {
54
+ interface AdControllerOptions {
61
55
  maxRetries?: number;
62
56
  backoffBaseMs?: number;
63
57
  }
@@ -106,53 +100,21 @@ declare class StormcloudVideoPlayer {
106
100
  private readonly video;
107
101
  private readonly config;
108
102
  private hls?;
109
- private ima;
103
+ private adPlayer;
110
104
  private attached;
111
105
  private inAdBreak;
112
- private currentAdBreakStartWallClockMs;
113
106
  private expectedAdBreakDurationMs;
114
107
  private adStopTimerId;
115
- private adStartTimerId;
116
- private adFailsafeTimerId;
117
108
  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
109
  private isLiveStream;
127
110
  private nativeHlsMode;
128
111
  private videoSrcProtection;
129
112
  private bufferedSegmentsCount;
130
113
  private shouldAutoplayAfterBuffering;
131
114
  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
115
  private timeUpdateHandler?;
153
116
  private emptiedHandler?;
154
117
  constructor(config: StormcloudVideoPlayerConfig);
155
- private createAdPlayer;
156
118
  load(): Promise<void>;
157
119
  private attach;
158
120
  private shouldUseNativeHls;
@@ -160,58 +122,19 @@ declare class StormcloudVideoPlayer {
160
122
  private parseScte35FromId3;
161
123
  private decodeId3ValueToText;
162
124
  private onScte35Marker;
125
+ private handleAdStart;
163
126
  private parseCueOutDuration;
164
127
  private parseCueOutCont;
165
128
  private parseAttributeList;
166
129
  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
130
  private scheduleAdStopCountdown;
190
131
  private clearAdStopTimer;
191
- private ensureAdStoppedByTimer;
192
- private scheduleAdStartIn;
193
- private clearAdStartTimer;
194
132
  private updatePtsDrift;
195
- private playSingleAd;
196
133
  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;
134
+ isAdPlaying(): boolean;
135
+ isShowingAds(): boolean;
136
+ getStreamType(): "hls" | "other";
137
+ shouldShowNativeControls(): boolean;
215
138
  toggleMute(): void;
216
139
  toggleFullscreen(): Promise<void>;
217
140
  isMuted(): boolean;
@@ -222,6 +145,8 @@ declare class StormcloudVideoPlayer {
222
145
  get videoElement(): HTMLVideoElement;
223
146
  resize(): void;
224
147
  destroy(): void;
148
+ getCurrentAdIndex(): number;
149
+ getTotalAdsInBreak(): number;
225
150
  }
226
151
 
227
152
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
@@ -3849,34 +3774,26 @@ interface BrowserInfo {
3849
3774
  isSmartTV: boolean;
3850
3775
  isLegacyTV: boolean;
3851
3776
  platform: string;
3852
- supportsIMA: boolean;
3853
3777
  supportsModernJS: boolean;
3854
- recommendedAdPlayer: 'ima' | 'hls';
3855
3778
  }
3856
3779
  declare function detectBrowser(): BrowserInfo;
3857
- declare function supportsGoogleIMA(): boolean;
3858
- declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3859
3780
  declare function supportsModernJS(): boolean;
3860
3781
  declare function logBrowserInfo(debug?: boolean): void;
3861
3782
  declare function getBrowserConfigOverrides(): {
3862
- adPlayerType?: 'ima' | 'hls';
3863
3783
  allowNativeHls?: boolean;
3864
3784
  };
3865
3785
  declare function supportsFeature(feature: string): boolean;
3866
3786
 
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
3787
  declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3877
3788
  continueLiveStreamDuringAds?: boolean;
3878
3789
  licenseKey?: string;
3879
3790
  mainHlsInstance?: Hls;
3880
- }): ImaController;
3791
+ }): AdController;
3792
+
3793
+ interface AdStormPlayerOptions {
3794
+ licenseKey: string;
3795
+ debug?: boolean;
3796
+ }
3797
+ declare function createAdStormPlayer(contentVideo: HTMLVideoElement, options: AdStormPlayerOptions): AdController;
3881
3798
 
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 };
3799
+ 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;
@@ -57,7 +51,7 @@ interface ImaController {
57
51
  showPlaceholder: () => void;
58
52
  hidePlaceholder: () => void;
59
53
  }
60
- interface ImaControllerOptions {
54
+ interface AdControllerOptions {
61
55
  maxRetries?: number;
62
56
  backoffBaseMs?: number;
63
57
  }
@@ -106,53 +100,21 @@ declare class StormcloudVideoPlayer {
106
100
  private readonly video;
107
101
  private readonly config;
108
102
  private hls?;
109
- private ima;
103
+ private adPlayer;
110
104
  private attached;
111
105
  private inAdBreak;
112
- private currentAdBreakStartWallClockMs;
113
106
  private expectedAdBreakDurationMs;
114
107
  private adStopTimerId;
115
- private adStartTimerId;
116
- private adFailsafeTimerId;
117
108
  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
109
  private isLiveStream;
127
110
  private nativeHlsMode;
128
111
  private videoSrcProtection;
129
112
  private bufferedSegmentsCount;
130
113
  private shouldAutoplayAfterBuffering;
131
114
  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
115
  private timeUpdateHandler?;
153
116
  private emptiedHandler?;
154
117
  constructor(config: StormcloudVideoPlayerConfig);
155
- private createAdPlayer;
156
118
  load(): Promise<void>;
157
119
  private attach;
158
120
  private shouldUseNativeHls;
@@ -160,58 +122,19 @@ declare class StormcloudVideoPlayer {
160
122
  private parseScte35FromId3;
161
123
  private decodeId3ValueToText;
162
124
  private onScte35Marker;
125
+ private handleAdStart;
163
126
  private parseCueOutDuration;
164
127
  private parseCueOutCont;
165
128
  private parseAttributeList;
166
129
  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
130
  private scheduleAdStopCountdown;
190
131
  private clearAdStopTimer;
191
- private ensureAdStoppedByTimer;
192
- private scheduleAdStartIn;
193
- private clearAdStartTimer;
194
132
  private updatePtsDrift;
195
- private playSingleAd;
196
133
  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;
134
+ isAdPlaying(): boolean;
135
+ isShowingAds(): boolean;
136
+ getStreamType(): "hls" | "other";
137
+ shouldShowNativeControls(): boolean;
215
138
  toggleMute(): void;
216
139
  toggleFullscreen(): Promise<void>;
217
140
  isMuted(): boolean;
@@ -222,6 +145,8 @@ declare class StormcloudVideoPlayer {
222
145
  get videoElement(): HTMLVideoElement;
223
146
  resize(): void;
224
147
  destroy(): void;
148
+ getCurrentAdIndex(): number;
149
+ getTotalAdsInBreak(): number;
225
150
  }
226
151
 
227
152
  type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElement"> & React.VideoHTMLAttributes<HTMLVideoElement> & {
@@ -3849,34 +3774,26 @@ interface BrowserInfo {
3849
3774
  isSmartTV: boolean;
3850
3775
  isLegacyTV: boolean;
3851
3776
  platform: string;
3852
- supportsIMA: boolean;
3853
3777
  supportsModernJS: boolean;
3854
- recommendedAdPlayer: 'ima' | 'hls';
3855
3778
  }
3856
3779
  declare function detectBrowser(): BrowserInfo;
3857
- declare function supportsGoogleIMA(): boolean;
3858
- declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3859
3780
  declare function supportsModernJS(): boolean;
3860
3781
  declare function logBrowserInfo(debug?: boolean): void;
3861
3782
  declare function getBrowserConfigOverrides(): {
3862
- adPlayerType?: 'ima' | 'hls';
3863
3783
  allowNativeHls?: boolean;
3864
3784
  };
3865
3785
  declare function supportsFeature(feature: string): boolean;
3866
3786
 
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
3787
  declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3877
3788
  continueLiveStreamDuringAds?: boolean;
3878
3789
  licenseKey?: string;
3879
3790
  mainHlsInstance?: Hls;
3880
- }): ImaController;
3791
+ }): AdController;
3792
+
3793
+ interface AdStormPlayerOptions {
3794
+ licenseKey: string;
3795
+ debug?: boolean;
3796
+ }
3797
+ declare function createAdStormPlayer(contentVideo: HTMLVideoElement, options: AdStormPlayerOptions): AdController;
3881
3798
 
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 };
3799
+ 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 };