mattebox 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/dist/cdn/mattebox.dash-drm.min.js +2 -0
  4. package/dist/cdn/mattebox.dash.min.js +2 -0
  5. package/dist/cdn/mattebox.dual-drm.min.js +2 -0
  6. package/dist/cdn/mattebox.dual-ts-drm.min.js +3 -0
  7. package/dist/cdn/mattebox.dual-ts.min.js +3 -0
  8. package/dist/cdn/mattebox.dual.min.js +2 -0
  9. package/dist/cdn/mattebox.hls-drm.min.js +2 -0
  10. package/dist/cdn/mattebox.hls-ts-drm.min.js +3 -0
  11. package/dist/cdn/mattebox.hls-ts.min.js +3 -0
  12. package/dist/cdn/mattebox.hls.min.js +2 -0
  13. package/dist/cdn/mattebox.kernel.min.js +1 -0
  14. package/dist/cdn/mattebox.min.js +6 -0
  15. package/dist/cdn/transmux.worker.js +1 -0
  16. package/dist/containers/adts.d.ts +33 -0
  17. package/dist/containers/adts.d.ts.map +1 -0
  18. package/dist/containers/adts.js +66 -0
  19. package/dist/containers/adts.js.map +1 -0
  20. package/dist/containers/captions.d.ts +27 -0
  21. package/dist/containers/captions.d.ts.map +1 -0
  22. package/dist/containers/captions.js +36 -0
  23. package/dist/containers/captions.js.map +1 -0
  24. package/dist/containers/codec-probe/index.d.ts +35 -0
  25. package/dist/containers/codec-probe/index.d.ts.map +1 -0
  26. package/dist/containers/codec-probe/index.js +222 -0
  27. package/dist/containers/codec-probe/index.js.map +1 -0
  28. package/dist/containers/fmp4/writer.d.ts +62 -0
  29. package/dist/containers/fmp4/writer.d.ts.map +1 -0
  30. package/dist/containers/fmp4/writer.js +201 -0
  31. package/dist/containers/fmp4/writer.js.map +1 -0
  32. package/dist/containers/id3.d.ts +25 -0
  33. package/dist/containers/id3.d.ts.map +1 -0
  34. package/dist/containers/id3.js +75 -0
  35. package/dist/containers/id3.js.map +1 -0
  36. package/dist/containers/mp4-box/index.d.ts +79 -0
  37. package/dist/containers/mp4-box/index.d.ts.map +1 -0
  38. package/dist/containers/mp4-box/index.js +231 -0
  39. package/dist/containers/mp4-box/index.js.map +1 -0
  40. package/dist/containers/packed-audio/index.d.ts +7 -0
  41. package/dist/containers/packed-audio/index.d.ts.map +1 -0
  42. package/dist/containers/packed-audio/index.js +63 -0
  43. package/dist/containers/packed-audio/index.js.map +1 -0
  44. package/dist/containers/sei.d.ts +26 -0
  45. package/dist/containers/sei.d.ts.map +1 -0
  46. package/dist/containers/sei.js +100 -0
  47. package/dist/containers/sei.js.map +1 -0
  48. package/dist/containers/ts-transmux/demux.d.ts +49 -0
  49. package/dist/containers/ts-transmux/demux.d.ts.map +1 -0
  50. package/dist/containers/ts-transmux/demux.js +222 -0
  51. package/dist/containers/ts-transmux/demux.js.map +1 -0
  52. package/dist/containers/ts-transmux/h264.d.ts +48 -0
  53. package/dist/containers/ts-transmux/h264.d.ts.map +1 -0
  54. package/dist/containers/ts-transmux/h264.js +211 -0
  55. package/dist/containers/ts-transmux/h264.js.map +1 -0
  56. package/dist/containers/ts-transmux/index.d.ts +17 -0
  57. package/dist/containers/ts-transmux/index.d.ts.map +1 -0
  58. package/dist/containers/ts-transmux/index.js +34 -0
  59. package/dist/containers/ts-transmux/index.js.map +1 -0
  60. package/dist/containers/ts-transmux/runner.d.ts +23 -0
  61. package/dist/containers/ts-transmux/runner.d.ts.map +1 -0
  62. package/dist/containers/ts-transmux/runner.js +99 -0
  63. package/dist/containers/ts-transmux/runner.js.map +1 -0
  64. package/dist/containers/ts-transmux/transmux.d.ts +24 -0
  65. package/dist/containers/ts-transmux/transmux.d.ts.map +1 -0
  66. package/dist/containers/ts-transmux/transmux.js +212 -0
  67. package/dist/containers/ts-transmux/transmux.js.map +1 -0
  68. package/dist/containers/ts-transmux/transmux.worker.d.ts +2 -0
  69. package/dist/containers/ts-transmux/transmux.worker.d.ts.map +1 -0
  70. package/dist/containers/ts-transmux/transmux.worker.js +19 -0
  71. package/dist/containers/ts-transmux/transmux.worker.js.map +1 -0
  72. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/asyncToGenerator.js +27 -0
  73. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/defineProperty.js +12 -0
  74. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js +25 -0
  75. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutProperties.js +13 -0
  76. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutPropertiesLoose.js +12 -0
  77. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPrimitive.js +14 -0
  78. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPropertyKey.js +9 -0
  79. package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/typeof.js +11 -0
  80. package/dist/es2015/containers/adts.js +77 -0
  81. package/dist/es2015/containers/captions.js +36 -0
  82. package/dist/es2015/containers/codec-probe/index.js +220 -0
  83. package/dist/es2015/containers/fmp4/writer.js +165 -0
  84. package/dist/es2015/containers/id3.js +72 -0
  85. package/dist/es2015/containers/mp4-box/index.js +209 -0
  86. package/dist/es2015/containers/packed-audio/index.js +67 -0
  87. package/dist/es2015/containers/sei.js +79 -0
  88. package/dist/es2015/containers/ts-transmux/demux.js +211 -0
  89. package/dist/es2015/containers/ts-transmux/h264.js +204 -0
  90. package/dist/es2015/containers/ts-transmux/index.js +37 -0
  91. package/dist/es2015/containers/ts-transmux/runner.js +95 -0
  92. package/dist/es2015/containers/ts-transmux/transmux.js +210 -0
  93. package/dist/es2015/containers/ts-transmux/transmux.worker.js +26 -0
  94. package/dist/es2015/index.js +356 -0
  95. package/dist/es2015/kernel/append-queue.js +148 -0
  96. package/dist/es2015/kernel/bus.js +134 -0
  97. package/dist/es2015/kernel/context.js +92 -0
  98. package/dist/es2015/kernel/effects.js +62 -0
  99. package/dist/es2015/kernel/evictor.js +67 -0
  100. package/dist/es2015/kernel/lifecycle.js +122 -0
  101. package/dist/es2015/kernel/loader.js +108 -0
  102. package/dist/es2015/kernel/mime.js +20 -0
  103. package/dist/es2015/kernel/mse.js +426 -0
  104. package/dist/es2015/kernel/reducer.js +1051 -0
  105. package/dist/es2015/kernel/rendition-select.js +263 -0
  106. package/dist/es2015/kernel/scheduler.js +82 -0
  107. package/dist/es2015/kernel/sinks/metadata-sink.js +7 -0
  108. package/dist/es2015/kernel/sinks/mse-sink.js +31 -0
  109. package/dist/es2015/kernel/sinks/text-track-sink.js +167 -0
  110. package/dist/es2015/kernel/timeline.js +127 -0
  111. package/dist/es2015/kernel/trace.js +134 -0
  112. package/dist/es2015/kernel/track-registry.js +47 -0
  113. package/dist/es2015/kernel/transport.js +242 -0
  114. package/dist/es2015/kernel/watchdog.js +38 -0
  115. package/dist/es2015/presets/dash/index.js +9 -0
  116. package/dist/es2015/presets/dash-drm/index.js +13 -0
  117. package/dist/es2015/presets/define.js +45 -0
  118. package/dist/es2015/presets/dual/index.js +14 -0
  119. package/dist/es2015/presets/dual-drm/index.js +14 -0
  120. package/dist/es2015/presets/dual-ts/index.js +14 -0
  121. package/dist/es2015/presets/dual-ts-drm/index.js +15 -0
  122. package/dist/es2015/presets/full/index.js +28 -0
  123. package/dist/es2015/presets/hls/index.js +9 -0
  124. package/dist/es2015/presets/hls-drm/index.js +13 -0
  125. package/dist/es2015/presets/hls-ts/index.js +13 -0
  126. package/dist/es2015/presets/hls-ts-drm/index.js +14 -0
  127. package/dist/es2015/presets/kernel/index.js +10 -0
  128. package/dist/es2015/presets/storage.js +24 -0
  129. package/dist/es2015/presets/tiers.js +93 -0
  130. package/dist/es2015/protocols/dash-cmaf/index.js +161 -0
  131. package/dist/es2015/protocols/dash-cmaf/parse.js +491 -0
  132. package/dist/es2015/protocols/dash-live/index.js +192 -0
  133. package/dist/es2015/protocols/hls-cmaf/index.js +168 -0
  134. package/dist/es2015/protocols/hls-cmaf/lexer.js +72 -0
  135. package/dist/es2015/protocols/hls-cmaf/parse.js +457 -0
  136. package/dist/es2015/protocols/hls-live/index.js +296 -0
  137. package/dist/es2015/protocols/live-shared.js +29 -0
  138. package/dist/es2015/stages/abr/index.js +126 -0
  139. package/dist/es2015/stages/abr-cap-size/index.js +22 -0
  140. package/dist/es2015/stages/abr-persist/index.js +52 -0
  141. package/dist/es2015/stages/aes-128/index.js +76 -0
  142. package/dist/es2015/stages/alt-audio/index.js +80 -0
  143. package/dist/es2015/stages/cmaf-timing/index.js +55 -0
  144. package/dist/es2015/stages/cmcd/index.js +70 -0
  145. package/dist/es2015/stages/codec-probe/index.js +65 -0
  146. package/dist/es2015/stages/codec-switch/index.js +48 -0
  147. package/dist/es2015/stages/content-steering/index.js +179 -0
  148. package/dist/es2015/stages/drm-shared.js +18 -0
  149. package/dist/es2015/stages/eme-cenc/index.js +46 -0
  150. package/dist/es2015/stages/eme-core/index.js +237 -0
  151. package/dist/es2015/stages/eme-fairplay/index.js +52 -0
  152. package/dist/es2015/stages/meta-id3/index.js +37 -0
  153. package/dist/es2015/stages/mp4-box/index.js +27 -0
  154. package/dist/es2015/stages/nal-scan/index.js +121 -0
  155. package/dist/es2015/stages/pdt/index.js +34 -0
  156. package/dist/es2015/stages/recovery/index.js +283 -0
  157. package/dist/es2015/stages/text-cea608/decode.js +201 -0
  158. package/dist/es2015/stages/text-cea608/index.js +71 -0
  159. package/dist/es2015/stages/text-webvtt/index.js +82 -0
  160. package/dist/es2015/stages/text-webvtt/parse.js +60 -0
  161. package/dist/es2015/stages/text-webvtt-segmented/index.js +57 -0
  162. package/dist/es2015/stages/thumbnails/index.js +73 -0
  163. package/dist/index.d.ts +32 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +423 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/kernel/append-queue.d.ts +47 -0
  168. package/dist/kernel/append-queue.d.ts.map +1 -0
  169. package/dist/kernel/append-queue.js +180 -0
  170. package/dist/kernel/append-queue.js.map +1 -0
  171. package/dist/kernel/bus.d.ts +50 -0
  172. package/dist/kernel/bus.d.ts.map +1 -0
  173. package/dist/kernel/bus.js +147 -0
  174. package/dist/kernel/bus.js.map +1 -0
  175. package/dist/kernel/context.d.ts +45 -0
  176. package/dist/kernel/context.d.ts.map +1 -0
  177. package/dist/kernel/context.js +116 -0
  178. package/dist/kernel/context.js.map +1 -0
  179. package/dist/kernel/effects.d.ts +33 -0
  180. package/dist/kernel/effects.d.ts.map +1 -0
  181. package/dist/kernel/effects.js +65 -0
  182. package/dist/kernel/effects.js.map +1 -0
  183. package/dist/kernel/evictor.d.ts +46 -0
  184. package/dist/kernel/evictor.d.ts.map +1 -0
  185. package/dist/kernel/evictor.js +92 -0
  186. package/dist/kernel/evictor.js.map +1 -0
  187. package/dist/kernel/lifecycle.d.ts +41 -0
  188. package/dist/kernel/lifecycle.d.ts.map +1 -0
  189. package/dist/kernel/lifecycle.js +129 -0
  190. package/dist/kernel/lifecycle.js.map +1 -0
  191. package/dist/kernel/loader.d.ts +28 -0
  192. package/dist/kernel/loader.d.ts.map +1 -0
  193. package/dist/kernel/loader.js +126 -0
  194. package/dist/kernel/loader.js.map +1 -0
  195. package/dist/kernel/mime.d.ts +13 -0
  196. package/dist/kernel/mime.d.ts.map +1 -0
  197. package/dist/kernel/mime.js +18 -0
  198. package/dist/kernel/mime.js.map +1 -0
  199. package/dist/kernel/mse.d.ts +62 -0
  200. package/dist/kernel/mse.d.ts.map +1 -0
  201. package/dist/kernel/mse.js +490 -0
  202. package/dist/kernel/mse.js.map +1 -0
  203. package/dist/kernel/reducer.d.ts +39 -0
  204. package/dist/kernel/reducer.d.ts.map +1 -0
  205. package/dist/kernel/reducer.js +1316 -0
  206. package/dist/kernel/reducer.js.map +1 -0
  207. package/dist/kernel/rendition-select.d.ts +102 -0
  208. package/dist/kernel/rendition-select.d.ts.map +1 -0
  209. package/dist/kernel/rendition-select.js +295 -0
  210. package/dist/kernel/rendition-select.js.map +1 -0
  211. package/dist/kernel/scheduler.d.ts +57 -0
  212. package/dist/kernel/scheduler.d.ts.map +1 -0
  213. package/dist/kernel/scheduler.js +98 -0
  214. package/dist/kernel/scheduler.js.map +1 -0
  215. package/dist/kernel/sinks/metadata-sink.d.ts +7 -0
  216. package/dist/kernel/sinks/metadata-sink.d.ts.map +1 -0
  217. package/dist/kernel/sinks/metadata-sink.js +5 -0
  218. package/dist/kernel/sinks/metadata-sink.js.map +1 -0
  219. package/dist/kernel/sinks/mse-sink.d.ts +17 -0
  220. package/dist/kernel/sinks/mse-sink.d.ts.map +1 -0
  221. package/dist/kernel/sinks/mse-sink.js +20 -0
  222. package/dist/kernel/sinks/mse-sink.js.map +1 -0
  223. package/dist/kernel/sinks/text-track-sink.d.ts +45 -0
  224. package/dist/kernel/sinks/text-track-sink.d.ts.map +1 -0
  225. package/dist/kernel/sinks/text-track-sink.js +184 -0
  226. package/dist/kernel/sinks/text-track-sink.js.map +1 -0
  227. package/dist/kernel/timeline.d.ts +57 -0
  228. package/dist/kernel/timeline.d.ts.map +1 -0
  229. package/dist/kernel/timeline.js +203 -0
  230. package/dist/kernel/timeline.js.map +1 -0
  231. package/dist/kernel/trace.d.ts +42 -0
  232. package/dist/kernel/trace.d.ts.map +1 -0
  233. package/dist/kernel/trace.js +165 -0
  234. package/dist/kernel/trace.js.map +1 -0
  235. package/dist/kernel/track-registry.d.ts +22 -0
  236. package/dist/kernel/track-registry.d.ts.map +1 -0
  237. package/dist/kernel/track-registry.js +42 -0
  238. package/dist/kernel/track-registry.js.map +1 -0
  239. package/dist/kernel/transport.d.ts +90 -0
  240. package/dist/kernel/transport.d.ts.map +1 -0
  241. package/dist/kernel/transport.js +256 -0
  242. package/dist/kernel/transport.js.map +1 -0
  243. package/dist/kernel/watchdog.d.ts +35 -0
  244. package/dist/kernel/watchdog.d.ts.map +1 -0
  245. package/dist/kernel/watchdog.js +43 -0
  246. package/dist/kernel/watchdog.js.map +1 -0
  247. package/dist/presets/dash/index.d.ts +4 -0
  248. package/dist/presets/dash/index.d.ts.map +1 -0
  249. package/dist/presets/dash/index.js +8 -0
  250. package/dist/presets/dash/index.js.map +1 -0
  251. package/dist/presets/dash-drm/index.d.ts +4 -0
  252. package/dist/presets/dash-drm/index.d.ts.map +1 -0
  253. package/dist/presets/dash-drm/index.js +8 -0
  254. package/dist/presets/dash-drm/index.js.map +1 -0
  255. package/dist/presets/define.d.ts +36 -0
  256. package/dist/presets/define.d.ts.map +1 -0
  257. package/dist/presets/define.js +39 -0
  258. package/dist/presets/define.js.map +1 -0
  259. package/dist/presets/dual/index.d.ts +4 -0
  260. package/dist/presets/dual/index.d.ts.map +1 -0
  261. package/dist/presets/dual/index.js +9 -0
  262. package/dist/presets/dual/index.js.map +1 -0
  263. package/dist/presets/dual-drm/index.d.ts +4 -0
  264. package/dist/presets/dual-drm/index.d.ts.map +1 -0
  265. package/dist/presets/dual-drm/index.js +13 -0
  266. package/dist/presets/dual-drm/index.js.map +1 -0
  267. package/dist/presets/dual-ts/index.d.ts +4 -0
  268. package/dist/presets/dual-ts/index.d.ts.map +1 -0
  269. package/dist/presets/dual-ts/index.js +8 -0
  270. package/dist/presets/dual-ts/index.js.map +1 -0
  271. package/dist/presets/dual-ts-drm/index.d.ts +4 -0
  272. package/dist/presets/dual-ts-drm/index.d.ts.map +1 -0
  273. package/dist/presets/dual-ts-drm/index.js +14 -0
  274. package/dist/presets/dual-ts-drm/index.js.map +1 -0
  275. package/dist/presets/full/index.d.ts +4 -0
  276. package/dist/presets/full/index.d.ts.map +1 -0
  277. package/dist/presets/full/index.js +27 -0
  278. package/dist/presets/full/index.js.map +1 -0
  279. package/dist/presets/hls/index.d.ts +4 -0
  280. package/dist/presets/hls/index.d.ts.map +1 -0
  281. package/dist/presets/hls/index.js +8 -0
  282. package/dist/presets/hls/index.js.map +1 -0
  283. package/dist/presets/hls-drm/index.d.ts +4 -0
  284. package/dist/presets/hls-drm/index.d.ts.map +1 -0
  285. package/dist/presets/hls-drm/index.js +8 -0
  286. package/dist/presets/hls-drm/index.js.map +1 -0
  287. package/dist/presets/hls-ts/index.d.ts +4 -0
  288. package/dist/presets/hls-ts/index.d.ts.map +1 -0
  289. package/dist/presets/hls-ts/index.js +8 -0
  290. package/dist/presets/hls-ts/index.js.map +1 -0
  291. package/dist/presets/hls-ts-drm/index.d.ts +4 -0
  292. package/dist/presets/hls-ts-drm/index.d.ts.map +1 -0
  293. package/dist/presets/hls-ts-drm/index.js +13 -0
  294. package/dist/presets/hls-ts-drm/index.js.map +1 -0
  295. package/dist/presets/kernel/index.d.ts +4 -0
  296. package/dist/presets/kernel/index.d.ts.map +1 -0
  297. package/dist/presets/kernel/index.js +9 -0
  298. package/dist/presets/kernel/index.js.map +1 -0
  299. package/dist/presets/storage.d.ts +9 -0
  300. package/dist/presets/storage.d.ts.map +1 -0
  301. package/dist/presets/storage.js +24 -0
  302. package/dist/presets/storage.js.map +1 -0
  303. package/dist/presets/tiers.d.ts +22 -0
  304. package/dist/presets/tiers.d.ts.map +1 -0
  305. package/dist/presets/tiers.js +78 -0
  306. package/dist/presets/tiers.js.map +1 -0
  307. package/dist/protocols/dash-cmaf/index.d.ts +20 -0
  308. package/dist/protocols/dash-cmaf/index.d.ts.map +1 -0
  309. package/dist/protocols/dash-cmaf/index.js +176 -0
  310. package/dist/protocols/dash-cmaf/index.js.map +1 -0
  311. package/dist/protocols/dash-cmaf/parse.d.ts +24 -0
  312. package/dist/protocols/dash-cmaf/parse.d.ts.map +1 -0
  313. package/dist/protocols/dash-cmaf/parse.js +586 -0
  314. package/dist/protocols/dash-cmaf/parse.js.map +1 -0
  315. package/dist/protocols/dash-live/index.d.ts +4 -0
  316. package/dist/protocols/dash-live/index.d.ts.map +1 -0
  317. package/dist/protocols/dash-live/index.js +188 -0
  318. package/dist/protocols/dash-live/index.js.map +1 -0
  319. package/dist/protocols/hls-cmaf/index.d.ts +17 -0
  320. package/dist/protocols/hls-cmaf/index.d.ts.map +1 -0
  321. package/dist/protocols/hls-cmaf/index.js +189 -0
  322. package/dist/protocols/hls-cmaf/index.js.map +1 -0
  323. package/dist/protocols/hls-cmaf/lexer.d.ts +25 -0
  324. package/dist/protocols/hls-cmaf/lexer.d.ts.map +1 -0
  325. package/dist/protocols/hls-cmaf/lexer.js +81 -0
  326. package/dist/protocols/hls-cmaf/lexer.js.map +1 -0
  327. package/dist/protocols/hls-cmaf/parse.d.ts +57 -0
  328. package/dist/protocols/hls-cmaf/parse.d.ts.map +1 -0
  329. package/dist/protocols/hls-cmaf/parse.js +572 -0
  330. package/dist/protocols/hls-cmaf/parse.js.map +1 -0
  331. package/dist/protocols/hls-live/index.d.ts +4 -0
  332. package/dist/protocols/hls-live/index.d.ts.map +1 -0
  333. package/dist/protocols/hls-live/index.js +309 -0
  334. package/dist/protocols/hls-live/index.js.map +1 -0
  335. package/dist/protocols/live-shared.d.ts +21 -0
  336. package/dist/protocols/live-shared.d.ts.map +1 -0
  337. package/dist/protocols/live-shared.js +32 -0
  338. package/dist/protocols/live-shared.js.map +1 -0
  339. package/dist/stages/abr/index.d.ts +16 -0
  340. package/dist/stages/abr/index.d.ts.map +1 -0
  341. package/dist/stages/abr/index.js +176 -0
  342. package/dist/stages/abr/index.js.map +1 -0
  343. package/dist/stages/abr-cap-size/index.d.ts +8 -0
  344. package/dist/stages/abr-cap-size/index.d.ts.map +1 -0
  345. package/dist/stages/abr-cap-size/index.js +21 -0
  346. package/dist/stages/abr-cap-size/index.js.map +1 -0
  347. package/dist/stages/abr-persist/index.d.ts +8 -0
  348. package/dist/stages/abr-persist/index.d.ts.map +1 -0
  349. package/dist/stages/abr-persist/index.js +44 -0
  350. package/dist/stages/abr-persist/index.js.map +1 -0
  351. package/dist/stages/aes-128/index.d.ts +15 -0
  352. package/dist/stages/aes-128/index.d.ts.map +1 -0
  353. package/dist/stages/aes-128/index.js +78 -0
  354. package/dist/stages/aes-128/index.js.map +1 -0
  355. package/dist/stages/alt-audio/index.d.ts +4 -0
  356. package/dist/stages/alt-audio/index.d.ts.map +1 -0
  357. package/dist/stages/alt-audio/index.js +90 -0
  358. package/dist/stages/alt-audio/index.js.map +1 -0
  359. package/dist/stages/cmaf-timing/index.d.ts +3 -0
  360. package/dist/stages/cmaf-timing/index.d.ts.map +1 -0
  361. package/dist/stages/cmaf-timing/index.js +56 -0
  362. package/dist/stages/cmaf-timing/index.js.map +1 -0
  363. package/dist/stages/cmcd/index.d.ts +22 -0
  364. package/dist/stages/cmcd/index.d.ts.map +1 -0
  365. package/dist/stages/cmcd/index.js +92 -0
  366. package/dist/stages/cmcd/index.js.map +1 -0
  367. package/dist/stages/codec-probe/index.d.ts +9 -0
  368. package/dist/stages/codec-probe/index.d.ts.map +1 -0
  369. package/dist/stages/codec-probe/index.js +68 -0
  370. package/dist/stages/codec-probe/index.js.map +1 -0
  371. package/dist/stages/codec-switch/index.d.ts +6 -0
  372. package/dist/stages/codec-switch/index.d.ts.map +1 -0
  373. package/dist/stages/codec-switch/index.js +59 -0
  374. package/dist/stages/codec-switch/index.js.map +1 -0
  375. package/dist/stages/content-steering/index.d.ts +4 -0
  376. package/dist/stages/content-steering/index.d.ts.map +1 -0
  377. package/dist/stages/content-steering/index.js +174 -0
  378. package/dist/stages/content-steering/index.js.map +1 -0
  379. package/dist/stages/drm-shared.d.ts +46 -0
  380. package/dist/stages/drm-shared.d.ts.map +1 -0
  381. package/dist/stages/drm-shared.js +28 -0
  382. package/dist/stages/drm-shared.js.map +1 -0
  383. package/dist/stages/eme-cenc/index.d.ts +12 -0
  384. package/dist/stages/eme-cenc/index.d.ts.map +1 -0
  385. package/dist/stages/eme-cenc/index.js +53 -0
  386. package/dist/stages/eme-cenc/index.js.map +1 -0
  387. package/dist/stages/eme-core/index.d.ts +29 -0
  388. package/dist/stages/eme-core/index.d.ts.map +1 -0
  389. package/dist/stages/eme-core/index.js +244 -0
  390. package/dist/stages/eme-core/index.js.map +1 -0
  391. package/dist/stages/eme-fairplay/index.d.ts +20 -0
  392. package/dist/stages/eme-fairplay/index.d.ts.map +1 -0
  393. package/dist/stages/eme-fairplay/index.js +59 -0
  394. package/dist/stages/eme-fairplay/index.js.map +1 -0
  395. package/dist/stages/meta-id3/index.d.ts +14 -0
  396. package/dist/stages/meta-id3/index.d.ts.map +1 -0
  397. package/dist/stages/meta-id3/index.js +30 -0
  398. package/dist/stages/meta-id3/index.js.map +1 -0
  399. package/dist/stages/mp4-box/index.d.ts +3 -0
  400. package/dist/stages/mp4-box/index.d.ts.map +1 -0
  401. package/dist/stages/mp4-box/index.js +19 -0
  402. package/dist/stages/mp4-box/index.js.map +1 -0
  403. package/dist/stages/nal-scan/index.d.ts +3 -0
  404. package/dist/stages/nal-scan/index.d.ts.map +1 -0
  405. package/dist/stages/nal-scan/index.js +123 -0
  406. package/dist/stages/nal-scan/index.js.map +1 -0
  407. package/dist/stages/pdt/index.d.ts +14 -0
  408. package/dist/stages/pdt/index.d.ts.map +1 -0
  409. package/dist/stages/pdt/index.js +34 -0
  410. package/dist/stages/pdt/index.js.map +1 -0
  411. package/dist/stages/recovery/index.d.ts +16 -0
  412. package/dist/stages/recovery/index.d.ts.map +1 -0
  413. package/dist/stages/recovery/index.js +270 -0
  414. package/dist/stages/recovery/index.js.map +1 -0
  415. package/dist/stages/text-cea608/decode.d.ts +44 -0
  416. package/dist/stages/text-cea608/decode.d.ts.map +1 -0
  417. package/dist/stages/text-cea608/decode.js +225 -0
  418. package/dist/stages/text-cea608/decode.js.map +1 -0
  419. package/dist/stages/text-cea608/index.d.ts +3 -0
  420. package/dist/stages/text-cea608/index.d.ts.map +1 -0
  421. package/dist/stages/text-cea608/index.js +84 -0
  422. package/dist/stages/text-cea608/index.js.map +1 -0
  423. package/dist/stages/text-webvtt/index.d.ts +3 -0
  424. package/dist/stages/text-webvtt/index.d.ts.map +1 -0
  425. package/dist/stages/text-webvtt/index.js +82 -0
  426. package/dist/stages/text-webvtt/index.js.map +1 -0
  427. package/dist/stages/text-webvtt/parse.d.ts +19 -0
  428. package/dist/stages/text-webvtt/parse.d.ts.map +1 -0
  429. package/dist/stages/text-webvtt/parse.js +62 -0
  430. package/dist/stages/text-webvtt/parse.js.map +1 -0
  431. package/dist/stages/text-webvtt-segmented/index.d.ts +5 -0
  432. package/dist/stages/text-webvtt-segmented/index.d.ts.map +1 -0
  433. package/dist/stages/text-webvtt-segmented/index.js +63 -0
  434. package/dist/stages/text-webvtt-segmented/index.js.map +1 -0
  435. package/dist/stages/thumbnails/index.d.ts +34 -0
  436. package/dist/stages/thumbnails/index.d.ts.map +1 -0
  437. package/dist/stages/thumbnails/index.js +58 -0
  438. package/dist/stages/thumbnails/index.js.map +1 -0
  439. package/dist/types/error.d.ts +33 -0
  440. package/dist/types/error.d.ts.map +1 -0
  441. package/dist/types/error.js +7 -0
  442. package/dist/types/error.js.map +1 -0
  443. package/dist/types/facade.d.ts +104 -0
  444. package/dist/types/facade.d.ts.map +1 -0
  445. package/dist/types/facade.js +2 -0
  446. package/dist/types/facade.js.map +1 -0
  447. package/dist/types/ir.d.ts +238 -0
  448. package/dist/types/ir.d.ts.map +1 -0
  449. package/dist/types/ir.js +7 -0
  450. package/dist/types/ir.js.map +1 -0
  451. package/dist/types/kernel.d.ts +217 -0
  452. package/dist/types/kernel.d.ts.map +1 -0
  453. package/dist/types/kernel.js +2 -0
  454. package/dist/types/kernel.js.map +1 -0
  455. package/dist/types/messages.d.ts +288 -0
  456. package/dist/types/messages.d.ts.map +1 -0
  457. package/dist/types/messages.js +2 -0
  458. package/dist/types/messages.js.map +1 -0
  459. package/dist/types/quality.d.ts +108 -0
  460. package/dist/types/quality.d.ts.map +1 -0
  461. package/dist/types/quality.js +2 -0
  462. package/dist/types/quality.js.map +1 -0
  463. package/dist/types/sink.d.ts +27 -0
  464. package/dist/types/sink.d.ts.map +1 -0
  465. package/dist/types/sink.js +2 -0
  466. package/dist/types/sink.js.map +1 -0
  467. package/dist/types/stage.d.ts +139 -0
  468. package/dist/types/stage.d.ts.map +1 -0
  469. package/dist/types/stage.js +2 -0
  470. package/dist/types/stage.js.map +1 -0
  471. package/package.json +132 -0
@@ -0,0 +1,188 @@
1
+ import { parse } from '../dash-cmaf/parse.js';
2
+ import { registerLiveNamespace } from '../live-shared.js';
3
+ const MPD_TOKEN = 'dash:live:mpd';
4
+ const UTC_TOKEN = 'dash:live:utc';
5
+ const TICK_TOKEN = 'dash-live:reload';
6
+ const CLOCK_TOKEN = 'dash-live:clock';
7
+ /** Fallback hold-back when the MPD suggests nothing, in seconds. */
8
+ const DEFAULT_HOLD_BACK = 10;
9
+ /** Fallback DVR depth, in seconds. */
10
+ const DEFAULT_TIME_SHIFT = 60;
11
+ /** Window movement below this is not worth a fact, in seconds. */
12
+ const WINDOW_QUANTUM = 0.5;
13
+ const INITIAL = {
14
+ manifestUrl: null,
15
+ skew: null,
16
+ utcPending: false,
17
+ tickPending: false,
18
+ clockPending: false,
19
+ lastWindowEnd: -1,
20
+ lastWallClock: null,
21
+ };
22
+ /** The window arithmetic; null when it cannot move or is not worth a fact. */
23
+ function windowUpdate(state, live) {
24
+ if (live.availabilityStart === undefined || state.lastWallClock === null)
25
+ return null;
26
+ const now = state.lastWallClock + (state.skew ?? 0);
27
+ const end = now - live.availabilityStart;
28
+ if (end <= 0 || Math.abs(end - state.lastWindowEnd) < WINDOW_QUANTUM)
29
+ return null;
30
+ const start = Math.max(0, end - (live.timeShiftDepth ?? DEFAULT_TIME_SHIFT));
31
+ const edge = Math.max(start, end - (live.holdBack ?? DEFAULT_HOLD_BACK));
32
+ return {
33
+ next: { ...state, lastWindowEnd: end },
34
+ fact: feed({ type: 'LIVE_WINDOW_CHANGED', start, end, edge }),
35
+ };
36
+ }
37
+ /**
38
+ * Whether this slice owns the presentation's live window: a dynamic MPD,
39
+ * which ISO 23009-1 requires to carry availabilityStartTime. An HLS live
40
+ * presentation is live too but has no availability start; its window is
41
+ * read from playlists by hls-live, and reloading its master as an MPD on
42
+ * a one-second clock is only noise.
43
+ */
44
+ function drivesWindow(presentation) {
45
+ return presentation?.isLive === true && presentation.live?.availabilityStart !== undefined;
46
+ }
47
+ /** Loops a message back into the bus through a zero-delay schedule effect. */
48
+ function feed(message) {
49
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
50
+ return { kind: 'schedule', token: 'dash-live:loopback', delayMs: 0, then: message };
51
+ }
52
+ function tick(delaySeconds) {
53
+ return {
54
+ kind: 'schedule',
55
+ token: TICK_TOKEN,
56
+ delayMs: Math.max(500, delaySeconds * 1000),
57
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
58
+ then: { type: 'TICK', token: TICK_TOKEN },
59
+ };
60
+ }
61
+ /** The one-second clock loop that slides the window while playback stalls. */
62
+ function clockTick() {
63
+ return {
64
+ kind: 'schedule',
65
+ token: CLOCK_TOKEN,
66
+ delayMs: 1000,
67
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
68
+ then: { type: 'TICK', token: CLOCK_TOKEN },
69
+ };
70
+ }
71
+ const reduceDashLive = (slice, msg, kernel) => {
72
+ let state = slice ?? INITIAL;
73
+ // Any stamped fact refreshes the clock cache first, so every later
74
+ // branch computes with the newest wall time.
75
+ if ((msg.type === 'TIME_UPDATE' || msg.type === 'SEGMENT_LOADED') &&
76
+ msg.wallClock !== undefined) {
77
+ state = { ...state, lastWallClock: msg.wallClock };
78
+ }
79
+ if (msg.type === 'LOAD')
80
+ return [{ ...INITIAL, manifestUrl: msg.url }, []];
81
+ if (msg.type === 'UNLOAD' || msg.type === 'DETACH')
82
+ return [INITIAL, []];
83
+ if (msg.type === 'MANIFEST_LOADED') {
84
+ if (!drivesWindow(msg.presentation))
85
+ return [state, []];
86
+ const effects = [];
87
+ let next = state;
88
+ const server = msg.presentation.live.timeServer;
89
+ if (server !== undefined && state.skew === null && !state.utcPending) {
90
+ if (server.scheme.endsWith(':direct') || server.scheme.endsWith(':direct:2014')) {
91
+ // The value is the date itself; skew resolves on the next fact
92
+ // carrying a wall clock. Treated as zero until then.
93
+ next = { ...next, skew: null };
94
+ }
95
+ else if (server.value !== '') {
96
+ effects.push({ kind: 'fetch', token: UTC_TOKEN, url: server.value });
97
+ next = { ...next, utcPending: true };
98
+ }
99
+ }
100
+ if (!next.tickPending) {
101
+ effects.push(tick(msg.presentation.live.updatePeriod ?? 4));
102
+ next = { ...next, tickPending: true };
103
+ }
104
+ if (!next.clockPending) {
105
+ effects.push(clockTick());
106
+ next = { ...next, clockPending: true };
107
+ }
108
+ const window = windowUpdate(next, msg.presentation.live);
109
+ if (window !== null) {
110
+ next = window.next;
111
+ effects.push(window.fact);
112
+ }
113
+ return [next, effects];
114
+ }
115
+ if (msg.type === 'TICK' && msg.token === CLOCK_TOKEN) {
116
+ if (!drivesWindow(kernel.presentation)) {
117
+ return [{ ...state, clockPending: false }, []];
118
+ }
119
+ let next = { ...state, clockPending: true };
120
+ if (msg.wallClock !== undefined)
121
+ next = { ...next, lastWallClock: msg.wallClock };
122
+ const effects = [clockTick()];
123
+ const live = kernel.presentation.live;
124
+ if (live !== undefined) {
125
+ const window = windowUpdate(next, live);
126
+ if (window !== null) {
127
+ next = window.next;
128
+ effects.push(window.fact);
129
+ }
130
+ }
131
+ return [next, effects];
132
+ }
133
+ if (msg.type === 'TICK' && msg.token === TICK_TOKEN) {
134
+ if (state.manifestUrl === null || !drivesWindow(kernel.presentation)) {
135
+ return [{ ...state, tickPending: false }, []];
136
+ }
137
+ return [
138
+ { ...state, tickPending: false },
139
+ [{ kind: 'fetch', token: MPD_TOKEN, url: state.manifestUrl }],
140
+ ];
141
+ }
142
+ if (msg.type === 'SEGMENT_LOADED' && msg.trackId === UTC_TOKEN) {
143
+ const serverTime = Date.parse(new TextDecoder().decode(msg.bytes).trim());
144
+ if (!Number.isFinite(serverTime) || msg.wallClock === undefined) {
145
+ return [{ ...state, utcPending: false }, []];
146
+ }
147
+ return [{ ...state, skew: serverTime / 1000 - msg.wallClock, utcPending: false }, []];
148
+ }
149
+ if (msg.type === 'SEGMENT_LOADED' && msg.trackId === MPD_TOKEN) {
150
+ if (state.manifestUrl === null)
151
+ return [state, []];
152
+ const result = parse(new TextDecoder().decode(msg.bytes), state.manifestUrl);
153
+ const effects = [];
154
+ let next = state;
155
+ if (result.presentation !== null) {
156
+ effects.push(feed({ type: 'MANIFEST_LOADED', presentation: result.presentation }));
157
+ if (result.presentation.isLive && result.presentation.live !== undefined) {
158
+ const window = windowUpdate(next, result.presentation.live);
159
+ if (window !== null) {
160
+ next = window.next;
161
+ effects.push(window.fact);
162
+ }
163
+ }
164
+ }
165
+ return [next, effects];
166
+ }
167
+ // Every wall-clock-stamped fact can slide the window.
168
+ if ((msg.type === 'TIME_UPDATE' || msg.type === 'SEGMENT_LOADED') &&
169
+ drivesWindow(kernel.presentation)) {
170
+ const window = windowUpdate(state, kernel.presentation.live);
171
+ if (window !== null)
172
+ return [window.next, [window.fact]];
173
+ }
174
+ return [state, []];
175
+ };
176
+ /** The stage factory. Requires dash-cmaf; the loader enforces it. */
177
+ export default function dashLive() {
178
+ return {
179
+ name: 'dash-live',
180
+ provides: ['dash-live'],
181
+ requires: ['dash-cmaf'],
182
+ install(ctx) {
183
+ ctx.reduce('dash-live', reduceDashLive);
184
+ registerLiveNamespace(ctx);
185
+ },
186
+ };
187
+ }
188
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocols/dash-live/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,sCAAsC;AACtC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,kEAAkE;AAClE,MAAM,cAAc,GAAG,GAAG,CAAC;AAc3B,MAAM,OAAO,GAAkB;IAC7B,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,CAAC,CAAC;IACjB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,8EAA8E;AAC9E,SAAS,YAAY,CACnB,KAAoB,EACpB,IAAuC;IAEvC,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtF,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc;QAAE,OAAO,IAAI,CAAC;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC,CAAC;IACzE,OAAO;QACL,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE;QACtC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CACnB,YAAiC;IAEjC,OAAO,YAAY,EAAE,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC;AAC7F,CAAC;AAED,8EAA8E;AAC9E,SAAS,IAAI,CAAC,OAAgB;IAC5B,oHAAoH;IACpH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,IAAI,CAAC,YAAoB;IAChC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;QAC3C,oHAAoH;QACpH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS;IAChB,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,IAAI;QACb,oHAAoH;QACpH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAgC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;IACzE,IAAI,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC;IAC7B,mEAAmE;IACnE,6CAA6C;IAC7C,IACE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAC7D,GAAG,CAAC,SAAS,KAAK,SAAS,EAC3B,CAAC;QACD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEzE,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChF,+DAA+D;gBAC/D,qDAAqD;gBACrD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACjC,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,GAAkB,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC3D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;QAClF,MAAM,OAAO,GAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;YACL,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;YAChC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/D,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACzE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,sDAAsD;IACtD,IACE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAC7D,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EACjC,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,OAAO,UAAU,QAAQ;IAC9B,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,OAAO,CAAC,GAAG;YACT,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,cAA8B,CAAC,CAAC;YACxD,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The hls-cmaf protocol adapter as a stage. Inert module: exports a
3
+ * factory, registers nothing at import time.
4
+ *
5
+ * The choreography is a slice reducer, so the whole protocol lives inside
6
+ * the message loop and the trace: manifest bytes arrive as SEGMENT_LOADED
7
+ * facts, parsing is pure, and results loop back through zero-delay
8
+ * schedule effects carrying MANIFEST_LOADED. Media playlists fetch under
9
+ * `hls:pl:` tokens the transport correlates back by token.
10
+ */
11
+ import type { Stage } from '../../types/stage.js';
12
+ /**
13
+ * The stage factory. `mattebox({ stages: [hlsCmaf()] })` is all a consumer
14
+ * needs for HLS-CMAF VOD.
15
+ */
16
+ export default function hlsCmaf(): Stage;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocols/hls-cmaf/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA6LlD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,IAAI,KAAK,CAQvC"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * The hls-cmaf protocol adapter as a stage. Inert module: exports a
3
+ * factory, registers nothing at import time.
4
+ *
5
+ * The choreography is a slice reducer, so the whole protocol lives inside
6
+ * the message loop and the trace: manifest bytes arrive as SEGMENT_LOADED
7
+ * facts, parsing is pure, and results loop back through zero-delay
8
+ * schedule effects carrying MANIFEST_LOADED. Media playlists fetch under
9
+ * `hls:pl:` tokens the transport correlates back by token.
10
+ */
11
+ import { normalizeMimeType } from '../../kernel/mime.js';
12
+ import { mergePlaylist, parse, parseMediaPlaylist } from './parse.js';
13
+ const PLAYLIST_TOKEN = 'hls:pl:';
14
+ /** The playlist MIME types, RFC 8216 §4: the registered type and the three in common use. */
15
+ const MANIFEST_TYPES = [
16
+ 'application/vnd.apple.mpegurl',
17
+ 'application/x-mpegurl',
18
+ 'audio/mpegurl',
19
+ 'audio/x-mpegurl',
20
+ ];
21
+ const INITIAL = { manifestUrl: null, mimeType: null, pending: {} };
22
+ /**
23
+ * Whether this adapter owns the manifest bytes. An explicit mimeType
24
+ * decides alone: a foreign type declines without reading, an own type
25
+ * parses without sniffing, so a broken playlist reports a parse failure
26
+ * instead of falling through. Without one, RFC 8216 §4.3.1.1: the first
27
+ * line of every playlist is #EXTM3U.
28
+ */
29
+ function claims(state, text) {
30
+ if (state.mimeType !== null)
31
+ return MANIFEST_TYPES.includes(state.mimeType);
32
+ return text.trimStart().startsWith('#EXTM3U');
33
+ }
34
+ function findRendition(presentation, renditionId) {
35
+ for (const period of presentation.periods) {
36
+ for (const track of period.tracks) {
37
+ for (const rendition of track.renditions) {
38
+ if (rendition.id === renditionId)
39
+ return { rendition, track };
40
+ }
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * The renditions whose media playlists still need fetching: every rendition of
47
+ * every active track. Fetching only the "chosen" one is not enough, because ABR
48
+ * (or any switch policy) selects independently and can pick a rendition this
49
+ * slice would not have; its segments would then stay empty and the scheduler
50
+ * would stall the moment ABR ramped onto it, which looks like playback dying
51
+ * once the buffer drains. Fetching all of an active track's playlists means the
52
+ * rendition ABR lands on is already loaded, and a switch never stalls.
53
+ */
54
+ function neededPlaylists(kernel) {
55
+ const presentation = kernel.presentation;
56
+ if (presentation === null)
57
+ return [];
58
+ const activeIds = new Set(['video', 'audio', 'text']
59
+ .map((contentType) => kernel.tracks.active.get(contentType))
60
+ .filter((id) => id !== undefined));
61
+ const needed = [];
62
+ for (const period of presentation.periods) {
63
+ for (const track of period.tracks) {
64
+ if (!activeIds.has(track.id))
65
+ continue;
66
+ for (const rendition of track.renditions) {
67
+ if (rendition.playlistUrl !== undefined &&
68
+ Array.isArray(rendition.segments) &&
69
+ rendition.segments.length === 0) {
70
+ needed.push(rendition);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ return needed;
76
+ }
77
+ /** Loops a message back into the bus through a zero-delay schedule effect. */
78
+ function feed(message) {
79
+ // biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
80
+ return { kind: 'schedule', token: 'hls:loopback', delayMs: 0, then: message };
81
+ }
82
+ function loopBack(presentation) {
83
+ return feed({ type: 'MANIFEST_LOADED', presentation });
84
+ }
85
+ const reduceHls = (slice, msg, kernel) => {
86
+ const state = slice ?? INITIAL;
87
+ if (msg.type === 'LOAD') {
88
+ return [
89
+ {
90
+ manifestUrl: msg.url,
91
+ mimeType: msg.mimeType === undefined ? null : normalizeMimeType(msg.mimeType),
92
+ pending: {},
93
+ },
94
+ [],
95
+ ];
96
+ }
97
+ if (msg.type === 'UNLOAD' || msg.type === 'DETACH') {
98
+ return [INITIAL, []];
99
+ }
100
+ if (msg.type === 'SEGMENT_LOADED' && msg.trackId === 'manifest' && state.manifestUrl !== null) {
101
+ const text = new TextDecoder().decode(msg.bytes);
102
+ // Declining returns no effect; the kernel reports bytes nobody claims.
103
+ if (!claims(state, text))
104
+ return [state, []];
105
+ const result = parse(text, state.manifestUrl);
106
+ if (result.presentation === null) {
107
+ return [
108
+ state,
109
+ [
110
+ feed({
111
+ type: 'MANIFEST_FAILED',
112
+ error: result.error ?? {
113
+ category: 'manifest',
114
+ code: 'MANIFEST_PARSE_FAILED',
115
+ fatal: true,
116
+ recoverable: false,
117
+ },
118
+ }),
119
+ ],
120
+ ];
121
+ }
122
+ return [state, [loopBack(result.presentation)]];
123
+ }
124
+ if (msg.type === 'SEGMENT_LOADED' && msg.trackId.startsWith(PLAYLIST_TOKEN)) {
125
+ const renditionId = state.pending[msg.trackId];
126
+ if (renditionId === undefined || kernel.presentation === null)
127
+ return [state, []];
128
+ const site = findRendition(kernel.presentation, renditionId);
129
+ const pending = { ...state.pending };
130
+ delete pending[msg.trackId];
131
+ if (site === null || site.rendition.playlistUrl === undefined) {
132
+ return [{ ...state, pending }, []];
133
+ }
134
+ const text = new TextDecoder().decode(msg.bytes);
135
+ const media = parseMediaPlaylist(text, site.rendition.playlistUrl);
136
+ if (media.playlist === null) {
137
+ return [
138
+ { ...state, pending },
139
+ [
140
+ feed({
141
+ type: 'MANIFEST_FAILED',
142
+ error: media.error ?? {
143
+ category: 'manifest',
144
+ code: 'MANIFEST_PARSE_FAILED',
145
+ fatal: true,
146
+ recoverable: false,
147
+ },
148
+ }),
149
+ ],
150
+ ];
151
+ }
152
+ const merged = mergePlaylist(kernel.presentation, renditionId, media.playlist);
153
+ return [{ ...state, pending }, [loopBack(merged)]];
154
+ }
155
+ // After a manifest lands, a selection changes, or time moves, fetch any
156
+ // media playlist the current selection still lacks. Selection is its own
157
+ // trigger: on a paused or stalled element no TIME_UPDATE ever comes, and
158
+ // a track whose playlist never loads is one the element can never play.
159
+ if (msg.type === 'MANIFEST_LOADED' || msg.type === 'SELECT_TRACK' || msg.type === 'TIME_UPDATE') {
160
+ const needed = neededPlaylists(kernel).filter((rendition) => !Object.values(state.pending).includes(rendition.id));
161
+ if (needed.length === 0)
162
+ return [state, []];
163
+ const effects = [];
164
+ const pending = { ...state.pending };
165
+ for (const rendition of needed) {
166
+ const token = `${PLAYLIST_TOKEN}${rendition.id}`;
167
+ if (pending[token] !== undefined)
168
+ continue;
169
+ pending[token] = rendition.id;
170
+ effects.push({ kind: 'fetch', token, url: rendition.playlistUrl });
171
+ }
172
+ return [{ ...state, pending }, effects];
173
+ }
174
+ return [state, []];
175
+ };
176
+ /**
177
+ * The stage factory. `mattebox({ stages: [hlsCmaf()] })` is all a consumer
178
+ * needs for HLS-CMAF VOD.
179
+ */
180
+ export default function hlsCmaf() {
181
+ return {
182
+ name: 'hls-cmaf',
183
+ provides: ['hls-cmaf', ...MANIFEST_TYPES],
184
+ install(ctx) {
185
+ ctx.reduce('hls', reduceHls);
186
+ },
187
+ };
188
+ }
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocols/hls-cmaf/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Line-based m3u8 tokenizer. RFC 8216 §4. The attribute-list tokenizer is
3
+ * a real one: quoted values may contain commas, so splitting on ',' fails
4
+ * on real manifests.
5
+ */
6
+ export interface TagLine {
7
+ readonly kind: 'tag';
8
+ readonly name: string;
9
+ /** The raw text after the colon, untokenized. */
10
+ readonly value: string;
11
+ readonly attributes: Readonly<Record<string, string>>;
12
+ }
13
+ export interface UriLine {
14
+ readonly kind: 'uri';
15
+ readonly uri: string;
16
+ }
17
+ export type Line = TagLine | UriLine;
18
+ /**
19
+ * RFC 8216 §4.2: comma-separated KEY=VALUE pairs where a quoted-string
20
+ * value may contain commas. Walk characters; never split.
21
+ */
22
+ export declare function parseAttributeList(text: string): Record<string, string>;
23
+ /** Tokenizes a playlist into tag and URI lines. Comments and blanks drop. */
24
+ export declare function lex(text: string): readonly Line[];
25
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../src/protocols/hls-cmaf/lexer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC;AAarC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BvE;AAED,6EAA6E;AAC7E,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAqBjD"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Line-based m3u8 tokenizer. RFC 8216 §4. The attribute-list tokenizer is
3
+ * a real one: quoted values may contain commas, so splitting on ',' fails
4
+ * on real manifests.
5
+ */
6
+ /** Tags with attribute lists; everything else keeps its raw value. */
7
+ const ATTRIBUTE_TAGS = new Set([
8
+ 'EXT-X-STREAM-INF',
9
+ 'EXT-X-MEDIA',
10
+ 'EXT-X-MAP',
11
+ 'EXT-X-KEY',
12
+ 'EXT-X-SESSION-KEY',
13
+ 'EXT-X-I-FRAME-STREAM-INF',
14
+ 'EXT-X-CONTENT-STEERING',
15
+ ]);
16
+ /**
17
+ * RFC 8216 §4.2: comma-separated KEY=VALUE pairs where a quoted-string
18
+ * value may contain commas. Walk characters; never split.
19
+ */
20
+ export function parseAttributeList(text) {
21
+ const out = {};
22
+ let at = 0;
23
+ while (at < text.length) {
24
+ const eq = text.indexOf('=', at);
25
+ if (eq === -1)
26
+ break;
27
+ const key = text.slice(at, eq).trim();
28
+ at = eq + 1;
29
+ let value;
30
+ if (text[at] === '"') {
31
+ const close = text.indexOf('"', at + 1);
32
+ if (close === -1) {
33
+ value = text.slice(at + 1);
34
+ at = text.length;
35
+ }
36
+ else {
37
+ value = text.slice(at + 1, close);
38
+ at = close + 1;
39
+ }
40
+ }
41
+ else {
42
+ let end = text.indexOf(',', at);
43
+ if (end === -1)
44
+ end = text.length;
45
+ value = text.slice(at, end).trim();
46
+ at = end;
47
+ }
48
+ if (key !== '')
49
+ out[key] = value;
50
+ // Skip the separating comma, when present.
51
+ if (text[at] === ',')
52
+ at += 1;
53
+ }
54
+ return out;
55
+ }
56
+ /** Tokenizes a playlist into tag and URI lines. Comments and blanks drop. */
57
+ export function lex(text) {
58
+ const lines = [];
59
+ for (const raw of text.split(/\r?\n/)) {
60
+ const line = raw.trim();
61
+ if (line === '')
62
+ continue;
63
+ if (!line.startsWith('#')) {
64
+ lines.push({ kind: 'uri', uri: line });
65
+ continue;
66
+ }
67
+ if (!line.startsWith('#EXT'))
68
+ continue; // a comment
69
+ const colon = line.indexOf(':');
70
+ const name = colon === -1 ? line.slice(1) : line.slice(1, colon);
71
+ const value = colon === -1 ? '' : line.slice(colon + 1);
72
+ lines.push({
73
+ kind: 'tag',
74
+ name,
75
+ value,
76
+ attributes: ATTRIBUTE_TAGS.has(name) ? parseAttributeList(value) : {},
77
+ });
78
+ }
79
+ return lines;
80
+ }
81
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../src/protocols/hls-cmaf/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * m3u8 into the IR. Pure: no fetching, no state, no side effects. URLs are
3
+ * resolved here, against the playlist's own URL, and stored absolute;
4
+ * downstream code never does URL arithmetic.
5
+ *
6
+ * The HLS variant problem: EXT-X-STREAM-INF describes a bundle of one
7
+ * video rendition plus an audio group plus a subtitle group. The adapter
8
+ * decomposes variants into a video track with renditions, hoists
9
+ * EXT-X-MEDIA entries into their own tracks, and records the bundle in the
10
+ * coupling table as data. Generic descriptors only; the kernel routes.
11
+ */
12
+ import type { MatteboxError } from '../../types/error.js';
13
+ import type { Presentation, ProtectionInfo, Segment, SegmentRef } from '../../types/ir.js';
14
+ export interface ParseResult {
15
+ readonly presentation: Presentation | null;
16
+ readonly error: MatteboxError | null;
17
+ }
18
+ export interface MediaPlaylist {
19
+ readonly segments: readonly Segment[];
20
+ readonly init: SegmentRef | null;
21
+ readonly targetDuration: number;
22
+ readonly mediaSequence: number;
23
+ readonly endlist: boolean;
24
+ readonly playlistType: string | null;
25
+ readonly protection: ProtectionInfo | null;
26
+ /** From the first EXT-X-PROGRAM-DATE-TIME: `wallClock` epoch seconds at `presentationTime`. */
27
+ readonly dateAnchor?: {
28
+ readonly wallClock: number;
29
+ readonly presentationTime: number;
30
+ };
31
+ }
32
+ export interface MediaPlaylistResult {
33
+ readonly playlist: MediaPlaylist | null;
34
+ readonly error: MatteboxError | null;
35
+ }
36
+ /**
37
+ * Rewrites the legacy decimal AVC codec form some packagers still emit into
38
+ * the RFC 6381 hex form MSE demands. `avc1.66.30` (profile 66, level 30) is
39
+ * accepted by Firefox but rejected by Chrome's isTypeSupported, which is why a
40
+ * stream like Unified Streaming's plays audio but no video on one browser and
41
+ * nothing on the other. The constraint byte is not carried in this form, so it
42
+ * is emitted as zero; the real flags ride in the avcC the transmux writes.
43
+ */
44
+ export declare function normalizeAvcCodec(codec: string): string;
45
+ /** parse a media playlist body into segments. */
46
+ export declare function parseMediaPlaylist(text: string, baseUrl: string): MediaPlaylistResult;
47
+ /** parse either playlist form into a Presentation. Never throws. */
48
+ export declare function parse(text: string, baseUrl: string): ParseResult;
49
+ /**
50
+ * Immutably merges a fetched media playlist into the rendition that
51
+ * referenced it. Duration, liveness, init, and protection all come from
52
+ * the media playlist; the presentation learns them here. On a live refresh
53
+ * the new window is rebased onto the running timeline first, so segment start
54
+ * times stay absolute across reloads.
55
+ */
56
+ export declare function mergePlaylist(presentation: Presentation, renditionId: string, playlist: MediaPlaylist): Presentation;
57
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/protocols/hls-cmaf/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAGV,YAAY,EACZ,cAAc,EAEd,OAAO,EAGP,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAC3C,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAkED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAiBD,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAsHrF;AAiBD,oEAAoE;AACpE,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CA4PhE;AA+BD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,GACtB,YAAY,CAqEd"}