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,263 @@
1
+ import _objectSpread2 from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js";
2
+ import { segmentAtTime } from "./timeline.js";
3
+ import { bufferedEndFrom } from "./scheduler.js";
4
+ //#region src/kernel/rendition-select.ts
5
+ /** The lead time before which a `soon` switch never disturbs the buffer. */
6
+ const SOON_LEAD_SECONDS = 1.5;
7
+ const GAP_TOLERANCE = .25;
8
+ function matches(rendition, constraint) {
9
+ var _rendition$height, _rendition$width, _rendition$frameRate, _constraint$excludeId;
10
+ if (constraint.maxHeight !== void 0 && ((_rendition$height = rendition.height) !== null && _rendition$height !== void 0 ? _rendition$height : 0) > constraint.maxHeight) return false;
11
+ if (constraint.maxWidth !== void 0 && ((_rendition$width = rendition.width) !== null && _rendition$width !== void 0 ? _rendition$width : 0) > constraint.maxWidth) return false;
12
+ if (constraint.maxBitrate !== void 0 && rendition.bitrate > constraint.maxBitrate) return false;
13
+ if (constraint.minBitrate !== void 0 && rendition.bitrate < constraint.minBitrate) return false;
14
+ if (constraint.maxFrameRate !== void 0 && ((_rendition$frameRate = rendition.frameRate) !== null && _rendition$frameRate !== void 0 ? _rendition$frameRate : 0) > constraint.maxFrameRate) return false;
15
+ if ((_constraint$excludeId = constraint.excludeIds) === null || _constraint$excludeId === void 0 ? void 0 : _constraint$excludeId.includes(rendition.id)) return false;
16
+ if (constraint.codecs !== void 0) {
17
+ const codec = rendition.codecs;
18
+ if (codec === null || !constraint.codecs.some((allowed) => codec.startsWith(allowed))) return false;
19
+ }
20
+ if (constraint.filter !== void 0 && !constraint.filter(rendition)) return false;
21
+ return true;
22
+ }
23
+ function intersect(renditions, constraints) {
24
+ return renditions.filter((rendition) => constraints.every(([, c]) => matches(rendition, c)));
25
+ }
26
+ function closestByBitrate(allowed, target) {
27
+ let best = allowed[0];
28
+ for (const candidate of allowed) if (Math.abs(candidate.bitrate - target.bitrate) < Math.abs(best.bitrate - target.bitrate)) best = candidate;
29
+ return best;
30
+ }
31
+ function lowest(allowed) {
32
+ let best = allowed[0];
33
+ for (const candidate of allowed) if (candidate.bitrate < best.bitrate) best = candidate;
34
+ return best;
35
+ }
36
+ /** The strict arbitration order from docs/08. Never deviate; never return zero renditions. */
37
+ function arbitrate(ctx) {
38
+ const events = [];
39
+ if (ctx.renditions.length === 0) return {
40
+ result: {
41
+ allowed: [],
42
+ droppedConstraints: [],
43
+ selected: null,
44
+ reason: "lowest-permitted"
45
+ },
46
+ events
47
+ };
48
+ let active = [...ctx.constraints.entries()];
49
+ let allowed = intersect(ctx.renditions, active);
50
+ const dropped = [];
51
+ while (allowed.length === 0 && active.length > 0) {
52
+ const droppedEntry = active[active.length - 1];
53
+ dropped.push(droppedEntry[0]);
54
+ active = active.slice(0, -1);
55
+ allowed = intersect(ctx.renditions, active);
56
+ }
57
+ if (dropped.length > 0) events.push({
58
+ kind: "emit",
59
+ event: "quality:constraints-unsatisfiable",
60
+ payload: { dropped }
61
+ });
62
+ const coupled = allowed.filter((rendition) => {
63
+ const coupling = ctx.couplings.find((c) => c.renditionId === rendition.id);
64
+ if (coupling === void 0) return true;
65
+ for (const [contentType, requiredTrack] of Object.entries(coupling.requires)) {
66
+ var _ctx$availableGroups, _ctx$availableGroups2;
67
+ const activeTrack = ctx.activeTracks.get(contentType);
68
+ const matchesActive = activeTrack === requiredTrack || (activeTrack === null || activeTrack === void 0 ? void 0 : activeTrack.startsWith(`${requiredTrack}:`)) === true;
69
+ if (activeTrack === void 0 || matchesActive) continue;
70
+ if (!(((_ctx$availableGroups = ctx.availableGroups) === null || _ctx$availableGroups === void 0 ? void 0 : _ctx$availableGroups.has(`${contentType}:${requiredTrack}`)) === true || ((_ctx$availableGroups2 = ctx.availableGroups) === null || _ctx$availableGroups2 === void 0 ? void 0 : _ctx$availableGroups2.has(requiredTrack)) === true)) return false;
71
+ }
72
+ return true;
73
+ });
74
+ if (coupled.length > 0) allowed = coupled;
75
+ else events.push({
76
+ kind: "emit",
77
+ event: "quality:coupling-unsatisfiable",
78
+ payload: { active: Object.fromEntries(ctx.activeTracks) }
79
+ });
80
+ const allowedIds = allowed.map((r) => r.id);
81
+ if (ctx.pinned !== null) {
82
+ if (allowedIds.includes(ctx.pinned)) return {
83
+ result: {
84
+ allowed: allowedIds,
85
+ droppedConstraints: dropped,
86
+ selected: ctx.pinned,
87
+ reason: "pin"
88
+ },
89
+ events
90
+ };
91
+ const target = ctx.renditions.find((r) => r.id === ctx.pinned);
92
+ if (target !== void 0) {
93
+ const clamped = closestByBitrate(allowed, target);
94
+ events.push({
95
+ kind: "emit",
96
+ event: "quality:pin-unsatisfiable",
97
+ payload: {
98
+ pinned: ctx.pinned,
99
+ resolved: clamped.id
100
+ }
101
+ });
102
+ return {
103
+ result: {
104
+ allowed: allowedIds,
105
+ droppedConstraints: dropped,
106
+ selected: clamped.id,
107
+ reason: "pin"
108
+ },
109
+ events
110
+ };
111
+ }
112
+ }
113
+ if (ctx.abr != null) {
114
+ const choice = ctx.abr.choose(allowed, ctx.telemetry);
115
+ if (allowedIds.includes(choice)) return {
116
+ result: {
117
+ allowed: allowedIds,
118
+ droppedConstraints: dropped,
119
+ selected: choice,
120
+ reason: "abr"
121
+ },
122
+ events
123
+ };
124
+ events.push({
125
+ kind: "emit",
126
+ event: "quality:abr-invalid",
127
+ payload: {
128
+ choice,
129
+ allowed: allowedIds
130
+ }
131
+ });
132
+ }
133
+ if (ctx.current !== null && allowedIds.includes(ctx.current)) return {
134
+ result: {
135
+ allowed: allowedIds,
136
+ droppedConstraints: dropped,
137
+ selected: ctx.current,
138
+ reason: "unchanged"
139
+ },
140
+ events
141
+ };
142
+ return {
143
+ result: {
144
+ allowed: allowedIds,
145
+ droppedConstraints: dropped,
146
+ selected: lowest(allowed).id,
147
+ reason: "lowest-permitted"
148
+ },
149
+ events
150
+ };
151
+ }
152
+ function createArbiter() {
153
+ let lastVersion = NaN;
154
+ let lastOutcome = null;
155
+ let lastPlaying = null;
156
+ return {
157
+ run(ctx, version) {
158
+ if (lastOutcome !== null && version === lastVersion) return _objectSpread2(_objectSpread2({}, lastOutcome), {}, { computed: false });
159
+ lastOutcome = arbitrate(ctx);
160
+ lastVersion = version;
161
+ lastPlaying = null;
162
+ return _objectSpread2(_objectSpread2({}, lastOutcome), {}, { computed: true });
163
+ },
164
+ playingAt(log, currentTime) {
165
+ var _found, _found$rendition;
166
+ if (lastPlaying !== null && currentTime >= lastPlaying.start && currentTime < lastPlaying.end) return lastPlaying.rendition;
167
+ let found = null;
168
+ for (const [range, renditionId] of log) if (range.start <= currentTime && currentTime < range.end) found = {
169
+ rendition: renditionId,
170
+ start: range.start,
171
+ end: range.end
172
+ };
173
+ lastPlaying = (_found = found) !== null && _found !== void 0 ? _found : {
174
+ rendition: null,
175
+ start: currentTime,
176
+ end: currentTime
177
+ };
178
+ return (_found$rendition = found === null || found === void 0 ? void 0 : found.rendition) !== null && _found$rendition !== void 0 ? _found$rendition : null;
179
+ }
180
+ };
181
+ }
182
+ /** The four-character sample entry a codec string names, before any profile suffix. */
183
+ function codecFamily(codecs) {
184
+ var _codecs$split$0$trim, _codecs$split$;
185
+ if (codecs === null) return null;
186
+ const first = (_codecs$split$0$trim = (_codecs$split$ = codecs.split(",")[0]) === null || _codecs$split$ === void 0 ? void 0 : _codecs$split$.trim()) !== null && _codecs$split$0$trim !== void 0 ? _codecs$split$0$trim : "";
187
+ const dot = first.indexOf(".");
188
+ return dot === -1 ? first : first.slice(0, dot);
189
+ }
190
+ /**
191
+ * The kernel's default answer to entanglement #2. codec-switch refines it
192
+ * with real compatibility knowledge (Stage 15); until then: identical codec
193
+ * strings are seamless, a profile or level change inside one family is a
194
+ * changeType-class switch (every ladder rung carries its own profile
195
+ * string, so abr could never move under an identity rule), and a family
196
+ * change reloads.
197
+ */
198
+ function canSwitchTo(current, target) {
199
+ if (current === null) return "seamless";
200
+ if (current.codecs !== null && current.codecs === target.codecs) return "seamless";
201
+ const family = codecFamily(current.codecs);
202
+ if (family !== null && family === codecFamily(target.codecs)) return "changeType";
203
+ return "reload";
204
+ }
205
+ /**
206
+ * The apply strategies from docs/08. `next` costs nothing and waits out
207
+ * the buffer. `soon` flushes from the next segment boundary after
208
+ * currentTime plus a lead, so the switch is usually invisible. `now` pays
209
+ * a visible stall for immediacy.
210
+ *
211
+ * The plan never fetches. Flushing shrinks the buffered ranges, the
212
+ * updateend fact drives the scheduling loop, and the loop refills from the
213
+ * flush point with the init-before-media ordering a direct fetch here
214
+ * would bypass. A pin to a rendition whose playlist is not merged yet
215
+ * flushes the same way and refills once the playlist lands.
216
+ */
217
+ function planPinApply(input) {
218
+ if (input.strategy === "next") return {
219
+ effects: [],
220
+ requests: [],
221
+ tokenSeq: input.tokenSeq
222
+ };
223
+ const effects = input.inflightTokens.map((token) => ({
224
+ kind: "abort",
225
+ token
226
+ }));
227
+ if (input.strategy === "soon") {
228
+ const bufferedEnd = bufferedEndFrom(input.ranges, input.currentTime, GAP_TOLERANCE);
229
+ const lead = input.currentTime + SOON_LEAD_SECONDS;
230
+ if (bufferedEnd > lead) {
231
+ const boundarySegment = segmentAtTime(input.rendition.segments, lead, input.period.start);
232
+ const safePoint = boundarySegment === null ? lead : boundarySegment.start > lead ? boundarySegment.start : boundarySegment.start + boundarySegment.duration;
233
+ effects.push({
234
+ kind: "remove",
235
+ sbId: input.sbId,
236
+ start: safePoint,
237
+ end: Infinity
238
+ });
239
+ }
240
+ return {
241
+ effects,
242
+ requests: [],
243
+ tokenSeq: input.tokenSeq
244
+ };
245
+ }
246
+ effects.push({
247
+ kind: "remove",
248
+ sbId: input.sbId,
249
+ start: input.currentTime,
250
+ end: Infinity
251
+ });
252
+ effects.push({
253
+ kind: "seekElement",
254
+ to: input.currentTime
255
+ });
256
+ return {
257
+ effects,
258
+ requests: [],
259
+ tokenSeq: input.tokenSeq
260
+ };
261
+ }
262
+ //#endregion
263
+ export { arbitrate, canSwitchTo, codecFamily, createArbiter, planPinApply };
@@ -0,0 +1,82 @@
1
+ import _objectSpread2 from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js";
2
+ import { buildEpochs, epochForSeq, segmentAtTime, timestampOffsetFor } from "./timeline.js";
3
+ //#region src/kernel/scheduler.ts
4
+ const DEFAULT_GAP_TOLERANCE = .25;
5
+ /**
6
+ * The end of continuous buffer from `time`, merging gaps below the
7
+ * tolerance. Returns `time` itself when nothing is buffered there.
8
+ */
9
+ function bufferedEndFrom(ranges, time, tolerance) {
10
+ let end = time;
11
+ let advanced = true;
12
+ while (advanced) {
13
+ advanced = false;
14
+ for (const range of ranges) if (range.start <= end + tolerance && range.end > end) {
15
+ end = range.end;
16
+ advanced = true;
17
+ }
18
+ }
19
+ return end;
20
+ }
21
+ /** The buffered range holding the segment's midpoint, the sign it was appended, or null. */
22
+ function coveringMidpoint(ranges, segment) {
23
+ var _ranges$find;
24
+ const mid = segment.start + segment.duration / 2;
25
+ return (_ranges$find = ranges.find((range) => range.start <= mid && range.end > mid)) !== null && _ranges$find !== void 0 ? _ranges$find : null;
26
+ }
27
+ function schedule(input) {
28
+ var _input$gapToleranceSe;
29
+ const tolerance = (_input$gapToleranceSe = input.gapToleranceSeconds) !== null && _input$gapToleranceSe !== void 0 ? _input$gapToleranceSe : DEFAULT_GAP_TOLERANCE;
30
+ const effects = [];
31
+ const requests = [];
32
+ let tokenSeq = input.tokenSeq;
33
+ for (const track of input.tracks) {
34
+ if (track.inflight.length > 0) continue;
35
+ const bufferedEnd = bufferedEndFrom(track.ranges, input.currentTime, tolerance);
36
+ if (bufferedEnd - input.currentTime >= input.bufferGoal) continue;
37
+ let target = Math.max(bufferedEnd, input.currentTime);
38
+ if (input.liveWindow != null && target < input.liveWindow.start) target = input.liveWindow.start;
39
+ let segment = segmentAtTime(track.rendition.segments, target + tolerance, track.period.start);
40
+ let frontier = bufferedEnd;
41
+ while (segment !== null) {
42
+ const covering = coveringMidpoint(track.ranges, segment);
43
+ if (covering === null) break;
44
+ frontier = Math.max(frontier, covering.end);
45
+ if (frontier - input.currentTime >= input.bufferGoal) {
46
+ segment = null;
47
+ break;
48
+ }
49
+ segment = segmentAtTime(track.rendition.segments, segment.start + segment.duration + tolerance, track.period.start);
50
+ }
51
+ if (segment === null) continue;
52
+ if (input.liveWindow != null && segment.start + segment.duration > input.liveWindow.end) continue;
53
+ const epochs = buildEpochs([{
54
+ period: track.period,
55
+ rendition: track.rendition
56
+ }]);
57
+ const epoch = epochForSeq(epochs, segment.seq);
58
+ tokenSeq += 1;
59
+ const token = `t${tokenSeq}:${track.trackId}:${segment.seq}`;
60
+ effects.push(_objectSpread2({
61
+ kind: "fetch",
62
+ token,
63
+ url: segment.url
64
+ }, segment.byteRange !== void 0 ? { range: segment.byteRange } : {}));
65
+ requests.push(_objectSpread2(_objectSpread2({
66
+ token,
67
+ trackId: track.trackId,
68
+ seq: segment.seq,
69
+ url: segment.url,
70
+ renditionId: track.rendition.id,
71
+ segmentStart: segment.start,
72
+ segmentDuration: segment.duration
73
+ }, track.sbId !== void 0 ? { sbId: track.sbId } : {}), input.mediaTimeNormalized === true ? { timestampOffset: 0 } : epoch !== null ? { timestampOffset: timestampOffsetFor(epoch) } : {}));
74
+ }
75
+ return {
76
+ effects,
77
+ requests,
78
+ tokenSeq
79
+ };
80
+ }
81
+ //#endregion
82
+ export { bufferedEndFrom, schedule };
@@ -0,0 +1,7 @@
1
+ import { createCueSink } from "./text-track-sink.js";
2
+ //#region src/kernel/sinks/metadata-sink.ts
3
+ function createMetadataSink(deps) {
4
+ return createCueSink("metadata", "metadata", deps);
5
+ }
6
+ //#endregion
7
+ export { createMetadataSink };
@@ -0,0 +1,31 @@
1
+ //#region src/kernel/sinks/mse-sink.ts
2
+ /** The sbId naming convention: one SourceBuffer per media content type. */
3
+ function sbIdFor(contentType) {
4
+ return `sb:${contentType}`;
5
+ }
6
+ function createMseSink(contentType, deps) {
7
+ const sbId = sbIdFor(contentType);
8
+ return {
9
+ contentType,
10
+ accept(_trackId, data) {
11
+ return [{
12
+ kind: "append",
13
+ sbId,
14
+ data
15
+ }];
16
+ },
17
+ ranges(_trackId) {
18
+ return deps.buffered(sbId);
19
+ },
20
+ clear(_trackId, start, end) {
21
+ return [{
22
+ kind: "remove",
23
+ sbId,
24
+ start,
25
+ end
26
+ }];
27
+ }
28
+ };
29
+ }
30
+ //#endregion
31
+ export { createMseSink, sbIdFor };
@@ -0,0 +1,167 @@
1
+ //#region src/kernel/sinks/text-track-sink.ts
2
+ /** Applies the WebVTT settings string's known keys onto a native cue. */
3
+ function applySettings(cue, settings) {
4
+ if (settings === void 0) return;
5
+ for (const part of settings.split(/\s+/)) {
6
+ const [key, value] = part.split(":");
7
+ if (value === void 0) continue;
8
+ const percent = value.endsWith("%") ? Number(value.slice(0, -1)) : null;
9
+ switch (key) {
10
+ case "line":
11
+ cue.line = percent !== null && percent !== void 0 ? percent : Number(value);
12
+ if (percent !== null) cue.snapToLines = false;
13
+ break;
14
+ case "position":
15
+ if (percent !== null) cue.position = percent;
16
+ break;
17
+ case "size":
18
+ if (percent !== null) cue.size = percent;
19
+ break;
20
+ case "align":
21
+ cue.align = value;
22
+ break;
23
+ case "vertical": cue.vertical = value;
24
+ }
25
+ }
26
+ }
27
+ function mergeRange(coverage, added) {
28
+ const merged = [];
29
+ let pending = added;
30
+ for (const range of [...coverage].sort((a, b) => a.start - b.start)) if (range.end < pending.start || range.start > pending.end) merged.push(range);
31
+ else pending = {
32
+ start: Math.min(range.start, pending.start),
33
+ end: Math.max(range.end, pending.end)
34
+ };
35
+ merged.push(pending);
36
+ return merged.sort((a, b) => a.start - b.start);
37
+ }
38
+ function createCueSink(contentType, kind, deps) {
39
+ const tracks = /* @__PURE__ */ new Map();
40
+ /**
41
+ * A native track for the id. The element has no removeTextTrack, so a
42
+ * previous attach on the same element (a rebuild, an element swap back)
43
+ * leaves its tracks behind; one with our kind and label is adopted and
44
+ * emptied rather than duplicated in the browser's caption menu.
45
+ */
46
+ /** Empties a native track. `cues` reads null while disabled; hidden makes them removable. */
47
+ function empty(textTrack) {
48
+ textTrack.mode = "hidden";
49
+ const { cues } = textTrack;
50
+ if (cues !== null) for (let i = cues.length - 1; i >= 0; i -= 1) {
51
+ const cue = cues[i];
52
+ if (cue !== void 0) textTrack.removeCue(cue);
53
+ }
54
+ }
55
+ function adopt(label) {
56
+ for (const existing of deps.element.textTracks) {
57
+ if (existing.kind !== kind || existing.label !== label) continue;
58
+ empty(existing);
59
+ return existing;
60
+ }
61
+ return deps.element.addTextTrack(kind, label);
62
+ }
63
+ function retire(trackId) {
64
+ const entry = tracks.get(trackId);
65
+ if (entry === void 0) return;
66
+ empty(entry.textTrack);
67
+ entry.textTrack.mode = "disabled";
68
+ tracks.delete(trackId);
69
+ }
70
+ function ensure(trackId) {
71
+ let entry = tracks.get(trackId);
72
+ if (entry === void 0) {
73
+ var _deps$label;
74
+ const textTrack = adopt(`${(_deps$label = deps.label) !== null && _deps$label !== void 0 ? _deps$label : "mattebox"}:${trackId}`);
75
+ textTrack.mode = "hidden";
76
+ entry = {
77
+ textTrack,
78
+ coverage: [],
79
+ ids: /* @__PURE__ */ new Set()
80
+ };
81
+ tracks.set(trackId, entry);
82
+ }
83
+ return entry;
84
+ }
85
+ return {
86
+ contentType,
87
+ accept(trackId, data, meta) {
88
+ const entry = ensure(trackId);
89
+ if (!meta.isInit) entry.coverage = mergeRange(entry.coverage, {
90
+ start: meta.start,
91
+ end: meta.start + meta.duration
92
+ });
93
+ if (deps.parse === void 0) return [];
94
+ const cues = deps.parse(new Uint8Array(data), meta);
95
+ if (cues.length === 0) return [];
96
+ return [{
97
+ kind: "emitCues",
98
+ trackId,
99
+ cues
100
+ }];
101
+ },
102
+ ranges(trackId) {
103
+ var _tracks$get$coverage, _tracks$get;
104
+ return (_tracks$get$coverage = (_tracks$get = tracks.get(trackId)) === null || _tracks$get === void 0 ? void 0 : _tracks$get.coverage) !== null && _tracks$get$coverage !== void 0 ? _tracks$get$coverage : [];
105
+ },
106
+ clear(trackId, start, end) {
107
+ const entry = tracks.get(trackId);
108
+ if (entry === void 0) return [];
109
+ const { cues } = entry.textTrack;
110
+ if (cues !== null) for (let i = cues.length - 1; i >= 0; i -= 1) {
111
+ const cue = cues[i];
112
+ if (cue !== void 0 && cue.startTime >= start && cue.endTime <= end) {
113
+ entry.textTrack.removeCue(cue);
114
+ if (cue.id !== "") entry.ids.delete(cue.id);
115
+ }
116
+ }
117
+ entry.coverage = entry.coverage.flatMap((range) => {
118
+ if (range.end <= start || range.start >= end) return [range];
119
+ const kept = [];
120
+ if (range.start < start) kept.push({
121
+ start: range.start,
122
+ end: start
123
+ });
124
+ if (range.end > end) kept.push({
125
+ start: end,
126
+ end: range.end
127
+ });
128
+ return kept;
129
+ });
130
+ return [];
131
+ },
132
+ handleEmitCues(trackId, cues) {
133
+ const entry = ensure(trackId);
134
+ for (const cue of cues) {
135
+ var _cue$text;
136
+ if (cue.id !== void 0 && entry.ids.has(cue.id)) continue;
137
+ const vtt = new VTTCue(cue.start, cue.end, (_cue$text = cue.text) !== null && _cue$text !== void 0 ? _cue$text : "");
138
+ if (cue.id !== void 0) {
139
+ vtt.id = cue.id;
140
+ entry.ids.add(cue.id);
141
+ }
142
+ applySettings(vtt, cue.settings);
143
+ entry.textTrack.addCue(vtt);
144
+ }
145
+ },
146
+ declare(trackId) {
147
+ return ensure(trackId).textTrack;
148
+ },
149
+ nativeTrack(trackId) {
150
+ var _tracks$get$textTrack, _tracks$get2;
151
+ return (_tracks$get$textTrack = (_tracks$get2 = tracks.get(trackId)) === null || _tracks$get2 === void 0 ? void 0 : _tracks$get2.textTrack) !== null && _tracks$get$textTrack !== void 0 ? _tracks$get$textTrack : null;
152
+ },
153
+ trackIds() {
154
+ return [...tracks.keys()];
155
+ },
156
+ retire,
157
+ dispose() {
158
+ for (const trackId of [...tracks.keys()]) retire(trackId);
159
+ }
160
+ };
161
+ }
162
+ /** Subtitles and captions to a native TextTrack. */
163
+ function createTextTrackSink(deps) {
164
+ return createCueSink("text", "subtitles", deps);
165
+ }
166
+ //#endregion
167
+ export { createCueSink, createTextTrackSink };
@@ -0,0 +1,127 @@
1
+ //#region src/kernel/timeline.ts
2
+ function isIndexed(addressing) {
3
+ return !Array.isArray(addressing) && addressing.kind === "indexed";
4
+ }
5
+ /**
6
+ * An on-demand addressing whose index box has not been fetched yet: it
7
+ * carries no resolvable segments. Once the adapter parses the index it swaps
8
+ * this for an explicit array, so every consumer treats it as empty until then.
9
+ */
10
+ function isUnresolved(addressing) {
11
+ return !Array.isArray(addressing) && addressing.kind === "sidx";
12
+ }
13
+ /**
14
+ * Epochs for one rendition timeline across periods. A period boundary opens
15
+ * an epoch; inside a period, every segment flagged `discontinuity` opens
16
+ * another. One code path for both.
17
+ */
18
+ function buildEpochs(parts) {
19
+ const epochs = [];
20
+ for (const { period, rendition } of parts) {
21
+ const addressing = rendition.segments;
22
+ if (isIndexed(addressing)) {
23
+ var _addressing$presentat;
24
+ const pto = ((_addressing$presentat = addressing.presentationTimeOffset) !== null && _addressing$presentat !== void 0 ? _addressing$presentat : 0) / addressing.timescale;
25
+ epochs.push({
26
+ periodId: period.id,
27
+ firstSeq: addressing.startSeq,
28
+ presentationStart: period.start,
29
+ mediaStart: pto
30
+ });
31
+ continue;
32
+ }
33
+ if (isUnresolved(addressing)) continue;
34
+ let open = false;
35
+ for (const segment of addressing) if (!open || segment.discontinuity === true) {
36
+ const mediaStart = open ? 0 : segment.start - period.start;
37
+ epochs.push({
38
+ periodId: period.id,
39
+ firstSeq: segment.seq,
40
+ presentationStart: segment.start,
41
+ mediaStart
42
+ });
43
+ open = true;
44
+ }
45
+ }
46
+ return epochs;
47
+ }
48
+ /** The epoch a sequence number belongs to, or null before the first epoch. */
49
+ function epochForSeq(epochs, seq) {
50
+ let match = null;
51
+ for (const epoch of epochs) if (epoch.firstSeq <= seq) match = epoch;
52
+ return match;
53
+ }
54
+ /** The timestampOffset an append from this epoch requires. */
55
+ function timestampOffsetFor(epoch) {
56
+ return epoch.presentationStart - epoch.mediaStart;
57
+ }
58
+ /** Materializes one segment from an indexed form. Null outside the window. */
59
+ function segmentAt(addressing, seq, periodStart = 0) {
60
+ var _addressing$presentat2;
61
+ if (!isIndexed(addressing)) {
62
+ var _find;
63
+ if (isUnresolved(addressing)) return null;
64
+ return (_find = addressing.find((segment) => segment.seq === seq)) !== null && _find !== void 0 ? _find : null;
65
+ }
66
+ if (seq < addressing.startSeq) return null;
67
+ if (addressing.endSeq !== null && seq > addressing.endSeq) return null;
68
+ const { timescale } = addressing;
69
+ const pto = (_addressing$presentat2 = addressing.presentationTimeOffset) !== null && _addressing$presentat2 !== void 0 ? _addressing$presentat2 : 0;
70
+ let startUnits;
71
+ let durationUnits;
72
+ if (addressing.timeline !== null) {
73
+ let cursor = addressing.startSeq;
74
+ let found = null;
75
+ for (const run of addressing.timeline) {
76
+ if (seq < cursor + run.count) {
77
+ found = {
78
+ start: run.start + (seq - cursor) * run.duration,
79
+ duration: run.duration
80
+ };
81
+ break;
82
+ }
83
+ cursor += run.count;
84
+ }
85
+ if (found === null) return null;
86
+ startUnits = found.start;
87
+ durationUnits = found.duration;
88
+ } else if (addressing.segmentDuration !== null) {
89
+ durationUnits = addressing.segmentDuration;
90
+ startUnits = pto + (seq - addressing.startSeq) * durationUnits;
91
+ } else return null;
92
+ const url = addressing.urlTemplate.replace(/\$(Number|Time)(?:%0(\d+)d)?\$/g, (_, name, width) => {
93
+ const text = String(name === "Number" ? seq : startUnits);
94
+ return width === void 0 ? text : text.padStart(Number(width), "0");
95
+ }).replaceAll("$$", "$");
96
+ return {
97
+ seq,
98
+ start: periodStart + (startUnits - pto) / timescale,
99
+ duration: durationUnits / timescale,
100
+ url
101
+ };
102
+ }
103
+ /** The first segment whose interval contains or follows `time`, or null past the end. */
104
+ function segmentAtTime(addressing, time, periodStart = 0) {
105
+ if (!isIndexed(addressing)) {
106
+ if (isUnresolved(addressing)) return null;
107
+ for (const segment of addressing) if (segment.start + segment.duration > time) return segment;
108
+ return null;
109
+ }
110
+ if (addressing.timeline === null && addressing.segmentDuration !== null) {
111
+ const dur = addressing.segmentDuration / addressing.timescale;
112
+ const relative = Math.max(0, time - periodStart);
113
+ const seq = addressing.startSeq + Math.floor(relative / dur);
114
+ return segmentAt(addressing, Math.max(seq, addressing.startSeq), periodStart);
115
+ }
116
+ let seq = addressing.startSeq;
117
+ const last = addressing.endSeq;
118
+ while (last === null || seq <= last) {
119
+ const segment = segmentAt(addressing, seq, periodStart);
120
+ if (segment === null) return null;
121
+ if (segment.start + segment.duration > time) return segment;
122
+ seq += 1;
123
+ }
124
+ return null;
125
+ }
126
+ //#endregion
127
+ export { buildEpochs, epochForSeq, segmentAt, segmentAtTime, timestampOffsetFor };