stormcloud-video-player 0.8.60 → 0.8.61
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/Player.cjs.map +1 -1
- package/lib/StormcloudPlayer.cjs +83 -29
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +87 -31
- package/lib/index.cjs.map +1 -1
- package/lib/patterns.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +3 -2
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +53 -11
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/PlaceholderLayer.cjs.map +1 -1
- package/lib/player/PlayerControls.cjs.map +1 -1
- package/lib/player/Scte35CueManager.cjs.map +1 -1
- package/lib/player/Scte35Parser.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +83 -29
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/playerTypes.cjs.map +1 -1
- package/lib/players/FilePlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +83 -29
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +83 -29
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/pal.cjs +9 -5
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/sdk/pal.d.cts +1 -0
- package/lib/types.cjs.map +1 -1
- package/lib/types.d.cts +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +25 -4
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/devUrl.cjs.map +1 -1
- package/lib/utils/polyfills.cjs.map +1 -1
- package/lib/utils/tracking.cjs +3 -2
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/trackingIngest.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +27 -5
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
- package/lib/utils/vastMacros.cjs +24 -4
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastMacros.d.cts +2 -0
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/lib/utils.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\AdTimingService.cjs"],"names":[],"mappings":"","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/AdTimingService.ts\nvar AdTimingService_exports = {};\n__export(AdTimingService_exports, {\n AdTimingService: () => AdTimingService\n});\nmodule.exports = __toCommonJS(AdTimingService_exports);\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AdTimingService\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\AdTimingService.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","AdTimingService_exports","AdTimingService","module","exports","config","video","callbacks","adRequestWatchdogToken","adFailsafeToken","ptsDriftEmaMs","adBreakPlayedDurationMs","adBreakEpoch","adRequestTokenCounter","activeAdRequestToken","currentAdIndex","totalAdsInBreak","totalAdRequestsInBreak","maxTotalAdRequestsPerBreak","lastAdRequestTime","consecutiveFailures","maxConsecutiveFailures","minAdRequestIntervalMs","backoffBaseMs","maxBackoffMs","defaultMinRemainingMsToStartAd","failedVastUrls","Set","temporaryFailureUrls","Map","temporaryFailureCooldownMs","globalConsecutiveNoFills","globalNoFillThreshold","globalNoFillCooldownUntil","globalNoFillBackoffBaseMs","globalNoFillBackoffMaxMs","globalLastGamRequestTime","globalMinGamIntervalMs","debug","debugAdTiming","scheduleAdStopCountdown","remainingMs","clearAdStopTimer","ms","Math","max","floor","ensureAdStoppedByTimer","adStopTimerId","window","setTimeout","clearTimeout","onAdStopTimerFired","scheduleAdStartIn","delayMs","marker","type","cueKey","clearAdStartTimer","onAdStartTimerFired","adStartTimerId","updatePtsDrift","ptsSecondsSample","sampleMs","currentTime","Number","isFinite","abs","alpha","resolveScteBreakStartWallClockMs","nowWallClockMs","Date","now","ptsSeconds","nowMs","estimatedCurrentPtsMs","deltaMs","setAdBreakDurationBoundary","durationMs","expectedAdBreakDurationMs","currentAdBreakStartWallClockMs","scteAdBreakEndWallClockMs","scheduleAdStopAtBreakBoundary","getWallClockRemainingAdMs","endWallClockMs","getAdBreakEndWallClockMs","getDurationBudgetRemainingMs","getLoadedAdDurationMs","adController","durationSec","getLoadedAdDuration","round","adFitsRemainingBudget","logAdDurationDecision","accepted","remainingBudget","adId","getLoadedAdId","console","log","recordPlayedAdDuration","ensureLoadedAdFitsBudget","fits","rejectLoadedAdForDuration","destroy","markAdStarted","notePodAdStarted","getRemainingAdMs","wallClockRemaining","budgetRemaining","min","getMinRemainingMsToStartAd","configured","minRemainingMsToStartAd","hasTimeToStartAnotherAd","minRemaining","isTemporaryAdError","error","message","toLowerCase","includes","isUrlInCooldown","vastTagUrl","failureTime","elapsed","delete","cleanupTemporaryFailures","url","timestamp","isGamInCooldown","recordGamNoFill","exponent","backoff","pow","resetGamNoFillCounter","enforceGlobalRateLimit","waitMs","Promise","resolve","startAdRequestWatchdog","token","clearAdRequestWatchdog","timeoutMs","adFailsafeTimeoutMs","adRequestWatchdogId","logAdState","onWatchdogTimeout","startAdFailsafeTimer","clearAdFailsafeTimer","failsafeMs","adFailsafeTimerId","videoPaused","paused","onFailsafeTimeout","event","extra","getAdState","inAdBreak","showAds","adPlaying","toISOString","resetForBreakEnd"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/AdTimingService.ts\nvar AdTimingService_exports = {};\n__export(AdTimingService_exports, {\n AdTimingService: () => AdTimingService\n});\nmodule.exports = __toCommonJS(AdTimingService_exports);\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AdTimingService\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\HlsEngine.cjs"],"names":["__defProp","__create","Object","defineProperty","create","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","name","all","target","get","enumerable","__copyProps","to","from","except","desc","key","call","HlsEngine_exports","HlsEngine","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","__export","module","exports","import_hls","require","parseCueOutDuration","parseFloat","parseCueOutCont","num","trim","match","dStr","d","elapsedMatch","durationMatch","e","Number","isNaN","res","elapsed","duration","slashMatch","parseAttributeList","attrs","regex","exec","rawVal","startsWith","endsWith","slice","toNumber","val","n","decodeId3ValueToText","decoder","TextDecoder","fatal","text","decode","test","out","getFragmentStartSeconds","frag","candidates","startPTS","start","candidate","isFinite","parseScte35FromId3","tag","cueOutMatch","dur","arg","marker","type","ptsSeconds","durationSeconds","raw","id3","cueOutContMatch","cont","cueInMatch","daterangeMatch","hasScteOut","klass","String","hasScteIn","Uint8Array","bin","parseScte35Binary","normalizeFragmentPayload","payload","ArrayBuffer","isView","view","buffer","byteOffset","byteLength","detectTsPacketFormat","data","packetSizes","packetSize","offset","matchedPackets"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAEA,EAAIA,EAAAA,CAAAA,GADAC,GAAAA,CAAAA,CACAD,CAAYE,CA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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/HlsEngine.ts\nvar HlsEngine_exports = {};\n__export(HlsEngine_exports, {\n HlsEngine: () => HlsEngine\n});\nmodule.exports = __toCommonJS(HlsEngine_exports);\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/HlsEngine.ts\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n HlsEngine\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\HlsEngine.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","HlsEngine_exports","HlsEngine","module","exports","import_hls","require","parseCueOutDuration","num","parseFloat","trim","Number","isNaN","match","dStr","d","parseCueOutCont","res","elapsedMatch","durationMatch","e","elapsed","duration","slashMatch","parseAttributeList","attrs","regex","exec","rawVal","startsWith","endsWith","slice","toNumber","val","n","decodeId3ValueToText","decoder","TextDecoder","fatal","text","decode","test","out","i","length","String","fromCharCode","getFragmentStartSeconds","frag","candidates","start","startPTS","candidate","isFinite","parseScte35FromId3","tag","cueOutMatch","arg","dur","marker","type","ptsSeconds","durationSeconds","raw","id3","cueOutContMatch","cont","cueInMatch","daterangeMatch","hasScteOut","hasScteIn","klass","Uint8Array","bin","parseScte35Binary","normalizeFragmentPayload","payload","ArrayBuffer","isView","view","buffer","byteOffset","byteLength","detectTsPacketFormat","data","packetSizes","packetSize","tsPayloadOffset","offset","matchedPackets","packetStart","getPsiSectionStart","payloadUnitStart","pointerField","sectionStart","getPsiSectionLength","parsePatSection","pmtPids","sectionLength","sectionEnd","Math","min","programNumber","pid","add","descriptorsIdentifyScte35","end","descriptorStart","descriptorEnd","registration","parsePmtSection","tsScte35Pids","programInfoLength","streamType","elementaryPid","esInfoLength","hasProcessedTsScte35Section","section","processedSections","checksum","has","size","firstKey","values","next","delete","addScte35SectionMarker","markers","source","push","appendScte35Bytes","bytes","assemblers","assembler","expectedLength","collectScte35SectionsFromPayload","previousAssembler","subarray","tableId","totalLength","set","Array","parseScte35FromTsPackets","packetInfo","sectionAssemblers","Map","tsStart","secondByte","thirdByte","fourthByte","adaptationFieldControl","hasPayload","payloadStart","adaptationLength","payloadEnd","BitReader","buf","bytePos","bitPos","readBits","numBits","result","remainingInByte","toRead","currentByte","shift","mask","bits","skipBits","bytePosition","readSpliceTime","r","ptsAdjustmentTicks","timeSpecifiedFlag","high","low","ptsTicks","markerTypeFromSegmentationTypeId","segmentationTypeId","parseScte35SegmentationDescriptor","descriptor","identifier","segmentationEventId","cancelIndicator","flags","programSegmentationFlag","segmentationDurationFlag","componentCount","durationTicks","segmentationUpidLength","markerType","parseScte35SegmentationDescriptors","descriptorLoopLength","descriptorOffset","descriptorTag","descriptorLength","descriptorDataStart","descriptorDataEnd","descriptorMarker","ptsAdjHigh","ptsAdjLow","spliceCommandLength","spliceCommandType","spliceEventId","commandBodyStart","cancel","outOfNetwork","programSpliceFlag","durationFlag","spliceImmediateFlag","componentPtsSeconds","expectedDescriptorOffset","splice_command_type","splice_event_id","segmentation_event_id","config","video","cueManager","timing","callbacks","isLiveStream","nativeHlsMode","videoSrcProtection","reloadingLiveStream","bufferedSegmentsCount","shouldAutoplayAfterBuffering","hasInitialBufferCompleted","latencyProfileApplied","debug","debugAdTiming","shouldUseNativeHls","getStreamType","canNative","canPlayType","allowNativeHls","setupNativeHls","adBehavior","src","lowLatencyMode","console","log","isLive","autoplay","play","catch","setupHls","hls","default","enableWorker","backBufferLength","liveDurationInfinity","maxLiveSyncPlaybackRate","maxBufferLength","maxMaxBufferLength","maxBufferSize","maxBufferHole","highBufferWatchdogPeriod","nudgeOffset","nudgeMaxRetry","startPosition","on","Events","MEDIA_ATTACHED","loadSource","MANIFEST_PARSED","_","_data","minSegments","levels","some","level","details","live","onManifestParsed","detectedLowLatencyStream","minSegmentsBeforePlay","LEVEL_LOADED","_evt","applyStreamLatencyProfile","isInAdBreak","hasPendingAdBreak","fragments","fragmentsToScan","tagList","isArray","entry","idx","indexOf","substring","includes","earlyDetection","onScte35Cue","createScte35CueContext","FRAG_BUFFERED","err","warn","FRAG_PARSING_METADATA","id3Tags","samples","map","s","pts","forEach","onId3Tag","FRAG_LOADED","processFragmentScte35Payload","sn","FRAG_DECRYPTED","FRAG_CHANGED","activatePendingCuesForFragment","prog","ERROR","ErrorTypes","NETWORK_ERROR","startLoad","MEDIA_ERROR","recoverMediaError","onFatalDestroy","attachMedia","isLowLatencyStream","isLowLatencyManifest","useLowLatency","cfg","liveSyncDuration","liveSyncDurationCount","lowLatencyModeRequested","canBlockReload","partTarget","partHoldBack","partListLength","partList","targetDuration","targetduration","hasParts","hasPartTarget","hasPartHoldBack","updatePtsDrift","readiness","payloadData","fragmentSn","fragmentStartSeconds","processedTsScte35Sections","context","getLiveSyncPosition","pos","liveSyncPosition","restartLoadAt","position","stopLoad","error","reloadLiveStream","detachMedia","destroy","removeAttribute","load","recreateDelayMs","window","setTimeout"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/HlsEngine.ts\nvar HlsEngine_exports = {};\n__export(HlsEngine_exports, {\n HlsEngine: () => HlsEngine\n});\nmodule.exports = __toCommonJS(HlsEngine_exports);\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/HlsEngine.ts\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n HlsEngine\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\PlaceholderLayer.cjs"],"names":[],"mappings":"AAAA","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer_exports = {};\n__export(PlaceholderLayer_exports, {\n PlaceholderLayer: () => PlaceholderLayer\n});\nmodule.exports = __toCommonJS(PlaceholderLayer_exports);\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n PlaceholderLayer\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\PlaceholderLayer.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","PlaceholderLayer_exports","PlaceholderLayer","module","exports","video","debug","ensureContainer","container","el","document","createElement","style","position","left","top","right","bottom","display","alignItems","justifyContent","pointerEvents","zIndex","backgroundColor","transition","opacity","parentElement","console","warn","appendChild","show","muted","log","wasHidden","offsetHeight","requestAnimationFrame","hide","setTimeout","destroy","removeChild"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer_exports = {};\n__export(PlaceholderLayer_exports, {\n PlaceholderLayer: () => PlaceholderLayer\n});\nmodule.exports = __toCommonJS(PlaceholderLayer_exports);\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n PlaceholderLayer\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\PlayerControls.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","__getOwnPropNames","getOwnPropertyDescriptor","getOwnPropertyNames","__hasOwnProp","__export","prototype","hasOwnProperty","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","value","mod","PlayerControls_exports","getAdAudioVolume","getVolume","isFullscreen","isMuted","resizePlayer","setMuted","setVolume","toggleFullscreen","toggleMute","exports","__toCommonJS","adPlayer","getOriginalMutedState","getOriginalVolume","isAdPlaying","newMutedState","restoreVolume","updateOriginalMutedState","video","volume","setAdVolume","debug","console","log"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/PlayerControls.ts\nvar PlayerControls_exports = {};\n__export(PlayerControls_exports, {\n getAdAudioVolume: () => getAdAudioVolume,\n getVolume: () => getVolume,\n isFullscreen: () => isFullscreen,\n isMuted: () => isMuted,\n resizePlayer: () => resizePlayer,\n setMuted: () => setMuted,\n setVolume: () => setVolume,\n toggleFullscreen: () => toggleFullscreen,\n toggleMute: () => toggleMute\n});\nmodule.exports = __toCommonJS(PlayerControls_exports);\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n getAdAudioVolume,\n getVolume,\n isFullscreen,\n isMuted,\n resizePlayer,\n setMuted,\n setVolume,\n toggleFullscreen,\n toggleMute\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\PlayerControls.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","PlayerControls_exports","getAdAudioVolume","getVolume","isFullscreen","isMuted","resizePlayer","setMuted","setVolume","toggleFullscreen","toggleMute","module","exports","adPlayer","getOriginalMutedState","getOriginalVolume","video","debug","isAdPlaying","newMutedState","restoreVolume","updateOriginalMutedState","volume","setAdVolume","console","log","muted","Promise","resolve","reject","document","fullscreenElement","container","parentElement","Error","requestFullscreen","then","catch","err","error","exitFullscreen","adPlaying","clampedVolume","Math","max","min","getAdVolume","width","clientWidth","height","clientHeight","resize"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/PlayerControls.ts\nvar PlayerControls_exports = {};\n__export(PlayerControls_exports, {\n getAdAudioVolume: () => getAdAudioVolume,\n getVolume: () => getVolume,\n isFullscreen: () => isFullscreen,\n isMuted: () => isMuted,\n resizePlayer: () => resizePlayer,\n setMuted: () => setMuted,\n setVolume: () => setVolume,\n toggleFullscreen: () => toggleFullscreen,\n toggleMute: () => toggleMute\n});\nmodule.exports = __toCommonJS(PlayerControls_exports);\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n getAdAudioVolume,\n getVolume,\n isFullscreen,\n isMuted,\n resizePlayer,\n setMuted,\n setVolume,\n toggleFullscreen,\n toggleMute\n});\n"]}
|