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.
Files changed (51) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs.map +1 -1
  3. package/lib/StormcloudPlayer.cjs +83 -29
  4. package/lib/StormcloudPlayer.cjs.map +1 -1
  5. package/lib/index.cjs +87 -31
  6. package/lib/index.cjs.map +1 -1
  7. package/lib/patterns.cjs.map +1 -1
  8. package/lib/player/AdBreakOrchestrator.cjs +3 -2
  9. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  10. package/lib/player/AdConfigManager.cjs +53 -11
  11. package/lib/player/AdConfigManager.cjs.map +1 -1
  12. package/lib/player/AdTimingService.cjs.map +1 -1
  13. package/lib/player/HlsEngine.cjs.map +1 -1
  14. package/lib/player/PlaceholderLayer.cjs.map +1 -1
  15. package/lib/player/PlayerControls.cjs.map +1 -1
  16. package/lib/player/Scte35CueManager.cjs.map +1 -1
  17. package/lib/player/Scte35Parser.cjs.map +1 -1
  18. package/lib/player/StormcloudVideoPlayer.cjs +83 -29
  19. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  20. package/lib/player/playerTypes.cjs.map +1 -1
  21. package/lib/players/FilePlayer.cjs.map +1 -1
  22. package/lib/players/HlsPlayer.cjs +83 -29
  23. package/lib/players/HlsPlayer.cjs.map +1 -1
  24. package/lib/players/index.cjs +83 -29
  25. package/lib/players/index.cjs.map +1 -1
  26. package/lib/props.cjs.map +1 -1
  27. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  28. package/lib/sdk/pal.cjs +9 -5
  29. package/lib/sdk/pal.cjs.map +1 -1
  30. package/lib/sdk/pal.d.cts +1 -0
  31. package/lib/types.cjs.map +1 -1
  32. package/lib/types.d.cts +1 -0
  33. package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
  34. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  35. package/lib/utils/browserCompat.cjs.map +1 -1
  36. package/lib/utils/ctvVastSignals.cjs +25 -4
  37. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  38. package/lib/utils/devUrl.cjs.map +1 -1
  39. package/lib/utils/polyfills.cjs.map +1 -1
  40. package/lib/utils/tracking.cjs +3 -2
  41. package/lib/utils/tracking.cjs.map +1 -1
  42. package/lib/utils/trackingIngest.cjs.map +1 -1
  43. package/lib/utils/vastEnvironmentSignals.cjs +27 -5
  44. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  45. package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
  46. package/lib/utils/vastMacros.cjs +24 -4
  47. package/lib/utils/vastMacros.cjs.map +1 -1
  48. package/lib/utils/vastMacros.d.cts +2 -0
  49. package/lib/utils/vastTrackingMacros.cjs.map +1 -1
  50. package/lib/utils.cjs.map +1 -1
  51. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\Scte35CueManager.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/Scte35CueManager.ts\nvar Scte35CueManager_exports = {};\n__export(Scte35CueManager_exports, {\n Scte35CueManager: () => Scte35CueManager\n});\nmodule.exports = __toCommonJS(Scte35CueManager_exports);\n\n// src/player/Scte35Parser.ts\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}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n Scte35CueManager\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\Scte35CueManager.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","Scte35CueManager_exports","Scte35CueManager","module","exports","getFragmentStartSeconds","frag","candidates","start","startPTS","candidate","Number","isFinite","debug","callbacks","pendingScte35Cues","Map","recentScte35CueKeys","recentScte35CueLimit","tsScte35Pids","Set","pmtPids","processedTsScte35Sections","pendingScte35CueKey","pendingScte35CueKeyValue","activeScte35BreakKey","activeScte35BreakKeyValue","scheduledScte35BreakKey","scheduledScte35BreakKeyValue","createScte35CueContext","source","readiness","context","sn","fragmentSn","fragmentStartSec","fragmentStartSeconds","onScte35Cue","marker","cue","createScte35Cue","pendingKey","getPendingScte35CueKey","set","trimRecentScte35CueMaps","type","onEarlyStartCue","shouldAcceptScte35EndCue","console","log","inAdBreak","isInAdBreak","hasRecentlyHandledScte35Cue","delete","markScte35CueHandled","onPlaybackCue","activatePendingScte35CuesForFragment","matchingCues","Array","entries","filter","forEach","getScte35CueKey","raw","getScte35MarkerRaw","spliceEventId","toIdentityString","splice_event_id","segmentationEventId","segmentation_event_id","daterangeId","attrs","ID","scteValue","ptsSeconds","Math","round","floor","Date","now","String","trim","length","isStrongScte35CueKey","startsWith","recentKey","has","size","firstKey","keys","next"],"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/Scte35CueManager.ts\nvar Scte35CueManager_exports = {};\n__export(Scte35CueManager_exports, {\n Scte35CueManager: () => Scte35CueManager\n});\nmodule.exports = __toCommonJS(Scte35CueManager_exports);\n\n// src/player/Scte35Parser.ts\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}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n Scte35CueManager\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\Scte35Parser.cjs"],"names":["Object","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","Scte35Parser_exports","decodeId3ValueToText","detectTsPacketFormat","isManifestBasedMarker","getFragmentStartSeconds","normalizeFragmentPayload","parseAttributeList","parseCueOutCont","parseCueOutDuration","parseScte35Binary","parseScte35FromId3","parseScte35FromTsPackets","toNumber","module","exports","match","num","parseFloat","trim","Number","isNaN","dStr","d","res","elapsedMatch","durationMatch","e","elapsed","duration","slashMatch","regex","exec","rawVal","startsWith","endsWith","slice","attrs","val","n","raw","marker","tag","String","includes","id3","decoder","TextDecoder","fatal","text","decode","test","out","i","length","fromCharCode","frag","candidates","start","startPTS","candidate","isFinite","cueOutMatch","arg","dur","type","ptsSeconds","durationSeconds","cueOutContMatch","cont","cueInMatch"],"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/Scte35Parser.ts\nvar Scte35Parser_exports = {};\n__export(Scte35Parser_exports, {\n decodeId3ValueToText: () => decodeId3ValueToText,\n detectTsPacketFormat: () => detectTsPacketFormat,\n getFragmentStartSeconds: () => getFragmentStartSeconds,\n isManifestBasedMarker: () => isManifestBasedMarker,\n normalizeFragmentPayload: () => normalizeFragmentPayload,\n parseAttributeList: () => parseAttributeList,\n parseCueOutCont: () => parseCueOutCont,\n parseCueOutDuration: () => parseCueOutDuration,\n parseScte35Binary: () => parseScte35Binary,\n parseScte35FromId3: () => parseScte35FromId3,\n parseScte35FromTsPackets: () => parseScte35FromTsPackets,\n toNumber: () => toNumber\n});\nmodule.exports = __toCommonJS(Scte35Parser_exports);\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 isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\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// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n decodeId3ValueToText,\n detectTsPacketFormat,\n getFragmentStartSeconds,\n isManifestBasedMarker,\n normalizeFragmentPayload,\n parseAttributeList,\n parseCueOutCont,\n parseCueOutDuration,\n parseScte35Binary,\n parseScte35FromId3,\n parseScte35FromTsPackets,\n toNumber\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\Scte35Parser.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","Scte35Parser_exports","decodeId3ValueToText","detectTsPacketFormat","getFragmentStartSeconds","isManifestBasedMarker","normalizeFragmentPayload","parseAttributeList","parseCueOutCont","parseCueOutDuration","parseScte35Binary","parseScte35FromId3","parseScte35FromTsPackets","toNumber","module","exports","num","parseFloat","trim","Number","isNaN","match","dStr","d","res","elapsedMatch","durationMatch","e","elapsed","duration","slashMatch","attrs","regex","exec","rawVal","startsWith","endsWith","slice","val","n","marker","raw","tag","String","includes","id3","splice_command_type","decoder","TextDecoder","fatal","text","decode","test","out","i","length","fromCharCode","frag","candidates","start","startPTS","candidate","isFinite","cueOutMatch","arg","dur","type","ptsSeconds","durationSeconds","cueOutContMatch","cont","cueInMatch","daterangeMatch","hasScteOut","hasScteIn","klass","Uint8Array","bin","payload","ArrayBuffer","isView","view","buffer","byteOffset","byteLength","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","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_event_id","segmentation_event_id"],"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/Scte35Parser.ts\nvar Scte35Parser_exports = {};\n__export(Scte35Parser_exports, {\n decodeId3ValueToText: () => decodeId3ValueToText,\n detectTsPacketFormat: () => detectTsPacketFormat,\n getFragmentStartSeconds: () => getFragmentStartSeconds,\n isManifestBasedMarker: () => isManifestBasedMarker,\n normalizeFragmentPayload: () => normalizeFragmentPayload,\n parseAttributeList: () => parseAttributeList,\n parseCueOutCont: () => parseCueOutCont,\n parseCueOutDuration: () => parseCueOutDuration,\n parseScte35Binary: () => parseScte35Binary,\n parseScte35FromId3: () => parseScte35FromId3,\n parseScte35FromTsPackets: () => parseScte35FromTsPackets,\n toNumber: () => toNumber\n});\nmodule.exports = __toCommonJS(Scte35Parser_exports);\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 isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\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// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n decodeId3ValueToText,\n detectTsPacketFormat,\n getFragmentStartSeconds,\n isManifestBasedMarker,\n normalizeFragmentPayload,\n parseAttributeList,\n parseCueOutCont,\n parseCueOutDuration,\n parseScte35Binary,\n parseScte35FromId3,\n parseScte35FromTsPackets,\n toNumber\n});\n"]}
@@ -2815,6 +2815,7 @@ function toDevSafeUrl(rawUrl) {
2815
2815
  // src/sdk/pal.ts
2816
2816
  var PAL_SDK_URL = "https://imasdk.googleapis.com/pal/sdkloader/pal.js";
2817
2817
  var _nonceLoader;
2818
+ var _nonceLoaderAllowStorage;
2818
2819
  var _palLoadPromise;
2819
2820
  function loadPalSdk() {
2820
2821
  var _window_goog;
@@ -2857,12 +2858,15 @@ function loadPalSdk() {
2857
2858
  });
2858
2859
  return _palLoadPromise;
2859
2860
  }
2860
- function getOrCreateNonceLoader() {
2861
- if (_nonceLoader) return _nonceLoader;
2861
+ function getOrCreateNonceLoader(allowStorage) {
2862
+ if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {
2863
+ return _nonceLoader;
2864
+ }
2862
2865
  var goog = window.goog;
2863
2866
  var consentSettings = new goog.pal.ConsentSettings();
2864
- consentSettings.allowStorage = true;
2867
+ consentSettings.allowStorage = allowStorage;
2865
2868
  _nonceLoader = new goog.pal.NonceLoader(consentSettings);
2869
+ _nonceLoaderAllowStorage = allowStorage;
2866
2870
  return _nonceLoader;
2867
2871
  }
2868
2872
  function createPalNonceManager() {
@@ -2871,7 +2875,7 @@ function createPalNonceManager() {
2871
2875
  return {
2872
2876
  generateNonce: function generateNonce() {
2873
2877
  return _async_to_generator(function() {
2874
- var options, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
2878
+ var options, _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
2875
2879
  var _arguments = arguments;
2876
2880
  return _ts_generator(this, function(_state) {
2877
2881
  switch(_state.label){
@@ -2891,7 +2895,7 @@ function createPalNonceManager() {
2891
2895
  ];
2892
2896
  case 2:
2893
2897
  _state.sent();
2894
- loader = getOrCreateNonceLoader();
2898
+ loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
2895
2899
  goog = window.goog;
2896
2900
  request = new goog.pal.NonceRequest();
2897
2901
  request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
@@ -3076,6 +3080,8 @@ function ingestPlayerTracking(licenseKey, channel, body) {
3076
3080
  }
3077
3081
  // src/utils/vastEnvironmentSignals.ts
3078
3082
  var CTV_SESSION_STORAGE_KEY = "stormcloud.ctv.sid";
3083
+ var WEB_SESSION_STORAGE_KEY = "stormcloud.web.sid";
3084
+ var inMemoryWebSessionId;
3079
3085
  var PLAYER_ID_STORAGE_KEY = "stormcloud.player.id";
3080
3086
  var DEVICE_ID_STORAGE_KEYS = [
3081
3087
  "rdid",
@@ -3097,7 +3103,7 @@ function resolveVastEnvironmentSignals(isCtv) {
3097
3103
  var _ref;
3098
3104
  var bridgeSignals = readNativeBridgeSignals();
3099
3105
  var platformDevice = readPlatformNativeDeviceId();
3100
- var realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
3106
+ var realDeviceId = bridgeSignals.deviceId || (isCtv ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
3101
3107
  var deviceId = realDeviceId;
3102
3108
  var deviceIdType = bridgeSignals.deviceIdType || readStoredString("deviceIdType") || readStoredString("idtype") || platformDevice.deviceIdType || inferDeviceIdType();
3103
3109
  var platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;
@@ -3126,9 +3132,12 @@ function resolveVastEnvironmentSignals(isCtv) {
3126
3132
  deviceTypeHint: deviceTypeHint
3127
3133
  });
3128
3134
  }
3135
+ var webSessionId = getOrCreateWebSessionId();
3129
3136
  return _object_spread_props(_object_spread({
3130
3137
  isCtv: false
3131
- }, deviceId ? {
3138
+ }, webSessionId ? {
3139
+ sessionId: webSessionId
3140
+ } : {}, deviceId ? {
3132
3141
  deviceId: deviceId
3133
3142
  } : {}, deviceId && deviceIdType ? {
3134
3143
  deviceIdType: deviceIdType
@@ -3169,7 +3178,7 @@ var GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;
3169
3178
  var CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\bTV\b/i;
3170
3179
  var FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;
3171
3180
  function resolveDeviceTypeHint(isCtv) {
3172
- var override = readDeviceTypeHintOverride();
3181
+ var override = readDeviceTypeHintOverride(isCtv);
3173
3182
  if (override != null) return override;
3174
3183
  return inferDeviceTypeHint(isCtv);
3175
3184
  }
@@ -3196,7 +3205,7 @@ function inferDeviceTypeHint(isCtv) {
3196
3205
  if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;
3197
3206
  return fallback;
3198
3207
  }
3199
- function readDeviceTypeHintOverride() {
3208
+ function readDeviceTypeHintOverride(isCtv) {
3200
3209
  if (typeof window === "undefined") return void 0;
3201
3210
  var keys = [
3202
3211
  "dth",
@@ -3245,6 +3254,7 @@ function readDeviceTypeHintOverride() {
3245
3254
  }
3246
3255
  }
3247
3256
  }
3257
+ if (!isCtv) return void 0;
3248
3258
  for(var _i = 0, _iter = [
3249
3259
  "stormcloud.dth",
3250
3260
  "dth"
@@ -3293,9 +3303,10 @@ function isEquivalentDeviceIdType(tagType, runtimeType) {
3293
3303
  return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);
3294
3304
  }
3295
3305
  function resolveNativeDeviceId() {
3306
+ var includeStored = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
3296
3307
  var bridgeSignals = readNativeBridgeSignals();
3297
3308
  var platformDevice = readPlatformNativeDeviceId();
3298
- var deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;
3309
+ var deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;
3299
3310
  if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {
3300
3311
  return void 0;
3301
3312
  }
@@ -3324,6 +3335,21 @@ function getOrCreateCtvSessionId() {
3324
3335
  writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);
3325
3336
  return sessionId;
3326
3337
  }
3338
+ function getOrCreateWebSessionId() {
3339
+ if (typeof window === "undefined") return void 0;
3340
+ try {
3341
+ var _window_sessionStorage;
3342
+ var existing = (_window_sessionStorage = window.sessionStorage) === null || _window_sessionStorage === void 0 ? void 0 : _window_sessionStorage.getItem(WEB_SESSION_STORAGE_KEY);
3343
+ if (existing && !isMacroPlaceholder(existing)) return existing;
3344
+ } catch (unused) {}
3345
+ var sessionId = inMemoryWebSessionId || createUuid();
3346
+ inMemoryWebSessionId = sessionId;
3347
+ try {
3348
+ var _window_sessionStorage1;
3349
+ (_window_sessionStorage1 = window.sessionStorage) === null || _window_sessionStorage1 === void 0 ? void 0 : _window_sessionStorage1.setItem(WEB_SESSION_STORAGE_KEY, sessionId);
3350
+ } catch (unused) {}
3351
+ return sessionId;
3352
+ }
3327
3353
  function readPersistentId(storageKey) {
3328
3354
  return readStoredString(storageKey) || readCookie(storageKey);
3329
3355
  }
@@ -3925,7 +3951,7 @@ function sha256Hex(input) {
3925
3951
  })();
3926
3952
  }
3927
3953
  function resolvePlayerIdentitySeed(clientInfo) {
3928
- var nativeDeviceId = resolveNativeDeviceId();
3954
+ var nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);
3929
3955
  if (nativeDeviceId) {
3930
3956
  return "device:".concat(nativeDeviceId);
3931
3957
  }
@@ -4694,6 +4720,12 @@ function applyDeviceIdentityParams(params, ctx) {
4694
4720
  params.set("is_lat", latValue !== null && latValue !== void 0 ? latValue : isMacroPlaceholder2(tagLat) ? "0" : tagLat);
4695
4721
  return;
4696
4722
  }
4723
+ if (!ctx.isCtv) {
4724
+ params.delete("rdid");
4725
+ params.delete("idtype");
4726
+ params.delete("is_lat");
4727
+ return;
4728
+ }
4697
4729
  var tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));
4698
4730
  var tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));
4699
4731
  if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {
@@ -4848,15 +4880,24 @@ function applyVastMacros(baseUrl, ctx) {
4848
4880
  if (ctx.podMaxAds != null) {
4849
4881
  params.set("pmad", String(Math.max(1, Math.round(ctx.podMaxAds))));
4850
4882
  }
4851
- if (!ctx.isCtv && ctx.pageUrl) {
4852
- params.set("url", ctx.pageUrl);
4853
- params.set("description_url", ctx.pageUrl);
4854
- }
4855
4883
  var existingUrl = params.get("url") || "";
4856
4884
  if (EXAMPLE_COM_URL.test(existingUrl)) {
4857
4885
  params.delete("url");
4858
4886
  params.delete("description_url");
4859
4887
  }
4888
+ if (!ctx.isCtv && ctx.pageUrl) {
4889
+ if (isMacroPlaceholder2(params.get("url"))) {
4890
+ params.set("url", ctx.pageUrl);
4891
+ }
4892
+ if (isMacroPlaceholder2(params.get("description_url"))) {
4893
+ params.set("description_url", params.get("url") || ctx.pageUrl);
4894
+ }
4895
+ }
4896
+ if (!ctx.isCtv) {
4897
+ params.delete("an");
4898
+ params.delete("msid");
4899
+ params.delete("sid");
4900
+ }
4860
4901
  if (ctx.adWillPlayMuted != null) {
4861
4902
  params.set("vpmute", ctx.adWillPlayMuted ? "1" : "0");
4862
4903
  }
@@ -4890,6 +4931,9 @@ function applyVastMacros(baseUrl, ctx) {
4890
4931
  if (ctx.programTitle) {
4891
4932
  params.set("ct_ti", ctx.programTitle);
4892
4933
  }
4934
+ if (ctx.channelName) {
4935
+ params.set("ct_ch", ctx.channelName);
4936
+ }
4893
4937
  var staleKeys = [];
4894
4938
  params.forEach(function(value, key) {
4895
4939
  if (isMacroPlaceholder2(value)) {
@@ -4942,8 +4986,10 @@ function fetchConsentSignals() {
4942
4986
  tcfApi("addEventListener", 2, function(tcData, success) {
4943
4987
  if (settled) return;
4944
4988
  if (success && tcData && (tcData.eventStatus === "tcloaded" || tcData.eventStatus === "useractioncomplete")) {
4989
+ var _tcData_purpose_consents, _tcData_purpose;
4945
4990
  settled = true;
4946
4991
  signals.gdpr = tcData.gdprApplies ? "1" : "0";
4992
+ signals.storageAllowed = tcData.gdprApplies ? ((_tcData_purpose = tcData.purpose) === null || _tcData_purpose === void 0 ? void 0 : (_tcData_purpose_consents = _tcData_purpose.consents) === null || _tcData_purpose_consents === void 0 ? void 0 : _tcData_purpose_consents[1]) === true : true;
4947
4993
  if (typeof tcData.tcString === "string" && tcData.tcString) {
4948
4994
  signals.gdprConsent = tcData.tcString;
4949
4995
  }
@@ -6476,7 +6522,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
6476
6522
  pageUrl: !envSignals.isCtv && typeof window !== "undefined" ? toDevSafeUrl(window.location.href) : void 0,
6477
6523
  adWillPlayMuted: adWillPlayMuted,
6478
6524
  adWillAutoPlay: !!this.config.autoplay,
6479
- sessionId: envSignals.sessionId,
6525
+ sessionId: envSignals.isCtv || this.consentSignals.storageAllowed !== false ? envSignals.sessionId : void 0,
6480
6526
  deviceId: envSignals.deviceId,
6481
6527
  deviceIdType: envSignals.deviceIdType,
6482
6528
  limitAdTracking: envSignals.limitAdTracking,
@@ -6484,6 +6530,8 @@ var AdConfigManager = /*#__PURE__*/ function() {
6484
6530
  adTest: this.config.adTest
6485
6531
  }, this.config.programTitle ? {
6486
6532
  programTitle: this.config.programTitle
6533
+ } : {}, this.config.channelName ? {
6534
+ channelName: this.config.channelName
6487
6535
  } : {}), {
6488
6536
  consent: this.consentSignals
6489
6537
  }));
@@ -9604,7 +9652,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9604
9652
  // ───────────────────────────────────────────────────────────────
9605
9653
  function load() {
9606
9654
  return _async_to_generator(function() {
9607
- var _this, _this_config_lowLatencyMode, error, palDescriptionUrl, continueLiveStreamDuringAds;
9655
+ var _this, error, palDescriptionUrl, continueLiveStreamDuringAds;
9608
9656
  return _ts_generator(this, function(_state) {
9609
9657
  switch(_state.label){
9610
9658
  case 0:
@@ -9640,19 +9688,25 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
9640
9688
  4
9641
9689
  ];
9642
9690
  case 4:
9643
- palDescriptionUrl = this.adConfig.getPalDescriptionUrl();
9644
- this.palNonce.generateNonce(_object_spread({
9645
- videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,
9646
- videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,
9647
- adWillAutoPlay: !!this.config.autoplay,
9648
- adWillPlayMuted: true,
9649
- playerVolume: 0,
9650
- continuousPlayback: (_this_config_lowLatencyMode = this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
9651
- }, palDescriptionUrl ? {
9652
- descriptionUrl: palDescriptionUrl
9653
- } : {})).catch(function() {});
9654
- fetchConsentSignals().then(function(signals) {
9691
+ palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
9692
+ fetchConsentSignals().catch(function() {
9693
+ return {};
9694
+ }).then(function(signals) {
9695
+ var _this_config_lowLatencyMode;
9655
9696
  _this.adConfig.consentSignals = signals;
9697
+ var muted = _this.video.muted;
9698
+ return _this.palNonce.generateNonce(_object_spread({
9699
+ videoWidth: _this.video.offsetWidth || _this.video.clientWidth || 640,
9700
+ videoHeight: _this.video.offsetHeight || _this.video.clientHeight || 480,
9701
+ adWillAutoPlay: !!_this.config.autoplay,
9702
+ adWillPlayMuted: muted,
9703
+ playerVolume: muted ? 0 : _this.video.volume,
9704
+ continuousPlayback: (_this_config_lowLatencyMode = _this.config.lowLatencyMode) !== null && _this_config_lowLatencyMode !== void 0 ? _this_config_lowLatencyMode : false
9705
+ }, palDescriptionUrl ? {
9706
+ descriptionUrl: palDescriptionUrl
9707
+ } : {}, signals.storageAllowed != null ? {
9708
+ allowStorage: signals.storageAllowed
9709
+ } : {}));
9656
9710
  }).catch(function() {});
9657
9711
  this.adConfig.initializeTracking();
9658
9712
  if (!this.hlsEngine.shouldUseNativeHls(function() {