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,62 @@
1
+ /**
2
+ * MediaSource lifecycle and the effect handlers that touch it. This is the
3
+ * boundary module: facts about the media pipeline enter the loop here, and
4
+ * buffer effects are executed here through per-buffer append queues.
5
+ *
6
+ * ManagedMediaSource is preferred where available (Safari): the OS can
7
+ * reclaim buffer under memory pressure, and some iOS paths require it.
8
+ * The blob-URL fallback revokes in the sourceopen handler, not on detach;
9
+ * revoking on detach is the classic leak.
10
+ */
11
+ import type { SbId } from '../types/kernel.js';
12
+ import type { Fact, SegmentMeta } from '../types/messages.js';
13
+ import type { EffectRunner } from './effects.js';
14
+ export interface MseControllerOptions {
15
+ readonly absorb: (fact: Fact) => void;
16
+ /** 'auto' prefers srcObject; 'object-url' forces the blob fallback (used by tests). */
17
+ readonly attachMode?: 'auto' | 'object-url';
18
+ /** Feature-detects by default; false forces plain MediaSource even on Safari. */
19
+ readonly preferManaged?: boolean;
20
+ readonly backBufferSeconds?: number;
21
+ readonly maxEvictionPasses?: number;
22
+ /**
23
+ * Reads a full type from a segment's bytes. When present, a
24
+ * createSourceBuffer effect whose type names no codecs (a bare media
25
+ * playlist) is held until the first append, and the buffer opens with the
26
+ * type read from those bytes. When it reads nothing, or when absent, the
27
+ * bare type is tried as given: some browsers accept it.
28
+ */
29
+ readonly inferType?: (bytes: Uint8Array) => string | null;
30
+ /**
31
+ * Rewrites segment bytes before they reach the SourceBuffer, for the
32
+ * transform pipeline (ts-transmux, packed-audio). Absent in every CMAF
33
+ * composition, so the direct-enqueue path below is byte-for-byte what it
34
+ * always was. When present, appends are serialized per buffer through a
35
+ * promise chain so an asynchronous transform (a Worker round-trip) never
36
+ * reorders segments.
37
+ */
38
+ readonly appendTransform?: (data: Uint8Array, meta: SegmentMeta) => Uint8Array | Promise<Uint8Array>;
39
+ }
40
+ export interface MseDiagnostics {
41
+ readonly liveObjectUrls: number;
42
+ readonly liveListeners: number;
43
+ readonly sourceBuffers: number;
44
+ }
45
+ export interface MseController {
46
+ /** Docs-09 attach sequence. Throws when the element is already occupied. */
47
+ attach(el: HTMLMediaElement): void;
48
+ /** Docs-09 detach sequence. Idempotent and safe from an error state. */
49
+ detach(): void;
50
+ registerHandlers(runner: EffectRunner): void;
51
+ isManaged(): boolean;
52
+ readyState(): ReadyState | 'detached';
53
+ buffered(sbId: SbId): ReadonlyArray<{
54
+ start: number;
55
+ end: number;
56
+ }>;
57
+ diagnostics(): MseDiagnostics;
58
+ }
59
+ type ReadyState = MediaSource['readyState'];
60
+ export declare function createMseController(options: MseControllerOptions): MseController;
61
+ export {};
62
+ //# sourceMappingURL=mse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mse.d.ts","sourceRoot":"","sources":["../../src/kernel/mse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA2BjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC5C,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,WAAW,KACd,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,wEAAwE;IACxE,MAAM,IAAI,IAAI,CAAC;IACf,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,SAAS,IAAI,OAAO,CAAC;IACrB,UAAU,IAAI,UAAU,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,WAAW,IAAI,cAAc,CAAC;CAC/B;AAED,KAAK,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAO5C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0ehF"}
@@ -0,0 +1,490 @@
1
+ import { createAppendQueue } from './append-queue.js';
2
+ import { createEvictor } from './evictor.js';
3
+ function managedMediaSource() {
4
+ return globalThis.ManagedMediaSource;
5
+ }
6
+ // The boundary meta a media transform receives. A transmux step reads the
7
+ // content type (which the sbId names) to know which stream it is unwrapping,
8
+ // and the presentation start to align its baseMediaDecodeTime to the
9
+ // playlist timeline. Only referenced on the appendTransform path.
10
+ function appendMeta(sbId, start, renditionId, seq) {
11
+ const contentType = sbId === 'sb:audio' ? 'audio' : 'video';
12
+ return { trackId: sbId, renditionId, contentType, seq, start, duration: 0, isInit: seq < 0 };
13
+ }
14
+ /** Whether a SourceBuffer type names its codecs; a bare `video/mp4` does not. */
15
+ function declaresCodecs(type) {
16
+ return /codecs\s*=/i.test(type);
17
+ }
18
+ export function createMseController(options) {
19
+ const { absorb } = options;
20
+ const evictor = createEvictor({
21
+ ...(options.backBufferSeconds !== undefined
22
+ ? { backBufferSeconds: options.backBufferSeconds }
23
+ : {}),
24
+ ...(options.maxEvictionPasses !== undefined ? { maxPasses: options.maxEvictionPasses } : {}),
25
+ });
26
+ let element = null;
27
+ let mediaSource = null;
28
+ let managed = false;
29
+ const buffers = new Map();
30
+ // Per-buffer append ordering when a transform pipeline is loaded.
31
+ const appendChains = new Map();
32
+ /** Buffers requested without codecs, waiting for their first bytes to be typed. */
33
+ const deferred = new Map();
34
+ let objectUrl = null;
35
+ let liveObjectUrls = 0;
36
+ let pendingEndOfStream = null;
37
+ let pendingDuration = null;
38
+ let pendingLiveRange = null;
39
+ let unobserveManaged = null;
40
+ // Every listener goes through these so detach can prove it removed them
41
+ // all; "the player leaks listeners per navigation" starts with one stray
42
+ // addEventListener.
43
+ const tracked = [];
44
+ function listen(target, type, fn) {
45
+ target.addEventListener(type, fn);
46
+ tracked.push({ target, type, fn });
47
+ }
48
+ function unlistenAll() {
49
+ for (const { target, type, fn } of tracked) {
50
+ target.removeEventListener(type, fn);
51
+ }
52
+ tracked.length = 0;
53
+ }
54
+ function currentTime() {
55
+ return element?.currentTime ?? 0;
56
+ }
57
+ function readyState() {
58
+ return mediaSource?.readyState ?? 'detached';
59
+ }
60
+ function allIdle() {
61
+ for (const { queue } of buffers.values()) {
62
+ if (!queue.idle())
63
+ return false;
64
+ }
65
+ return true;
66
+ }
67
+ /** endOfStream and duration assignment both throw while any buffer updates; run them at quiet points. */
68
+ function runDeferredGlobalOps() {
69
+ if (mediaSource === null || mediaSource.readyState !== 'open' || !allIdle())
70
+ return;
71
+ if (pendingDuration !== null) {
72
+ const seconds = pendingDuration;
73
+ pendingDuration = null;
74
+ try {
75
+ mediaSource.duration = seconds;
76
+ }
77
+ catch {
78
+ // The source closed between the check and the assignment; absorbed
79
+ // by the sourceclose fact.
80
+ }
81
+ }
82
+ if (pendingLiveRange !== null) {
83
+ const { start, end } = pendingLiveRange;
84
+ pendingLiveRange = null;
85
+ // Only meaningful with an infinite duration; the seekable attribute
86
+ // then reports this window instead of [0, buffered end], so native
87
+ // controls scrub the DVR span and clamp seeks into it.
88
+ const source = mediaSource;
89
+ if (typeof source.setLiveSeekableRange === 'function' && end > start && start >= 0) {
90
+ try {
91
+ source.setLiveSeekableRange(start, end);
92
+ }
93
+ catch {
94
+ // Closed between the check and the call, or a browser without
95
+ // the method behind a feature flag; the next window retries.
96
+ }
97
+ }
98
+ }
99
+ if (pendingEndOfStream !== null) {
100
+ const reason = pendingEndOfStream;
101
+ pendingEndOfStream = null;
102
+ try {
103
+ if (reason === 'none') {
104
+ mediaSource.endOfStream();
105
+ }
106
+ else {
107
+ mediaSource.endOfStream(reason);
108
+ }
109
+ }
110
+ catch {
111
+ // Same race as above.
112
+ }
113
+ }
114
+ }
115
+ function onQuota(sbId, attempt) {
116
+ absorb({ type: 'QUOTA_EXCEEDED', sbId });
117
+ const entry = buffers.get(sbId);
118
+ if (entry === undefined)
119
+ return;
120
+ // A pass that frees nothing (playhead at 0, no back-buffer yet) would
121
+ // leave the parked append waiting forever; skip forward to the first
122
+ // pass with something to remove.
123
+ let effective = attempt;
124
+ let plan = evictor.plan(entry.sb, currentTime(), effective);
125
+ while (plan !== null && plan.length === 0) {
126
+ effective += 1;
127
+ plan = evictor.plan(entry.sb, currentTime(), effective);
128
+ }
129
+ if (plan === null) {
130
+ // Escalation exhausted. Surface a fatal error instead of looping.
131
+ entry.queue.abort();
132
+ absorb({
133
+ type: 'SOURCEBUFFER_ERROR',
134
+ sbId,
135
+ error: {
136
+ category: 'media',
137
+ code: 'MEDIA_QUOTA_EXCEEDED',
138
+ fatal: true,
139
+ recoverable: false,
140
+ context: { attempts: attempt },
141
+ },
142
+ });
143
+ return;
144
+ }
145
+ // Front of the queue, ahead of the failed append, in plan order.
146
+ for (let i = plan.length - 1; i >= 0; i -= 1) {
147
+ const range = plan[i];
148
+ if (range === undefined)
149
+ continue;
150
+ entry.queue.enqueueFront({ op: 'remove', start: range.start, end: range.end });
151
+ }
152
+ }
153
+ function createQueue(sbId, sb) {
154
+ return createAppendQueue(sbId, sb, {
155
+ absorb,
156
+ onQuota,
157
+ onIdle: () => runDeferredGlobalOps(),
158
+ });
159
+ }
160
+ function trimAllBackBuffers() {
161
+ // ManagedMediaSource said streaming can stop; give memory back rather
162
+ // than waiting for quota pressure.
163
+ for (const [, entry] of buffers) {
164
+ const plan = evictor.plan(entry.sb, currentTime(), 1);
165
+ if (plan === null)
166
+ continue;
167
+ for (const range of plan) {
168
+ entry.queue.enqueue({ op: 'remove', start: range.start, end: range.end });
169
+ }
170
+ }
171
+ }
172
+ function attach(el) {
173
+ if (element !== null) {
174
+ throw Object.assign(new Error('already attached'), {
175
+ category: 'config',
176
+ code: 'CONFIG_ELEMENT_OCCUPIED',
177
+ });
178
+ }
179
+ if (el.getAttribute('src') !== null || el.querySelector('source') !== null) {
180
+ // Silent takeover of an occupied element produces unreproducible
181
+ // races with the browser's resource selection; refuse explicitly.
182
+ throw Object.assign(new Error('element already has a source'), {
183
+ category: 'config',
184
+ code: 'CONFIG_ELEMENT_OCCUPIED',
185
+ });
186
+ }
187
+ // Reset the resource selection algorithm so MSE attachment cannot race
188
+ // a previous load.
189
+ el.removeAttribute('src');
190
+ while (el.firstChild)
191
+ el.removeChild(el.firstChild);
192
+ el.load();
193
+ const Managed = options.preferManaged === false ? undefined : managedMediaSource();
194
+ managed = Managed !== undefined;
195
+ const ms = Managed !== undefined ? new Managed() : new MediaSource();
196
+ element = el;
197
+ mediaSource = ms;
198
+ listen(ms, 'sourceopen', () => {
199
+ if (objectUrl !== null) {
200
+ // Revoke at sourceopen, not detach. Waiting until detach leaks the
201
+ // MediaSource for the lifetime of the page in shipped code.
202
+ URL.revokeObjectURL(objectUrl);
203
+ objectUrl = null;
204
+ liveObjectUrls -= 1;
205
+ }
206
+ absorb({ type: 'MEDIASOURCE_OPEN' });
207
+ });
208
+ listen(ms, 'sourceclose', () => {
209
+ absorb({ type: 'MEDIASOURCE_CLOSED' });
210
+ });
211
+ if (managed) {
212
+ unobserveManaged = evictor.observeManaged(ms, trimAllBackBuffers);
213
+ // Safari requires remote playback disabled before it will open a
214
+ // ManagedMediaSource.
215
+ el.disableRemotePlayback = true;
216
+ }
217
+ let useSrcObject = options.attachMode !== 'object-url' && 'srcObject' in el;
218
+ if (useSrcObject) {
219
+ try {
220
+ el.srcObject = ms;
221
+ useSrcObject = el.srcObject === ms;
222
+ }
223
+ catch {
224
+ useSrcObject = false;
225
+ }
226
+ }
227
+ if (!useSrcObject) {
228
+ objectUrl = URL.createObjectURL(ms);
229
+ liveObjectUrls += 1;
230
+ el.src = objectUrl;
231
+ }
232
+ absorb({ type: 'ELEMENT_ATTACHED', element: el });
233
+ }
234
+ function detach() {
235
+ if (element === null && mediaSource === null)
236
+ return;
237
+ const el = element;
238
+ const ms = mediaSource;
239
+ for (const [, entry] of buffers) {
240
+ if (ms !== null && ms.readyState === 'open') {
241
+ entry.queue.abort();
242
+ }
243
+ entry.queue.destroy();
244
+ if (ms !== null && ms.readyState === 'open') {
245
+ try {
246
+ ms.removeSourceBuffer(entry.sb);
247
+ }
248
+ catch {
249
+ // Already detached from the MediaSource; nothing to remove.
250
+ }
251
+ }
252
+ }
253
+ buffers.clear();
254
+ appendChains.clear();
255
+ deferred.clear();
256
+ if (ms !== null && ms.readyState === 'open') {
257
+ try {
258
+ ms.endOfStream();
259
+ }
260
+ catch {
261
+ // A buffer race can close the source first; the goal is reached.
262
+ }
263
+ }
264
+ unobserveManaged?.();
265
+ unobserveManaged = null;
266
+ unlistenAll();
267
+ if (el !== null) {
268
+ if ('srcObject' in el)
269
+ el.srcObject = null;
270
+ el.removeAttribute('src');
271
+ if (objectUrl !== null) {
272
+ // sourceopen never fired (attach aborted early); do not leak the URL.
273
+ URL.revokeObjectURL(objectUrl);
274
+ objectUrl = null;
275
+ liveObjectUrls -= 1;
276
+ }
277
+ el.load();
278
+ }
279
+ element = null;
280
+ mediaSource = null;
281
+ managed = false;
282
+ pendingEndOfStream = null;
283
+ pendingDuration = null;
284
+ pendingLiveRange = null;
285
+ }
286
+ /** Adds the SourceBuffer, reporting creation or a clean codec error. */
287
+ function open(sbId, type) {
288
+ const ms = mediaSource;
289
+ if (ms === null)
290
+ return false;
291
+ try {
292
+ // `type` is the full content type, e.g. 'video/mp4; codecs="avc1.42c01e"'.
293
+ const sb = ms.addSourceBuffer(type);
294
+ buffers.set(sbId, { sb, queue: createQueue(sbId, sb) });
295
+ absorb({ type: 'SOURCEBUFFER_CREATED', sbId, codecs: type });
296
+ return true;
297
+ }
298
+ catch (err) {
299
+ // A bogus codec string surfaces as a MatteboxError fact, never as a
300
+ // DOMException escaping into user code.
301
+ absorb({
302
+ type: 'SOURCEBUFFER_ERROR',
303
+ sbId,
304
+ error: {
305
+ category: 'media',
306
+ code: 'MEDIA_CODEC_UNSUPPORTED',
307
+ fatal: false,
308
+ recoverable: false,
309
+ context: { codecs: type, message: String(err) },
310
+ },
311
+ });
312
+ return false;
313
+ }
314
+ }
315
+ /**
316
+ * Hands bytes to the buffer's queue, first opening a deferred buffer with
317
+ * the type the probe reads from them, or with the bare type when the probe
318
+ * reads nothing, which is what an unprobed composition does from the
319
+ * start. Bytes for a buffer that does not exist and is not deferred are
320
+ * dropped, as before.
321
+ */
322
+ function enqueueAppend(sbId, data) {
323
+ const bare = deferred.get(sbId);
324
+ if (bare !== undefined && !buffers.has(sbId)) {
325
+ deferred.delete(sbId);
326
+ const type = options.inferType?.(new Uint8Array(data)) ?? bare;
327
+ if (!open(sbId, type))
328
+ return;
329
+ }
330
+ buffers.get(sbId)?.queue.enqueue({ op: 'append', data });
331
+ }
332
+ function registerHandlers(runner) {
333
+ runner.register('createSourceBuffer', (effect) => {
334
+ const ms = mediaSource;
335
+ if (ms === null || ms.readyState !== 'open') {
336
+ absorb({
337
+ type: 'SOURCEBUFFER_ERROR',
338
+ sbId: effect.sbId,
339
+ error: {
340
+ category: 'media',
341
+ code: 'MEDIA_SOURCE_CLOSED',
342
+ fatal: false,
343
+ recoverable: true,
344
+ context: { readyState: readyState() },
345
+ },
346
+ });
347
+ return undefined;
348
+ }
349
+ if (buffers.has(effect.sbId) || deferred.has(effect.sbId)) {
350
+ // Already created or awaiting its first bytes; a duplicate request
351
+ // is absorbed, not doubled.
352
+ return undefined;
353
+ }
354
+ if (options.inferType !== undefined && !declaresCodecs(effect.codecs)) {
355
+ // Chrome refuses a bare `video/mp4`; the first segment says what
356
+ // it holds. The buffer opens on that append, typed from the bytes.
357
+ deferred.set(effect.sbId, effect.codecs);
358
+ return undefined;
359
+ }
360
+ open(effect.sbId, effect.codecs);
361
+ return undefined;
362
+ });
363
+ runner.register('append', (effect) => {
364
+ const { appendTransform } = options;
365
+ if (appendTransform === undefined) {
366
+ enqueueAppend(effect.sbId, effect.data);
367
+ return undefined;
368
+ }
369
+ // A transform pipeline is loaded. Serialize per buffer so a Worker
370
+ // round-trip cannot let segment N+1 land before segment N. The chain
371
+ // holds arrival order; the queue then holds append order.
372
+ const prior = appendChains.get(effect.sbId) ?? Promise.resolve();
373
+ const next = prior
374
+ .then(async () => {
375
+ const out = await appendTransform(new Uint8Array(effect.data), appendMeta(effect.sbId, effect.start ?? 0, effect.renditionId ?? '', effect.seq ?? 0));
376
+ const bytes = out.byteOffset === 0 && out.byteLength === out.buffer.byteLength
377
+ ? out.buffer
378
+ : out.slice().buffer;
379
+ enqueueAppend(effect.sbId, bytes);
380
+ })
381
+ .catch((err) => {
382
+ // A transmux failure is a container error, never a throw or a hang.
383
+ absorb({
384
+ type: 'SOURCEBUFFER_ERROR',
385
+ sbId: effect.sbId,
386
+ error: {
387
+ category: 'media',
388
+ code: 'MEDIA_CONTAINER_INVALID',
389
+ fatal: false,
390
+ recoverable: false,
391
+ context: { message: String(err) },
392
+ },
393
+ });
394
+ });
395
+ appendChains.set(effect.sbId, next);
396
+ return undefined;
397
+ });
398
+ // With a transform pipeline loaded, appends reach the queue only after
399
+ // an async hop. Every other buffer operation must take the same hop,
400
+ // or a remove or offset change emitted after an append runs before it:
401
+ // a switch's flush would then land under the segment it meant to cut,
402
+ // and the decoder would meet one rendition's frames under another's
403
+ // init segment.
404
+ function sequenced(sbId, op) {
405
+ if (options.appendTransform === undefined) {
406
+ op();
407
+ return;
408
+ }
409
+ const prior = appendChains.get(sbId) ?? Promise.resolve();
410
+ appendChains.set(sbId, prior.then(op).catch(() => undefined));
411
+ }
412
+ runner.register('remove', (effect) => {
413
+ sequenced(effect.sbId, () => {
414
+ const entry = buffers.get(effect.sbId);
415
+ if (entry === undefined)
416
+ return;
417
+ const clamped = evictor.clamp(entry.sb, effect.start, effect.end, currentTime());
418
+ if (clamped === null)
419
+ return;
420
+ entry.queue.enqueue({ op: 'remove', start: clamped.start, end: clamped.end });
421
+ });
422
+ return undefined;
423
+ });
424
+ runner.register('changeType', (effect) => {
425
+ sequenced(effect.sbId, () => {
426
+ buffers.get(effect.sbId)?.queue.enqueue({ op: 'changeType', type: effect.codecs });
427
+ });
428
+ return undefined;
429
+ });
430
+ runner.register('setTimestampOffset', (effect) => {
431
+ sequenced(effect.sbId, () => {
432
+ buffers
433
+ .get(effect.sbId)
434
+ ?.queue.enqueue({ op: 'setTimestampOffset', offset: effect.offset });
435
+ });
436
+ return undefined;
437
+ });
438
+ runner.register('endOfStream', (effect) => {
439
+ if (mediaSource === null || mediaSource.readyState !== 'open') {
440
+ // Calling endOfStream on a closed or ended source is an
441
+ // InvalidStateError; the stream is already not open, so the intent
442
+ // is moot. Deliberate no-op.
443
+ return undefined;
444
+ }
445
+ pendingEndOfStream = effect.reason ?? 'none';
446
+ runDeferredGlobalOps();
447
+ return undefined;
448
+ });
449
+ runner.register('setDuration', (effect) => {
450
+ if (mediaSource === null || mediaSource.readyState !== 'open')
451
+ return undefined;
452
+ pendingDuration = effect.seconds;
453
+ runDeferredGlobalOps();
454
+ return undefined;
455
+ });
456
+ runner.register('setLiveSeekableRange', (effect) => {
457
+ if (mediaSource === null || mediaSource.readyState !== 'open')
458
+ return undefined;
459
+ pendingLiveRange = { start: effect.start, end: effect.end };
460
+ runDeferredGlobalOps();
461
+ return undefined;
462
+ });
463
+ }
464
+ return {
465
+ attach,
466
+ detach,
467
+ registerHandlers,
468
+ isManaged: () => managed,
469
+ readyState,
470
+ buffered(sbId) {
471
+ const entry = buffers.get(sbId);
472
+ if (entry === undefined)
473
+ return [];
474
+ const out = [];
475
+ const { buffered } = entry.sb;
476
+ for (let i = 0; i < buffered.length; i += 1) {
477
+ out.push({ start: buffered.start(i), end: buffered.end(i) });
478
+ }
479
+ return out;
480
+ },
481
+ diagnostics() {
482
+ return {
483
+ liveObjectUrls,
484
+ liveListeners: tracked.length,
485
+ sourceBuffers: buffers.size,
486
+ };
487
+ },
488
+ };
489
+ }
490
+ //# sourceMappingURL=mse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mse.js","sourceRoot":"","sources":["../../src/kernel/mse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { KernelConfig, KernelState, Reducer, SliceReducer } from '../types/kernel.js';
2
+ import type { Command, Message } from '../types/messages.js';
3
+ import type { AbrChooser, SwitchPolicy } from './rendition-select.js';
4
+ /**
5
+ * The default tuning. Every value is overridable through the `config`
6
+ * parameters of `initialState` and `createReducer`; these are starting
7
+ * points, not policy.
8
+ */
9
+ export declare const DEFAULT_KERNEL_CONFIG: KernelConfig;
10
+ export declare function resolveConfig(config?: Partial<KernelConfig>): KernelConfig;
11
+ export declare function initialState(config?: Partial<KernelConfig>): KernelState;
12
+ /**
13
+ * Hooks resolved at composition time, closure configuration like slices
14
+ * and config: a replay must rebuild the reducer with the same hooks.
15
+ */
16
+ export interface ReducerHooks {
17
+ /** The abr stage's chooser, when one is registered. */
18
+ readonly abr?: AbrChooser | null;
19
+ /** The switch policy codec-switch registers; the kernel default otherwise. */
20
+ readonly switchPolicy?: SwitchPolicy | null;
21
+ /**
22
+ * The manifest MIME types the composition's adapters parse, normalized
23
+ * (`Composition.manifestTypes`). A LOAD carrying a `mimeType` outside the
24
+ * set fails before fetching. Absent, no pre-fetch check runs; the
25
+ * unclaimed-bytes check still reports an unsupported manifest. A replay
26
+ * must pass the same set the recording ran with.
27
+ */
28
+ readonly manifestTypes?: ReadonlySet<string>;
29
+ }
30
+ export declare function isCommand(msg: Message): msg is Command;
31
+ /**
32
+ * Builds the root reducer from the built-in kernel logic plus stage slices.
33
+ * A slice reducer receives its own slice (undefined on first run) and a
34
+ * read-only view of kernel state. A throwing slice reducer is contained: its
35
+ * slice keeps the previous value and an error event effect is emitted, so
36
+ * one broken stage cannot corrupt kernel state.
37
+ */
38
+ export declare function createReducer(slices?: Iterable<readonly [string, SliceReducer]>, config?: Partial<KernelConfig>, hooks?: ReducerHooks): Reducer;
39
+ //# sourceMappingURL=reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../src/kernel/reducer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAgB,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQtE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAqBnC,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAE1E;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,WAAW,CAgBxE;AAuhCD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAwRD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,OAAO,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAClD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,KAAK,GAAE,YAAiB,GACvB,OAAO,CAkET"}