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,55 @@
1
+ import { findBox, normalizeTfdt, trackTimescales } from "../../containers/mp4-box/index.js";
2
+ //#region src/stages/cmaf-timing/index.ts
3
+ /**
4
+ * cmaf-timing normalizes the decode timeline of native fMP4 segments so a live
5
+ * CMAF stream plays. A CMAF live segment's tfdt carries the real broadcast
6
+ * clock (often a value in the billions of seconds); appended with the zero
7
+ * timestampOffset the kernel derives for fMP4, its frames land far past the
8
+ * playhead and nothing ever renders. This stage rewrites each segment's tfdt to
9
+ * the presentation start the manifest assigns it, which is the same alignment a
10
+ * TS transmux produces for free, so VOD (already near zero) is untouched and
11
+ * live is corrected.
12
+ *
13
+ * It contributes a transform step and the `media-transform` capability, so the
14
+ * append path routes through the transform pipeline for a CMAF composition too.
15
+ * Timescales come from the init segment's moov; the transform runs after any
16
+ * transmux, and a decrypt step never touches the moof header, so an encrypted
17
+ * segment is normalized the same way.
18
+ */
19
+ /** After ts-transmux (100) and any decrypt-class step, before the append. */
20
+ const ORDER = 150;
21
+ function cmafTiming() {
22
+ return {
23
+ name: "cmaf-timing",
24
+ provides: [
25
+ "cmaf-timing",
26
+ "media-transform",
27
+ "media-time-normalized"
28
+ ],
29
+ install(ctx) {
30
+ const timescales = /* @__PURE__ */ new Map();
31
+ ctx.registerTransform({
32
+ name: "cmaf-timing",
33
+ order: ORDER,
34
+ transform(data, meta) {
35
+ if (meta.contentType !== "video" && meta.contentType !== "audio") return data;
36
+ if (findBox(data, "moov") !== null) {
37
+ const scales = trackTimescales(data);
38
+ if (scales.size > 0) timescales.set(meta.contentType, scales);
39
+ }
40
+ if (findBox(data, "moof") !== null) {
41
+ const scales = timescales.get(meta.contentType);
42
+ if (scales !== void 0 && scales.size > 0) {
43
+ var _;
44
+ const fallback = (_ = [...scales.values()][0]) !== null && _ !== void 0 ? _ : 0;
45
+ normalizeTfdt(data, meta.start, scales, fallback);
46
+ }
47
+ }
48
+ return data;
49
+ }
50
+ });
51
+ }
52
+ };
53
+ }
54
+ //#endregion
55
+ export { cmafTiming as default };
@@ -0,0 +1,70 @@
1
+ //#region src/stages/cmcd/index.ts
2
+ /** The CMCD object type, inferred from the URL the request is fetching. */
3
+ function objectType(url) {
4
+ if (/\.(m3u8|mpd)(\?|$)/i.test(url)) return "m";
5
+ if (/\.(vtt|srt)(\?|$)/i.test(url)) return "c";
6
+ if (/\.(aac|mp3|ac3|m4a)(\?|$)/i.test(url)) return "a";
7
+ return "av";
8
+ }
9
+ /** CMCD keys whose value is an enumerated token, sent unquoted. */
10
+ const TOKEN_KEYS = /* @__PURE__ */ new Set([
11
+ "ot",
12
+ "sf",
13
+ "st"
14
+ ]);
15
+ /**
16
+ * Serializes CMCD keys per CTA-5004: sorted, booleans bare, tokens unquoted,
17
+ * and true strings (sid, cid) quoted.
18
+ */
19
+ function serialize(keys) {
20
+ return Object.keys(keys).sort().map((key) => {
21
+ const value = keys[key];
22
+ if (value === true) return key;
23
+ if (typeof value === "string") return TOKEN_KEYS.has(key) ? `${key}=${value}` : `${key}=${JSON.stringify(value)}`;
24
+ return `${key}=${value}`;
25
+ }).join(",");
26
+ }
27
+ function cmcd(options = {}) {
28
+ var _ref, _options$sessionId, _globalThis$crypto, _globalThis$crypto$ra, _options$mode;
29
+ const sessionId = (_ref = (_options$sessionId = options.sessionId) !== null && _options$sessionId !== void 0 ? _options$sessionId : (_globalThis$crypto = globalThis.crypto) === null || _globalThis$crypto === void 0 || (_globalThis$crypto$ra = _globalThis$crypto.randomUUID) === null || _globalThis$crypto$ra === void 0 ? void 0 : _globalThis$crypto$ra.call(_globalThis$crypto)) !== null && _ref !== void 0 ? _ref : `mb-${Math.random().toString(36).slice(2)}`;
30
+ const mode = (_options$mode = options.mode) !== null && _options$mode !== void 0 ? _options$mode : "query";
31
+ return {
32
+ name: "cmcd",
33
+ provides: ["cmcd"],
34
+ requires: ["transport"],
35
+ install(ctx) {
36
+ ctx.addRequestHook((req) => {
37
+ const state = ctx.getState();
38
+ const keys = {
39
+ sid: sessionId,
40
+ ot: objectType(req.url)
41
+ };
42
+ if (options.contentId !== void 0) keys.cid = options.contentId;
43
+ const activeId = state.quality.active;
44
+ if (activeId !== null && state.presentation !== null) for (const period of state.presentation.periods) for (const track of period.tracks) {
45
+ const rendition = track.renditions.find((r) => r.id === activeId);
46
+ if (rendition !== void 0) keys.br = Math.round(rendition.bitrate / 1e3);
47
+ }
48
+ const mtp = state.stats.throughputEwma;
49
+ if (mtp > 0) keys.mtp = Math.round(mtp / 1e3 / 100) * 100;
50
+ const el = ctx.element;
51
+ const ahead = bufferAhead(el);
52
+ if (ahead !== null) keys.bl = Math.round(ahead * 1e3 / 100) * 100;
53
+ if (ahead !== null && ahead < 1) keys.su = true;
54
+ const payload = serialize(keys);
55
+ if (mode === "header") req.headers["CMCD-Request"] = payload;
56
+ else {
57
+ const separator = req.url.includes("?") ? "&" : "?";
58
+ req.url = `${req.url}${separator}CMCD=${encodeURIComponent(payload)}`;
59
+ }
60
+ });
61
+ }
62
+ };
63
+ }
64
+ function bufferAhead(el) {
65
+ const { buffered, currentTime } = el;
66
+ for (let i = 0; i < buffered.length; i += 1) if (buffered.start(i) <= currentTime && currentTime <= buffered.end(i)) return buffered.end(i) - currentTime;
67
+ return null;
68
+ }
69
+ //#endregion
70
+ export { cmcd as default };
@@ -0,0 +1,65 @@
1
+ import { probeInitSegment } from "../../containers/codec-probe/index.js";
2
+ //#region src/stages/codec-probe/index.ts
3
+ /**
4
+ * codec-probe as a loadable stage. The derivation itself lives in the
5
+ * container layer (probeInitSegment reads the stsd sample entries and rebuilds
6
+ * the RFC 6381 string from avcC/hvcC/esds/vpcC/dOps). This stage is the
7
+ * runtime call site the container never had: a transform that watches init
8
+ * segments, publishes what it derived on `engine.codecProbe`, and emits a
9
+ * `codecprobe:detected` event.
10
+ *
11
+ * It also registers the composition's type probe: a rendition the manifest
12
+ * left codec-less (a bare media playlist) gets its SourceBuffer typed from
13
+ * its first segment instead of the bare `video/mp4` Chrome refuses. A
14
+ * manifest that does declare codecs still creates the buffer as declared;
15
+ * a mismatch with the probe surfaces on the event for a follow-up stage.
16
+ */
17
+ /** A media segment carries a moof; only an init segment carries a moov. */
18
+ function isInitSegment(data) {
19
+ for (let i = 4; i + 4 <= data.byteLength && i < 64; i += 1) if (data[i] === 109 && data[i + 1] === 111 && data[i + 2] === 111 && data[i + 3] === 118) return true;
20
+ return false;
21
+ }
22
+ function codecProbe() {
23
+ return {
24
+ name: "codec-probe",
25
+ provides: ["codec-probe"],
26
+ requires: ["mp4-box"],
27
+ install(ctx) {
28
+ let detected = [];
29
+ let mimeType = null;
30
+ ctx.registerNamespace("codecProbe", {
31
+ get detected() {
32
+ return detected;
33
+ },
34
+ get mimeType() {
35
+ return mimeType;
36
+ }
37
+ });
38
+ ctx.registerTypeProbe((bytes) => {
39
+ if (!isInitSegment(bytes)) return null;
40
+ const result = probeInitSegment(bytes);
41
+ return result.codecs.length > 0 ? result.mimeType : null;
42
+ });
43
+ ctx.registerTransform({
44
+ name: "codec-probe",
45
+ order: 5,
46
+ transform(data, meta) {
47
+ if (meta.contentType !== "video" && meta.contentType !== "audio") return data;
48
+ if (!isInitSegment(data)) return data;
49
+ const result = probeInitSegment(data);
50
+ if (result.codecs.length > 0) {
51
+ detected = result.codecs;
52
+ mimeType = result.mimeType;
53
+ ctx.emit("codecprobe:detected", {
54
+ codecs: result.codecs,
55
+ mimeType: result.mimeType
56
+ });
57
+ }
58
+ return data;
59
+ }
60
+ });
61
+ }
62
+ };
63
+ }
64
+ //#endregion
65
+ export { codecProbe as default };
@@ -0,0 +1,48 @@
1
+ import { canSwitchTo } from "../../kernel/rendition-select.js";
2
+ //#region src/stages/codec-switch/index.ts
3
+ /**
4
+ * codec-switch: the real answer to entanglement #2's query. It registers a
5
+ * switch policy the kernel injects into abr's telemetry; abr consumes it
6
+ * without importing this stage. The refinement over the kernel default: a
7
+ * changeType verdict is only returned when the browser can actually bridge
8
+ * the two codecs, which needs both a supported target type and
9
+ * SourceBuffer.changeType itself. Where the browser cannot, an in-family
10
+ * change downgrades to reload rather than proposing a switch that would
11
+ * throw at append time.
12
+ *
13
+ * codec-probe (declared in `requires`, resolved by the loader, never
14
+ * imported) is the future source of exact codec strings when a manifest
15
+ * lies; until a runtime call site exists this policy reasons over the IR's
16
+ * declared strings, which is already a real improvement.
17
+ */
18
+ /** A full MSE type string for a rendition, mime plus codecs. */
19
+ function typeString(rendition) {
20
+ return rendition.codecs === null ? rendition.mimeType : `${rendition.mimeType}; codecs="${rendition.codecs}"`;
21
+ }
22
+ /** Whether the runtime can bridge two types without tearing the buffer down. */
23
+ function changeTypeSupported(target) {
24
+ var _globalThis$SourceBuf;
25
+ const MediaSourceCtor = typeof MediaSource !== "undefined" ? MediaSource : globalThis.ManagedMediaSource;
26
+ if (MediaSourceCtor === void 0) return false;
27
+ if (typeof ((_globalThis$SourceBuf = globalThis.SourceBuffer) === null || _globalThis$SourceBuf === void 0 || (_globalThis$SourceBuf = _globalThis$SourceBuf.prototype) === null || _globalThis$SourceBuf === void 0 ? void 0 : _globalThis$SourceBuf.changeType) !== "function") return false;
28
+ return MediaSourceCtor.isTypeSupported(typeString(target));
29
+ }
30
+ function createPolicy() {
31
+ return (current, target) => {
32
+ const base = canSwitchTo(current, target);
33
+ if (base !== "changeType") return base;
34
+ return changeTypeSupported(target) ? "changeType" : "reload";
35
+ };
36
+ }
37
+ function codecSwitch() {
38
+ return {
39
+ name: "codec-switch",
40
+ provides: ["codec-switch"],
41
+ requires: ["mse"],
42
+ install(ctx) {
43
+ ctx.registerSwitchPolicy(createPolicy());
44
+ }
45
+ };
46
+ }
47
+ //#endregion
48
+ export { createPolicy, codecSwitch as default };
@@ -0,0 +1,179 @@
1
+ import _objectSpread2 from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js";
2
+ //#region src/stages/content-steering/index.ts
3
+ const MANIFEST_TOKEN = "steering:manifest";
4
+ const RELOAD_TOKEN = "steering:reload";
5
+ const PATHWAY_EVENT = "steering:pathway";
6
+ /** Failures on the active pathway before failing over. */
7
+ const FAILOVER_AFTER = 2;
8
+ /** Default steering manifest TTL, in seconds. */
9
+ const DEFAULT_TTL = 300;
10
+ const INITIAL = {
11
+ serverUri: null,
12
+ priority: [],
13
+ active: null,
14
+ dead: [],
15
+ fails: 0,
16
+ fetchPending: false,
17
+ tickPending: false
18
+ };
19
+ /** Loops a message back into the bus through a zero-delay schedule effect. */
20
+ function feed(message) {
21
+ return {
22
+ kind: "schedule",
23
+ token: "steering:loopback",
24
+ delayMs: 0,
25
+ then: message
26
+ };
27
+ }
28
+ function pathwaysOf(kernel) {
29
+ var _kernel$presentation$, _kernel$presentation, _kernel$presentation$2, _kernel$presentation2;
30
+ const ids = /* @__PURE__ */ new Set();
31
+ for (const base of Object.keys((_kernel$presentation$ = (_kernel$presentation = kernel.presentation) === null || _kernel$presentation === void 0 || (_kernel$presentation = _kernel$presentation.steering) === null || _kernel$presentation === void 0 ? void 0 : _kernel$presentation.bases) !== null && _kernel$presentation$ !== void 0 ? _kernel$presentation$ : {})) ids.add(base);
32
+ for (const period of (_kernel$presentation$2 = (_kernel$presentation2 = kernel.presentation) === null || _kernel$presentation2 === void 0 ? void 0 : _kernel$presentation2.periods) !== null && _kernel$presentation$2 !== void 0 ? _kernel$presentation$2 : []) for (const track of period.tracks) for (const rendition of track.renditions) if (rendition.pathway !== void 0) ids.add(rendition.pathway);
33
+ return [...ids];
34
+ }
35
+ /** The effects that make `active` the pathway in force. */
36
+ function applyPathway(kernel, active) {
37
+ var _kernel$presentation$3, _kernel$presentation3;
38
+ const effects = [{
39
+ kind: "emit",
40
+ event: PATHWAY_EVENT,
41
+ payload: { pathway: active }
42
+ }];
43
+ const excludeIds = [];
44
+ for (const period of (_kernel$presentation$3 = (_kernel$presentation3 = kernel.presentation) === null || _kernel$presentation3 === void 0 ? void 0 : _kernel$presentation3.periods) !== null && _kernel$presentation$3 !== void 0 ? _kernel$presentation$3 : []) for (const track of period.tracks) for (const rendition of track.renditions) if (rendition.pathway !== void 0 && rendition.pathway !== active) excludeIds.push(rendition.id);
45
+ effects.push(excludeIds.length > 0 ? feed({
46
+ type: "CONSTRAIN",
47
+ source: "steering",
48
+ constraint: { excludeIds }
49
+ }) : feed({
50
+ type: "RELEASE_CONSTRAINT",
51
+ source: "steering"
52
+ }));
53
+ return effects;
54
+ }
55
+ function choosePathway(slice, known) {
56
+ var _known$find;
57
+ for (const id of slice.priority) if (!slice.dead.includes(id) && known.includes(id)) return id;
58
+ return (_known$find = known.find((id) => !slice.dead.includes(id))) !== null && _known$find !== void 0 ? _known$find : null;
59
+ }
60
+ const reduceSteering = (slice, msg, kernel) => {
61
+ const state = slice !== null && slice !== void 0 ? slice : INITIAL;
62
+ if (msg.type === "LOAD" || msg.type === "UNLOAD" || msg.type === "DETACH") return [INITIAL, []];
63
+ if (msg.type === "MANIFEST_LOADED") {
64
+ const steering = msg.presentation.steering;
65
+ if (steering === void 0) return [state, []];
66
+ const effects = [];
67
+ let next = state;
68
+ if (state.serverUri === null) {
69
+ var _steering$defaultPath;
70
+ next = _objectSpread2(_objectSpread2({}, next), {}, {
71
+ serverUri: steering.serverUri,
72
+ active: (_steering$defaultPath = steering.defaultPathway) !== null && _steering$defaultPath !== void 0 ? _steering$defaultPath : null
73
+ });
74
+ effects.push({
75
+ kind: "fetch",
76
+ token: MANIFEST_TOKEN,
77
+ url: steering.serverUri
78
+ });
79
+ next = _objectSpread2(_objectSpread2({}, next), {}, { fetchPending: true });
80
+ if (next.active !== null) effects.push(...applyPathway(kernel, next.active));
81
+ }
82
+ return [next, effects];
83
+ }
84
+ if (msg.type === "SEGMENT_LOADED" && msg.trackId === MANIFEST_TOKEN) {
85
+ var _parsed$PATHWAYPRIOR;
86
+ let parsed;
87
+ try {
88
+ parsed = JSON.parse(new TextDecoder().decode(msg.bytes));
89
+ } catch (_unused) {
90
+ return [_objectSpread2(_objectSpread2({}, state), {}, { fetchPending: false }), []];
91
+ }
92
+ const priority = (_parsed$PATHWAYPRIOR = parsed["PATHWAY-PRIORITY"]) !== null && _parsed$PATHWAYPRIOR !== void 0 ? _parsed$PATHWAYPRIOR : [];
93
+ let next = _objectSpread2(_objectSpread2({}, state), {}, {
94
+ priority,
95
+ dead: [],
96
+ fails: 0,
97
+ fetchPending: false
98
+ });
99
+ const effects = [];
100
+ const chosen = choosePathway(next, pathwaysOf(kernel));
101
+ if (chosen !== null && chosen !== state.active) {
102
+ next = _objectSpread2(_objectSpread2({}, next), {}, { active: chosen });
103
+ effects.push(...applyPathway(kernel, chosen));
104
+ }
105
+ if (!next.tickPending) {
106
+ var _parsed$TTL;
107
+ effects.push({
108
+ kind: "schedule",
109
+ token: RELOAD_TOKEN,
110
+ delayMs: ((_parsed$TTL = parsed.TTL) !== null && _parsed$TTL !== void 0 ? _parsed$TTL : DEFAULT_TTL) * 1e3,
111
+ then: {
112
+ type: "TICK",
113
+ token: RELOAD_TOKEN
114
+ }
115
+ });
116
+ next = _objectSpread2(_objectSpread2({}, next), {}, { tickPending: true });
117
+ }
118
+ return [next, effects];
119
+ }
120
+ if (msg.type === "TICK" && msg.token === RELOAD_TOKEN) {
121
+ if (state.serverUri === null) return [_objectSpread2(_objectSpread2({}, state), {}, { tickPending: false }), []];
122
+ return [_objectSpread2(_objectSpread2({}, state), {}, {
123
+ tickPending: false,
124
+ fetchPending: true
125
+ }), [{
126
+ kind: "fetch",
127
+ token: MANIFEST_TOKEN,
128
+ url: state.serverUri
129
+ }]];
130
+ }
131
+ if (msg.type === "SEGMENT_FAILED" && msg.renditionId !== void 0 && state.active !== null) {
132
+ const fails = state.fails + 1;
133
+ if (fails < FAILOVER_AFTER) return [_objectSpread2(_objectSpread2({}, state), {}, { fails }), []];
134
+ const dead = [...state.dead, state.active];
135
+ const next = _objectSpread2(_objectSpread2({}, state), {}, {
136
+ dead,
137
+ fails: 0
138
+ });
139
+ const chosen = choosePathway(next, pathwaysOf(kernel));
140
+ if (chosen === null || chosen === state.active) return [next, []];
141
+ return [_objectSpread2(_objectSpread2({}, next), {}, { active: chosen }), [{
142
+ kind: "emit",
143
+ event: "steering:failover",
144
+ payload: {
145
+ from: state.active,
146
+ to: chosen
147
+ }
148
+ }, ...applyPathway(kernel, chosen)]];
149
+ }
150
+ return [state, []];
151
+ };
152
+ /** The stage factory. */
153
+ function contentSteering() {
154
+ return {
155
+ name: "content-steering",
156
+ provides: ["content-steering"],
157
+ requires: ["transport"],
158
+ install(ctx) {
159
+ ctx.reduce("steering", reduceSteering);
160
+ let activeBase = null;
161
+ let bases = {};
162
+ ctx.on(PATHWAY_EVENT, (payload) => {
163
+ var _ctx$getState$present, _ctx$getState$present2, _bases$pathway;
164
+ const pathway = payload.pathway;
165
+ bases = (_ctx$getState$present = (_ctx$getState$present2 = ctx.getState().presentation) === null || _ctx$getState$present2 === void 0 || (_ctx$getState$present2 = _ctx$getState$present2.steering) === null || _ctx$getState$present2 === void 0 ? void 0 : _ctx$getState$present2.bases) !== null && _ctx$getState$present !== void 0 ? _ctx$getState$present : {};
166
+ activeBase = pathway !== void 0 ? (_bases$pathway = bases[pathway]) !== null && _bases$pathway !== void 0 ? _bases$pathway : null : null;
167
+ });
168
+ ctx.addRequestHook((req) => {
169
+ if (activeBase === null) return;
170
+ for (const base of Object.values(bases)) if (base !== activeBase && req.url.startsWith(base)) {
171
+ req.url = activeBase + req.url.slice(base.length);
172
+ return;
173
+ }
174
+ });
175
+ }
176
+ };
177
+ }
178
+ //#endregion
179
+ export { contentSteering as default };
@@ -0,0 +1,18 @@
1
+ //#region src/stages/drm-shared.ts
2
+ const handlers = /* @__PURE__ */ new Map();
3
+ /** Registers a handler, keyed by its key system; a repeat replaces. */
4
+ function registerKeySystem(handler) {
5
+ handlers.set(handler.keySystem, handler);
6
+ }
7
+ /** Every registered handler. eme-core reads this when choosing a key system. */
8
+ function keySystemHandlers() {
9
+ return [...handlers.values()];
10
+ }
11
+ /** Normalizes a ContentProtection schemeIdUri or systemId to a bare lowercase UUID. */
12
+ function normalizeSystemId(raw) {
13
+ if (raw === null) return null;
14
+ const match = /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i.exec(raw);
15
+ return match !== null ? match[1].toLowerCase() : null;
16
+ }
17
+ //#endregion
18
+ export { keySystemHandlers, normalizeSystemId, registerKeySystem };
@@ -0,0 +1,46 @@
1
+ import { registerKeySystem } from "../drm-shared.js";
2
+ //#region src/stages/eme-cenc/index.ts
3
+ const WIDEVINE_SYSTEM_ID = "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";
4
+ const PLAYREADY_SYSTEM_ID = "9a04f079-9840-4286-ab92-e65be0885f95";
5
+ /** Pulls the license blob out of a PlayReady SOAP response, or passes bytes through. */
6
+ function unwrapPlayReadyResponse(response) {
7
+ const text = new TextDecoder().decode(response);
8
+ if (!text.includes("<License>")) return response;
9
+ const match = /<License>([\s\S]*?)<\/License>/.exec(text);
10
+ if (match === null) return response;
11
+ const binary = atob(match[1].trim());
12
+ const bytes = new Uint8Array(binary.length);
13
+ for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);
14
+ return bytes;
15
+ }
16
+ function emeCenc() {
17
+ return {
18
+ name: "eme-cenc",
19
+ provides: ["eme-cenc"],
20
+ requires: ["eme-core"],
21
+ install() {
22
+ registerKeySystem({
23
+ keySystem: "com.widevine.alpha",
24
+ systemIds: [WIDEVINE_SYSTEM_ID],
25
+ initDataTypes: ["cenc"],
26
+ robustness: ["SW_SECURE_CRYPTO", ""],
27
+ buildLicenseRequest: (message) => message,
28
+ parseLicenseResponse: (response) => response
29
+ });
30
+ registerKeySystem({
31
+ keySystem: "com.microsoft.playready",
32
+ systemIds: [PLAYREADY_SYSTEM_ID],
33
+ initDataTypes: ["cenc"],
34
+ robustness: ["3000", ""],
35
+ licenseHeaders: {
36
+ "Content-Type": "text/xml; charset=utf-8",
37
+ SOAPAction: "\"http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense\""
38
+ },
39
+ buildLicenseRequest: (message) => message,
40
+ parseLicenseResponse: unwrapPlayReadyResponse
41
+ });
42
+ }
43
+ };
44
+ }
45
+ //#endregion
46
+ export { emeCenc as default, unwrapPlayReadyResponse };