@blockcast/mmt-container 0.1.0 → 0.3.0-main.0bde85f7082f
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 +524 -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 +80 -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/block-policy.d.ts +314 -0
- package/dist/block-policy.d.ts.map +1 -0
- package/dist/block-policy.js +466 -0
- package/dist/block-policy.js.map +7 -0
- package/dist/browser-runtime.js +26549 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +429 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +985 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +275 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +702 -0
- package/dist/catalog-fec-params.js.map +7 -0
- package/dist/catalog-network-source.d.ts +42 -0
- package/dist/catalog-network-source.d.ts.map +1 -0
- package/dist/catalog-network-source.js +47 -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 +285 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1966 -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 +176 -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 +183 -0
- package/dist/cmcd-producer.js.map +7 -0
- package/dist/codec-utils.d.ts +384 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1546 -0
- package/dist/codec-utils.js.map +7 -0
- package/dist/conceal-timeline.d.ts +146 -0
- package/dist/conceal-timeline.d.ts.map +1 -0
- package/dist/conceal-timeline.js +137 -0
- package/dist/conceal-timeline.js.map +7 -0
- package/dist/delivery-gap.d.ts +75 -0
- package/dist/delivery-gap.d.ts.map +1 -0
- package/dist/delivery-gap.js +88 -0
- package/dist/delivery-gap.js.map +7 -0
- package/dist/duplicate-ledger.d.ts +197 -0
- package/dist/duplicate-ledger.d.ts.map +1 -0
- package/dist/duplicate-ledger.js +226 -0
- package/dist/duplicate-ledger.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 +583 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +3899 -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 +60 -0
- package/dist/fec-starvation-detector.js.map +7 -0
- package/dist/fec-state.d.ts +131 -0
- package/dist/fec-state.d.ts.map +1 -0
- package/dist/fec-state.js +87 -0
- package/dist/fec-state.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +94 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +673 -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 +44 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +460 -14
- package/dist/index.js.map +7 -1
- package/dist/iso-block-locator.d.ts +118 -0
- package/dist/iso-block-locator.d.ts.map +1 -0
- package/dist/iso-block-locator.js +289 -0
- package/dist/iso-block-locator.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 +593 -0
- package/dist/iso-bmff-timing.js.map +7 -0
- package/dist/loc.d.ts +70 -75
- package/dist/loc.d.ts.map +1 -1
- package/dist/loc.js +106 -192
- package/dist/loc.js.map +7 -1
- 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 +1266 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +262 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +584 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +313 -9
- package/dist/mfu-reassembler.d.ts.map +1 -1
- package/dist/mfu-reassembler.js +3051 -285
- package/dist/mfu-reassembler.js.map +7 -1
- 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 +568 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +6580 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +9616 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +138 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +6814 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +679 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +11278 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +187 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +716 -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 +141 -0
- package/dist/multicast-input.d.ts.map +1 -0
- package/dist/multicast-input.js +390 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +669 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +19101 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +271 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +2264 -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 +418 -0
- package/dist/multicast-unwrap.js.map +7 -0
- package/dist/no-modules.d.ts +10 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +9491 -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 +270 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +381 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/repair-layers.d.ts +158 -0
- package/dist/repair-layers.d.ts.map +1 -0
- package/dist/repair-layers.js +344 -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 +595 -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 +572 -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 +1209 -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 +70 -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 +473 -0
- package/dist/timestamp-codec.js.map +7 -0
- package/dist/track-pipeline-setup.d.ts +83 -0
- package/dist/track-pipeline-setup.d.ts.map +1 -0
- package/dist/track-pipeline-setup.js +291 -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 +209 -0
- package/dist/track-pipeline.js.map +7 -0
- package/dist/track-session.d.ts +414 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +754 -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 +74 -0
- package/dist/transport-pool.js.map +7 -0
- package/dist/wasm-mfu-reassembler.d.ts +97 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +2133 -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 +6834 -0
- package/dist/wasm-mmtp-container-parser.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/README.md +223 -0
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +38 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.js +78 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +93 -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 +346 -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 +380 -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 +859 -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 +370 -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 +194 -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 +62 -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/block-order.ts +93 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +392 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +399 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1502 -0
- package/node_modules/@blockcast/fec-worker/src/index.ts +35 -0
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +589 -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 +209 -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 +134 -0
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +55 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +128 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +7 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js +7 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +292 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +612 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +18 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +145 -0
- package/node_modules/@blockcast/mmt-base/src/index.ts +6 -0
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +892 -0
- package/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
- package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
- package/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
- package/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -0
- package/node_modules/@blockcast/mmt-fec/README.md +271 -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 +106 -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 +288 -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 +205 -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 +240 -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 +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js +28 -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 +258 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +382 -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/dist/repair-group.d.ts +82 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +170 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.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 +134 -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/fec-block-profile.d.ts +55 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +128 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +7 -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 +7 -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 +292 -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 +612 -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/dist/net-constants.d.ts +18 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.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/fec-block-profile.ts +145 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +6 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +892 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -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 +439 -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 +310 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +94 -0
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +463 -0
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
- package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +195 -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 +179 -8
- package/schemas/catalog.schema.json +357 -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/block-policy.ts +903 -0
- package/src/carp-catalog.ts +1065 -0
- package/src/catalog-fec-params.ts +729 -0
- package/src/catalog-network-source.ts +74 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1255 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +329 -0
- package/src/codec-utils.ts +1984 -0
- package/src/conceal-timeline.ts +293 -0
- package/src/delivery-gap.ts +147 -0
- package/src/duplicate-ledger.ts +372 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +4298 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-state.ts +219 -0
- package/src/fec-worker-setup.ts +283 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +590 -21
- package/src/iso-block-locator.ts +329 -0
- package/src/iso-bmff-timing.ts +813 -0
- package/src/loc.ts +128 -154
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +841 -0
- package/src/mfu-reassembler.ts +3480 -155
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +2380 -0
- package/src/mmtp-decode-pipeline.ts +406 -0
- package/src/mmtp-router.ts +4860 -0
- package/src/mmtp-to-cmaf.ts +977 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +793 -0
- package/src/multicast-manager.ts +2783 -0
- package/src/multicast-transport.ts +1058 -0
- package/src/multicast-unwrap.ts +132 -0
- package/src/no-modules.ts +21 -0
- package/src/phase14-catalog-override.ts +336 -0
- package/src/repair-fetch.ts +772 -0
- package/src/repair-layers.ts +533 -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 +205 -0
- package/src/track-pipeline.ts +332 -0
- package/src/track-session.ts +1010 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +405 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +106 -0
- package/test-vectors/catalog/negative/archive-origin-with-path.json +33 -0
- package/test-vectors/catalog/negative/archive-unknown-field.json +34 -0
- package/test-vectors/catalog/negative/fec-block-profile-missing.json +51 -0
- package/test-vectors/catalog/negative/fec-block-profile-unknown.json +52 -0
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +28 -0
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +33 -0
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +31 -0
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +32 -0
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +34 -0
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +24 -0
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +33 -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/multicast-network-source-empty.json +44 -0
- package/test-vectors/catalog/negative/multicast-packet-id-signaling.json +26 -0
- package/test-vectors/catalog/negative/network-source-object.json +25 -0
- package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +24 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +27 -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/archive-origin.json +34 -0
- package/test-vectors/catalog/positive/fec-iso-ssbg1.json +52 -0
- package/test-vectors/catalog/positive/fec-layered-repair.json +106 -0
- package/test-vectors/catalog/positive/fec-multicast.json +52 -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/multicast-native-ssm-no-network-source.json +43 -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 +732 -0
- package/test-vectors/catalog-validator-public-api.mjs +25 -0
- package/test-vectors/generate-source-auth-fixture.mjs +114 -0
- package/test-vectors/hevc-x265-repeat-headers-v1.json +40 -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
- package/dist/mmtp.d.ts +0 -73
- package/dist/mmtp.d.ts.map +0 -1
- package/dist/mmtp.js +0 -210
- package/dist/mmtp.js.map +0 -1
- package/src/mmtp.ts +0 -277
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MMTP packet processing and frame routing layer.
|
|
3
|
+
*
|
|
4
|
+
* Delegates MMTP header parsing, MFU extraction, reassembly, and keyframe
|
|
5
|
+
* detection to MmtpContainerParser while owning FEC orchestration, sync
|
|
6
|
+
* gating, CMAF assembly, and callback routing.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from MulticastManager — this module owns MMTP-layer concerns:
|
|
9
|
+
* FEC symbol feeding, sync gating, MSE segment assembly, and frame routing.
|
|
10
|
+
* It does NOT own network I/O, watchdog timers, or multicast join/leave.
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import { type FecBlockProfile } from "@blockcast/mmt-base";
|
|
15
|
+
import type { IsoHeldSource } from "./fec-manager.js";
|
|
16
|
+
import type { IsoRepairPlacement } from "./iso-block-locator.js";
|
|
17
|
+
import type { MfuReassemblerBackend, MmtpSourcePath, MmtpDeliveryProvenance } from "./mfu-reassembler.js";
|
|
18
|
+
import type { MfuReassemblyPolicy } from "./mfu-reassembly-policy.js";
|
|
19
|
+
import { type AuthoredTiming } from "./authored-timing.js";
|
|
20
|
+
import { FecBlockMapper } from "@blockcast/mmt-fec";
|
|
21
|
+
import { CmafBlockAssembler, type BlockAssemblerConfig, type CmafBlockSample } from "./cmaf-block-assembler.js";
|
|
22
|
+
import { type TrackRole } from "./carp-catalog.js";
|
|
23
|
+
import { type BlockClass, type ClassifierMode, type ClassifierReason, type FrameGapDecision, type SourceSymbolEvidence } from "./block-policy.js";
|
|
24
|
+
import { type DuplicateHorizon } from "./duplicate-ledger.js";
|
|
25
|
+
import type { ManifestAuthMode, ManifestObjectIdentity, ManifestTrackContext, ManifestVerifier } from "@blockcast/mmt-manifest-verify";
|
|
26
|
+
/**
|
|
27
|
+
* Keyframe loss timeout slack factor (Phase 13, tracks WITHOUT FEC only).
|
|
28
|
+
*
|
|
29
|
+
* FEC tracks never arm the keyframe-lost timer: vanished FEC blocks are
|
|
30
|
+
* materialised from SBN evidence and resolve through their catalog-derived
|
|
31
|
+
* repair and fail deadlines, and the stall/conceal decision rides on the
|
|
32
|
+
* first frame released after the gap (`RoutedFrameMeta.gapBefore`).
|
|
33
|
+
*
|
|
34
|
+
* Derivation: The keyframe loss timer must fire after one full keyframe group
|
|
35
|
+
* has been missed. Group duration must come from explicit catalog timing; FEC
|
|
36
|
+
* sourceSymbols is a block width, not a GOP length. Multicast jitter means the
|
|
37
|
+
* last packet of a group may arrive up to ~0.5 group durations late (network
|
|
38
|
+
* reordering + FEC recovery latency). The total timeout is therefore:
|
|
39
|
+
*
|
|
40
|
+
* timeout = group_duration * (1.0 + 0.5_jitter) = group_duration * 1.5
|
|
41
|
+
*
|
|
42
|
+
* The 0.5 jitter margin covers: (a) FEC interleave recovery window (up to D
|
|
43
|
+
* frames), (b) network reordering within one interleave depth, and (c) OS
|
|
44
|
+
* socket buffer draining latency. This is tight enough to detect loss within
|
|
45
|
+
* one missing group while avoiding false positives from normal jitter.
|
|
46
|
+
*/
|
|
47
|
+
export declare const KEYFRAME_LOST_TIMEOUT_SLACK = 1.5;
|
|
48
|
+
export type RoutedFrameMeta = {
|
|
49
|
+
/** Authored ISO-BMFF presentation timestamp, in microseconds. */
|
|
50
|
+
timestamp: number;
|
|
51
|
+
/**
|
|
52
|
+
* Raw MMTP short-NTP header timestamp. This is transport timing metadata
|
|
53
|
+
* only; it is deliberately separate from the authored media timestamp.
|
|
54
|
+
*/
|
|
55
|
+
mmtpTimestamp?: bigint;
|
|
56
|
+
keyframe: boolean;
|
|
57
|
+
/** Exact ISO-BMFF timing in the media track's native timescale. */
|
|
58
|
+
authoredTiming?: AuthoredTiming;
|
|
59
|
+
/** Transport that supplied the accepted FI=1 head (or complete FI=0 frame). */
|
|
60
|
+
source?: MmtpSourcePath;
|
|
61
|
+
/**
|
|
62
|
+
* Whole-frame delivery verdict folded across every contributing fragment.
|
|
63
|
+
*
|
|
64
|
+
* Distinct from `source` on purpose. `source` answers a routing question —
|
|
65
|
+
* which transport's copy is this — and deliberately lets the head fragment
|
|
66
|
+
* decide. This answers an evidence question: did every byte of this frame
|
|
67
|
+
* physically arrive over multicast? A frame can be routed as 'multicast'
|
|
68
|
+
* and still be 'mixed'.
|
|
69
|
+
*/
|
|
70
|
+
deliveryProvenance?: MmtpDeliveryProvenance;
|
|
71
|
+
packetId?: number;
|
|
72
|
+
packetSequenceNumber?: number;
|
|
73
|
+
/** Every authoritative MMTP source-packet sequence that formed this frame. */
|
|
74
|
+
packetSequenceNumbers?: number[];
|
|
75
|
+
/** Subset of packetSequenceNumbers reconstructed by FEC. */
|
|
76
|
+
repairedPacketSequenceNumbers?: number[];
|
|
77
|
+
/** Native MMTP MPU group coordinate. */
|
|
78
|
+
mpuSequenceNumber?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Timed-MFU sample identity `(movie_fragment_sequence_number, sample_number)`
|
|
81
|
+
* from the MFU data-unit header. Absent when the MFU header is untimed.
|
|
82
|
+
*/
|
|
83
|
+
movieFragmentSequenceNumber?: number;
|
|
84
|
+
sampleNumber?: number;
|
|
85
|
+
/** Immutable catalog identity supplied by the owning ingress subscription. */
|
|
86
|
+
catalogTrackName?: string;
|
|
87
|
+
recovered?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* True when this frame opens playback after the router suppressed earlier
|
|
90
|
+
* video deltas while waiting for a sync keyframe. Downstream decoders can
|
|
91
|
+
* use this to treat the following dependency chain as provisional.
|
|
92
|
+
*/
|
|
93
|
+
sourceDiscontinuity?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Stall/conceal decision for the first frame released after a gap: its
|
|
96
|
+
* FEC blocks resolved with lost media, or authored decode time shows a
|
|
97
|
+
* missing sample. Sinks act on it in order, on this frame. It is the same
|
|
98
|
+
* object the manager emits as its `gap` event.
|
|
99
|
+
*/
|
|
100
|
+
gapBefore?: FrameGapDecision;
|
|
101
|
+
};
|
|
102
|
+
export interface MmtpIngressContext {
|
|
103
|
+
tracks: readonly Readonly<{
|
|
104
|
+
name: string;
|
|
105
|
+
packetId: number;
|
|
106
|
+
}>[];
|
|
107
|
+
}
|
|
108
|
+
/** One physical stream: an MMTP packet ID and the catalog track it carries. */
|
|
109
|
+
export interface MmtpStreamIdentity {
|
|
110
|
+
readonly packetId: number;
|
|
111
|
+
readonly catalogTrackName: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Where a staged stream switch committed, relative to the outgoing stream.
|
|
115
|
+
*
|
|
116
|
+
* - `outgoing-reached-rap`: the outgoing stream was about to deliver a frame
|
|
117
|
+
* at or past the incoming RAP's presentation time. The splice is exact:
|
|
118
|
+
* the outgoing stream delivered every frame before the RAP that reached
|
|
119
|
+
* the router, and none at or after it. An MSE assembler is the one
|
|
120
|
+
* exception, since its flush is unbounded (see `stageStreamSwitch`).
|
|
121
|
+
* - `outgoing-ahead`: when the incoming RAP arrived, the outgoing stream had
|
|
122
|
+
* already delivered a frame at or past it. The switch commits on that RAP
|
|
123
|
+
* at once; incoming frames up to `outgoingHighWater` cover media time the
|
|
124
|
+
* outgoing stream already delivered.
|
|
125
|
+
* - `outgoing-overdue`: the incoming stream reached its next RAP before the
|
|
126
|
+
* outgoing stream reached the one held for it, so the outgoing stream is at
|
|
127
|
+
* least a GOP behind (stalled, or losing media) and waiting longer only
|
|
128
|
+
* widens the gap. The switch commits on the held RAP: the held GOP is
|
|
129
|
+
* delivered, then the newer RAP. It overlaps nothing, since every outgoing
|
|
130
|
+
* frame delivered was compared against the held RAP and is before it.
|
|
131
|
+
*/
|
|
132
|
+
export type StreamSwitchCommitReason = "outgoing-reached-rap" | "outgoing-ahead" | "outgoing-overdue";
|
|
133
|
+
/** Presentation position of one frame, in the router's frame vocabulary. */
|
|
134
|
+
export interface StreamSwitchPosition {
|
|
135
|
+
/** Authored presentation timestamp, in microseconds. */
|
|
136
|
+
readonly timestamp: number;
|
|
137
|
+
/** Exact authored timing, when the frame carried it. */
|
|
138
|
+
readonly authoredTiming?: Readonly<AuthoredTiming>;
|
|
139
|
+
}
|
|
140
|
+
/** A staged stream switch, at the moment it commits. */
|
|
141
|
+
export interface StreamSwitchCommit {
|
|
142
|
+
readonly from: MmtpStreamIdentity;
|
|
143
|
+
readonly to: MmtpStreamIdentity;
|
|
144
|
+
/** The incoming RAP the switch commits on: the first `to` frame delivered. */
|
|
145
|
+
readonly rap: StreamSwitchPosition & {
|
|
146
|
+
readonly mpuSequenceNumber?: number;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* The furthest-presented outgoing frame delivered before the commit,
|
|
150
|
+
* counting the gap fills the commit released, or undefined when the
|
|
151
|
+
* outgoing stream delivered none.
|
|
152
|
+
*/
|
|
153
|
+
readonly outgoingHighWater: StreamSwitchPosition | undefined;
|
|
154
|
+
readonly reason: StreamSwitchCommitReason;
|
|
155
|
+
/**
|
|
156
|
+
* Incoming frames never delivered: the deltas before the incoming stream's
|
|
157
|
+
* first RAP (the GOP it was admitted into mid-way), and a held GOP a reset
|
|
158
|
+
* of the incoming stream invalidated.
|
|
159
|
+
*/
|
|
160
|
+
readonly droppedIncomingFrames: number;
|
|
161
|
+
}
|
|
162
|
+
/** What MmtpRouter.stageStreamSwitch needs. */
|
|
163
|
+
export interface StreamSwitchOptions {
|
|
164
|
+
/** The stream being replaced: a registered video packet ID. */
|
|
165
|
+
readonly from: MmtpStreamIdentity;
|
|
166
|
+
/** The replacing stream: a registered video packet ID other than `from`'s. */
|
|
167
|
+
readonly to: MmtpStreamIdentity;
|
|
168
|
+
/**
|
|
169
|
+
* Called synchronously at the commit, after `from`'s packet ID is retired
|
|
170
|
+
* and before `to`'s withheld init and its RAP are delivered. Throwing fails
|
|
171
|
+
* the commit closed: `to` is retired as well and nothing of it is
|
|
172
|
+
* delivered, since `from` can no longer be restored.
|
|
173
|
+
*/
|
|
174
|
+
readonly onCommit: (commit: StreamSwitchCommit) => void;
|
|
175
|
+
}
|
|
176
|
+
/** A switch MmtpRouter.stageStreamSwitch staged. */
|
|
177
|
+
export interface StagedStreamSwitch {
|
|
178
|
+
/**
|
|
179
|
+
* Abandon the switch before it commits: `to` is no longer withheld and its
|
|
180
|
+
* withheld init is dropped. Returns false when the switch already committed
|
|
181
|
+
* or was cancelled.
|
|
182
|
+
*/
|
|
183
|
+
cancel(): boolean;
|
|
184
|
+
}
|
|
185
|
+
/** Callback for decoded video/audio frames. */
|
|
186
|
+
export type FrameCallback = (data: Uint8Array, meta: RoutedFrameMeta) => void;
|
|
187
|
+
/** Metadata accompanying an accepted raw MMTP source packet. */
|
|
188
|
+
export type RoutedPacketMeta = {
|
|
189
|
+
packetId: number;
|
|
190
|
+
packetSequenceNumber: number;
|
|
191
|
+
/** True when FEC reconstructed this source packet. */
|
|
192
|
+
recovered: boolean;
|
|
193
|
+
/** True when the packet has no trailing Source FEC Payload ID. */
|
|
194
|
+
skipFecPayloadId: boolean;
|
|
195
|
+
/** Immutable catalog identity supplied by the owning ingress subscription. */
|
|
196
|
+
catalogTrackName?: string;
|
|
197
|
+
/**
|
|
198
|
+
* Strict provenance for the fragments this packet produces. Set for
|
|
199
|
+
* FEC-recovered packets, which carry no `source` of their own but inherit
|
|
200
|
+
* their FEC block's symbol provenance.
|
|
201
|
+
*/
|
|
202
|
+
deliveryProvenance?: MmtpDeliveryProvenance;
|
|
203
|
+
};
|
|
204
|
+
/** Callback for accepted raw MMTP source packets. */
|
|
205
|
+
export type TrackPacketCallback = (packet: Uint8Array, meta: RoutedPacketMeta) => void;
|
|
206
|
+
type ParserDiagnostics = {
|
|
207
|
+
packets: number;
|
|
208
|
+
frames: number;
|
|
209
|
+
initSegments: number;
|
|
210
|
+
noFragment: number;
|
|
211
|
+
fragments: number;
|
|
212
|
+
reassembled: number;
|
|
213
|
+
pendingBuffers: number;
|
|
214
|
+
pendingFragments: number;
|
|
215
|
+
pendingSamples?: unknown[];
|
|
216
|
+
lastPacketLength: number;
|
|
217
|
+
lastSequenceNumber: number;
|
|
218
|
+
lastFecSsId?: number;
|
|
219
|
+
lastFrameTimestamp?: number;
|
|
220
|
+
directAudioSourceEmitted: number;
|
|
221
|
+
directAudioSourceRegressions: number;
|
|
222
|
+
directAudioRecoveredQueued: number;
|
|
223
|
+
directAudioRecoveredDrained: number;
|
|
224
|
+
directAudioRecoveredStaleDropped: number;
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* FECManager interface — the contract MmtpRouter expects for FEC
|
|
228
|
+
* source/repair symbol processing and block lifecycle events.
|
|
229
|
+
*
|
|
230
|
+
* Concrete implementation: `FECManager` class in `./fec-manager.ts`.
|
|
231
|
+
* MmtpRouter only interacts with FEC through this interface.
|
|
232
|
+
*/
|
|
233
|
+
export interface FECManagerLike {
|
|
234
|
+
/** Feed a source symbol to the FEC decoder for a given track.
|
|
235
|
+
* Returns recovered block bytes if recovery completes, else null.
|
|
236
|
+
*
|
|
237
|
+
* `symbolData` is the complete MMTP packet without its Source FEC Payload
|
|
238
|
+
* ID, unpadded and possibly a view into the received packet. The manager
|
|
239
|
+
* zero-pads it to the packet's own symbol size T.
|
|
240
|
+
*
|
|
241
|
+
* Optional `alta` carries the detached ALTA authenticator extracted from
|
|
242
|
+
* the MMTP header-extension trailer (08-07 Path 2) — present on signed
|
|
243
|
+
* source packets, absent on relay-reassembled / unsigned streams. When
|
|
244
|
+
* provided, the fec-worker runs verify_detached instead of counting the
|
|
245
|
+
* symbol as `altaPending`. */
|
|
246
|
+
feedSourceSymbol(packetId: number, ssId: number, symbolData: Uint8Array, alta?: {
|
|
247
|
+
auth: Uint8Array;
|
|
248
|
+
payloadEnd: number;
|
|
249
|
+
}, catalogTrackName?: string): Uint8Array | null;
|
|
250
|
+
/** Feed a repair symbol to the FEC decoder for a given track.
|
|
251
|
+
* Returns recovered block bytes if recovery completes, else null. */
|
|
252
|
+
feedRepairSymbol(packetId: number, ssStart: number, ssbLength: number, rsId: number, repairData: Uint8Array, catalogTrackName?: string): Uint8Array | null;
|
|
253
|
+
/** Delivery-gap sample for one multicast packet (FECManager.noteMulticastArrival). */
|
|
254
|
+
noteMulticastArrival?(packetId: number, packetSequenceNumber: number): void;
|
|
255
|
+
/** Record a transport symbol for first-arrival-wins dedup and path counters. */
|
|
256
|
+
feedSymbolFromSource(packetId: number, sbn: number, esi: number, data: Uint8Array, source: "multicast" | "moq", catalogTrackName?: string): boolean;
|
|
257
|
+
/** Strict provenance for a block: 'multicast' only when no symbol arrived
|
|
258
|
+
* over MoQ. Recovered bytes inherit it, since a recovered symbol is a
|
|
259
|
+
* function of every symbol that entered the block. */
|
|
260
|
+
blockDeliveryProvenance?(sbn: number, packetId: number, catalogTrackName?: string): MmtpDeliveryProvenance;
|
|
261
|
+
/** Track a first-arrival network source symbol for block completion and
|
|
262
|
+
* classification. Refreshes the inactivity deadline and marks clean when
|
|
263
|
+
* K arrive. */
|
|
264
|
+
trackBlock(sbn: number, packetId: number, catalogTrackName: string | undefined, esi: number, evidence: SourceSymbolEvidence): void;
|
|
265
|
+
/** True once the packetId has a per-track FEC configuration. */
|
|
266
|
+
isTrackConfigured?(packetId: number): boolean;
|
|
267
|
+
/** Lifecycle resolution of one block for in-order frame release. */
|
|
268
|
+
blockResolution?(sbn: number, packetId: number, catalogTrackName?: string): "pending" | "complete" | "failed" | "untracked";
|
|
269
|
+
/** Highest SBN seen for a stream in the current epoch. */
|
|
270
|
+
highestSbn?(packetId: number, catalogTrackName?: string): number | undefined;
|
|
271
|
+
/** Catalog/reset epoch of a packet's streams. */
|
|
272
|
+
epochFor?(packetId: number): number;
|
|
273
|
+
/**
|
|
274
|
+
* Catalog `fec.interleaveDepthMs` (§5.1 full block span) of a packetId; 0
|
|
275
|
+
* when the stream has none.
|
|
276
|
+
*/
|
|
277
|
+
interleaveDepthMsForPacket?(packetId: number): number;
|
|
278
|
+
/**
|
|
279
|
+
* How long a terminal block stays authoritative before it retires to
|
|
280
|
+
* untracked. The release gate holds a frame at most this long, so its loss
|
|
281
|
+
* scan never reads a retired, delivered block as lost. Required whenever
|
|
282
|
+
* blockResolution is.
|
|
283
|
+
*/
|
|
284
|
+
terminalRetentionMsForPacket?(packetId: number): number;
|
|
285
|
+
/** Configured codec of a packetId. */
|
|
286
|
+
codecFor?(packetId: number): string | undefined;
|
|
287
|
+
/** Current classifier mode of a stream. */
|
|
288
|
+
classifierModeFor?(packetId: number, catalogTrackName?: string): {
|
|
289
|
+
mode: ClassifierMode;
|
|
290
|
+
reason: ClassifierReason | null;
|
|
291
|
+
};
|
|
292
|
+
/** Whether an MPU boundary still bounds the stream's RAPs. */
|
|
293
|
+
mpuBoundsRapsFor?(packetId: number, catalogTrackName?: string): boolean;
|
|
294
|
+
/** Record a RAP released in order (RAP-spacing invariant). */
|
|
295
|
+
noteReleasedRap?(packetId: number, catalogTrackName: string | undefined, mpu: number, presentationTime: bigint, mediaTimescale: number): void;
|
|
296
|
+
/** Refresh the block inactivity deadline after accepted repair progress. */
|
|
297
|
+
noteBlockActivity?(sbn: number, packetId: number, catalogTrackName?: string): void;
|
|
298
|
+
/** Cancel block timeout (block completed via clean or FEC recovery). */
|
|
299
|
+
cancelBlockTimeout(sbn: number, packetId?: number, catalogTrackName?: string): void;
|
|
300
|
+
/** Check if a block is already completed (clean or recovered). */
|
|
301
|
+
isBlockCompleted(sbn: number, packetId?: number, catalogTrackName?: string): boolean;
|
|
302
|
+
/** Mark a block as completed externally (after routing recovered data). */
|
|
303
|
+
markBlockCompleted(sbn: number, packetId?: number, catalogTrackName?: string): void;
|
|
304
|
+
/** Increment blocksRecovered stat (called after routing recovery). */
|
|
305
|
+
countRecovery(packetId?: number, sbn?: number, catalogTrackName?: string): void;
|
|
306
|
+
/**
|
|
307
|
+
* The configured catalog `fec.blockProfile` of a packetId, or undefined
|
|
308
|
+
* while it is unconfigured. Required: a Source or Repair FEC Payload ID is
|
|
309
|
+
* read under exactly one profile, and the router never guesses it.
|
|
310
|
+
*/
|
|
311
|
+
blockProfileForPacket(packetId: number): FecBlockProfile | undefined;
|
|
312
|
+
/** iso-ssbg1-v1: whether a protected packet fits one ssbg_mode1 symbol. */
|
|
313
|
+
isoSourceFits?(packetId: number, packetLength: number): boolean;
|
|
314
|
+
/** iso-ssbg1-v1: locate a source in a block a repair already stated. */
|
|
315
|
+
locateIsoSource?(packetId: number, catalogTrackName: string | undefined, ssId: number): {
|
|
316
|
+
sbn: number;
|
|
317
|
+
esi: number;
|
|
318
|
+
} | null;
|
|
319
|
+
/** iso-ssbg1-v1: hold a first-arrival source until a repair states its block. */
|
|
320
|
+
holdIsoSource?(packetId: number, catalogTrackName: string | undefined, ssId: number, source: IsoHeldSource): boolean;
|
|
321
|
+
/** iso-ssbg1-v1: state a repair's block and hand back the held sources it places. */
|
|
322
|
+
placeIsoRepair?(packetId: number, catalogTrackName: string | undefined, ssStart: number, ssbLength: number): IsoRepairPlacement<IsoHeldSource>;
|
|
323
|
+
/** iso-ssbg1-v1: resolution of the SS_IDs strictly between two released frames. */
|
|
324
|
+
isoSpanResolution?(packetId: number, catalogTrackName: string | undefined, fromSsId: number, toSsId: number): readonly number[] | null;
|
|
325
|
+
/** FEC source symbol count K per block. */
|
|
326
|
+
readonly k: number;
|
|
327
|
+
kForPacket?(packetId: number): number;
|
|
328
|
+
/**
|
|
329
|
+
* The longest a block stays open after its last symbol (inactivity fail
|
|
330
|
+
* bound plus D-28 repair grace). With interleaveDepthMsForPacket it bounds
|
|
331
|
+
* how long the router keeps a stream's duplicate ledgers.
|
|
332
|
+
*/
|
|
333
|
+
blockLifetimeMsForPacket?(packetId: number): number;
|
|
334
|
+
/** FEC symbol size T in bytes (0 = unknown / no FEC). */
|
|
335
|
+
readonly symbolSize: number;
|
|
336
|
+
symbolSizeForPacket?(packetId: number): number;
|
|
337
|
+
/** Update framerate — used to refine FEC block timeout. */
|
|
338
|
+
setFramerate(fps: number): void;
|
|
339
|
+
/** Per-block state snapshot for FecBlockGrid visualization. */
|
|
340
|
+
getBlockStates(): Array<{
|
|
341
|
+
sbn: number;
|
|
342
|
+
packetId?: number;
|
|
343
|
+
state: "collecting" | "complete" | "failed";
|
|
344
|
+
sourceCount: number;
|
|
345
|
+
k: number;
|
|
346
|
+
progress: number;
|
|
347
|
+
}>;
|
|
348
|
+
/** FEC statistics snapshot. */
|
|
349
|
+
readonly fecStats: {
|
|
350
|
+
sourcePackets: number;
|
|
351
|
+
repairPackets: number;
|
|
352
|
+
blocksClean: number;
|
|
353
|
+
blocksRecovered: number;
|
|
354
|
+
blocksFailed: number;
|
|
355
|
+
};
|
|
356
|
+
/** Called when a block receives its first source symbol. */
|
|
357
|
+
onBlockStarted: ((sbn: number, packetId: number, catalogTrackName?: string) => void) | null;
|
|
358
|
+
/** Called when a block completes cleanly (all K sources arrived). */
|
|
359
|
+
onBlockComplete: ((sbn: number, packetId: number, catalogTrackName?: string) => void) | null;
|
|
360
|
+
/** Called when a block times out (unrecoverable), with its class. */
|
|
361
|
+
onBlockFailed: ((sbn: number, packetId: number, catalogTrackName: string | undefined, blockClass: BlockClass) => void) | null;
|
|
362
|
+
/** Called when a block reaches any terminal state. */
|
|
363
|
+
onBlockResolved?: ((sbn: number, packetId: number, catalogTrackName: string | undefined) => void) | null;
|
|
364
|
+
/** Called when a stream's FEC source restarted (SBN discontinuity). */
|
|
365
|
+
onSourceDiscontinuity?: ((packetId: number, catalogTrackName: string | undefined) => void) | null;
|
|
366
|
+
/** Dispose timers and state. */
|
|
367
|
+
dispose(): void;
|
|
368
|
+
}
|
|
369
|
+
export interface ManifestIdentityResolutionInput {
|
|
370
|
+
packetId: number;
|
|
371
|
+
sbn: number;
|
|
372
|
+
esi: number;
|
|
373
|
+
/**
|
|
374
|
+
* The packet's SS_ID and its MPU's mpu_sequence_number. Under
|
|
375
|
+
* iso-ssbg1-v1 blocks vary in length, so a packet's media group comes from
|
|
376
|
+
* its own MPU header, never from SBN arithmetic (BLO-35597 D2a).
|
|
377
|
+
*/
|
|
378
|
+
ssId?: number;
|
|
379
|
+
mpuSequenceNumber?: number;
|
|
380
|
+
catalogTrackName?: string;
|
|
381
|
+
recovered: boolean;
|
|
382
|
+
sourceSymbolFormat: "full-mmtp-packet" | "fec-padded-recovery";
|
|
383
|
+
}
|
|
384
|
+
export type ManifestIdentityResolver = (input: ManifestIdentityResolutionInput) => ManifestObjectIdentity | null;
|
|
385
|
+
export declare class MmtpRouter {
|
|
386
|
+
#private;
|
|
387
|
+
constructor(config?: {
|
|
388
|
+
fecManager?: FECManagerLike;
|
|
389
|
+
fecMapper?: FecBlockMapper;
|
|
390
|
+
/** MFU reassembly timeout (ms) for FEC recovery path. Derive from FEC interleaveDepthMs. */
|
|
391
|
+
mfuTimeoutMs?: number;
|
|
392
|
+
reassemblyPolicy?: MfuReassemblyPolicy;
|
|
393
|
+
reassembler?: MfuReassemblerBackend;
|
|
394
|
+
maxBufferedMfus?: number;
|
|
395
|
+
/** Catalog-derived keyframe loss timeout (ms). Derive from explicit
|
|
396
|
+
* keyframe/group duration; do not use FEC sourceSymbols as GOP length.
|
|
397
|
+
* Pass a reader when its inputs are measured later; see
|
|
398
|
+
* setKeyframeLostTimeoutMs. */
|
|
399
|
+
keyframeLostTimeoutMs?: number | (() => number);
|
|
400
|
+
manifestVerifier?: ManifestVerifier;
|
|
401
|
+
/** Existing behavior is router ownership; shared browser plans opt into caller ownership. */
|
|
402
|
+
manifestVerifierOwnership?: "caller" | "router";
|
|
403
|
+
resolveManifestIdentity?: (packetId: number, sbn: number, esi: number, catalogTrackName?: string) => ManifestObjectIdentity | null;
|
|
404
|
+
resolveManifestIdentityForRoute?: ManifestIdentityResolver;
|
|
405
|
+
/** Internal terminal-failure sink owned by the composing transport. */
|
|
406
|
+
onBlockFailed?: (sbn: number, packetId: number, catalogTrackName: string | undefined, blockClass: BlockClass) => void;
|
|
407
|
+
/** Internal gap-decision sink owned by the composing transport. */
|
|
408
|
+
onFrameGap?: (decision: FrameGapDecision) => void;
|
|
409
|
+
/**
|
|
410
|
+
* Called when a multicast stream's publisher restarted its wire counters,
|
|
411
|
+
* after the router reset its own state for the stream, so the composing
|
|
412
|
+
* transport can reset what it holds (FEC blocks, repair I/O) before the
|
|
413
|
+
* packet that revealed the restart is processed.
|
|
414
|
+
*/
|
|
415
|
+
onPublisherRestart?: (packetId: number, catalogTrackName: string) => void;
|
|
416
|
+
});
|
|
417
|
+
get fecManager(): FECManagerLike | null;
|
|
418
|
+
/**
|
|
419
|
+
* How long this router keeps a packet ID's duplicate ledgers, derived from
|
|
420
|
+
* the FEC manager's geometry for it (see duplicate-ledger.ts), or why no
|
|
421
|
+
* horizon is derivable (the stream then keeps count-bounded ledgers, or none
|
|
422
|
+
* without an FEC manager). A stream reads this when it moves to a new FEC
|
|
423
|
+
* block, so a catalog change applies from the next block.
|
|
424
|
+
*/
|
|
425
|
+
duplicateHorizonFor(packetId: number): DuplicateHorizon;
|
|
426
|
+
/** Publisher restarts detected on the multicast leg since construction. */
|
|
427
|
+
get publisherRestartCount(): number;
|
|
428
|
+
/**
|
|
429
|
+
* Packets whose Source or Repair FEC Payload ID was left unread because
|
|
430
|
+
* their (owner) packetId had no configured `fec.blockProfile`: FEC not
|
|
431
|
+
* configured yet for a track whose packets already flow, or a track whose
|
|
432
|
+
* catalog FEC was unusable. Such a source packet's media is routed as on a
|
|
433
|
+
* track without FEC; such a repair packet is dropped. Neither is read as a
|
|
434
|
+
* block coordinate under a guessed profile, and neither touches FEC state.
|
|
435
|
+
*/
|
|
436
|
+
get fecPayloadIdsWithoutProfile(): number;
|
|
437
|
+
get reassembler(): MfuReassemblerBackend;
|
|
438
|
+
getDiagnostics(): Record<number, ParserDiagnostics>;
|
|
439
|
+
/** Register callback for keyframe loss detection.
|
|
440
|
+
* Fires when no complete keyframe is emitted within keyframeLostTimeoutMs.
|
|
441
|
+
* Argument: next expected groupId (lastKeyframeGroupId + 1). */
|
|
442
|
+
onKeyframeLost(cb: (expectedGroupId: number) => void): void;
|
|
443
|
+
/**
|
|
444
|
+
* Set the keyframe loss timeout after construction.
|
|
445
|
+
* Must be called BEFORE setPacketIdType('video').
|
|
446
|
+
* A fixed timeout derives from explicit keyframe/group duration:
|
|
447
|
+
* Math.ceil(groupDurationMs * KEYFRAME_LOST_TIMEOUT_SLACK).
|
|
448
|
+
* A timeout whose inputs are measured after configuration (e.g. keyframe
|
|
449
|
+
* cadence plus measured playout lateness) is passed as a reader, evaluated
|
|
450
|
+
* each time the timer is armed. Both forms pass the same check at each arm:
|
|
451
|
+
* a throw, or a value that is not finite, positive and within the timer
|
|
452
|
+
* maximum, leaves that keyframe unarmed (fail closed per keyframe, not per
|
|
453
|
+
* session). A fixed NaN, e.g. derived from a catalog without a group
|
|
454
|
+
* duration, therefore never reaches setTimeout.
|
|
455
|
+
*/
|
|
456
|
+
setKeyframeLostTimeoutMs(ms: number | (() => number)): void;
|
|
457
|
+
/** Update MFU reassembly timeout. Source and FEC-recovery paths share the
|
|
458
|
+
* parser's single reassembler (BLO-8151), so one update covers both. */
|
|
459
|
+
setMfuTimeoutMs(ms: number): void;
|
|
460
|
+
/** Update parser frame reordering for unordered multicast delivery.
|
|
461
|
+
* Callers derive this from the catalog FEC block span (§5.1 — the
|
|
462
|
+
* interleave value IS the span): positive round-half-up of span / frameMs. */
|
|
463
|
+
setReorderWindow(windowSize: number): void;
|
|
464
|
+
/** Register MMTP packetId → track type mapping.
|
|
465
|
+
* Call BEFORE packets arrive to ensure correct routing from the first packet.
|
|
466
|
+
* If keyframeLostTimeoutMs is not provided, Phase 13 keyframe repair is
|
|
467
|
+
* disabled (video still routes/decodes normally). framerate is OPTIONAL per
|
|
468
|
+
* draft-ietf-moq-catalogformat-01 §3.2.23, so we can't require the timeout. */
|
|
469
|
+
setPacketIdType(packetId: number, trackType: "video" | "audio"): void;
|
|
470
|
+
/** Media kind registered for a packetId, if any. */
|
|
471
|
+
trackKindFor(packetId: number): "video" | "audio" | undefined;
|
|
472
|
+
/** Register codec string for a packetId — enables codec-aware keyframe detection.
|
|
473
|
+
* Without this, only H.264 IDR (NAL type 5) is detected as keyframe fallback.
|
|
474
|
+
* AV1 (OBU_SEQUENCE_HEADER) and VP9 (frame_type bit) require the codec string. */
|
|
475
|
+
setTrackCodec(packetId: number, codec: string): void;
|
|
476
|
+
/** @deprecated Use onTrackFrame(packetId, cb) for per-track routing */
|
|
477
|
+
onVideoFrame(cb: FrameCallback): void;
|
|
478
|
+
/** @deprecated Use onTrackFrame(packetId, cb) for per-track routing */
|
|
479
|
+
onAudioFrame(cb: FrameCallback): void;
|
|
480
|
+
/** Register a frame callback for a specific MMTP packetId (track).
|
|
481
|
+
* When a legacy callback (onVideoFrame/onAudioFrame) also exists for this
|
|
482
|
+
* packetId's type, both fire: per-track first, then legacy. This ensures
|
|
483
|
+
* element.ts wiring (confirmAudio, feedMulticast) continues working when
|
|
484
|
+
* TrackPipeline registers per-track sources. */
|
|
485
|
+
onTrackFrame(packetId: number, cb: FrameCallback): void;
|
|
486
|
+
/** Register a raw MMTP source-packet callback for one track.
|
|
487
|
+
*
|
|
488
|
+
* Direct packets retain their original bytes, including a Source FEC Payload
|
|
489
|
+
* ID when present. FEC-recovered packets are the recovered source-symbol
|
|
490
|
+
* bytes and set `skipFecPayloadId` because that trailer is not part of the
|
|
491
|
+
* protected symbol. Repair packets are never delivered here.
|
|
492
|
+
*/
|
|
493
|
+
onTrackPacket(packetId: number, cb: TrackPacketCallback): void;
|
|
494
|
+
/** Register an init segment callback (ftyp+moov from MMTP MPU metadata). */
|
|
495
|
+
onInitSegment(cb: (data: Uint8Array) => void): void;
|
|
496
|
+
/** Register an init segment callback for a specific MMTP packetId.
|
|
497
|
+
* Called when FT=0 init arrives via direct source or FEC recovery. */
|
|
498
|
+
onTrackInit(packetId: number, cb: (data: Uint8Array) => void): void;
|
|
499
|
+
/** Create a CMAF block assembler for MSE mode on a specific track.
|
|
500
|
+
* When active, source frames are buffered per FEC block and emitted as
|
|
501
|
+
* multi-sample CMAF segments instead of per-frame callbacks. */
|
|
502
|
+
enableMseAssembler(packetId: number, config: Omit<BlockAssemblerConfig, "k">, catalogTrackName?: string): CmafBlockAssembler;
|
|
503
|
+
/** Register a segment callback for a track's MSE assembler.
|
|
504
|
+
* Called with complete moof+mdat CMAF segments on block completion. */
|
|
505
|
+
onMseSegment(packetId: number, cb: (segment: Uint8Array) => void, catalogTrackName?: string): void;
|
|
506
|
+
/** Register a raw-sample callback for a track's MSE assembler.
|
|
507
|
+
* Use this when the caller already owns the fMP4/MSE timeline and only wants
|
|
508
|
+
* FEC recovery, keyframe gating, and dedup from the assembler. */
|
|
509
|
+
onMseSample(packetId: number, cb: (sample: CmafBlockSample) => void, catalogTrackName?: string): void;
|
|
510
|
+
/** Register an init segment callback for a track's MSE assembler. */
|
|
511
|
+
onMseInitSegment(packetId: number, cb: (init: Uint8Array) => void, catalogTrackName?: string): void;
|
|
512
|
+
/** Build and emit init segment for a track's MSE assembler from catalog config. */
|
|
513
|
+
emitMseInit(packetId: number, catalogTrackName?: string): void;
|
|
514
|
+
/** Mark a video track as synchronized by an external path.
|
|
515
|
+
* This opens the MMTP/FEC pre-sync gates without waiting for a multicast
|
|
516
|
+
* keyframe, for MSE timelines already seeded by MoQ with the same track. */
|
|
517
|
+
markExternalVideoSync(packetId?: number, catalogTrackName?: string): void;
|
|
518
|
+
/** Register callback for FEC blocks when the first source symbol arrives. */
|
|
519
|
+
onFecBlockStarted(cb: (sbn: number, packetId: number) => void): void;
|
|
520
|
+
/** Register a diagnostic callback for FEC blocks that fail. A failure is
|
|
521
|
+
* not a decoder instruction: act on `RoutedFrameMeta.gapBefore`. */
|
|
522
|
+
onFecBlockFailed(cb: (sbn: number, packetId: number, catalogTrackName: string | undefined, blockClass: BlockClass) => void): void;
|
|
523
|
+
/**
|
|
524
|
+
* Register a TrackRole for a specific packetId.
|
|
525
|
+
*
|
|
526
|
+
* D-26: Enables per-role block-complete fanout — delta-role packetIds fire
|
|
527
|
+
* onDeltaBlockComplete when their FEC block completes or fails.
|
|
528
|
+
* Composite callback preserved: legacy onVideoFrame/onAudioFrame still fire
|
|
529
|
+
* (MEMORY.md "prevents callback stealing").
|
|
530
|
+
*
|
|
531
|
+
* Valid roles: 'base' | 'delta' | 'repair' | 'single'.
|
|
532
|
+
* Throws on unknown role (error on bad init, CLAUDE.md).
|
|
533
|
+
*/
|
|
534
|
+
setPacketIdRole(packetId: number, role: TrackRole): void;
|
|
535
|
+
/** Replace catalog-derived repair ownership before a catalog reconfiguration. */
|
|
536
|
+
clearRepairPacketIdOwners(): void;
|
|
537
|
+
/** Bind one dedicated repair-track PID to its authoritative media PID. */
|
|
538
|
+
setRepairPacketIdOwner(repairPacketId: number, ownerPacketId: number): void;
|
|
539
|
+
/**
|
|
540
|
+
* Register callback fired when a delta-track FEC block completes or fails.
|
|
541
|
+
*
|
|
542
|
+
* @param cb - (packetId, failed) — packetId identifies the delta track,
|
|
543
|
+
* failed=false means clean/recovered, failed=true means unrecoverable.
|
|
544
|
+
*
|
|
545
|
+
* Called from both onBlockComplete (failed=false) and onBlockFailed (failed=true)
|
|
546
|
+
* for every packetId registered with role='delta' via setPacketIdRole().
|
|
547
|
+
*/
|
|
548
|
+
onDeltaBlockComplete(cb: (packetId: number, failed: boolean) => void): void;
|
|
549
|
+
/** Update framerate — delegates to FECManager for timeout refinement. */
|
|
550
|
+
setFramerate(fps: number): void;
|
|
551
|
+
/** Set FEC block mapper (created when FEC config becomes known via configureFec). */
|
|
552
|
+
setFecMapper(mapper: FecBlockMapper, packetId?: number): void;
|
|
553
|
+
registerManifestTrack(context: ManifestTrackContext): void;
|
|
554
|
+
feedManifestFrame(trackName: string, frame: Uint8Array): void;
|
|
555
|
+
setManifestAuthMode(mode: ManifestAuthMode): void;
|
|
556
|
+
/**
|
|
557
|
+
* Main entry point: feed a raw MMTP packet for processing.
|
|
558
|
+
*
|
|
559
|
+
* Source packets are played immediately AND fed to FECManager for recovery.
|
|
560
|
+
* Repair packets are fed to FECManager only (no direct playback).
|
|
561
|
+
*/
|
|
562
|
+
/**
|
|
563
|
+
* Feed one MMTP source packet.
|
|
564
|
+
*
|
|
565
|
+
* `source` is REQUIRED. It used to default to "multicast", which meant any
|
|
566
|
+
* caller that forgot it silently attributed its bytes to a multicast socket
|
|
567
|
+
* they may never have crossed — and that attribution is what the physical-
|
|
568
|
+
* delivery evidence path is built on. Absence is not multicast; say which.
|
|
569
|
+
*/
|
|
570
|
+
feedPacket(packet: Uint8Array, source: "multicast" | "moq", manifestIdentity?: ManifestObjectIdentity, ingress?: MmtpIngressContext): void;
|
|
571
|
+
/**
|
|
572
|
+
* Feed a reliable MoQ duplicate of a source packet that the multicast leg
|
|
573
|
+
* also carries, during make-before-break overlap.
|
|
574
|
+
*
|
|
575
|
+
* The copy is parsed for playback (attributed to "moq") so a pending
|
|
576
|
+
* multicast decoder can warm. For an FEC-tagged packet the router keeps a
|
|
577
|
+
* per-symbol (SBN/ESI) parse ledger, so whichever of it and its multicast
|
|
578
|
+
* twin arrives first is parsed and the second is not. The MFU reassembler
|
|
579
|
+
* cannot be that dedup: complete (FI=0) MFUs bypass its #emitted set.
|
|
580
|
+
*
|
|
581
|
+
* The ledger exists only where a symbol coordinate does: a packet with no
|
|
582
|
+
* FEC payload ID, or a router with no FEC manager, has none, so it and its
|
|
583
|
+
* twin are BOTH parsed. On an audio track that delivers the sample twice
|
|
584
|
+
* (#emitDirectSourceAudio counts the regression and still emits). The
|
|
585
|
+
* intended deployment is safe because the multicast leg is FEC-protected,
|
|
586
|
+
* so its media packets carry the ID; the untagged timing packets
|
|
587
|
+
* (init/moof) take this path too, where a re-parse is benign. Do not feed
|
|
588
|
+
* untagged media through here.
|
|
589
|
+
*
|
|
590
|
+
* The copy never enters FEC
|
|
591
|
+
* accounting: no `feedSymbolFromSource`, `trackBlock` or
|
|
592
|
+
* `feedSourceSymbol`. Block completion and the repair deadline therefore
|
|
593
|
+
* follow the multicast leg alone, and a multicast erasure still starves its
|
|
594
|
+
* block and requests repair. Feeding the copy through `feedPacket` instead
|
|
595
|
+
* would let it close the block, hiding exactly the loss repair exists for.
|
|
596
|
+
*
|
|
597
|
+
* MoQ unicast fallback is not an overlap copy: it is the only source, so it
|
|
598
|
+
* uses `feedPacket(packet, "moq")` and counts toward completion.
|
|
599
|
+
*/
|
|
600
|
+
feedOverlapCopy(packet: Uint8Array, ingress?: MmtpIngressContext): void;
|
|
601
|
+
/**
|
|
602
|
+
* Feed a repair packet from MoQ (reliable QUIC) — parses MMTP repair
|
|
603
|
+
* header and delegates to FECManager for FEC recovery.
|
|
604
|
+
*/
|
|
605
|
+
feedRepairPacket(packet: Uint8Array, ownerPacketIdHint?: number, catalogTrackName?: string): void;
|
|
606
|
+
/** Route a recovered FEC block through the parser + dedup pipeline.
|
|
607
|
+
* Sync WASM decoders return K fixed-width source symbols concatenated. */
|
|
608
|
+
routeRecoveredBlock(blockId: number, data: Uint8Array, packetId: number, catalogTrackName?: string): void;
|
|
609
|
+
/** Route a single recovered source symbol through the parser + dedup pipeline.
|
|
610
|
+
* Worker-backed decoders emit one padded source symbol per frame event. */
|
|
611
|
+
routeRecoveredSymbol(blockId: number, data: Uint8Array, packetId: number, esi?: number, catalogTrackName?: string): void;
|
|
612
|
+
/** Cancel the active keyframe loss timer.
|
|
613
|
+
* Call on failbackToMoq to prevent a stale timer from firing
|
|
614
|
+
* onKeyframeLost after multicast is no longer the active source. */
|
|
615
|
+
cancelKeyframeLostTimer(): void;
|
|
616
|
+
/** Emit parser frames buffered for a finite input before teardown. */
|
|
617
|
+
flush(): void;
|
|
618
|
+
/** Drop one rendition's parser/router/CMAF epoch without touching peers. */
|
|
619
|
+
resetTrack(packetId: number, catalogTrackName: string): void;
|
|
620
|
+
/**
|
|
621
|
+
* Retire one packet ID, drop-only: remove every registration of it (media
|
|
622
|
+
* kind, codec, frame/packet/init callbacks, FEC mapper, role, repair
|
|
623
|
+
* ownership) and every stream state kept for it (sync gates, emission
|
|
624
|
+
* cursors, duplicate ledgers, queued recovered frames, MSE assemblers,
|
|
625
|
+
* parser buffers and authored timing, MFU reassembly per catalog stream).
|
|
626
|
+
* Nothing buffered is delivered, as on live dispose. A dedicated repair
|
|
627
|
+
* packet ID that this packet ID alone owned loses its repair role with it.
|
|
628
|
+
*
|
|
629
|
+
* Afterwards the packet ID is unknown to the router: its packets and
|
|
630
|
+
* frames are dropped until it is registered again. FEC state lives in the
|
|
631
|
+
* FEC manager and is released there (FECManager.releasePacket).
|
|
632
|
+
*/
|
|
633
|
+
retirePacketId(packetId: number): void;
|
|
634
|
+
/**
|
|
635
|
+
* Stage an in-place switch from one video stream to another, committed at
|
|
636
|
+
* a RAP of the incoming stream without leaving the multicast group.
|
|
637
|
+
*
|
|
638
|
+
* Until the commit the outgoing stream (`from`) is delivered as usual and
|
|
639
|
+
* the incoming stream (`to`) is not: its packets are parsed and feed FEC,
|
|
640
|
+
* so its first RAP arrives FEC-protected, but none of its frames, and not
|
|
641
|
+
* its init, reach any callback or MSE assembler. Incoming deltas before its
|
|
642
|
+
* first RAP are dropped. When that RAP arrives:
|
|
643
|
+
*
|
|
644
|
+
* - if the outgoing stream already delivered a frame at or past the RAP's
|
|
645
|
+
* presentation time, the switch commits on it (`outgoing-ahead`);
|
|
646
|
+
* - otherwise the RAP and the incoming frames after it are held, and the
|
|
647
|
+
* switch commits when the outgoing stream is about to deliver a frame at
|
|
648
|
+
* or past the RAP (`outgoing-reached-rap`): that outgoing frame, and every
|
|
649
|
+
* later one, is never delivered, so the splice is exact. If the incoming
|
|
650
|
+
* stream reaches its next RAP first, the outgoing stream is a GOP or more
|
|
651
|
+
* behind: the switch commits on the held RAP and delivers the held GOP
|
|
652
|
+
* and then the newer RAP (`outgoing-overdue`), the smallest gap left once
|
|
653
|
+
* the outgoing stream stops. The hold is bounded by the incoming stream's
|
|
654
|
+
* own RAP cadence, so no timer is involved.
|
|
655
|
+
*
|
|
656
|
+
* The commit is one synchronous transition inside the frame path: the
|
|
657
|
+
* outgoing stream's already-admitted frames are released (its queued FEC
|
|
658
|
+
* gap fills only up to the RAP, since recovery can queue a frame ahead of
|
|
659
|
+
* the source cursor; its MSE assembler's ordering queue whole, as
|
|
660
|
+
* CmafBlockAssembler.flush has no bound, so on the MSE path a recovered
|
|
661
|
+
* outgoing frame at or past the RAP can still be emitted), its packet ID
|
|
662
|
+
* is retired
|
|
663
|
+
* (retirePacketId), `onCommit` runs, and then the incoming stream's newest
|
|
664
|
+
* init and its RAP are delivered, followed by any held frames. No outgoing
|
|
665
|
+
* frame is delivered after the commit and no incoming frame before it. If
|
|
666
|
+
* `onCommit` throws, `to` is retired too and none of it is delivered.
|
|
667
|
+
*
|
|
668
|
+
* Both packet IDs must be registered video streams; the commit reads RAPs.
|
|
669
|
+
* Admission (the transport allow-list and ingress tracks) is the caller's:
|
|
670
|
+
* MulticastManager.switchRendition drives both.
|
|
671
|
+
*/
|
|
672
|
+
stageStreamSwitch(options: StreamSwitchOptions): StagedStreamSwitch;
|
|
673
|
+
/** Live teardown is drop-only. Finite inputs must opt into a final flush. */
|
|
674
|
+
dispose(options?: {
|
|
675
|
+
flush?: boolean;
|
|
676
|
+
}): void;
|
|
677
|
+
}
|
|
678
|
+
export {};
|
|
679
|
+
//# sourceMappingURL=mmtp-router.d.ts.map
|