stormcloud-video-player 0.8.24 → 0.8.26
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/dist/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +669 -126
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +10 -1
- package/lib/index.d.ts +10 -1
- package/lib/index.js +666 -127
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +228 -48
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +5 -1
- package/lib/player/AdConfigManager.cjs +81 -4
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +12 -1
- package/lib/player/AdPreloadPool.d.cts +1 -1
- package/lib/player/AdTimingService.cjs +7 -0
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/AdTimingService.d.cts +2 -1
- package/lib/player/HlsEngine.d.cts +1 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +665 -126
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +2 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/HlsPlayer.cjs +665 -126
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +665 -126
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs +343 -71
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/{types-DNiBmPKK.d.cts → types-Xgz2_W1C.d.cts} +7 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +665 -126
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/tracking.cjs +22 -1
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +3 -2
- package/lib/utils/vastMacros.cjs +14 -1
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastMacros.d.cts +3 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as Scte35Marker, a as StormcloudVideoPlayerConfig, A as AdController } from '../types-
|
|
1
|
+
import { S as Scte35Marker, a as StormcloudVideoPlayerConfig, A as AdController } from '../types-Xgz2_W1C.cjs';
|
|
2
2
|
import { AdTimingService } from './AdTimingService.cjs';
|
|
3
3
|
import { AdPreloadPool } from './AdPreloadPool.cjs';
|
|
4
4
|
import { AdConfigManager } from './AdConfigManager.cjs';
|
|
@@ -17,6 +17,7 @@ interface AdBreakOrchestratorHost {
|
|
|
17
17
|
shouldContinueLiveStreamDuringAds(): boolean;
|
|
18
18
|
getLiveSyncPosition(): number | undefined;
|
|
19
19
|
generateVastUrls(baseUrl: string, count: number): string[];
|
|
20
|
+
generatePodVastUrl(baseUrl: string, breakDurationMs?: number): string;
|
|
20
21
|
}
|
|
21
22
|
declare class AdBreakOrchestrator {
|
|
22
23
|
inAdBreak: boolean;
|
|
@@ -44,10 +45,13 @@ declare class AdBreakOrchestrator {
|
|
|
44
45
|
private readonly placeholder;
|
|
45
46
|
constructor(host: AdBreakOrchestratorHost, timing: AdTimingService, preloadPool: AdPreloadPool, adConfig: AdConfigManager, cueManager: Scte35CueManager, placeholder: PlaceholderLayer);
|
|
46
47
|
private get debug();
|
|
48
|
+
private get analyticsContext();
|
|
49
|
+
private get optimizedPodsEnabled();
|
|
47
50
|
attachImaEventListeners(): void;
|
|
48
51
|
recreateAdController(): void;
|
|
49
52
|
clearPendingAdBreak(): void;
|
|
50
53
|
handleAdStart(_marker: Scte35Marker): Promise<void>;
|
|
54
|
+
private startOptimizedPod;
|
|
51
55
|
private swapToPreloadedAdPlayer;
|
|
52
56
|
private startContinuousFetching;
|
|
53
57
|
private continuousFetchLoop;
|
|
@@ -1085,7 +1085,20 @@ function applyVastMacros(baseUrl, ctx) {
|
|
|
1085
1085
|
if (ctx.pod != null) {
|
|
1086
1086
|
params.set("pod", String(ctx.pod));
|
|
1087
1087
|
}
|
|
1088
|
-
|
|
1088
|
+
var optimizedPodMode = ctx.podMaxAds != null || ctx.podMinDurationMs != null || ctx.podMaxDurationMs != null;
|
|
1089
|
+
if (optimizedPodMode) {
|
|
1090
|
+
params.delete("ppos");
|
|
1091
|
+
params.delete("lip");
|
|
1092
|
+
if (ctx.podMinDurationMs != null) {
|
|
1093
|
+
params.set("pmnd", String(Math.max(0, Math.round(ctx.podMinDurationMs))));
|
|
1094
|
+
}
|
|
1095
|
+
if (ctx.podMaxDurationMs != null) {
|
|
1096
|
+
params.set("pmxd", String(Math.max(0, Math.round(ctx.podMaxDurationMs))));
|
|
1097
|
+
}
|
|
1098
|
+
if (ctx.podMaxAds != null) {
|
|
1099
|
+
params.set("pmad", String(Math.max(1, Math.round(ctx.podMaxAds))));
|
|
1100
|
+
}
|
|
1101
|
+
} else if (ctx.adPosition != null) {
|
|
1089
1102
|
params.set("ppos", String(ctx.adPosition));
|
|
1090
1103
|
}
|
|
1091
1104
|
var requestUrl = ctx.contentUrl || ctx.pageUrl;
|
|
@@ -1270,6 +1283,16 @@ function publishMQTT(topic, payload) {
|
|
|
1270
1283
|
}
|
|
1271
1284
|
// src/utils/tracking.ts
|
|
1272
1285
|
var cachedBrowserId = null;
|
|
1286
|
+
function buildAnalyticsContext(config) {
|
|
1287
|
+
var context = {};
|
|
1288
|
+
if (config.debugAdTiming) {
|
|
1289
|
+
context.debugAdTiming = true;
|
|
1290
|
+
}
|
|
1291
|
+
if (config.isLiveStream !== void 0) {
|
|
1292
|
+
context.inputStreamType = config.isLiveStream ? "live" : "vod";
|
|
1293
|
+
}
|
|
1294
|
+
return context;
|
|
1295
|
+
}
|
|
1273
1296
|
function getClientInfo() {
|
|
1274
1297
|
var _screen, _screen1, _screen2, _screen3, _screen_orientation, _screen4, _screen5, _window, _window1, _window_screen_orientation, _window_screen, _navigator_languages;
|
|
1275
1298
|
var ua = navigator.userAgent;
|
|
@@ -1528,19 +1551,26 @@ function canPublish(licenseKey) {
|
|
|
1528
1551
|
}
|
|
1529
1552
|
function buildPlayerMetricEvent() {
|
|
1530
1553
|
return _async_to_generator(function() {
|
|
1531
|
-
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
|
|
1554
|
+
var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, debugAdTiming, playerId, captureAt;
|
|
1532
1555
|
var _arguments = arguments;
|
|
1533
1556
|
return _ts_generator(this, function(_state) {
|
|
1534
1557
|
switch(_state.label){
|
|
1535
1558
|
case 0:
|
|
1536
1559
|
context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
|
1537
1560
|
clientInfo = getClientInfo();
|
|
1561
|
+
debugAdTiming = !!context.debugAdTiming;
|
|
1562
|
+
if (debugAdTiming) {
|
|
1563
|
+
console.log("[StormcloudVideoPlayer] clientInfo: ", JSON.stringify(clientInfo, null, 2));
|
|
1564
|
+
}
|
|
1538
1565
|
return [
|
|
1539
1566
|
4,
|
|
1540
1567
|
getBrowserID(clientInfo)
|
|
1541
1568
|
];
|
|
1542
1569
|
case 1:
|
|
1543
1570
|
playerId = _state.sent();
|
|
1571
|
+
if (debugAdTiming) {
|
|
1572
|
+
console.log("[StormcloudVideoPlayer] playerId: ", playerId);
|
|
1573
|
+
}
|
|
1544
1574
|
captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
|
|
1545
1575
|
return [
|
|
1546
1576
|
2,
|
|
@@ -1672,6 +1702,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
1672
1702
|
this.podAssignedByPrefetch = false;
|
|
1673
1703
|
this.adRequestPositionInBreak = 0;
|
|
1674
1704
|
this.lastHeartbeatTime = 0;
|
|
1705
|
+
this.defaultPodMaxAds = 6;
|
|
1675
1706
|
this.config = config;
|
|
1676
1707
|
this.video = video;
|
|
1677
1708
|
}
|
|
@@ -2127,12 +2158,58 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
2127
2158
|
return urls;
|
|
2128
2159
|
}
|
|
2129
2160
|
},
|
|
2161
|
+
{
|
|
2162
|
+
key: "resolvePodParams",
|
|
2163
|
+
value: function resolvePodParams(breakDurationMs) {
|
|
2164
|
+
var maxDurationMs = breakDurationMs != null && breakDurationMs > 0 ? breakDurationMs : this.config.podMaxDurationMs;
|
|
2165
|
+
var maxAds = this.config.podMaxAds && this.config.podMaxAds > 0 ? this.config.podMaxAds : this.apiNumberAds && this.apiNumberAds > 0 ? this.apiNumberAds : this.defaultPodMaxAds;
|
|
2166
|
+
var minDurationMs = this.config.podExactDuration && maxDurationMs != null ? maxDurationMs : 0;
|
|
2167
|
+
return {
|
|
2168
|
+
maxAds: maxAds,
|
|
2169
|
+
minDurationMs: minDurationMs,
|
|
2170
|
+
maxDurationMs: maxDurationMs
|
|
2171
|
+
};
|
|
2172
|
+
}
|
|
2173
|
+
},
|
|
2174
|
+
{
|
|
2175
|
+
key: "generatePodVastUrl",
|
|
2176
|
+
value: function generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {
|
|
2177
|
+
var _podParams_maxDurationMs;
|
|
2178
|
+
var adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;
|
|
2179
|
+
var envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);
|
|
2180
|
+
var urlWithMacros = applyVastMacros(baseUrl, {
|
|
2181
|
+
correlator: generateCorrelator(),
|
|
2182
|
+
streamCorrelator: this.streamCorrelator,
|
|
2183
|
+
pod: this.podCounter > 0 ? this.podCounter : void 0,
|
|
2184
|
+
podMaxAds: podParams.maxAds,
|
|
2185
|
+
podMinDurationMs: podParams.minDurationMs,
|
|
2186
|
+
podMaxDurationMs: podParams.maxDurationMs,
|
|
2187
|
+
isCtv: envSignals.isCtv,
|
|
2188
|
+
contentUrl: envSignals.contentUrl,
|
|
2189
|
+
pageUrl: !envSignals.isCtv && typeof window !== "undefined" ? window.location.href : void 0,
|
|
2190
|
+
adWillPlayMuted: adWillPlayMuted,
|
|
2191
|
+
adWillAutoPlay: !!this.config.autoplay,
|
|
2192
|
+
appId: envSignals.appId,
|
|
2193
|
+
appName: envSignals.appName,
|
|
2194
|
+
sessionId: envSignals.sessionId,
|
|
2195
|
+
deviceId: envSignals.deviceId,
|
|
2196
|
+
deviceIdType: envSignals.deviceIdType,
|
|
2197
|
+
limitAdTracking: envSignals.limitAdTracking,
|
|
2198
|
+
deviceTypeHint: envSignals.deviceTypeHint,
|
|
2199
|
+
adTest: this.config.adTest,
|
|
2200
|
+
consent: this.consentSignals
|
|
2201
|
+
});
|
|
2202
|
+
var finalUrl = palNonce.injectNonce(urlWithMacros);
|
|
2203
|
+
console.log("[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=".concat(this.podCounter, ", pmad=").concat(podParams.maxAds, ", pmnd=").concat(podParams.minDurationMs, ", pmxd=").concat((_podParams_maxDurationMs = podParams.maxDurationMs) !== null && _podParams_maxDurationMs !== void 0 ? _podParams_maxDurationMs : "?", "):"), finalUrl);
|
|
2204
|
+
return finalUrl;
|
|
2205
|
+
}
|
|
2206
|
+
},
|
|
2130
2207
|
{
|
|
2131
2208
|
// --- Tracking ---
|
|
2132
2209
|
key: "initializeTracking",
|
|
2133
2210
|
value: function initializeTracking() {
|
|
2134
2211
|
var _this = this;
|
|
2135
|
-
sendInitialTracking(this.config.licenseKey).then(function() {
|
|
2212
|
+
sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(function() {
|
|
2136
2213
|
_this.heartbeatInterval = window.setInterval(function() {
|
|
2137
2214
|
_this.sendHeartbeatIfNeeded();
|
|
2138
2215
|
}, 5e3);
|
|
@@ -2153,7 +2230,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
|
|
|
2153
2230
|
var now = Date.now();
|
|
2154
2231
|
if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {
|
|
2155
2232
|
this.lastHeartbeatTime = now;
|
|
2156
|
-
sendHeartbeat(this.config.licenseKey).catch(function(error) {
|
|
2233
|
+
sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch(function(error) {
|
|
2157
2234
|
if (_this.debug) {
|
|
2158
2235
|
console.warn("[StormcloudVideoPlayer] Failed to send heartbeat:", error);
|
|
2159
2236
|
}
|