@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,526 @@
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 __privateWrapper = (obj, member, setter, getter) => ({
9
+ set _(value) {
10
+ __privateSet(obj, member, value, setter);
11
+ },
12
+ get _() {
13
+ return __privateGet(obj, member, getter);
14
+ }
15
+ });
16
+
17
+ // src/iso-bmff-timing.ts
18
+ var U64_MAX = 0xffffffffffffffffn;
19
+ var I64_MIN = -0x8000000000000000n;
20
+ var I64_MAX = 0x7fffffffffffffffn;
21
+ var MICROSECONDS_PER_SECOND = 1000000n;
22
+ var TFHD_BASE_DATA_OFFSET_PRESENT = 1;
23
+ var TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT = 2;
24
+ var TFHD_DEFAULT_SAMPLE_DURATION_PRESENT = 8;
25
+ var TFHD_DEFAULT_SAMPLE_SIZE_PRESENT = 16;
26
+ var TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT = 32;
27
+ var TFHD_DURATION_IS_EMPTY = 65536;
28
+ var TFHD_DEFAULT_BASE_IS_MOOF = 131072;
29
+ var TFHD_KNOWN_FLAGS = TFHD_BASE_DATA_OFFSET_PRESENT | TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT | TFHD_DEFAULT_SAMPLE_DURATION_PRESENT | TFHD_DEFAULT_SAMPLE_SIZE_PRESENT | TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT | TFHD_DURATION_IS_EMPTY | TFHD_DEFAULT_BASE_IS_MOOF;
30
+ var TRUN_DATA_OFFSET_PRESENT = 1;
31
+ var TRUN_FIRST_SAMPLE_FLAGS_PRESENT = 4;
32
+ var TRUN_SAMPLE_DURATION_PRESENT = 256;
33
+ var TRUN_SAMPLE_SIZE_PRESENT = 512;
34
+ var TRUN_SAMPLE_FLAGS_PRESENT = 1024;
35
+ var TRUN_SAMPLE_CTS_OFFSET_PRESENT = 2048;
36
+ var TRUN_KNOWN_FLAGS = TRUN_DATA_OFFSET_PRESENT | TRUN_FIRST_SAMPLE_FLAGS_PRESENT | TRUN_SAMPLE_DURATION_PRESENT | TRUN_SAMPLE_SIZE_PRESENT | TRUN_SAMPLE_FLAGS_PRESENT | TRUN_SAMPLE_CTS_OFFSET_PRESENT;
37
+ function view(data) {
38
+ return new DataView(data.buffer, data.byteOffset, data.byteLength);
39
+ }
40
+ function boxType(data, offset) {
41
+ return String.fromCharCode(
42
+ data[offset],
43
+ data[offset + 1],
44
+ data[offset + 2],
45
+ data[offset + 3]
46
+ );
47
+ }
48
+ function readU64(data, offset) {
49
+ if (offset < 0 || offset + 8 > data.length) return null;
50
+ const dataView = view(data);
51
+ return BigInt(dataView.getUint32(offset, false)) << 32n | BigInt(dataView.getUint32(offset + 4, false));
52
+ }
53
+ function parseBox(data, start, limit) {
54
+ if (start < 0 || limit > data.length || start + 8 > limit) return null;
55
+ const dataView = view(data);
56
+ const shortSize = dataView.getUint32(start, false);
57
+ let headerSize = 8;
58
+ let size;
59
+ if (shortSize === 0) {
60
+ size = limit - start;
61
+ } else if (shortSize === 1) {
62
+ if (start + 16 > limit) return null;
63
+ const extendedSize = readU64(data, start + 8);
64
+ if (extendedSize === null || extendedSize > BigInt(Number.MAX_SAFE_INTEGER)) return null;
65
+ headerSize = 16;
66
+ size = Number(extendedSize);
67
+ } else {
68
+ size = shortSize;
69
+ }
70
+ if (size < headerSize || start + size > limit) return null;
71
+ return {
72
+ type: boxType(data, start + 4),
73
+ start,
74
+ bodyStart: start + headerSize,
75
+ end: start + size
76
+ };
77
+ }
78
+ function parseBoxes(data, start, end) {
79
+ if (start < 0 || end < start || end > data.length) return null;
80
+ const boxes = [];
81
+ let offset = start;
82
+ while (offset < end) {
83
+ const box = parseBox(data, offset, end);
84
+ if (!box || box.end <= offset) return null;
85
+ boxes.push(box);
86
+ offset = box.end;
87
+ }
88
+ return offset === end ? boxes : null;
89
+ }
90
+ function children(data, parent) {
91
+ return parseBoxes(data, parent.bodyStart, parent.end);
92
+ }
93
+ function exactlyOne(boxes, type) {
94
+ const matches = boxes.filter((box) => box.type === type);
95
+ return matches.length === 1 ? matches[0] : null;
96
+ }
97
+ function parseFullBox(data, box) {
98
+ if (box.bodyStart + 4 > box.end) return null;
99
+ const versionAndFlags = view(data).getUint32(box.bodyStart, false);
100
+ return {
101
+ version: versionAndFlags >>> 24,
102
+ flags: versionAndFlags & 16777215,
103
+ bodyStart: box.bodyStart + 4
104
+ };
105
+ }
106
+ function parseTkhdTrackId(data, box) {
107
+ const full = parseFullBox(data, box);
108
+ if (!full || full.flags & ~15) return null;
109
+ const bodyLength = box.end - full.bodyStart;
110
+ const trackIdOffset = full.version === 0 ? full.bodyStart + 8 : full.version === 1 ? full.bodyStart + 16 : -1;
111
+ const expectedBodyLength = full.version === 0 ? 80 : full.version === 1 ? 92 : -1;
112
+ if (trackIdOffset < 0 || bodyLength !== expectedBodyLength) return null;
113
+ return view(data).getUint32(trackIdOffset, false);
114
+ }
115
+ function parseMdhdTimescale(data, box) {
116
+ const full = parseFullBox(data, box);
117
+ if (!full || full.flags !== 0) return null;
118
+ const bodyLength = box.end - full.bodyStart;
119
+ const timescaleOffset = full.version === 0 ? full.bodyStart + 8 : full.version === 1 ? full.bodyStart + 16 : -1;
120
+ const expectedBodyLength = full.version === 0 ? 20 : full.version === 1 ? 32 : -1;
121
+ if (timescaleOffset < 0 || bodyLength !== expectedBodyLength) return null;
122
+ return view(data).getUint32(timescaleOffset, false);
123
+ }
124
+ function parseHandlerType(data, box) {
125
+ const full = parseFullBox(data, box);
126
+ if (!full || full.version !== 0 || full.flags !== 0 || full.bodyStart + 20 > box.end) {
127
+ return null;
128
+ }
129
+ return boxType(data, full.bodyStart + 4);
130
+ }
131
+ function editListHasEntries(data, box) {
132
+ const full = parseFullBox(data, box);
133
+ if (!full || full.flags !== 0 || full.version !== 0 && full.version !== 1) return null;
134
+ if (full.bodyStart + 4 > box.end) return null;
135
+ const entryCount = view(data).getUint32(full.bodyStart, false);
136
+ const entrySize = full.version === 0 ? 12 : 20;
137
+ const expectedEnd = full.bodyStart + 4 + entryCount * entrySize;
138
+ if (!Number.isSafeInteger(expectedEnd) || expectedEnd !== box.end) return null;
139
+ return entryCount !== 0;
140
+ }
141
+ function parseTrack(data, trak) {
142
+ const trakChildren = children(data, trak);
143
+ if (!trakChildren) return null;
144
+ const tkhd = exactlyOne(trakChildren, "tkhd");
145
+ const mdia = exactlyOne(trakChildren, "mdia");
146
+ if (!tkhd || !mdia) return null;
147
+ const trackId = parseTkhdTrackId(data, tkhd);
148
+ if (trackId === null || trackId === 0) return null;
149
+ const mdiaChildren = children(data, mdia);
150
+ if (!mdiaChildren) return null;
151
+ const mdhd = exactlyOne(mdiaChildren, "mdhd");
152
+ const hdlr = exactlyOne(mdiaChildren, "hdlr");
153
+ if (!mdhd || !hdlr) return null;
154
+ const timescale = parseMdhdTimescale(data, mdhd);
155
+ const handlerType = parseHandlerType(data, hdlr);
156
+ if (timescale === null || timescale === 0 || handlerType === null) return null;
157
+ const edtsBoxes = trakChildren.filter((box) => box.type === "edts");
158
+ if (edtsBoxes.length > 1) return null;
159
+ let hasEdits = false;
160
+ if (edtsBoxes.length === 1) {
161
+ const edtsChildren = children(data, edtsBoxes[0]);
162
+ if (!edtsChildren) return null;
163
+ const editLists = edtsChildren.filter((box) => box.type === "elst");
164
+ if (editLists.length > 1) return null;
165
+ if (editLists.length === 1) {
166
+ const result = editListHasEntries(data, editLists[0]);
167
+ if (result === null) return null;
168
+ hasEdits = result;
169
+ }
170
+ }
171
+ return { trackId, handlerType, timescale, hasEdits };
172
+ }
173
+ function parseTrex(data, box) {
174
+ const full = parseFullBox(data, box);
175
+ if (!full || full.version !== 0 || full.flags !== 0 || box.end - full.bodyStart !== 20) {
176
+ return null;
177
+ }
178
+ const dataView = view(data);
179
+ const trackId = dataView.getUint32(full.bodyStart, false);
180
+ const defaultSampleDuration = dataView.getUint32(full.bodyStart + 8, false);
181
+ const defaultSampleSize = dataView.getUint32(full.bodyStart + 12, false);
182
+ return {
183
+ trackId,
184
+ timescale: 0,
185
+ ...defaultSampleDuration === 0 ? {} : { defaultSampleDuration },
186
+ ...defaultSampleSize === 0 ? {} : { defaultSampleSize }
187
+ };
188
+ }
189
+ function parseIsoBmffInitializationTiming(data) {
190
+ const topLevel = parseBoxes(data, 0, data.length);
191
+ if (!topLevel) return null;
192
+ const ftyp = exactlyOne(topLevel, "ftyp");
193
+ const moov = exactlyOne(topLevel, "moov");
194
+ if (!ftyp || !moov || ftyp.start > moov.start) return null;
195
+ if (topLevel.some((box) => box.type === "moof" || box.type === "mdat")) return null;
196
+ const moovChildren = children(data, moov);
197
+ if (!moovChildren) return null;
198
+ const parsedTracks = [];
199
+ for (const trak of moovChildren.filter((box) => box.type === "trak")) {
200
+ const parsed = parseTrack(data, trak);
201
+ if (!parsed) return null;
202
+ parsedTracks.push(parsed);
203
+ }
204
+ const mediaTracks = parsedTracks.filter(
205
+ (track) => track.handlerType === "vide" || track.handlerType === "soun"
206
+ );
207
+ if (mediaTracks.length !== 1) return null;
208
+ const mediaTrack = mediaTracks[0];
209
+ if (mediaTrack.hasEdits) return null;
210
+ const mvex = exactlyOne(moovChildren, "mvex");
211
+ if (!mvex) return null;
212
+ const mvexChildren = children(data, mvex);
213
+ if (!mvexChildren) return null;
214
+ const trexEntries = [];
215
+ for (const trexBox of mvexChildren.filter((box) => box.type === "trex")) {
216
+ const trex2 = parseTrex(data, trexBox);
217
+ if (!trex2) return null;
218
+ trexEntries.push(trex2);
219
+ }
220
+ const matchingTrex = trexEntries.filter((trex2) => trex2.trackId === mediaTrack.trackId);
221
+ if (matchingTrex.length !== 1) return null;
222
+ const trex = matchingTrex[0];
223
+ return {
224
+ trackId: mediaTrack.trackId,
225
+ timescale: mediaTrack.timescale,
226
+ ...trex.defaultSampleDuration === void 0 ? {} : { defaultSampleDuration: trex.defaultSampleDuration },
227
+ ...trex.defaultSampleSize === void 0 ? {} : { defaultSampleSize: trex.defaultSampleSize }
228
+ };
229
+ }
230
+ function parseMfhdSequence(data, box) {
231
+ const full = parseFullBox(data, box);
232
+ if (!full || full.version !== 0 || full.flags !== 0 || box.end - full.bodyStart !== 4) {
233
+ return null;
234
+ }
235
+ return view(data).getUint32(full.bodyStart, false);
236
+ }
237
+ function parseTfhd(data, box) {
238
+ const full = parseFullBox(data, box);
239
+ if (!full || full.version !== 0 || (full.flags & ~TFHD_KNOWN_FLAGS) !== 0) return null;
240
+ if ((full.flags & TFHD_BASE_DATA_OFFSET_PRESENT) !== 0 || (full.flags & TFHD_DEFAULT_BASE_IS_MOOF) === 0 || (full.flags & TFHD_DURATION_IS_EMPTY) !== 0) {
241
+ return null;
242
+ }
243
+ const dataView = view(data);
244
+ let offset = full.bodyStart;
245
+ if (offset + 4 > box.end) return null;
246
+ const trackId = dataView.getUint32(offset, false);
247
+ offset += 4;
248
+ if ((full.flags & TFHD_SAMPLE_DESCRIPTION_INDEX_PRESENT) !== 0) {
249
+ if (offset + 4 > box.end) return null;
250
+ offset += 4;
251
+ }
252
+ let defaultSampleDuration;
253
+ if ((full.flags & TFHD_DEFAULT_SAMPLE_DURATION_PRESENT) !== 0) {
254
+ if (offset + 4 > box.end) return null;
255
+ defaultSampleDuration = dataView.getUint32(offset, false);
256
+ offset += 4;
257
+ }
258
+ let defaultSampleSize;
259
+ if ((full.flags & TFHD_DEFAULT_SAMPLE_SIZE_PRESENT) !== 0) {
260
+ if (offset + 4 > box.end) return null;
261
+ defaultSampleSize = dataView.getUint32(offset, false);
262
+ offset += 4;
263
+ }
264
+ if ((full.flags & TFHD_DEFAULT_SAMPLE_FLAGS_PRESENT) !== 0) {
265
+ if (offset + 4 > box.end) return null;
266
+ offset += 4;
267
+ }
268
+ if (offset !== box.end) return null;
269
+ return {
270
+ trackId,
271
+ ...defaultSampleDuration === void 0 ? {} : { defaultSampleDuration },
272
+ ...defaultSampleSize === void 0 ? {} : { defaultSampleSize }
273
+ };
274
+ }
275
+ function parseTfdt(data, box) {
276
+ const full = parseFullBox(data, box);
277
+ if (!full || full.flags !== 0) return null;
278
+ if (full.version === 0 && box.end - full.bodyStart === 4) {
279
+ return BigInt(view(data).getUint32(full.bodyStart, false));
280
+ }
281
+ if (full.version === 1 && box.end - full.bodyStart === 8) {
282
+ return readU64(data, full.bodyStart);
283
+ }
284
+ return null;
285
+ }
286
+ function parseMdatLayout(data, offset) {
287
+ if (offset < 0 || offset + 8 > data.length || boxType(data, offset + 4) !== "mdat") return null;
288
+ const dataView = view(data);
289
+ const shortSize = dataView.getUint32(offset, false);
290
+ let headerSize = 8;
291
+ let declaredSize;
292
+ if (shortSize === 0) {
293
+ return null;
294
+ } else if (shortSize === 1) {
295
+ const extended = readU64(data, offset + 8);
296
+ if (extended === null) return null;
297
+ headerSize = 16;
298
+ declaredSize = extended;
299
+ } else {
300
+ declaredSize = BigInt(shortSize);
301
+ }
302
+ if (declaredSize < BigInt(headerSize) || declaredSize < BigInt(data.length - offset)) {
303
+ return null;
304
+ }
305
+ const declaredEnd = BigInt(offset) + declaredSize;
306
+ if (declaredEnd > U64_MAX) return null;
307
+ return { dataStart: BigInt(offset + headerSize), declaredEnd };
308
+ }
309
+ function resolvedDefault(entryValue, tfhdValue, trexValue) {
310
+ const value = entryValue ?? tfhdValue ?? trexValue;
311
+ return value === void 0 || value === 0 ? null : value;
312
+ }
313
+ function parseTrunSamples(data, box, moofStart, baseDecodeTime, tfhd, track, mdat, maxSamples) {
314
+ const full = parseFullBox(data, box);
315
+ if (!full || full.version !== 0 && full.version !== 1 || (full.flags & ~TRUN_KNOWN_FLAGS) !== 0 || (full.flags & TRUN_DATA_OFFSET_PRESENT) === 0 || (full.flags & TRUN_FIRST_SAMPLE_FLAGS_PRESENT) !== 0 && (full.flags & TRUN_SAMPLE_FLAGS_PRESENT) !== 0) {
316
+ return null;
317
+ }
318
+ const dataView = view(data);
319
+ let offset = full.bodyStart;
320
+ if (offset + 8 > box.end) return null;
321
+ const sampleCount = dataView.getUint32(offset, false);
322
+ offset += 4;
323
+ if (sampleCount === 0 || sampleCount > maxSamples) return null;
324
+ const relativeDataOffset = dataView.getInt32(offset, false);
325
+ offset += 4;
326
+ if (relativeDataOffset < 0) return null;
327
+ const dataOffset = BigInt(relativeDataOffset);
328
+ const absoluteDataOffset = BigInt(moofStart) + dataOffset;
329
+ if (absoluteDataOffset > BigInt(data.length) || absoluteDataOffset < mdat.dataStart) return null;
330
+ if ((full.flags & TRUN_FIRST_SAMPLE_FLAGS_PRESENT) !== 0) {
331
+ if (offset + 4 > box.end) return null;
332
+ offset += 4;
333
+ }
334
+ let decodeTime = baseDecodeTime;
335
+ let bytePosition = dataOffset;
336
+ const samples = [];
337
+ for (let index = 0; index < sampleCount; index++) {
338
+ let entryDuration;
339
+ if ((full.flags & TRUN_SAMPLE_DURATION_PRESENT) !== 0) {
340
+ if (offset + 4 > box.end) return null;
341
+ entryDuration = dataView.getUint32(offset, false);
342
+ offset += 4;
343
+ }
344
+ let entrySize;
345
+ if ((full.flags & TRUN_SAMPLE_SIZE_PRESENT) !== 0) {
346
+ if (offset + 4 > box.end) return null;
347
+ entrySize = dataView.getUint32(offset, false);
348
+ offset += 4;
349
+ }
350
+ if ((full.flags & TRUN_SAMPLE_FLAGS_PRESENT) !== 0) {
351
+ if (offset + 4 > box.end) return null;
352
+ offset += 4;
353
+ }
354
+ let compositionOffset = 0;
355
+ if ((full.flags & TRUN_SAMPLE_CTS_OFFSET_PRESENT) !== 0) {
356
+ if (offset + 4 > box.end) return null;
357
+ compositionOffset = full.version === 1 ? dataView.getInt32(offset, false) : dataView.getUint32(offset, false);
358
+ offset += 4;
359
+ }
360
+ if (offset > box.end) return null;
361
+ const duration = resolvedDefault(
362
+ entryDuration,
363
+ tfhd.defaultSampleDuration,
364
+ track.defaultSampleDuration
365
+ );
366
+ const size = resolvedDefault(entrySize, tfhd.defaultSampleSize, track.defaultSampleSize);
367
+ if (duration === null || size === null) return null;
368
+ const sampleEnd = bytePosition + BigInt(size);
369
+ const absoluteSampleEnd = BigInt(moofStart) + sampleEnd;
370
+ if (absoluteSampleEnd > mdat.declaredEnd || absoluteSampleEnd > U64_MAX) return null;
371
+ const presentationTime = decodeTime + BigInt(compositionOffset);
372
+ if (presentationTime < I64_MIN || presentationTime > I64_MAX) return null;
373
+ samples.push({
374
+ decodeTime,
375
+ presentationTime,
376
+ duration,
377
+ timescale: track.timescale,
378
+ size,
379
+ bytePosition
380
+ });
381
+ decodeTime += BigInt(duration);
382
+ if (decodeTime > U64_MAX) return null;
383
+ bytePosition = sampleEnd;
384
+ }
385
+ return offset === box.end ? samples : null;
386
+ }
387
+ function parseIsoBmffMovieFragmentTiming(data, track, maxSamples) {
388
+ if (!Number.isInteger(maxSamples) || maxSamples <= 0) return null;
389
+ const first = parseBox(data, 0, data.length);
390
+ if (!first) return null;
391
+ const moof = first.type === "styp" ? parseBox(data, first.end, data.length) : first;
392
+ if (!moof || moof.type !== "moof" || moof.end >= data.length) return null;
393
+ const moofChildren = children(data, moof);
394
+ if (!moofChildren) return null;
395
+ const mfhd = exactlyOne(moofChildren, "mfhd");
396
+ const traf = exactlyOne(moofChildren, "traf");
397
+ if (!mfhd || !traf) return null;
398
+ const movieFragmentSequenceNumber = parseMfhdSequence(data, mfhd);
399
+ if (movieFragmentSequenceNumber === null || movieFragmentSequenceNumber === 0) return null;
400
+ const trafChildren = children(data, traf);
401
+ if (!trafChildren) return null;
402
+ const tfhdBox = exactlyOne(trafChildren, "tfhd");
403
+ const tfdtBox = exactlyOne(trafChildren, "tfdt");
404
+ const trunBox = exactlyOne(trafChildren, "trun");
405
+ if (!tfhdBox || !tfdtBox || !trunBox) return null;
406
+ const tfhd = parseTfhd(data, tfhdBox);
407
+ const baseDecodeTime = parseTfdt(data, tfdtBox);
408
+ if (!tfhd || tfhd.trackId !== track.trackId || baseDecodeTime === null) return null;
409
+ const mdat = parseMdatLayout(data, moof.end);
410
+ if (!mdat) return null;
411
+ const samples = parseTrunSamples(
412
+ data,
413
+ trunBox,
414
+ moof.start,
415
+ baseDecodeTime,
416
+ tfhd,
417
+ track,
418
+ mdat,
419
+ maxSamples
420
+ );
421
+ if (!samples) return null;
422
+ return { movieFragmentSequenceNumber, samples };
423
+ }
424
+ function sameTrack(a, b) {
425
+ return a.trackId === b.trackId && a.timescale === b.timescale && a.defaultSampleDuration === b.defaultSampleDuration && a.defaultSampleSize === b.defaultSampleSize;
426
+ }
427
+ function sameSample(a, b) {
428
+ return a.decodeTime === b.decodeTime && a.presentationTime === b.presentationTime && a.duration === b.duration && a.timescale === b.timescale && a.size === b.size && a.bytePosition === b.bytePosition;
429
+ }
430
+ var _track, _fragments, _pendingSamples;
431
+ var IsoBmffTimingResolver = class {
432
+ constructor(maxPendingSamples) {
433
+ this.maxPendingSamples = maxPendingSamples;
434
+ __privateAdd(this, _track, null);
435
+ __privateAdd(this, _fragments, /* @__PURE__ */ new Map());
436
+ __privateAdd(this, _pendingSamples, 0);
437
+ if (!Number.isInteger(maxPendingSamples) || maxPendingSamples <= 0) {
438
+ throw new Error("[IsoBmffTimingResolver] maxPendingSamples must be a positive integer");
439
+ }
440
+ }
441
+ get pendingSampleCount() {
442
+ return __privateGet(this, _pendingSamples);
443
+ }
444
+ addInitialization(data) {
445
+ const timing = parseIsoBmffInitializationTiming(data);
446
+ if (!timing) return false;
447
+ if (__privateGet(this, _track)) return sameTrack(__privateGet(this, _track), timing);
448
+ __privateSet(this, _track, timing);
449
+ return true;
450
+ }
451
+ addMovieFragment(mpuSequenceNumber, data, additionalSampleLimit = this.maxPendingSamples) {
452
+ if (!Number.isInteger(additionalSampleLimit) || additionalSampleLimit < 0) return false;
453
+ if (!__privateGet(this, _track) || !isU32(mpuSequenceNumber)) return false;
454
+ const parsed = parseIsoBmffMovieFragmentTiming(
455
+ data,
456
+ __privateGet(this, _track),
457
+ this.maxPendingSamples
458
+ );
459
+ if (!parsed) return false;
460
+ const key = fragmentKey(mpuSequenceNumber, parsed.movieFragmentSequenceNumber);
461
+ const existing = __privateGet(this, _fragments).get(key);
462
+ if (existing) {
463
+ return existing.length === parsed.samples.length && existing.every(
464
+ (sample, index) => sample !== null && sameSample(sample, parsed.samples[index])
465
+ );
466
+ }
467
+ if (parsed.samples.length > additionalSampleLimit) return false;
468
+ if (__privateGet(this, _pendingSamples) + parsed.samples.length > this.maxPendingSamples) return false;
469
+ __privateGet(this, _fragments).set(key, [...parsed.samples]);
470
+ __privateSet(this, _pendingSamples, __privateGet(this, _pendingSamples) + parsed.samples.length);
471
+ return true;
472
+ }
473
+ sampleTiming(mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber) {
474
+ if (!isU32(mpuSequenceNumber) || !isU32(movieFragmentSequenceNumber) || movieFragmentSequenceNumber === 0 || !isU32(sampleNumber) || sampleNumber === 0) {
475
+ return null;
476
+ }
477
+ const samples = __privateGet(this, _fragments).get(
478
+ fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber)
479
+ );
480
+ return samples?.[sampleNumber - 1] ?? null;
481
+ }
482
+ consumeSample(mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber, expected) {
483
+ const key = fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber);
484
+ const samples = __privateGet(this, _fragments).get(key);
485
+ const index = sampleNumber - 1;
486
+ const sample = samples?.[index];
487
+ if (!samples || !sample || !sameSample(sample, expected)) return false;
488
+ samples[index] = null;
489
+ __privateWrapper(this, _pendingSamples)._--;
490
+ if (samples.every((value) => value === null)) __privateGet(this, _fragments).delete(key);
491
+ return true;
492
+ }
493
+ reset() {
494
+ __privateSet(this, _track, null);
495
+ __privateGet(this, _fragments).clear();
496
+ __privateSet(this, _pendingSamples, 0);
497
+ }
498
+ };
499
+ _track = new WeakMap();
500
+ _fragments = new WeakMap();
501
+ _pendingSamples = new WeakMap();
502
+ function fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber) {
503
+ return `${mpuSequenceNumber}:${movieFragmentSequenceNumber}`;
504
+ }
505
+ function isU32(value) {
506
+ return Number.isInteger(value) && value >= 0 && value <= 4294967295;
507
+ }
508
+ function mediaTicksToMicroseconds(ticks, timescale) {
509
+ if (!Number.isInteger(timescale) || timescale <= 0) return null;
510
+ const numerator = ticks * MICROSECONDS_PER_SECOND;
511
+ const scale = BigInt(timescale);
512
+ const whole = numerator / scale;
513
+ const remainder = numerator % scale;
514
+ if (whole < BigInt(Number.MIN_SAFE_INTEGER) || whole > BigInt(Number.MAX_SAFE_INTEGER)) {
515
+ return null;
516
+ }
517
+ const result = Number(whole) + Number(remainder) / timescale;
518
+ return Number.isFinite(result) ? result : null;
519
+ }
520
+ export {
521
+ IsoBmffTimingResolver,
522
+ mediaTicksToMicroseconds,
523
+ parseIsoBmffInitializationTiming,
524
+ parseIsoBmffMovieFragmentTiming
525
+ };
526
+ //# sourceMappingURL=iso-bmff-timing.js.map
@@ -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\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\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 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 if (!Number.isInteger(additionalSampleLimit) || additionalSampleLimit < 0) return false\n if (!this.#track || !isU32(mpuSequenceNumber)) return false\n const parsed = parseIsoBmffMovieFragmentTiming(\n data,\n this.#track,\n this.maxPendingSamples,\n )\n if (!parsed) return false\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 if (parsed.samples.length > additionalSampleLimit) return false\n if (this.#pendingSamples + parsed.samples.length > this.maxPendingSamples) return false\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 key = fragmentKey(mpuSequenceNumber, movieFragmentSequenceNumber)\n const samples = this.#fragments.get(key)\n const index = sampleNumber - 1\n const sample = samples?.[index]\n if (!samples || !sample || !sameSample(sample, expected)) 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
+ }