@blockcast/mmt-container 0.1.0 → 0.3.0
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,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FEC Block Processor
|
|
3
|
+
*
|
|
4
|
+
* Splits decoded FEC blocks (K symbols concatenated by WASM RaptorQ decoder)
|
|
5
|
+
* into individual MFU fragments ready for reassembly and decoding.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from moqtail.html's inline processFecBlock() for reuse across
|
|
8
|
+
* both moq-lib and moqtail players. Pure function — no side effects.
|
|
9
|
+
*/
|
|
10
|
+
import { type FecBlockProfile } from "@blockcast/mmt-base";
|
|
11
|
+
/** A single parsed symbol from a decoded FEC block */
|
|
12
|
+
export interface ParsedFecSymbol {
|
|
13
|
+
/** Symbol index within the block (0..K-1) */
|
|
14
|
+
index: number;
|
|
15
|
+
/** MMTP packet ID (1=video, 2=audio) */
|
|
16
|
+
packetId: number;
|
|
17
|
+
/** MMTP packet sequence number (for dedup across delivery paths) */
|
|
18
|
+
packetSequenceNumber: number;
|
|
19
|
+
/** MPU fragment_type: 0=init (ftyp+moov), 2=MFU data */
|
|
20
|
+
fragmentType: number;
|
|
21
|
+
/** MFU fragment ready for MFUReassembler.addFragment() */
|
|
22
|
+
fragment: {
|
|
23
|
+
mpuSequenceNumber: number;
|
|
24
|
+
fragmentationIndicator: number;
|
|
25
|
+
fragmentCounter: number;
|
|
26
|
+
data: Uint8Array;
|
|
27
|
+
timestamp: bigint;
|
|
28
|
+
rapFlag: boolean;
|
|
29
|
+
priority?: number;
|
|
30
|
+
sampleNumber?: number;
|
|
31
|
+
movieFragmentSequenceNumber?: number;
|
|
32
|
+
sampleOffset?: number;
|
|
33
|
+
itemId?: number;
|
|
34
|
+
};
|
|
35
|
+
/** Whether this symbol carries keyframe metadata (RAP or high MFU priority). */
|
|
36
|
+
isKeyframe: boolean;
|
|
37
|
+
/** Raw symbol data (needed for audio decode path) */
|
|
38
|
+
rawSymbol: Uint8Array;
|
|
39
|
+
}
|
|
40
|
+
/** Result of processing a decoded FEC block */
|
|
41
|
+
export interface ProcessFecBlockResult {
|
|
42
|
+
/** All valid parsed symbols for the owning track, sorted by serial packet sequence. */
|
|
43
|
+
symbols: ParsedFecSymbol[];
|
|
44
|
+
/** Count of symbols that failed to parse */
|
|
45
|
+
failedCount: number;
|
|
46
|
+
/** Failure reasons keyed by category */
|
|
47
|
+
failReasons: Record<string, number>;
|
|
48
|
+
}
|
|
49
|
+
/** Options for {@link processFecSymbol}. */
|
|
50
|
+
export interface ProcessFecSymbolOptions {
|
|
51
|
+
/**
|
|
52
|
+
* The stream's catalog `fec.blockProfile`. Required, never defaulted: the
|
|
53
|
+
* two profiles lay a packet into a symbol differently, so the same
|
|
54
|
+
* recovered bytes trim to different packets under each.
|
|
55
|
+
*/
|
|
56
|
+
blockProfile: FecBlockProfile;
|
|
57
|
+
/** Symbol index within the block, used only for diagnostics. */
|
|
58
|
+
index?: number;
|
|
59
|
+
/** Keep only symbols for this packetId. */
|
|
60
|
+
ownerPacketId?: number;
|
|
61
|
+
}
|
|
62
|
+
/** Options for {@link processFecBlock}. */
|
|
63
|
+
export interface ProcessFecBlockOptions {
|
|
64
|
+
/** The stream's catalog `fec.blockProfile`; see {@link ProcessFecSymbolOptions.blockProfile}. */
|
|
65
|
+
blockProfile: FecBlockProfile;
|
|
66
|
+
/** Symbol size T in bytes (catalog `fec.symbolSize`). Required: there is no default T. */
|
|
67
|
+
symbolSize: number;
|
|
68
|
+
/**
|
|
69
|
+
* Source symbols in the decoded block: K under `k-padded-v1`, SSB_length
|
|
70
|
+
* under `iso-ssbg1-v1`. When omitted the block must be a whole number of
|
|
71
|
+
* T-byte symbols and K is that number; a partial symbol throws.
|
|
72
|
+
*/
|
|
73
|
+
k?: number;
|
|
74
|
+
/** Keep only symbols for this packetId. */
|
|
75
|
+
ownerPacketId?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parse one recovered FEC source symbol into an MFU fragment.
|
|
79
|
+
*
|
|
80
|
+
* The symbol is laid out by the stream's block profile: under `k-padded-v1`
|
|
81
|
+
* it is the protected MMTP packet zero-padded to T; under `iso-ssbg1-v1` it is
|
|
82
|
+
* the ssbg_mode1 `u16 length || packet || zero padding`. Either way the
|
|
83
|
+
* recovered packet is then parsed identically. Failures are counted by reason
|
|
84
|
+
* (`bad_ssbg1_length` is the ISO length/padding refusal), never thrown.
|
|
85
|
+
*
|
|
86
|
+
* @throws when `options.blockProfile` is absent or not a known profile token.
|
|
87
|
+
*/
|
|
88
|
+
export declare function processFecSymbol(symbolData: Uint8Array, options: ProcessFecSymbolOptions): ProcessFecBlockResult;
|
|
89
|
+
/**
|
|
90
|
+
* Process a decoded FEC block into individual MFU fragments.
|
|
91
|
+
*
|
|
92
|
+
* The WASM RaptorQ decoder returns every source symbol of the block
|
|
93
|
+
* concatenated (K x T bytes under `k-padded-v1`, SSB_length x T bytes under
|
|
94
|
+
* `iso-ssbg1-v1`). This function splits them apart, recovers each protected
|
|
95
|
+
* packet by the stream's block profile (see {@link processFecSymbol}),
|
|
96
|
+
* extracts the MFU payload via shared extractMFUPayload, and returns
|
|
97
|
+
* structured results sorted for reassembly.
|
|
98
|
+
*
|
|
99
|
+
* @param blockData - Concatenated source symbols from the WASM decoder
|
|
100
|
+
* @param options - Block profile and symbol size T are required; see {@link ProcessFecBlockOptions}
|
|
101
|
+
* @throws when the block profile or symbol size is absent or invalid, when an
|
|
102
|
+
* omitted `k` cannot be read exactly from the block length, or when an
|
|
103
|
+
* `iso-ssbg1-v1` block is not exactly `k` symbols long.
|
|
104
|
+
*/
|
|
105
|
+
export declare function processFecBlock(blockData: Uint8Array, options: ProcessFecBlockOptions): ProcessFecBlockResult;
|
|
106
|
+
//# sourceMappingURL=block-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-processor.d.ts","sourceRoot":"","sources":["../src/block-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAWN,KAAK,eAAe,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC/B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,EAAE;QACT,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gFAAgF;IAChF,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,SAAS,EAAE,UAAU,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACrC,uFAAuF;IACvF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACvC;;;;OAIG;IACH,YAAY,EAAE,eAAe,CAAC;IAC9B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACtC,iGAAiG;IACjG,YAAY,EAAE,eAAe,CAAC;IAC9B,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AA8MD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,uBAAuB,GAC9B,qBAAqB,CA8BvB;AA4CD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC9B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,sBAAsB,GAC7B,qBAAqB,CAgCvB"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FEC Block Processor
|
|
3
|
+
*
|
|
4
|
+
* Splits decoded FEC blocks (K symbols concatenated by WASM RaptorQ decoder)
|
|
5
|
+
* into individual MFU fragments ready for reassembly and decoding.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from moqtail.html's inline processFecBlock() for reuse across
|
|
8
|
+
* both moq-lib and moqtail players. Pure function — no side effects.
|
|
9
|
+
*/
|
|
10
|
+
import { MMTP_EXT_TRAILER_HEADER_SIZE, MMTP_EXT_TYPE_ALTA_AUTH, MMTP_HEADER_SIZE, MPU_HEADER_SIZE, SSBG1_LENGTH_FIELD_BYTES, extractMFUPayload, parseFecBlockProfile, parseMPUHeader, parseMMTPHeader, trimSsbg1SourceSymbol, } from "@blockcast/mmt-base";
|
|
11
|
+
function hasUniformPaddingFrom(data, start) {
|
|
12
|
+
if (start >= data.length)
|
|
13
|
+
return false;
|
|
14
|
+
const pad = data[start];
|
|
15
|
+
if (pad !== 0x00 && pad !== 0xee)
|
|
16
|
+
return false;
|
|
17
|
+
for (let i = start + 1; i < data.length; i++) {
|
|
18
|
+
if (data[i] !== pad)
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
function maybeExtendAltaTrailer(symbolData, packetEnd) {
|
|
24
|
+
if (packetEnd + MMTP_EXT_TRAILER_HEADER_SIZE > symbolData.length)
|
|
25
|
+
return packetEnd;
|
|
26
|
+
const view = new DataView(symbolData.buffer, symbolData.byteOffset + packetEnd, symbolData.byteLength - packetEnd);
|
|
27
|
+
const extType = view.getUint16(0, false);
|
|
28
|
+
if (extType !== MMTP_EXT_TYPE_ALTA_AUTH)
|
|
29
|
+
return packetEnd;
|
|
30
|
+
const extLen = view.getUint16(2, false);
|
|
31
|
+
const trailerEnd = packetEnd + MMTP_EXT_TRAILER_HEADER_SIZE + extLen;
|
|
32
|
+
return trailerEnd <= symbolData.length ? trailerEnd : packetEnd;
|
|
33
|
+
}
|
|
34
|
+
function trimDecodedSourceSymbol(symbolData) {
|
|
35
|
+
if (symbolData.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
36
|
+
return null;
|
|
37
|
+
const headerLength = parseMMTPHeader(symbolData).headerLength;
|
|
38
|
+
if (symbolData.length < headerLength + MPU_HEADER_SIZE)
|
|
39
|
+
return null;
|
|
40
|
+
const payload = symbolData.subarray(headerLength);
|
|
41
|
+
const mpu = parseMPUHeader(payload);
|
|
42
|
+
const trailingMpuHeaderSize = MPU_HEADER_SIZE - 2;
|
|
43
|
+
if (mpu.payloadLength < trailingMpuHeaderSize)
|
|
44
|
+
return null;
|
|
45
|
+
// Recovered source symbols are fixed-width and may be padded, but their wire
|
|
46
|
+
// boundary is still the ISO length-after-field coordinate. ALTA may extend the
|
|
47
|
+
// packet from exactly that point; no MFU-content or alternate-length guessing.
|
|
48
|
+
const declaredEnd = headerLength + 2 + mpu.payloadLength;
|
|
49
|
+
if (declaredEnd > symbolData.length)
|
|
50
|
+
return null;
|
|
51
|
+
const packetEnd = maybeExtendAltaTrailer(symbolData, declaredEnd);
|
|
52
|
+
if (packetEnd < symbolData.length && !hasUniformPaddingFrom(symbolData, packetEnd)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return symbolData.subarray(0, packetEnd);
|
|
56
|
+
}
|
|
57
|
+
function emptyProcessResult() {
|
|
58
|
+
return {
|
|
59
|
+
symbols: [],
|
|
60
|
+
failedCount: 0,
|
|
61
|
+
failReasons: {},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function isMfuKeyframeMetadata(rapFlag, priority) {
|
|
65
|
+
return rapFlag || (priority ?? 0) > 0x80;
|
|
66
|
+
}
|
|
67
|
+
function comparePacketSequence(a, b) {
|
|
68
|
+
// MMTP packet_sequence_number is a wrapping u32. A recovered FEC block spans
|
|
69
|
+
// far less than half the serial-number space, so the signed low 32 bits give
|
|
70
|
+
// its authored order across 0xffff_ffff -> 0. Index makes duplicate sequence
|
|
71
|
+
// values deterministic without relying on Array#sort stability.
|
|
72
|
+
const serialDelta = (a.packetSequenceNumber - b.packetSequenceNumber) | 0;
|
|
73
|
+
return serialDelta !== 0 ? serialDelta : a.index - b.index;
|
|
74
|
+
}
|
|
75
|
+
function resultFromSymbols(parsed, failedCount, failReasons, ownerPacketId) {
|
|
76
|
+
// Sort by wrapping packetSequenceNumber to fix FEC interleaving scramble.
|
|
77
|
+
// Reassembler needs FI=1 before FI=2/3 for the same mpuSequenceNumber.
|
|
78
|
+
parsed.sort(comparePacketSequence);
|
|
79
|
+
// When ownerPacketId is set, only keep symbols matching the track that owns
|
|
80
|
+
// this FEC block. Other packetIds (including 0 from zero-padded recovery slots)
|
|
81
|
+
// are garbage and must be rejected to prevent decoder crashes.
|
|
82
|
+
const symbols = ownerPacketId != null
|
|
83
|
+
? parsed.filter((s) => s.packetId === ownerPacketId)
|
|
84
|
+
: parsed;
|
|
85
|
+
return { symbols, failedCount, failReasons };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Gate one candidate MMTP packet on its fixed header: long enough, version 0,
|
|
89
|
+
* parseable, and an MPU packet. Returns the parsed header, or null after
|
|
90
|
+
* counting why it was refused. Both profiles run this exact gate; they differ
|
|
91
|
+
* only in which bytes they hand it (the symbol under k-padded-v1, the
|
|
92
|
+
* length-delimited packet under iso-ssbg1-v1).
|
|
93
|
+
*/
|
|
94
|
+
function gateMpuHeader(data, bump) {
|
|
95
|
+
if (data.length < MMTP_HEADER_SIZE) {
|
|
96
|
+
bump("too_short");
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (((data[0] >> 6) & 0x03) !== 0) {
|
|
100
|
+
bump("bad_hdr");
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const hdr = parseMMTPHeader(data);
|
|
104
|
+
// Only process MPU packets (packetType=0x00). Skip signaling/repair
|
|
105
|
+
// that may appear in the block due to FEC interleaving.
|
|
106
|
+
if ((hdr.packetType & 0x0f) !== 0x00) {
|
|
107
|
+
bump(`type_0x${hdr.packetType.toString(16)}`);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return hdr;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Parse one exact protected packet (its trimmed bytes) into a ParsedFecSymbol,
|
|
114
|
+
* or null after counting why its MFU payload was refused.
|
|
115
|
+
*/
|
|
116
|
+
function parseProtectedPacket(packetData, hdr, index, bump) {
|
|
117
|
+
// WASM-decoded source symbols retain fecType bits from the original FFmpeg
|
|
118
|
+
// packet (fecType=1 per draft-ramadan-moq-mmt-00 §3.1), but the 4-byte
|
|
119
|
+
// Source FEC Payload ID (ISO 23008-1 §C.5.2) is never part of the protected
|
|
120
|
+
// packet (C.4.2). Tell extractMFUPayload to skip FEC PID subtraction so it
|
|
121
|
+
// does not truncate video data; any ALTA trailer must then consume the
|
|
122
|
+
// exact suffix after the declared payload.
|
|
123
|
+
const extraction = extractMFUPayload(packetData, { skipFecId: true });
|
|
124
|
+
if (!extraction) {
|
|
125
|
+
bump("extract_fail");
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
index,
|
|
130
|
+
packetId: hdr.packetId,
|
|
131
|
+
packetSequenceNumber: hdr.sequenceNumber,
|
|
132
|
+
fragmentType: extraction.fragmentType,
|
|
133
|
+
fragment: {
|
|
134
|
+
mpuSequenceNumber: extraction.mpu.mpuSequenceNumber,
|
|
135
|
+
fragmentationIndicator: extraction.mpu.fragmentationIndicator,
|
|
136
|
+
fragmentCounter: extraction.mpu.fragmentCounter,
|
|
137
|
+
data: extraction.data,
|
|
138
|
+
timestamp: hdr.timestamp,
|
|
139
|
+
rapFlag: hdr.rapFlag,
|
|
140
|
+
priority: extraction.mfuDuHeader?.priority,
|
|
141
|
+
sampleNumber: extraction.mfuDuHeader?.sampleNumber,
|
|
142
|
+
movieFragmentSequenceNumber: extraction.mfuDuHeader?.movieFragmentSequenceNumber,
|
|
143
|
+
sampleOffset: extraction.mfuDuHeader?.offset,
|
|
144
|
+
itemId: extraction.itemId ?? undefined,
|
|
145
|
+
},
|
|
146
|
+
isKeyframe: isMfuKeyframeMetadata(hdr.rapFlag, extraction.mfuDuHeader?.priority),
|
|
147
|
+
rawSymbol: packetData,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* k-padded-v1: the symbol is the protected packet zero-padded to T with no
|
|
152
|
+
* length field, so the packet ends at its ISO-declared MPU boundary (plus an
|
|
153
|
+
* ALTA trailer starting exactly there) and the rest must be uniform padding.
|
|
154
|
+
*/
|
|
155
|
+
function parseKPaddedSymbol(symbolData, index, bump) {
|
|
156
|
+
const hdr = gateMpuHeader(symbolData, bump);
|
|
157
|
+
if (!hdr)
|
|
158
|
+
return null;
|
|
159
|
+
const packetData = trimDecodedSourceSymbol(symbolData);
|
|
160
|
+
if (!packetData) {
|
|
161
|
+
bump("bad_length");
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return parseProtectedPacket(packetData, hdr, index, bump);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* iso-ssbg1-v1 (ISO/IEC 23008-1 C.3.3 ssbg_mode1): the symbol is
|
|
168
|
+
* `u16be(length) || protected packet || 00h padding`. The length field alone
|
|
169
|
+
* delimits the packet; a length past the symbol or non-zero padding means the
|
|
170
|
+
* recovered symbol is not what was sent and is refused, never re-guessed.
|
|
171
|
+
*/
|
|
172
|
+
function parseSsbg1Symbol(symbolData, index, bump) {
|
|
173
|
+
const packetData = trimSsbg1SourceSymbol(symbolData);
|
|
174
|
+
if (!packetData) {
|
|
175
|
+
bump("bad_ssbg1_length");
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const hdr = gateMpuHeader(packetData, bump);
|
|
179
|
+
if (!hdr)
|
|
180
|
+
return null;
|
|
181
|
+
return parseProtectedPacket(packetData, hdr, index, bump);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Parse one recovered FEC source symbol into an MFU fragment.
|
|
185
|
+
*
|
|
186
|
+
* The symbol is laid out by the stream's block profile: under `k-padded-v1`
|
|
187
|
+
* it is the protected MMTP packet zero-padded to T; under `iso-ssbg1-v1` it is
|
|
188
|
+
* the ssbg_mode1 `u16 length || packet || zero padding`. Either way the
|
|
189
|
+
* recovered packet is then parsed identically. Failures are counted by reason
|
|
190
|
+
* (`bad_ssbg1_length` is the ISO length/padding refusal), never thrown.
|
|
191
|
+
*
|
|
192
|
+
* @throws when `options.blockProfile` is absent or not a known profile token.
|
|
193
|
+
*/
|
|
194
|
+
export function processFecSymbol(symbolData, options) {
|
|
195
|
+
const blockProfile = parseFecBlockProfile(options?.blockProfile, "processFecSymbol options.blockProfile");
|
|
196
|
+
const failReasons = {};
|
|
197
|
+
let failedCount = 0;
|
|
198
|
+
const bump = (reason) => {
|
|
199
|
+
failedCount++;
|
|
200
|
+
failReasons[reason] = (failReasons[reason] ?? 0) + 1;
|
|
201
|
+
};
|
|
202
|
+
if (!symbolData || symbolData.length === 0)
|
|
203
|
+
return emptyProcessResult();
|
|
204
|
+
const index = options.index ?? 0;
|
|
205
|
+
let parsed;
|
|
206
|
+
try {
|
|
207
|
+
parsed = blockProfile === "iso-ssbg1-v1"
|
|
208
|
+
? parseSsbg1Symbol(symbolData, index, bump)
|
|
209
|
+
: parseKPaddedSymbol(symbolData, index, bump);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
bump("exception");
|
|
213
|
+
parsed = null;
|
|
214
|
+
}
|
|
215
|
+
return resultFromSymbols(parsed ? [parsed] : [], failedCount, failReasons, options.ownerPacketId);
|
|
216
|
+
}
|
|
217
|
+
function requireSymbolSize(symbolSize, blockProfile) {
|
|
218
|
+
if (symbolSize === undefined) {
|
|
219
|
+
throw new Error("processFecBlock options.symbolSize is required: name the catalog fec.symbolSize (T)");
|
|
220
|
+
}
|
|
221
|
+
if (typeof symbolSize !== "number" || !Number.isSafeInteger(symbolSize) || symbolSize <= 0) {
|
|
222
|
+
throw new Error(`processFecBlock options.symbolSize must be a positive integer (got ${String(symbolSize)})`);
|
|
223
|
+
}
|
|
224
|
+
if (blockProfile === "iso-ssbg1-v1" && symbolSize <= SSBG1_LENGTH_FIELD_BYTES) {
|
|
225
|
+
throw new Error(`processFecBlock options.symbolSize must exceed the ${SSBG1_LENGTH_FIELD_BYTES}-byte ssbg_mode1 length field (got ${symbolSize})`);
|
|
226
|
+
}
|
|
227
|
+
return symbolSize;
|
|
228
|
+
}
|
|
229
|
+
function requireSourceSymbolCount(k, blockLength, symbolSize, blockProfile) {
|
|
230
|
+
if (k === undefined) {
|
|
231
|
+
if (blockLength % symbolSize !== 0) {
|
|
232
|
+
throw new Error(`processFecBlock: ${blockLength} bytes is not a whole number of ${symbolSize}-byte symbols; pass options.k`);
|
|
233
|
+
}
|
|
234
|
+
return blockLength / symbolSize;
|
|
235
|
+
}
|
|
236
|
+
if (!Number.isSafeInteger(k) || k <= 0) {
|
|
237
|
+
throw new Error(`processFecBlock options.k must be a positive integer (got ${k})`);
|
|
238
|
+
}
|
|
239
|
+
// An iso-ssbg1-v1 block is exactly K' = SSB_length symbols of T bytes
|
|
240
|
+
// (C.5.3); any other length is not the block the repair symbols described.
|
|
241
|
+
if (blockProfile === "iso-ssbg1-v1" && blockLength !== k * symbolSize) {
|
|
242
|
+
throw new Error(`processFecBlock: an iso-ssbg1-v1 block of ${k} symbols of ${symbolSize} bytes is ${k * symbolSize} bytes (got ${blockLength})`);
|
|
243
|
+
}
|
|
244
|
+
return k;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Process a decoded FEC block into individual MFU fragments.
|
|
248
|
+
*
|
|
249
|
+
* The WASM RaptorQ decoder returns every source symbol of the block
|
|
250
|
+
* concatenated (K x T bytes under `k-padded-v1`, SSB_length x T bytes under
|
|
251
|
+
* `iso-ssbg1-v1`). This function splits them apart, recovers each protected
|
|
252
|
+
* packet by the stream's block profile (see {@link processFecSymbol}),
|
|
253
|
+
* extracts the MFU payload via shared extractMFUPayload, and returns
|
|
254
|
+
* structured results sorted for reassembly.
|
|
255
|
+
*
|
|
256
|
+
* @param blockData - Concatenated source symbols from the WASM decoder
|
|
257
|
+
* @param options - Block profile and symbol size T are required; see {@link ProcessFecBlockOptions}
|
|
258
|
+
* @throws when the block profile or symbol size is absent or invalid, when an
|
|
259
|
+
* omitted `k` cannot be read exactly from the block length, or when an
|
|
260
|
+
* `iso-ssbg1-v1` block is not exactly `k` symbols long.
|
|
261
|
+
*/
|
|
262
|
+
export function processFecBlock(blockData, options) {
|
|
263
|
+
const blockProfile = parseFecBlockProfile(options?.blockProfile, "processFecBlock options.blockProfile");
|
|
264
|
+
const symbolSize = requireSymbolSize(options.symbolSize, blockProfile);
|
|
265
|
+
if (!blockData || blockData.length === 0)
|
|
266
|
+
return emptyProcessResult();
|
|
267
|
+
const k = requireSourceSymbolCount(options.k, blockData.length, symbolSize, blockProfile);
|
|
268
|
+
const failReasons = {};
|
|
269
|
+
let failedCount = 0;
|
|
270
|
+
const parsed = [];
|
|
271
|
+
for (let i = 0; i < k; i++) {
|
|
272
|
+
const symStart = i * symbolSize;
|
|
273
|
+
if (symStart >= blockData.length)
|
|
274
|
+
break;
|
|
275
|
+
const symEnd = Math.min(symStart + symbolSize, blockData.length);
|
|
276
|
+
const single = processFecSymbol(blockData.subarray(symStart, symEnd), {
|
|
277
|
+
blockProfile,
|
|
278
|
+
index: i,
|
|
279
|
+
});
|
|
280
|
+
for (const [reason, count] of Object.entries(single.failReasons)) {
|
|
281
|
+
failReasons[reason] = (failReasons[reason] ?? 0) + count;
|
|
282
|
+
}
|
|
283
|
+
failedCount += single.failedCount;
|
|
284
|
+
parsed.push(...single.symbols);
|
|
285
|
+
}
|
|
286
|
+
return resultFromSymbols(parsed, failedCount, failReasons, options.ownerPacketId);
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=block-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-processor.js","sourceRoot":"","sources":["../src/block-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CmafFecRecovery — stateful FEC recovery manager for CMAF chunks and LOC frames.
|
|
3
|
+
*
|
|
4
|
+
* Two input paths:
|
|
5
|
+
* 1. feedSourceChunk(sbn, chunk) — intact unicast delivery. Registers symbols with FEC.
|
|
6
|
+
* 2. feedSourceSymbol(sbn, esi, symbol) — individual multicast packet. Collects for recovery.
|
|
7
|
+
* 3. feedRepairSymbol(sbn, esi, symbol) — repair track. Triggers RaptorQ recovery.
|
|
8
|
+
*
|
|
9
|
+
* Returns recovered data when a block completes, null otherwise.
|
|
10
|
+
*/
|
|
11
|
+
/** Minimal decoder interface supplied by the composing container/application. */
|
|
12
|
+
export interface FecDecoder {
|
|
13
|
+
addSourceSymbol(sbn: number, esi: number, symbol: Uint8Array, rawLen?: number): Uint8Array | null;
|
|
14
|
+
addRepairSymbol(sbn: number, esi: number, symbol: Uint8Array): Uint8Array | null;
|
|
15
|
+
getSymbolSize(): number;
|
|
16
|
+
}
|
|
17
|
+
export interface CmafFecRecoveryConfig {
|
|
18
|
+
fecDecoder: FecDecoder;
|
|
19
|
+
symbolSize: number;
|
|
20
|
+
k: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class CmafFecRecovery {
|
|
23
|
+
#private;
|
|
24
|
+
constructor(config: CmafFecRecoveryConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Feed a complete chunk/frame (intact unicast delivery).
|
|
27
|
+
* Splits into K symbols and registers with FEC state.
|
|
28
|
+
* Returns the chunk as-is (pass-through — no recovery needed).
|
|
29
|
+
*/
|
|
30
|
+
feedSourceChunk(sbn: number, chunk: Uint8Array): Uint8Array;
|
|
31
|
+
/**
|
|
32
|
+
* Feed individual source symbol (from multicast packet).
|
|
33
|
+
* Returns recovered chunk if block completes, null otherwise.
|
|
34
|
+
*/
|
|
35
|
+
feedSourceSymbol(sbn: number, esi: number, symbol: Uint8Array): Uint8Array | null;
|
|
36
|
+
/**
|
|
37
|
+
* Feed repair symbol (from repair track).
|
|
38
|
+
* Returns recovered chunk if block completes, null otherwise.
|
|
39
|
+
*/
|
|
40
|
+
feedRepairSymbol(sbn: number, esi: number, symbol: Uint8Array): Uint8Array | null;
|
|
41
|
+
/** Evict old block state to prevent unbounded memory growth. */
|
|
42
|
+
evictBefore(sbn: number): void;
|
|
43
|
+
/** Reset all state. */
|
|
44
|
+
reset(): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=cmaf-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmaf-recovery.d.ts","sourceRoot":"","sources":["../src/cmaf-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,iFAAiF;AACjF,MAAM,WAAW,UAAU;IAC1B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAClG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IACjF,aAAa,IAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;CACV;AAQD,qBAAa,eAAe;;gBAMf,MAAM,EAAE,qBAAqB;IAMzC;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU;IAiB3D;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAcjF;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IA2BjF,gEAAgE;IAChE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B,uBAAuB;IACvB,KAAK,IAAI,IAAI;CAGb"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CmafFecRecovery — stateful FEC recovery manager for CMAF chunks and LOC frames.
|
|
3
|
+
*
|
|
4
|
+
* Two input paths:
|
|
5
|
+
* 1. feedSourceChunk(sbn, chunk) — intact unicast delivery. Registers symbols with FEC.
|
|
6
|
+
* 2. feedSourceSymbol(sbn, esi, symbol) — individual multicast packet. Collects for recovery.
|
|
7
|
+
* 3. feedRepairSymbol(sbn, esi, symbol) — repair track. Triggers RaptorQ recovery.
|
|
8
|
+
*
|
|
9
|
+
* Returns recovered data when a block completes, null otherwise.
|
|
10
|
+
*/
|
|
11
|
+
import { splitToSymbols, recoverFromSymbols } from "./cmaf-symbols.js";
|
|
12
|
+
export class CmafFecRecovery {
|
|
13
|
+
#decoder;
|
|
14
|
+
#symbolSize;
|
|
15
|
+
#k;
|
|
16
|
+
#blocks = new Map();
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.#decoder = config.fecDecoder;
|
|
19
|
+
this.#symbolSize = config.symbolSize;
|
|
20
|
+
this.#k = config.k;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Feed a complete chunk/frame (intact unicast delivery).
|
|
24
|
+
* Splits into K symbols and registers with FEC state.
|
|
25
|
+
* Returns the chunk as-is (pass-through — no recovery needed).
|
|
26
|
+
*/
|
|
27
|
+
feedSourceChunk(sbn, chunk) {
|
|
28
|
+
const symbols = splitToSymbols(chunk, { symbolSize: this.#symbolSize, k: this.#k });
|
|
29
|
+
// Register all symbols with FEC decoder (for cross-block repair)
|
|
30
|
+
for (let esi = 0; esi < symbols.length; esi++) {
|
|
31
|
+
this.#decoder.addSourceSymbol(sbn, esi, symbols[esi], chunk.length);
|
|
32
|
+
}
|
|
33
|
+
this.#blocks.set(sbn, {
|
|
34
|
+
originalLength: chunk.length,
|
|
35
|
+
symbolsReceived: this.#k,
|
|
36
|
+
recovered: true,
|
|
37
|
+
});
|
|
38
|
+
return chunk;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Feed individual source symbol (from multicast packet).
|
|
42
|
+
* Returns recovered chunk if block completes, null otherwise.
|
|
43
|
+
*/
|
|
44
|
+
feedSourceSymbol(sbn, esi, symbol) {
|
|
45
|
+
let block = this.#blocks.get(sbn);
|
|
46
|
+
if (block?.recovered)
|
|
47
|
+
return null; // already recovered
|
|
48
|
+
if (!block) {
|
|
49
|
+
block = { symbolsReceived: 0, recovered: false };
|
|
50
|
+
this.#blocks.set(sbn, block);
|
|
51
|
+
}
|
|
52
|
+
block.symbolsReceived++;
|
|
53
|
+
const decoded = this.#decoder.addSourceSymbol(sbn, esi, symbol);
|
|
54
|
+
return this.#handleDecoded(sbn, decoded);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Feed repair symbol (from repair track).
|
|
58
|
+
* Returns recovered chunk if block completes, null otherwise.
|
|
59
|
+
*/
|
|
60
|
+
feedRepairSymbol(sbn, esi, symbol) {
|
|
61
|
+
const block = this.#blocks.get(sbn);
|
|
62
|
+
if (block?.recovered)
|
|
63
|
+
return null;
|
|
64
|
+
const decoded = this.#decoder.addRepairSymbol(sbn, esi, symbol);
|
|
65
|
+
return this.#handleDecoded(sbn, decoded);
|
|
66
|
+
}
|
|
67
|
+
#handleDecoded(sbn, decoded) {
|
|
68
|
+
if (!decoded || decoded.length === 0)
|
|
69
|
+
return null;
|
|
70
|
+
const block = this.#blocks.get(sbn);
|
|
71
|
+
if (block)
|
|
72
|
+
block.recovered = true;
|
|
73
|
+
// Decoded = K symbols concatenated. Recover original data.
|
|
74
|
+
const symbols = [];
|
|
75
|
+
for (let i = 0; i < this.#k; i++) {
|
|
76
|
+
const start = i * this.#symbolSize;
|
|
77
|
+
const end = start + this.#symbolSize;
|
|
78
|
+
symbols.push(decoded.subarray(start, Math.min(end, decoded.length)));
|
|
79
|
+
}
|
|
80
|
+
// If we know the original length, strip padding
|
|
81
|
+
const originalLength = block?.originalLength ?? decoded.length;
|
|
82
|
+
return recoverFromSymbols(symbols, { originalLength });
|
|
83
|
+
}
|
|
84
|
+
/** Evict old block state to prevent unbounded memory growth. */
|
|
85
|
+
evictBefore(sbn) {
|
|
86
|
+
for (const key of this.#blocks.keys()) {
|
|
87
|
+
if (key < sbn)
|
|
88
|
+
this.#blocks.delete(key);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Reset all state. */
|
|
92
|
+
reset() {
|
|
93
|
+
this.#blocks.clear();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=cmaf-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmaf-recovery.js","sourceRoot":"","sources":["../src/cmaf-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMAF Symbol Splitter — split CMAF chunks into FEC source symbols.
|
|
3
|
+
*
|
|
4
|
+
* Per CARP draft §6.1: "Each chunk is divided into K source symbols of
|
|
5
|
+
* symbolSize bytes." The last symbol is zero-padded if the chunk size
|
|
6
|
+
* isn't evenly divisible.
|
|
7
|
+
*
|
|
8
|
+
* Also used for LOC frames (raw codec bitstream) — same algorithm,
|
|
9
|
+
* no container overhead to account for.
|
|
10
|
+
*
|
|
11
|
+
* Pure functions — no side effects, no state.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Split a byte array (CMAF chunk or LOC frame) into K source symbols.
|
|
15
|
+
* Each symbol is exactly `symbolSize` bytes, zero-padded if needed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function splitToSymbols(data: Uint8Array, config: {
|
|
18
|
+
symbolSize: number;
|
|
19
|
+
k: number;
|
|
20
|
+
}): Uint8Array[];
|
|
21
|
+
/**
|
|
22
|
+
* Recover original data from K source symbols.
|
|
23
|
+
* Strips zero-padding using the known original length.
|
|
24
|
+
*/
|
|
25
|
+
export declare function recoverFromSymbols(symbols: Uint8Array[], config: {
|
|
26
|
+
originalLength: number;
|
|
27
|
+
}): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* Compute K (number of source symbols) for a given data length and symbol size.
|
|
30
|
+
* K = ceil(dataLength / symbolSize)
|
|
31
|
+
*/
|
|
32
|
+
export declare function computeK(dataLength: number, symbolSize: number): number;
|
|
33
|
+
//# sourceMappingURL=cmaf-symbols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmaf-symbols.d.ts","sourceRoot":"","sources":["../src/cmaf-symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,UAAU,EAAE,CAed;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,GAChC,UAAU,CAeZ;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMAF Symbol Splitter — split CMAF chunks into FEC source symbols.
|
|
3
|
+
*
|
|
4
|
+
* Per CARP draft §6.1: "Each chunk is divided into K source symbols of
|
|
5
|
+
* symbolSize bytes." The last symbol is zero-padded if the chunk size
|
|
6
|
+
* isn't evenly divisible.
|
|
7
|
+
*
|
|
8
|
+
* Also used for LOC frames (raw codec bitstream) — same algorithm,
|
|
9
|
+
* no container overhead to account for.
|
|
10
|
+
*
|
|
11
|
+
* Pure functions — no side effects, no state.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Split a byte array (CMAF chunk or LOC frame) into K source symbols.
|
|
15
|
+
* Each symbol is exactly `symbolSize` bytes, zero-padded if needed.
|
|
16
|
+
*/
|
|
17
|
+
export function splitToSymbols(data, config) {
|
|
18
|
+
const { symbolSize, k } = config;
|
|
19
|
+
const symbols = [];
|
|
20
|
+
for (let i = 0; i < k; i++) {
|
|
21
|
+
const start = i * symbolSize;
|
|
22
|
+
const symbol = new Uint8Array(symbolSize); // zero-initialized
|
|
23
|
+
const end = Math.min(start + symbolSize, data.length);
|
|
24
|
+
if (start < data.length) {
|
|
25
|
+
symbol.set(data.subarray(start, end));
|
|
26
|
+
}
|
|
27
|
+
symbols.push(symbol);
|
|
28
|
+
}
|
|
29
|
+
return symbols;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Recover original data from K source symbols.
|
|
33
|
+
* Strips zero-padding using the known original length.
|
|
34
|
+
*/
|
|
35
|
+
export function recoverFromSymbols(symbols, config) {
|
|
36
|
+
const { originalLength } = config;
|
|
37
|
+
const result = new Uint8Array(originalLength);
|
|
38
|
+
let offset = 0;
|
|
39
|
+
for (const sym of symbols) {
|
|
40
|
+
const copyLen = Math.min(sym.length, originalLength - offset);
|
|
41
|
+
if (copyLen > 0) {
|
|
42
|
+
result.set(sym.subarray(0, copyLen), offset);
|
|
43
|
+
}
|
|
44
|
+
offset += sym.length;
|
|
45
|
+
if (offset >= originalLength)
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Compute K (number of source symbols) for a given data length and symbol size.
|
|
52
|
+
* K = ceil(dataLength / symbolSize)
|
|
53
|
+
*/
|
|
54
|
+
export function computeK(dataLength, symbolSize) {
|
|
55
|
+
return Math.ceil(dataLength / symbolSize);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=cmaf-symbols.js.map
|