stormcloud-video-player 0.8.16 → 0.8.18

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 (52) hide show
  1. package/dist/stormcloud-vp.min.js +2 -2
  2. package/lib/index.cjs +4449 -4221
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.cts +18 -195
  5. package/lib/index.d.ts +18 -195
  6. package/lib/index.js +4455 -4219
  7. package/lib/index.js.map +1 -1
  8. package/lib/player/AdBreakOrchestrator.cjs +2275 -0
  9. package/lib/player/AdBreakOrchestrator.cjs.map +1 -0
  10. package/lib/player/AdBreakOrchestrator.d.cts +62 -0
  11. package/lib/player/AdPreloadPool.cjs +673 -0
  12. package/lib/player/AdPreloadPool.cjs.map +1 -0
  13. package/lib/player/AdPreloadPool.d.cts +37 -0
  14. package/lib/player/AdTimingService.cjs +841 -0
  15. package/lib/player/AdTimingService.cjs.map +1 -0
  16. package/lib/player/AdTimingService.d.cts +88 -0
  17. package/lib/player/HlsEngine.cjs +1502 -0
  18. package/lib/player/HlsEngine.cjs.map +1 -0
  19. package/lib/player/HlsEngine.d.cts +38 -0
  20. package/lib/player/PlaceholderLayer.cjs +191 -0
  21. package/lib/player/PlaceholderLayer.cjs.map +1 -0
  22. package/lib/player/PlaceholderLayer.d.cts +12 -0
  23. package/lib/player/PlayerControls.cjs +225 -0
  24. package/lib/player/PlayerControls.cjs.map +1 -0
  25. package/lib/player/PlayerControls.d.cts +13 -0
  26. package/lib/player/Scte35CueManager.cjs +413 -0
  27. package/lib/player/Scte35CueManager.cjs.map +1 -0
  28. package/lib/player/Scte35CueManager.d.cts +43 -0
  29. package/lib/player/Scte35Parser.cjs +945 -0
  30. package/lib/player/Scte35Parser.cjs.map +1 -0
  31. package/lib/player/Scte35Parser.d.cts +23 -0
  32. package/lib/player/StormcloudVideoPlayer.cjs +4411 -4168
  33. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  34. package/lib/player/StormcloudVideoPlayer.d.cts +19 -196
  35. package/lib/player/VmapManager.cjs +1706 -0
  36. package/lib/player/VmapManager.cjs.map +1 -0
  37. package/lib/player/VmapManager.d.cts +38 -0
  38. package/lib/player/playerTypes.cjs +49 -0
  39. package/lib/player/playerTypes.cjs.map +1 -0
  40. package/lib/player/playerTypes.d.cts +20 -0
  41. package/lib/players/HlsPlayer.cjs +4411 -4169
  42. package/lib/players/HlsPlayer.cjs.map +1 -1
  43. package/lib/players/HlsPlayer.d.cts +1 -1
  44. package/lib/players/index.cjs +4411 -4169
  45. package/lib/players/index.cjs.map +1 -1
  46. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  47. package/lib/{types-CWWADkvd.d.cts → types-DNiBmPKK.d.cts} +18 -1
  48. package/lib/ui/StormcloudVideoPlayer.cjs +4449 -4221
  49. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  50. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  51. package/lib/utils/tracking.d.cts +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/player/Scte35Parser.cjs","../../src/player/Scte35Parser.ts"],"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","d","dStr","res","durationMatch","elapsedMatch","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","cont","cueOutContMatch","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","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","timeSpecifiedFlag","r","high","low","ptsTicks","ptsAdjustmentTicks","markerTypeFromSegmentationTypeId","segmentationTypeId"],"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","import type { Scte35Marker, Id3TagInfo } from \"../types\";\n\nexport function parseCueOutDuration(value: string): number | undefined {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match =\n value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) ||\n 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) ? undefined : d;\n }\n return undefined;\n}\n\nexport function parseCueOutCont(\n value: string\n): { elapsed?: number; duration?: number } | undefined {\n const res: { elapsed?: number; duration?: number } = {};\n\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\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\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return undefined;\n}\n\nexport function parseAttributeList(value: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(value)) !== null) {\n const key: string = (match[1] ?? \"\") as string;\n let rawVal: string = (match[3] ?? match[4] ?? \"\") as string;\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}\n\nexport function toNumber(val: unknown): number | undefined {\n if (val == null) return undefined;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? undefined : n;\n}\n\nexport function isManifestBasedMarker(marker: Scte35Marker): boolean {\n const raw = marker.raw as any;\n if (!raw) return false;\n\n if (raw.tag) {\n const tag = String(raw.tag);\n return (\n tag.includes(\"EXT-X-CUE-OUT\") ||\n tag.includes(\"EXT-X-CUE-IN\") ||\n tag.includes(\"EXT-X-DATERANGE\")\n );\n }\n\n if (raw.id3) return false;\n\n if (raw.splice_command_type) return false;\n\n return false;\n}\n\nexport function decodeId3ValueToText(value: string | Uint8Array): string | undefined {\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 undefined;\n }\n}\n\nexport function getFragmentStartSeconds(frag: any): number | undefined {\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 undefined;\n}\n\nexport function parseScte35FromId3(tag: Id3TagInfo): Scte35Marker | undefined {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return undefined;\n\n const cueOutMatch =\n text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) ||\n text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker: Scte35Marker = {\n type: \"start\",\n ...(tag.ptsSeconds !== undefined ? { ptsSeconds: tag.ptsSeconds } : {}),\n ...(dur !== undefined ? { durationSeconds: dur } : {}),\n raw: { id3: text },\n } as Scte35Marker;\n return marker;\n }\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: Scte35Marker = {\n type: \"progress\",\n ...(tag.ptsSeconds !== undefined ? { ptsSeconds: tag.ptsSeconds } : {}),\n ...(cont?.duration !== undefined\n ? { durationSeconds: cont.duration }\n : {}),\n raw: { id3: text },\n } as Scte35Marker;\n return marker;\n }\n\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker: Scte35Marker = {\n type: \"end\",\n ...(tag.ptsSeconds !== undefined ? { ptsSeconds: tag.ptsSeconds } : {}),\n raw: { id3: text },\n } as Scte35Marker;\n return marker;\n }\n\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut =\n \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== undefined;\n const hasScteIn =\n \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== undefined;\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: Scte35Marker = {\n type: \"start\",\n ...(tag.ptsSeconds !== undefined\n ? { ptsSeconds: tag.ptsSeconds }\n : {}),\n ...(duration !== undefined ? { durationSeconds: duration } : {}),\n raw: { id3: text, attrs },\n } as Scte35Marker;\n return marker;\n }\n if (hasScteIn) {\n const marker: Scte35Marker = {\n type: \"end\",\n ...(tag.ptsSeconds !== undefined\n ? { ptsSeconds: tag.ptsSeconds }\n : {}),\n raw: { id3: text, attrs },\n } as Scte35Marker;\n return marker;\n }\n }\n\n if (/SCTE35-OUT/i.test(text)) {\n const marker: Scte35Marker = {\n type: \"start\",\n ...(tag.ptsSeconds !== undefined ? { ptsSeconds: tag.ptsSeconds } : {}),\n raw: { id3: text },\n } as Scte35Marker;\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker: Scte35Marker = {\n type: \"end\",\n ...(tag.ptsSeconds !== undefined ? { ptsSeconds: tag.ptsSeconds } : {}),\n raw: { id3: text },\n } as Scte35Marker;\n return marker;\n }\n\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n\n return undefined;\n}\n\nexport function normalizeFragmentPayload(payload: unknown): Uint8Array | undefined {\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 as ArrayBufferView;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return undefined;\n}\n\n// --- Transport Stream SCTE-35 parsing ---\n\nexport function detectTsPacketFormat(\n data: Uint8Array\n): { offset: number; packetSize: number; tsPayloadOffset: number } | undefined {\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 (\n let packetStart = offset;\n packetStart + tsPayloadOffset < data.length &&\n matchedPackets < 5;\n packetStart += packetSize\n ) {\n if (data[packetStart + tsPayloadOffset] !== 0x47) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return undefined;\n}\n\nfunction getPsiSectionStart(\n payload: Uint8Array,\n payloadUnitStart: boolean\n): number | undefined {\n if (!payloadUnitStart) {\n return undefined;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return undefined;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : undefined;\n}\n\nfunction getPsiSectionLength(data: Uint8Array, offset: number): number {\n return (((data[offset + 1] ?? 0) & 0x0f) << 8) | (data[offset + 2] ?? 0);\n}\n\nfunction parsePatSection(\n payload: Uint8Array,\n payloadUnitStart: boolean,\n pmtPids: Set<number>\n): void {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0x00) {\n return;\n }\n\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber =\n ((payload[offset] ?? 0) << 8) | (payload[offset + 1] ?? 0);\n const pid =\n (((payload[offset + 2] ?? 0) & 0x1f) << 8) |\n (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\n\nfunction descriptorsIdentifyScte35(\n data: Uint8Array,\n start: number,\n end: number\n): boolean {\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\n const registration =\n length >= 4\n ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n )\n : \"\";\n if (tag === 0x8a || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n\n offset = descriptorEnd;\n }\n return false;\n}\n\nfunction parsePmtSection(\n payload: Uint8Array,\n payloadUnitStart: boolean,\n tsScte35Pids: Set<number>\n): void {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0x02) {\n return;\n }\n\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength =\n (((payload[sectionStart + 10] ?? 0) & 0x0f) << 8) |\n (payload[sectionStart + 11] ?? 0);\n\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid =\n (((payload[offset + 1] ?? 0) & 0x1f) << 8) |\n (payload[offset + 2] ?? 0);\n const esInfoLength =\n (((payload[offset + 3] ?? 0) & 0x0f) << 8) |\n (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n\n if (\n streamType === 0x86 ||\n (streamType === 0x06 &&\n descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd))\n ) {\n tsScte35Pids.add(elementaryPid);\n }\n\n offset = descriptorStart + esInfoLength;\n }\n}\n\nfunction hasProcessedTsScte35Section(\n section: Uint8Array,\n processedSections: Set<string>\n): boolean {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = (checksum * 31 + (section[i] ?? 0)) >>> 0;\n }\n\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\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}\n\nfunction addScte35SectionMarker(\n section: Uint8Array,\n markers: Scte35Marker[],\n processedSections: Set<string>\n): void {\n if (section[0] !== 0xfc || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n\n marker.raw = {\n ...(typeof marker.raw === \"object\" && marker.raw ? marker.raw : {}),\n source: \"ts-packet\",\n };\n markers.push(marker);\n}\n\nfunction appendScte35Bytes(\n pid: number,\n bytes: Uint8Array,\n assemblers: Map<number, { bytes: number[]; expectedLength: number }>,\n markers: Scte35Marker[],\n processedSections: Set<string>\n): void {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\n\nfunction collectScte35SectionsFromPayload(\n pid: number,\n payload: Uint8Array,\n payloadUnitStart: boolean,\n assemblers: Map<number, { bytes: number[]; expectedLength: number }>,\n markers: Scte35Marker[],\n processedSections: Set<string>\n): void {\n if (payload.length === 0) {\n return;\n }\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\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 0xff) {\n return;\n }\n\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\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}\n\nexport function parseScte35FromTsPackets(\n data: Uint8Array,\n tsScte35Pids: Set<number>,\n pmtPids: Set<number>,\n processedSections: Set<string>\n): Scte35Marker[] {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n\n const markers: Scte35Marker[] = [];\n const sectionAssemblers = new Map<\n number,\n { bytes: number[]; expectedLength: number }\n >();\n\n for (\n let packetStart = packetInfo.offset;\n packetStart + packetInfo.packetSize <= data.length;\n packetStart += packetInfo.packetSize\n ) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 0x47) {\n continue;\n }\n\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (\n secondByte == null ||\n thirdByte == null ||\n fourthByte == null ||\n (secondByte & 0x80) !== 0\n ) {\n continue;\n }\n\n const payloadUnitStart = (secondByte & 0x40) !== 0;\n const pid = ((secondByte & 0x1f) << 8) | thirdByte;\n const adaptationFieldControl = (fourthByte >> 4) & 0x03;\n const hasPayload =\n adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\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\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\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\n return markers;\n}\n\n// --- Binary SCTE-35 parsing ---\n\nclass BitReader {\n private bytePos = 0;\n private bitPos = 0;\n constructor(private readonly buf: Uint8Array) {}\n readBits(numBits: number): number {\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) & 0xff;\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: number): void {\n this.readBits(n);\n }\n get bytePosition(): number {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n}\n\nfunction readSpliceTime(\n r: BitReader,\n ptsAdjustmentTicks: number\n): number | undefined {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return undefined;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks =\n (high * 0x100000000 + low + ptsAdjustmentTicks) % 0x200000000;\n return ptsTicks / 90000;\n}\n\nfunction markerTypeFromSegmentationTypeId(\n segmentationTypeId: number\n): Scte35Marker[\"type\"] | undefined {\n switch (segmentationTypeId) {\n case 0x10:\n case 0x22:\n case 0x30:\n case 0x32:\n case 0x34:\n case 0x36:\n return \"start\";\n case 0x11:\n case 0x23:\n case 0x31:\n case 0x33:\n case 0x35:\n case 0x37:\n return \"end\";\n default:\n return undefined;\n }\n}\n\nfunction parseScte35SegmentationDescriptor(\n descriptor: Uint8Array\n):\n | {\n type: Scte35Marker[\"type\"];\n durationSeconds?: number;\n segmentationEventId?: number;\n }\n | undefined {\n if (descriptor.length < 11) {\n return undefined;\n }\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 undefined;\n }\n\n const segmentationEventId =\n ((descriptor[4] ?? 0) * 0x1000000) +\n ((descriptor[5] ?? 0) << 16) +\n ((descriptor[6] ?? 0) << 8) +\n (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 0x80) !== 0;\n if (cancelIndicator) {\n return undefined;\n }\n\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 0x80) !== 0;\n const segmentationDurationFlag = (flags & 0x40) !== 0;\n let offset = 10;\n\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return undefined;\n }\n }\n\n let durationSeconds: number | undefined = undefined;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return undefined;\n }\n const durationTicks =\n ((descriptor[offset] ?? 0) * 0x100000000) +\n ((descriptor[offset + 1] ?? 0) * 0x1000000) +\n ((descriptor[offset + 2] ?? 0) << 16) +\n ((descriptor[offset + 3] ?? 0) << 8) +\n (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 90000;\n offset += 5;\n }\n\n if (offset + 2 > descriptor.length) {\n return undefined;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return undefined;\n }\n\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return undefined;\n }\n\n return {\n type: markerType,\n ...(durationSeconds !== undefined ? { durationSeconds } : {}),\n segmentationEventId,\n };\n}\n\nfunction parseScte35SegmentationDescriptors(\n data: Uint8Array,\n offset: number\n):\n | {\n type: Scte35Marker[\"type\"];\n durationSeconds?: number;\n segmentationEventId?: number;\n }\n | undefined {\n if (offset + 2 > data.length) {\n return undefined;\n }\n\n const descriptorLoopLength =\n ((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\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 undefined;\n }\n\n if (descriptorTag === 0x02) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n\n descriptorOffset = descriptorDataEnd;\n }\n\n return undefined;\n}\n\nexport function parseScte35Binary(data: Uint8Array): Scte35Marker | undefined {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 0xfc) return undefined;\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 undefined;\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 * 0x100000000 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n\n let markerType: Scte35Marker[\"type\"] | undefined;\n let durationSeconds: number | undefined = undefined;\n let ptsSeconds: number | undefined = undefined;\n let spliceEventId: number | undefined = undefined;\n const commandBodyStart = r.bytePosition;\n\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return undefined;\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\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 === undefined) {\n ptsSeconds = componentPtsSeconds;\n }\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 * 0x100000000 + low;\n durationSeconds = durationTicks / 90000;\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 undefined;\n }\n\n const expectedDescriptorOffset =\n spliceCommandLength === 0x0fff\n ? r.bytePosition\n : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === undefined) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n\n if (!markerType) {\n return undefined;\n }\n\n const marker: Scte35Marker = {\n type: markerType,\n ...(ptsSeconds !== undefined ? { ptsSeconds } : {}),\n ...(durationSeconds !== undefined ? { durationSeconds } : {}),\n raw: {\n splice_command_type: spliceCommandType,\n ...(spliceEventId !== undefined ? { splice_event_id: spliceEventId } : {}),\n ...(descriptorMarker?.segmentationEventId !== undefined\n ? { segmentation_event_id: descriptorMarker.segmentationEventId }\n : {}),\n },\n } as Scte35Marker;\n return marker;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { S as Scte35Marker, I as Id3TagInfo } from '../types-DNiBmPKK.cjs';
2
+
3
+ declare function parseCueOutDuration(value: string): number | undefined;
4
+ declare function parseCueOutCont(value: string): {
5
+ elapsed?: number;
6
+ duration?: number;
7
+ } | undefined;
8
+ declare function parseAttributeList(value: string): Record<string, string>;
9
+ declare function toNumber(val: unknown): number | undefined;
10
+ declare function isManifestBasedMarker(marker: Scte35Marker): boolean;
11
+ declare function decodeId3ValueToText(value: string | Uint8Array): string | undefined;
12
+ declare function getFragmentStartSeconds(frag: any): number | undefined;
13
+ declare function parseScte35FromId3(tag: Id3TagInfo): Scte35Marker | undefined;
14
+ declare function normalizeFragmentPayload(payload: unknown): Uint8Array | undefined;
15
+ declare function detectTsPacketFormat(data: Uint8Array): {
16
+ offset: number;
17
+ packetSize: number;
18
+ tsPayloadOffset: number;
19
+ } | undefined;
20
+ declare function parseScte35FromTsPackets(data: Uint8Array, tsScte35Pids: Set<number>, pmtPids: Set<number>, processedSections: Set<string>): Scte35Marker[];
21
+ declare function parseScte35Binary(data: Uint8Array): Scte35Marker | undefined;
22
+
23
+ export { decodeId3ValueToText, detectTsPacketFormat, getFragmentStartSeconds, isManifestBasedMarker, normalizeFragmentPayload, parseAttributeList, parseCueOutCont, parseCueOutDuration, parseScte35Binary, parseScte35FromId3, parseScte35FromTsPackets, toNumber };