@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.
- package/README.md +432 -0
- package/dist/.build-stamp +0 -0
- package/dist/__tests__/test-utils.d.ts +71 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/align.d.ts +148 -0
- package/dist/align.d.ts.map +1 -0
- package/dist/align.js +88 -0
- package/dist/align.js.map +7 -0
- package/dist/audio-init-parser.d.ts +66 -0
- package/dist/audio-init-parser.d.ts.map +1 -0
- package/dist/audio-init-parser.js +118 -0
- package/dist/audio-init-parser.js.map +7 -0
- package/dist/audio-ring-buffer.d.ts +50 -0
- package/dist/audio-ring-buffer.d.ts.map +1 -0
- package/dist/audio-ring-buffer.js +93 -0
- package/dist/audio-ring-buffer.js.map +7 -0
- package/dist/authored-timing.d.ts +32 -0
- package/dist/authored-timing.d.ts.map +1 -0
- package/dist/authored-timing.js +32 -0
- package/dist/authored-timing.js.map +7 -0
- package/dist/browser-runtime.js +17109 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +318 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +549 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +82 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +66 -0
- package/dist/catalog-fec-params.js.map +7 -0
- package/dist/catalog-network-source.d.ts +19 -0
- package/dist/catalog-network-source.d.ts.map +1 -0
- package/dist/catalog-network-source.js +22 -0
- package/dist/catalog-network-source.js.map +7 -0
- package/dist/catalog-validator.d.ts +18 -0
- package/dist/catalog-validator.d.ts.map +1 -0
- package/dist/catalog-validator.js +7747 -0
- package/dist/catalog-validator.js.map +7 -0
- package/dist/cmaf-block-assembler.d.ts +168 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1755 -0
- package/dist/cmaf-block-assembler.js.map +7 -0
- package/dist/cmaf-group-batcher.d.ts +38 -0
- package/dist/cmaf-group-batcher.d.ts.map +1 -0
- package/dist/cmaf-group-batcher.js +195 -0
- package/dist/cmaf-group-batcher.js.map +7 -0
- package/dist/cmcd-producer.d.ts +104 -0
- package/dist/cmcd-producer.d.ts.map +1 -0
- package/dist/cmcd-producer.js +207 -0
- package/dist/cmcd-producer.js.map +7 -0
- package/dist/codec-utils.d.ts +235 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1225 -0
- package/dist/codec-utils.js.map +7 -0
- package/dist/fec-codec.d.ts +32 -0
- package/dist/fec-codec.d.ts.map +1 -0
- package/dist/fec-codec.js +47 -0
- package/dist/fec-codec.js.map +7 -0
- package/dist/fec-manager.d.ts +266 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +1447 -0
- package/dist/fec-manager.js.map +7 -0
- package/dist/fec-starvation-detector.d.ts +59 -0
- package/dist/fec-starvation-detector.d.ts.map +1 -0
- package/dist/fec-starvation-detector.js +75 -0
- package/dist/fec-starvation-detector.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +76 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +603 -0
- package/dist/fec-worker-setup.js.map +7 -0
- package/dist/fmp4-completion.d.ts +30 -0
- package/dist/fmp4-completion.d.ts.map +1 -0
- package/dist/fmp4-completion.js +21 -0
- package/dist/fmp4-completion.js.map +7 -0
- package/dist/fmp4-reader.d.ts +37 -0
- package/dist/fmp4-reader.d.ts.map +1 -0
- package/dist/fmp4-reader.js +100 -0
- package/dist/fmp4-reader.js.map +7 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +330 -0
- package/dist/index.js.map +7 -0
- package/dist/iso-bmff-timing.d.ts +47 -0
- package/dist/iso-bmff-timing.d.ts.map +1 -0
- package/dist/iso-bmff-timing.js +526 -0
- package/dist/iso-bmff-timing.js.map +7 -0
- package/dist/loc.d.ts +68 -0
- package/dist/loc.d.ts.map +1 -0
- package/dist/loc.js +143 -0
- package/dist/loc.js.map +7 -0
- package/dist/manifest-auth-plan.d.ts +30 -0
- package/dist/manifest-auth-plan.d.ts.map +1 -0
- package/dist/manifest-auth-plan.js +1267 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +338 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +802 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +264 -0
- package/dist/mfu-reassembler.d.ts.map +1 -0
- package/dist/mfu-reassembler.js +2668 -0
- package/dist/mfu-reassembler.js.map +7 -0
- package/dist/mfu-reassembly-policy.d.ts +24 -0
- package/dist/mfu-reassembly-policy.d.ts.map +1 -0
- package/dist/mfu-reassembly-policy.js +99 -0
- package/dist/mfu-reassembly-policy.js.map +7 -0
- package/dist/mmtp-container-parser.d.ts +304 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +5378 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +7853 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +96 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +5589 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +383 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +8384 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +166 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +781 -0
- package/dist/mmtp-to-cmaf.js.map +7 -0
- package/dist/multicast-auth-catalog.d.ts +115 -0
- package/dist/multicast-auth-catalog.d.ts.map +1 -0
- package/dist/multicast-auth-catalog.js +202 -0
- package/dist/multicast-auth-catalog.js.map +7 -0
- package/dist/multicast-input.d.ts +107 -0
- package/dist/multicast-input.d.ts.map +1 -0
- package/dist/multicast-input.js +256 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +330 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +11032 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +62 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +338 -0
- package/dist/multicast-transport.js.map +7 -0
- package/dist/multicast-unwrap.d.ts +57 -0
- package/dist/multicast-unwrap.d.ts.map +1 -0
- package/dist/multicast-unwrap.js +384 -0
- package/dist/multicast-unwrap.js.map +7 -0
- package/dist/no-modules.d.ts +9 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +7819 -0
- package/dist/no-modules.js.map +7 -0
- package/dist/phase14-catalog-override.d.ts +126 -0
- package/dist/phase14-catalog-override.d.ts.map +1 -0
- package/dist/phase14-catalog-override.js +155 -0
- package/dist/phase14-catalog-override.js.map +7 -0
- package/dist/repair-fetch.d.ts +58 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +117 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/sample-combiner.d.ts +182 -0
- package/dist/sample-combiner.d.ts.map +1 -0
- package/dist/sample-combiner.js +571 -0
- package/dist/sample-combiner.js.map +7 -0
- package/dist/signaling.d.ts +29 -0
- package/dist/signaling.d.ts.map +1 -0
- package/dist/signaling.js +232 -0
- package/dist/signaling.js.map +7 -0
- package/dist/source-auth.d.ts +2 -0
- package/dist/source-auth.d.ts.map +1 -0
- package/dist/source-auth.js +1220 -0
- package/dist/source-auth.js.map +7 -0
- package/dist/switching-set-alignment.d.ts +61 -0
- package/dist/switching-set-alignment.d.ts.map +1 -0
- package/dist/switching-set-alignment.js +85 -0
- package/dist/switching-set-alignment.js.map +7 -0
- package/dist/timestamp-codec.d.ts +34 -0
- package/dist/timestamp-codec.d.ts.map +1 -0
- package/dist/timestamp-codec.js +456 -0
- package/dist/timestamp-codec.js.map +7 -0
- package/dist/track-pipeline-setup.d.ts +72 -0
- package/dist/track-pipeline-setup.d.ts.map +1 -0
- package/dist/track-pipeline-setup.js +306 -0
- package/dist/track-pipeline-setup.js.map +7 -0
- package/dist/track-pipeline.d.ts +121 -0
- package/dist/track-pipeline.d.ts.map +1 -0
- package/dist/track-pipeline.js +229 -0
- package/dist/track-pipeline.js.map +7 -0
- package/dist/track-session.d.ts +269 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +597 -0
- package/dist/track-session.js.map +7 -0
- package/dist/transport-pool.d.ts +69 -0
- package/dist/transport-pool.d.ts.map +1 -0
- package/dist/transport-pool.js +88 -0
- package/dist/transport-pool.js.map +7 -0
- package/dist/wasm-mfu-reassembler.d.ts +81 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +1915 -0
- package/dist/wasm-mfu-reassembler.js.map +7 -0
- package/dist/wasm-mmtp-container-parser.d.ts +10 -0
- package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
- package/dist/wasm-mmtp-container-parser.js +5635 -0
- package/dist/wasm-mmtp-container-parser.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/README.md +213 -0
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/package.json +59 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
- package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
- package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
- package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
- package/node_modules/@blockcast/mmt-fec/README.md +270 -0
- package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
- package/node_modules/@blockcast/mmt-fec/package.json +79 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
- package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
- package/node_modules/@noble/hashes/LICENSE +21 -0
- package/node_modules/@noble/hashes/README.md +521 -0
- package/node_modules/@noble/hashes/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_assert.js +18 -0
- package/node_modules/@noble/hashes/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_blake.js +50 -0
- package/node_modules/@noble/hashes/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_md.js +162 -0
- package/node_modules/@noble/hashes/_md.js.map +1 -0
- package/node_modules/@noble/hashes/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_u64.js +90 -0
- package/node_modules/@noble/hashes/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/argon2.js +401 -0
- package/node_modules/@noble/hashes/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake1.js +459 -0
- package/node_modules/@noble/hashes/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2.js +420 -0
- package/node_modules/@noble/hashes/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2b.js +14 -0
- package/node_modules/@noble/hashes/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2s.js +24 -0
- package/node_modules/@noble/hashes/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake3.js +255 -0
- package/node_modules/@noble/hashes/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/crypto.js +5 -0
- package/node_modules/@noble/hashes/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.js +18 -0
- package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/eskdf.js +166 -0
- package/node_modules/@noble/hashes/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.js +15 -0
- package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.js +45 -0
- package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.js +155 -0
- package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.js +67 -0
- package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.js +392 -0
- package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.js +452 -0
- package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.js +413 -0
- package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
- package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.js +251 -0
- package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.js +2 -0
- package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
- package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
- package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.js +86 -0
- package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/index.js +33 -0
- package/node_modules/@noble/hashes/esm/index.js.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.js +281 -0
- package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/esm/package.json +10 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
- package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.js +11 -0
- package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.js +375 -0
- package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.js +20 -0
- package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.js +234 -0
- package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.js +26 -0
- package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.js +281 -0
- package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
- package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hkdf.js +88 -0
- package/node_modules/@noble/hashes/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hmac.js +91 -0
- package/node_modules/@noble/hashes/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/index.d.ts +1 -0
- package/node_modules/@noble/hashes/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/index.js +33 -0
- package/node_modules/@noble/hashes/index.js.map +1 -0
- package/node_modules/@noble/hashes/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/legacy.js +287 -0
- package/node_modules/@noble/hashes/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/package.json +266 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/pbkdf2.js +101 -0
- package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.js +16 -0
- package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/scrypt.js +232 -0
- package/node_modules/@noble/hashes/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha1.js +14 -0
- package/node_modules/@noble/hashes/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha2.js +384 -0
- package/node_modules/@noble/hashes/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha256.js +23 -0
- package/node_modules/@noble/hashes/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.js +402 -0
- package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3.js +239 -0
- package/node_modules/@noble/hashes/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha512.js +29 -0
- package/node_modules/@noble/hashes/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/src/_assert.ts +22 -0
- package/node_modules/@noble/hashes/src/_blake.ts +50 -0
- package/node_modules/@noble/hashes/src/_md.ts +176 -0
- package/node_modules/@noble/hashes/src/_u64.ts +91 -0
- package/node_modules/@noble/hashes/src/argon2.ts +497 -0
- package/node_modules/@noble/hashes/src/blake1.ts +534 -0
- package/node_modules/@noble/hashes/src/blake2.ts +486 -0
- package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
- package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
- package/node_modules/@noble/hashes/src/blake3.ts +272 -0
- package/node_modules/@noble/hashes/src/crypto.ts +9 -0
- package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
- package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
- package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
- package/node_modules/@noble/hashes/src/hmac.ts +94 -0
- package/node_modules/@noble/hashes/src/index.ts +31 -0
- package/node_modules/@noble/hashes/src/legacy.ts +293 -0
- package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
- package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
- package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
- package/node_modules/@noble/hashes/src/sha1.ts +10 -0
- package/node_modules/@noble/hashes/src/sha2.ts +402 -0
- package/node_modules/@noble/hashes/src/sha256.ts +24 -0
- package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
- package/node_modules/@noble/hashes/src/sha3.ts +258 -0
- package/node_modules/@noble/hashes/src/sha512.ts +34 -0
- package/node_modules/@noble/hashes/src/utils.ts +395 -0
- package/node_modules/@noble/hashes/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/utils.js +313 -0
- package/node_modules/@noble/hashes/utils.js.map +1 -0
- package/package.json +203 -0
- package/schemas/catalog.schema.json +283 -0
- package/src/align.ts +235 -0
- package/src/audio-init-parser.ts +189 -0
- package/src/audio-ring-buffer.ts +120 -0
- package/src/authored-timing.ts +63 -0
- package/src/carp-catalog.ts +776 -0
- package/src/catalog-fec-params.ts +167 -0
- package/src/catalog-network-source.ts +49 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1058 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +329 -0
- package/src/codec-utils.ts +1539 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +1939 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-worker-setup.ts +177 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +443 -0
- package/src/iso-bmff-timing.ts +688 -0
- package/src/loc.ts +181 -0
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +1185 -0
- package/src/mfu-reassembler.ts +2842 -0
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +1498 -0
- package/src/mmtp-decode-pipeline.ts +315 -0
- package/src/mmtp-router.ts +3027 -0
- package/src/mmtp-to-cmaf.ts +956 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +439 -0
- package/src/multicast-manager.ts +1503 -0
- package/src/multicast-transport.ts +320 -0
- package/src/multicast-unwrap.ts +132 -0
- package/src/no-modules.ts +20 -0
- package/src/phase14-catalog-override.ts +336 -0
- package/src/repair-fetch.ts +217 -0
- package/src/sample-combiner.ts +846 -0
- package/src/signaling.ts +78 -0
- package/src/source-auth.ts +1 -0
- package/src/switching-set-alignment.ts +109 -0
- package/src/timestamp-codec.ts +265 -0
- package/src/track-pipeline-setup.ts +189 -0
- package/src/track-pipeline.ts +332 -0
- package/src/track-session.ts +778 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +372 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +25 -0
- package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
- package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
- package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
- package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
- package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
- package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
- package/test-vectors/catalog/negative/network-source-object.json +25 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
- package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
- package/test-vectors/catalog/negative/track-role-empty.json +16 -0
- package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
- package/test-vectors/catalog/positive/fec-multicast.json +51 -0
- package/test-vectors/catalog/positive/flat-av.json +30 -0
- package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
- package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
- package/test-vectors/catalog/positive/track-role.json +49 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
- package/test-vectors/catalog-multicast-auth-v1.json +26 -0
- package/test-vectors/catalog-validation.json +148 -0
- package/test-vectors/catalog-validator-public-api.mjs +25 -0
- package/test-vectors/generate-source-auth-fixture.mjs +114 -0
- package/test-vectors/source-auth-v1.json +61 -0
- package/test-vectors/subsample-placement-v1.json +230 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FEC Block Mapper — §8.3 Source Symbol ESI Derivation
|
|
3
|
+
*
|
|
4
|
+
* Maps between MoQ transport identifiers (group_id, object_id) and
|
|
5
|
+
* FEC block coordinates (SBN, ESI, SS_ID) per draft-ramadan-moq-fec-00 §8.3.
|
|
6
|
+
*
|
|
7
|
+
* Shared by both players (audio/video pacing) and IWA (visualization + override).
|
|
8
|
+
*
|
|
9
|
+
* The formulas:
|
|
10
|
+
* D = max(1, floor(interleaveDepthMs / gopDurationMs + 0.5))
|
|
11
|
+
* SBN = floor(G / D) // source block number
|
|
12
|
+
* first_group = SBN * D
|
|
13
|
+
* symbols_per_group = ceil(K / D)
|
|
14
|
+
* ESI = (G - first_group) * symbols_per_group + O
|
|
15
|
+
* SS_ID = SBN * K + ESI
|
|
16
|
+
*/
|
|
17
|
+
/** Configuration from catalog FEC parameters. */
|
|
18
|
+
export interface FecBlockConfig {
|
|
19
|
+
/** Block time span from catalog fec.interleaveDepthMs (milliseconds). */
|
|
20
|
+
interleaveDepthMs: number;
|
|
21
|
+
/** GOP/frame duration (milliseconds). Measured from actual MMTP timestamps. */
|
|
22
|
+
gopDurationMs: number;
|
|
23
|
+
/** K — source symbols per block from catalog fec.sourceSymbols. */
|
|
24
|
+
k: number;
|
|
25
|
+
}
|
|
26
|
+
/** Result of mapping MoQ (group, object) → FEC coordinates. */
|
|
27
|
+
export interface FecCoordinates {
|
|
28
|
+
/** Source Block Number */
|
|
29
|
+
sbn: number;
|
|
30
|
+
/** Encoding Symbol ID within block (0..K-1 for source symbols) */
|
|
31
|
+
esi: number;
|
|
32
|
+
/** Flat source symbol ID: SBN * K + ESI */
|
|
33
|
+
ssId: number;
|
|
34
|
+
/** Which group within the block (0..D-1) */
|
|
35
|
+
groupInBlock: number;
|
|
36
|
+
/** Total groups per block (D) */
|
|
37
|
+
groupsPerBlock: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class FecBlockMapper {
|
|
40
|
+
/** Groups per FEC block, recovered with positive round-half-up semantics. */
|
|
41
|
+
readonly d: number;
|
|
42
|
+
/** Source symbols contributed by each group: ceil(K / D) */
|
|
43
|
+
readonly symbolsPerGroup: number;
|
|
44
|
+
/** Source symbols per block */
|
|
45
|
+
readonly k: number;
|
|
46
|
+
/** Block time span (ms) — used as pacing threshold */
|
|
47
|
+
readonly interleaveDepthMs: number;
|
|
48
|
+
/** GOP/frame duration (ms) */
|
|
49
|
+
readonly gopDurationMs: number;
|
|
50
|
+
constructor(config: FecBlockConfig);
|
|
51
|
+
/**
|
|
52
|
+
* §8.3: MoQ (group_id, object_id) → FEC (SBN, ESI, SS_ID).
|
|
53
|
+
*
|
|
54
|
+
* For a source object with MoQ Group_ID G and Object_ID O.
|
|
55
|
+
*/
|
|
56
|
+
derive(groupId: number, objectId: number): FecCoordinates;
|
|
57
|
+
/**
|
|
58
|
+
* §8.3 inverse: SS_ID → (SBN, ESI).
|
|
59
|
+
*
|
|
60
|
+
* For MMTP over multicast UDP where the Source FEC Payload ID carries SS_ID directly.
|
|
61
|
+
*/
|
|
62
|
+
fromSsId(ssId: number): {
|
|
63
|
+
sbn: number;
|
|
64
|
+
esi: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Pacing threshold: one full block duration = interleaveDepthMs.
|
|
68
|
+
* The minimum buffer needed before FEC recovery can start.
|
|
69
|
+
*/
|
|
70
|
+
get pacingThresholdMs(): number;
|
|
71
|
+
/** Is this group the first in a new FEC block? (SBN boundary) */
|
|
72
|
+
isBlockBoundary(groupId: number): boolean;
|
|
73
|
+
/** Block start/end group IDs for a given SBN. For IWA visualization. */
|
|
74
|
+
blockRange(sbn: number): {
|
|
75
|
+
firstGroup: number;
|
|
76
|
+
lastGroup: number;
|
|
77
|
+
};
|
|
78
|
+
/** CMAF segment name for a block. Matches MoQ group naming convention. */
|
|
79
|
+
segmentName(trackName: string, sbn: number): string;
|
|
80
|
+
/** Expected number of samples in a complete CMAF segment for this block. */
|
|
81
|
+
get samplesPerBlock(): number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Null/raw mode: no FEC. Every group is its own "block".
|
|
85
|
+
* Used when catalog has no FEC config (ATSC raw, DVB dongles, no-FEC MMTP).
|
|
86
|
+
* IWA uses this for passthrough visualization.
|
|
87
|
+
*/
|
|
88
|
+
export declare class NullBlockMapper extends FecBlockMapper {
|
|
89
|
+
constructor(gopDurationMs: number);
|
|
90
|
+
derive(groupId: number, objectId: number): FecCoordinates;
|
|
91
|
+
get pacingThresholdMs(): number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Object-level FEC (§9.1): each MoQ group (frame) is its own FEC block.
|
|
95
|
+
* K_actual = ceil(frame_bytes / symbolSize) — varies per block.
|
|
96
|
+
*
|
|
97
|
+
* SBN = group_id, ESI = object_id.
|
|
98
|
+
* SS_ID = Group_ID * sourceSymbols + Object_ID (§9.1.2).
|
|
99
|
+
*
|
|
100
|
+
* This mapper does NOT carry per-block K. Each block discovers its own K from:
|
|
101
|
+
* 1. Clean reception: counting source objects per group
|
|
102
|
+
* 2. Repair packets: RSB_length in Repair FEC Payload ID (§7.1)
|
|
103
|
+
*
|
|
104
|
+
* Callers MUST pass per-block K to FecBlockManager.addSourcePacket/addRepairPacket.
|
|
105
|
+
* Created once per stream, GC'd on stream close (Effect cleanup).
|
|
106
|
+
*/
|
|
107
|
+
export declare class ObjectBlockMapper extends FecBlockMapper {
|
|
108
|
+
/** Catalog sourceSymbols (max K) — used ONLY for SS_ID encoding (§9.1.2).
|
|
109
|
+
* Actual per-block K varies: K_actual = ceil(frame_bytes / symbolSize). */
|
|
110
|
+
readonly sourceSymbolsMax: number;
|
|
111
|
+
constructor(gopDurationMs: number, sourceSymbolsMax: number);
|
|
112
|
+
/** SBN = group_id, ESI = object_id. SS_ID per §9.1.2. */
|
|
113
|
+
derive(groupId: number, objectId: number): FecCoordinates;
|
|
114
|
+
/**
|
|
115
|
+
* Decode SS_ID using block-specific K from repair metadata.
|
|
116
|
+
* In object mode, the global K is meaningless — each block has different K.
|
|
117
|
+
* Callers must pass blockK (from RSB_length in repair FEC Payload ID).
|
|
118
|
+
*/
|
|
119
|
+
fromSsId(ssId: number, blockK?: number): {
|
|
120
|
+
sbn: number;
|
|
121
|
+
esi: number;
|
|
122
|
+
};
|
|
123
|
+
get pacingThresholdMs(): number;
|
|
124
|
+
isBlockBoundary(_groupId: number): boolean;
|
|
125
|
+
get samplesPerBlock(): number;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a FecBlockMapper from catalog FEC config + measured GOP duration.
|
|
129
|
+
* Returns NullBlockMapper when FEC is not configured.
|
|
130
|
+
* Returns ObjectBlockMapper when fecMode is 'object'.
|
|
131
|
+
*/
|
|
132
|
+
export declare function createMapper(fecConfig: {
|
|
133
|
+
interleaveDepthMs?: number;
|
|
134
|
+
sourceSymbols?: number;
|
|
135
|
+
mode?: string;
|
|
136
|
+
} | undefined, gopDurationMs: number): FecBlockMapper;
|
|
137
|
+
/** A registered track with its mapper and time anchor. */
|
|
138
|
+
export interface BridgedTrack {
|
|
139
|
+
mapper: FecBlockMapper;
|
|
140
|
+
/** Wall-clock time (ms) when group 0 of this track started. */
|
|
141
|
+
epochMs: number;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Cross-track SBN alignment via wall-clock timestamps.
|
|
145
|
+
*
|
|
146
|
+
* Different physical layers have different FEC configs (WiFi K=4/80ms,
|
|
147
|
+
* cellular K=32/4000ms, ATSC K=64/10000ms). Each track has its own
|
|
148
|
+
* FecBlockMapper. The bridge converts between them using wall-clock
|
|
149
|
+
* timestamps as the universal coordinate.
|
|
150
|
+
*/
|
|
151
|
+
export declare class FecTimestampBridge {
|
|
152
|
+
#private;
|
|
153
|
+
/** Register a track with its FEC mapper and start epoch. */
|
|
154
|
+
register(trackName: string, mapper: FecBlockMapper, epochMs: number): void;
|
|
155
|
+
/** Remove a track. */
|
|
156
|
+
unregister(trackName: string): void;
|
|
157
|
+
/** All registered track names. */
|
|
158
|
+
get trackNames(): string[];
|
|
159
|
+
/** Get the mapper for a specific track. */
|
|
160
|
+
getMapper(trackName: string): FecBlockMapper | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* Resolve a wall-clock timestamp to SBN on every registered track.
|
|
163
|
+
* Returns a map of trackName → { sbn, groupInBlock, groupsPerBlock }.
|
|
164
|
+
*/
|
|
165
|
+
resolve(wallClockMs: number): Map<string, {
|
|
166
|
+
sbn: number;
|
|
167
|
+
groupId: number;
|
|
168
|
+
groupInBlock: number;
|
|
169
|
+
}>;
|
|
170
|
+
/**
|
|
171
|
+
* Wall-clock time range for a specific block on a specific track.
|
|
172
|
+
*/
|
|
173
|
+
blockTimeRange(trackName: string, sbn: number): {
|
|
174
|
+
startMs: number;
|
|
175
|
+
endMs: number;
|
|
176
|
+
} | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* Find which SBNs on other tracks overlap a given block on a source track.
|
|
179
|
+
*/
|
|
180
|
+
overlappingBlocks(sourceTrack: string, sourceSbn: number, targetTrack: string): {
|
|
181
|
+
firstSbn: number;
|
|
182
|
+
lastSbn: number;
|
|
183
|
+
} | undefined;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=fec-block-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fec-block-mapper.d.ts","sourceRoot":"","sources":["../src/fec-block-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FEC Block Mapper — §8.3 Source Symbol ESI Derivation
|
|
3
|
+
*
|
|
4
|
+
* Maps between MoQ transport identifiers (group_id, object_id) and
|
|
5
|
+
* FEC block coordinates (SBN, ESI, SS_ID) per draft-ramadan-moq-fec-00 §8.3.
|
|
6
|
+
*
|
|
7
|
+
* Shared by both players (audio/video pacing) and IWA (visualization + override).
|
|
8
|
+
*
|
|
9
|
+
* The formulas:
|
|
10
|
+
* D = max(1, floor(interleaveDepthMs / gopDurationMs + 0.5))
|
|
11
|
+
* SBN = floor(G / D) // source block number
|
|
12
|
+
* first_group = SBN * D
|
|
13
|
+
* symbols_per_group = ceil(K / D)
|
|
14
|
+
* ESI = (G - first_group) * symbols_per_group + O
|
|
15
|
+
* SS_ID = SBN * K + ESI
|
|
16
|
+
*/
|
|
17
|
+
import { deriveFecInterleaveDepth } from "./oti.js";
|
|
18
|
+
export class FecBlockMapper {
|
|
19
|
+
/** Groups per FEC block, recovered with positive round-half-up semantics. */
|
|
20
|
+
d;
|
|
21
|
+
/** Source symbols contributed by each group: ceil(K / D) */
|
|
22
|
+
symbolsPerGroup;
|
|
23
|
+
/** Source symbols per block */
|
|
24
|
+
k;
|
|
25
|
+
/** Block time span (ms) — used as pacing threshold */
|
|
26
|
+
interleaveDepthMs;
|
|
27
|
+
/** GOP/frame duration (ms) */
|
|
28
|
+
gopDurationMs;
|
|
29
|
+
constructor(config) {
|
|
30
|
+
if (config.k <= 0)
|
|
31
|
+
throw new Error('k must be > 0');
|
|
32
|
+
this.k = config.k;
|
|
33
|
+
this.interleaveDepthMs = config.interleaveDepthMs;
|
|
34
|
+
this.gopDurationMs = config.gopDurationMs;
|
|
35
|
+
this.d = deriveFecInterleaveDepth(config.interleaveDepthMs, config.gopDurationMs);
|
|
36
|
+
this.symbolsPerGroup = Math.ceil(config.k / this.d);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* §8.3: MoQ (group_id, object_id) → FEC (SBN, ESI, SS_ID).
|
|
40
|
+
*
|
|
41
|
+
* For a source object with MoQ Group_ID G and Object_ID O.
|
|
42
|
+
*/
|
|
43
|
+
derive(groupId, objectId) {
|
|
44
|
+
const sbn = Math.floor(groupId / this.d);
|
|
45
|
+
const firstGroup = sbn * this.d;
|
|
46
|
+
const groupInBlock = groupId - firstGroup;
|
|
47
|
+
const esi = groupInBlock * this.symbolsPerGroup + objectId;
|
|
48
|
+
return {
|
|
49
|
+
sbn,
|
|
50
|
+
esi,
|
|
51
|
+
ssId: sbn * this.k + esi,
|
|
52
|
+
groupInBlock,
|
|
53
|
+
groupsPerBlock: this.d,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* §8.3 inverse: SS_ID → (SBN, ESI).
|
|
58
|
+
*
|
|
59
|
+
* For MMTP over multicast UDP where the Source FEC Payload ID carries SS_ID directly.
|
|
60
|
+
*/
|
|
61
|
+
fromSsId(ssId) {
|
|
62
|
+
return {
|
|
63
|
+
sbn: Math.floor(ssId / this.k),
|
|
64
|
+
esi: ssId % this.k,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Pacing threshold: one full block duration = interleaveDepthMs.
|
|
69
|
+
* The minimum buffer needed before FEC recovery can start.
|
|
70
|
+
*/
|
|
71
|
+
get pacingThresholdMs() {
|
|
72
|
+
return this.interleaveDepthMs;
|
|
73
|
+
}
|
|
74
|
+
/** Is this group the first in a new FEC block? (SBN boundary) */
|
|
75
|
+
isBlockBoundary(groupId) {
|
|
76
|
+
return groupId % this.d === 0;
|
|
77
|
+
}
|
|
78
|
+
/** Block start/end group IDs for a given SBN. For IWA visualization. */
|
|
79
|
+
blockRange(sbn) {
|
|
80
|
+
return {
|
|
81
|
+
firstGroup: sbn * this.d,
|
|
82
|
+
lastGroup: (sbn + 1) * this.d - 1,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** CMAF segment name for a block. Matches MoQ group naming convention. */
|
|
86
|
+
segmentName(trackName, sbn) {
|
|
87
|
+
return `${trackName}/sbn_${sbn}`;
|
|
88
|
+
}
|
|
89
|
+
/** Expected number of samples in a complete CMAF segment for this block. */
|
|
90
|
+
get samplesPerBlock() {
|
|
91
|
+
return this.k;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Null/raw mode: no FEC. Every group is its own "block".
|
|
96
|
+
* Used when catalog has no FEC config (ATSC raw, DVB dongles, no-FEC MMTP).
|
|
97
|
+
* IWA uses this for passthrough visualization.
|
|
98
|
+
*/
|
|
99
|
+
export class NullBlockMapper extends FecBlockMapper {
|
|
100
|
+
constructor(gopDurationMs) {
|
|
101
|
+
if (gopDurationMs <= 0)
|
|
102
|
+
throw new Error('NullBlockMapper: gopDurationMs must be > 0 (derive from catalog framerate or sampleRate)');
|
|
103
|
+
// D=1, K=1: each group is a single-symbol block
|
|
104
|
+
super({ interleaveDepthMs: gopDurationMs, gopDurationMs, k: 1 });
|
|
105
|
+
}
|
|
106
|
+
derive(groupId, objectId) {
|
|
107
|
+
return {
|
|
108
|
+
sbn: groupId,
|
|
109
|
+
esi: objectId,
|
|
110
|
+
ssId: groupId,
|
|
111
|
+
groupInBlock: 0,
|
|
112
|
+
groupsPerBlock: 1,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
get pacingThresholdMs() {
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Object-level FEC (§9.1): each MoQ group (frame) is its own FEC block.
|
|
121
|
+
* K_actual = ceil(frame_bytes / symbolSize) — varies per block.
|
|
122
|
+
*
|
|
123
|
+
* SBN = group_id, ESI = object_id.
|
|
124
|
+
* SS_ID = Group_ID * sourceSymbols + Object_ID (§9.1.2).
|
|
125
|
+
*
|
|
126
|
+
* This mapper does NOT carry per-block K. Each block discovers its own K from:
|
|
127
|
+
* 1. Clean reception: counting source objects per group
|
|
128
|
+
* 2. Repair packets: RSB_length in Repair FEC Payload ID (§7.1)
|
|
129
|
+
*
|
|
130
|
+
* Callers MUST pass per-block K to FecBlockManager.addSourcePacket/addRepairPacket.
|
|
131
|
+
* Created once per stream, GC'd on stream close (Effect cleanup).
|
|
132
|
+
*/
|
|
133
|
+
export class ObjectBlockMapper extends FecBlockMapper {
|
|
134
|
+
/** Catalog sourceSymbols (max K) — used ONLY for SS_ID encoding (§9.1.2).
|
|
135
|
+
* Actual per-block K varies: K_actual = ceil(frame_bytes / symbolSize). */
|
|
136
|
+
sourceSymbolsMax;
|
|
137
|
+
constructor(gopDurationMs, sourceSymbolsMax) {
|
|
138
|
+
if (sourceSymbolsMax <= 0)
|
|
139
|
+
throw new Error('ObjectBlockMapper: sourceSymbolsMax must be > 0 (from catalog)');
|
|
140
|
+
// D=1, K=sourceSymbolsMax for SS_ID math only — actual block K varies
|
|
141
|
+
super({ interleaveDepthMs: gopDurationMs, gopDurationMs, k: sourceSymbolsMax });
|
|
142
|
+
this.sourceSymbolsMax = sourceSymbolsMax;
|
|
143
|
+
}
|
|
144
|
+
/** SBN = group_id, ESI = object_id. SS_ID per §9.1.2. */
|
|
145
|
+
derive(groupId, objectId) {
|
|
146
|
+
return {
|
|
147
|
+
sbn: groupId,
|
|
148
|
+
esi: objectId,
|
|
149
|
+
ssId: groupId * this.sourceSymbolsMax + objectId,
|
|
150
|
+
groupInBlock: 0,
|
|
151
|
+
groupsPerBlock: 1,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Decode SS_ID using block-specific K from repair metadata.
|
|
156
|
+
* In object mode, the global K is meaningless — each block has different K.
|
|
157
|
+
* Callers must pass blockK (from RSB_length in repair FEC Payload ID).
|
|
158
|
+
*/
|
|
159
|
+
fromSsId(ssId, blockK) {
|
|
160
|
+
if (blockK && blockK > 0) {
|
|
161
|
+
return {
|
|
162
|
+
sbn: Math.floor(ssId / blockK),
|
|
163
|
+
esi: ssId % blockK,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Fallback: treat ssId as raw ESI (within current block)
|
|
167
|
+
return { sbn: 0, esi: ssId };
|
|
168
|
+
}
|
|
169
|
+
get pacingThresholdMs() {
|
|
170
|
+
return this.gopDurationMs; // one frame latency
|
|
171
|
+
}
|
|
172
|
+
isBlockBoundary(_groupId) {
|
|
173
|
+
return true; // every group starts a new block
|
|
174
|
+
}
|
|
175
|
+
get samplesPerBlock() {
|
|
176
|
+
return 0; // variable — not known until frame arrives
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create a FecBlockMapper from catalog FEC config + measured GOP duration.
|
|
181
|
+
* Returns NullBlockMapper when FEC is not configured.
|
|
182
|
+
* Returns ObjectBlockMapper when fecMode is 'object'.
|
|
183
|
+
*/
|
|
184
|
+
export function createMapper(fecConfig, gopDurationMs) {
|
|
185
|
+
if (!fecConfig || !fecConfig.sourceSymbols) {
|
|
186
|
+
return new NullBlockMapper(gopDurationMs);
|
|
187
|
+
}
|
|
188
|
+
// extensions feature — see moqcast-draft docs/fec-extensions-material.md, not in public -00
|
|
189
|
+
if (fecConfig.mode === 'object') {
|
|
190
|
+
return new ObjectBlockMapper(gopDurationMs, fecConfig.sourceSymbols);
|
|
191
|
+
}
|
|
192
|
+
return new FecBlockMapper({
|
|
193
|
+
interleaveDepthMs: fecConfig.interleaveDepthMs && fecConfig.interleaveDepthMs > 0
|
|
194
|
+
? fecConfig.interleaveDepthMs
|
|
195
|
+
: gopDurationMs,
|
|
196
|
+
gopDurationMs,
|
|
197
|
+
k: fecConfig.sourceSymbols,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Cross-track SBN alignment via wall-clock timestamps.
|
|
202
|
+
*
|
|
203
|
+
* Different physical layers have different FEC configs (WiFi K=4/80ms,
|
|
204
|
+
* cellular K=32/4000ms, ATSC K=64/10000ms). Each track has its own
|
|
205
|
+
* FecBlockMapper. The bridge converts between them using wall-clock
|
|
206
|
+
* timestamps as the universal coordinate.
|
|
207
|
+
*/
|
|
208
|
+
export class FecTimestampBridge {
|
|
209
|
+
#tracks = new Map();
|
|
210
|
+
/** Register a track with its FEC mapper and start epoch. */
|
|
211
|
+
register(trackName, mapper, epochMs) {
|
|
212
|
+
this.#tracks.set(trackName, { mapper, epochMs });
|
|
213
|
+
}
|
|
214
|
+
/** Remove a track. */
|
|
215
|
+
unregister(trackName) {
|
|
216
|
+
this.#tracks.delete(trackName);
|
|
217
|
+
}
|
|
218
|
+
/** All registered track names. */
|
|
219
|
+
get trackNames() {
|
|
220
|
+
return [...this.#tracks.keys()];
|
|
221
|
+
}
|
|
222
|
+
/** Get the mapper for a specific track. */
|
|
223
|
+
getMapper(trackName) {
|
|
224
|
+
return this.#tracks.get(trackName)?.mapper;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Resolve a wall-clock timestamp to SBN on every registered track.
|
|
228
|
+
* Returns a map of trackName → { sbn, groupInBlock, groupsPerBlock }.
|
|
229
|
+
*/
|
|
230
|
+
resolve(wallClockMs) {
|
|
231
|
+
const result = new Map();
|
|
232
|
+
for (const [name, track] of this.#tracks) {
|
|
233
|
+
const elapsedMs = wallClockMs - track.epochMs;
|
|
234
|
+
if (elapsedMs < 0)
|
|
235
|
+
continue;
|
|
236
|
+
const groupId = Math.floor(elapsedMs / track.mapper.gopDurationMs);
|
|
237
|
+
const coords = track.mapper.derive(groupId, 0);
|
|
238
|
+
result.set(name, { sbn: coords.sbn, groupId, groupInBlock: coords.groupInBlock });
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Wall-clock time range for a specific block on a specific track.
|
|
244
|
+
*/
|
|
245
|
+
blockTimeRange(trackName, sbn) {
|
|
246
|
+
const track = this.#tracks.get(trackName);
|
|
247
|
+
if (!track)
|
|
248
|
+
return undefined;
|
|
249
|
+
const range = track.mapper.blockRange(sbn);
|
|
250
|
+
return {
|
|
251
|
+
startMs: track.epochMs + range.firstGroup * track.mapper.gopDurationMs,
|
|
252
|
+
endMs: track.epochMs + (range.lastGroup + 1) * track.mapper.gopDurationMs,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Find which SBNs on other tracks overlap a given block on a source track.
|
|
257
|
+
*/
|
|
258
|
+
overlappingBlocks(sourceTrack, sourceSbn, targetTrack) {
|
|
259
|
+
const source = this.#tracks.get(sourceTrack);
|
|
260
|
+
const target = this.#tracks.get(targetTrack);
|
|
261
|
+
if (!source || !target)
|
|
262
|
+
return undefined;
|
|
263
|
+
const sourceRange = this.blockTimeRange(sourceTrack, sourceSbn);
|
|
264
|
+
if (!sourceRange)
|
|
265
|
+
return undefined;
|
|
266
|
+
const targetStartGroup = Math.floor((sourceRange.startMs - target.epochMs) / target.mapper.gopDurationMs);
|
|
267
|
+
const targetEndGroup = Math.floor((sourceRange.endMs - target.epochMs) / target.mapper.gopDurationMs);
|
|
268
|
+
const firstCoords = target.mapper.derive(Math.max(0, targetStartGroup), 0);
|
|
269
|
+
const lastCoords = target.mapper.derive(Math.max(0, targetEndGroup), 0);
|
|
270
|
+
return { firstSbn: firstCoords.sbn, lastSbn: lastCoords.sbn };
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=fec-block-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fec-block-mapper.js","sourceRoot":"","sources":["../src/fec-block-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mmt/fec - Container-agnostic FEC client for RaptorQ (RFC 6330)
|
|
3
|
+
*
|
|
4
|
+
* This package provides a TypeScript wrapper around the mmt-wasm WASM bindings
|
|
5
|
+
* for Forward Error Correction using RaptorQ (RFC 6330).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* The stateful WASM decoder is owned by @blockcast/mmt-container's FecManager
|
|
10
|
+
* or @blockcast/fec-worker. This package supplies container-independent FEC
|
|
11
|
+
* geometry, OTI, mapping, and recovery primitives.
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export { FecBlockManager, FEC_STATE, type FecState, type FecBlockManagerOptions, type FecBlockStats, } from "./block-manager.js";
|
|
15
|
+
export { processFecBlock, processFecSymbol, type ParsedFecSymbol, type ProcessFecBlockResult, type ProcessFecSymbolOptions, } from "./block-processor.js";
|
|
16
|
+
export { ReorderBuffer, type ReorderBufferConfig, } from "./reorder-buffer.js";
|
|
17
|
+
export { splitToSymbols, recoverFromSymbols, computeK, } from "./cmaf-symbols.js";
|
|
18
|
+
export { splitFrameToSymbol, recoverFrameFromSymbol, } from "./loc-symbols.js";
|
|
19
|
+
export { CmafFecRecovery, type CmafFecRecoveryConfig, type FecDecoder, } from "./cmaf-recovery.js";
|
|
20
|
+
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, type FecInterleaveCatalog, parseRepairPacket, type OTIParams, fecBlockDeadlineMs, fecBlockBudgetMs, playbackLatencyMs, } from "./oti.js";
|
|
21
|
+
export { FecBlockMapper, NullBlockMapper, ObjectBlockMapper, createMapper, FecTimestampBridge, type FecBlockConfig, type FecCoordinates, type BridgedTrack, } from "./fec-block-mapper.js";
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,EACb,KAAK,mBAAmB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,SAAS,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GACjB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mmt/fec - Container-agnostic FEC client for RaptorQ (RFC 6330)
|
|
3
|
+
*
|
|
4
|
+
* This package provides a TypeScript wrapper around the mmt-wasm WASM bindings
|
|
5
|
+
* for Forward Error Correction using RaptorQ (RFC 6330).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* The stateful WASM decoder is owned by @blockcast/mmt-container's FecManager
|
|
10
|
+
* or @blockcast/fec-worker. This package supplies container-independent FEC
|
|
11
|
+
* geometry, OTI, mapping, and recovery primitives.
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export { FecBlockManager, FEC_STATE, } from "./block-manager.js";
|
|
15
|
+
export { processFecBlock, processFecSymbol, } from "./block-processor.js";
|
|
16
|
+
export { ReorderBuffer, } from "./reorder-buffer.js";
|
|
17
|
+
export { splitToSymbols, recoverFromSymbols, computeK, } from "./cmaf-symbols.js";
|
|
18
|
+
export { splitFrameToSymbol, recoverFrameFromSymbol, } from "./loc-symbols.js";
|
|
19
|
+
export { CmafFecRecovery, } from "./cmaf-recovery.js";
|
|
20
|
+
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, parseRepairPacket, fecBlockDeadlineMs, fecBlockBudgetMs, playbackLatencyMs, } from "./oti.js";
|
|
21
|
+
export { FecBlockMapper, NullBlockMapper, ObjectBlockMapper, createMapper, FecTimestampBridge, } from "./fec-block-mapper.js";
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,GAIT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,GAEb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,GAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EAEtB,iBAAiB,EAEjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GAIlB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LOC Frame Symbol Splitter — per-frame FEC symbol operations for LOC
|
|
3
|
+
* (Low Overhead Container) raw codec bitstream frames.
|
|
4
|
+
*
|
|
5
|
+
* Unlike CMAF chunks which may span multiple symbols (K > 1), LOC frames
|
|
6
|
+
* map 1:1 to a single FEC symbol: pad to symbolSize or truncate.
|
|
7
|
+
*
|
|
8
|
+
* Pure functions — no side effects, no state.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Pad a LOC frame (raw codec bitstream) to FEC symbol size.
|
|
12
|
+
* If the frame is already >= symbolSize, truncate to symbolSize.
|
|
13
|
+
*/
|
|
14
|
+
export declare function splitFrameToSymbol(frame: Uint8Array, symbolSize: number): Uint8Array;
|
|
15
|
+
/**
|
|
16
|
+
* Strip padding from a recovered FEC symbol to get the original frame.
|
|
17
|
+
* Uses the known original length to trim zero-padding.
|
|
18
|
+
*/
|
|
19
|
+
export declare function recoverFrameFromSymbol(symbol: Uint8Array, originalLength: number): Uint8Array;
|
|
20
|
+
//# sourceMappingURL=loc-symbols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loc-symbols.d.ts","sourceRoot":"","sources":["../src/loc-symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,GAChB,UAAU,CAKZ;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,MAAM,GACpB,UAAU,CAEZ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LOC Frame Symbol Splitter — per-frame FEC symbol operations for LOC
|
|
3
|
+
* (Low Overhead Container) raw codec bitstream frames.
|
|
4
|
+
*
|
|
5
|
+
* Unlike CMAF chunks which may span multiple symbols (K > 1), LOC frames
|
|
6
|
+
* map 1:1 to a single FEC symbol: pad to symbolSize or truncate.
|
|
7
|
+
*
|
|
8
|
+
* Pure functions — no side effects, no state.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Pad a LOC frame (raw codec bitstream) to FEC symbol size.
|
|
12
|
+
* If the frame is already >= symbolSize, truncate to symbolSize.
|
|
13
|
+
*/
|
|
14
|
+
export function splitFrameToSymbol(frame, symbolSize) {
|
|
15
|
+
if (frame.length >= symbolSize)
|
|
16
|
+
return frame.subarray(0, symbolSize);
|
|
17
|
+
const padded = new Uint8Array(symbolSize); // zero-initialized
|
|
18
|
+
padded.set(frame);
|
|
19
|
+
return padded;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Strip padding from a recovered FEC symbol to get the original frame.
|
|
23
|
+
* Uses the known original length to trim zero-padding.
|
|
24
|
+
*/
|
|
25
|
+
export function recoverFrameFromSymbol(symbol, originalLength) {
|
|
26
|
+
return symbol.subarray(0, originalLength);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=loc-symbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loc-symbols.js","sourceRoot":"","sources":["../src/loc-symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CACjC,KAAiB,EACjB,UAAkB;IAElB,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB;IAC9D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACrC,MAAkB,EAClB,cAAsB;IAEtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC"}
|