@blockcast/mmt-container 0.1.0-main.149f78a4adae

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 (678) hide show
  1. package/README.md +432 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/__tests__/test-utils.d.ts +71 -0
  4. package/dist/__tests__/test-utils.d.ts.map +1 -0
  5. package/dist/align.d.ts +148 -0
  6. package/dist/align.d.ts.map +1 -0
  7. package/dist/align.js +88 -0
  8. package/dist/align.js.map +7 -0
  9. package/dist/audio-init-parser.d.ts +66 -0
  10. package/dist/audio-init-parser.d.ts.map +1 -0
  11. package/dist/audio-init-parser.js +118 -0
  12. package/dist/audio-init-parser.js.map +7 -0
  13. package/dist/audio-ring-buffer.d.ts +50 -0
  14. package/dist/audio-ring-buffer.d.ts.map +1 -0
  15. package/dist/audio-ring-buffer.js +93 -0
  16. package/dist/audio-ring-buffer.js.map +7 -0
  17. package/dist/authored-timing.d.ts +32 -0
  18. package/dist/authored-timing.d.ts.map +1 -0
  19. package/dist/authored-timing.js +32 -0
  20. package/dist/authored-timing.js.map +7 -0
  21. package/dist/browser-runtime.js +17109 -0
  22. package/dist/browser-runtime.js.map +7 -0
  23. package/dist/carp-catalog.d.ts +318 -0
  24. package/dist/carp-catalog.d.ts.map +1 -0
  25. package/dist/carp-catalog.js +549 -0
  26. package/dist/carp-catalog.js.map +7 -0
  27. package/dist/catalog-fec-params.d.ts +82 -0
  28. package/dist/catalog-fec-params.d.ts.map +1 -0
  29. package/dist/catalog-fec-params.js +66 -0
  30. package/dist/catalog-fec-params.js.map +7 -0
  31. package/dist/catalog-network-source.d.ts +19 -0
  32. package/dist/catalog-network-source.d.ts.map +1 -0
  33. package/dist/catalog-network-source.js +22 -0
  34. package/dist/catalog-network-source.js.map +7 -0
  35. package/dist/catalog-validator.d.ts +18 -0
  36. package/dist/catalog-validator.d.ts.map +1 -0
  37. package/dist/catalog-validator.js +7747 -0
  38. package/dist/catalog-validator.js.map +7 -0
  39. package/dist/cmaf-block-assembler.d.ts +168 -0
  40. package/dist/cmaf-block-assembler.d.ts.map +1 -0
  41. package/dist/cmaf-block-assembler.js +1755 -0
  42. package/dist/cmaf-block-assembler.js.map +7 -0
  43. package/dist/cmaf-group-batcher.d.ts +38 -0
  44. package/dist/cmaf-group-batcher.d.ts.map +1 -0
  45. package/dist/cmaf-group-batcher.js +195 -0
  46. package/dist/cmaf-group-batcher.js.map +7 -0
  47. package/dist/cmcd-producer.d.ts +104 -0
  48. package/dist/cmcd-producer.d.ts.map +1 -0
  49. package/dist/cmcd-producer.js +207 -0
  50. package/dist/cmcd-producer.js.map +7 -0
  51. package/dist/codec-utils.d.ts +235 -0
  52. package/dist/codec-utils.d.ts.map +1 -0
  53. package/dist/codec-utils.js +1225 -0
  54. package/dist/codec-utils.js.map +7 -0
  55. package/dist/fec-codec.d.ts +32 -0
  56. package/dist/fec-codec.d.ts.map +1 -0
  57. package/dist/fec-codec.js +47 -0
  58. package/dist/fec-codec.js.map +7 -0
  59. package/dist/fec-manager.d.ts +266 -0
  60. package/dist/fec-manager.d.ts.map +1 -0
  61. package/dist/fec-manager.js +1447 -0
  62. package/dist/fec-manager.js.map +7 -0
  63. package/dist/fec-starvation-detector.d.ts +59 -0
  64. package/dist/fec-starvation-detector.d.ts.map +1 -0
  65. package/dist/fec-starvation-detector.js +75 -0
  66. package/dist/fec-starvation-detector.js.map +7 -0
  67. package/dist/fec-worker-setup.d.ts +76 -0
  68. package/dist/fec-worker-setup.d.ts.map +1 -0
  69. package/dist/fec-worker-setup.js +603 -0
  70. package/dist/fec-worker-setup.js.map +7 -0
  71. package/dist/fmp4-completion.d.ts +30 -0
  72. package/dist/fmp4-completion.d.ts.map +1 -0
  73. package/dist/fmp4-completion.js +21 -0
  74. package/dist/fmp4-completion.js.map +7 -0
  75. package/dist/fmp4-reader.d.ts +37 -0
  76. package/dist/fmp4-reader.d.ts.map +1 -0
  77. package/dist/fmp4-reader.js +100 -0
  78. package/dist/fmp4-reader.js.map +7 -0
  79. package/dist/index.d.ts +47 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +330 -0
  82. package/dist/index.js.map +7 -0
  83. package/dist/iso-bmff-timing.d.ts +47 -0
  84. package/dist/iso-bmff-timing.d.ts.map +1 -0
  85. package/dist/iso-bmff-timing.js +526 -0
  86. package/dist/iso-bmff-timing.js.map +7 -0
  87. package/dist/loc.d.ts +68 -0
  88. package/dist/loc.d.ts.map +1 -0
  89. package/dist/loc.js +143 -0
  90. package/dist/loc.js.map +7 -0
  91. package/dist/manifest-auth-plan.d.ts +30 -0
  92. package/dist/manifest-auth-plan.d.ts.map +1 -0
  93. package/dist/manifest-auth-plan.js +1267 -0
  94. package/dist/manifest-auth-plan.js.map +7 -0
  95. package/dist/media-router.d.ts +338 -0
  96. package/dist/media-router.d.ts.map +1 -0
  97. package/dist/media-router.js +802 -0
  98. package/dist/media-router.js.map +7 -0
  99. package/dist/mfu-reassembler.d.ts +264 -0
  100. package/dist/mfu-reassembler.d.ts.map +1 -0
  101. package/dist/mfu-reassembler.js +2668 -0
  102. package/dist/mfu-reassembler.js.map +7 -0
  103. package/dist/mfu-reassembly-policy.d.ts +24 -0
  104. package/dist/mfu-reassembly-policy.d.ts.map +1 -0
  105. package/dist/mfu-reassembly-policy.js +99 -0
  106. package/dist/mfu-reassembly-policy.js.map +7 -0
  107. package/dist/mmtp-container-parser.d.ts +304 -0
  108. package/dist/mmtp-container-parser.d.ts.map +1 -0
  109. package/dist/mmtp-container-parser.js +5378 -0
  110. package/dist/mmtp-container-parser.js.map +7 -0
  111. package/dist/mmtp-container-parser.no-modules.js +7853 -0
  112. package/dist/mmtp-container-parser.no-modules.js.map +7 -0
  113. package/dist/mmtp-decode-pipeline.d.ts +96 -0
  114. package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
  115. package/dist/mmtp-decode-pipeline.js +5589 -0
  116. package/dist/mmtp-decode-pipeline.js.map +7 -0
  117. package/dist/mmtp-router.d.ts +383 -0
  118. package/dist/mmtp-router.d.ts.map +1 -0
  119. package/dist/mmtp-router.js +8384 -0
  120. package/dist/mmtp-router.js.map +7 -0
  121. package/dist/mmtp-to-cmaf.d.ts +166 -0
  122. package/dist/mmtp-to-cmaf.d.ts.map +1 -0
  123. package/dist/mmtp-to-cmaf.js +781 -0
  124. package/dist/mmtp-to-cmaf.js.map +7 -0
  125. package/dist/multicast-auth-catalog.d.ts +115 -0
  126. package/dist/multicast-auth-catalog.d.ts.map +1 -0
  127. package/dist/multicast-auth-catalog.js +202 -0
  128. package/dist/multicast-auth-catalog.js.map +7 -0
  129. package/dist/multicast-input.d.ts +107 -0
  130. package/dist/multicast-input.d.ts.map +1 -0
  131. package/dist/multicast-input.js +256 -0
  132. package/dist/multicast-input.js.map +7 -0
  133. package/dist/multicast-manager.d.ts +330 -0
  134. package/dist/multicast-manager.d.ts.map +1 -0
  135. package/dist/multicast-manager.js +11032 -0
  136. package/dist/multicast-manager.js.map +7 -0
  137. package/dist/multicast-transport.d.ts +62 -0
  138. package/dist/multicast-transport.d.ts.map +1 -0
  139. package/dist/multicast-transport.js +338 -0
  140. package/dist/multicast-transport.js.map +7 -0
  141. package/dist/multicast-unwrap.d.ts +57 -0
  142. package/dist/multicast-unwrap.d.ts.map +1 -0
  143. package/dist/multicast-unwrap.js +384 -0
  144. package/dist/multicast-unwrap.js.map +7 -0
  145. package/dist/no-modules.d.ts +9 -0
  146. package/dist/no-modules.d.ts.map +1 -0
  147. package/dist/no-modules.js +7819 -0
  148. package/dist/no-modules.js.map +7 -0
  149. package/dist/phase14-catalog-override.d.ts +126 -0
  150. package/dist/phase14-catalog-override.d.ts.map +1 -0
  151. package/dist/phase14-catalog-override.js +155 -0
  152. package/dist/phase14-catalog-override.js.map +7 -0
  153. package/dist/repair-fetch.d.ts +58 -0
  154. package/dist/repair-fetch.d.ts.map +1 -0
  155. package/dist/repair-fetch.js +117 -0
  156. package/dist/repair-fetch.js.map +7 -0
  157. package/dist/sample-combiner.d.ts +182 -0
  158. package/dist/sample-combiner.d.ts.map +1 -0
  159. package/dist/sample-combiner.js +571 -0
  160. package/dist/sample-combiner.js.map +7 -0
  161. package/dist/signaling.d.ts +29 -0
  162. package/dist/signaling.d.ts.map +1 -0
  163. package/dist/signaling.js +232 -0
  164. package/dist/signaling.js.map +7 -0
  165. package/dist/source-auth.d.ts +2 -0
  166. package/dist/source-auth.d.ts.map +1 -0
  167. package/dist/source-auth.js +1220 -0
  168. package/dist/source-auth.js.map +7 -0
  169. package/dist/switching-set-alignment.d.ts +61 -0
  170. package/dist/switching-set-alignment.d.ts.map +1 -0
  171. package/dist/switching-set-alignment.js +85 -0
  172. package/dist/switching-set-alignment.js.map +7 -0
  173. package/dist/timestamp-codec.d.ts +34 -0
  174. package/dist/timestamp-codec.d.ts.map +1 -0
  175. package/dist/timestamp-codec.js +456 -0
  176. package/dist/timestamp-codec.js.map +7 -0
  177. package/dist/track-pipeline-setup.d.ts +72 -0
  178. package/dist/track-pipeline-setup.d.ts.map +1 -0
  179. package/dist/track-pipeline-setup.js +306 -0
  180. package/dist/track-pipeline-setup.js.map +7 -0
  181. package/dist/track-pipeline.d.ts +121 -0
  182. package/dist/track-pipeline.d.ts.map +1 -0
  183. package/dist/track-pipeline.js +229 -0
  184. package/dist/track-pipeline.js.map +7 -0
  185. package/dist/track-session.d.ts +269 -0
  186. package/dist/track-session.d.ts.map +1 -0
  187. package/dist/track-session.js +597 -0
  188. package/dist/track-session.js.map +7 -0
  189. package/dist/transport-pool.d.ts +69 -0
  190. package/dist/transport-pool.d.ts.map +1 -0
  191. package/dist/transport-pool.js +88 -0
  192. package/dist/transport-pool.js.map +7 -0
  193. package/dist/wasm-mfu-reassembler.d.ts +81 -0
  194. package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
  195. package/dist/wasm-mfu-reassembler.js +1915 -0
  196. package/dist/wasm-mfu-reassembler.js.map +7 -0
  197. package/dist/wasm-mmtp-container-parser.d.ts +10 -0
  198. package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
  199. package/dist/wasm-mmtp-container-parser.js +5635 -0
  200. package/dist/wasm-mmtp-container-parser.js.map +7 -0
  201. package/node_modules/@blockcast/fec-worker/README.md +213 -0
  202. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  203. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
  204. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
  205. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
  206. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
  207. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
  208. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
  209. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
  210. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
  211. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
  212. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
  213. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
  214. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
  215. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
  216. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
  217. package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
  218. package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
  219. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
  220. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
  221. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
  222. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
  223. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
  224. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
  225. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
  226. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
  227. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
  228. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
  229. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
  230. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
  231. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
  232. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
  233. package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
  234. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
  235. package/node_modules/@blockcast/fec-worker/package.json +59 -0
  236. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
  237. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
  238. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
  239. package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
  240. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
  241. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
  242. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
  243. package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
  244. package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  245. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  246. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  247. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  248. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  249. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  250. package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  251. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  252. package/node_modules/@blockcast/mmt-base/README.md +120 -0
  253. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  254. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  255. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  256. package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  257. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  258. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  259. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  260. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  261. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  262. package/node_modules/@blockcast/mmt-base/package.json +49 -0
  263. package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  264. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  265. package/node_modules/@blockcast/mmt-fec/README.md +270 -0
  266. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  267. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
  268. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
  269. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
  270. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
  271. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
  272. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
  273. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
  274. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
  275. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
  276. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
  277. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
  278. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
  279. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
  280. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
  281. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
  282. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
  283. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
  284. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
  285. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
  286. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
  287. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
  288. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
  289. package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
  290. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
  291. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
  292. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
  293. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
  294. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
  295. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
  296. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
  297. package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
  298. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
  299. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
  300. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
  301. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
  302. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  324. package/node_modules/@blockcast/mmt-fec/package.json +79 -0
  325. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
  326. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
  327. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
  328. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
  329. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
  330. package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
  331. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
  332. package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
  333. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
  334. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  335. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
  336. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
  351. package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
  352. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
  353. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
  354. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
  356. package/node_modules/@noble/hashes/LICENSE +21 -0
  357. package/node_modules/@noble/hashes/README.md +521 -0
  358. package/node_modules/@noble/hashes/_assert.d.ts +17 -0
  359. package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
  360. package/node_modules/@noble/hashes/_assert.js +18 -0
  361. package/node_modules/@noble/hashes/_assert.js.map +1 -0
  362. package/node_modules/@noble/hashes/_blake.d.ts +14 -0
  363. package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
  364. package/node_modules/@noble/hashes/_blake.js +50 -0
  365. package/node_modules/@noble/hashes/_blake.js.map +1 -0
  366. package/node_modules/@noble/hashes/_md.d.ts +51 -0
  367. package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
  368. package/node_modules/@noble/hashes/_md.js +162 -0
  369. package/node_modules/@noble/hashes/_md.js.map +1 -0
  370. package/node_modules/@noble/hashes/_u64.d.ts +55 -0
  371. package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
  372. package/node_modules/@noble/hashes/_u64.js +90 -0
  373. package/node_modules/@noble/hashes/_u64.js.map +1 -0
  374. package/node_modules/@noble/hashes/argon2.d.ts +32 -0
  375. package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
  376. package/node_modules/@noble/hashes/argon2.js +401 -0
  377. package/node_modules/@noble/hashes/argon2.js.map +1 -0
  378. package/node_modules/@noble/hashes/blake1.d.ts +106 -0
  379. package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
  380. package/node_modules/@noble/hashes/blake1.js +459 -0
  381. package/node_modules/@noble/hashes/blake1.js.map +1 -0
  382. package/node_modules/@noble/hashes/blake2.d.ts +116 -0
  383. package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
  384. package/node_modules/@noble/hashes/blake2.js +420 -0
  385. package/node_modules/@noble/hashes/blake2.js.map +1 -0
  386. package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
  387. package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
  388. package/node_modules/@noble/hashes/blake2b.js +14 -0
  389. package/node_modules/@noble/hashes/blake2b.js.map +1 -0
  390. package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
  391. package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
  392. package/node_modules/@noble/hashes/blake2s.js +24 -0
  393. package/node_modules/@noble/hashes/blake2s.js.map +1 -0
  394. package/node_modules/@noble/hashes/blake3.d.ts +54 -0
  395. package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
  396. package/node_modules/@noble/hashes/blake3.js +255 -0
  397. package/node_modules/@noble/hashes/blake3.js.map +1 -0
  398. package/node_modules/@noble/hashes/crypto.d.ts +2 -0
  399. package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
  400. package/node_modules/@noble/hashes/crypto.js +5 -0
  401. package/node_modules/@noble/hashes/crypto.js.map +1 -0
  402. package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
  403. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
  404. package/node_modules/@noble/hashes/cryptoNode.js +18 -0
  405. package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
  406. package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
  407. package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
  408. package/node_modules/@noble/hashes/eskdf.js +166 -0
  409. package/node_modules/@noble/hashes/eskdf.js.map +1 -0
  410. package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
  411. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
  412. package/node_modules/@noble/hashes/esm/_assert.js +15 -0
  413. package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
  414. package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
  415. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
  416. package/node_modules/@noble/hashes/esm/_blake.js +45 -0
  417. package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
  418. package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
  419. package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
  420. package/node_modules/@noble/hashes/esm/_md.js +155 -0
  421. package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
  422. package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
  423. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
  424. package/node_modules/@noble/hashes/esm/_u64.js +67 -0
  425. package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
  426. package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
  427. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
  428. package/node_modules/@noble/hashes/esm/argon2.js +392 -0
  429. package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
  430. package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
  431. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
  432. package/node_modules/@noble/hashes/esm/blake1.js +452 -0
  433. package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
  434. package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
  435. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
  436. package/node_modules/@noble/hashes/esm/blake2.js +413 -0
  437. package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
  438. package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
  439. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
  440. package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
  441. package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
  442. package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
  443. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
  444. package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
  445. package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
  446. package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
  447. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
  448. package/node_modules/@noble/hashes/esm/blake3.js +251 -0
  449. package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
  450. package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
  451. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
  452. package/node_modules/@noble/hashes/esm/crypto.js +2 -0
  453. package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
  454. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
  455. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
  456. package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
  457. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
  458. package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
  459. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
  460. package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
  461. package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
  462. package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
  463. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
  464. package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
  465. package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
  466. package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
  467. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
  468. package/node_modules/@noble/hashes/esm/hmac.js +86 -0
  469. package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
  470. package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
  471. package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
  472. package/node_modules/@noble/hashes/esm/index.js +33 -0
  473. package/node_modules/@noble/hashes/esm/index.js.map +1 -0
  474. package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
  475. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
  476. package/node_modules/@noble/hashes/esm/legacy.js +281 -0
  477. package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
  478. package/node_modules/@noble/hashes/esm/package.json +10 -0
  479. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
  480. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
  481. package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
  482. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
  483. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
  484. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
  485. package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
  486. package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
  487. package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
  488. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
  489. package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
  490. package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
  491. package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
  492. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
  493. package/node_modules/@noble/hashes/esm/sha1.js +11 -0
  494. package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
  495. package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
  496. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
  497. package/node_modules/@noble/hashes/esm/sha2.js +375 -0
  498. package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
  499. package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
  500. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
  501. package/node_modules/@noble/hashes/esm/sha256.js +20 -0
  502. package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
  503. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
  504. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
  505. package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
  506. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
  507. package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
  508. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
  509. package/node_modules/@noble/hashes/esm/sha3.js +234 -0
  510. package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
  511. package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
  512. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
  513. package/node_modules/@noble/hashes/esm/sha512.js +26 -0
  514. package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
  515. package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
  516. package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
  517. package/node_modules/@noble/hashes/esm/utils.js +281 -0
  518. package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
  519. package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
  520. package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
  521. package/node_modules/@noble/hashes/hkdf.js +88 -0
  522. package/node_modules/@noble/hashes/hkdf.js.map +1 -0
  523. package/node_modules/@noble/hashes/hmac.d.ts +35 -0
  524. package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
  525. package/node_modules/@noble/hashes/hmac.js +91 -0
  526. package/node_modules/@noble/hashes/hmac.js.map +1 -0
  527. package/node_modules/@noble/hashes/index.d.ts +1 -0
  528. package/node_modules/@noble/hashes/index.d.ts.map +1 -0
  529. package/node_modules/@noble/hashes/index.js +33 -0
  530. package/node_modules/@noble/hashes/index.js.map +1 -0
  531. package/node_modules/@noble/hashes/legacy.d.ts +71 -0
  532. package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
  533. package/node_modules/@noble/hashes/legacy.js +287 -0
  534. package/node_modules/@noble/hashes/legacy.js.map +1 -0
  535. package/node_modules/@noble/hashes/package.json +266 -0
  536. package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
  537. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
  538. package/node_modules/@noble/hashes/pbkdf2.js +101 -0
  539. package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
  540. package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
  541. package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
  542. package/node_modules/@noble/hashes/ripemd160.js +16 -0
  543. package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
  544. package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
  545. package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
  546. package/node_modules/@noble/hashes/scrypt.js +232 -0
  547. package/node_modules/@noble/hashes/scrypt.js.map +1 -0
  548. package/node_modules/@noble/hashes/sha1.d.ts +11 -0
  549. package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
  550. package/node_modules/@noble/hashes/sha1.js +14 -0
  551. package/node_modules/@noble/hashes/sha1.js.map +1 -0
  552. package/node_modules/@noble/hashes/sha2.d.ts +159 -0
  553. package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
  554. package/node_modules/@noble/hashes/sha2.js +384 -0
  555. package/node_modules/@noble/hashes/sha2.js.map +1 -0
  556. package/node_modules/@noble/hashes/sha256.d.ts +20 -0
  557. package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
  558. package/node_modules/@noble/hashes/sha256.js +23 -0
  559. package/node_modules/@noble/hashes/sha256.js.map +1 -0
  560. package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
  561. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
  562. package/node_modules/@noble/hashes/sha3-addons.js +402 -0
  563. package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
  564. package/node_modules/@noble/hashes/sha3.d.ts +53 -0
  565. package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
  566. package/node_modules/@noble/hashes/sha3.js +239 -0
  567. package/node_modules/@noble/hashes/sha3.js.map +1 -0
  568. package/node_modules/@noble/hashes/sha512.d.ts +26 -0
  569. package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
  570. package/node_modules/@noble/hashes/sha512.js +29 -0
  571. package/node_modules/@noble/hashes/sha512.js.map +1 -0
  572. package/node_modules/@noble/hashes/src/_assert.ts +22 -0
  573. package/node_modules/@noble/hashes/src/_blake.ts +50 -0
  574. package/node_modules/@noble/hashes/src/_md.ts +176 -0
  575. package/node_modules/@noble/hashes/src/_u64.ts +91 -0
  576. package/node_modules/@noble/hashes/src/argon2.ts +497 -0
  577. package/node_modules/@noble/hashes/src/blake1.ts +534 -0
  578. package/node_modules/@noble/hashes/src/blake2.ts +486 -0
  579. package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
  580. package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
  581. package/node_modules/@noble/hashes/src/blake3.ts +272 -0
  582. package/node_modules/@noble/hashes/src/crypto.ts +9 -0
  583. package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
  584. package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
  585. package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
  586. package/node_modules/@noble/hashes/src/hmac.ts +94 -0
  587. package/node_modules/@noble/hashes/src/index.ts +31 -0
  588. package/node_modules/@noble/hashes/src/legacy.ts +293 -0
  589. package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
  590. package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
  591. package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
  592. package/node_modules/@noble/hashes/src/sha1.ts +10 -0
  593. package/node_modules/@noble/hashes/src/sha2.ts +402 -0
  594. package/node_modules/@noble/hashes/src/sha256.ts +24 -0
  595. package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
  596. package/node_modules/@noble/hashes/src/sha3.ts +258 -0
  597. package/node_modules/@noble/hashes/src/sha512.ts +34 -0
  598. package/node_modules/@noble/hashes/src/utils.ts +395 -0
  599. package/node_modules/@noble/hashes/utils.d.ts +161 -0
  600. package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
  601. package/node_modules/@noble/hashes/utils.js +313 -0
  602. package/node_modules/@noble/hashes/utils.js.map +1 -0
  603. package/package.json +203 -0
  604. package/schemas/catalog.schema.json +283 -0
  605. package/src/align.ts +235 -0
  606. package/src/audio-init-parser.ts +189 -0
  607. package/src/audio-ring-buffer.ts +120 -0
  608. package/src/authored-timing.ts +63 -0
  609. package/src/carp-catalog.ts +776 -0
  610. package/src/catalog-fec-params.ts +167 -0
  611. package/src/catalog-network-source.ts +49 -0
  612. package/src/catalog-validator.ts +34 -0
  613. package/src/cmaf-block-assembler.ts +1058 -0
  614. package/src/cmaf-group-batcher.ts +104 -0
  615. package/src/cmcd-producer.ts +329 -0
  616. package/src/codec-utils.ts +1539 -0
  617. package/src/fec-codec.ts +61 -0
  618. package/src/fec-manager.ts +1939 -0
  619. package/src/fec-starvation-detector.ts +128 -0
  620. package/src/fec-worker-setup.ts +177 -0
  621. package/src/fmp4-completion.ts +47 -0
  622. package/src/fmp4-reader.ts +112 -0
  623. package/src/index.ts +443 -0
  624. package/src/iso-bmff-timing.ts +688 -0
  625. package/src/loc.ts +181 -0
  626. package/src/manifest-auth-plan.ts +107 -0
  627. package/src/media-router.ts +1185 -0
  628. package/src/mfu-reassembler.ts +2842 -0
  629. package/src/mfu-reassembly-policy.ts +134 -0
  630. package/src/mmtp-container-parser.ts +1498 -0
  631. package/src/mmtp-decode-pipeline.ts +315 -0
  632. package/src/mmtp-router.ts +3027 -0
  633. package/src/mmtp-to-cmaf.ts +956 -0
  634. package/src/multicast-auth-catalog.ts +340 -0
  635. package/src/multicast-input.ts +439 -0
  636. package/src/multicast-manager.ts +1503 -0
  637. package/src/multicast-transport.ts +320 -0
  638. package/src/multicast-unwrap.ts +132 -0
  639. package/src/no-modules.ts +20 -0
  640. package/src/phase14-catalog-override.ts +336 -0
  641. package/src/repair-fetch.ts +217 -0
  642. package/src/sample-combiner.ts +846 -0
  643. package/src/signaling.ts +78 -0
  644. package/src/source-auth.ts +1 -0
  645. package/src/switching-set-alignment.ts +109 -0
  646. package/src/timestamp-codec.ts +265 -0
  647. package/src/track-pipeline-setup.ts +189 -0
  648. package/src/track-pipeline.ts +332 -0
  649. package/src/track-session.ts +778 -0
  650. package/src/transport-pool.ts +128 -0
  651. package/src/wasm-mfu-reassembler.ts +372 -0
  652. package/src/wasm-mmtp-container-parser.ts +23 -0
  653. package/test-vectors/align.json +199 -0
  654. package/test-vectors/catalog/README.md +25 -0
  655. package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
  656. package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
  657. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
  658. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
  659. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
  660. package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
  661. package/test-vectors/catalog/negative/network-source-object.json +25 -0
  662. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
  663. package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
  664. package/test-vectors/catalog/negative/track-role-empty.json +16 -0
  665. package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
  666. package/test-vectors/catalog/positive/fec-multicast.json +51 -0
  667. package/test-vectors/catalog/positive/flat-av.json +30 -0
  668. package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
  669. package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
  670. package/test-vectors/catalog/positive/track-role.json +49 -0
  671. package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
  672. package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
  673. package/test-vectors/catalog-multicast-auth-v1.json +26 -0
  674. package/test-vectors/catalog-validation.json +148 -0
  675. package/test-vectors/catalog-validator-public-api.mjs +25 -0
  676. package/test-vectors/generate-source-auth-fixture.mjs +114 -0
  677. package/test-vectors/source-auth-v1.json +61 -0
  678. package/test-vectors/subsample-placement-v1.json +230 -0
@@ -0,0 +1,306 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+
10
+ // src/track-pipeline.ts
11
+ var AUTO_CHAIN = ["multicast", "amt", "moq"];
12
+ var DEFAULT_POLICY = {
13
+ audio: "crossfade",
14
+ video: "wait"
15
+ };
16
+ var _router, _sourceFactory, _tracks, _capabilities, _onTransportChange, _onQualityChange, _TrackPipeline_instances, resolve_fn, resolveTrack_fn, applyTransport_fn, expandPreferred_fn, isAvailable_fn, defaultPolicy_fn;
17
+ var TrackPipeline = class {
18
+ constructor(router) {
19
+ __privateAdd(this, _TrackPipeline_instances);
20
+ __privateAdd(this, _router);
21
+ __privateAdd(this, _sourceFactory, null);
22
+ __privateAdd(this, _tracks, /* @__PURE__ */ new Map());
23
+ __privateAdd(this, _capabilities, null);
24
+ __privateAdd(this, _onTransportChange, null);
25
+ __privateAdd(this, _onQualityChange, null);
26
+ __privateSet(this, _router, router);
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Configuration
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Register a factory that creates TrackSource instances for a given transport.
33
+ * The factory is called when the pipeline resolves a track to a new transport
34
+ * and needs to wire it into the MediaRouter.
35
+ *
36
+ * The factory returns null if the transport is not available for that track
37
+ * (e.g., no multicast socket for this group).
38
+ */
39
+ setSourceFactory(factory) {
40
+ __privateSet(this, _sourceFactory, factory);
41
+ }
42
+ /** Listen for transport change events (after setTrackSource is called). */
43
+ onTransportChange(cb) {
44
+ __privateSet(this, _onTransportChange, cb);
45
+ }
46
+ /** Listen for ABR-driven quality change requests. */
47
+ onQualityChange(cb) {
48
+ __privateSet(this, _onQualityChange, cb);
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Preferences + Capabilities
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Set per-track transport preferences. Triggers resolution if capabilities
55
+ * are already known. Safe to call multiple times (replaces previous prefs).
56
+ */
57
+ setPreferences(prefs) {
58
+ for (const pref of prefs) {
59
+ const existing = __privateGet(this, _tracks).get(pref.trackName);
60
+ __privateGet(this, _tracks).set(pref.trackName, {
61
+ currentTransport: existing?.currentTransport ?? null,
62
+ preference: pref,
63
+ resolution: existing?.resolution ?? null
64
+ });
65
+ }
66
+ for (const name of __privateGet(this, _tracks).keys()) {
67
+ if (!prefs.find((p) => p.trackName === name)) {
68
+ __privateGet(this, _router).clearTrackSource(name);
69
+ __privateGet(this, _tracks).delete(name);
70
+ }
71
+ }
72
+ if (__privateGet(this, _capabilities)) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
73
+ }
74
+ /**
75
+ * Update capability snapshot. Triggers re-resolution against current prefs.
76
+ * Called by the IWA's CapabilityObserver, or by the player's extension bridge
77
+ * on capability change events.
78
+ */
79
+ updateCapabilities(caps) {
80
+ __privateSet(this, _capabilities, caps);
81
+ if (__privateGet(this, _tracks).size > 0) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
82
+ }
83
+ /**
84
+ * Force a specific transport for a track (e.g., user override, debug).
85
+ * Skips the resolver; applies immediately.
86
+ */
87
+ forceTransport(trackName, transport, policy) {
88
+ const state = __privateGet(this, _tracks).get(trackName);
89
+ if (!state) return;
90
+ const effectivePolicy = policy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, state.preference.trackType);
91
+ __privateMethod(this, _TrackPipeline_instances, applyTransport_fn).call(this, trackName, transport, effectivePolicy);
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // ABR Integration
95
+ // ---------------------------------------------------------------------------
96
+ /**
97
+ * Notify the pipeline of an ABR quality change. The pipeline adjusts the
98
+ * transport ceiling and may trigger a transport switch if the new quality
99
+ * exceeds the current transport's capacity.
100
+ */
101
+ notifyQualityChange(trackName, quality) {
102
+ var _a;
103
+ (_a = __privateGet(this, _onQualityChange)) == null ? void 0 : _a.call(this, trackName, quality);
104
+ if (__privateGet(this, _capabilities)) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
105
+ }
106
+ // ---------------------------------------------------------------------------
107
+ // Query
108
+ // ---------------------------------------------------------------------------
109
+ /** Current transport for a track (null if not yet resolved). */
110
+ getTransport(trackName) {
111
+ return __privateGet(this, _tracks).get(trackName)?.currentTransport ?? null;
112
+ }
113
+ /** Current resolution for a track (null if not yet resolved). */
114
+ getResolution(trackName) {
115
+ return __privateGet(this, _tracks).get(trackName)?.resolution ?? null;
116
+ }
117
+ /** All track names managed by this pipeline. */
118
+ get trackNames() {
119
+ return [...__privateGet(this, _tracks).keys()];
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Teardown
123
+ // ---------------------------------------------------------------------------
124
+ dispose() {
125
+ for (const name of __privateGet(this, _tracks).keys()) {
126
+ __privateGet(this, _router).clearTrackSource(name);
127
+ }
128
+ __privateGet(this, _tracks).clear();
129
+ __privateSet(this, _capabilities, null);
130
+ __privateSet(this, _onTransportChange, null);
131
+ __privateSet(this, _onQualityChange, null);
132
+ }
133
+ };
134
+ _router = new WeakMap();
135
+ _sourceFactory = new WeakMap();
136
+ _tracks = new WeakMap();
137
+ _capabilities = new WeakMap();
138
+ _onTransportChange = new WeakMap();
139
+ _onQualityChange = new WeakMap();
140
+ _TrackPipeline_instances = new WeakSet();
141
+ // ---------------------------------------------------------------------------
142
+ // Internal
143
+ // ---------------------------------------------------------------------------
144
+ /** Run the resolver and apply transport changes. */
145
+ resolve_fn = function() {
146
+ const caps = __privateGet(this, _capabilities);
147
+ for (const [trackName, state] of __privateGet(this, _tracks)) {
148
+ const resolution = __privateMethod(this, _TrackPipeline_instances, resolveTrack_fn).call(this, state.preference, caps);
149
+ state.resolution = resolution;
150
+ if (resolution.assignedTransport !== state.currentTransport) {
151
+ __privateMethod(this, _TrackPipeline_instances, applyTransport_fn).call(this, trackName, resolution.assignedTransport, resolution.migrationPolicy);
152
+ }
153
+ }
154
+ };
155
+ /** Pure per-track resolution (inline, no dependency on @blockcast/shared). */
156
+ resolveTrack_fn = function(pref, caps) {
157
+ const chain = __privateMethod(this, _TrackPipeline_instances, expandPreferred_fn).call(this, pref.preferred);
158
+ for (let i = 0; i < chain.length; i++) {
159
+ const transport = chain[i];
160
+ if (!__privateMethod(this, _TrackPipeline_instances, isAvailable_fn).call(this, transport, caps)) continue;
161
+ return {
162
+ trackName: pref.trackName,
163
+ assignedTransport: transport,
164
+ reason: i === 0 ? "preferred" : "fallback",
165
+ migrationPolicy: pref.migrationPolicy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, pref.trackType)
166
+ };
167
+ }
168
+ return {
169
+ trackName: pref.trackName,
170
+ assignedTransport: "moq",
171
+ reason: "capability-limited",
172
+ migrationPolicy: pref.migrationPolicy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, pref.trackType)
173
+ };
174
+ };
175
+ /** Apply a resolved transport to a track via MediaRouter. */
176
+ applyTransport_fn = function(trackName, transport, policy) {
177
+ var _a, _b;
178
+ const state = __privateGet(this, _tracks).get(trackName);
179
+ if (!state) return;
180
+ const prev = state.currentTransport;
181
+ if (transport === "moq") {
182
+ __privateGet(this, _router).clearTrackSource(trackName);
183
+ state.currentTransport = "moq";
184
+ if (prev !== "moq") {
185
+ (_a = __privateGet(this, _onTransportChange)) == null ? void 0 : _a.call(this, trackName, prev, "moq", policy);
186
+ }
187
+ return;
188
+ }
189
+ if (!__privateGet(this, _sourceFactory)) {
190
+ console.warn(`[TrackPipeline] No source factory registered; cannot create source for ${trackName}/${transport}`);
191
+ return;
192
+ }
193
+ const source = __privateGet(this, _sourceFactory).call(this, trackName, transport);
194
+ if (!source) {
195
+ console.warn(`[TrackPipeline] Factory returned null for ${trackName}/${transport}; keeping current transport`);
196
+ return;
197
+ }
198
+ if (prev && prev !== "moq") {
199
+ __privateGet(this, _router).clearTrackSource(trackName);
200
+ }
201
+ __privateGet(this, _router).setTrackSource(trackName, source, { policy });
202
+ state.currentTransport = transport;
203
+ (_b = __privateGet(this, _onTransportChange)) == null ? void 0 : _b.call(this, trackName, prev, transport, policy);
204
+ };
205
+ expandPreferred_fn = function(preferred) {
206
+ const out = [];
207
+ for (const t of preferred) {
208
+ if (t === "auto") out.push(...AUTO_CHAIN);
209
+ else out.push(t);
210
+ }
211
+ return out;
212
+ };
213
+ isAvailable_fn = function(transport, caps) {
214
+ switch (transport) {
215
+ case "multicast":
216
+ return caps.nativeMulticast.confirmed;
217
+ case "amt":
218
+ return caps.amt.available;
219
+ case "moq":
220
+ return caps.moqRelay.reachable;
221
+ }
222
+ };
223
+ defaultPolicy_fn = function(trackType) {
224
+ return DEFAULT_POLICY[trackType];
225
+ };
226
+
227
+ // src/track-pipeline-setup.ts
228
+ function setupTrackPipeline(opts) {
229
+ const { router, multicastManager, tracks, preferences, capabilities, onTransportChange } = opts;
230
+ const trackMap = /* @__PURE__ */ new Map();
231
+ for (const t of tracks) {
232
+ trackMap.set(t.name, t);
233
+ }
234
+ const pipeline = new TrackPipeline(router);
235
+ pipeline.setSourceFactory((trackName, transport) => {
236
+ if (transport === "moq") return null;
237
+ const desc = trackMap.get(trackName);
238
+ if (!desc) {
239
+ console.warn(`[TrackPipeline] Unknown track "${trackName}" \u2014 no descriptor registered`);
240
+ return null;
241
+ }
242
+ return createMulticastTrackSource(multicastManager, desc);
243
+ });
244
+ if (onTransportChange) {
245
+ pipeline.onTransportChange(onTransportChange);
246
+ }
247
+ if (preferences) {
248
+ pipeline.setPreferences(preferences);
249
+ }
250
+ if (capabilities) {
251
+ pipeline.updateCapabilities(capabilities);
252
+ }
253
+ return {
254
+ pipeline,
255
+ dispose: () => pipeline.dispose()
256
+ };
257
+ }
258
+ function createMulticastTrackSource(manager, desc) {
259
+ let frameCb = null;
260
+ let errorCb = null;
261
+ let wired = false;
262
+ return {
263
+ name: desc.name,
264
+ onFrame(cb) {
265
+ frameCb = cb;
266
+ if (!wired) {
267
+ wired = true;
268
+ if (desc.packetId != null) {
269
+ manager.onTrackFrame(desc.packetId, (data, meta) => {
270
+ frameCb?.(data, meta);
271
+ });
272
+ } else if (desc.type === "video") {
273
+ manager.onVideoFrame((data, meta) => {
274
+ frameCb?.(data, meta);
275
+ });
276
+ } else if (desc.type === "audio") {
277
+ manager.onAudioFrame((data, meta) => {
278
+ frameCb?.(data, meta);
279
+ });
280
+ }
281
+ }
282
+ return () => {
283
+ frameCb = null;
284
+ };
285
+ },
286
+ onError(cb) {
287
+ errorCb = cb;
288
+ manager.onFailback(() => {
289
+ errorCb?.();
290
+ });
291
+ return () => {
292
+ errorCb = null;
293
+ };
294
+ },
295
+ dispose() {
296
+ frameCb = null;
297
+ errorCb = null;
298
+ wired = false;
299
+ }
300
+ };
301
+ }
302
+ export {
303
+ TrackPipeline,
304
+ setupTrackPipeline
305
+ };
306
+ //# sourceMappingURL=track-pipeline-setup.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/track-pipeline.ts", "../src/track-pipeline-setup.ts"],
4
+ "sourcesContent": ["/**\n * TrackPipeline \u2014 per-track transport promotion + ABR integration.\n *\n * Coordinates transport promotion (MoQ \u2192 multicast/AMT) on a per-track basis.\n * Shared by both web players (moq-lib, moqtail) and the IWA.\n *\n * Responsibilities:\n * 1. Takes per-track transport preferences and current capabilities\n * 2. Runs the pure resolveTransports() function to get assignments\n * 3. Calls MediaRouter.setTrackSource() per-track with the resolved policy\n * 4. Re-resolves when capabilities change (network switch, multicast detected)\n * 5. Integrates ABR quality changes with track-level subscription management\n *\n * NOT responsible for:\n * - Socket management (that's MulticastTransport / NativeMulticastManager)\n * - FEC decode (that's FECManager)\n * - MMTP parsing (that's MmtpRouter)\n * - Binary MoQ\u2194multicast switching (that's MediaRouter.feedMoq/feedMulticast)\n *\n * Usage:\n * const pipeline = new TrackPipeline(mediaRouter);\n * pipeline.setPreferences(prefs);\n * pipeline.updateCapabilities(caps);\n * // pipeline calls mediaRouter.setTrackSource() automatically\n * // listen for transport changes:\n * pipeline.onTransportChange((trackName, from, to, policy) => { ... });\n */\n\nimport type { MediaRouter, TrackSource } from './media-router.js'\nimport type { MigrationPolicy } from './media-router.js'\n\n// Inline transport types to avoid dep on @blockcast/shared at runtime.\n// These MUST stay compatible with @blockcast/shared/transport-settings.\nexport type TrackTransport = 'multicast' | 'amt' | 'moq' | 'auto'\n\nexport interface TrackTransportPreference {\n trackName: string\n /** Actual media type from catalog (never inferred from name). */\n trackType: 'video' | 'audio'\n preferred: TrackTransport[]\n maxLatencyMs?: number\n migrationPolicy?: MigrationPolicy\n}\n\nexport interface TransportCapabilityReport {\n nativeMulticast: { confirmed: boolean; lastPacketAt?: number }\n amt: { available: boolean; relay?: string; rttMs?: number }\n moqRelay: { reachable: boolean; rttMs?: number }\n networkHint?: 'wifi' | 'cellular' | 'ethernet' | 'unknown'\n observedAt: number\n}\n\nexport interface TrackTransportResolution {\n trackName: string\n assignedTransport: TrackTransport\n reason: 'preferred' | 'fallback' | 'capability-limited' | 'latency-gated' | 'abr-override'\n migrationPolicy: MigrationPolicy\n}\n\n/** Callback for transport change events */\ntype TransportChangeCb = (\n trackName: string,\n from: TrackTransport | null,\n to: TrackTransport,\n policy: MigrationPolicy,\n) => void\n\n/** Callback for ABR quality change requests */\ntype QualityChangeCb = (trackName: string, quality: { name: string; bitrate: number }) => void\n\n/** Factory that creates a TrackSource for a given transport + track */\nexport type TrackSourceFactory = (\n trackName: string,\n transport: TrackTransport,\n) => TrackSource | null\n\n// Default auto expansion: multicast \u2192 amt \u2192 moq\nconst AUTO_CHAIN: Exclude<TrackTransport, 'auto'>[] = ['multicast', 'amt', 'moq']\n\n// Default migration policies\nconst DEFAULT_POLICY: Record<string, MigrationPolicy> = {\n audio: 'crossfade',\n video: 'wait',\n}\n\n/** Per-track state tracked by the pipeline */\ninterface TrackState {\n currentTransport: TrackTransport | null\n preference: TrackTransportPreference\n resolution: TrackTransportResolution | null\n}\n\nexport class TrackPipeline {\n #router: MediaRouter\n #sourceFactory: TrackSourceFactory | null = null\n #tracks = new Map<string, TrackState>()\n #capabilities: TransportCapabilityReport | null = null\n #onTransportChange: TransportChangeCb | null = null\n #onQualityChange: QualityChangeCb | null = null\n\n constructor(router: MediaRouter) {\n this.#router = router\n }\n\n // ---------------------------------------------------------------------------\n // Configuration\n // ---------------------------------------------------------------------------\n\n /**\n * Register a factory that creates TrackSource instances for a given transport.\n * The factory is called when the pipeline resolves a track to a new transport\n * and needs to wire it into the MediaRouter.\n *\n * The factory returns null if the transport is not available for that track\n * (e.g., no multicast socket for this group).\n */\n setSourceFactory(factory: TrackSourceFactory): void {\n this.#sourceFactory = factory\n }\n\n /** Listen for transport change events (after setTrackSource is called). */\n onTransportChange(cb: TransportChangeCb): void {\n this.#onTransportChange = cb\n }\n\n /** Listen for ABR-driven quality change requests. */\n onQualityChange(cb: QualityChangeCb): void {\n this.#onQualityChange = cb\n }\n\n // ---------------------------------------------------------------------------\n // Preferences + Capabilities\n // ---------------------------------------------------------------------------\n\n /**\n * Set per-track transport preferences. Triggers resolution if capabilities\n * are already known. Safe to call multiple times (replaces previous prefs).\n */\n setPreferences(prefs: TrackTransportPreference[]): void {\n for (const pref of prefs) {\n const existing = this.#tracks.get(pref.trackName)\n this.#tracks.set(pref.trackName, {\n currentTransport: existing?.currentTransport ?? null,\n preference: pref,\n resolution: existing?.resolution ?? null,\n })\n }\n // Remove tracks no longer in prefs\n for (const name of this.#tracks.keys()) {\n if (!prefs.find(p => p.trackName === name)) {\n this.#router.clearTrackSource(name)\n this.#tracks.delete(name)\n }\n }\n if (this.#capabilities) this.#resolve()\n }\n\n /**\n * Update capability snapshot. Triggers re-resolution against current prefs.\n * Called by the IWA's CapabilityObserver, or by the player's extension bridge\n * on capability change events.\n */\n updateCapabilities(caps: TransportCapabilityReport): void {\n this.#capabilities = caps\n if (this.#tracks.size > 0) this.#resolve()\n }\n\n /**\n * Force a specific transport for a track (e.g., user override, debug).\n * Skips the resolver; applies immediately.\n */\n forceTransport(trackName: string, transport: TrackTransport, policy?: MigrationPolicy): void {\n const state = this.#tracks.get(trackName)\n if (!state) return\n\n const effectivePolicy = policy ?? this.#defaultPolicy(state.preference.trackType)\n this.#applyTransport(trackName, transport, effectivePolicy)\n }\n\n // ---------------------------------------------------------------------------\n // ABR Integration\n // ---------------------------------------------------------------------------\n\n /**\n * Notify the pipeline of an ABR quality change. The pipeline adjusts the\n * transport ceiling and may trigger a transport switch if the new quality\n * exceeds the current transport's capacity.\n */\n notifyQualityChange(trackName: string, quality: { name: string; bitrate: number }): void {\n this.#onQualityChange?.(trackName, quality)\n // Re-resolve: ABR quality may push a track to a different transport\n if (this.#capabilities) this.#resolve()\n }\n\n // ---------------------------------------------------------------------------\n // Query\n // ---------------------------------------------------------------------------\n\n /** Current transport for a track (null if not yet resolved). */\n getTransport(trackName: string): TrackTransport | null {\n return this.#tracks.get(trackName)?.currentTransport ?? null\n }\n\n /** Current resolution for a track (null if not yet resolved). */\n getResolution(trackName: string): TrackTransportResolution | null {\n return this.#tracks.get(trackName)?.resolution ?? null\n }\n\n /** All track names managed by this pipeline. */\n get trackNames(): string[] {\n return [...this.#tracks.keys()]\n }\n\n // ---------------------------------------------------------------------------\n // Teardown\n // ---------------------------------------------------------------------------\n\n dispose(): void {\n for (const name of this.#tracks.keys()) {\n this.#router.clearTrackSource(name)\n }\n this.#tracks.clear()\n this.#capabilities = null\n this.#onTransportChange = null\n this.#onQualityChange = null\n }\n\n // ---------------------------------------------------------------------------\n // Internal\n // ---------------------------------------------------------------------------\n\n /** Run the resolver and apply transport changes. */\n #resolve(): void {\n const caps = this.#capabilities!\n for (const [trackName, state] of this.#tracks) {\n const resolution = this.#resolveTrack(state.preference, caps)\n state.resolution = resolution\n\n if (resolution.assignedTransport !== state.currentTransport) {\n this.#applyTransport(trackName, resolution.assignedTransport, resolution.migrationPolicy)\n }\n }\n }\n\n /** Pure per-track resolution (inline, no dependency on @blockcast/shared). */\n #resolveTrack(\n pref: TrackTransportPreference,\n caps: TransportCapabilityReport,\n ): TrackTransportResolution {\n const chain = this.#expandPreferred(pref.preferred)\n\n for (let i = 0; i < chain.length; i++) {\n const transport = chain[i]!\n if (!this.#isAvailable(transport, caps)) continue\n\n return {\n trackName: pref.trackName,\n assignedTransport: transport,\n reason: i === 0 ? 'preferred' : 'fallback',\n migrationPolicy: pref.migrationPolicy ?? this.#defaultPolicy(pref.trackType),\n }\n }\n\n // Nothing available \u2014 stay on current or fall back to moq\n return {\n trackName: pref.trackName,\n assignedTransport: 'moq',\n reason: 'capability-limited',\n migrationPolicy: pref.migrationPolicy ?? this.#defaultPolicy(pref.trackType),\n }\n }\n\n /** Apply a resolved transport to a track via MediaRouter. */\n #applyTransport(trackName: string, transport: TrackTransport, policy: MigrationPolicy): void {\n const state = this.#tracks.get(trackName)\n if (!state) return\n\n const prev = state.currentTransport\n\n // MoQ is the default binary path \u2014 clear per-track source to fall back\n if (transport === 'moq') {\n this.#router.clearTrackSource(trackName)\n state.currentTransport = 'moq'\n if (prev !== 'moq') {\n this.#onTransportChange?.(trackName, prev, 'moq', policy)\n }\n return\n }\n\n // For multicast/amt: create a TrackSource via the factory\n if (!this.#sourceFactory) {\n console.warn(`[TrackPipeline] No source factory registered; cannot create source for ${trackName}/${transport}`)\n return\n }\n\n const source = this.#sourceFactory(trackName, transport)\n if (!source) {\n console.warn(`[TrackPipeline] Factory returned null for ${trackName}/${transport}; keeping current transport`)\n return\n }\n\n // Clear previous per-track source (if any) before setting new one\n if (prev && prev !== 'moq') {\n this.#router.clearTrackSource(trackName)\n }\n\n this.#router.setTrackSource(trackName, source, { policy })\n state.currentTransport = transport\n this.#onTransportChange?.(trackName, prev, transport, policy)\n }\n\n #expandPreferred(preferred: TrackTransport[]): Exclude<TrackTransport, 'auto'>[] {\n const out: Exclude<TrackTransport, 'auto'>[] = []\n for (const t of preferred) {\n if (t === 'auto') out.push(...AUTO_CHAIN)\n else out.push(t)\n }\n return out\n }\n\n #isAvailable(transport: Exclude<TrackTransport, 'auto'>, caps: TransportCapabilityReport): boolean {\n switch (transport) {\n case 'multicast': return caps.nativeMulticast.confirmed\n case 'amt': return caps.amt.available\n case 'moq': return caps.moqRelay.reachable\n }\n }\n\n #defaultPolicy(trackType: 'video' | 'audio'): MigrationPolicy {\n return DEFAULT_POLICY[trackType]!\n }\n}\n", "/**\n * Track Pipeline Setup \u2014 shared wiring helper for both players.\n *\n * Provides a one-call setup that connects TrackPipeline to MediaRouter +\n * MulticastManager, including the TrackSourceFactory that adapts multicast\n * frames into the TrackSource interface expected by MediaRouter.setTrackSource().\n *\n * Usage in both moq-lib (element.ts) and moqtail (player.ts):\n *\n * import { setupTrackPipeline, type TrackDescriptor } from '@blockcast/mmt-container';\n *\n * const tracks: TrackDescriptor[] = catalog.getTracks().map(t => ({\n * name: t.name,\n * type: t.role as 'video' | 'audio',\n * packetId: t.packetId,\n * }));\n *\n * const { pipeline, dispose } = setupTrackPipeline({\n * router,\n * multicastManager: mc,\n * tracks,\n * preferences: transportPrefs,\n * capabilities: caps,\n * onTransportChange: (track, from, to) => { ... },\n * });\n */\n\nimport type { MediaRouter, TrackSource, MigrationPolicy, FrameKind } from './media-router.js'\nimport type { MulticastManager } from './multicast-manager.js'\nimport {\n TrackPipeline,\n type TrackTransport,\n type TrackTransportPreference,\n type TransportCapabilityReport,\n} from './track-pipeline.js'\n\nexport { TrackPipeline }\n\n/**\n * Catalog-derived track descriptor. Carries the actual track type\n * so the pipeline never guesses from track names.\n */\nexport interface TrackDescriptor {\n /** Track name as it appears in the catalog / MoQ namespace. */\n name: string\n /** Actual media type from catalog role. */\n type: FrameKind\n /** MMTP packet ID (used for MulticastManager per-track callbacks). */\n packetId?: number\n}\n\nexport interface SetupTrackPipelineOptions {\n /** MediaRouter instance (already wired to decoder backends). */\n router: MediaRouter\n /** MulticastManager instance (already joined or about to join). */\n multicastManager: MulticastManager\n /** Catalog-derived track descriptors. */\n tracks: TrackDescriptor[]\n /** Per-track transport preferences. */\n preferences?: TrackTransportPreference[]\n /** Initial capability snapshot (optional; call pipeline.updateCapabilities later). */\n capabilities?: TransportCapabilityReport\n /** Called after each per-track transport switch. */\n onTransportChange?: (\n trackName: string,\n from: TrackTransport | null,\n to: TrackTransport,\n policy: MigrationPolicy,\n ) => void\n}\n\nexport interface SetupTrackPipelineResult {\n pipeline: TrackPipeline\n /** Call to tear down the pipeline and all per-track sources. */\n dispose: () => void\n}\n\n/**\n * Create and wire a TrackPipeline into existing MediaRouter + MulticastManager.\n *\n * The factory creates TrackSource adapters that:\n * - For 'multicast': subscribe to MulticastManager's per-track frame callbacks\n * and forward through the TrackSource.onFrame interface.\n * - For 'amt': same as multicast (AMT packets flow through MulticastManager.feedPacket).\n * - For 'moq': no per-track source needed (MoQ is the default binary path).\n */\nexport function setupTrackPipeline(opts: SetupTrackPipelineOptions): SetupTrackPipelineResult {\n const { router, multicastManager, tracks, preferences, capabilities, onTransportChange } = opts\n\n // Build lookup: trackName \u2192 TrackDescriptor\n const trackMap = new Map<string, TrackDescriptor>()\n for (const t of tracks) {\n trackMap.set(t.name, t)\n }\n\n const pipeline = new TrackPipeline(router)\n\n // Register the TrackSource factory that bridges MulticastManager \u2192 TrackSource.\n // Uses TrackDescriptor.type and .packetId \u2014 never guesses from track names.\n pipeline.setSourceFactory((trackName: string, transport: TrackTransport): TrackSource | null => {\n if (transport === 'moq') return null // MoQ is default binary path\n\n const desc = trackMap.get(trackName)\n if (!desc) {\n console.warn(`[TrackPipeline] Unknown track \"${trackName}\" \u2014 no descriptor registered`)\n return null\n }\n\n // Both 'multicast' and 'amt' route through MulticastManager\n // (AMT packets arrive via feedPacket \u2192 same MmtpRouter pipeline)\n return createMulticastTrackSource(multicastManager, desc)\n })\n\n if (onTransportChange) {\n pipeline.onTransportChange(onTransportChange)\n }\n\n if (preferences) {\n pipeline.setPreferences(preferences)\n }\n\n if (capabilities) {\n pipeline.updateCapabilities(capabilities)\n }\n\n return {\n pipeline,\n dispose: () => pipeline.dispose(),\n }\n}\n\n/**\n * Create a TrackSource adapter that bridges MulticastManager frame callbacks\n * into the TrackSource interface expected by MediaRouter.setTrackSource().\n *\n * Routes using the track descriptor's type and packetId \u2014 never name-based.\n * If packetId is available, uses the specific onTrackFrame(packetId) callback\n * for precise per-track routing. Falls back to onVideoFrame/onAudioFrame\n * based on descriptor type.\n */\nfunction createMulticastTrackSource(\n manager: MulticastManager,\n desc: TrackDescriptor,\n): TrackSource {\n let frameCb: ((data: Uint8Array, meta: { timestamp: number; keyframe: boolean }) => void) | null = null\n let errorCb: (() => void) | null = null\n let wired = false\n\n return {\n name: desc.name,\n\n onFrame(cb) {\n frameCb = cb\n\n if (!wired) {\n wired = true\n\n if (desc.packetId != null) {\n // Precise per-packetId routing (preferred)\n manager.onTrackFrame(desc.packetId, (data, meta) => {\n frameCb?.(data, meta)\n })\n } else if (desc.type === 'video') {\n manager.onVideoFrame((data, meta) => {\n frameCb?.(data, meta)\n })\n } else if (desc.type === 'audio') {\n manager.onAudioFrame((data, meta) => {\n frameCb?.(data, meta)\n })\n }\n }\n\n return () => { frameCb = null }\n },\n\n onError(cb) {\n errorCb = cb\n manager.onFailback(() => { errorCb?.() })\n return () => { errorCb = null }\n },\n\n dispose() {\n frameCb = null\n errorCb = null\n wired = false\n },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * TrackPipeline — per-track transport promotion + ABR integration.
3
+ *
4
+ * Coordinates transport promotion (MoQ → multicast/AMT) on a per-track basis.
5
+ * Shared by both web players (moq-lib, moqtail) and the IWA.
6
+ *
7
+ * Responsibilities:
8
+ * 1. Takes per-track transport preferences and current capabilities
9
+ * 2. Runs the pure resolveTransports() function to get assignments
10
+ * 3. Calls MediaRouter.setTrackSource() per-track with the resolved policy
11
+ * 4. Re-resolves when capabilities change (network switch, multicast detected)
12
+ * 5. Integrates ABR quality changes with track-level subscription management
13
+ *
14
+ * NOT responsible for:
15
+ * - Socket management (that's MulticastTransport / NativeMulticastManager)
16
+ * - FEC decode (that's FECManager)
17
+ * - MMTP parsing (that's MmtpRouter)
18
+ * - Binary MoQ↔multicast switching (that's MediaRouter.feedMoq/feedMulticast)
19
+ *
20
+ * Usage:
21
+ * const pipeline = new TrackPipeline(mediaRouter);
22
+ * pipeline.setPreferences(prefs);
23
+ * pipeline.updateCapabilities(caps);
24
+ * // pipeline calls mediaRouter.setTrackSource() automatically
25
+ * // listen for transport changes:
26
+ * pipeline.onTransportChange((trackName, from, to, policy) => { ... });
27
+ */
28
+ import type { MediaRouter, TrackSource } from './media-router.js';
29
+ import type { MigrationPolicy } from './media-router.js';
30
+ export type TrackTransport = 'multicast' | 'amt' | 'moq' | 'auto';
31
+ export interface TrackTransportPreference {
32
+ trackName: string;
33
+ /** Actual media type from catalog (never inferred from name). */
34
+ trackType: 'video' | 'audio';
35
+ preferred: TrackTransport[];
36
+ maxLatencyMs?: number;
37
+ migrationPolicy?: MigrationPolicy;
38
+ }
39
+ export interface TransportCapabilityReport {
40
+ nativeMulticast: {
41
+ confirmed: boolean;
42
+ lastPacketAt?: number;
43
+ };
44
+ amt: {
45
+ available: boolean;
46
+ relay?: string;
47
+ rttMs?: number;
48
+ };
49
+ moqRelay: {
50
+ reachable: boolean;
51
+ rttMs?: number;
52
+ };
53
+ networkHint?: 'wifi' | 'cellular' | 'ethernet' | 'unknown';
54
+ observedAt: number;
55
+ }
56
+ export interface TrackTransportResolution {
57
+ trackName: string;
58
+ assignedTransport: TrackTransport;
59
+ reason: 'preferred' | 'fallback' | 'capability-limited' | 'latency-gated' | 'abr-override';
60
+ migrationPolicy: MigrationPolicy;
61
+ }
62
+ /** Callback for transport change events */
63
+ type TransportChangeCb = (trackName: string, from: TrackTransport | null, to: TrackTransport, policy: MigrationPolicy) => void;
64
+ /** Callback for ABR quality change requests */
65
+ type QualityChangeCb = (trackName: string, quality: {
66
+ name: string;
67
+ bitrate: number;
68
+ }) => void;
69
+ /** Factory that creates a TrackSource for a given transport + track */
70
+ export type TrackSourceFactory = (trackName: string, transport: TrackTransport) => TrackSource | null;
71
+ export declare class TrackPipeline {
72
+ #private;
73
+ constructor(router: MediaRouter);
74
+ /**
75
+ * Register a factory that creates TrackSource instances for a given transport.
76
+ * The factory is called when the pipeline resolves a track to a new transport
77
+ * and needs to wire it into the MediaRouter.
78
+ *
79
+ * The factory returns null if the transport is not available for that track
80
+ * (e.g., no multicast socket for this group).
81
+ */
82
+ setSourceFactory(factory: TrackSourceFactory): void;
83
+ /** Listen for transport change events (after setTrackSource is called). */
84
+ onTransportChange(cb: TransportChangeCb): void;
85
+ /** Listen for ABR-driven quality change requests. */
86
+ onQualityChange(cb: QualityChangeCb): void;
87
+ /**
88
+ * Set per-track transport preferences. Triggers resolution if capabilities
89
+ * are already known. Safe to call multiple times (replaces previous prefs).
90
+ */
91
+ setPreferences(prefs: TrackTransportPreference[]): void;
92
+ /**
93
+ * Update capability snapshot. Triggers re-resolution against current prefs.
94
+ * Called by the IWA's CapabilityObserver, or by the player's extension bridge
95
+ * on capability change events.
96
+ */
97
+ updateCapabilities(caps: TransportCapabilityReport): void;
98
+ /**
99
+ * Force a specific transport for a track (e.g., user override, debug).
100
+ * Skips the resolver; applies immediately.
101
+ */
102
+ forceTransport(trackName: string, transport: TrackTransport, policy?: MigrationPolicy): void;
103
+ /**
104
+ * Notify the pipeline of an ABR quality change. The pipeline adjusts the
105
+ * transport ceiling and may trigger a transport switch if the new quality
106
+ * exceeds the current transport's capacity.
107
+ */
108
+ notifyQualityChange(trackName: string, quality: {
109
+ name: string;
110
+ bitrate: number;
111
+ }): void;
112
+ /** Current transport for a track (null if not yet resolved). */
113
+ getTransport(trackName: string): TrackTransport | null;
114
+ /** Current resolution for a track (null if not yet resolved). */
115
+ getResolution(trackName: string): TrackTransportResolution | null;
116
+ /** All track names managed by this pipeline. */
117
+ get trackNames(): string[];
118
+ dispose(): void;
119
+ }
120
+ export {};
121
+ //# sourceMappingURL=track-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-pipeline.d.ts","sourceRoot":"","sources":["../src/track-pipeline.ts"],"names":[],"mappings":"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"}