@blockcast/mmt-container 0.1.0-main.0399efef1f07

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 (694) 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 +152 -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 +20087 -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 +873 -0
  26. package/dist/carp-catalog.js.map +7 -0
  27. package/dist/catalog-fec-params.d.ts +202 -0
  28. package/dist/catalog-fec-params.d.ts.map +1 -0
  29. package/dist/catalog-fec-params.js +568 -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 +217 -0
  40. package/dist/cmaf-block-assembler.d.ts.map +1 -0
  41. package/dist/cmaf-block-assembler.js +1769 -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 +248 -0
  52. package/dist/codec-utils.d.ts.map +1 -0
  53. package/dist/codec-utils.js +1268 -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 +307 -0
  60. package/dist/fec-manager.d.ts.map +1 -0
  61. package/dist/fec-manager.js +1530 -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 +88 -0
  68. package/dist/fec-worker-setup.d.ts.map +1 -0
  69. package/dist/fec-worker-setup.js +614 -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 +380 -0
  82. package/dist/index.js.map +7 -0
  83. package/dist/iso-bmff-timing.d.ts +78 -0
  84. package/dist/iso-bmff-timing.d.ts.map +1 -0
  85. package/dist/iso-bmff-timing.js +618 -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 +1285 -0
  94. package/dist/manifest-auth-plan.js.map +7 -0
  95. package/dist/media-router.d.ts +251 -0
  96. package/dist/media-router.d.ts.map +1 -0
  97. package/dist/media-router.js +624 -0
  98. package/dist/media-router.js.map +7 -0
  99. package/dist/mfu-reassembler.d.ts +396 -0
  100. package/dist/mfu-reassembler.d.ts.map +1 -0
  101. package/dist/mfu-reassembler.js +3085 -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 +434 -0
  108. package/dist/mmtp-container-parser.d.ts.map +1 -0
  109. package/dist/mmtp-container-parser.js +6164 -0
  110. package/dist/mmtp-container-parser.js.map +7 -0
  111. package/dist/mmtp-container-parser.no-modules.js +8999 -0
  112. package/dist/mmtp-container-parser.no-modules.js.map +7 -0
  113. package/dist/mmtp-decode-pipeline.d.ts +132 -0
  114. package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
  115. package/dist/mmtp-decode-pipeline.js +6413 -0
  116. package/dist/mmtp-decode-pipeline.js.map +7 -0
  117. package/dist/mmtp-router.d.ts +390 -0
  118. package/dist/mmtp-router.d.ts.map +1 -0
  119. package/dist/mmtp-router.js +9242 -0
  120. package/dist/mmtp-router.js.map +7 -0
  121. package/dist/mmtp-to-cmaf.d.ts +181 -0
  122. package/dist/mmtp-to-cmaf.d.ts.map +1 -0
  123. package/dist/mmtp-to-cmaf.js +802 -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 +369 -0
  134. package/dist/multicast-manager.d.ts.map +1 -0
  135. package/dist/multicast-manager.js +13400 -0
  136. package/dist/multicast-manager.js.map +7 -0
  137. package/dist/multicast-transport.d.ts +61 -0
  138. package/dist/multicast-transport.d.ts.map +1 -0
  139. package/dist/multicast-transport.js +1665 -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 +8965 -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 +127 -0
  156. package/dist/repair-fetch.js.map +7 -0
  157. package/dist/repair-layers.d.ts +141 -0
  158. package/dist/repair-layers.d.ts.map +1 -0
  159. package/dist/repair-layers.js +303 -0
  160. package/dist/repair-layers.js.map +7 -0
  161. package/dist/sample-combiner.d.ts +212 -0
  162. package/dist/sample-combiner.d.ts.map +1 -0
  163. package/dist/sample-combiner.js +616 -0
  164. package/dist/sample-combiner.js.map +7 -0
  165. package/dist/signaling.d.ts +29 -0
  166. package/dist/signaling.d.ts.map +1 -0
  167. package/dist/signaling.js +232 -0
  168. package/dist/signaling.js.map +7 -0
  169. package/dist/source-auth.d.ts +2 -0
  170. package/dist/source-auth.d.ts.map +1 -0
  171. package/dist/source-auth.js +1238 -0
  172. package/dist/source-auth.js.map +7 -0
  173. package/dist/switching-set-alignment.d.ts +61 -0
  174. package/dist/switching-set-alignment.d.ts.map +1 -0
  175. package/dist/switching-set-alignment.js +85 -0
  176. package/dist/switching-set-alignment.js.map +7 -0
  177. package/dist/timestamp-codec.d.ts +34 -0
  178. package/dist/timestamp-codec.d.ts.map +1 -0
  179. package/dist/timestamp-codec.js +456 -0
  180. package/dist/timestamp-codec.js.map +7 -0
  181. package/dist/track-pipeline-setup.d.ts +72 -0
  182. package/dist/track-pipeline-setup.d.ts.map +1 -0
  183. package/dist/track-pipeline-setup.js +306 -0
  184. package/dist/track-pipeline-setup.js.map +7 -0
  185. package/dist/track-pipeline.d.ts +121 -0
  186. package/dist/track-pipeline.d.ts.map +1 -0
  187. package/dist/track-pipeline.js +229 -0
  188. package/dist/track-pipeline.js.map +7 -0
  189. package/dist/track-session.d.ts +398 -0
  190. package/dist/track-session.d.ts.map +1 -0
  191. package/dist/track-session.js +767 -0
  192. package/dist/track-session.js.map +7 -0
  193. package/dist/transport-pool.d.ts +69 -0
  194. package/dist/transport-pool.d.ts.map +1 -0
  195. package/dist/transport-pool.js +88 -0
  196. package/dist/transport-pool.js.map +7 -0
  197. package/dist/wasm-mfu-reassembler.d.ts +92 -0
  198. package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
  199. package/dist/wasm-mfu-reassembler.js +2139 -0
  200. package/dist/wasm-mfu-reassembler.js.map +7 -0
  201. package/dist/wasm-mmtp-container-parser.d.ts +10 -0
  202. package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
  203. package/dist/wasm-mmtp-container-parser.js +6418 -0
  204. package/dist/wasm-mmtp-container-parser.js.map +7 -0
  205. package/node_modules/@blockcast/fec-worker/README.md +213 -0
  206. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  207. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +87 -0
  208. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
  209. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +279 -0
  210. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
  211. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
  212. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
  213. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
  214. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
  215. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
  216. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
  217. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
  218. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
  219. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
  220. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
  221. package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
  222. package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
  223. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
  224. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
  225. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
  226. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
  227. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
  228. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
  229. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
  230. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
  231. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
  232. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
  233. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
  234. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
  235. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
  236. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
  237. package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
  238. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
  239. package/node_modules/@blockcast/fec-worker/package.json +59 -0
  240. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +319 -0
  241. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
  242. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
  243. package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
  244. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
  245. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
  246. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
  247. package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
  248. package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  249. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  250. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  251. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  252. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  253. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  254. package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  255. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  256. package/node_modules/@blockcast/mmt-base/README.md +120 -0
  257. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  258. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  259. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  260. package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  261. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  262. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +276 -0
  263. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  264. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +645 -0
  265. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  266. package/node_modules/@blockcast/mmt-base/package.json +49 -0
  267. package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  268. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +899 -0
  269. package/node_modules/@blockcast/mmt-fec/README.md +270 -0
  270. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  271. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +82 -0
  272. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
  273. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +296 -0
  274. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
  275. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
  276. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
  277. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
  278. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
  279. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
  280. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
  281. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
  282. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
  283. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
  284. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
  285. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
  286. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
  287. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
  288. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
  289. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
  290. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
  291. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
  292. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
  293. package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
  294. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
  295. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
  296. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
  297. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
  298. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
  299. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +172 -0
  300. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
  301. package/node_modules/@blockcast/mmt-fec/dist/oti.js +254 -0
  302. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
  303. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
  304. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
  305. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
  306. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +276 -0
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +645 -0
  324. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  325. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
  326. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  327. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +899 -0
  328. package/node_modules/@blockcast/mmt-fec/package.json +79 -0
  329. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +371 -0
  330. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
  331. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
  332. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
  333. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
  334. package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
  335. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
  336. package/node_modules/@blockcast/mmt-fec/src/oti.ts +317 -0
  337. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
  351. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +99 -0
  352. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
  353. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +492 -0
  354. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
  355. package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
  356. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
  357. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
  358. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
  359. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +669 -0
  360. package/node_modules/@noble/hashes/LICENSE +21 -0
  361. package/node_modules/@noble/hashes/README.md +521 -0
  362. package/node_modules/@noble/hashes/_assert.d.ts +17 -0
  363. package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
  364. package/node_modules/@noble/hashes/_assert.js +18 -0
  365. package/node_modules/@noble/hashes/_assert.js.map +1 -0
  366. package/node_modules/@noble/hashes/_blake.d.ts +14 -0
  367. package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
  368. package/node_modules/@noble/hashes/_blake.js +50 -0
  369. package/node_modules/@noble/hashes/_blake.js.map +1 -0
  370. package/node_modules/@noble/hashes/_md.d.ts +51 -0
  371. package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
  372. package/node_modules/@noble/hashes/_md.js +162 -0
  373. package/node_modules/@noble/hashes/_md.js.map +1 -0
  374. package/node_modules/@noble/hashes/_u64.d.ts +55 -0
  375. package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
  376. package/node_modules/@noble/hashes/_u64.js +90 -0
  377. package/node_modules/@noble/hashes/_u64.js.map +1 -0
  378. package/node_modules/@noble/hashes/argon2.d.ts +32 -0
  379. package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
  380. package/node_modules/@noble/hashes/argon2.js +401 -0
  381. package/node_modules/@noble/hashes/argon2.js.map +1 -0
  382. package/node_modules/@noble/hashes/blake1.d.ts +106 -0
  383. package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
  384. package/node_modules/@noble/hashes/blake1.js +459 -0
  385. package/node_modules/@noble/hashes/blake1.js.map +1 -0
  386. package/node_modules/@noble/hashes/blake2.d.ts +116 -0
  387. package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
  388. package/node_modules/@noble/hashes/blake2.js +420 -0
  389. package/node_modules/@noble/hashes/blake2.js.map +1 -0
  390. package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
  391. package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
  392. package/node_modules/@noble/hashes/blake2b.js +14 -0
  393. package/node_modules/@noble/hashes/blake2b.js.map +1 -0
  394. package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
  395. package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
  396. package/node_modules/@noble/hashes/blake2s.js +24 -0
  397. package/node_modules/@noble/hashes/blake2s.js.map +1 -0
  398. package/node_modules/@noble/hashes/blake3.d.ts +54 -0
  399. package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
  400. package/node_modules/@noble/hashes/blake3.js +255 -0
  401. package/node_modules/@noble/hashes/blake3.js.map +1 -0
  402. package/node_modules/@noble/hashes/crypto.d.ts +2 -0
  403. package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
  404. package/node_modules/@noble/hashes/crypto.js +5 -0
  405. package/node_modules/@noble/hashes/crypto.js.map +1 -0
  406. package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
  407. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
  408. package/node_modules/@noble/hashes/cryptoNode.js +18 -0
  409. package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
  410. package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
  411. package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
  412. package/node_modules/@noble/hashes/eskdf.js +166 -0
  413. package/node_modules/@noble/hashes/eskdf.js.map +1 -0
  414. package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
  415. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
  416. package/node_modules/@noble/hashes/esm/_assert.js +15 -0
  417. package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
  418. package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
  419. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
  420. package/node_modules/@noble/hashes/esm/_blake.js +45 -0
  421. package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
  422. package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
  423. package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
  424. package/node_modules/@noble/hashes/esm/_md.js +155 -0
  425. package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
  426. package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
  427. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
  428. package/node_modules/@noble/hashes/esm/_u64.js +67 -0
  429. package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
  430. package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
  431. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
  432. package/node_modules/@noble/hashes/esm/argon2.js +392 -0
  433. package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
  434. package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
  435. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
  436. package/node_modules/@noble/hashes/esm/blake1.js +452 -0
  437. package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
  438. package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
  439. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
  440. package/node_modules/@noble/hashes/esm/blake2.js +413 -0
  441. package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
  442. package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
  443. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
  444. package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
  445. package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
  446. package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
  447. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
  448. package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
  449. package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
  450. package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
  451. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
  452. package/node_modules/@noble/hashes/esm/blake3.js +251 -0
  453. package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
  454. package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
  455. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
  456. package/node_modules/@noble/hashes/esm/crypto.js +2 -0
  457. package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
  458. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
  459. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
  460. package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
  461. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
  462. package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
  463. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
  464. package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
  465. package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
  466. package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
  467. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
  468. package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
  469. package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
  470. package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
  471. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
  472. package/node_modules/@noble/hashes/esm/hmac.js +86 -0
  473. package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
  474. package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
  475. package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
  476. package/node_modules/@noble/hashes/esm/index.js +33 -0
  477. package/node_modules/@noble/hashes/esm/index.js.map +1 -0
  478. package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
  479. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
  480. package/node_modules/@noble/hashes/esm/legacy.js +281 -0
  481. package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
  482. package/node_modules/@noble/hashes/esm/package.json +10 -0
  483. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
  484. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
  485. package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
  486. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
  487. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
  488. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
  489. package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
  490. package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
  491. package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
  492. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
  493. package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
  494. package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
  495. package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
  496. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
  497. package/node_modules/@noble/hashes/esm/sha1.js +11 -0
  498. package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
  499. package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
  500. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
  501. package/node_modules/@noble/hashes/esm/sha2.js +375 -0
  502. package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
  503. package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
  504. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
  505. package/node_modules/@noble/hashes/esm/sha256.js +20 -0
  506. package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
  507. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
  508. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
  509. package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
  510. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
  511. package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
  512. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
  513. package/node_modules/@noble/hashes/esm/sha3.js +234 -0
  514. package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
  515. package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
  516. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
  517. package/node_modules/@noble/hashes/esm/sha512.js +26 -0
  518. package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
  519. package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
  520. package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
  521. package/node_modules/@noble/hashes/esm/utils.js +281 -0
  522. package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
  523. package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
  524. package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
  525. package/node_modules/@noble/hashes/hkdf.js +88 -0
  526. package/node_modules/@noble/hashes/hkdf.js.map +1 -0
  527. package/node_modules/@noble/hashes/hmac.d.ts +35 -0
  528. package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
  529. package/node_modules/@noble/hashes/hmac.js +91 -0
  530. package/node_modules/@noble/hashes/hmac.js.map +1 -0
  531. package/node_modules/@noble/hashes/index.d.ts +1 -0
  532. package/node_modules/@noble/hashes/index.d.ts.map +1 -0
  533. package/node_modules/@noble/hashes/index.js +33 -0
  534. package/node_modules/@noble/hashes/index.js.map +1 -0
  535. package/node_modules/@noble/hashes/legacy.d.ts +71 -0
  536. package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
  537. package/node_modules/@noble/hashes/legacy.js +287 -0
  538. package/node_modules/@noble/hashes/legacy.js.map +1 -0
  539. package/node_modules/@noble/hashes/package.json +266 -0
  540. package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
  541. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
  542. package/node_modules/@noble/hashes/pbkdf2.js +101 -0
  543. package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
  544. package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
  545. package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
  546. package/node_modules/@noble/hashes/ripemd160.js +16 -0
  547. package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
  548. package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
  549. package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
  550. package/node_modules/@noble/hashes/scrypt.js +232 -0
  551. package/node_modules/@noble/hashes/scrypt.js.map +1 -0
  552. package/node_modules/@noble/hashes/sha1.d.ts +11 -0
  553. package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
  554. package/node_modules/@noble/hashes/sha1.js +14 -0
  555. package/node_modules/@noble/hashes/sha1.js.map +1 -0
  556. package/node_modules/@noble/hashes/sha2.d.ts +159 -0
  557. package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
  558. package/node_modules/@noble/hashes/sha2.js +384 -0
  559. package/node_modules/@noble/hashes/sha2.js.map +1 -0
  560. package/node_modules/@noble/hashes/sha256.d.ts +20 -0
  561. package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
  562. package/node_modules/@noble/hashes/sha256.js +23 -0
  563. package/node_modules/@noble/hashes/sha256.js.map +1 -0
  564. package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
  565. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
  566. package/node_modules/@noble/hashes/sha3-addons.js +402 -0
  567. package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
  568. package/node_modules/@noble/hashes/sha3.d.ts +53 -0
  569. package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
  570. package/node_modules/@noble/hashes/sha3.js +239 -0
  571. package/node_modules/@noble/hashes/sha3.js.map +1 -0
  572. package/node_modules/@noble/hashes/sha512.d.ts +26 -0
  573. package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
  574. package/node_modules/@noble/hashes/sha512.js +29 -0
  575. package/node_modules/@noble/hashes/sha512.js.map +1 -0
  576. package/node_modules/@noble/hashes/src/_assert.ts +22 -0
  577. package/node_modules/@noble/hashes/src/_blake.ts +50 -0
  578. package/node_modules/@noble/hashes/src/_md.ts +176 -0
  579. package/node_modules/@noble/hashes/src/_u64.ts +91 -0
  580. package/node_modules/@noble/hashes/src/argon2.ts +497 -0
  581. package/node_modules/@noble/hashes/src/blake1.ts +534 -0
  582. package/node_modules/@noble/hashes/src/blake2.ts +486 -0
  583. package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
  584. package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
  585. package/node_modules/@noble/hashes/src/blake3.ts +272 -0
  586. package/node_modules/@noble/hashes/src/crypto.ts +9 -0
  587. package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
  588. package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
  589. package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
  590. package/node_modules/@noble/hashes/src/hmac.ts +94 -0
  591. package/node_modules/@noble/hashes/src/index.ts +31 -0
  592. package/node_modules/@noble/hashes/src/legacy.ts +293 -0
  593. package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
  594. package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
  595. package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
  596. package/node_modules/@noble/hashes/src/sha1.ts +10 -0
  597. package/node_modules/@noble/hashes/src/sha2.ts +402 -0
  598. package/node_modules/@noble/hashes/src/sha256.ts +24 -0
  599. package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
  600. package/node_modules/@noble/hashes/src/sha3.ts +258 -0
  601. package/node_modules/@noble/hashes/src/sha512.ts +34 -0
  602. package/node_modules/@noble/hashes/src/utils.ts +395 -0
  603. package/node_modules/@noble/hashes/utils.d.ts +161 -0
  604. package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
  605. package/node_modules/@noble/hashes/utils.js +313 -0
  606. package/node_modules/@noble/hashes/utils.js.map +1 -0
  607. package/package.json +203 -0
  608. package/schemas/catalog.schema.json +360 -0
  609. package/src/align.ts +239 -0
  610. package/src/audio-init-parser.ts +189 -0
  611. package/src/audio-ring-buffer.ts +120 -0
  612. package/src/authored-timing.ts +63 -0
  613. package/src/carp-catalog.ts +845 -0
  614. package/src/catalog-fec-params.ts +535 -0
  615. package/src/catalog-network-source.ts +49 -0
  616. package/src/catalog-validator.ts +34 -0
  617. package/src/cmaf-block-assembler.ts +1167 -0
  618. package/src/cmaf-group-batcher.ts +104 -0
  619. package/src/cmcd-producer.ts +334 -0
  620. package/src/codec-utils.ts +1611 -0
  621. package/src/fec-codec.ts +61 -0
  622. package/src/fec-manager.ts +2081 -0
  623. package/src/fec-starvation-detector.ts +128 -0
  624. package/src/fec-worker-setup.ts +213 -0
  625. package/src/fmp4-completion.ts +47 -0
  626. package/src/fmp4-reader.ts +112 -0
  627. package/src/index.ts +486 -0
  628. package/src/iso-bmff-timing.ts +813 -0
  629. package/src/loc.ts +181 -0
  630. package/src/manifest-auth-plan.ts +107 -0
  631. package/src/media-router.ts +795 -0
  632. package/src/mfu-reassembler.ts +3741 -0
  633. package/src/mfu-reassembly-policy.ts +134 -0
  634. package/src/mmtp-container-parser.ts +1836 -0
  635. package/src/mmtp-decode-pipeline.ts +389 -0
  636. package/src/mmtp-router.ts +3136 -0
  637. package/src/mmtp-to-cmaf.ts +1024 -0
  638. package/src/multicast-auth-catalog.ts +340 -0
  639. package/src/multicast-input.ts +439 -0
  640. package/src/multicast-manager.ts +1720 -0
  641. package/src/multicast-transport.ts +321 -0
  642. package/src/multicast-unwrap.ts +132 -0
  643. package/src/no-modules.ts +20 -0
  644. package/src/phase14-catalog-override.ts +336 -0
  645. package/src/repair-fetch.ts +238 -0
  646. package/src/repair-layers.ts +490 -0
  647. package/src/sample-combiner.ts +938 -0
  648. package/src/signaling.ts +78 -0
  649. package/src/source-auth.ts +1 -0
  650. package/src/switching-set-alignment.ts +109 -0
  651. package/src/timestamp-codec.ts +265 -0
  652. package/src/track-pipeline-setup.ts +189 -0
  653. package/src/track-pipeline.ts +332 -0
  654. package/src/track-session.ts +994 -0
  655. package/src/transport-pool.ts +128 -0
  656. package/src/wasm-mfu-reassembler.ts +389 -0
  657. package/src/wasm-mmtp-container-parser.ts +23 -0
  658. package/test-vectors/align.json +199 -0
  659. package/test-vectors/catalog/README.md +40 -0
  660. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +27 -0
  661. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +32 -0
  662. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +30 -0
  663. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +31 -0
  664. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +33 -0
  665. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +23 -0
  666. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +32 -0
  667. package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
  668. package/test-vectors/catalog/negative/media-track-repair-layer.json +16 -0
  669. package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
  670. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
  671. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
  672. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
  673. package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
  674. package/test-vectors/catalog/negative/network-source-object.json +25 -0
  675. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +23 -0
  676. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
  677. package/test-vectors/catalog/negative/repair-track-legacy-shape.json +19 -0
  678. package/test-vectors/catalog/negative/track-role-empty.json +16 -0
  679. package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
  680. package/test-vectors/catalog/positive/fec-layered-repair.json +104 -0
  681. package/test-vectors/catalog/positive/fec-multicast.json +51 -0
  682. package/test-vectors/catalog/positive/flat-av.json +30 -0
  683. package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
  684. package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
  685. package/test-vectors/catalog/positive/track-role.json +49 -0
  686. package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
  687. package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
  688. package/test-vectors/catalog-multicast-auth-v1.json +26 -0
  689. package/test-vectors/catalog-validation.json +148 -0
  690. package/test-vectors/catalog-validator-public-api.mjs +25 -0
  691. package/test-vectors/generate-source-auth-fixture.mjs +114 -0
  692. package/test-vectors/source-auth-v1.json +61 -0
  693. package/test-vectors/source-contiguity-v1.json +131 -0
  694. package/test-vectors/subsample-placement-v1.json +230 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/iso-bmff-timing.ts"],
4
+ "sourcesContent": ["/**\n * Strict ISO-BMFF timing extraction for the timed-MFU browser path.\n *\n * This intentionally implements only the current single-track MMT profile:\n * one media track in FT=0, and one matching traf/trun in each FT=1. It does\n * not infer timing from packet arrival, MMTP send timestamps, or cadence.\n */\n\nconst U64_MAX = 0xffff_ffff_ffff_ffffn\nconst I64_MIN = -0x8000_0000_0000_0000n\nconst I64_MAX = 0x7fff_ffff_ffff_ffffn\nconst MICROSECONDS_PER_SECOND = 1_000_000n\n\nconst TFHD_BASE_DATA_OFFSET_PRESENT = 0x000001\nconst TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT = 0x000002\nconst TFHD_DEFAULT_SAMPLE_DURATION_PRESENT = 0x000008\nconst TFHD_DEFAULT_SAMPLE_SIZE_PRESENT = 0x000010\nconst TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT = 0x000020\nconst TFHD_DURATION_IS_EMPTY = 0x010000\nconst TFHD_DEFAULT_BASE_IS_MOOF = 0x020000\nconst TFHD_KNOWN_FLAGS =\n TFHD_BASE_DATA_OFFSET_PRESENT |\n TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT |\n TFHD_DEFAULT_SAMPLE_DURATION_PRESENT |\n TFHD_DEFAULT_SAMPLE_SIZE_PRESENT |\n TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT |\n TFHD_DURATION_IS_EMPTY |\n TFHD_DEFAULT_BASE_IS_MOOF\n\nconst TRUN_DATA_OFFSET_PRESENT = 0x000001\nconst TRUN_FIRST_SAMPLE_FLAGS_PRESENT = 0x000004\nconst TRUN_SAMPLE_DURATION_PRESENT = 0x000100\nconst TRUN_SAMPLE_SIZE_PRESENT = 0x000200\nconst TRUN_SAMPLE_FLAGS_PRESENT = 0x000400\nconst TRUN_SAMPLE_CTS_OFFSET_PRESENT = 0x000800\nconst TRUN_KNOWN_FLAGS =\n TRUN_DATA_OFFSET_PRESENT |\n TRUN_FIRST_SAMPLE_FLAGS_PRESENT |\n TRUN_SAMPLE_DURATION_PRESENT |\n TRUN_SAMPLE_SIZE_PRESENT |\n TRUN_SAMPLE_FLAGS_PRESENT |\n TRUN_SAMPLE_CTS_OFFSET_PRESENT\n\nexport interface IsoBmffTrackTiming {\n trackId: number\n timescale: number\n defaultSampleDuration?: number\n defaultSampleSize?: number\n}\n\nexport interface IsoBmffSampleTiming {\n /** Exact decode time in mdhd timescale units. */\n decodeTime: bigint\n /** Exact presentation time in mdhd timescale units, including signed CTS. */\n presentationTime: bigint\n /** Exact authored duration in mdhd timescale units. */\n duration: number\n timescale: number\n /** Exact elementary-stream sample size declared by trun/tfhd/trex. */\n size: number\n /** Byte position of the sample relative to the beginning of the moof. */\n bytePosition: bigint\n}\n\nexport interface IsoBmffMovieFragmentTiming {\n movieFragmentSequenceNumber: number\n samples: readonly IsoBmffSampleTiming[]\n}\n\nexport type IsoBmffMovieFragmentRejection = 'invalid' | 'budget'\n\ninterface IsoBox {\n type: string\n start: number\n bodyStart: number\n end: number\n}\n\ninterface FullBox {\n version: number\n flags: number\n bodyStart: number\n}\n\ninterface ParsedTrack {\n trackId: number\n handlerType: string\n timescale: number\n hasEdits: boolean\n}\n\ninterface ParsedTfhd {\n trackId: number\n defaultSampleDuration?: number\n defaultSampleSize?: number\n}\n\ninterface MdatLayout {\n dataStart: bigint\n declaredEnd: bigint\n}\n\nfunction view(data: Uint8Array): DataView {\n return new DataView(data.buffer, data.byteOffset, data.byteLength)\n}\n\nfunction boxType(data: Uint8Array, offset: number): string {\n return String.fromCharCode(\n data[offset]!,\n data[offset + 1]!,\n data[offset + 2]!,\n data[offset + 3]!,\n )\n}\n\nfunction readU64(data: Uint8Array, offset: number): bigint | null {\n if (offset < 0 || offset + 8 > data.length) return null\n const dataView = view(data)\n return (BigInt(dataView.getUint32(offset, false)) << 32n) |\n BigInt(dataView.getUint32(offset + 4, false))\n}\n\nfunction parseBox(data: Uint8Array, start: number, limit: number): IsoBox | null {\n if (start < 0 || limit > data.length || start + 8 > limit) return null\n const dataView = view(data)\n const shortSize = dataView.getUint32(start, false)\n let headerSize = 8\n let size: number\n if (shortSize === 0) {\n size = limit - start\n } else if (shortSize === 1) {\n if (start + 16 > limit) return null\n const extendedSize = readU64(data, start + 8)\n if (extendedSize === null || extendedSize > BigInt(Number.MAX_SAFE_INTEGER)) return null\n headerSize = 16\n size = Number(extendedSize)\n } else {\n size = shortSize\n }\n if (size < headerSize || start + size > limit) return null\n return {\n type: boxType(data, start + 4),\n start,\n bodyStart: start + headerSize,\n end: start + size,\n }\n}\n\nfunction parseBoxes(data: Uint8Array, start: number, end: number): IsoBox[] | null {\n if (start < 0 || end < start || end > data.length) return null\n const boxes: IsoBox[] = []\n let offset = start\n while (offset < end) {\n const box = parseBox(data, offset, end)\n if (!box || box.end <= offset) return null\n boxes.push(box)\n offset = box.end\n }\n return offset === end ? boxes : null\n}\n\nfunction children(data: Uint8Array, parent: IsoBox): IsoBox[] | null {\n return parseBoxes(data, parent.bodyStart, parent.end)\n}\n\nfunction exactlyOne(boxes: readonly IsoBox[], type: string): IsoBox | null {\n const matches = boxes.filter(box => box.type === type)\n return matches.length === 1 ? matches[0]! : null\n}\n\nfunction parseFullBox(data: Uint8Array, box: IsoBox): FullBox | null {\n if (box.bodyStart + 4 > box.end) return null\n const versionAndFlags = view(data).getUint32(box.bodyStart, false)\n return {\n version: versionAndFlags >>> 24,\n flags: versionAndFlags & 0x00ff_ffff,\n bodyStart: box.bodyStart + 4,\n }\n}\n\nfunction parseTkhdTrackId(data: Uint8Array, box: IsoBox): number | null {\n const full = parseFullBox(data, box)\n if (!full || full.flags & ~0x00000f) return null\n const bodyLength = box.end - full.bodyStart\n const trackIdOffset = full.version === 0\n ? full.bodyStart + 8\n : full.version === 1\n ? full.bodyStart + 16\n : -1\n const expectedBodyLength = full.version === 0 ? 80 : full.version === 1 ? 92 : -1\n if (trackIdOffset < 0 || bodyLength !== expectedBodyLength) return null\n return view(data).getUint32(trackIdOffset, false)\n}\n\nfunction parseMdhdTimescale(data: Uint8Array, box: IsoBox): number | null {\n const full = parseFullBox(data, box)\n if (!full || full.flags !== 0) return null\n const bodyLength = box.end - full.bodyStart\n const timescaleOffset = full.version === 0\n ? full.bodyStart + 8\n : full.version === 1\n ? full.bodyStart + 16\n : -1\n const expectedBodyLength = full.version === 0 ? 20 : full.version === 1 ? 32 : -1\n if (timescaleOffset < 0 || bodyLength !== expectedBodyLength) return null\n return view(data).getUint32(timescaleOffset, false)\n}\n\nfunction parseHandlerType(data: Uint8Array, box: IsoBox): string | null {\n const full = parseFullBox(data, box)\n if (!full || full.version !== 0 || full.flags !== 0 || full.bodyStart + 20 > box.end) {\n return null\n }\n return boxType(data, full.bodyStart + 4)\n}\n\nfunction editListHasEntries(data: Uint8Array, box: IsoBox): boolean | null {\n const full = parseFullBox(data, box)\n if (!full || full.flags !== 0 || (full.version !== 0 && full.version !== 1)) return null\n if (full.bodyStart + 4 > box.end) return null\n const entryCount = view(data).getUint32(full.bodyStart, false)\n const entrySize = full.version === 0 ? 12 : 20\n const expectedEnd = full.bodyStart + 4 + entryCount * entrySize\n if (!Number.isSafeInteger(expectedEnd) || expectedEnd !== box.end) return null\n return entryCount !== 0\n}\n\nfunction parseTrack(data: Uint8Array, trak: IsoBox): ParsedTrack | null {\n const trakChildren = children(data, trak)\n if (!trakChildren) return null\n const tkhd = exactlyOne(trakChildren, 'tkhd')\n const mdia = exactlyOne(trakChildren, 'mdia')\n if (!tkhd || !mdia) return null\n const trackId = parseTkhdTrackId(data, tkhd)\n if (trackId === null || trackId === 0) return null\n\n const mdiaChildren = children(data, mdia)\n if (!mdiaChildren) return null\n const mdhd = exactlyOne(mdiaChildren, 'mdhd')\n const hdlr = exactlyOne(mdiaChildren, 'hdlr')\n if (!mdhd || !hdlr) return null\n const timescale = parseMdhdTimescale(data, mdhd)\n const handlerType = parseHandlerType(data, hdlr)\n if (timescale === null || timescale === 0 || handlerType === null) return null\n\n const edtsBoxes = trakChildren.filter(box => box.type === 'edts')\n if (edtsBoxes.length > 1) return null\n let hasEdits = false\n if (edtsBoxes.length === 1) {\n const edtsChildren = children(data, edtsBoxes[0]!)\n if (!edtsChildren) return null\n const editLists = edtsChildren.filter(box => box.type === 'elst')\n if (editLists.length > 1) return null\n if (editLists.length === 1) {\n const result = editListHasEntries(data, editLists[0]!)\n if (result === null) return null\n hasEdits = result\n }\n }\n\n return { trackId, handlerType, timescale, hasEdits }\n}\n\nfunction parseTrex(data: Uint8Array, box: IsoBox): IsoBmffTrackTiming | null {\n const full = parseFullBox(data, box)\n if (!full || full.version !== 0 || full.flags !== 0 || box.end - full.bodyStart !== 20) {\n return null\n }\n const dataView = view(data)\n const trackId = dataView.getUint32(full.bodyStart, false)\n const defaultSampleDuration = dataView.getUint32(full.bodyStart + 8, false)\n const defaultSampleSize = dataView.getUint32(full.bodyStart + 12, false)\n return {\n trackId,\n timescale: 0,\n ...(defaultSampleDuration === 0 ? {} : { defaultSampleDuration }),\n ...(defaultSampleSize === 0 ? {} : { defaultSampleSize }),\n }\n}\n\nexport function parseIsoBmffInitializationTiming(\n data: Uint8Array,\n): IsoBmffTrackTiming | null {\n const topLevel = parseBoxes(data, 0, data.length)\n if (!topLevel) return null\n const ftyp = exactlyOne(topLevel, 'ftyp')\n const moov = exactlyOne(topLevel, 'moov')\n if (!ftyp || !moov || ftyp.start > moov.start) return null\n if (topLevel.some(box => box.type === 'moof' || box.type === 'mdat')) return null\n\n const moovChildren = children(data, moov)\n if (!moovChildren) return null\n const parsedTracks: ParsedTrack[] = []\n for (const trak of moovChildren.filter(box => box.type === 'trak')) {\n const parsed = parseTrack(data, trak)\n if (!parsed) return null\n parsedTracks.push(parsed)\n }\n const mediaTracks = parsedTracks.filter(\n track => track.handlerType === 'vide' || track.handlerType === 'soun',\n )\n if (mediaTracks.length !== 1) return null\n const mediaTrack = mediaTracks[0]!\n if (mediaTrack.hasEdits) return null\n\n const mvex = exactlyOne(moovChildren, 'mvex')\n if (!mvex) return null\n const mvexChildren = children(data, mvex)\n if (!mvexChildren) return null\n const trexEntries: IsoBmffTrackTiming[] = []\n for (const trexBox of mvexChildren.filter(box => box.type === 'trex')) {\n const trex = parseTrex(data, trexBox)\n if (!trex) return null\n trexEntries.push(trex)\n }\n const matchingTrex = trexEntries.filter(trex => trex.trackId === mediaTrack.trackId)\n if (matchingTrex.length !== 1) return null\n const trex = matchingTrex[0]!\n return {\n trackId: mediaTrack.trackId,\n timescale: mediaTrack.timescale,\n ...(trex.defaultSampleDuration === undefined\n ? {}\n : { defaultSampleDuration: trex.defaultSampleDuration }),\n ...(trex.defaultSampleSize === undefined\n ? {}\n : { defaultSampleSize: trex.defaultSampleSize }),\n }\n}\n\nfunction parseMfhdSequence(data: Uint8Array, box: IsoBox): number | null {\n const full = parseFullBox(data, box)\n if (!full || full.version !== 0 || full.flags !== 0 || box.end - full.bodyStart !== 4) {\n return null\n }\n return view(data).getUint32(full.bodyStart, false)\n}\n\nfunction parseTfhd(data: Uint8Array, box: IsoBox): ParsedTfhd | null {\n const full = parseFullBox(data, box)\n if (!full || full.version !== 0 || (full.flags & ~TFHD_KNOWN_FLAGS) !== 0) return null\n if ((full.flags & TFHD_BASE_DATA_OFFSET_PRESENT) !== 0 ||\n (full.flags & TFHD_DEFAULT_BASE_IS_MOOF) === 0 ||\n (full.flags & TFHD_DURATION_IS_EMPTY) !== 0) {\n return null\n }\n const dataView = view(data)\n let offset = full.bodyStart\n if (offset + 4 > box.end) return null\n const trackId = dataView.getUint32(offset, false)\n offset += 4\n if ((full.flags & TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n offset += 4\n }\n let defaultSampleDuration: number | undefined\n if ((full.flags & TFHD_DEFAULT_SAMPLE_DURATION_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n defaultSampleDuration = dataView.getUint32(offset, false)\n offset += 4\n }\n let defaultSampleSize: number | undefined\n if ((full.flags & TFHD_DEFAULT_SAMPLE_SIZE_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n defaultSampleSize = dataView.getUint32(offset, false)\n offset += 4\n }\n if ((full.flags & TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n offset += 4\n }\n if (offset !== box.end) return null\n return {\n trackId,\n ...(defaultSampleDuration === undefined ? {} : { defaultSampleDuration }),\n ...(defaultSampleSize === undefined ? {} : { defaultSampleSize }),\n }\n}\n\nfunction parseTfdt(data: Uint8Array, box: IsoBox): bigint | null {\n const full = parseFullBox(data, box)\n if (!full || full.flags !== 0) return null\n if (full.version === 0 && box.end - full.bodyStart === 4) {\n return BigInt(view(data).getUint32(full.bodyStart, false))\n }\n if (full.version === 1 && box.end - full.bodyStart === 8) {\n return readU64(data, full.bodyStart)\n }\n return null\n}\n\nfunction parseMdatLayout(data: Uint8Array, offset: number): MdatLayout | null {\n if (offset < 0 || offset + 8 > data.length || boxType(data, offset + 4) !== 'mdat') return null\n const dataView = view(data)\n const shortSize = dataView.getUint32(offset, false)\n let headerSize = 8\n let declaredSize: bigint\n if (shortSize === 0) {\n return null\n } else if (shortSize === 1) {\n const extended = readU64(data, offset + 8)\n if (extended === null) return null\n headerSize = 16\n declaredSize = extended\n } else {\n declaredSize = BigInt(shortSize)\n }\n if (declaredSize < BigInt(headerSize) || declaredSize < BigInt(data.length - offset)) {\n return null\n }\n const declaredEnd = BigInt(offset) + declaredSize\n if (declaredEnd > U64_MAX) return null\n return { dataStart: BigInt(offset + headerSize), declaredEnd }\n}\n\nfunction resolvedDefault(\n entryValue: number | undefined,\n tfhdValue: number | undefined,\n trexValue: number | undefined,\n): number | null {\n const value = entryValue ?? tfhdValue ?? trexValue\n return value === undefined || value === 0 ? null : value\n}\n\nfunction parseTrunSamples(\n data: Uint8Array,\n box: IsoBox,\n moofStart: number,\n baseDecodeTime: bigint,\n tfhd: ParsedTfhd,\n track: IsoBmffTrackTiming,\n mdat: MdatLayout,\n maxSamples: number,\n): IsoBmffSampleTiming[] | null {\n const full = parseFullBox(data, box)\n if (!full || (full.version !== 0 && full.version !== 1) ||\n (full.flags & ~TRUN_KNOWN_FLAGS) !== 0 ||\n (full.flags & TRUN_DATA_OFFSET_PRESENT) === 0 ||\n ((full.flags & TRUN_FIRST_SAMPLE_FLAGS_PRESENT) !== 0 &&\n (full.flags & TRUN_SAMPLE_FLAGS_PRESENT) !== 0)) {\n return null\n }\n const dataView = view(data)\n let offset = full.bodyStart\n if (offset + 8 > box.end) return null\n const sampleCount = dataView.getUint32(offset, false)\n offset += 4\n if (sampleCount === 0 || sampleCount > maxSamples) return null\n const relativeDataOffset = dataView.getInt32(offset, false)\n offset += 4\n if (relativeDataOffset < 0) return null\n const dataOffset = BigInt(relativeDataOffset)\n const absoluteDataOffset = BigInt(moofStart) + dataOffset\n if (absoluteDataOffset > BigInt(data.length) || absoluteDataOffset < mdat.dataStart) return null\n if ((full.flags & TRUN_FIRST_SAMPLE_FLAGS_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n offset += 4\n }\n\n let decodeTime = baseDecodeTime\n let bytePosition = dataOffset\n const samples: IsoBmffSampleTiming[] = []\n for (let index = 0; index < sampleCount; index++) {\n let entryDuration: number | undefined\n if ((full.flags & TRUN_SAMPLE_DURATION_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n entryDuration = dataView.getUint32(offset, false)\n offset += 4\n }\n let entrySize: number | undefined\n if ((full.flags & TRUN_SAMPLE_SIZE_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n entrySize = dataView.getUint32(offset, false)\n offset += 4\n }\n if ((full.flags & TRUN_SAMPLE_FLAGS_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n offset += 4\n }\n let compositionOffset = 0\n if ((full.flags & TRUN_SAMPLE_CTS_OFFSET_PRESENT) !== 0) {\n if (offset + 4 > box.end) return null\n compositionOffset = full.version === 1\n ? dataView.getInt32(offset, false)\n : dataView.getUint32(offset, false)\n offset += 4\n }\n if (offset > box.end) return null\n\n const duration = resolvedDefault(\n entryDuration,\n tfhd.defaultSampleDuration,\n track.defaultSampleDuration,\n )\n const size = resolvedDefault(entrySize, tfhd.defaultSampleSize, track.defaultSampleSize)\n if (duration === null || size === null) return null\n const sampleEnd = bytePosition + BigInt(size)\n const absoluteSampleEnd = BigInt(moofStart) + sampleEnd\n if (absoluteSampleEnd > mdat.declaredEnd || absoluteSampleEnd > U64_MAX) return null\n const presentationTime = decodeTime + BigInt(compositionOffset)\n if (presentationTime < I64_MIN || presentationTime > I64_MAX) return null\n samples.push({\n decodeTime,\n presentationTime,\n duration,\n timescale: track.timescale,\n size,\n bytePosition,\n })\n decodeTime += BigInt(duration)\n if (decodeTime > U64_MAX) return null\n bytePosition = sampleEnd\n }\n return offset === box.end ? samples : null\n}\n\nexport function parseIsoBmffMovieFragmentTiming(\n data: Uint8Array,\n track: IsoBmffTrackTiming,\n maxSamples: number,\n): IsoBmffMovieFragmentTiming | null {\n if (!Number.isInteger(maxSamples) || maxSamples <= 0) return null\n const first = parseBox(data, 0, data.length)\n if (!first) return null\n const moof = first.type === 'styp'\n ? parseBox(data, first.end, data.length)\n : first\n if (!moof || moof.type !== 'moof' || moof.end >= data.length) return null\n const moofChildren = children(data, moof)\n if (!moofChildren) return null\n const mfhd = exactlyOne(moofChildren, 'mfhd')\n const traf = exactlyOne(moofChildren, 'traf')\n if (!mfhd || !traf) return null\n const movieFragmentSequenceNumber = parseMfhdSequence(data, mfhd)\n if (movieFragmentSequenceNumber === null || movieFragmentSequenceNumber === 0) return null\n\n const trafChildren = children(data, traf)\n if (!trafChildren) return null\n const tfhdBox = exactlyOne(trafChildren, 'tfhd')\n const tfdtBox = exactlyOne(trafChildren, 'tfdt')\n const trunBox = exactlyOne(trafChildren, 'trun')\n if (!tfhdBox || !tfdtBox || !trunBox) return null\n const tfhd = parseTfhd(data, tfhdBox)\n const baseDecodeTime = parseTfdt(data, tfdtBox)\n if (!tfhd || tfhd.trackId !== track.trackId || baseDecodeTime === null) return null\n const mdat = parseMdatLayout(data, moof.end)\n if (!mdat) return null\n const samples = parseTrunSamples(\n data,\n trunBox,\n moof.start,\n baseDecodeTime,\n tfhd,\n track,\n mdat,\n maxSamples,\n )\n if (!samples) return null\n return { movieFragmentSequenceNumber, samples }\n}\n\nfunction sameTrack(a: IsoBmffTrackTiming, b: IsoBmffTrackTiming): boolean {\n return a.trackId === b.trackId &&\n a.timescale === b.timescale &&\n a.defaultSampleDuration === b.defaultSampleDuration &&\n a.defaultSampleSize === b.defaultSampleSize\n}\n\nfunction sameSample(a: IsoBmffSampleTiming, b: IsoBmffSampleTiming): boolean {\n return a.decodeTime === b.decodeTime &&\n a.presentationTime === b.presentationTime &&\n a.duration === b.duration &&\n a.timescale === b.timescale &&\n a.size === b.size &&\n a.bytePosition === b.bytePosition\n}\n\ntype PendingMovieFragment = Array<IsoBmffSampleTiming | null>\n\n/** Bounded per-track FT=0/FT=1 timing state. */\nexport class IsoBmffTimingResolver {\n #track: IsoBmffTrackTiming | null = null\n #fragments = new Map<string, PendingMovieFragment>()\n #pendingSamples = 0\n #evictedSamples = 0\n #lastMovieFragmentRejection: IsoBmffMovieFragmentRejection | null = null\n\n constructor(readonly maxPendingSamples: number) {\n if (!Number.isInteger(maxPendingSamples) || maxPendingSamples <= 0) {\n throw new Error('[IsoBmffTimingResolver] maxPendingSamples must be a positive integer')\n }\n }\n\n get pendingSampleCount(): number {\n return this.#pendingSamples\n }\n\n /**\n * Slots reclaimed by window displacement rather than by delivery or\n * abandonment. Deliberately separate from the combiner's own release count:\n * \"nobody ever saw this sample\" and \"the combiner gave up on it\" are\n * different failures with different owners, and one number cannot say which.\n */\n get evictedSampleCount(): number {\n return this.#evictedSamples\n }\n\n /** Typed reason for the most recent rejected movie fragment. */\n get lastMovieFragmentRejection(): IsoBmffMovieFragmentRejection | null {\n return this.#lastMovieFragmentRejection\n }\n\n addInitialization(data: Uint8Array): boolean {\n const timing = parseIsoBmffInitializationTiming(data)\n if (!timing) return false\n if (this.#track) return sameTrack(this.#track, timing)\n this.#track = timing\n return true\n }\n\n addMovieFragment(\n mpuSequenceNumber: number,\n data: Uint8Array,\n additionalSampleLimit = this.maxPendingSamples,\n ): boolean {\n this.#lastMovieFragmentRejection = null\n if (!Number.isInteger(additionalSampleLimit) || additionalSampleLimit < 0) {\n this.#lastMovieFragmentRejection = 'invalid'\n return false\n }\n if (!this.#track || !isU32(mpuSequenceNumber)) {\n this.#lastMovieFragmentRejection = 'invalid'\n return false\n }\n const parsed = parseIsoBmffMovieFragmentTiming(\n data,\n this.#track,\n this.maxPendingSamples,\n )\n if (!parsed) {\n this.#lastMovieFragmentRejection = 'invalid'\n return false\n }\n const key = fragmentKey(mpuSequenceNumber, parsed.movieFragmentSequenceNumber)\n const existing = this.#fragments.get(key)\n if (existing) {\n return existing.length === parsed.samples.length && existing.every(\n (sample, index) => sample !== null && sameSample(sample, parsed.samples[index]!),\n )\n }\n // Sliding window, not a one-way ratchet. `consumeSample` and\n // `releaseSample` between them cover every sample some component observed\n // -- but a sample whose data units never arrive at all is observed by\n // nobody, so neither path ever runs and its slot is held until `reset()`.\n // Under sustained loss those orphans accumulate until the budget is full\n // of samples that can never arrive, at which point every later moof is\n // refused and media stops permanently with no error.\n //\n // Displacement is the signal no component can raise: once the budget is\n // full and a newer fragment is in hand, the oldest pending fragment's\n // samples are older than the whole window and cannot still be in flight.\n // Reclaiming them keeps the timing that is arriving now and discards the\n // timing that is not; refusing the new fragment does exactly the reverse,\n // which is what wedged the stream. Evicted timing is not silent loss --\n // a late data unit then finds no entry and is dropped against a named\n // reason, which is attributable, bounded, and recoverable.\n let freed = 0\n while (\n this.#fragments.size > 0 &&\n (this.#pendingSamples + parsed.samples.length > this.maxPendingSamples ||\n parsed.samples.length - freed > additionalSampleLimit)\n ) {\n freed += this.#evictOldestFragment()\n }\n // Net new charge against the caller's pool is what it must afford: `freed`\n // slots were already counted there and are handed back by this call.\n if (parsed.samples.length - freed > additionalSampleLimit) {\n this.#lastMovieFragmentRejection = 'budget'\n return false\n }\n if (this.#pendingSamples + parsed.samples.length > this.maxPendingSamples) {\n this.#lastMovieFragmentRejection = 'budget'\n return false\n }\n this.#fragments.set(key, [...parsed.samples])\n this.#pendingSamples += parsed.samples.length\n return true\n }\n\n sampleTiming(\n mpuSequenceNumber: number,\n movieFragmentSequenceNumber: number,\n sampleNumber: number,\n ): IsoBmffSampleTiming | null {\n if (!isU32(mpuSequenceNumber) || !isU32(movieFragmentSequenceNumber) ||\n movieFragmentSequenceNumber === 0 || !isU32(sampleNumber) || sampleNumber === 0) {\n return null\n }\n const samples = this.#fragments.get(\n fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber),\n )\n return samples?.[sampleNumber - 1] ?? null\n }\n\n consumeSample(\n mpuSequenceNumber: number,\n movieFragmentSequenceNumber: number,\n sampleNumber: number,\n expected: IsoBmffSampleTiming,\n ): boolean {\n const samples = this.#fragments.get(\n fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber),\n )\n const sample = samples?.[sampleNumber - 1]\n if (!sample || !sameSample(sample, expected)) return false\n return this.#clearSlot(mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber)\n }\n\n /**\n * Free the budget slot of a sample that will never be delivered.\n *\n * `consumeSample` is the delivery path and is the only decrement on a\n * healthy stream. A sample whose data units never complete is never\n * delivered; window displacement in `addMovieFragment` eventually reclaims\n * it, but only after it has aged out of the whole window. This path frees\n * the slot as soon as the combiner knows the sample is gone, so the budget\n * tracks what is actually in flight rather than what has merely aged.\n *\n * The caller is whoever abandoned the sample, so the release is driven by\n * the abandonment itself rather than by a timer, an LRU, or an age bound --\n * the slot is freed exactly when its sample provably cannot arrive, which\n * is a protocol event the combiner already detects and counts.\n *\n * Deliberately takes no `expected` timing: the caller is discarding, not\n * matching, and requiring it would make the release fail exactly when the\n * timing entry is the thing being reclaimed. Returns false when the slot\n * was already freed, so a double release cannot drive the count negative.\n */\n releaseSample(\n mpuSequenceNumber: number,\n movieFragmentSequenceNumber: number,\n sampleNumber: number,\n ): boolean {\n return this.#clearSlot(mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber)\n }\n\n /**\n * Drop the oldest pending fragment whole and return the slots it held.\n *\n * Oldest is insertion order, which for a moof stream is arrival order, so\n * this is the least-recently-declared timing -- the entries least likely to\n * still have data units in flight.\n */\n #evictOldestFragment(): number {\n const oldest = this.#fragments.keys().next().value\n if (oldest === undefined) return 0\n const samples = this.#fragments.get(oldest)!\n let live = 0\n for (const sample of samples) if (sample !== null) live++\n this.#fragments.delete(oldest)\n this.#pendingSamples -= live\n this.#evictedSamples += live\n return live\n }\n\n /** Null one slot, decrement the budget, and drop the fragment when empty. */\n #clearSlot(\n mpuSequenceNumber: number,\n movieFragmentSequenceNumber: number,\n sampleNumber: number,\n ): boolean {\n if (!isU32(mpuSequenceNumber) || !isU32(movieFragmentSequenceNumber) ||\n movieFragmentSequenceNumber === 0 || !isU32(sampleNumber) || sampleNumber === 0) {\n return false\n }\n const key = fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber)\n const samples = this.#fragments.get(key)\n const index = sampleNumber - 1\n if (!samples || !samples[index]) return false\n samples[index] = null\n this.#pendingSamples--\n if (samples.every(value => value === null)) this.#fragments.delete(key)\n return true\n }\n\n reset(): void {\n this.#track = null\n this.#fragments.clear()\n this.#pendingSamples = 0\n }\n}\n\nfunction fragmentKey(mpuSequenceNumber: number, movieFragmentSequenceNumber: number): string {\n return `${mpuSequenceNumber}:${movieFragmentSequenceNumber}`\n}\n\nfunction isU32(value: number): boolean {\n return Number.isInteger(value) && value >= 0 && value <= 0xffff_ffff\n}\n\n/** Convert exact media ticks to microseconds without first narrowing the ticks. */\nexport function mediaTicksToMicroseconds(ticks: bigint, timescale: number): number | null {\n if (!Number.isInteger(timescale) || timescale <= 0) return null\n const numerator = ticks * MICROSECONDS_PER_SECOND\n const scale = BigInt(timescale)\n const whole = numerator / scale\n const remainder = numerator % scale\n if (whole < BigInt(Number.MIN_SAFE_INTEGER) || whole > BigInt(Number.MAX_SAFE_INTEGER)) {\n return null\n }\n const result = Number(whole) + Number(remainder) / timescale\n return Number.isFinite(result) ? result : null\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["trex"]
7
+ }
package/dist/loc.d.ts ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @mmt/container - LOC FEC Extensions
3
+ *
4
+ * FEC Source Info per draft-ramadan-moq-fec §7.1:
5
+ * SBN (32 bits) + ESI (32 bits) = 8 bytes minimum.
6
+ * Optional Original Object Length (QUIC varint) when Length > 8.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ /**
11
+ * LOC Header Extension IDs
12
+ */
13
+ export declare enum LOCHeaderExtensionId {
14
+ CaptureTimestamp = 2,
15
+ VideoFrameMarking = 4,
16
+ AudioLevel = 6,
17
+ /** FEC Source Info: SBN(32) + ESI(32) [+ Original Object Length (varint)] */
18
+ FecSourceInfo = 16,
19
+ VideoConfig = 13,
20
+ /** Content authentication tag */
21
+ AuthTag = 14
22
+ }
23
+ /** Maximum value for SBN and ESI (32 bits each) */
24
+ export declare const FEC_SBN_MAX = 4294967295;
25
+ export declare const FEC_ESI_MAX = 4294967295;
26
+ /**
27
+ * Encode FEC Source Info value bytes: SBN(4B BE) + ESI(4B BE).
28
+ * Returns 8-byte Uint8Array.
29
+ */
30
+ export declare function encodeFecSourceInfo(sbn: number, esi: number): Uint8Array;
31
+ /**
32
+ * Decode FEC Source Info value bytes: reads SBN(4B BE) + ESI(4B BE).
33
+ * Returns [sbn, esi].
34
+ */
35
+ export declare function decodeFecSourceInfo(buf: Uint8Array, offset?: number): [sbn: number, esi: number];
36
+ /**
37
+ * FEC Source Info for LOC/CMAF extension headers.
38
+ * Per draft-ramadan-moq-fec §7.1: SBN(32) + ESI(32), fixed 8-byte minimum.
39
+ */
40
+ export declare class FecSourceInfo {
41
+ /** Source Block Number (32 bits) */
42
+ readonly sbn: number;
43
+ /** Encoding Symbol ID (32 bits) */
44
+ readonly esi: number;
45
+ /** Original object length (optional, for zero-pad stripping) */
46
+ readonly objectLength?: number | undefined;
47
+ static readonly TYPE = LOCHeaderExtensionId.FecSourceInfo;
48
+ constructor(
49
+ /** Source Block Number (32 bits) */
50
+ sbn: number,
51
+ /** Encoding Symbol ID (32 bits) */
52
+ esi: number,
53
+ /** Original object length (optional, for zero-pad stripping) */
54
+ objectLength?: number | undefined);
55
+ /** Encode as extension value bytes */
56
+ encode(): Uint8Array;
57
+ /** Decode from extension value bytes */
58
+ static decode(buf: Uint8Array): FecSourceInfo;
59
+ }
60
+ /**
61
+ * AuthTag for end-to-end content authentication.
62
+ */
63
+ export declare class AuthTag {
64
+ readonly tag: Uint8Array;
65
+ static readonly TYPE = LOCHeaderExtensionId.AuthTag;
66
+ constructor(tag: Uint8Array);
67
+ }
68
+ //# sourceMappingURL=loc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loc.d.ts","sourceRoot":"","sources":["../src/loc.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,gBAAgB,IAAI;IACpB,iBAAiB,IAAI;IACrB,UAAU,IAAI;IACd,6EAA6E;IAC7E,aAAa,KAAO;IACpB,WAAW,KAAK;IAChB,iCAAiC;IACjC,OAAO,KAAK;CACb;AAED,mDAAmD;AACnD,eAAO,MAAM,WAAW,aAAa,CAAA;AACrC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAMxE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAG3F;AAED;;;GAGG;AACH,qBAAa,aAAa;IAItB,oCAAoC;aACpB,GAAG,EAAE,MAAM;IAC3B,mCAAmC;aACnB,GAAG,EAAE,MAAM;IAC3B,gEAAgE;aAChD,YAAY,CAAC,EAAE,MAAM;IARvC,MAAM,CAAC,QAAQ,CAAC,IAAI,sCAAqC;;IAGvD,oCAAoC;IACpB,GAAG,EAAE,MAAM;IAC3B,mCAAmC;IACnB,GAAG,EAAE,MAAM;IAC3B,gEAAgE;IAChD,YAAY,CAAC,EAAE,MAAM,YAAA;IAGvC,sCAAsC;IACtC,MAAM,IAAI,UAAU;IAWpB,wCAAwC;IACxC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa;CAS9C;AAED;;GAEG;AACH,qBAAa,OAAO;aAGU,GAAG,EAAE,UAAU;IAF3C,MAAM,CAAC,QAAQ,CAAC,IAAI,gCAA+B;gBAEvB,GAAG,EAAE,UAAU;CAG5C"}
package/dist/loc.js ADDED
@@ -0,0 +1,143 @@
1
+ // src/loc.ts
2
+ var LOCHeaderExtensionId = /* @__PURE__ */ ((LOCHeaderExtensionId2) => {
3
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["CaptureTimestamp"] = 2] = "CaptureTimestamp";
4
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["VideoFrameMarking"] = 4] = "VideoFrameMarking";
5
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["AudioLevel"] = 6] = "AudioLevel";
6
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["FecSourceInfo"] = 16] = "FecSourceInfo";
7
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["VideoConfig"] = 13] = "VideoConfig";
8
+ LOCHeaderExtensionId2[LOCHeaderExtensionId2["AuthTag"] = 14] = "AuthTag";
9
+ return LOCHeaderExtensionId2;
10
+ })(LOCHeaderExtensionId || {});
11
+ var FEC_SBN_MAX = 4294967295;
12
+ var FEC_ESI_MAX = 4294967295;
13
+ function encodeFecSourceInfo(sbn, esi) {
14
+ const buf = new Uint8Array(8);
15
+ const view = new DataView(buf.buffer);
16
+ view.setUint32(0, sbn >>> 0, false);
17
+ view.setUint32(4, esi >>> 0, false);
18
+ return buf;
19
+ }
20
+ function decodeFecSourceInfo(buf, offset = 0) {
21
+ const view = new DataView(buf.buffer, buf.byteOffset + offset, 8);
22
+ return [view.getUint32(0, false), view.getUint32(4, false)];
23
+ }
24
+ var _FecSourceInfo = class _FecSourceInfo {
25
+ constructor(sbn, esi, objectLength) {
26
+ this.sbn = sbn;
27
+ this.esi = esi;
28
+ this.objectLength = objectLength;
29
+ }
30
+ /** Encode as extension value bytes */
31
+ encode() {
32
+ const base = encodeFecSourceInfo(this.sbn, this.esi);
33
+ if (this.objectLength == null) return base;
34
+ const lenBytes = encodeQuicVarint(this.objectLength);
35
+ const result = new Uint8Array(8 + lenBytes.length);
36
+ result.set(base, 0);
37
+ result.set(lenBytes, 8);
38
+ return result;
39
+ }
40
+ /** Decode from extension value bytes */
41
+ static decode(buf) {
42
+ const [sbn, esi] = decodeFecSourceInfo(buf);
43
+ let objectLength;
44
+ if (buf.length > 8) {
45
+ const [val] = decodeQuicVarint(buf, 8);
46
+ objectLength = val;
47
+ }
48
+ return new _FecSourceInfo(sbn, esi, objectLength);
49
+ }
50
+ };
51
+ _FecSourceInfo.TYPE = 16 /* FecSourceInfo */;
52
+ var FecSourceInfo = _FecSourceInfo;
53
+ var AuthTag = class {
54
+ constructor(tag) {
55
+ this.tag = tag;
56
+ if (tag.length === 0) throw new Error("AuthTag must not be empty");
57
+ }
58
+ };
59
+ AuthTag.TYPE = 14 /* AuthTag */;
60
+ function encodeQuicVarint(value) {
61
+ if (value < 64) return new Uint8Array([value]);
62
+ if (value < 16384) {
63
+ const buf2 = new Uint8Array(2);
64
+ new DataView(buf2.buffer).setUint16(0, value | 16384);
65
+ return buf2;
66
+ }
67
+ if (value < 1073741824) {
68
+ const buf2 = new Uint8Array(4);
69
+ new DataView(buf2.buffer).setUint32(0, value | 2147483648);
70
+ return buf2;
71
+ }
72
+ const buf = new Uint8Array(8);
73
+ new DataView(buf.buffer).setBigUint64(0, BigInt(value) | 0xc000000000000000n);
74
+ return buf;
75
+ }
76
+ function decodeQuicVarint(buf, offset) {
77
+ if (offset >= buf.length) return [0, 0];
78
+ const first = buf[offset];
79
+ const prefix = first >> 6;
80
+ const len = 1 << prefix;
81
+ if (offset + len > buf.length) return [0, 0];
82
+ const view = new DataView(buf.buffer, buf.byteOffset + offset, len);
83
+ switch (len) {
84
+ case 1:
85
+ return [first & 63, 1];
86
+ case 2:
87
+ return [view.getUint16(0) & 16383, 2];
88
+ case 4:
89
+ return [view.getUint32(0) & 1073741823, 4];
90
+ case 8:
91
+ return [Number(view.getBigUint64(0) & 0x3fffffffffffffffn), 8];
92
+ default:
93
+ return [0, 0];
94
+ }
95
+ }
96
+ if (void 0) {
97
+ const { describe, test, expect } = void 0;
98
+ describe("FEC Source Info (32+32 bit)", () => {
99
+ test("encode/decode roundtrip", () => {
100
+ const [sbn, esi] = [1234, 5678];
101
+ const encoded = encodeFecSourceInfo(sbn, esi);
102
+ expect(encoded.length).toBe(8);
103
+ const [s, e] = decodeFecSourceInfo(encoded);
104
+ expect(s).toBe(1234);
105
+ expect(e).toBe(5678);
106
+ });
107
+ test("max 32-bit values", () => {
108
+ const [sbn, esi] = [4294967295, 4294967295];
109
+ const encoded = encodeFecSourceInfo(sbn, esi);
110
+ const [s, e] = decodeFecSourceInfo(encoded);
111
+ expect(s).toBe(4294967295);
112
+ expect(e).toBe(4294967295);
113
+ });
114
+ test("FecSourceInfo with object length", () => {
115
+ const info = new FecSourceInfo(100, 5, 9999);
116
+ const encoded = info.encode();
117
+ expect(encoded.length).toBeGreaterThan(8);
118
+ const decoded = FecSourceInfo.decode(encoded);
119
+ expect(decoded.sbn).toBe(100);
120
+ expect(decoded.esi).toBe(5);
121
+ expect(decoded.objectLength).toBe(9999);
122
+ });
123
+ test("FecSourceInfo without object length", () => {
124
+ const info = new FecSourceInfo(7, 3);
125
+ const encoded = info.encode();
126
+ expect(encoded.length).toBe(8);
127
+ const decoded = FecSourceInfo.decode(encoded);
128
+ expect(decoded.sbn).toBe(7);
129
+ expect(decoded.esi).toBe(3);
130
+ expect(decoded.objectLength).toBeUndefined();
131
+ });
132
+ });
133
+ }
134
+ export {
135
+ AuthTag,
136
+ FEC_ESI_MAX,
137
+ FEC_SBN_MAX,
138
+ FecSourceInfo,
139
+ LOCHeaderExtensionId,
140
+ decodeFecSourceInfo,
141
+ encodeFecSourceInfo
142
+ };
143
+ //# sourceMappingURL=loc.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/loc.ts"],
4
+ "sourcesContent": ["/**\n * @mmt/container - LOC FEC Extensions\n *\n * FEC Source Info per draft-ramadan-moq-fec \u00A77.1:\n * SBN (32 bits) + ESI (32 bits) = 8 bytes minimum.\n * Optional Original Object Length (QUIC varint) when Length > 8.\n *\n * @packageDocumentation\n */\n\n/**\n * LOC Header Extension IDs\n */\nexport enum LOCHeaderExtensionId {\n CaptureTimestamp = 2,\n VideoFrameMarking = 4,\n AudioLevel = 6,\n /** FEC Source Info: SBN(32) + ESI(32) [+ Original Object Length (varint)] */\n FecSourceInfo = 0x10,\n VideoConfig = 13,\n /** Content authentication tag */\n AuthTag = 14,\n}\n\n/** Maximum value for SBN and ESI (32 bits each) */\nexport const FEC_SBN_MAX = 0xffffffff\nexport const FEC_ESI_MAX = 0xffffffff\n\n/**\n * Encode FEC Source Info value bytes: SBN(4B BE) + ESI(4B BE).\n * Returns 8-byte Uint8Array.\n */\nexport function encodeFecSourceInfo(sbn: number, esi: number): Uint8Array {\n const buf = new Uint8Array(8)\n const view = new DataView(buf.buffer)\n view.setUint32(0, sbn >>> 0, false)\n view.setUint32(4, esi >>> 0, false)\n return buf\n}\n\n/**\n * Decode FEC Source Info value bytes: reads SBN(4B BE) + ESI(4B BE).\n * Returns [sbn, esi].\n */\nexport function decodeFecSourceInfo(buf: Uint8Array, offset = 0): [sbn: number, esi: number] {\n const view = new DataView(buf.buffer, buf.byteOffset + offset, 8)\n return [view.getUint32(0, false), view.getUint32(4, false)]\n}\n\n/**\n * FEC Source Info for LOC/CMAF extension headers.\n * Per draft-ramadan-moq-fec \u00A77.1: SBN(32) + ESI(32), fixed 8-byte minimum.\n */\nexport class FecSourceInfo {\n static readonly TYPE = LOCHeaderExtensionId.FecSourceInfo\n\n constructor(\n /** Source Block Number (32 bits) */\n public readonly sbn: number,\n /** Encoding Symbol ID (32 bits) */\n public readonly esi: number,\n /** Original object length (optional, for zero-pad stripping) */\n public readonly objectLength?: number,\n ) {}\n\n /** Encode as extension value bytes */\n encode(): Uint8Array {\n const base = encodeFecSourceInfo(this.sbn, this.esi)\n if (this.objectLength == null) return base\n // Append QUIC varint for object length\n const lenBytes = encodeQuicVarint(this.objectLength)\n const result = new Uint8Array(8 + lenBytes.length)\n result.set(base, 0)\n result.set(lenBytes, 8)\n return result\n }\n\n /** Decode from extension value bytes */\n static decode(buf: Uint8Array): FecSourceInfo {\n const [sbn, esi] = decodeFecSourceInfo(buf)\n let objectLength: number | undefined\n if (buf.length > 8) {\n const [val] = decodeQuicVarint(buf, 8)\n objectLength = val\n }\n return new FecSourceInfo(sbn, esi, objectLength)\n }\n}\n\n/**\n * AuthTag for end-to-end content authentication.\n */\nexport class AuthTag {\n static readonly TYPE = LOCHeaderExtensionId.AuthTag\n\n constructor(public readonly tag: Uint8Array) {\n if (tag.length === 0) throw new Error('AuthTag must not be empty')\n }\n}\n\n// QUIC varint helpers\nfunction encodeQuicVarint(value: number): Uint8Array {\n if (value < 64) return new Uint8Array([value])\n if (value < 16384) {\n const buf = new Uint8Array(2)\n new DataView(buf.buffer).setUint16(0, value | 0x4000)\n return buf\n }\n if (value < 1073741824) {\n const buf = new Uint8Array(4)\n new DataView(buf.buffer).setUint32(0, value | 0x80000000)\n return buf\n }\n const buf = new Uint8Array(8)\n new DataView(buf.buffer).setBigUint64(0, BigInt(value) | 0xc000000000000000n)\n return buf\n}\n\nfunction decodeQuicVarint(buf: Uint8Array, offset: number): [number, number] {\n if (offset >= buf.length) return [0, 0]\n const first = buf[offset]!\n const prefix = first >> 6\n const len = 1 << prefix\n if (offset + len > buf.length) return [0, 0]\n const view = new DataView(buf.buffer, buf.byteOffset + offset, len)\n switch (len) {\n case 1: return [first & 0x3f, 1]\n case 2: return [view.getUint16(0) & 0x3fff, 2]\n case 4: return [view.getUint32(0) & 0x3fffffff, 4]\n case 8: return [Number(view.getBigUint64(0) & 0x3fffffffffffffffn), 8]\n default: return [0, 0]\n }\n}\n\n// =============================================================================\n// Inline Tests (vitest)\n// =============================================================================\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe('FEC Source Info (32+32 bit)', () => {\n test('encode/decode roundtrip', () => {\n const [sbn, esi] = [1234, 5678]\n const encoded = encodeFecSourceInfo(sbn, esi)\n expect(encoded.length).toBe(8)\n const [s, e] = decodeFecSourceInfo(encoded)\n expect(s).toBe(1234)\n expect(e).toBe(5678)\n })\n\n test('max 32-bit values', () => {\n const [sbn, esi] = [0xffffffff, 0xffffffff]\n const encoded = encodeFecSourceInfo(sbn, esi)\n const [s, e] = decodeFecSourceInfo(encoded)\n expect(s).toBe(0xffffffff)\n expect(e).toBe(0xffffffff)\n })\n\n test('FecSourceInfo with object length', () => {\n const info = new FecSourceInfo(100, 5, 9999)\n const encoded = info.encode()\n expect(encoded.length).toBeGreaterThan(8) // 8 + varint\n const decoded = FecSourceInfo.decode(encoded)\n expect(decoded.sbn).toBe(100)\n expect(decoded.esi).toBe(5)\n expect(decoded.objectLength).toBe(9999)\n })\n\n test('FecSourceInfo without object length', () => {\n const info = new FecSourceInfo(7, 3)\n const encoded = info.encode()\n expect(encoded.length).toBe(8)\n const decoded = FecSourceInfo.decode(encoded)\n expect(decoded.sbn).toBe(7)\n expect(decoded.esi).toBe(3)\n expect(decoded.objectLength).toBeUndefined()\n })\n\n })\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["LOCHeaderExtensionId", "buf"]
7
+ }
@@ -0,0 +1,30 @@
1
+ import { ManifestVerifier, type ManifestAuthConfig, type ManifestTrackContext, type SignatureVerifier } from '@blockcast/mmt-manifest-verify';
2
+ import { type MulticastAuthMode, type ResolvedMulticastAuthConfig } from './multicast-auth-catalog.js';
3
+ export interface ManifestAuthBinding {
4
+ bindingId: string;
5
+ mediaTrack: string;
6
+ manifestTrack: string;
7
+ sourceSymbolFormat: string;
8
+ }
9
+ export interface ManifestAuthPlan {
10
+ verifier: ManifestVerifier;
11
+ mode: MulticastAuthMode;
12
+ bindings: readonly ManifestAuthBinding[];
13
+ manifestTracks: readonly string[];
14
+ bindingIdFor(mediaTrack: string, sourceSymbolFormat: string): string | undefined;
15
+ ingestManifestPayload(manifestTrack: string, payload: Uint8Array): void;
16
+ dispose(): void;
17
+ }
18
+ type ContextFields = Omit<ManifestTrackContext, 'bindingId' | 'trackName' | 'sourceSymbolFormat' | 'authScope' | 'publicKey' | 'acceptedPublicKeys'>;
19
+ /** Build the one canonical verifier plan shared by browser players. Transport
20
+ * implementations subscribe the exact returned manifestTracks and feed each
21
+ * bare source-auth frame to ingestManifestPayload without name inference. */
22
+ export declare function createManifestAuthPlan(catalog: unknown, options: {
23
+ playerMode?: MulticastAuthMode;
24
+ onMissingManifest?: ManifestAuthConfig['onMissingManifest'];
25
+ verifySignature: SignatureVerifier;
26
+ contextFor(binding: ResolvedMulticastAuthConfig['tracks'][number], resolved: ResolvedMulticastAuthConfig): ContextFields;
27
+ onFailure?: ConstructorParameters<typeof ManifestVerifier>[0]['onFailure'];
28
+ }): ManifestAuthPlan | undefined;
29
+ export {};
30
+ //# sourceMappingURL=manifest-auth-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-auth-plan.d.ts","sourceRoot":"","sources":["../src/manifest-auth-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAA;AAEpC,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAA;IACxC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAChF,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAA;IACvE,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,KAAK,aAAa,GAAG,IAAI,CACvB,oBAAoB,EACpB,WAAW,GAAG,WAAW,GAAG,oBAAoB,GAAG,WAAW,GAAG,WAAW,GAAG,oBAAoB,CACpG,CAAA;AAED;;6EAE6E;AAC7E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IACP,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAC3D,eAAe,EAAE,iBAAiB,CAAA;IAClC,UAAU,CACR,OAAO,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EACtD,QAAQ,EAAE,2BAA2B,GACpC,aAAa,CAAA;IAChB,SAAS,CAAC,EAAE,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;CAC3E,GACA,gBAAgB,GAAG,SAAS,CAwD9B"}