@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,802 @@
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
+ var __privateWrapper = (obj, member, setter, getter) => ({
10
+ set _(value) {
11
+ __privateSet(obj, member, value, setter);
12
+ },
13
+ get _() {
14
+ return __privateGet(obj, member, getter);
15
+ }
16
+ });
17
+
18
+ // src/align.ts
19
+ function groupIdForTicks(ticks, groupDurationTicks) {
20
+ if (!Number.isInteger(ticks)) {
21
+ throw new Error(
22
+ `[align] groupIdForTicks: ticks must be an integer, got ${ticks}`
23
+ );
24
+ }
25
+ if (!Number.isInteger(groupDurationTicks) || groupDurationTicks <= 0) {
26
+ throw new Error(
27
+ `[align] groupIdForTicks: groupDurationTicks must be a positive integer, got ${groupDurationTicks}`
28
+ );
29
+ }
30
+ if (ticks < 0) return 0;
31
+ return Math.floor(ticks / groupDurationTicks);
32
+ }
33
+ function driftCheck(expected, actual) {
34
+ if (!Number.isInteger(expected) || !Number.isInteger(actual)) {
35
+ throw new Error(
36
+ `[align] driftCheck: both arguments must be integer groupIds, got expected=${expected} actual=${actual}`
37
+ );
38
+ }
39
+ const deltaGroups = actual - expected;
40
+ if (deltaGroups === 0) return { kind: "aligned", deltaGroups: 0 };
41
+ return { kind: "drifted", deltaGroups };
42
+ }
43
+
44
+ // src/track-session.ts
45
+ import { deriveFecInterleaveDepth } from "@blockcast/mmt-fec";
46
+ function computeFecDeliveryWindowMs(config) {
47
+ const fecInterleaveMs = config.interleaveDepthMs;
48
+ const fecK = config.sourceSymbols;
49
+ if (fecInterleaveMs <= 0) {
50
+ throw new Error(
51
+ `[TrackSession] fecInterleaveMs=${fecInterleaveMs}. Derive a positive FEC interleave window from the stream catalog.`
52
+ );
53
+ }
54
+ if (fecK <= 0) {
55
+ throw new Error(
56
+ `[TrackSession] fecK=${fecK}. Derive a positive FEC source-symbol count from the stream catalog.`
57
+ );
58
+ }
59
+ const spansMs = [fecInterleaveMs];
60
+ if (config.mediaUnitsPerSecond && config.mediaUnitsPerSecond > 0) {
61
+ const mediaUnitMs = 1e3 / config.mediaUnitsPerSecond;
62
+ const interleaveUnits = deriveFecInterleaveDepth(fecInterleaveMs, mediaUnitMs);
63
+ const deliverySymbols = fecK + Math.max(0, config.repairSymbols ?? 0);
64
+ spansMs.push(deliverySymbols * interleaveUnits * mediaUnitMs);
65
+ }
66
+ if (config.symbolSize && config.symbolSize > 0 && config.bandwidthBps && config.bandwidthBps > 0) {
67
+ const repairSymbols = Math.max(0, config.repairSymbols ?? 0);
68
+ spansMs.push(
69
+ (fecK + repairSymbols) * config.symbolSize * 8 * 1e3 / config.bandwidthBps
70
+ );
71
+ }
72
+ const coreMs = Math.max(...spansMs);
73
+ const marginMs = config.jitterBufferMs !== void 0 && config.jitterBufferMs >= 0 ? config.jitterBufferMs : fecInterleaveMs;
74
+ return Math.ceil(coreMs) + Math.ceil(marginMs);
75
+ }
76
+
77
+ // src/media-router.ts
78
+ var GROUP_ALIGN_WARN_BUDGET = {
79
+ "invalid-tick-inputs": 1,
80
+ "ticks-formula-threw": 1,
81
+ "invalid-seconds-inputs": 1,
82
+ "sub-nanosecond-duration": 1,
83
+ "media-time-overflow": 1,
84
+ "seconds-formula-threw": 1,
85
+ "callback-threw": 3
86
+ };
87
+ var TrackSourceConflictError = class extends Error {
88
+ constructor(trackName) {
89
+ super(`Track source already assigned for '${trackName}'; call clearTrackSource first`);
90
+ this.trackName = trackName;
91
+ this.name = "TrackSourceConflictError";
92
+ }
93
+ };
94
+ var DEFAULT_CROSSFADE_FRAMES = 10;
95
+ var DEFAULT_MAX_OVERLAY_BUFFER = 128;
96
+ var _active, _multicastVideoKeyed, _multicastAudioReceived, _moqVideoKeyframeEmitted, _requireAudio, _suppressed, _audioFallbackTimer, _audioFallbackMs, _crossfadeFrames, _maxOverlayBuffer, _allowDeltaMulticastTakeoverAfterMoqKeyframe, _repairInFlight, _maxRepairInFlight, _onRepairRequest, _onVideoFrame, _onAudioFrame, _onOverlayFrame, _onSourceSwitch, _sourceSwitchReady, _sourceSwitchToken, _pendingMulticastToken, _pendingMulticastVideo, _pendingMulticastAudio, _trackSources, _trackTypes, _crossfadeCounters, _overlayBoundaryReached, _overlayBuffer, _deltaConfigured, _deltaActive, _deltaWindow, _deltaWindowSize, _deltaFailThresholdRatio, _deltaRecoverThresholdRatio, _deltaProbeIntervalMs, _lastProbeAt, _onDeltaFallbackCb, _onDeltaRecoverCb, _onGroupDrift, _groupAlignWarnCounts, _MediaRouter_instances, skipWithWarning_fn, resolveTicks_fn, resolveSeconds_fn, _moqAudioWarmed, tryActivateMulticast_fn, commitMulticastActivation_fn, rejectMulticastActivation_fn, emitForTrack_fn, handleOverlayFrame_fn;
97
+ var MediaRouter = class {
98
+ constructor(options) {
99
+ __privateAdd(this, _MediaRouter_instances);
100
+ __privateAdd(this, _active, "moq");
101
+ __privateAdd(this, _multicastVideoKeyed, false);
102
+ __privateAdd(this, _multicastAudioReceived, false);
103
+ __privateAdd(this, _moqVideoKeyframeEmitted, false);
104
+ __privateAdd(this, _requireAudio);
105
+ __privateAdd(this, _suppressed, false);
106
+ // true after multicast confirmed — suppresses MoQ
107
+ __privateAdd(this, _audioFallbackTimer, null);
108
+ // Configurable constants (from catalog/FEC config, not magic numbers)
109
+ __privateAdd(this, _audioFallbackMs);
110
+ __privateAdd(this, _crossfadeFrames);
111
+ __privateAdd(this, _maxOverlayBuffer);
112
+ __privateAdd(this, _allowDeltaMulticastTakeoverAfterMoqKeyframe);
113
+ // ── Keyframe repair state ────────────────────────────────────────
114
+ /** Groups currently being repaired — idempotent guard per Pitfall 2 (T-13-01 mitigation) */
115
+ __privateAdd(this, _repairInFlight, /* @__PURE__ */ new Set());
116
+ /** Max concurrent repairs — prevents relay SUBSCRIBE flood (T-13-01 mitigation) */
117
+ __privateAdd(this, _maxRepairInFlight);
118
+ /** Callback to request MoQ subscribe for a specific group (wired by player) */
119
+ __privateAdd(this, _onRepairRequest, null);
120
+ __privateAdd(this, _onVideoFrame, null);
121
+ __privateAdd(this, _onAudioFrame, null);
122
+ __privateAdd(this, _onOverlayFrame, null);
123
+ __privateAdd(this, _onSourceSwitch, null);
124
+ __privateAdd(this, _sourceSwitchReady, null);
125
+ __privateAdd(this, _sourceSwitchToken, 0);
126
+ __privateAdd(this, _pendingMulticastToken, null);
127
+ __privateAdd(this, _pendingMulticastVideo, null);
128
+ __privateAdd(this, _pendingMulticastAudio, null);
129
+ // Per-track source state
130
+ __privateAdd(this, _trackSources, /* @__PURE__ */ new Map());
131
+ // Track type registry: trackName → { type, source }.
132
+ // Init data / inline signaling is authoritative until catalog updates.
133
+ // Priority: 'init' > 'catalog' > 'name' (backward compat fallback).
134
+ __privateAdd(this, _trackTypes, /* @__PURE__ */ new Map());
135
+ // Crossfade state: maps trackName → remaining binary-path frames allowed during window
136
+ __privateAdd(this, _crossfadeCounters, /* @__PURE__ */ new Map());
137
+ // Overlay alignment state
138
+ __privateAdd(this, _overlayBoundaryReached, false);
139
+ __privateAdd(this, _overlayBuffer, []);
140
+ // ── Phase 14: deltaActive state machine (D-11..D-14) ─────────────
141
+ // No timers — state transitions driven entirely by notifyDeltaBlock() callbacks.
142
+ // All thresholds derived from catalog fields or throw at configureDelta() time.
143
+ __privateAdd(this, _deltaConfigured, false);
144
+ __privateAdd(this, _deltaActive, true);
145
+ __privateAdd(this, _deltaWindow, []);
146
+ // ring buffer: true = block failed
147
+ __privateAdd(this, _deltaWindowSize, 0);
148
+ __privateAdd(this, _deltaFailThresholdRatio, 0);
149
+ // P/K
150
+ __privateAdd(this, _deltaRecoverThresholdRatio, 0);
151
+ // (P/K)/2 — hysteresis (D-13)
152
+ __privateAdd(this, _deltaProbeIntervalMs, 0);
153
+ __privateAdd(this, _lastProbeAt, 0);
154
+ __privateAdd(this, _onDeltaFallbackCb, null);
155
+ __privateAdd(this, _onDeltaRecoverCb, null);
156
+ // ── Group-alignment observer (align.ts formula) ──────────────────
157
+ // Observation only — does NOT alter routing. Producers are wired in
158
+ // follow-up PRs; when they land they will call
159
+ // CmcdProducer.incrementSwitchMiscount() + emitSwitchDrift() from the
160
+ // onGroupDrift callback so divergence between packet-stamped groupIds
161
+ // and the shared formula surfaces on `x-bc-switch-drift-us` /
162
+ // `x-bc-switch-miscount`. Canonical Go impl: Blockcast/multicast
163
+ // cmd/caddy/sender/group_align.go (commit 104eeff). Canonical Rust impl:
164
+ // moqtail/moqtail apps/relay/src/server/abr.rs (branch
165
+ // experimental/server-side-abr, commit 39accbf).
166
+ __privateAdd(this, _onGroupDrift, null);
167
+ __privateAdd(this, _groupAlignWarnCounts, /* @__PURE__ */ new Map());
168
+ /**
169
+ * MoQ unicast audio warmup gate. When audio is required, multicast takeover
170
+ * waits until the MoQ unicast audio decoder has emitted at least one frame
171
+ * (so downstream samples-before-takeover counters observe nonzero) or until
172
+ * the existing audio-fallback timer forces the flag true.
173
+ */
174
+ __privateAdd(this, _moqAudioWarmed, false);
175
+ __privateSet(this, _requireAudio, options?.requireAudio ?? true);
176
+ __privateSet(this, _audioFallbackMs, options?.audioFallbackMs ?? 0);
177
+ __privateSet(this, _crossfadeFrames, options?.crossfadeFrames ?? DEFAULT_CROSSFADE_FRAMES);
178
+ __privateSet(this, _maxOverlayBuffer, options?.maxOverlayBuffer ?? DEFAULT_MAX_OVERLAY_BUFFER);
179
+ __privateSet(this, _maxRepairInFlight, options?.maxRepairInFlight ?? 2);
180
+ __privateSet(this, _allowDeltaMulticastTakeoverAfterMoqKeyframe, options?.allowDeltaMulticastTakeoverAfterMoqKeyframe ?? false);
181
+ }
182
+ onVideoFrame(cb) {
183
+ __privateSet(this, _onVideoFrame, cb);
184
+ }
185
+ onAudioFrame(cb) {
186
+ __privateSet(this, _onAudioFrame, cb);
187
+ }
188
+ onOverlayFrame(cb) {
189
+ __privateSet(this, _onOverlayFrame, cb);
190
+ }
191
+ onSourceSwitch(cb) {
192
+ __privateSet(this, _onSourceSwitch, cb);
193
+ }
194
+ onGroupDrift(cb) {
195
+ __privateSet(this, _onGroupDrift, cb);
196
+ }
197
+ notifyGroupBoundary(trackName, packetGroupId, timingOrMediaTimeSec, groupDurationSec) {
198
+ if (!__privateGet(this, _onGroupDrift)) return;
199
+ const resolved = typeof timingOrMediaTimeSec === "object" && timingOrMediaTimeSec !== null ? __privateMethod(this, _MediaRouter_instances, resolveTicks_fn).call(this, trackName, timingOrMediaTimeSec) : __privateMethod(this, _MediaRouter_instances, resolveSeconds_fn).call(this, trackName, timingOrMediaTimeSec, groupDurationSec);
200
+ if (!resolved) return;
201
+ if (resolved.mediaTimeSec === 0 && packetGroupId !== 0) return;
202
+ const expected = resolved.expected;
203
+ const result = driftCheck(expected, packetGroupId);
204
+ if (result.kind === "aligned") return;
205
+ try {
206
+ __privateGet(this, _onGroupDrift).call(this, {
207
+ trackName,
208
+ expectedGroupId: expected,
209
+ actualGroupId: packetGroupId,
210
+ deltaGroups: result.deltaGroups,
211
+ mediaTimeSec: resolved.mediaTimeSec,
212
+ groupDurationSec: resolved.groupDurationSec,
213
+ ...resolved.timing ? { timing: resolved.timing } : {}
214
+ });
215
+ } catch (err) {
216
+ __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "callback-threw", `[MediaRouter] onGroupDrift callback threw (track=${trackName} expected=${expected} actual=${packetGroupId}); continuing: ${err?.message ?? err}`);
217
+ }
218
+ }
219
+ get activeSource() {
220
+ return __privateGet(this, _active);
221
+ }
222
+ // ── Keyframe repair API ──────────────────────────────────────────
223
+ /** Register callback for keyframe repair requests. Player wires this to issue MoQ SUBSCRIBE. */
224
+ onRepairRequest(cb) {
225
+ __privateSet(this, _onRepairRequest, cb);
226
+ }
227
+ /**
228
+ * Request repair for a lost keyframe group. Only fires when activeSource is 'multicast'.
229
+ * Idempotent per groupId — duplicate calls for the same group are suppressed.
230
+ * @param expectedGroupId - The group ID expected but not received
231
+ * @param trackName - Track name for the SUBSCRIBE (e.g. 'video'). Default: 'video'.
232
+ */
233
+ repairLostGroup(expectedGroupId, trackName = "video") {
234
+ var _a;
235
+ if (__privateGet(this, _active) !== "multicast") return;
236
+ if (__privateGet(this, _repairInFlight).has(expectedGroupId)) return;
237
+ if (__privateGet(this, _repairInFlight).size >= __privateGet(this, _maxRepairInFlight)) {
238
+ console.warn(
239
+ `[MediaRouter] max repair in flight (${__privateGet(this, _maxRepairInFlight)}), dropping repair for group ${expectedGroupId}`
240
+ );
241
+ return;
242
+ }
243
+ __privateGet(this, _repairInFlight).add(expectedGroupId);
244
+ (_a = __privateGet(this, _onRepairRequest)) == null ? void 0 : _a.call(this, expectedGroupId, trackName);
245
+ }
246
+ /**
247
+ * Feed a recovered keyframe frame from the repair path.
248
+ * Bypasses source arbitration entirely — goes directly to decoder callbacks.
249
+ * Does NOT change activeSource. Does NOT trigger failbackToMoq.
250
+ */
251
+ feedRepair(data, meta, kind) {
252
+ var _a, _b;
253
+ if (__privateGet(this, _active) !== "multicast") return;
254
+ const routedMeta = { ...meta, source: "repair", recovered: true };
255
+ if (kind === "video") (_a = __privateGet(this, _onVideoFrame)) == null ? void 0 : _a.call(this, data, routedMeta);
256
+ else (_b = __privateGet(this, _onAudioFrame)) == null ? void 0 : _b.call(this, data, routedMeta);
257
+ }
258
+ /**
259
+ * Clear repair-in-flight state for a group (called after repair completes or times out).
260
+ */
261
+ clearRepairInFlight(groupId) {
262
+ __privateGet(this, _repairInFlight).delete(groupId);
263
+ }
264
+ // ── Phase 14: deltaActive state machine API ──────────────────────
265
+ /**
266
+ * Configure the delta-track fallback state machine from catalog parameters.
267
+ *
268
+ * D-11: Thresholds derive from fec.sourceSymbols, fec.repairSymbols, framerate.
269
+ * D-13: Probe interval derives from deltaProbeIntervalMs or interleaveDepthMs*2.
270
+ * CLAUDE.md: error on bad init — throws if required inputs are absent.
271
+ *
272
+ * Calling again resets deltaActive=true and clears the window buffer (stream restart).
273
+ */
274
+ configureDelta(cfg) {
275
+ if (typeof cfg.framerate !== "number" || !Number.isFinite(cfg.framerate) || cfg.framerate <= 0) {
276
+ throw new Error("[MediaRouter] configureDelta: framerate required and must be > 0");
277
+ }
278
+ if (typeof cfg.sourceSymbols !== "number" || cfg.sourceSymbols <= 0) {
279
+ throw new Error("[MediaRouter] configureDelta: sourceSymbols (K_delta) required and must be > 0");
280
+ }
281
+ if (typeof cfg.repairSymbols !== "number" || cfg.repairSymbols <= 0) {
282
+ throw new Error("[MediaRouter] configureDelta: repairSymbols (P_delta) required and must be > 0");
283
+ }
284
+ if (cfg.deltaProbeIntervalMs === void 0 && cfg.interleaveDepthMs === void 0) {
285
+ throw new Error(
286
+ "[MediaRouter] configureDelta: either deltaProbeIntervalMs or interleaveDepthMs required for probe interval derivation"
287
+ );
288
+ }
289
+ __privateSet(this, _deltaWindowSize, cfg.deltaFailWindowBlocks ?? Math.ceil(cfg.framerate));
290
+ __privateSet(this, _deltaFailThresholdRatio, cfg.repairSymbols / cfg.sourceSymbols);
291
+ __privateSet(this, _deltaRecoverThresholdRatio, __privateGet(this, _deltaFailThresholdRatio) / 2);
292
+ __privateSet(this, _deltaProbeIntervalMs, cfg.deltaProbeIntervalMs ?? computeFecDeliveryWindowMs({
293
+ interleaveDepthMs: cfg.interleaveDepthMs,
294
+ sourceSymbols: cfg.sourceSymbols
295
+ }));
296
+ __privateSet(this, _deltaActive, true);
297
+ __privateSet(this, _deltaWindow, []);
298
+ __privateSet(this, _lastProbeAt, 0);
299
+ __privateSet(this, _deltaConfigured, true);
300
+ }
301
+ /**
302
+ * Notify the state machine of a completed FEC block for the delta track.
303
+ *
304
+ * @param failed - true if the block was unrecoverable (FEC failure)
305
+ * @param nowMs - caller-injected monotonic ms (no internal timer — D-13, CLAUDE.md)
306
+ *
307
+ * If configureDelta() has not been called, this is a silent no-op (pre-catalog state).
308
+ */
309
+ notifyDeltaBlock(failed, nowMs) {
310
+ var _a, _b;
311
+ if (!__privateGet(this, _deltaConfigured)) return;
312
+ __privateGet(this, _deltaWindow).push(failed);
313
+ if (__privateGet(this, _deltaWindow).length > __privateGet(this, _deltaWindowSize)) {
314
+ __privateGet(this, _deltaWindow).shift();
315
+ }
316
+ if (__privateGet(this, _deltaWindow).length < __privateGet(this, _deltaWindowSize)) return;
317
+ const failedCount = __privateGet(this, _deltaWindow).filter((x) => x).length;
318
+ const ratio = failedCount / __privateGet(this, _deltaWindowSize);
319
+ if (__privateGet(this, _deltaActive)) {
320
+ if (ratio > __privateGet(this, _deltaFailThresholdRatio)) {
321
+ __privateSet(this, _deltaActive, false);
322
+ __privateSet(this, _lastProbeAt, nowMs);
323
+ (_a = __privateGet(this, _onDeltaFallbackCb)) == null ? void 0 : _a.call(this);
324
+ }
325
+ } else {
326
+ if (nowMs - __privateGet(this, _lastProbeAt) >= __privateGet(this, _deltaProbeIntervalMs) && ratio < __privateGet(this, _deltaRecoverThresholdRatio)) {
327
+ __privateSet(this, _deltaActive, true);
328
+ __privateSet(this, _lastProbeAt, nowMs);
329
+ (_b = __privateGet(this, _onDeltaRecoverCb)) == null ? void 0 : _b.call(this);
330
+ }
331
+ }
332
+ }
333
+ /** Register callback fired when delta track degrades past threshold (D-12). */
334
+ onDeltaFallback(cb) {
335
+ __privateSet(this, _onDeltaFallbackCb, cb);
336
+ }
337
+ /** Register callback fired when delta track recovers below recovery threshold (D-13). */
338
+ onDeltaRecover(cb) {
339
+ __privateSet(this, _onDeltaRecoverCb, cb);
340
+ }
341
+ /** Whether the delta track is currently considered healthy (true = active). */
342
+ get deltaActive() {
343
+ return __privateGet(this, _deltaActive);
344
+ }
345
+ // ── Test-visible accessors for threshold verification ────────────
346
+ // These expose internal derived values for test assertions (Tests 3,4,5,6,7).
347
+ // Prefixed with 'delta' to namespace clearly within the public API surface.
348
+ /** Derived window size — exposed for test assertions (Test 3, 4). */
349
+ get deltaWindowSize() {
350
+ return __privateGet(this, _deltaWindowSize);
351
+ }
352
+ /** Derived fail threshold ratio (P/K) — exposed for test assertions (Test 6). */
353
+ get deltaFailThresholdRatio() {
354
+ return __privateGet(this, _deltaFailThresholdRatio);
355
+ }
356
+ /** Derived recovery threshold ratio ((P/K)/2) — exposed for test assertions (Test 7). */
357
+ get deltaRecoverThresholdRatio() {
358
+ return __privateGet(this, _deltaRecoverThresholdRatio);
359
+ }
360
+ /** Derived probe interval ms — exposed for test assertions (Test 5a). */
361
+ get deltaProbeIntervalMs() {
362
+ return __privateGet(this, _deltaProbeIntervalMs);
363
+ }
364
+ /**
365
+ * Register a track name → type mapping from catalog.
366
+ * Catalog is the default authority. Init data / inline signaling
367
+ * takes precedence until the next catalog update.
368
+ */
369
+ registerTrackType(trackName, type) {
370
+ __privateGet(this, _trackTypes).set(trackName, { type, source: "catalog" });
371
+ }
372
+ /**
373
+ * Register a track name → type from init data / inline signaling (MMTP FT=0).
374
+ * Authoritative until the next catalog update per §5.3.
375
+ * Does NOT overwrite an existing catalog registration.
376
+ */
377
+ registerTrackTypeFromInit(trackName, type) {
378
+ const existing = __privateGet(this, _trackTypes).get(trackName);
379
+ if (existing?.source === "catalog") return;
380
+ __privateGet(this, _trackTypes).set(trackName, { type, source: "init" });
381
+ }
382
+ /**
383
+ * Assign a per-track source. Frames from this source bypass the binary
384
+ * MoQ↔multicast switching for this track only.
385
+ *
386
+ * Throws TrackSourceConflictError if a source is already assigned for this
387
+ * track without a clearTrackSource() in between.
388
+ */
389
+ setTrackSource(trackName, source, opts) {
390
+ if (__privateGet(this, _trackSources).has(trackName)) {
391
+ throw new TrackSourceConflictError(trackName);
392
+ }
393
+ const effectivePolicy = opts?.policy ?? (opts?.overlay ? "wait" : void 0);
394
+ if (effectivePolicy === "crossfade") {
395
+ __privateGet(this, _crossfadeCounters).set(trackName, __privateGet(this, _crossfadeFrames));
396
+ }
397
+ const record = {
398
+ source,
399
+ unsubscribeFrame: () => {
400
+ },
401
+ emitCount: 0
402
+ };
403
+ record.unsubscribeFrame = source.onFrame((data, meta) => {
404
+ record.emitCount++;
405
+ if (effectivePolicy === "wait") {
406
+ __privateMethod(this, _MediaRouter_instances, handleOverlayFrame_fn).call(this, data, meta);
407
+ } else {
408
+ __privateMethod(this, _MediaRouter_instances, emitForTrack_fn).call(this, trackName, data, meta);
409
+ }
410
+ });
411
+ if (source.onError) {
412
+ record.unsubscribeError = source.onError(() => {
413
+ this.clearTrackSource(trackName);
414
+ });
415
+ }
416
+ __privateGet(this, _trackSources).set(trackName, record);
417
+ }
418
+ /**
419
+ * Remove the per-track source for the given track.
420
+ * Binary switching resumes for this track after this call.
421
+ */
422
+ clearTrackSource(trackName) {
423
+ const record = __privateGet(this, _trackSources).get(trackName);
424
+ if (!record) return;
425
+ record.unsubscribeFrame();
426
+ record.unsubscribeError?.();
427
+ record.source.dispose?.();
428
+ __privateGet(this, _trackSources).delete(trackName);
429
+ __privateGet(this, _crossfadeCounters).delete(trackName);
430
+ const reg = __privateGet(this, _trackTypes).get(trackName);
431
+ const isMedia = reg?.type === "video" || reg?.type === "audio" || reg === void 0 && (trackName === "video" || trackName === "audio");
432
+ if (!isMedia) {
433
+ __privateSet(this, _overlayBoundaryReached, false);
434
+ __privateSet(this, _overlayBuffer, []);
435
+ }
436
+ }
437
+ /**
438
+ * Signal that a FEC block boundary has been reached on the base track.
439
+ * Overlay tracks waiting for alignment flush their buffered frames now.
440
+ */
441
+ notifyFecBlockBoundary() {
442
+ var _a;
443
+ if (__privateGet(this, _overlayBoundaryReached)) return;
444
+ __privateSet(this, _overlayBoundaryReached, true);
445
+ const buffered = __privateGet(this, _overlayBuffer).splice(0);
446
+ for (const { data, meta } of buffered) {
447
+ (_a = __privateGet(this, _onOverlayFrame)) == null ? void 0 : _a.call(this, data, meta);
448
+ }
449
+ }
450
+ /**
451
+ * Return the number of frames emitted from the per-track source for a given
452
+ * track. Used in test-mode to verify per-track routing histogram.
453
+ * Returns 0 if no per-track source is active for the track.
454
+ */
455
+ trackSourceEmitCount(trackName) {
456
+ return __privateGet(this, _trackSources).get(trackName)?.emitCount ?? 0;
457
+ }
458
+ /** Feed a frame from the MoQ path. Suppressed when multicast is active OR a per-track source owns this track. */
459
+ feedMoq(data, meta, kind) {
460
+ var _a, _b;
461
+ if (__privateGet(this, _trackSources).has(kind)) {
462
+ const remaining = __privateGet(this, _crossfadeCounters).get(kind);
463
+ if (remaining && remaining > 0) {
464
+ const next = remaining - 1;
465
+ if (next === 0) {
466
+ __privateGet(this, _crossfadeCounters).delete(kind);
467
+ } else {
468
+ __privateGet(this, _crossfadeCounters).set(kind, next);
469
+ }
470
+ } else {
471
+ return;
472
+ }
473
+ }
474
+ if (__privateGet(this, _suppressed)) return;
475
+ const routedMeta = { ...meta, source: "moq" };
476
+ if (kind === "video") (_a = __privateGet(this, _onVideoFrame)) == null ? void 0 : _a.call(this, data, routedMeta);
477
+ else (_b = __privateGet(this, _onAudioFrame)) == null ? void 0 : _b.call(this, data, routedMeta);
478
+ }
479
+ /** Feed a frame from the multicast path. Video waits for keyframe before activating. */
480
+ feedMulticast(data, meta, kind) {
481
+ var _a, _b;
482
+ if (__privateGet(this, _trackSources).has(kind)) {
483
+ const remaining = __privateGet(this, _crossfadeCounters).get(kind);
484
+ if (remaining && remaining > 0) {
485
+ const next = remaining - 1;
486
+ if (next === 0) {
487
+ __privateGet(this, _crossfadeCounters).delete(kind);
488
+ } else {
489
+ __privateGet(this, _crossfadeCounters).set(kind, next);
490
+ }
491
+ } else {
492
+ return;
493
+ }
494
+ }
495
+ if (kind === "video") {
496
+ if (!__privateGet(this, _multicastVideoKeyed)) {
497
+ const moqSeededDelta = !meta.keyframe && __privateGet(this, _allowDeltaMulticastTakeoverAfterMoqKeyframe) && __privateGet(this, _moqVideoKeyframeEmitted);
498
+ if (!meta.keyframe && !moqSeededDelta) return;
499
+ __privateSet(this, _multicastVideoKeyed, true);
500
+ const pendingMeta = { ...meta, source: "multicast" };
501
+ if (!moqSeededDelta) pendingMeta.sourceDiscontinuity = true;
502
+ __privateSet(this, _pendingMulticastVideo, {
503
+ data: data.slice(),
504
+ meta: pendingMeta
505
+ });
506
+ if (__privateGet(this, _requireAudio) && __privateGet(this, _audioFallbackMs) > 0 && !__privateGet(this, _multicastAudioReceived) && !__privateGet(this, _audioFallbackTimer)) {
507
+ __privateSet(this, _audioFallbackTimer, setTimeout(() => {
508
+ if (!__privateGet(this, _multicastAudioReceived) && __privateGet(this, _active) !== "multicast") {
509
+ __privateSet(this, _multicastAudioReceived, true);
510
+ __privateSet(this, _moqAudioWarmed, true);
511
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
512
+ }
513
+ }, __privateGet(this, _audioFallbackMs)));
514
+ }
515
+ } else if (__privateGet(this, _active) !== "multicast") {
516
+ if (meta.keyframe) {
517
+ __privateSet(this, _pendingMulticastVideo, {
518
+ data: data.slice(),
519
+ meta: { ...meta, source: "multicast", sourceDiscontinuity: true }
520
+ });
521
+ }
522
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
523
+ return;
524
+ }
525
+ if (__privateGet(this, _active) === "multicast") (_a = __privateGet(this, _onVideoFrame)) == null ? void 0 : _a.call(this, data, { ...meta, source: "multicast" });
526
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
527
+ } else {
528
+ __privateSet(this, _multicastAudioReceived, true);
529
+ if (__privateGet(this, _audioFallbackTimer)) {
530
+ clearTimeout(__privateGet(this, _audioFallbackTimer));
531
+ __privateSet(this, _audioFallbackTimer, null);
532
+ }
533
+ if (!__privateGet(this, _moqAudioWarmed)) __privateSet(this, _moqAudioWarmed, true);
534
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
535
+ if (__privateGet(this, _active) === "multicast") {
536
+ (_b = __privateGet(this, _onAudioFrame)) == null ? void 0 : _b.call(this, data, { ...meta, source: "multicast" });
537
+ } else if (__privateGet(this, _pendingMulticastToken) !== null) {
538
+ __privateSet(this, _pendingMulticastAudio, { data: data.slice(), meta: { ...meta, source: "multicast" } });
539
+ }
540
+ }
541
+ }
542
+ /** Called by the player when the MoQ unicast audio decoder emits first frame. */
543
+ notifyMoqAudioEmit() {
544
+ if (__privateGet(this, _moqAudioWarmed)) return;
545
+ __privateSet(this, _moqAudioWarmed, true);
546
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
547
+ }
548
+ /**
549
+ * Called by the player after a MoQ video keyframe has reached the active
550
+ * decoder path. Used only by MSE/MMTP continuity switching; decoder-reset
551
+ * paths leave allowDeltaMulticastTakeoverAfterMoqKeyframe disabled.
552
+ */
553
+ notifyMoqVideoKeyframeEmit() {
554
+ __privateSet(this, _moqVideoKeyframeEmitted, true);
555
+ __privateMethod(this, _MediaRouter_instances, tryActivateMulticast_fn).call(this);
556
+ }
557
+ /** Switch back to MoQ immediately (called on multicast failback). */
558
+ failbackToMoq() {
559
+ var _a;
560
+ const hadPendingMulticast = __privateGet(this, _pendingMulticastToken) !== null;
561
+ if (__privateGet(this, _active) === "moq" && !hadPendingMulticast) return;
562
+ ++__privateWrapper(this, _sourceSwitchToken)._;
563
+ __privateSet(this, _active, "moq");
564
+ __privateSet(this, _suppressed, false);
565
+ __privateSet(this, _pendingMulticastToken, null);
566
+ __privateSet(this, _pendingMulticastVideo, null);
567
+ __privateSet(this, _pendingMulticastAudio, null);
568
+ __privateSet(this, _sourceSwitchReady, null);
569
+ __privateSet(this, _multicastVideoKeyed, false);
570
+ __privateSet(this, _multicastAudioReceived, false);
571
+ __privateSet(this, _moqVideoKeyframeEmitted, false);
572
+ if (__privateGet(this, _audioFallbackTimer)) {
573
+ clearTimeout(__privateGet(this, _audioFallbackTimer));
574
+ __privateSet(this, _audioFallbackTimer, null);
575
+ }
576
+ (_a = __privateGet(this, _onSourceSwitch)) == null ? void 0 : _a.call(this, "moq");
577
+ }
578
+ /** Dispose timers and per-track sources. Call on teardown to prevent
579
+ * stale timer callbacks firing into garbage-collected closures (WR-03). */
580
+ dispose() {
581
+ if (__privateGet(this, _audioFallbackTimer)) {
582
+ clearTimeout(__privateGet(this, _audioFallbackTimer));
583
+ __privateSet(this, _audioFallbackTimer, null);
584
+ }
585
+ for (const [name] of __privateGet(this, _trackSources)) {
586
+ this.clearTrackSource(name);
587
+ }
588
+ }
589
+ };
590
+ _active = new WeakMap();
591
+ _multicastVideoKeyed = new WeakMap();
592
+ _multicastAudioReceived = new WeakMap();
593
+ _moqVideoKeyframeEmitted = new WeakMap();
594
+ _requireAudio = new WeakMap();
595
+ _suppressed = new WeakMap();
596
+ _audioFallbackTimer = new WeakMap();
597
+ _audioFallbackMs = new WeakMap();
598
+ _crossfadeFrames = new WeakMap();
599
+ _maxOverlayBuffer = new WeakMap();
600
+ _allowDeltaMulticastTakeoverAfterMoqKeyframe = new WeakMap();
601
+ _repairInFlight = new WeakMap();
602
+ _maxRepairInFlight = new WeakMap();
603
+ _onRepairRequest = new WeakMap();
604
+ _onVideoFrame = new WeakMap();
605
+ _onAudioFrame = new WeakMap();
606
+ _onOverlayFrame = new WeakMap();
607
+ _onSourceSwitch = new WeakMap();
608
+ _sourceSwitchReady = new WeakMap();
609
+ _sourceSwitchToken = new WeakMap();
610
+ _pendingMulticastToken = new WeakMap();
611
+ _pendingMulticastVideo = new WeakMap();
612
+ _pendingMulticastAudio = new WeakMap();
613
+ _trackSources = new WeakMap();
614
+ _trackTypes = new WeakMap();
615
+ _crossfadeCounters = new WeakMap();
616
+ _overlayBoundaryReached = new WeakMap();
617
+ _overlayBuffer = new WeakMap();
618
+ _deltaConfigured = new WeakMap();
619
+ _deltaActive = new WeakMap();
620
+ _deltaWindow = new WeakMap();
621
+ _deltaWindowSize = new WeakMap();
622
+ _deltaFailThresholdRatio = new WeakMap();
623
+ _deltaRecoverThresholdRatio = new WeakMap();
624
+ _deltaProbeIntervalMs = new WeakMap();
625
+ _lastProbeAt = new WeakMap();
626
+ _onDeltaFallbackCb = new WeakMap();
627
+ _onDeltaRecoverCb = new WeakMap();
628
+ _onGroupDrift = new WeakMap();
629
+ _groupAlignWarnCounts = new WeakMap();
630
+ _MediaRouter_instances = new WeakSet();
631
+ /**
632
+ * Warn at most `GROUP_ALIGN_WARN_BUDGET[reason]` times **per reason**, across
633
+ * every skip and post-emit failure on the drift path.
634
+ *
635
+ * Note the two call shapes: the resolvers call this *instead of* computing a
636
+ * groupId, and return its `null` to skip the drift check; the `onGroupDrift`
637
+ * catch calls it after the check already ran and the event was already
638
+ * emitted, so there only the warn is coalesced and the `null` is discarded.
639
+ *
640
+ * Keyed on a short stable `reason` tag, NOT on the formatted message: the
641
+ * messages interpolate track name and operand values, so message-keying
642
+ * would hand a malformed stream a fresh warn slot on every boundary — the
643
+ * log flood this coalescing exists to prevent.
644
+ *
645
+ * Per-reason rather than one shared boolean (PCL-2211, #329 review): the
646
+ * budget is never reset — not by `dispose()`, not on source switch — so a
647
+ * single flag means the FIRST malformed boundary of a long-running stream
648
+ * permanently silences every later, genuinely different failure mode. The
649
+ * throw/overflow diagnostics carry the operand values (`ticks=`, `durTicks=`,
650
+ * `err.message`) an incident responder actually needs, and under one shared
651
+ * flag those are precisely the ones most likely to be already spent by an
652
+ * unrelated NaN at catalog load.
653
+ *
654
+ * A closed, bounded set of reasons times a small per-reason budget is still
655
+ * bounded, so this cannot flood. See `GROUP_ALIGN_WARN_BUDGET` for why the
656
+ * budget is not uniform.
657
+ */
658
+ skipWithWarning_fn = function(reason, message) {
659
+ const seen = __privateGet(this, _groupAlignWarnCounts).get(reason) ?? 0;
660
+ if (seen < GROUP_ALIGN_WARN_BUDGET[reason]) {
661
+ __privateGet(this, _groupAlignWarnCounts).set(reason, seen + 1);
662
+ console.warn(message);
663
+ }
664
+ return null;
665
+ };
666
+ /**
667
+ * Exact path: integers straight from the catalog, no rounding. `mediaTimeSec`
668
+ * / `groupDurationSec` are derived for reporting only and never feed the
669
+ * groupId computation.
670
+ */
671
+ resolveTicks_fn = function(trackName, timing) {
672
+ const { mediaTimeTicks, groupDurationTicks, timescale } = timing;
673
+ if (!Number.isInteger(mediaTimeTicks) || !Number.isInteger(groupDurationTicks) || groupDurationTicks <= 0 || !Number.isInteger(timescale) || timescale <= 0) {
674
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "invalid-tick-inputs", `[MediaRouter] notifyGroupBoundary invalid tick inputs (track=${trackName} mediaTimeTicks=${mediaTimeTicks} groupDurationTicks=${groupDurationTicks} timescale=${timescale}); skipping drift check. Pre-validate at catalog load time.`);
675
+ }
676
+ try {
677
+ return {
678
+ expected: groupIdForTicks(mediaTimeTicks, groupDurationTicks),
679
+ mediaTimeSec: mediaTimeTicks / timescale,
680
+ groupDurationSec: groupDurationTicks / timescale,
681
+ // Snapshot, not the caller's reference: a producer that reuses one
682
+ // scratch object per boundary would otherwise retroactively mutate
683
+ // every GroupDriftEvent it has already emitted. Three integers.
684
+ timing: { mediaTimeTicks, groupDurationTicks, timescale }
685
+ };
686
+ } catch (err) {
687
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "ticks-formula-threw", `[MediaRouter] notifyGroupBoundary: groupIdForTicks threw (track=${trackName} mediaTimeTicks=${mediaTimeTicks} groupDurationTicks=${groupDurationTicks}); skipping drift check: ${err?.message ?? err}`);
688
+ }
689
+ };
690
+ /**
691
+ * Legacy seconds path. Quantizes to a synthetic 1e9 Hz timescale — the exact
692
+ * behaviour the deprecated `align.groupIdFor` wrapper had, reproduced here so
693
+ * that wrapper has no non-test callers left and can be deleted (BLO-21176).
694
+ *
695
+ * Inherits that wrapper's ns-rounding error; see the `@deprecated` overload.
696
+ * Delete this branch once every caller passes ticks.
697
+ */
698
+ resolveSeconds_fn = function(trackName, mediaTimeSec, groupDurationSec) {
699
+ if (!Number.isFinite(groupDurationSec) || groupDurationSec <= 0 || !Number.isFinite(mediaTimeSec)) {
700
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "invalid-seconds-inputs", `[MediaRouter] notifyGroupBoundary invalid inputs (track=${trackName} mediaTimeSec=${mediaTimeSec} groupDurationSec=${groupDurationSec}); skipping drift check. Pre-validate at catalog load time.`);
701
+ }
702
+ const TS = 1e9;
703
+ const ticks = mediaTimeSec < 0 ? 0 : Math.round(mediaTimeSec * TS);
704
+ const durTicks = Math.round(groupDurationSec * TS);
705
+ if (durTicks <= 0) {
706
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "sub-nanosecond-duration", `[MediaRouter] notifyGroupBoundary: groupDurationSec=${groupDurationSec} rounds to <1 tick at 1e9 Hz (track=${trackName}); skipping drift check. Pass GroupBoundaryTicks for sub-nanosecond durations.`);
707
+ }
708
+ if (!Number.isSafeInteger(ticks)) {
709
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "media-time-overflow", `[MediaRouter] notifyGroupBoundary: mediaTimeSec=${mediaTimeSec} overflows safe-integer ticks at 1e9 Hz (>~104 days, track=${trackName}); skipping drift check. Pass GroupBoundaryTicks with the catalog timescale.`);
710
+ }
711
+ try {
712
+ return {
713
+ expected: groupIdForTicks(ticks, durTicks),
714
+ mediaTimeSec,
715
+ groupDurationSec
716
+ };
717
+ } catch (err) {
718
+ return __privateMethod(this, _MediaRouter_instances, skipWithWarning_fn).call(this, "seconds-formula-threw", `[MediaRouter] notifyGroupBoundary: groupIdForTicks threw (track=${trackName} mediaTimeSec=${mediaTimeSec} groupDurationSec=${groupDurationSec} ticks=${ticks} durTicks=${durTicks}); skipping drift check: ${err?.message ?? err}`);
719
+ }
720
+ };
721
+ _moqAudioWarmed = new WeakMap();
722
+ tryActivateMulticast_fn = function() {
723
+ var _a;
724
+ if (__privateGet(this, _active) === "multicast") return;
725
+ if (__privateGet(this, _pendingMulticastToken) !== null) return;
726
+ if (!__privateGet(this, _multicastVideoKeyed)) return;
727
+ if (__privateGet(this, _requireAudio) && !__privateGet(this, _multicastAudioReceived)) return;
728
+ if (__privateGet(this, _requireAudio) && !__privateGet(this, _moqAudioWarmed)) return;
729
+ const token = ++__privateWrapper(this, _sourceSwitchToken)._;
730
+ const maybeReady = (_a = __privateGet(this, _onSourceSwitch)) == null ? void 0 : _a.call(this, "multicast");
731
+ if (!maybeReady || typeof maybeReady.then !== "function") {
732
+ __privateMethod(this, _MediaRouter_instances, commitMulticastActivation_fn).call(this, token);
733
+ return;
734
+ }
735
+ const ready = Promise.resolve(maybeReady);
736
+ __privateSet(this, _pendingMulticastToken, token);
737
+ __privateSet(this, _sourceSwitchReady, ready);
738
+ void ready.then(
739
+ () => __privateMethod(this, _MediaRouter_instances, commitMulticastActivation_fn).call(this, token),
740
+ (err) => __privateMethod(this, _MediaRouter_instances, rejectMulticastActivation_fn).call(this, token, err)
741
+ ).finally(() => {
742
+ if (__privateGet(this, _sourceSwitchReady) === ready) __privateSet(this, _sourceSwitchReady, null);
743
+ });
744
+ };
745
+ commitMulticastActivation_fn = function(token) {
746
+ var _a, _b;
747
+ if (token !== __privateGet(this, _sourceSwitchToken)) return;
748
+ __privateSet(this, _active, "multicast");
749
+ __privateSet(this, _suppressed, true);
750
+ __privateSet(this, _pendingMulticastToken, null);
751
+ const video = __privateGet(this, _pendingMulticastVideo);
752
+ __privateSet(this, _pendingMulticastVideo, null);
753
+ const audio = __privateGet(this, _pendingMulticastAudio);
754
+ __privateSet(this, _pendingMulticastAudio, null);
755
+ if (video) (_a = __privateGet(this, _onVideoFrame)) == null ? void 0 : _a.call(this, video.data, video.meta);
756
+ if (audio) (_b = __privateGet(this, _onAudioFrame)) == null ? void 0 : _b.call(this, audio.data, audio.meta);
757
+ };
758
+ rejectMulticastActivation_fn = function(token, err) {
759
+ if (token !== __privateGet(this, _sourceSwitchToken)) return;
760
+ if (__privateGet(this, _pendingMulticastToken) === token) __privateSet(this, _pendingMulticastToken, null);
761
+ __privateSet(this, _pendingMulticastVideo, null);
762
+ __privateSet(this, _pendingMulticastAudio, null);
763
+ console.warn("[MediaRouter] onSourceSwitch(multicast) failed", err);
764
+ };
765
+ // ── Private helpers ──────────────────────────────────────────────────────
766
+ /** Emit a frame on the correct per-track callback using the type registry.
767
+ * Falls back to name match if no type registered (backward compat). */
768
+ emitForTrack_fn = function(trackName, data, meta) {
769
+ var _a, _b, _c, _d, _e, _f;
770
+ const reg = __privateGet(this, _trackTypes).get(trackName);
771
+ if (reg?.type === "video") {
772
+ (_a = __privateGet(this, _onVideoFrame)) == null ? void 0 : _a.call(this, data, meta);
773
+ } else if (reg?.type === "audio") {
774
+ (_b = __privateGet(this, _onAudioFrame)) == null ? void 0 : _b.call(this, data, meta);
775
+ } else if (reg !== void 0) {
776
+ (_c = __privateGet(this, _onOverlayFrame)) == null ? void 0 : _c.call(this, data, meta);
777
+ } else {
778
+ if (trackName === "video") (_d = __privateGet(this, _onVideoFrame)) == null ? void 0 : _d.call(this, data, meta);
779
+ else if (trackName === "audio") (_e = __privateGet(this, _onAudioFrame)) == null ? void 0 : _e.call(this, data, meta);
780
+ else (_f = __privateGet(this, _onOverlayFrame)) == null ? void 0 : _f.call(this, data, meta);
781
+ }
782
+ };
783
+ /** Handle an overlay frame: buffer until first FEC block boundary, then pass through. */
784
+ handleOverlayFrame_fn = function(data, meta) {
785
+ var _a;
786
+ if (__privateGet(this, _overlayBoundaryReached)) {
787
+ (_a = __privateGet(this, _onOverlayFrame)) == null ? void 0 : _a.call(this, data, meta);
788
+ return;
789
+ }
790
+ if (__privateGet(this, _overlayBuffer).length >= __privateGet(this, _maxOverlayBuffer)) {
791
+ console.warn(
792
+ `[MediaRouter] overlay buffer full (${__privateGet(this, _maxOverlayBuffer)} frames); dropping frame ts=${meta.timestamp}`
793
+ );
794
+ return;
795
+ }
796
+ __privateGet(this, _overlayBuffer).push({ data, meta });
797
+ };
798
+ export {
799
+ MediaRouter,
800
+ TrackSourceConflictError
801
+ };
802
+ //# sourceMappingURL=media-router.js.map