@blockcast/mmt-container 0.1.0-main.0399efef1f07
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +152 -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 +20087 -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 +873 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +202 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +568 -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 +217 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1769 -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 +248 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1268 -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 +307 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +1530 -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 +88 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +614 -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 +380 -0
- package/dist/index.js.map +7 -0
- package/dist/iso-bmff-timing.d.ts +78 -0
- package/dist/iso-bmff-timing.d.ts.map +1 -0
- package/dist/iso-bmff-timing.js +618 -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 +1285 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +251 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +624 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +396 -0
- package/dist/mfu-reassembler.d.ts.map +1 -0
- package/dist/mfu-reassembler.js +3085 -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 +434 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +6164 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +8999 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +132 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +6413 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +390 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +9242 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +181 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +802 -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 +369 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +13400 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +61 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +1665 -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 +8965 -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 +127 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/repair-layers.d.ts +141 -0
- package/dist/repair-layers.d.ts.map +1 -0
- package/dist/repair-layers.js +303 -0
- package/dist/repair-layers.js.map +7 -0
- package/dist/sample-combiner.d.ts +212 -0
- package/dist/sample-combiner.d.ts.map +1 -0
- package/dist/sample-combiner.js +616 -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 +1238 -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 +398 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +767 -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 +92 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +2139 -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 +6418 -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 +87 -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 +279 -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 +319 -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 +276 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +645 -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 +899 -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 +82 -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 +296 -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 +172 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +254 -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 +276 -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 +645 -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 +899 -0
- package/node_modules/@blockcast/mmt-fec/package.json +79 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +371 -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 +317 -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 +99 -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 +492 -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 +669 -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 +360 -0
- package/src/align.ts +239 -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 +845 -0
- package/src/catalog-fec-params.ts +535 -0
- package/src/catalog-network-source.ts +49 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1167 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +334 -0
- package/src/codec-utils.ts +1611 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +2081 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-worker-setup.ts +213 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +486 -0
- package/src/iso-bmff-timing.ts +813 -0
- package/src/loc.ts +181 -0
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +795 -0
- package/src/mfu-reassembler.ts +3741 -0
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +1836 -0
- package/src/mmtp-decode-pipeline.ts +389 -0
- package/src/mmtp-router.ts +3136 -0
- package/src/mmtp-to-cmaf.ts +1024 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +439 -0
- package/src/multicast-manager.ts +1720 -0
- package/src/multicast-transport.ts +321 -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 +238 -0
- package/src/repair-layers.ts +490 -0
- package/src/sample-combiner.ts +938 -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 +994 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +389 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +40 -0
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +27 -0
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +32 -0
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +30 -0
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +31 -0
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +33 -0
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +23 -0
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +32 -0
- package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
- package/test-vectors/catalog/negative/media-track-repair-layer.json +16 -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-source-symbols-over-max.json +23 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
- package/test-vectors/catalog/negative/repair-track-legacy-shape.json +19 -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-layered-repair.json +104 -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/source-contiguity-v1.json +131 -0
- package/test-vectors/subsample-placement-v1.json +230 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type MfuReassemblyPolicy = ReliableMoqReassemblyPolicy | {
|
|
2
|
+
transport: 'datagram';
|
|
3
|
+
deadlineMs: number;
|
|
4
|
+
};
|
|
5
|
+
export interface ReliableMoqReassemblyPolicy {
|
|
6
|
+
transport: 'reliable-moq';
|
|
7
|
+
startsAtRandomAccessGroup?: true;
|
|
8
|
+
}
|
|
9
|
+
export type MmtpTrackType = 'video' | 'audio' | null;
|
|
10
|
+
export interface ReliableMoqReassemblyOptions {
|
|
11
|
+
/**
|
|
12
|
+
* The transport starts at a complete independently decodable media group.
|
|
13
|
+
* The parser still requires an observed RAP before decoder startup.
|
|
14
|
+
*/
|
|
15
|
+
startsAtRandomAccessGroup?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function reliableMoqMfuReassembly(options?: ReliableMoqReassemblyOptions): ReliableMoqReassemblyPolicy;
|
|
18
|
+
export declare function datagramMfuReassembly(deadlineMs: number): MfuReassemblyPolicy;
|
|
19
|
+
/** Validate the complete runtime shape even when a caller bypasses the policy factories. */
|
|
20
|
+
export declare function assertValidMfuReassemblyPolicy(policy: MfuReassemblyPolicy): void;
|
|
21
|
+
export declare function mfuReassemblyTimeoutMs(policy: MfuReassemblyPolicy): number | null;
|
|
22
|
+
/** Resolve the parser reorder window without inferring reliable-stream completion. */
|
|
23
|
+
export declare function mmtpFrameReorderWindowFrames(policy: MfuReassemblyPolicy, configuredWindow?: number): number;
|
|
24
|
+
//# sourceMappingURL=mfu-reassembly-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mfu-reassembly-policy.d.ts","sourceRoot":"","sources":["../src/mfu-reassembly-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,2BAA2B,GAC3B;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,cAAc,CAAA;IACzB,yBAAyB,CAAC,EAAE,IAAI,CAAA;CACjC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAA;AAEpD,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAA;CACpC;AAyBD,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CAkB7B;AAQD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAG7E;AAED,4FAA4F;AAC5F,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CA8BhF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAGjF;AAED,sFAAsF;AACtF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,gBAAgB,SAAI,GACnB,MAAM,CAgBR"}
|
|
@@ -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,434 @@
|
|
|
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
|
+
/** Typed ISO-BMFF timing-sample budget counters. See `timingBudgetStats`. */
|
|
114
|
+
export interface MmtpTimingBudgetStats {
|
|
115
|
+
/** Slots currently charged to declared-but-undelivered samples. */
|
|
116
|
+
pending: number;
|
|
117
|
+
/** Total slots available; `pending === capacity` rejects every new moof. */
|
|
118
|
+
capacity: number;
|
|
119
|
+
/** Slots returned by samples the combiner abandoned (evicted or timed out). */
|
|
120
|
+
reclaimed: number;
|
|
121
|
+
/**
|
|
122
|
+
* Slots reclaimed by window displacement — samples no component ever saw,
|
|
123
|
+
* so no abandonment event could be raised for them. Separate from
|
|
124
|
+
* `reclaimed` because the owners differ: `reclaimed` is the combiner giving
|
|
125
|
+
* up, `evicted` is loss that was never observable at all.
|
|
126
|
+
*/
|
|
127
|
+
evicted: number;
|
|
128
|
+
/** Movie fragments refused because the budget had no room for their samples. */
|
|
129
|
+
rejectedMovieFragments: number;
|
|
130
|
+
}
|
|
131
|
+
export interface MmtpReorderStats {
|
|
132
|
+
droppedBeforeStartupKeyframe: number;
|
|
133
|
+
droppedIncompleteStartupInterval: number;
|
|
134
|
+
droppedStale: number;
|
|
135
|
+
forcedWindowFlushes: number;
|
|
136
|
+
droppedOnLiveDispose: number;
|
|
137
|
+
publisherResets: number;
|
|
138
|
+
droppedOnPublisherReset: number;
|
|
139
|
+
bufferedFrames: number;
|
|
140
|
+
}
|
|
141
|
+
export interface MmtpReorderFrameDiagnostics {
|
|
142
|
+
timestampUs: number;
|
|
143
|
+
keyframe: boolean;
|
|
144
|
+
sequenceNumber: number;
|
|
145
|
+
packetSequenceNumber?: number;
|
|
146
|
+
movieFragmentSequenceNumber?: number;
|
|
147
|
+
sampleNumber?: number;
|
|
148
|
+
fragmentCount?: number;
|
|
149
|
+
}
|
|
150
|
+
export interface MmtpReorderStreamDiagnostics {
|
|
151
|
+
packetId: number;
|
|
152
|
+
bufferedFrames: number;
|
|
153
|
+
lastEmitted: MmtpReorderFrameDiagnostics | null;
|
|
154
|
+
startupKeyframe: MmtpReorderFrameDiagnostics | null;
|
|
155
|
+
head: MmtpReorderFrameDiagnostics[];
|
|
156
|
+
tail: MmtpReorderFrameDiagnostics[];
|
|
157
|
+
keyframes: MmtpReorderFrameDiagnostics[];
|
|
158
|
+
}
|
|
159
|
+
export type MmtpParserRecord = {
|
|
160
|
+
kind: 'repair' | 'non-media';
|
|
161
|
+
packet: PacketInfo;
|
|
162
|
+
byteLength: number;
|
|
163
|
+
} | {
|
|
164
|
+
kind: 'init' | 'fragment';
|
|
165
|
+
packet: PacketInfo;
|
|
166
|
+
data: Uint8Array;
|
|
167
|
+
mpuSequenceNumber: number;
|
|
168
|
+
fragmentationIndicator: number;
|
|
169
|
+
fragmentCounter: number;
|
|
170
|
+
} | {
|
|
171
|
+
kind: 'pending';
|
|
172
|
+
packet: PacketInfo;
|
|
173
|
+
mpuSequenceNumber: number;
|
|
174
|
+
fragmentationIndicator: number;
|
|
175
|
+
fragmentCounter: number;
|
|
176
|
+
} | {
|
|
177
|
+
kind: 'rejected';
|
|
178
|
+
packet: PacketInfo;
|
|
179
|
+
mpuSequenceNumber: number;
|
|
180
|
+
fragmentationIndicator: number;
|
|
181
|
+
fragmentCounter: number;
|
|
182
|
+
error: {
|
|
183
|
+
/**
|
|
184
|
+
* Either a single data unit's own fragment chain was rejected, or
|
|
185
|
+
* combining reassembled data units into a sample was (moqcast #37).
|
|
186
|
+
* Both are fail-closed drops of the same packet, so they share this
|
|
187
|
+
* record; the code says which class it came from.
|
|
188
|
+
*/
|
|
189
|
+
code: MfuReassemblyError['code'] | SampleCombineError['code'];
|
|
190
|
+
message: string;
|
|
191
|
+
};
|
|
192
|
+
} | {
|
|
193
|
+
kind: 'frame';
|
|
194
|
+
packet: PacketInfo;
|
|
195
|
+
data: Uint8Array;
|
|
196
|
+
meta: FrameMeta;
|
|
197
|
+
mpuSequenceNumber: number;
|
|
198
|
+
fragmentCount: number;
|
|
199
|
+
rapFlag: boolean;
|
|
200
|
+
priority?: number;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Why feed() returned no record. Every `return null` inside feed() names one
|
|
204
|
+
* of these, so a packet that produced nothing is attributable to the stage
|
|
205
|
+
* that rejected it rather than to one collapsed failure bucket.
|
|
206
|
+
*
|
|
207
|
+
* The distinction is what makes a wedged receive path readable: a media track
|
|
208
|
+
* that stops producing records looks identical from outside whether the header
|
|
209
|
+
* failed to parse, MFU extraction failed, or the timing resolver refused the
|
|
210
|
+
* sample — and those name three different components.
|
|
211
|
+
*/
|
|
212
|
+
export type MmtpFeedDropReason =
|
|
213
|
+
/** feed() after dispose(); the host is still pushing at a torn-down parser. */
|
|
214
|
+
'disposed' | 'header-parse-failed' | 'mfu-extract-failed'
|
|
215
|
+
/** MPU present but not a timed MFU, so no media payload to reassemble. */
|
|
216
|
+
| 'untimed-mpu' | 'init-unexpected-fragmentation' | 'init-normalize-failed'
|
|
217
|
+
/** No timing resolver, or it refused the initialization segment. */
|
|
218
|
+
| 'init-timing-refused' | 'fragment-unexpected-fragmentation' | 'fragment-no-resolver'
|
|
219
|
+
/** addMovieFragment refused — includes the pending-timing-sample budget. */
|
|
220
|
+
| 'fragment-timing-refused' | 'unknown-fragment-type' | 'mfu-no-resolver' | 'mfu-empty-payload' | 'mfu-du-header-missing' | 'mfu-sample-timing-missing' | 'mfu-offset-out-of-range' | 'mfu-size-mismatch' | 'assembled-identity-missing' | 'assembled-timing-missing' | 'assembled-mpu-mismatch'
|
|
221
|
+
/**
|
|
222
|
+
* Refusals inside the combined-sample delivery step, which runs after the
|
|
223
|
+
* combiner has already produced a whole sample. These are distinct from
|
|
224
|
+
* their `assembled-*` counterparts: those reject a data unit on the way in,
|
|
225
|
+
* these reject a sample that was fully reassembled and then found
|
|
226
|
+
* undeliverable, so collapsing the two would hide a combiner that completes
|
|
227
|
+
* samples nothing can present.
|
|
228
|
+
*/
|
|
229
|
+
| 'combined-timing-missing' | 'combined-size-mismatch'
|
|
230
|
+
/** Frame metadata could not be built — an fMP4 box arrived as a timed MFU
|
|
231
|
+
* payload, or the authored timing converts to a non-positive duration. */
|
|
232
|
+
| 'combined-meta-build-failed' | 'combined-timing-consume-refused'
|
|
233
|
+
/** feed() threw. Counted so the tally still sums to fedObjects; the error
|
|
234
|
+
* is rethrown, never swallowed. */
|
|
235
|
+
| 'threw';
|
|
236
|
+
/**
|
|
237
|
+
* Every key `outcomes` can carry: one per record kind, one per drop reason.
|
|
238
|
+
*
|
|
239
|
+
* Derived from the two unions rather than written out, so a new record kind or
|
|
240
|
+
* drop reason cannot be counted under a key the type does not admit, and a
|
|
241
|
+
* consumer can enumerate the vocabulary from the type instead of from prose.
|
|
242
|
+
*/
|
|
243
|
+
export type MmtpFeedOutcomeKey = MmtpParserRecord['kind'] | `drop:${MmtpFeedDropReason}`;
|
|
244
|
+
/**
|
|
245
|
+
* Feed tallies owned by the parser.
|
|
246
|
+
*
|
|
247
|
+
* These live here rather than on MmtpDecodePipeline because the two players
|
|
248
|
+
* sit at different layers of this library: hang-mmt-fec drives the pipeline,
|
|
249
|
+
* while moqtail constructs MmtpContainerParser directly and never builds the
|
|
250
|
+
* wrapper. feed() is the one chokepoint both cross, so a tally maintained here
|
|
251
|
+
* instruments both by construction.
|
|
252
|
+
*
|
|
253
|
+
* Logs are diagnostic output, not an acceptance API — this is the typed
|
|
254
|
+
* counter a harness should read instead of scraping console histograms.
|
|
255
|
+
*/
|
|
256
|
+
export interface MmtpParserFeedStats {
|
|
257
|
+
/** Every packet handed to feed(), including post-dispose calls. */
|
|
258
|
+
fedObjects: number;
|
|
259
|
+
/**
|
|
260
|
+
* Mutually exclusive outcome tally: record kinds under their own `kind`,
|
|
261
|
+
* drops under `drop:<reason>`. The values sum to exactly `fedObjects`, which
|
|
262
|
+
* is the property that makes a frozen media bucket beside a still-climbing
|
|
263
|
+
* non-media bucket a readable signal rather than two unrelated numbers.
|
|
264
|
+
*
|
|
265
|
+
* Partial because a key appears only once it has been counted; absent and
|
|
266
|
+
* zero mean the same thing to a reader.
|
|
267
|
+
*/
|
|
268
|
+
outcomes: Partial<Record<MmtpFeedOutcomeKey, number>>;
|
|
269
|
+
/**
|
|
270
|
+
* Refusals from a completed older sample delivered while registering a
|
|
271
|
+
* later packet's authored size. Kept separate because that side effect is
|
|
272
|
+
* not the packet's own feed outcome.
|
|
273
|
+
*/
|
|
274
|
+
deferredOutcomes: Partial<Record<MmtpFeedDropReason, number>>;
|
|
275
|
+
}
|
|
276
|
+
type FrameCallback = (data: Uint8Array, meta: FrameMeta) => void;
|
|
277
|
+
type InitCallback = (data: Uint8Array, packetId: number, catalogTrackName?: string) => void;
|
|
278
|
+
export declare function isMfuKeyframeMetadata(rapFlag: boolean, priority?: number): boolean;
|
|
279
|
+
/** Per-packet detached ALTA authenticator trailer (08-07 Path 2).
|
|
280
|
+
* - `auth`: the authenticator bytes (length-prefixed at packet end).
|
|
281
|
+
* - `payloadEnd`: byte offset within the source packet where signed
|
|
282
|
+
* payload ends — consumers reconstruct `payload = packet[0..payloadEnd]`
|
|
283
|
+
* for verify_detached. */
|
|
284
|
+
export interface ParsedAltaTrailer {
|
|
285
|
+
auth: Uint8Array;
|
|
286
|
+
payloadEnd: number;
|
|
287
|
+
}
|
|
288
|
+
/** Source-symbol exposure for FEC consumers.
|
|
289
|
+
*
|
|
290
|
+
* Fires from {@link MmtpContainerParser.feed} once per FEC-protected source
|
|
291
|
+
* packet — after parseHeader confirms fec_payload_id is present, before MFU
|
|
292
|
+
* extraction.
|
|
293
|
+
*
|
|
294
|
+
* Arguments:
|
|
295
|
+
* - `packetId` – MMTP header `packet_id` (track identifier)
|
|
296
|
+
* - `ssId` – flat Source Symbol ID from the 4-byte fec_payload_id trailer
|
|
297
|
+
* - `rawSymbol` – packet bytes minus the 4-byte fec_payload_id trailer.
|
|
298
|
+
* NOT zero-padded to FEC symbol size — consumer pads if needed
|
|
299
|
+
* (FEC symbol size is FEC-config, not parser-config).
|
|
300
|
+
* - `alta` – detached ALTA authenticator if present, else undefined
|
|
301
|
+
*
|
|
302
|
+
* Designed so consumers (player, Shaka shim, upstream moqtail) can wire
|
|
303
|
+
* source-symbol delivery to whatever FEC pipeline they own, without depending
|
|
304
|
+
* on libmmt's MulticastManager/MmtpRouter/FECManager stack. */
|
|
305
|
+
type SourceSymbolCallback = (packetId: number, ssId: number, rawSymbol: Uint8Array, alta: ParsedAltaTrailer | undefined) => void;
|
|
306
|
+
export interface ParseHeaderOptions {
|
|
307
|
+
/** Recovered source symbols already had the trailing Source FEC Payload ID stripped. */
|
|
308
|
+
skipFecPayloadId?: boolean;
|
|
309
|
+
/** Mark frames emitted from this packet as FEC-recovered. */
|
|
310
|
+
recovered?: boolean;
|
|
311
|
+
/** Exact catalog track bound to this packet by its ingress subscription. */
|
|
312
|
+
catalogTrackName?: string;
|
|
313
|
+
/** Source transport for parser-owned frame attribution. */
|
|
314
|
+
source?: MmtpSourcePath;
|
|
315
|
+
/**
|
|
316
|
+
* Explicit strict provenance for the fragments this packet produces.
|
|
317
|
+
* The router sets it for FEC-recovered packets, which carry no `source`
|
|
318
|
+
* but whose FEC block's symbol provenance is known.
|
|
319
|
+
*/
|
|
320
|
+
deliveryProvenance?: MmtpDeliveryProvenance;
|
|
321
|
+
}
|
|
322
|
+
export declare class MmtpContainerParser {
|
|
323
|
+
#private;
|
|
324
|
+
constructor(config?: MmtpParserConfig);
|
|
325
|
+
/** The MFU reassembler that buffers fragmented MFUs fed via feed().
|
|
326
|
+
* Exposed so a co-operating FEC-recovery layer (MmtpRouter) feeds recovered
|
|
327
|
+
* fragments into the SAME reassembler: a frame split between source-received
|
|
328
|
+
* and FEC-recovered fragments must share one buffer to complete (BLO-8151).
|
|
329
|
+
* Before this was shared, recovered video symbols reported "0 emitted,
|
|
330
|
+
* pending-reassembly=N" because they landed in a separate instance. */
|
|
331
|
+
get reassembler(): MfuReassemblerBackend;
|
|
332
|
+
/**
|
|
333
|
+
* Subsample-combining counters (moqcast #37). `combinedSamples` counts
|
|
334
|
+
* samples reassembled from two or more data units and `passthroughSamples`
|
|
335
|
+
* those that arrived whole; the two are deliberately separate, so a
|
|
336
|
+
* producer that silently stopped partitioning cannot hide behind a single
|
|
337
|
+
* "samples delivered" total. This is the typed acceptance signal for
|
|
338
|
+
* large-frame playback — never parse the console for it.
|
|
339
|
+
*/
|
|
340
|
+
get sampleCombinerStats(): Readonly<SampleCombinerStats>;
|
|
341
|
+
/**
|
|
342
|
+
* Typed view of the ISO-BMFF timing-sample budget.
|
|
343
|
+
*
|
|
344
|
+
* This is the acceptance signal for the budget ratchet: `pending` walking
|
|
345
|
+
* to `capacity` while `rejectedMovieFragments` climbs is the stream wedging,
|
|
346
|
+
* and it is observable here rather than only as media silently stopping.
|
|
347
|
+
* Per repo policy this is a producer-owned counter -- never infer budget
|
|
348
|
+
* state by parsing logs.
|
|
349
|
+
*/
|
|
350
|
+
get timingBudgetStats(): Readonly<MmtpTimingBudgetStats>;
|
|
351
|
+
get reorderStats(): Readonly<MmtpReorderStats>;
|
|
352
|
+
/**
|
|
353
|
+
* Feed tallies for this parser. A fresh snapshot per call, not a live view,
|
|
354
|
+
* so a caller can hold one and compare it against a later read.
|
|
355
|
+
*
|
|
356
|
+
* Survives dispose() — the counters are the parser's own state and are not
|
|
357
|
+
* cleared by teardown, because a wedged receive path is usually read after
|
|
358
|
+
* the fact.
|
|
359
|
+
*/
|
|
360
|
+
get feedStats(): Readonly<MmtpParserFeedStats>;
|
|
361
|
+
/**
|
|
362
|
+
* Outcome token of the most recent feed(), or null before the first call.
|
|
363
|
+
*
|
|
364
|
+
* Exposed alongside `lastFeedOutcomeCount` as two scalars rather than one
|
|
365
|
+
* object because a wrapper reads them on every packet, and feedStats()
|
|
366
|
+
* allocates a fresh snapshot per call.
|
|
367
|
+
*/
|
|
368
|
+
get lastFeedOutcome(): MmtpFeedOutcomeKey | null;
|
|
369
|
+
/** How many times `lastFeedOutcome` has now been seen. 1 on its first
|
|
370
|
+
* occurrence, which is what a caller logging once per novel outcome needs. */
|
|
371
|
+
get lastFeedOutcomeCount(): number;
|
|
372
|
+
get reorderDiagnostics(): ReadonlyArray<MmtpReorderStreamDiagnostics>;
|
|
373
|
+
/**
|
|
374
|
+
* Reclaim samples abandoned by the sample combiner's protocol deadline.
|
|
375
|
+
*
|
|
376
|
+
* This is deliberately driven by the parser's existing packet/lifecycle
|
|
377
|
+
* cleanup path rather than by another timer. The reassembler timeout is the
|
|
378
|
+
* same catalog/FEC-derived deadline that bounds each constituent MFU.
|
|
379
|
+
*/
|
|
380
|
+
cleanupTimeouts(): void;
|
|
381
|
+
/**
|
|
382
|
+
* Phase 1 of two-phase parsing. Returns structured header info for FEC feeding.
|
|
383
|
+
* Call this before feed() when you need to extract FEC payload ID and feed
|
|
384
|
+
* symbols to FECManager before MFU extraction.
|
|
385
|
+
* Returns null for malformed packets.
|
|
386
|
+
*/
|
|
387
|
+
parseHeader(packet: Uint8Array, options?: ParseHeaderOptions): PacketInfo | null;
|
|
388
|
+
/** Feed a complete MMTP packet. For two-phase use, call parseHeader() first. */
|
|
389
|
+
feed(packet: Uint8Array, options?: ParseHeaderOptions): MmtpParserRecord | null;
|
|
390
|
+
onInit(cb: InitCallback): void;
|
|
391
|
+
onFrame(cb: FrameCallback): void;
|
|
392
|
+
/** Register a per-packet FEC source-symbol callback. Fires for each MMTP
|
|
393
|
+
* source MPU packet that carries a Source FEC Payload ID (ISO 23008-1 §C.5.2).
|
|
394
|
+
*
|
|
395
|
+
* Consumer responsibilities:
|
|
396
|
+
* - Zero-pad `rawSymbol` to the FEC `symbolSize` if shorter (FEC config is
|
|
397
|
+
* out-of-band — typically from the CMSF catalog's `fec.symbolSize`).
|
|
398
|
+
* - Decide oversized handling (rawSymbol.length > symbolSize is not FEC-
|
|
399
|
+
* decodable; consumer typically skips that block's source-feed).
|
|
400
|
+
* - Look up the right FEC consumer (e.g. FecWorkerClient) by packetId.
|
|
401
|
+
*
|
|
402
|
+
* Designed for spec-clean reuse: Shaka, upstream moqtail, or any consumer
|
|
403
|
+
* that uses MmtpContainerParser can wire FEC source delivery without
|
|
404
|
+
* pulling in MulticastManager/MmtpRouter/FECManager. */
|
|
405
|
+
onSourceSymbol(cb: SourceSymbolCallback): void;
|
|
406
|
+
onTrackFrame(packetId: number, cb: FrameCallback): void;
|
|
407
|
+
setTrack(packetId: number, info: TrackInfo): void;
|
|
408
|
+
/** Drop one physical stream's ordering and MFU state for retained replay. */
|
|
409
|
+
resetTrack(packetId: number, catalogTrackName: string): void;
|
|
410
|
+
setMfuTimeoutMs(ms: number | null): void;
|
|
411
|
+
setReassemblyPolicy(policy: MfuReassemblyPolicy): void;
|
|
412
|
+
setReorderWindow(windowSize: number): void;
|
|
413
|
+
/** Route an already-assembled frame through the same reorder/callback path
|
|
414
|
+
* used by source packets. FEC recovery uses this to merge recovered frames
|
|
415
|
+
* with direct source frames before the decoder sees them. */
|
|
416
|
+
routeFrame(data: Uint8Array, meta: FrameMeta): void;
|
|
417
|
+
/**
|
|
418
|
+
* Claim and return the authored timing for a recovered sample. Recovery does
|
|
419
|
+
* not pass through the ordinary `feed()` completion path, so it must retire
|
|
420
|
+
* the same bounded resolver entry once the router accepts the recovered
|
|
421
|
+
* sample. A missing entry is a fail-closed signal: callers must not replace
|
|
422
|
+
* it with an MMTP send timestamp or cadence guess.
|
|
423
|
+
*/
|
|
424
|
+
consumeAuthoredTimingFor(packetId: number, mpuSequenceNumber: number, movieFragmentSequenceNumber: number | undefined, sampleNumber: number | undefined, catalogTrackName?: string): AuthoredTiming | null;
|
|
425
|
+
/** Emit all ordered frames currently buffered by the parser. Finite-stream
|
|
426
|
+
* consumers may call this before dispose(); live cancellation should not. */
|
|
427
|
+
flush(): void;
|
|
428
|
+
dispose(): void;
|
|
429
|
+
/** Authored presentation timestamp of the last emitted frame, in microseconds. */
|
|
430
|
+
lastFrameTimestamp: number | undefined;
|
|
431
|
+
static isKeyframe(data: Uint8Array, rapFlag: boolean, codec?: string): boolean;
|
|
432
|
+
}
|
|
433
|
+
export {};
|
|
434
|
+
//# 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":"AASA,OAAO,EAEL,kBAAkB,EAElB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,kBAAkB,EAIlB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAA;AAM7B,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;8CAE0C;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;mFAC+E;IAC/E,gBAAgB,CAAC,EAAE,mBAAmB,CAAA;IACtC,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;+CAC2C;IAC3C,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC;;;gFAG4E;IAC5E,YAAY,CAAC,EAAE,SAAS,CAAA;CACzB;AAED;;uEAEuE;AACvE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,uFAAuF;IACvF,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACrC,yDAAyD;IACzD,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gFAAgF;IAChF,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAA;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,4DAA4D;IAC5D,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAA;IACxC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,wEAAwE;IACxE,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,sBAAsB,CAAA;CAC5C;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,gFAAgF;IAChF,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B,EAAE,MAAM,CAAA;IACpC,gCAAgC,EAAE,MAAM,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,2BAA2B,GAAG,IAAI,CAAA;IAC/C,eAAe,EAAE,2BAA2B,GAAG,IAAI,CAAA;IACnD,IAAI,EAAE,2BAA2B,EAAE,CAAA;IACnC,IAAI,EAAE,2BAA2B,EAAE,CAAA;IACnC,SAAS,EAAE,2BAA2B,EAAE,CAAA;CACzC;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAA;IAC5B,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,GACD;IACE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,UAAU,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;CACxB,GACD;IACE,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,UAAU,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;CACxB,GACD;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,UAAU,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE;QACL;;;;;WAKG;QACH,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC7D,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,GACD;IACE,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,SAAS,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAEL;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB;AAC5B,+EAA+E;AAC7E,UAAU,GACV,qBAAqB,GACrB,oBAAoB;AACtB,0EAA0E;GACxE,aAAa,GACb,+BAA+B,GAC/B,uBAAuB;AACzB,oEAAoE;GAClE,qBAAqB,GACrB,mCAAmC,GACnC,sBAAsB;AACxB,4EAA4E;GAC1E,yBAAyB,GACzB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,uBAAuB,GACvB,2BAA2B,GAC3B,yBAAyB,GACzB,mBAAmB,GACnB,4BAA4B,GAC5B,0BAA0B,GAC1B,wBAAwB;AAC1B;;;;;;;GAOG;GACD,yBAAyB,GACzB,wBAAwB;AAC1B;2EAC2E;GACzE,4BAA4B,GAC5B,iCAAiC;AACnC;oCACoC;GAClC,OAAO,CAAA;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,CAAC,MAAM,CAAC,GACxB,QAAQ,kBAAkB,EAAE,CAAA;AAEhC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;;OAQG;IACH,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;CAC9D;AAED,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;AAChE,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAe3F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAElF;AAED;;;;8BAI8B;AAC9B,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;gEAgBgE;AAChE,KAAK,oBAAoB,GAAG,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,iBAAiB,GAAG,SAAS,KAChC,IAAI,CAAA;AAET,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,sBAAsB,CAAA;CAC5C;AAkMD,qBAAa,mBAAmB;;gBA0HlB,MAAM,CAAC,EAAE,gBAAgB;IAyErC;;;;;4EAKwE;IACxE,IAAI,WAAW,IAAI,qBAAqB,CAEvC;IAED;;;;;;;OAOG;IACH,IAAI,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAUvD;IAED;;;;;;;;OAQG;IACH,IAAI,iBAAiB,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAQvD;IAED,IAAI,YAAY,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAI7C;IAED;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAM7C;IAED;;;;;;OAMG;IACH,IAAI,eAAe,IAAI,kBAAkB,GAAG,IAAI,CAE/C;IAED;mFAC+E;IAC/E,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IA0BD,IAAI,kBAAkB,IAAI,aAAa,CAAC,4BAA4B,CAAC,CAMpE;IAED;;;;;;OAMG;IACH,eAAe,IAAI,IAAI;IAQvB;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,UAAU,GAAG,IAAI;IAyBhF,gFAAgF;IAChF,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI;IA0V/E,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIhC;;;;;;;;;;;;6DAYyD;IACzD,cAAc,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAI9C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI;IAIvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAqBjD,6EAA6E;IAC7E,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAmB5D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKxC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAStD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAW1C;;iEAE6D;IAC7D,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAenD;;;;;;OAMG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,2BAA2B,EAAE,MAAM,GAAG,SAAS,EAC/C,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACxB,cAAc,GAAG,IAAI;IA4CxB;iFAC6E;IAC7E,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IAuJf,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAY;IAWlD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,SAAK,GAAG,OAAO;CA+E3E"}
|