@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,99 @@
|
|
|
1
|
+
// src/mfu-reassembly-policy.ts
|
|
2
|
+
function validateReliableMoqOptionShape(value) {
|
|
3
|
+
const unsupported = Object.keys(value).filter(
|
|
4
|
+
(key) => key !== "transport" && key !== "startsAtRandomAccessGroup"
|
|
5
|
+
);
|
|
6
|
+
if (unsupported.length > 0) {
|
|
7
|
+
if (unsupported.includes("maxRacingGroups")) {
|
|
8
|
+
throw new Error(
|
|
9
|
+
"[MFU reassembly] maxRacingGroups was removed; reliable MoQ completion is transport-owned"
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
throw new Error(
|
|
13
|
+
`[MFU reassembly] unsupported reliable MoQ option(s): ${unsupported.join(", ")}`
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
const startsAtRandomAccessGroup = value["startsAtRandomAccessGroup"];
|
|
17
|
+
if (typeof startsAtRandomAccessGroup !== "boolean" && startsAtRandomAccessGroup !== void 0) {
|
|
18
|
+
throw new Error("[MFU reassembly] startsAtRandomAccessGroup must be boolean");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function reliableMoqMfuReassembly(options = {}) {
|
|
22
|
+
if (arguments.length > 1 || typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
"[MFU reassembly] the positional maxRacingGroups API was removed; pass a reliable MoQ options object"
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
validateReliableMoqOptionShape(options);
|
|
28
|
+
return options.startsAtRandomAccessGroup ? {
|
|
29
|
+
transport: "reliable-moq",
|
|
30
|
+
startsAtRandomAccessGroup: true
|
|
31
|
+
} : { transport: "reliable-moq" };
|
|
32
|
+
}
|
|
33
|
+
function assertValidDatagramDeadline(deadlineMs) {
|
|
34
|
+
if (typeof deadlineMs !== "number" || !Number.isFinite(deadlineMs) || deadlineMs <= 0) {
|
|
35
|
+
throw new Error("[MFU reassembly] datagram deadlineMs must be a finite number > 0");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function datagramMfuReassembly(deadlineMs) {
|
|
39
|
+
assertValidDatagramDeadline(deadlineMs);
|
|
40
|
+
return { transport: "datagram", deadlineMs };
|
|
41
|
+
}
|
|
42
|
+
function assertValidMfuReassemblyPolicy(policy) {
|
|
43
|
+
if (typeof policy !== "object" || policy === null || Array.isArray(policy)) {
|
|
44
|
+
throw new Error("[MFU reassembly] policy must be an object");
|
|
45
|
+
}
|
|
46
|
+
const value = policy;
|
|
47
|
+
if (value["transport"] === "reliable-moq") {
|
|
48
|
+
validateReliableMoqOptionShape(value);
|
|
49
|
+
if (value["startsAtRandomAccessGroup"] === false) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
"[MFU reassembly] startsAtRandomAccessGroup must be true when present in a policy"
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (value["transport"] === "datagram") {
|
|
57
|
+
const unsupported = Object.keys(value).filter(
|
|
58
|
+
(key) => key !== "transport" && key !== "deadlineMs"
|
|
59
|
+
);
|
|
60
|
+
if (unsupported.length > 0) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`[MFU reassembly] unsupported datagram option(s): ${unsupported.join(", ")}`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
assertValidDatagramDeadline(value["deadlineMs"]);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
throw new Error(
|
|
69
|
+
`[MFU reassembly] unsupported transport: ${String(value["transport"])}`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
function mfuReassemblyTimeoutMs(policy) {
|
|
73
|
+
assertValidMfuReassemblyPolicy(policy);
|
|
74
|
+
return policy.transport === "reliable-moq" ? null : policy.deadlineMs;
|
|
75
|
+
}
|
|
76
|
+
function mmtpFrameReorderWindowFrames(policy, configuredWindow = 0) {
|
|
77
|
+
assertValidMfuReassemblyPolicy(policy);
|
|
78
|
+
if (!Number.isFinite(configuredWindow) || configuredWindow < 0) {
|
|
79
|
+
throw new Error("[MFU reassembly] configuredWindow must be a finite number >= 0");
|
|
80
|
+
}
|
|
81
|
+
const requested = Math.ceil(configuredWindow);
|
|
82
|
+
if (policy.transport === "reliable-moq") {
|
|
83
|
+
if (requested > 0) {
|
|
84
|
+
throw new Error(
|
|
85
|
+
"[MFU reassembly] reliable MoQ paths do not accept a frame reorder window in the parser"
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
return requested;
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
assertValidMfuReassemblyPolicy,
|
|
94
|
+
datagramMfuReassembly,
|
|
95
|
+
mfuReassemblyTimeoutMs,
|
|
96
|
+
mmtpFrameReorderWindowFrames,
|
|
97
|
+
reliableMoqMfuReassembly
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=mfu-reassembly-policy.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/mfu-reassembly-policy.ts"],
|
|
4
|
+
"sourcesContent": ["export type MfuReassemblyPolicy =\n | ReliableMoqReassemblyPolicy\n | { transport: 'datagram'; deadlineMs: number }\n\nexport interface ReliableMoqReassemblyPolicy {\n transport: 'reliable-moq'\n startsAtRandomAccessGroup?: true\n}\n\nexport type MmtpTrackType = 'video' | 'audio' | null\n\nexport interface ReliableMoqReassemblyOptions {\n /**\n * The transport starts at a complete independently decodable media group.\n * The parser still requires an observed RAP before decoder startup.\n */\n startsAtRandomAccessGroup?: boolean\n}\n\nfunction validateReliableMoqOptionShape(value: Record<string, unknown>): void {\n const unsupported = Object.keys(value).filter(\n key => key !== 'transport' && key !== 'startsAtRandomAccessGroup',\n )\n if (unsupported.length > 0) {\n if (unsupported.includes('maxRacingGroups')) {\n throw new Error(\n '[MFU reassembly] maxRacingGroups was removed; reliable MoQ completion is transport-owned',\n )\n }\n throw new Error(\n `[MFU reassembly] unsupported reliable MoQ option(s): ${unsupported.join(', ')}`,\n )\n }\n const startsAtRandomAccessGroup = value['startsAtRandomAccessGroup']\n if (\n typeof startsAtRandomAccessGroup !== 'boolean' &&\n startsAtRandomAccessGroup !== undefined\n ) {\n throw new Error('[MFU reassembly] startsAtRandomAccessGroup must be boolean')\n }\n}\n\nexport function reliableMoqMfuReassembly(\n options: ReliableMoqReassemblyOptions = {},\n): ReliableMoqReassemblyPolicy {\n if (\n arguments.length > 1 ||\n typeof options !== 'object' ||\n options === null ||\n Array.isArray(options)\n ) {\n throw new Error(\n '[MFU reassembly] the positional maxRacingGroups API was removed; pass a reliable MoQ options object',\n )\n }\n validateReliableMoqOptionShape(options as Record<string, unknown>)\n return options.startsAtRandomAccessGroup\n ? {\n transport: 'reliable-moq',\n startsAtRandomAccessGroup: true,\n }\n : { transport: 'reliable-moq' }\n}\n\nfunction assertValidDatagramDeadline(deadlineMs: unknown): asserts deadlineMs is number {\n if (typeof deadlineMs !== 'number' || !Number.isFinite(deadlineMs) || deadlineMs <= 0) {\n throw new Error('[MFU reassembly] datagram deadlineMs must be a finite number > 0')\n }\n}\n\nexport function datagramMfuReassembly(deadlineMs: number): MfuReassemblyPolicy {\n assertValidDatagramDeadline(deadlineMs)\n return { transport: 'datagram', deadlineMs }\n}\n\n/** Validate the complete runtime shape even when a caller bypasses the policy factories. */\nexport function assertValidMfuReassemblyPolicy(policy: MfuReassemblyPolicy): void {\n if (typeof policy !== 'object' || policy === null || Array.isArray(policy)) {\n throw new Error('[MFU reassembly] policy must be an object')\n }\n\n const value = policy as unknown as Record<string, unknown>\n if (value['transport'] === 'reliable-moq') {\n validateReliableMoqOptionShape(value)\n if (value['startsAtRandomAccessGroup'] === false) {\n throw new Error(\n '[MFU reassembly] startsAtRandomAccessGroup must be true when present in a policy',\n )\n }\n return\n }\n if (value['transport'] === 'datagram') {\n const unsupported = Object.keys(value).filter(\n key => key !== 'transport' && key !== 'deadlineMs',\n )\n if (unsupported.length > 0) {\n throw new Error(\n `[MFU reassembly] unsupported datagram option(s): ${unsupported.join(', ')}`,\n )\n }\n assertValidDatagramDeadline(value['deadlineMs'])\n return\n }\n throw new Error(\n `[MFU reassembly] unsupported transport: ${String(value['transport'])}`,\n )\n}\n\nexport function mfuReassemblyTimeoutMs(policy: MfuReassemblyPolicy): number | null {\n assertValidMfuReassemblyPolicy(policy)\n return policy.transport === 'reliable-moq' ? null : policy.deadlineMs\n}\n\n/** Resolve the parser reorder window without inferring reliable-stream completion. */\nexport function mmtpFrameReorderWindowFrames(\n policy: MfuReassemblyPolicy,\n configuredWindow = 0,\n): number {\n assertValidMfuReassemblyPolicy(policy)\n if (!Number.isFinite(configuredWindow) || configuredWindow < 0) {\n throw new Error('[MFU reassembly] configuredWindow must be a finite number >= 0')\n }\n\n const requested = Math.ceil(configuredWindow)\n if (policy.transport === 'reliable-moq') {\n if (requested > 0) {\n throw new Error(\n '[MFU reassembly] reliable MoQ paths do not accept a frame reorder window in the parser',\n )\n }\n return 0\n }\n return requested\n}\n"],
|
|
5
|
+
"mappings": ";AAmBA,SAAS,+BAA+B,OAAsC;AAC5E,QAAM,cAAc,OAAO,KAAK,KAAK,EAAE;AAAA,IACrC,SAAO,QAAQ,eAAe,QAAQ;AAAA,EACxC;AACA,MAAI,YAAY,SAAS,GAAG;AAC1B,QAAI,YAAY,SAAS,iBAAiB,GAAG;AAC3C,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI;AAAA,MACR,wDAAwD,YAAY,KAAK,IAAI,CAAC;AAAA,IAChF;AAAA,EACF;AACA,QAAM,4BAA4B,MAAM,2BAA2B;AACnE,MACE,OAAO,8BAA8B,aACrC,8BAA8B,QAC9B;AACA,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACF;AAEO,SAAS,yBACd,UAAwC,CAAC,GACZ;AAC7B,MACE,UAAU,SAAS,KACnB,OAAO,YAAY,YACnB,YAAY,QACZ,MAAM,QAAQ,OAAO,GACrB;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,iCAA+B,OAAkC;AACjE,SAAO,QAAQ,4BACX;AAAA,IACE,WAAW;AAAA,IACX,2BAA2B;AAAA,EAC7B,IACA,EAAE,WAAW,eAAe;AAClC;AAEA,SAAS,4BAA4B,YAAmD;AACtF,MAAI,OAAO,eAAe,YAAY,CAAC,OAAO,SAAS,UAAU,KAAK,cAAc,GAAG;AACrF,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACF;AAEO,SAAS,sBAAsB,YAAyC;AAC7E,8BAA4B,UAAU;AACtC,SAAO,EAAE,WAAW,YAAY,WAAW;AAC7C;AAGO,SAAS,+BAA+B,QAAmC;AAChF,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG;AAC1E,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,QAAM,QAAQ;AACd,MAAI,MAAM,WAAW,MAAM,gBAAgB;AACzC,mCAA+B,KAAK;AACpC,QAAI,MAAM,2BAA2B,MAAM,OAAO;AAChD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,MAAM,WAAW,MAAM,YAAY;AACrC,UAAM,cAAc,OAAO,KAAK,KAAK,EAAE;AAAA,MACrC,SAAO,QAAQ,eAAe,QAAQ;AAAA,IACxC;AACA,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,IAAI;AAAA,QACR,oDAAoD,YAAY,KAAK,IAAI,CAAC;AAAA,MAC5E;AAAA,IACF;AACA,gCAA4B,MAAM,YAAY,CAAC;AAC/C;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR,2CAA2C,OAAO,MAAM,WAAW,CAAC,CAAC;AAAA,EACvE;AACF;AAEO,SAAS,uBAAuB,QAA4C;AACjF,iCAA+B,MAAM;AACrC,SAAO,OAAO,cAAc,iBAAiB,OAAO,OAAO;AAC7D;AAGO,SAAS,6BACd,QACA,mBAAmB,GACX;AACR,iCAA+B,MAAM;AACrC,MAAI,CAAC,OAAO,SAAS,gBAAgB,KAAK,mBAAmB,GAAG;AAC9D,UAAM,IAAI,MAAM,gEAAgE;AAAA,EAClF;AAEA,QAAM,YAAY,KAAK,KAAK,gBAAgB;AAC5C,MAAI,OAAO,cAAc,gBAAgB;AACvC,QAAI,YAAY,GAAG;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { MfuReassemblyError, type MfuReassemblerBackend, type MmtpSourcePath, type MmtpDeliveryProvenance } from './mfu-reassembler.js';
|
|
2
|
+
import { SampleCombineError, type SampleCombinerStats } from './sample-combiner.js';
|
|
3
|
+
import { type MfuReassemblyPolicy } from './mfu-reassembly-policy.js';
|
|
4
|
+
import type { AuthoredTiming } from './authored-timing.js';
|
|
5
|
+
export interface TrackInfo {
|
|
6
|
+
type: 'video' | 'audio';
|
|
7
|
+
codec: string;
|
|
8
|
+
/** Catalog/in-band frame cadence available to downstream media stages. */
|
|
9
|
+
framerate?: number;
|
|
10
|
+
/** Catalog MMTP group duration available to downstream media stages. */
|
|
11
|
+
groupDurationMs?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface MmtpParserConfig {
|
|
14
|
+
tracks?: Map<number, TrackInfo>;
|
|
15
|
+
reorderWindow?: number;
|
|
16
|
+
/** MFU reassembly timeout (ms). Derive from FEC interleaveDepthMs or frame duration.
|
|
17
|
+
* Pass null for live clock-free operation; memory remains bounded by maxBuffered.
|
|
18
|
+
* Defaults to 1000ms if not provided. */
|
|
19
|
+
mfuTimeoutMs?: number | null;
|
|
20
|
+
/** Explicit transport policy. Reliable MoQ is clock-free; datagrams require
|
|
21
|
+
* a catalog/in-band-derived deadline. Mutually exclusive with mfuTimeoutMs. */
|
|
22
|
+
reassemblyPolicy?: MfuReassemblyPolicy;
|
|
23
|
+
/** Max concurrent active MFUs. A new first fragment is rejected at the bound. */
|
|
24
|
+
maxBufferedMfus?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Max subsample data units held for one partitioned sample (moqcast #37).
|
|
27
|
+
* A sample needs `ceil(sampleSize / (256 * maxPayload))` data units; at the
|
|
28
|
+
* ~1300-byte payloads this producer emits, one data unit spans ~327 KB, so
|
|
29
|
+
* the default admits a ~5 MB sample — beyond any 8K intra frame — while
|
|
30
|
+
* still bounding the per-insert overlap scan. Raise it only alongside a
|
|
31
|
+
* larger authored frame size, never to paper over a lost data unit.
|
|
32
|
+
*/
|
|
33
|
+
maxSubsampleSegments?: number;
|
|
34
|
+
/** Alternate backend. The TypeScript and Rust/WASM implementations enforce
|
|
35
|
+
* the same authored active-DU contract. */
|
|
36
|
+
reassembler?: MfuReassemblerBackend;
|
|
37
|
+
/** Default track info for auto-discovered packetIds.
|
|
38
|
+
* When the parser receives an MMTP packet with an unregistered packetId,
|
|
39
|
+
* it creates a new track entry using this info. Required for correct
|
|
40
|
+
* keyframe detection with HEVC/AV1/VP9 (without it, defaults to H.264). */
|
|
41
|
+
defaultTrack?: TrackInfo;
|
|
42
|
+
}
|
|
43
|
+
/** Structured result from parseHeader(). Used by MmtpRouter for two-phase parsing:
|
|
44
|
+
* 1. parseHeader() → get packetId + fecPayloadId for FEC feeding
|
|
45
|
+
* 2. feed() → MFU extraction, reassembly, keyframe detection, emit */
|
|
46
|
+
export interface PacketInfo {
|
|
47
|
+
packetId: number;
|
|
48
|
+
packetType: number;
|
|
49
|
+
timestamp: bigint;
|
|
50
|
+
/** MMTP timestamp converted to monotonic microseconds for pacing/sync users. */
|
|
51
|
+
timestampUs: number;
|
|
52
|
+
sequenceNumber: number;
|
|
53
|
+
rapFlag: boolean;
|
|
54
|
+
fecType: number;
|
|
55
|
+
/** FEC source symbol ID (from 4-byte FEC Payload ID at packet end). Null if no FEC. */
|
|
56
|
+
fecPayloadId: {
|
|
57
|
+
ssId: number;
|
|
58
|
+
} | null;
|
|
59
|
+
/** True if this is a repair packet (packetType=0x03). */
|
|
60
|
+
isRepair: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface FrameMeta {
|
|
63
|
+
/** Authored ISO-BMFF presentation time converted to microseconds. */
|
|
64
|
+
timestamp: number;
|
|
65
|
+
/** Authored ISO-BMFF decode time converted to microseconds. */
|
|
66
|
+
decodeTimestamp?: number;
|
|
67
|
+
/** Authored ISO-BMFF sample duration converted to microseconds. */
|
|
68
|
+
duration?: number;
|
|
69
|
+
/** Exact authored decode time in mediaTimescale units. */
|
|
70
|
+
decodeTime?: bigint;
|
|
71
|
+
/** Exact authored presentation time in mediaTimescale units. */
|
|
72
|
+
presentationTime?: bigint;
|
|
73
|
+
/** Exact authored duration in mediaTimescale units. */
|
|
74
|
+
durationTicks?: number;
|
|
75
|
+
/** mdhd media timescale for the exact timing fields. */
|
|
76
|
+
mediaTimescale?: number;
|
|
77
|
+
/** Exact authored ISO-BMFF timing carried without narrowing to microseconds. */
|
|
78
|
+
authoredTiming?: AuthoredTiming;
|
|
79
|
+
keyframe: boolean;
|
|
80
|
+
packetId: number;
|
|
81
|
+
trackType: 'video' | 'audio' | null;
|
|
82
|
+
packetSequenceNumber?: number;
|
|
83
|
+
/** Every authoritative MMTP source-packet sequence that formed this frame. */
|
|
84
|
+
packetSequenceNumbers?: number[];
|
|
85
|
+
/** Subset of packetSequenceNumbers reconstructed by FEC. */
|
|
86
|
+
repairedPacketSequenceNumbers?: number[];
|
|
87
|
+
/** Immutable catalog identity supplied by the owning ingress subscription. */
|
|
88
|
+
catalogTrackName?: string;
|
|
89
|
+
/** Raw MMTP short-NTP timestamp retained for adapters that own the timeline. */
|
|
90
|
+
mmtpTimestamp?: bigint;
|
|
91
|
+
mpuSequenceNumber?: number;
|
|
92
|
+
movieFragmentSequenceNumber?: number;
|
|
93
|
+
sampleNumber?: number;
|
|
94
|
+
fragmentCount?: number;
|
|
95
|
+
rapFlag?: boolean;
|
|
96
|
+
priority?: number;
|
|
97
|
+
recovered?: boolean;
|
|
98
|
+
/** Starts a new publisher/source epoch for ordering and timestamp state. */
|
|
99
|
+
sourceDiscontinuity?: boolean;
|
|
100
|
+
/** Source of the accepted FI=1/FI=0 frame path. Absent for recovery. */
|
|
101
|
+
source?: MmtpSourcePath;
|
|
102
|
+
/**
|
|
103
|
+
* Strict whole-frame delivery provenance. Unlike `source`, which names the
|
|
104
|
+
* head fragment's transport for routing, this is folded over every
|
|
105
|
+
* contributing fragment (and, for FEC-recovered frames, over the transports
|
|
106
|
+
* that supplied the block's symbols). Only 'multicast' is evidence of
|
|
107
|
+
* multicast-exclusive delivery. Absent means no producer on this path
|
|
108
|
+
* recorded provenance — consumers MUST treat that as unproven, never as
|
|
109
|
+
* multicast.
|
|
110
|
+
*/
|
|
111
|
+
deliveryProvenance?: MmtpDeliveryProvenance;
|
|
112
|
+
}
|
|
113
|
+
export interface MmtpReorderStats {
|
|
114
|
+
droppedBeforeStartupKeyframe: number;
|
|
115
|
+
droppedIncompleteStartupInterval: number;
|
|
116
|
+
droppedStale: number;
|
|
117
|
+
forcedWindowFlushes: number;
|
|
118
|
+
droppedOnLiveDispose: number;
|
|
119
|
+
publisherResets: number;
|
|
120
|
+
droppedOnPublisherReset: number;
|
|
121
|
+
bufferedFrames: number;
|
|
122
|
+
}
|
|
123
|
+
export interface MmtpReorderFrameDiagnostics {
|
|
124
|
+
timestampUs: number;
|
|
125
|
+
keyframe: boolean;
|
|
126
|
+
sequenceNumber: number;
|
|
127
|
+
packetSequenceNumber?: number;
|
|
128
|
+
movieFragmentSequenceNumber?: number;
|
|
129
|
+
sampleNumber?: number;
|
|
130
|
+
fragmentCount?: number;
|
|
131
|
+
}
|
|
132
|
+
export interface MmtpReorderStreamDiagnostics {
|
|
133
|
+
packetId: number;
|
|
134
|
+
bufferedFrames: number;
|
|
135
|
+
lastEmitted: MmtpReorderFrameDiagnostics | null;
|
|
136
|
+
startupKeyframe: MmtpReorderFrameDiagnostics | null;
|
|
137
|
+
head: MmtpReorderFrameDiagnostics[];
|
|
138
|
+
tail: MmtpReorderFrameDiagnostics[];
|
|
139
|
+
keyframes: MmtpReorderFrameDiagnostics[];
|
|
140
|
+
}
|
|
141
|
+
export type MmtpParserRecord = {
|
|
142
|
+
kind: 'repair' | 'non-media';
|
|
143
|
+
packet: PacketInfo;
|
|
144
|
+
byteLength: number;
|
|
145
|
+
} | {
|
|
146
|
+
kind: 'init' | 'fragment';
|
|
147
|
+
packet: PacketInfo;
|
|
148
|
+
data: Uint8Array;
|
|
149
|
+
mpuSequenceNumber: number;
|
|
150
|
+
fragmentationIndicator: number;
|
|
151
|
+
fragmentCounter: number;
|
|
152
|
+
} | {
|
|
153
|
+
kind: 'pending';
|
|
154
|
+
packet: PacketInfo;
|
|
155
|
+
mpuSequenceNumber: number;
|
|
156
|
+
fragmentationIndicator: number;
|
|
157
|
+
fragmentCounter: number;
|
|
158
|
+
} | {
|
|
159
|
+
kind: 'rejected';
|
|
160
|
+
packet: PacketInfo;
|
|
161
|
+
mpuSequenceNumber: number;
|
|
162
|
+
fragmentationIndicator: number;
|
|
163
|
+
fragmentCounter: number;
|
|
164
|
+
error: {
|
|
165
|
+
/**
|
|
166
|
+
* Either a single data unit's own fragment chain was rejected, or
|
|
167
|
+
* combining reassembled data units into a sample was (moqcast #37).
|
|
168
|
+
* Both are fail-closed drops of the same packet, so they share this
|
|
169
|
+
* record; the code says which class it came from.
|
|
170
|
+
*/
|
|
171
|
+
code: MfuReassemblyError['code'] | SampleCombineError['code'];
|
|
172
|
+
message: string;
|
|
173
|
+
};
|
|
174
|
+
} | {
|
|
175
|
+
kind: 'frame';
|
|
176
|
+
packet: PacketInfo;
|
|
177
|
+
data: Uint8Array;
|
|
178
|
+
meta: FrameMeta;
|
|
179
|
+
mpuSequenceNumber: number;
|
|
180
|
+
fragmentCount: number;
|
|
181
|
+
rapFlag: boolean;
|
|
182
|
+
priority?: number;
|
|
183
|
+
};
|
|
184
|
+
type FrameCallback = (data: Uint8Array, meta: FrameMeta) => void;
|
|
185
|
+
type InitCallback = (data: Uint8Array, packetId: number, catalogTrackName?: string) => void;
|
|
186
|
+
export declare function isMfuKeyframeMetadata(rapFlag: boolean, priority?: number): boolean;
|
|
187
|
+
/** Per-packet detached ALTA authenticator trailer (08-07 Path 2).
|
|
188
|
+
* - `auth`: the authenticator bytes (length-prefixed at packet end).
|
|
189
|
+
* - `payloadEnd`: byte offset within the source packet where signed
|
|
190
|
+
* payload ends — consumers reconstruct `payload = packet[0..payloadEnd]`
|
|
191
|
+
* for verify_detached. */
|
|
192
|
+
export interface ParsedAltaTrailer {
|
|
193
|
+
auth: Uint8Array;
|
|
194
|
+
payloadEnd: number;
|
|
195
|
+
}
|
|
196
|
+
/** Source-symbol exposure for FEC consumers.
|
|
197
|
+
*
|
|
198
|
+
* Fires from {@link MmtpContainerParser.feed} once per FEC-protected source
|
|
199
|
+
* packet — after parseHeader confirms fec_payload_id is present, before MFU
|
|
200
|
+
* extraction.
|
|
201
|
+
*
|
|
202
|
+
* Arguments:
|
|
203
|
+
* - `packetId` – MMTP header `packet_id` (track identifier)
|
|
204
|
+
* - `ssId` – flat Source Symbol ID from the 4-byte fec_payload_id trailer
|
|
205
|
+
* - `rawSymbol` – packet bytes minus the 4-byte fec_payload_id trailer.
|
|
206
|
+
* NOT zero-padded to FEC symbol size — consumer pads if needed
|
|
207
|
+
* (FEC symbol size is FEC-config, not parser-config).
|
|
208
|
+
* - `alta` – detached ALTA authenticator if present, else undefined
|
|
209
|
+
*
|
|
210
|
+
* Designed so consumers (player, Shaka shim, upstream moqtail) can wire
|
|
211
|
+
* source-symbol delivery to whatever FEC pipeline they own, without depending
|
|
212
|
+
* on libmmt's MulticastManager/MmtpRouter/FECManager stack. */
|
|
213
|
+
type SourceSymbolCallback = (packetId: number, ssId: number, rawSymbol: Uint8Array, alta: ParsedAltaTrailer | undefined) => void;
|
|
214
|
+
export interface ParseHeaderOptions {
|
|
215
|
+
/** Recovered source symbols already had the trailing Source FEC Payload ID stripped. */
|
|
216
|
+
skipFecPayloadId?: boolean;
|
|
217
|
+
/** Mark frames emitted from this packet as FEC-recovered. */
|
|
218
|
+
recovered?: boolean;
|
|
219
|
+
/** Exact catalog track bound to this packet by its ingress subscription. */
|
|
220
|
+
catalogTrackName?: string;
|
|
221
|
+
/** Source transport for parser-owned frame attribution. */
|
|
222
|
+
source?: MmtpSourcePath;
|
|
223
|
+
/**
|
|
224
|
+
* Explicit strict provenance for the fragments this packet produces.
|
|
225
|
+
* The router sets it for FEC-recovered packets, which carry no `source`
|
|
226
|
+
* but whose FEC block's symbol provenance is known.
|
|
227
|
+
*/
|
|
228
|
+
deliveryProvenance?: MmtpDeliveryProvenance;
|
|
229
|
+
}
|
|
230
|
+
export declare class MmtpContainerParser {
|
|
231
|
+
#private;
|
|
232
|
+
constructor(config?: MmtpParserConfig);
|
|
233
|
+
/** The MFU reassembler that buffers fragmented MFUs fed via feed().
|
|
234
|
+
* Exposed so a co-operating FEC-recovery layer (MmtpRouter) feeds recovered
|
|
235
|
+
* fragments into the SAME reassembler: a frame split between source-received
|
|
236
|
+
* and FEC-recovered fragments must share one buffer to complete (BLO-8151).
|
|
237
|
+
* Before this was shared, recovered video symbols reported "0 emitted,
|
|
238
|
+
* pending-reassembly=N" because they landed in a separate instance. */
|
|
239
|
+
get reassembler(): MfuReassemblerBackend;
|
|
240
|
+
/**
|
|
241
|
+
* Subsample-combining counters (moqcast #37). `combinedSamples` counts
|
|
242
|
+
* samples reassembled from two or more data units and `passthroughSamples`
|
|
243
|
+
* those that arrived whole; the two are deliberately separate, so a
|
|
244
|
+
* producer that silently stopped partitioning cannot hide behind a single
|
|
245
|
+
* "samples delivered" total. This is the typed acceptance signal for
|
|
246
|
+
* large-frame playback — never parse the console for it.
|
|
247
|
+
*/
|
|
248
|
+
get sampleCombinerStats(): Readonly<SampleCombinerStats>;
|
|
249
|
+
get reorderStats(): Readonly<MmtpReorderStats>;
|
|
250
|
+
get reorderDiagnostics(): ReadonlyArray<MmtpReorderStreamDiagnostics>;
|
|
251
|
+
/**
|
|
252
|
+
* Phase 1 of two-phase parsing. Returns structured header info for FEC feeding.
|
|
253
|
+
* Call this before feed() when you need to extract FEC payload ID and feed
|
|
254
|
+
* symbols to FECManager before MFU extraction.
|
|
255
|
+
* Returns null for malformed packets.
|
|
256
|
+
*/
|
|
257
|
+
parseHeader(packet: Uint8Array, options?: ParseHeaderOptions): PacketInfo | null;
|
|
258
|
+
/** Feed a complete MMTP packet. For two-phase use, call parseHeader() first. */
|
|
259
|
+
feed(packet: Uint8Array, options?: ParseHeaderOptions): MmtpParserRecord | null;
|
|
260
|
+
onInit(cb: InitCallback): void;
|
|
261
|
+
onFrame(cb: FrameCallback): void;
|
|
262
|
+
/** Register a per-packet FEC source-symbol callback. Fires for each MMTP
|
|
263
|
+
* source MPU packet that carries a Source FEC Payload ID (ISO 23008-1 §C.5.2).
|
|
264
|
+
*
|
|
265
|
+
* Consumer responsibilities:
|
|
266
|
+
* - Zero-pad `rawSymbol` to the FEC `symbolSize` if shorter (FEC config is
|
|
267
|
+
* out-of-band — typically from the CMSF catalog's `fec.symbolSize`).
|
|
268
|
+
* - Decide oversized handling (rawSymbol.length > symbolSize is not FEC-
|
|
269
|
+
* decodable; consumer typically skips that block's source-feed).
|
|
270
|
+
* - Look up the right FEC consumer (e.g. FecWorkerClient) by packetId.
|
|
271
|
+
*
|
|
272
|
+
* Designed for spec-clean reuse: Shaka, upstream moqtail, or any consumer
|
|
273
|
+
* that uses MmtpContainerParser can wire FEC source delivery without
|
|
274
|
+
* pulling in MulticastManager/MmtpRouter/FECManager. */
|
|
275
|
+
onSourceSymbol(cb: SourceSymbolCallback): void;
|
|
276
|
+
onTrackFrame(packetId: number, cb: FrameCallback): void;
|
|
277
|
+
setTrack(packetId: number, info: TrackInfo): void;
|
|
278
|
+
/** Drop one physical stream's ordering and MFU state for retained replay. */
|
|
279
|
+
resetTrack(packetId: number, catalogTrackName: string): void;
|
|
280
|
+
setMfuTimeoutMs(ms: number | null): void;
|
|
281
|
+
setReassemblyPolicy(policy: MfuReassemblyPolicy): void;
|
|
282
|
+
setReorderWindow(windowSize: number): void;
|
|
283
|
+
/** Route an already-assembled frame through the same reorder/callback path
|
|
284
|
+
* used by source packets. FEC recovery uses this to merge recovered frames
|
|
285
|
+
* with direct source frames before the decoder sees them. */
|
|
286
|
+
routeFrame(data: Uint8Array, meta: FrameMeta): void;
|
|
287
|
+
/**
|
|
288
|
+
* Claim and return the authored timing for a recovered sample. Recovery does
|
|
289
|
+
* not pass through the ordinary `feed()` completion path, so it must retire
|
|
290
|
+
* the same bounded resolver entry once the router accepts the recovered
|
|
291
|
+
* sample. A missing entry is a fail-closed signal: callers must not replace
|
|
292
|
+
* it with an MMTP send timestamp or cadence guess.
|
|
293
|
+
*/
|
|
294
|
+
consumeAuthoredTimingFor(packetId: number, mpuSequenceNumber: number, movieFragmentSequenceNumber: number | undefined, sampleNumber: number | undefined, catalogTrackName?: string): AuthoredTiming | null;
|
|
295
|
+
/** Emit all ordered frames currently buffered by the parser. Finite-stream
|
|
296
|
+
* consumers may call this before dispose(); live cancellation should not. */
|
|
297
|
+
flush(): void;
|
|
298
|
+
dispose(): void;
|
|
299
|
+
/** Authored presentation timestamp of the last emitted frame, in microseconds. */
|
|
300
|
+
lastFrameTimestamp: number | undefined;
|
|
301
|
+
static isKeyframe(data: Uint8Array, rapFlag: boolean, codec?: string): boolean;
|
|
302
|
+
}
|
|
303
|
+
export {};
|
|
304
|
+
//# sourceMappingURL=mmtp-container-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmtp-container-parser.d.ts","sourceRoot":"","sources":["../src/mmtp-container-parser.ts"],"names":[],"mappings":"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"}
|