@blockcast/mmt-container 0.1.0 → 0.3.0-main.2515e5ca4858
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 +538 -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 +26499 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +445 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +998 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +337 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +749 -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 +46 -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 +589 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +3840 -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 +140 -0
- package/dist/fec-state.d.ts.map +1 -0
- package/dist/fec-state.js +86 -0
- package/dist/fec-state.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +100 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +671 -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 +468 -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 +288 -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 +3050 -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 +573 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +6601 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +9645 -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 +6835 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +702 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +11193 -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 +389 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +699 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +19143 -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 +2285 -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 +417 -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 +9520 -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 +281 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +391 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/repair-layers.d.ts +169 -0
- package/dist/repair-layers.d.ts.map +1 -0
- package/dist/repair-layers.js +351 -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 +568 -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 +472 -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 +2132 -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 +6855 -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 +22 -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 +48 -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 +92 -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 +345 -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 +373 -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 +764 -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 +59 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +391 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +392 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1386 -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 +132 -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 +28 -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 +44 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +314 -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 +49 -0
- package/node_modules/@blockcast/mmt-base/src/signalling.ts +860 -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 +105 -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 +222 -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 +149 -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 +161 -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 +168 -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 +305 -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 +132 -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 +28 -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 +44 -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 +314 -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 +49 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +860 -0
- package/node_modules/@blockcast/mmt-fec/package.json +81 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +371 -0
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +360 -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 +225 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +97 -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 +371 -0
- package/node_modules/@blockcast/mmt-fec/test-vectors/repair-epoch.json +119 -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 +180 -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 +1086 -0
- package/src/catalog-fec-params.ts +850 -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 +4241 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-state.ts +228 -0
- package/src/fec-worker-setup.ts +291 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +594 -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 +2406 -0
- package/src/mmtp-decode-pipeline.ts +406 -0
- package/src/mmtp-router.ts +4712 -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 +2895 -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 +786 -0
- package/src/repair-layers.ts +553 -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 +123 -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-retired.json +52 -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 +53 -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 +44 -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-timing.json +336 -0
- package/test-vectors/catalog-validation.json +767 -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,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sink-side concealment helpers for the keyframe-protected FEC policy.
|
|
3
|
+
*
|
|
4
|
+
* Concealment is hold-last-good-frame. No bitstream is ever synthesised:
|
|
5
|
+
* a generated "fill" picture is codec-specific, resets the reference chain
|
|
6
|
+
* (an IDR) or is not a picture at all, and every later delta would decode
|
|
7
|
+
* against it until the next RAP. Instead the sink keeps presenting the last
|
|
8
|
+
* good frame, sized exactly from authored timestamps, until media resumes.
|
|
9
|
+
*
|
|
10
|
+
* - {@link videoConcealModeForCodec} says whether a video decoder can be fed
|
|
11
|
+
* straight through a delta gap (H.264 conceals missing references itself)
|
|
12
|
+
* or must hold until the next RAP.
|
|
13
|
+
* - {@link HoldLastTimeline} gives MSE sinks gapless per-sample durations.
|
|
14
|
+
* - {@link AudioGapConcealer} sizes audio concealment exactly: repeat the last
|
|
15
|
+
* good access unit (MSE) or insert PCM silence (WebCodecs).
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { FrameGapDecision } from './block-policy.js'
|
|
19
|
+
|
|
20
|
+
// ─── Video conceal mode ─────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* `feed-through`: keep feeding deltas after a delta-only gap; the decoder
|
|
24
|
+
* conceals missing references and the canvas keeps the last frame.
|
|
25
|
+
* `hold-to-rap`: drop non-RAP frames until the next RAP (no queue flush, no
|
|
26
|
+
* A/V sync reset).
|
|
27
|
+
*/
|
|
28
|
+
export type VideoConcealMode = 'feed-through' | 'hold-to-rap'
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* AVC decoders conceal a missing reference and resynchronise on their own;
|
|
32
|
+
* HEVC, AV1 and VP9 decoders error or freeze on a broken reference chain.
|
|
33
|
+
* Any codec not known to conceal is held to the next RAP (fail-closed).
|
|
34
|
+
*/
|
|
35
|
+
export function videoConcealModeForCodec(codec: string): VideoConcealMode {
|
|
36
|
+
const lower = codec.toLowerCase()
|
|
37
|
+
if (lower.startsWith('avc1') || lower.startsWith('avc3')) return 'feed-through'
|
|
38
|
+
return 'hold-to-rap'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ─── HoldLastTimeline ───────────────────────────────────────────────
|
|
42
|
+
|
|
43
|
+
/** One video sample in its media timescale. */
|
|
44
|
+
export interface TimelineSample<T> {
|
|
45
|
+
readonly payload: T
|
|
46
|
+
readonly dts: bigint
|
|
47
|
+
readonly pts: bigint
|
|
48
|
+
/** Authored duration in media ticks. */
|
|
49
|
+
readonly duration: number
|
|
50
|
+
/** Codec-aware RAP. */
|
|
51
|
+
readonly keyframe: boolean
|
|
52
|
+
readonly mpu?: number
|
|
53
|
+
/** Decision attached by libmmt to the first frame released after a gap. */
|
|
54
|
+
readonly gapBefore?: FrameGapDecision
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** A sample ready to append, with an explicit per-sample duration. */
|
|
58
|
+
export interface TimelineEmit<T> {
|
|
59
|
+
readonly payload: T
|
|
60
|
+
readonly dts: bigint
|
|
61
|
+
readonly pts: bigint
|
|
62
|
+
readonly duration: number
|
|
63
|
+
readonly keyframe: boolean
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface HoldLastTimelineOptions {
|
|
67
|
+
readonly concealMode: VideoConcealMode
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface HoldLastTimelineStats {
|
|
71
|
+
/** Non-RAP frames dropped while waiting for a RAP. */
|
|
72
|
+
droppedFrames: number
|
|
73
|
+
/** Held frames whose duration was extended over a gap. */
|
|
74
|
+
extendedHolds: number
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const U32_MAX = 0xffff_ffffn
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Holds one video sample back so its duration can run to the next emitted
|
|
81
|
+
* sample's dts. That costs exactly one frame of MSE latency (1000/framerate
|
|
82
|
+
* ms, from the catalog) and buys a gapless hold-last without synthesising a
|
|
83
|
+
* bitstream: a gap simply lengthens the last good frame.
|
|
84
|
+
*
|
|
85
|
+
* On a stall, or on any conceal under `hold-to-rap` except a RAP arriving
|
|
86
|
+
* right after the gap, frames are dropped until the next RAP and the held
|
|
87
|
+
* frame stays held until that RAP arrives, then runs exactly to its dts. The
|
|
88
|
+
* element waits on the held frame for the length of the outage, but the
|
|
89
|
+
* buffer never gets a hole, however many RAPs the outage took. Once the
|
|
90
|
+
* stream shows composition offsets (dts ≠ pts), samples pass straight
|
|
91
|
+
* through with their authored durations and MSE starves until the RAP is
|
|
92
|
+
* appended — the one documented case where the element also waits on audio.
|
|
93
|
+
*/
|
|
94
|
+
export class HoldLastTimeline<T> {
|
|
95
|
+
readonly #concealMode: VideoConcealMode
|
|
96
|
+
#held: TimelineSample<T> | null = null
|
|
97
|
+
#dropping = false
|
|
98
|
+
#compositionOffsets = false
|
|
99
|
+
readonly #stats: HoldLastTimelineStats = { droppedFrames: 0, extendedHolds: 0 }
|
|
100
|
+
|
|
101
|
+
constructor(options: HoldLastTimelineOptions) {
|
|
102
|
+
this.#concealMode = options.concealMode
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
get stats(): Readonly<HoldLastTimelineStats> {
|
|
106
|
+
return { ...this.#stats }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
push(sample: TimelineSample<T>): TimelineEmit<T>[] {
|
|
110
|
+
if (sample.dts !== sample.pts) this.#compositionOffsets = true
|
|
111
|
+
|
|
112
|
+
if (this.#dropping) {
|
|
113
|
+
if (!sample.keyframe) {
|
|
114
|
+
this.#stats.droppedFrames++
|
|
115
|
+
return []
|
|
116
|
+
}
|
|
117
|
+
this.#dropping = false
|
|
118
|
+
return this.#accept(sample)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (this.#dropsUntilRap(sample)) {
|
|
122
|
+
this.#dropping = true
|
|
123
|
+
this.#stats.droppedFrames++
|
|
124
|
+
// The held frame stays held: the RAP's #accept sizes it exactly.
|
|
125
|
+
return this.#compositionOffsets ? this.#releaseHeld() : []
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return this.#accept(sample)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Release the held sample with its authored duration (end of stream). */
|
|
132
|
+
flush(): TimelineEmit<T>[] {
|
|
133
|
+
return this.#releaseHeld()
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Drop all state for a new epoch. */
|
|
137
|
+
reset(): void {
|
|
138
|
+
this.#held = null
|
|
139
|
+
this.#dropping = false
|
|
140
|
+
this.#compositionOffsets = false
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
#accept(sample: TimelineSample<T>): TimelineEmit<T>[] {
|
|
144
|
+
if (this.#compositionOffsets) {
|
|
145
|
+
const out = this.#releaseHeld()
|
|
146
|
+
out.push(this.#emit(sample, sample.duration))
|
|
147
|
+
return out
|
|
148
|
+
}
|
|
149
|
+
const out: TimelineEmit<T>[] = []
|
|
150
|
+
const held = this.#held
|
|
151
|
+
if (held) out.push(this.#emit(held, this.#durationTo(held, sample.dts)))
|
|
152
|
+
this.#held = sample
|
|
153
|
+
return out
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
#dropsUntilRap(sample: TimelineSample<T>): boolean {
|
|
157
|
+
const gap = sample.gapBefore
|
|
158
|
+
if (!gap || gap.trackKind !== 'video' || sample.keyframe) return false
|
|
159
|
+
if (gap.action === 'stall') return true
|
|
160
|
+
return this.#concealMode === 'hold-to-rap' && gap.reason !== 'rap-next'
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
#durationTo(held: TimelineSample<T>, target: bigint): number {
|
|
164
|
+
if (target <= held.dts) return held.duration
|
|
165
|
+
const span = target - held.dts
|
|
166
|
+
if (span > U32_MAX) return held.duration
|
|
167
|
+
const duration = Number(span)
|
|
168
|
+
if (duration !== held.duration) this.#stats.extendedHolds++
|
|
169
|
+
return duration
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
#releaseHeld(): TimelineEmit<T>[] {
|
|
173
|
+
const held = this.#held
|
|
174
|
+
this.#held = null
|
|
175
|
+
return held ? [this.#emit(held, held.duration)] : []
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
#emit(sample: TimelineSample<T>, duration: number): TimelineEmit<T> {
|
|
179
|
+
return {
|
|
180
|
+
payload: sample.payload,
|
|
181
|
+
dts: sample.dts,
|
|
182
|
+
pts: sample.pts,
|
|
183
|
+
duration,
|
|
184
|
+
keyframe: sample.keyframe,
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ─── AudioGapConcealer ──────────────────────────────────────────────
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* One audio access unit on its track's authored clock: the ISO-BMFF media
|
|
193
|
+
* timescale the `audio-gap` decision was computed in (`decideGap`, from
|
|
194
|
+
* `AuthoredTiming`). An AAC AU is exactly 1024 ticks there. Never pass values
|
|
195
|
+
* rescaled to another timescale: 1024 samples at 48 kHz is 21333.33... µs,
|
|
196
|
+
* which no integer tick count can hold.
|
|
197
|
+
*/
|
|
198
|
+
export interface AudioAccessUnit<T> {
|
|
199
|
+
readonly payload: T
|
|
200
|
+
/** Authored presentation time in media ticks (`AuthoredTiming.presentationTime`). */
|
|
201
|
+
readonly pts: bigint
|
|
202
|
+
/** Authored duration in media ticks (`AuthoredTiming.durationTicks`): a positive safe integer. */
|
|
203
|
+
readonly duration: number
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface AudioGapConcealerStats {
|
|
207
|
+
/**
|
|
208
|
+
* Access units `note()` refused because their duration was not a positive
|
|
209
|
+
* safe integer: not media ticks, so the AU cannot size a gap. The concealer
|
|
210
|
+
* then holds no good AU and the next gap re-anchors. Non-zero means a caller
|
|
211
|
+
* noted a rescaled value (e.g. microseconds) instead of authored ticks.
|
|
212
|
+
*/
|
|
213
|
+
rejectedUnits: number
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export type AudioGapPlan<T> =
|
|
217
|
+
| { readonly kind: 'none' }
|
|
218
|
+
| {
|
|
219
|
+
readonly kind: 'conceal'
|
|
220
|
+
/**
|
|
221
|
+
* MSE: the last good AU repeated into each missing slot. Empty when no
|
|
222
|
+
* good AU has been seen yet; an AAC access unit is not portable across
|
|
223
|
+
* AudioSpecificConfigs, so none is ever synthesised.
|
|
224
|
+
*/
|
|
225
|
+
readonly repeat: AudioAccessUnit<T>[]
|
|
226
|
+
/** WebCodecs: exactly this much PCM silence, in media ticks. */
|
|
227
|
+
readonly silenceTicks: bigint
|
|
228
|
+
}
|
|
229
|
+
| {
|
|
230
|
+
/** The gap is not a whole number of AUs: re-anchor at `pts`. */
|
|
231
|
+
readonly kind: 're-anchor'
|
|
232
|
+
readonly pts: bigint
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Sizes an audio gap from the libmmt gap decision. Audio never touches video
|
|
237
|
+
* state: every plan is local to the audio sink.
|
|
238
|
+
*/
|
|
239
|
+
export class AudioGapConcealer<T> {
|
|
240
|
+
#last: AudioAccessUnit<T> | null = null
|
|
241
|
+
readonly #stats: AudioGapConcealerStats = { rejectedUnits: 0 }
|
|
242
|
+
|
|
243
|
+
get stats(): Readonly<AudioGapConcealerStats> {
|
|
244
|
+
return { ...this.#stats }
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Record a good access unit as it is emitted. An AU whose duration is not
|
|
249
|
+
* whole media ticks is refused and counted (`stats.rejectedUnits`), and the
|
|
250
|
+
* concealer forgets its previous AU: that one no longer precedes the gap, so
|
|
251
|
+
* sizing from it would misplace every slot. Refusing here keeps `plan()`
|
|
252
|
+
* total, so a bad AU never throws out of the packet path.
|
|
253
|
+
*/
|
|
254
|
+
note(au: AudioAccessUnit<T>): void {
|
|
255
|
+
if (!Number.isSafeInteger(au.duration) || au.duration <= 0) {
|
|
256
|
+
this.#stats.rejectedUnits++
|
|
257
|
+
this.#last = null
|
|
258
|
+
return
|
|
259
|
+
}
|
|
260
|
+
this.#last = au
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
plan(decision: FrameGapDecision | undefined, next: { readonly pts: bigint }): AudioGapPlan<T> {
|
|
264
|
+
if (!decision || decision.trackKind !== 'audio') return { kind: 'none' }
|
|
265
|
+
const missing = decision.missingFrames
|
|
266
|
+
if (
|
|
267
|
+
decision.reason !== 'audio-gap' ||
|
|
268
|
+
missing === null ||
|
|
269
|
+
!Number.isSafeInteger(missing) ||
|
|
270
|
+
missing <= 0
|
|
271
|
+
) {
|
|
272
|
+
return { kind: 're-anchor', pts: next.pts }
|
|
273
|
+
}
|
|
274
|
+
const last = this.#last
|
|
275
|
+
// Exact sizing needs the preceding AU's duration; a sink that has not
|
|
276
|
+
// emitted one yet has nothing to hold and simply starts at the next AU.
|
|
277
|
+
if (last === null) return { kind: 're-anchor', pts: next.pts }
|
|
278
|
+
const duration = BigInt(last.duration)
|
|
279
|
+
const repeat: AudioAccessUnit<T>[] = []
|
|
280
|
+
for (let slot = 1; slot <= missing; slot++) {
|
|
281
|
+
repeat.push({
|
|
282
|
+
payload: last.payload,
|
|
283
|
+
pts: last.pts + BigInt(slot) * duration,
|
|
284
|
+
duration: last.duration,
|
|
285
|
+
})
|
|
286
|
+
}
|
|
287
|
+
return { kind: 'conceal', repeat, silenceTicks: BigInt(missing) * duration }
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
reset(): void {
|
|
291
|
+
this.#last = null
|
|
292
|
+
}
|
|
293
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receiver-measured multicast delivery gap (BLO-35597).
|
|
3
|
+
*
|
|
4
|
+
* The FEC layer gives a block's multicast symbols a late-symbol wait before it
|
|
5
|
+
* declares the block over: the catalog block span plus an allowance for the
|
|
6
|
+
* path's arrival jitter. The catalog can only signal a tolerance it knows in
|
|
7
|
+
* advance (`fec.reorderToleranceMs`); the path the receiver actually sits on
|
|
8
|
+
* is measured here, in-band, from the arrival times of the multicast
|
|
9
|
+
* datagrams themselves.
|
|
10
|
+
*
|
|
11
|
+
* Which statistic, and why not RFC 3550 interarrival jitter
|
|
12
|
+
* ---------------------------------------------------------
|
|
13
|
+
* The wait is an inactivity bound: a block fails when no symbol reaches it for
|
|
14
|
+
* the wait. What it has to outlast is therefore the longest silence the
|
|
15
|
+
* delivery path produces, not the path's average variation.
|
|
16
|
+
*
|
|
17
|
+
* RFC 3550 §6.4.1 `J` is a mean absolute transit-time difference smoothed with
|
|
18
|
+
* gain 1/16. It is the right number for sizing a playout buffer against steady
|
|
19
|
+
* jitter, and the wrong one for a bimodal path. On the path this was measured
|
|
20
|
+
* on (iPhone Safari over Wi-Fi, prod AMT, 2026-09-28, 36,657 datagrams in 57 s)
|
|
21
|
+
* arrivals were either back-to-back (p90 inter-arrival 2 ms) or stalled for
|
|
22
|
+
* one 802.11 power-save beacon interval (102.4 ms; 135 stalls of 50-110 ms,
|
|
23
|
+
* recurring every ~511 ms at the median). Applied to that trace, `J` has a p99
|
|
24
|
+
* of 6 ms: a wait of span + J expires inside every stall, and the stall's
|
|
25
|
+
* symbols then arrive at a block that has already been failed.
|
|
26
|
+
*
|
|
27
|
+
* So the estimator is the largest delivery gap observed over a trailing
|
|
28
|
+
* window: the time between consecutive multicast datagram arrivals, measured
|
|
29
|
+
* on the page thread where the FEC deadlines themselves run (a main-thread or
|
|
30
|
+
* bridge-batching delay is as real to those timers as a radio stall). It is
|
|
31
|
+
* receiver-wide rather than per stream because the stall is a property of the
|
|
32
|
+
* link every stream shares; a quiet stream learns the gap from a busy one.
|
|
33
|
+
*
|
|
34
|
+
* Only a gap that ended in delivery counts. A silence is closed by the first
|
|
35
|
+
* packet after it; if that packet is the in-sequence successor (MMTP
|
|
36
|
+
* packet_sequence_number + 1) of the last one its packet_id delivered, nothing
|
|
37
|
+
* of that flow was lost across the silence: its packets were held and then
|
|
38
|
+
* delivered, which is exactly the lateness a longer wait turns from a failed
|
|
39
|
+
* block into a completed one. If the sequence jumped, the silence was (at
|
|
40
|
+
* least partly) loss -- a tunnel outage, a publisher pause -- and waiting
|
|
41
|
+
* longer would not have delivered anything, so the gap is not taken as
|
|
42
|
+
* jitter.
|
|
43
|
+
*
|
|
44
|
+
* The trailing window is supplied by the caller from the catalog. It must be
|
|
45
|
+
* long enough to contain one recurrence of the stall it has to remember, and
|
|
46
|
+
* nothing here can know that recurrence in advance. The window is also the
|
|
47
|
+
* largest gap reported: a silence longer than the catalog horizon is outside
|
|
48
|
+
* what the estimator models (a backgrounded tab, a long GC), and every bound
|
|
49
|
+
* derived from the wait (block lifetime, terminal retention, the release
|
|
50
|
+
* gate's hold ceiling) must stay a catalog quantity rather than a measurement.
|
|
51
|
+
* `undefined` means no catalog horizon is known: nothing bounds the gap, so
|
|
52
|
+
* none is reported and the catalog tolerance alone applies.
|
|
53
|
+
*/
|
|
54
|
+
export class DeliveryGapEstimator {
|
|
55
|
+
/** Most recent arrival, or undefined before the first one since reset. */
|
|
56
|
+
#lastArrivalMs: number | undefined
|
|
57
|
+
/** Last MMTP packet_sequence_number seen per packet_id. */
|
|
58
|
+
#lastSequence = new Map<number, number>()
|
|
59
|
+
/**
|
|
60
|
+
* Monotonic deque of (arrivalMs, gapMs): gaps strictly decrease from head to
|
|
61
|
+
* tail, so the head is the window maximum. Amortized O(1) per arrival.
|
|
62
|
+
*/
|
|
63
|
+
#times: number[] = []
|
|
64
|
+
#gaps: number[] = []
|
|
65
|
+
#head = 0
|
|
66
|
+
#windowMs: number | undefined
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @param windowMs trailing window in ms, which also caps the reported gap,
|
|
70
|
+
* or undefined when the catalog gives none (no gap is reported).
|
|
71
|
+
*/
|
|
72
|
+
setWindowMs(windowMs: number | undefined): void {
|
|
73
|
+
if (windowMs !== undefined && !(Number.isFinite(windowMs) && windowMs > 0)) {
|
|
74
|
+
throw new Error(
|
|
75
|
+
`[DeliveryGap] window must be a finite positive ms value or undefined (got ${windowMs})`,
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
this.#windowMs = windowMs
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get windowMs(): number | undefined {
|
|
82
|
+
return this.#windowMs
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Record one multicast datagram arrival at receiver time `nowMs`, carrying
|
|
87
|
+
* MMTP `packetSequenceNumber` (32-bit, per packet_id) on `packetId`.
|
|
88
|
+
*/
|
|
89
|
+
noteArrival(nowMs: number, packetId: number, packetSequenceNumber: number): void {
|
|
90
|
+
const last = this.#lastArrivalMs
|
|
91
|
+
const previousSequence = this.#lastSequence.get(packetId)
|
|
92
|
+
this.#lastArrivalMs = nowMs
|
|
93
|
+
this.#lastSequence.set(packetId, packetSequenceNumber)
|
|
94
|
+
if (last === undefined || previousSequence === undefined) return
|
|
95
|
+
if (this.#windowMs === undefined) return
|
|
96
|
+
// MMTP packet_sequence_number is a 32-bit counter that wraps.
|
|
97
|
+
if (((previousSequence + 1) >>> 0) !== (packetSequenceNumber >>> 0)) return
|
|
98
|
+
const gap = nowMs - last
|
|
99
|
+
this.#evict(nowMs)
|
|
100
|
+
// A gap no larger than the current tail can never become the maximum
|
|
101
|
+
// while the tail is still in the window, except as the newest entry.
|
|
102
|
+
while (this.#gaps.length > this.#head && this.#gaps[this.#gaps.length - 1] <= gap) {
|
|
103
|
+
this.#gaps.pop()
|
|
104
|
+
this.#times.pop()
|
|
105
|
+
}
|
|
106
|
+
this.#gaps.push(gap)
|
|
107
|
+
this.#times.push(nowMs)
|
|
108
|
+
this.#compact()
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Largest gap observed within the window ending at `nowMs`, at most the
|
|
113
|
+
* window itself; 0 if none or when no window is set.
|
|
114
|
+
*/
|
|
115
|
+
peakGapMs(nowMs: number): number {
|
|
116
|
+
const windowMs = this.#windowMs
|
|
117
|
+
if (windowMs === undefined) return 0
|
|
118
|
+
this.#evict(nowMs)
|
|
119
|
+
return this.#gaps.length > this.#head ? Math.min(this.#gaps[this.#head], windowMs) : 0
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Forget everything: a new delivery path starts with no measurement. */
|
|
123
|
+
reset(): void {
|
|
124
|
+
this.#lastArrivalMs = undefined
|
|
125
|
+
this.#lastSequence.clear()
|
|
126
|
+
this.#times = []
|
|
127
|
+
this.#gaps = []
|
|
128
|
+
this.#head = 0
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#evict(nowMs: number): void {
|
|
132
|
+
const windowMs = this.#windowMs
|
|
133
|
+
if (windowMs === undefined) return
|
|
134
|
+
while (this.#times.length > this.#head && this.#times[this.#head] < nowMs - windowMs) {
|
|
135
|
+
this.#head++
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
#compact(): void {
|
|
140
|
+
// Drop consumed head slots once they outnumber live ones.
|
|
141
|
+
if (this.#head > 0 && this.#head * 2 >= this.#times.length) {
|
|
142
|
+
this.#times = this.#times.slice(this.#head)
|
|
143
|
+
this.#gaps = this.#gaps.slice(this.#head)
|
|
144
|
+
this.#head = 0
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|