@blockcast/mmt-container 0.1.0-main.149f78a4adae
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +432 -0
- package/dist/.build-stamp +0 -0
- package/dist/__tests__/test-utils.d.ts +71 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/align.d.ts +148 -0
- package/dist/align.d.ts.map +1 -0
- package/dist/align.js +88 -0
- package/dist/align.js.map +7 -0
- package/dist/audio-init-parser.d.ts +66 -0
- package/dist/audio-init-parser.d.ts.map +1 -0
- package/dist/audio-init-parser.js +118 -0
- package/dist/audio-init-parser.js.map +7 -0
- package/dist/audio-ring-buffer.d.ts +50 -0
- package/dist/audio-ring-buffer.d.ts.map +1 -0
- package/dist/audio-ring-buffer.js +93 -0
- package/dist/audio-ring-buffer.js.map +7 -0
- package/dist/authored-timing.d.ts +32 -0
- package/dist/authored-timing.d.ts.map +1 -0
- package/dist/authored-timing.js +32 -0
- package/dist/authored-timing.js.map +7 -0
- package/dist/browser-runtime.js +17109 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +318 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +549 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +82 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +66 -0
- package/dist/catalog-fec-params.js.map +7 -0
- package/dist/catalog-network-source.d.ts +19 -0
- package/dist/catalog-network-source.d.ts.map +1 -0
- package/dist/catalog-network-source.js +22 -0
- package/dist/catalog-network-source.js.map +7 -0
- package/dist/catalog-validator.d.ts +18 -0
- package/dist/catalog-validator.d.ts.map +1 -0
- package/dist/catalog-validator.js +7747 -0
- package/dist/catalog-validator.js.map +7 -0
- package/dist/cmaf-block-assembler.d.ts +168 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1755 -0
- package/dist/cmaf-block-assembler.js.map +7 -0
- package/dist/cmaf-group-batcher.d.ts +38 -0
- package/dist/cmaf-group-batcher.d.ts.map +1 -0
- package/dist/cmaf-group-batcher.js +195 -0
- package/dist/cmaf-group-batcher.js.map +7 -0
- package/dist/cmcd-producer.d.ts +104 -0
- package/dist/cmcd-producer.d.ts.map +1 -0
- package/dist/cmcd-producer.js +207 -0
- package/dist/cmcd-producer.js.map +7 -0
- package/dist/codec-utils.d.ts +235 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1225 -0
- package/dist/codec-utils.js.map +7 -0
- package/dist/fec-codec.d.ts +32 -0
- package/dist/fec-codec.d.ts.map +1 -0
- package/dist/fec-codec.js +47 -0
- package/dist/fec-codec.js.map +7 -0
- package/dist/fec-manager.d.ts +266 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +1447 -0
- package/dist/fec-manager.js.map +7 -0
- package/dist/fec-starvation-detector.d.ts +59 -0
- package/dist/fec-starvation-detector.d.ts.map +1 -0
- package/dist/fec-starvation-detector.js +75 -0
- package/dist/fec-starvation-detector.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +76 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +603 -0
- package/dist/fec-worker-setup.js.map +7 -0
- package/dist/fmp4-completion.d.ts +30 -0
- package/dist/fmp4-completion.d.ts.map +1 -0
- package/dist/fmp4-completion.js +21 -0
- package/dist/fmp4-completion.js.map +7 -0
- package/dist/fmp4-reader.d.ts +37 -0
- package/dist/fmp4-reader.d.ts.map +1 -0
- package/dist/fmp4-reader.js +100 -0
- package/dist/fmp4-reader.js.map +7 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +330 -0
- package/dist/index.js.map +7 -0
- package/dist/iso-bmff-timing.d.ts +47 -0
- package/dist/iso-bmff-timing.d.ts.map +1 -0
- package/dist/iso-bmff-timing.js +526 -0
- package/dist/iso-bmff-timing.js.map +7 -0
- package/dist/loc.d.ts +68 -0
- package/dist/loc.d.ts.map +1 -0
- package/dist/loc.js +143 -0
- package/dist/loc.js.map +7 -0
- package/dist/manifest-auth-plan.d.ts +30 -0
- package/dist/manifest-auth-plan.d.ts.map +1 -0
- package/dist/manifest-auth-plan.js +1267 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +338 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +802 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +264 -0
- package/dist/mfu-reassembler.d.ts.map +1 -0
- package/dist/mfu-reassembler.js +2668 -0
- package/dist/mfu-reassembler.js.map +7 -0
- package/dist/mfu-reassembly-policy.d.ts +24 -0
- package/dist/mfu-reassembly-policy.d.ts.map +1 -0
- package/dist/mfu-reassembly-policy.js +99 -0
- package/dist/mfu-reassembly-policy.js.map +7 -0
- package/dist/mmtp-container-parser.d.ts +304 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +5378 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +7853 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +96 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +5589 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +383 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +8384 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +166 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +781 -0
- package/dist/mmtp-to-cmaf.js.map +7 -0
- package/dist/multicast-auth-catalog.d.ts +115 -0
- package/dist/multicast-auth-catalog.d.ts.map +1 -0
- package/dist/multicast-auth-catalog.js +202 -0
- package/dist/multicast-auth-catalog.js.map +7 -0
- package/dist/multicast-input.d.ts +107 -0
- package/dist/multicast-input.d.ts.map +1 -0
- package/dist/multicast-input.js +256 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +330 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +11032 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +62 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +338 -0
- package/dist/multicast-transport.js.map +7 -0
- package/dist/multicast-unwrap.d.ts +57 -0
- package/dist/multicast-unwrap.d.ts.map +1 -0
- package/dist/multicast-unwrap.js +384 -0
- package/dist/multicast-unwrap.js.map +7 -0
- package/dist/no-modules.d.ts +9 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +7819 -0
- package/dist/no-modules.js.map +7 -0
- package/dist/phase14-catalog-override.d.ts +126 -0
- package/dist/phase14-catalog-override.d.ts.map +1 -0
- package/dist/phase14-catalog-override.js +155 -0
- package/dist/phase14-catalog-override.js.map +7 -0
- package/dist/repair-fetch.d.ts +58 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +117 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/sample-combiner.d.ts +182 -0
- package/dist/sample-combiner.d.ts.map +1 -0
- package/dist/sample-combiner.js +571 -0
- package/dist/sample-combiner.js.map +7 -0
- package/dist/signaling.d.ts +29 -0
- package/dist/signaling.d.ts.map +1 -0
- package/dist/signaling.js +232 -0
- package/dist/signaling.js.map +7 -0
- package/dist/source-auth.d.ts +2 -0
- package/dist/source-auth.d.ts.map +1 -0
- package/dist/source-auth.js +1220 -0
- package/dist/source-auth.js.map +7 -0
- package/dist/switching-set-alignment.d.ts +61 -0
- package/dist/switching-set-alignment.d.ts.map +1 -0
- package/dist/switching-set-alignment.js +85 -0
- package/dist/switching-set-alignment.js.map +7 -0
- package/dist/timestamp-codec.d.ts +34 -0
- package/dist/timestamp-codec.d.ts.map +1 -0
- package/dist/timestamp-codec.js +456 -0
- package/dist/timestamp-codec.js.map +7 -0
- package/dist/track-pipeline-setup.d.ts +72 -0
- package/dist/track-pipeline-setup.d.ts.map +1 -0
- package/dist/track-pipeline-setup.js +306 -0
- package/dist/track-pipeline-setup.js.map +7 -0
- package/dist/track-pipeline.d.ts +121 -0
- package/dist/track-pipeline.d.ts.map +1 -0
- package/dist/track-pipeline.js +229 -0
- package/dist/track-pipeline.js.map +7 -0
- package/dist/track-session.d.ts +269 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +597 -0
- package/dist/track-session.js.map +7 -0
- package/dist/transport-pool.d.ts +69 -0
- package/dist/transport-pool.d.ts.map +1 -0
- package/dist/transport-pool.js +88 -0
- package/dist/transport-pool.js.map +7 -0
- package/dist/wasm-mfu-reassembler.d.ts +81 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +1915 -0
- package/dist/wasm-mfu-reassembler.js.map +7 -0
- package/dist/wasm-mmtp-container-parser.d.ts +10 -0
- package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
- package/dist/wasm-mmtp-container-parser.js +5635 -0
- package/dist/wasm-mmtp-container-parser.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/README.md +213 -0
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/package.json +59 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
- package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
- package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
- package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
- package/node_modules/@blockcast/mmt-fec/README.md +270 -0
- package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
- package/node_modules/@blockcast/mmt-fec/package.json +79 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
- package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
- package/node_modules/@noble/hashes/LICENSE +21 -0
- package/node_modules/@noble/hashes/README.md +521 -0
- package/node_modules/@noble/hashes/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_assert.js +18 -0
- package/node_modules/@noble/hashes/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_blake.js +50 -0
- package/node_modules/@noble/hashes/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_md.js +162 -0
- package/node_modules/@noble/hashes/_md.js.map +1 -0
- package/node_modules/@noble/hashes/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_u64.js +90 -0
- package/node_modules/@noble/hashes/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/argon2.js +401 -0
- package/node_modules/@noble/hashes/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake1.js +459 -0
- package/node_modules/@noble/hashes/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2.js +420 -0
- package/node_modules/@noble/hashes/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2b.js +14 -0
- package/node_modules/@noble/hashes/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2s.js +24 -0
- package/node_modules/@noble/hashes/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake3.js +255 -0
- package/node_modules/@noble/hashes/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/crypto.js +5 -0
- package/node_modules/@noble/hashes/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.js +18 -0
- package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/eskdf.js +166 -0
- package/node_modules/@noble/hashes/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.js +15 -0
- package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.js +45 -0
- package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.js +155 -0
- package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.js +67 -0
- package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.js +392 -0
- package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.js +452 -0
- package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.js +413 -0
- package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
- package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.js +251 -0
- package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.js +2 -0
- package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
- package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
- package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.js +86 -0
- package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/index.js +33 -0
- package/node_modules/@noble/hashes/esm/index.js.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.js +281 -0
- package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/esm/package.json +10 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
- package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.js +11 -0
- package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.js +375 -0
- package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.js +20 -0
- package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.js +234 -0
- package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.js +26 -0
- package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.js +281 -0
- package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
- package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hkdf.js +88 -0
- package/node_modules/@noble/hashes/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hmac.js +91 -0
- package/node_modules/@noble/hashes/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/index.d.ts +1 -0
- package/node_modules/@noble/hashes/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/index.js +33 -0
- package/node_modules/@noble/hashes/index.js.map +1 -0
- package/node_modules/@noble/hashes/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/legacy.js +287 -0
- package/node_modules/@noble/hashes/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/package.json +266 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/pbkdf2.js +101 -0
- package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.js +16 -0
- package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/scrypt.js +232 -0
- package/node_modules/@noble/hashes/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha1.js +14 -0
- package/node_modules/@noble/hashes/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha2.js +384 -0
- package/node_modules/@noble/hashes/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha256.js +23 -0
- package/node_modules/@noble/hashes/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.js +402 -0
- package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3.js +239 -0
- package/node_modules/@noble/hashes/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha512.js +29 -0
- package/node_modules/@noble/hashes/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/src/_assert.ts +22 -0
- package/node_modules/@noble/hashes/src/_blake.ts +50 -0
- package/node_modules/@noble/hashes/src/_md.ts +176 -0
- package/node_modules/@noble/hashes/src/_u64.ts +91 -0
- package/node_modules/@noble/hashes/src/argon2.ts +497 -0
- package/node_modules/@noble/hashes/src/blake1.ts +534 -0
- package/node_modules/@noble/hashes/src/blake2.ts +486 -0
- package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
- package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
- package/node_modules/@noble/hashes/src/blake3.ts +272 -0
- package/node_modules/@noble/hashes/src/crypto.ts +9 -0
- package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
- package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
- package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
- package/node_modules/@noble/hashes/src/hmac.ts +94 -0
- package/node_modules/@noble/hashes/src/index.ts +31 -0
- package/node_modules/@noble/hashes/src/legacy.ts +293 -0
- package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
- package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
- package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
- package/node_modules/@noble/hashes/src/sha1.ts +10 -0
- package/node_modules/@noble/hashes/src/sha2.ts +402 -0
- package/node_modules/@noble/hashes/src/sha256.ts +24 -0
- package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
- package/node_modules/@noble/hashes/src/sha3.ts +258 -0
- package/node_modules/@noble/hashes/src/sha512.ts +34 -0
- package/node_modules/@noble/hashes/src/utils.ts +395 -0
- package/node_modules/@noble/hashes/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/utils.js +313 -0
- package/node_modules/@noble/hashes/utils.js.map +1 -0
- package/package.json +203 -0
- package/schemas/catalog.schema.json +283 -0
- package/src/align.ts +235 -0
- package/src/audio-init-parser.ts +189 -0
- package/src/audio-ring-buffer.ts +120 -0
- package/src/authored-timing.ts +63 -0
- package/src/carp-catalog.ts +776 -0
- package/src/catalog-fec-params.ts +167 -0
- package/src/catalog-network-source.ts +49 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1058 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +329 -0
- package/src/codec-utils.ts +1539 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +1939 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-worker-setup.ts +177 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +443 -0
- package/src/iso-bmff-timing.ts +688 -0
- package/src/loc.ts +181 -0
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +1185 -0
- package/src/mfu-reassembler.ts +2842 -0
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +1498 -0
- package/src/mmtp-decode-pipeline.ts +315 -0
- package/src/mmtp-router.ts +3027 -0
- package/src/mmtp-to-cmaf.ts +956 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +439 -0
- package/src/multicast-manager.ts +1503 -0
- package/src/multicast-transport.ts +320 -0
- package/src/multicast-unwrap.ts +132 -0
- package/src/no-modules.ts +20 -0
- package/src/phase14-catalog-override.ts +336 -0
- package/src/repair-fetch.ts +217 -0
- package/src/sample-combiner.ts +846 -0
- package/src/signaling.ts +78 -0
- package/src/source-auth.ts +1 -0
- package/src/switching-set-alignment.ts +109 -0
- package/src/timestamp-codec.ts +265 -0
- package/src/track-pipeline-setup.ts +189 -0
- package/src/track-pipeline.ts +332 -0
- package/src/track-session.ts +778 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +372 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +25 -0
- package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
- package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
- package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
- package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
- package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
- package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
- package/test-vectors/catalog/negative/network-source-object.json +25 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
- package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
- package/test-vectors/catalog/negative/track-role-empty.json +16 -0
- package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
- package/test-vectors/catalog/positive/fec-multicast.json +51 -0
- package/test-vectors/catalog/positive/flat-av.json +30 -0
- package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
- package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
- package/test-vectors/catalog/positive/track-role.json +49 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
- package/test-vectors/catalog-multicast-auth-v1.json +26 -0
- package/test-vectors/catalog-validation.json +148 -0
- package/test-vectors/catalog-validator-public-api.mjs +25 -0
- package/test-vectors/generate-source-auth-fixture.mjs +114 -0
- package/test-vectors/source-auth-v1.json +61 -0
- package/test-vectors/subsample-placement-v1.json +230 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
|
+
|
|
10
|
+
// src/track-pipeline.ts
|
|
11
|
+
var AUTO_CHAIN = ["multicast", "amt", "moq"];
|
|
12
|
+
var DEFAULT_POLICY = {
|
|
13
|
+
audio: "crossfade",
|
|
14
|
+
video: "wait"
|
|
15
|
+
};
|
|
16
|
+
var _router, _sourceFactory, _tracks, _capabilities, _onTransportChange, _onQualityChange, _TrackPipeline_instances, resolve_fn, resolveTrack_fn, applyTransport_fn, expandPreferred_fn, isAvailable_fn, defaultPolicy_fn;
|
|
17
|
+
var TrackPipeline = class {
|
|
18
|
+
constructor(router) {
|
|
19
|
+
__privateAdd(this, _TrackPipeline_instances);
|
|
20
|
+
__privateAdd(this, _router);
|
|
21
|
+
__privateAdd(this, _sourceFactory, null);
|
|
22
|
+
__privateAdd(this, _tracks, /* @__PURE__ */ new Map());
|
|
23
|
+
__privateAdd(this, _capabilities, null);
|
|
24
|
+
__privateAdd(this, _onTransportChange, null);
|
|
25
|
+
__privateAdd(this, _onQualityChange, null);
|
|
26
|
+
__privateSet(this, _router, router);
|
|
27
|
+
}
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Configuration
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Register a factory that creates TrackSource instances for a given transport.
|
|
33
|
+
* The factory is called when the pipeline resolves a track to a new transport
|
|
34
|
+
* and needs to wire it into the MediaRouter.
|
|
35
|
+
*
|
|
36
|
+
* The factory returns null if the transport is not available for that track
|
|
37
|
+
* (e.g., no multicast socket for this group).
|
|
38
|
+
*/
|
|
39
|
+
setSourceFactory(factory) {
|
|
40
|
+
__privateSet(this, _sourceFactory, factory);
|
|
41
|
+
}
|
|
42
|
+
/** Listen for transport change events (after setTrackSource is called). */
|
|
43
|
+
onTransportChange(cb) {
|
|
44
|
+
__privateSet(this, _onTransportChange, cb);
|
|
45
|
+
}
|
|
46
|
+
/** Listen for ABR-driven quality change requests. */
|
|
47
|
+
onQualityChange(cb) {
|
|
48
|
+
__privateSet(this, _onQualityChange, cb);
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Preferences + Capabilities
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* Set per-track transport preferences. Triggers resolution if capabilities
|
|
55
|
+
* are already known. Safe to call multiple times (replaces previous prefs).
|
|
56
|
+
*/
|
|
57
|
+
setPreferences(prefs) {
|
|
58
|
+
for (const pref of prefs) {
|
|
59
|
+
const existing = __privateGet(this, _tracks).get(pref.trackName);
|
|
60
|
+
__privateGet(this, _tracks).set(pref.trackName, {
|
|
61
|
+
currentTransport: existing?.currentTransport ?? null,
|
|
62
|
+
preference: pref,
|
|
63
|
+
resolution: existing?.resolution ?? null
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
for (const name of __privateGet(this, _tracks).keys()) {
|
|
67
|
+
if (!prefs.find((p) => p.trackName === name)) {
|
|
68
|
+
__privateGet(this, _router).clearTrackSource(name);
|
|
69
|
+
__privateGet(this, _tracks).delete(name);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (__privateGet(this, _capabilities)) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Update capability snapshot. Triggers re-resolution against current prefs.
|
|
76
|
+
* Called by the IWA's CapabilityObserver, or by the player's extension bridge
|
|
77
|
+
* on capability change events.
|
|
78
|
+
*/
|
|
79
|
+
updateCapabilities(caps) {
|
|
80
|
+
__privateSet(this, _capabilities, caps);
|
|
81
|
+
if (__privateGet(this, _tracks).size > 0) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Force a specific transport for a track (e.g., user override, debug).
|
|
85
|
+
* Skips the resolver; applies immediately.
|
|
86
|
+
*/
|
|
87
|
+
forceTransport(trackName, transport, policy) {
|
|
88
|
+
const state = __privateGet(this, _tracks).get(trackName);
|
|
89
|
+
if (!state) return;
|
|
90
|
+
const effectivePolicy = policy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, state.preference.trackType);
|
|
91
|
+
__privateMethod(this, _TrackPipeline_instances, applyTransport_fn).call(this, trackName, transport, effectivePolicy);
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// ABR Integration
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Notify the pipeline of an ABR quality change. The pipeline adjusts the
|
|
98
|
+
* transport ceiling and may trigger a transport switch if the new quality
|
|
99
|
+
* exceeds the current transport's capacity.
|
|
100
|
+
*/
|
|
101
|
+
notifyQualityChange(trackName, quality) {
|
|
102
|
+
var _a;
|
|
103
|
+
(_a = __privateGet(this, _onQualityChange)) == null ? void 0 : _a.call(this, trackName, quality);
|
|
104
|
+
if (__privateGet(this, _capabilities)) __privateMethod(this, _TrackPipeline_instances, resolve_fn).call(this);
|
|
105
|
+
}
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// Query
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
/** Current transport for a track (null if not yet resolved). */
|
|
110
|
+
getTransport(trackName) {
|
|
111
|
+
return __privateGet(this, _tracks).get(trackName)?.currentTransport ?? null;
|
|
112
|
+
}
|
|
113
|
+
/** Current resolution for a track (null if not yet resolved). */
|
|
114
|
+
getResolution(trackName) {
|
|
115
|
+
return __privateGet(this, _tracks).get(trackName)?.resolution ?? null;
|
|
116
|
+
}
|
|
117
|
+
/** All track names managed by this pipeline. */
|
|
118
|
+
get trackNames() {
|
|
119
|
+
return [...__privateGet(this, _tracks).keys()];
|
|
120
|
+
}
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// Teardown
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
dispose() {
|
|
125
|
+
for (const name of __privateGet(this, _tracks).keys()) {
|
|
126
|
+
__privateGet(this, _router).clearTrackSource(name);
|
|
127
|
+
}
|
|
128
|
+
__privateGet(this, _tracks).clear();
|
|
129
|
+
__privateSet(this, _capabilities, null);
|
|
130
|
+
__privateSet(this, _onTransportChange, null);
|
|
131
|
+
__privateSet(this, _onQualityChange, null);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
_router = new WeakMap();
|
|
135
|
+
_sourceFactory = new WeakMap();
|
|
136
|
+
_tracks = new WeakMap();
|
|
137
|
+
_capabilities = new WeakMap();
|
|
138
|
+
_onTransportChange = new WeakMap();
|
|
139
|
+
_onQualityChange = new WeakMap();
|
|
140
|
+
_TrackPipeline_instances = new WeakSet();
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Internal
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
/** Run the resolver and apply transport changes. */
|
|
145
|
+
resolve_fn = function() {
|
|
146
|
+
const caps = __privateGet(this, _capabilities);
|
|
147
|
+
for (const [trackName, state] of __privateGet(this, _tracks)) {
|
|
148
|
+
const resolution = __privateMethod(this, _TrackPipeline_instances, resolveTrack_fn).call(this, state.preference, caps);
|
|
149
|
+
state.resolution = resolution;
|
|
150
|
+
if (resolution.assignedTransport !== state.currentTransport) {
|
|
151
|
+
__privateMethod(this, _TrackPipeline_instances, applyTransport_fn).call(this, trackName, resolution.assignedTransport, resolution.migrationPolicy);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
/** Pure per-track resolution (inline, no dependency on @blockcast/shared). */
|
|
156
|
+
resolveTrack_fn = function(pref, caps) {
|
|
157
|
+
const chain = __privateMethod(this, _TrackPipeline_instances, expandPreferred_fn).call(this, pref.preferred);
|
|
158
|
+
for (let i = 0; i < chain.length; i++) {
|
|
159
|
+
const transport = chain[i];
|
|
160
|
+
if (!__privateMethod(this, _TrackPipeline_instances, isAvailable_fn).call(this, transport, caps)) continue;
|
|
161
|
+
return {
|
|
162
|
+
trackName: pref.trackName,
|
|
163
|
+
assignedTransport: transport,
|
|
164
|
+
reason: i === 0 ? "preferred" : "fallback",
|
|
165
|
+
migrationPolicy: pref.migrationPolicy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, pref.trackType)
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
trackName: pref.trackName,
|
|
170
|
+
assignedTransport: "moq",
|
|
171
|
+
reason: "capability-limited",
|
|
172
|
+
migrationPolicy: pref.migrationPolicy ?? __privateMethod(this, _TrackPipeline_instances, defaultPolicy_fn).call(this, pref.trackType)
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
/** Apply a resolved transport to a track via MediaRouter. */
|
|
176
|
+
applyTransport_fn = function(trackName, transport, policy) {
|
|
177
|
+
var _a, _b;
|
|
178
|
+
const state = __privateGet(this, _tracks).get(trackName);
|
|
179
|
+
if (!state) return;
|
|
180
|
+
const prev = state.currentTransport;
|
|
181
|
+
if (transport === "moq") {
|
|
182
|
+
__privateGet(this, _router).clearTrackSource(trackName);
|
|
183
|
+
state.currentTransport = "moq";
|
|
184
|
+
if (prev !== "moq") {
|
|
185
|
+
(_a = __privateGet(this, _onTransportChange)) == null ? void 0 : _a.call(this, trackName, prev, "moq", policy);
|
|
186
|
+
}
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!__privateGet(this, _sourceFactory)) {
|
|
190
|
+
console.warn(`[TrackPipeline] No source factory registered; cannot create source for ${trackName}/${transport}`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const source = __privateGet(this, _sourceFactory).call(this, trackName, transport);
|
|
194
|
+
if (!source) {
|
|
195
|
+
console.warn(`[TrackPipeline] Factory returned null for ${trackName}/${transport}; keeping current transport`);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (prev && prev !== "moq") {
|
|
199
|
+
__privateGet(this, _router).clearTrackSource(trackName);
|
|
200
|
+
}
|
|
201
|
+
__privateGet(this, _router).setTrackSource(trackName, source, { policy });
|
|
202
|
+
state.currentTransport = transport;
|
|
203
|
+
(_b = __privateGet(this, _onTransportChange)) == null ? void 0 : _b.call(this, trackName, prev, transport, policy);
|
|
204
|
+
};
|
|
205
|
+
expandPreferred_fn = function(preferred) {
|
|
206
|
+
const out = [];
|
|
207
|
+
for (const t of preferred) {
|
|
208
|
+
if (t === "auto") out.push(...AUTO_CHAIN);
|
|
209
|
+
else out.push(t);
|
|
210
|
+
}
|
|
211
|
+
return out;
|
|
212
|
+
};
|
|
213
|
+
isAvailable_fn = function(transport, caps) {
|
|
214
|
+
switch (transport) {
|
|
215
|
+
case "multicast":
|
|
216
|
+
return caps.nativeMulticast.confirmed;
|
|
217
|
+
case "amt":
|
|
218
|
+
return caps.amt.available;
|
|
219
|
+
case "moq":
|
|
220
|
+
return caps.moqRelay.reachable;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
defaultPolicy_fn = function(trackType) {
|
|
224
|
+
return DEFAULT_POLICY[trackType];
|
|
225
|
+
};
|
|
226
|
+
export {
|
|
227
|
+
TrackPipeline
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=track-pipeline.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/track-pipeline.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * TrackPipeline \u2014 per-track transport promotion + ABR integration.\n *\n * Coordinates transport promotion (MoQ \u2192 multicast/AMT) on a per-track basis.\n * Shared by both web players (moq-lib, moqtail) and the IWA.\n *\n * Responsibilities:\n * 1. Takes per-track transport preferences and current capabilities\n * 2. Runs the pure resolveTransports() function to get assignments\n * 3. Calls MediaRouter.setTrackSource() per-track with the resolved policy\n * 4. Re-resolves when capabilities change (network switch, multicast detected)\n * 5. Integrates ABR quality changes with track-level subscription management\n *\n * NOT responsible for:\n * - Socket management (that's MulticastTransport / NativeMulticastManager)\n * - FEC decode (that's FECManager)\n * - MMTP parsing (that's MmtpRouter)\n * - Binary MoQ\u2194multicast switching (that's MediaRouter.feedMoq/feedMulticast)\n *\n * Usage:\n * const pipeline = new TrackPipeline(mediaRouter);\n * pipeline.setPreferences(prefs);\n * pipeline.updateCapabilities(caps);\n * // pipeline calls mediaRouter.setTrackSource() automatically\n * // listen for transport changes:\n * pipeline.onTransportChange((trackName, from, to, policy) => { ... });\n */\n\nimport type { MediaRouter, TrackSource } from './media-router.js'\nimport type { MigrationPolicy } from './media-router.js'\n\n// Inline transport types to avoid dep on @blockcast/shared at runtime.\n// These MUST stay compatible with @blockcast/shared/transport-settings.\nexport type TrackTransport = 'multicast' | 'amt' | 'moq' | 'auto'\n\nexport interface TrackTransportPreference {\n trackName: string\n /** Actual media type from catalog (never inferred from name). */\n trackType: 'video' | 'audio'\n preferred: TrackTransport[]\n maxLatencyMs?: number\n migrationPolicy?: MigrationPolicy\n}\n\nexport interface TransportCapabilityReport {\n nativeMulticast: { confirmed: boolean; lastPacketAt?: number }\n amt: { available: boolean; relay?: string; rttMs?: number }\n moqRelay: { reachable: boolean; rttMs?: number }\n networkHint?: 'wifi' | 'cellular' | 'ethernet' | 'unknown'\n observedAt: number\n}\n\nexport interface TrackTransportResolution {\n trackName: string\n assignedTransport: TrackTransport\n reason: 'preferred' | 'fallback' | 'capability-limited' | 'latency-gated' | 'abr-override'\n migrationPolicy: MigrationPolicy\n}\n\n/** Callback for transport change events */\ntype TransportChangeCb = (\n trackName: string,\n from: TrackTransport | null,\n to: TrackTransport,\n policy: MigrationPolicy,\n) => void\n\n/** Callback for ABR quality change requests */\ntype QualityChangeCb = (trackName: string, quality: { name: string; bitrate: number }) => void\n\n/** Factory that creates a TrackSource for a given transport + track */\nexport type TrackSourceFactory = (\n trackName: string,\n transport: TrackTransport,\n) => TrackSource | null\n\n// Default auto expansion: multicast \u2192 amt \u2192 moq\nconst AUTO_CHAIN: Exclude<TrackTransport, 'auto'>[] = ['multicast', 'amt', 'moq']\n\n// Default migration policies\nconst DEFAULT_POLICY: Record<string, MigrationPolicy> = {\n audio: 'crossfade',\n video: 'wait',\n}\n\n/** Per-track state tracked by the pipeline */\ninterface TrackState {\n currentTransport: TrackTransport | null\n preference: TrackTransportPreference\n resolution: TrackTransportResolution | null\n}\n\nexport class TrackPipeline {\n #router: MediaRouter\n #sourceFactory: TrackSourceFactory | null = null\n #tracks = new Map<string, TrackState>()\n #capabilities: TransportCapabilityReport | null = null\n #onTransportChange: TransportChangeCb | null = null\n #onQualityChange: QualityChangeCb | null = null\n\n constructor(router: MediaRouter) {\n this.#router = router\n }\n\n // ---------------------------------------------------------------------------\n // Configuration\n // ---------------------------------------------------------------------------\n\n /**\n * Register a factory that creates TrackSource instances for a given transport.\n * The factory is called when the pipeline resolves a track to a new transport\n * and needs to wire it into the MediaRouter.\n *\n * The factory returns null if the transport is not available for that track\n * (e.g., no multicast socket for this group).\n */\n setSourceFactory(factory: TrackSourceFactory): void {\n this.#sourceFactory = factory\n }\n\n /** Listen for transport change events (after setTrackSource is called). */\n onTransportChange(cb: TransportChangeCb): void {\n this.#onTransportChange = cb\n }\n\n /** Listen for ABR-driven quality change requests. */\n onQualityChange(cb: QualityChangeCb): void {\n this.#onQualityChange = cb\n }\n\n // ---------------------------------------------------------------------------\n // Preferences + Capabilities\n // ---------------------------------------------------------------------------\n\n /**\n * Set per-track transport preferences. Triggers resolution if capabilities\n * are already known. Safe to call multiple times (replaces previous prefs).\n */\n setPreferences(prefs: TrackTransportPreference[]): void {\n for (const pref of prefs) {\n const existing = this.#tracks.get(pref.trackName)\n this.#tracks.set(pref.trackName, {\n currentTransport: existing?.currentTransport ?? null,\n preference: pref,\n resolution: existing?.resolution ?? null,\n })\n }\n // Remove tracks no longer in prefs\n for (const name of this.#tracks.keys()) {\n if (!prefs.find(p => p.trackName === name)) {\n this.#router.clearTrackSource(name)\n this.#tracks.delete(name)\n }\n }\n if (this.#capabilities) this.#resolve()\n }\n\n /**\n * Update capability snapshot. Triggers re-resolution against current prefs.\n * Called by the IWA's CapabilityObserver, or by the player's extension bridge\n * on capability change events.\n */\n updateCapabilities(caps: TransportCapabilityReport): void {\n this.#capabilities = caps\n if (this.#tracks.size > 0) this.#resolve()\n }\n\n /**\n * Force a specific transport for a track (e.g., user override, debug).\n * Skips the resolver; applies immediately.\n */\n forceTransport(trackName: string, transport: TrackTransport, policy?: MigrationPolicy): void {\n const state = this.#tracks.get(trackName)\n if (!state) return\n\n const effectivePolicy = policy ?? this.#defaultPolicy(state.preference.trackType)\n this.#applyTransport(trackName, transport, effectivePolicy)\n }\n\n // ---------------------------------------------------------------------------\n // ABR Integration\n // ---------------------------------------------------------------------------\n\n /**\n * Notify the pipeline of an ABR quality change. The pipeline adjusts the\n * transport ceiling and may trigger a transport switch if the new quality\n * exceeds the current transport's capacity.\n */\n notifyQualityChange(trackName: string, quality: { name: string; bitrate: number }): void {\n this.#onQualityChange?.(trackName, quality)\n // Re-resolve: ABR quality may push a track to a different transport\n if (this.#capabilities) this.#resolve()\n }\n\n // ---------------------------------------------------------------------------\n // Query\n // ---------------------------------------------------------------------------\n\n /** Current transport for a track (null if not yet resolved). */\n getTransport(trackName: string): TrackTransport | null {\n return this.#tracks.get(trackName)?.currentTransport ?? null\n }\n\n /** Current resolution for a track (null if not yet resolved). */\n getResolution(trackName: string): TrackTransportResolution | null {\n return this.#tracks.get(trackName)?.resolution ?? null\n }\n\n /** All track names managed by this pipeline. */\n get trackNames(): string[] {\n return [...this.#tracks.keys()]\n }\n\n // ---------------------------------------------------------------------------\n // Teardown\n // ---------------------------------------------------------------------------\n\n dispose(): void {\n for (const name of this.#tracks.keys()) {\n this.#router.clearTrackSource(name)\n }\n this.#tracks.clear()\n this.#capabilities = null\n this.#onTransportChange = null\n this.#onQualityChange = null\n }\n\n // ---------------------------------------------------------------------------\n // Internal\n // ---------------------------------------------------------------------------\n\n /** Run the resolver and apply transport changes. */\n #resolve(): void {\n const caps = this.#capabilities!\n for (const [trackName, state] of this.#tracks) {\n const resolution = this.#resolveTrack(state.preference, caps)\n state.resolution = resolution\n\n if (resolution.assignedTransport !== state.currentTransport) {\n this.#applyTransport(trackName, resolution.assignedTransport, resolution.migrationPolicy)\n }\n }\n }\n\n /** Pure per-track resolution (inline, no dependency on @blockcast/shared). */\n #resolveTrack(\n pref: TrackTransportPreference,\n caps: TransportCapabilityReport,\n ): TrackTransportResolution {\n const chain = this.#expandPreferred(pref.preferred)\n\n for (let i = 0; i < chain.length; i++) {\n const transport = chain[i]!\n if (!this.#isAvailable(transport, caps)) continue\n\n return {\n trackName: pref.trackName,\n assignedTransport: transport,\n reason: i === 0 ? 'preferred' : 'fallback',\n migrationPolicy: pref.migrationPolicy ?? this.#defaultPolicy(pref.trackType),\n }\n }\n\n // Nothing available \u2014 stay on current or fall back to moq\n return {\n trackName: pref.trackName,\n assignedTransport: 'moq',\n reason: 'capability-limited',\n migrationPolicy: pref.migrationPolicy ?? this.#defaultPolicy(pref.trackType),\n }\n }\n\n /** Apply a resolved transport to a track via MediaRouter. */\n #applyTransport(trackName: string, transport: TrackTransport, policy: MigrationPolicy): void {\n const state = this.#tracks.get(trackName)\n if (!state) return\n\n const prev = state.currentTransport\n\n // MoQ is the default binary path \u2014 clear per-track source to fall back\n if (transport === 'moq') {\n this.#router.clearTrackSource(trackName)\n state.currentTransport = 'moq'\n if (prev !== 'moq') {\n this.#onTransportChange?.(trackName, prev, 'moq', policy)\n }\n return\n }\n\n // For multicast/amt: create a TrackSource via the factory\n if (!this.#sourceFactory) {\n console.warn(`[TrackPipeline] No source factory registered; cannot create source for ${trackName}/${transport}`)\n return\n }\n\n const source = this.#sourceFactory(trackName, transport)\n if (!source) {\n console.warn(`[TrackPipeline] Factory returned null for ${trackName}/${transport}; keeping current transport`)\n return\n }\n\n // Clear previous per-track source (if any) before setting new one\n if (prev && prev !== 'moq') {\n this.#router.clearTrackSource(trackName)\n }\n\n this.#router.setTrackSource(trackName, source, { policy })\n state.currentTransport = transport\n this.#onTransportChange?.(trackName, prev, transport, policy)\n }\n\n #expandPreferred(preferred: TrackTransport[]): Exclude<TrackTransport, 'auto'>[] {\n const out: Exclude<TrackTransport, 'auto'>[] = []\n for (const t of preferred) {\n if (t === 'auto') out.push(...AUTO_CHAIN)\n else out.push(t)\n }\n return out\n }\n\n #isAvailable(transport: Exclude<TrackTransport, 'auto'>, caps: TransportCapabilityReport): boolean {\n switch (transport) {\n case 'multicast': return caps.nativeMulticast.confirmed\n case 'amt': return caps.amt.available\n case 'moq': return caps.moqRelay.reachable\n }\n }\n\n #defaultPolicy(trackType: 'video' | 'audio'): MigrationPolicy {\n return DEFAULT_POLICY[trackType]!\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackSession — per-track transport state machine.
|
|
3
|
+
* SessionManager — orchestrates all sessions + TransportPool.
|
|
4
|
+
*
|
|
5
|
+
* Implements Patent Claim 9 (draft-ramadan-moq-fec APPLICATION-1):
|
|
6
|
+
* (a) subscribe unicast
|
|
7
|
+
* (b) simultaneously join multicast
|
|
8
|
+
* (c) render from unicast during join
|
|
9
|
+
* (d) activate multicast on RAP, suppress unicast
|
|
10
|
+
* (e) cross-transport FEC repair during transition
|
|
11
|
+
* (f) hysteresis before switching away from multicast
|
|
12
|
+
* (g) re-subscribe unicast on sustained failure
|
|
13
|
+
*
|
|
14
|
+
* PIM: manages transport state without inspecting packet contents.
|
|
15
|
+
*/
|
|
16
|
+
import { TransportPool, type Subscription, type SubscriptionMode, type TransportPoolOptions } from './transport-pool.js';
|
|
17
|
+
export type TrackState = 'idle' | 'unicast' | 'unicast-fallback' | 'joining' | 'multicast' | 'amt' | 'failing';
|
|
18
|
+
export interface TrackSessionConfig {
|
|
19
|
+
trackName: string;
|
|
20
|
+
trackType: 'video' | 'audio';
|
|
21
|
+
packetId: number;
|
|
22
|
+
/** FEC interleave depth from catalog (ms). Used for hysteresis timer. */
|
|
23
|
+
fecInterleaveMs: number;
|
|
24
|
+
/** FEC K from catalog. Used for audio worklet latency calculation. */
|
|
25
|
+
fecK: number;
|
|
26
|
+
/** FEC repair symbols per block (P). NOT symbol size. */
|
|
27
|
+
fecRepairCount: number;
|
|
28
|
+
/** FEC symbol size in bytes (T). Required for WASM decoder OTI. */
|
|
29
|
+
fecSymbolSize: number;
|
|
30
|
+
/** MoQ repair track name from catalog FEC config. */
|
|
31
|
+
repairTrackName?: string;
|
|
32
|
+
/** Frame samples from initData parsing (audio-init-parser.ts). */
|
|
33
|
+
frameSamples?: number;
|
|
34
|
+
/** Audio sample rate from catalog. */
|
|
35
|
+
sampleRate?: number;
|
|
36
|
+
/** Ordered transport preference: best first. */
|
|
37
|
+
preferredTransports: SubscriptionMode[];
|
|
38
|
+
/** Subscription key for multicast/AMT: "(S,G,port)". */
|
|
39
|
+
multicastKey?: string;
|
|
40
|
+
/** MoQ track name for unicast subscription. */
|
|
41
|
+
moqTrackName?: string;
|
|
42
|
+
/** AMT relay address (if AMT is in preference chain). */
|
|
43
|
+
amtRelay?: string;
|
|
44
|
+
/** MoQ relay URL (for WebTransport subscription). */
|
|
45
|
+
moqRelayUrl?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface SessionManagerCallbacks {
|
|
48
|
+
/** Fired on every transport state transition. */
|
|
49
|
+
onStateChange?(trackName: string, from: TrackState, to: TrackState): void;
|
|
50
|
+
/** Fired to suppress/unsuppress unicast for this track (transport arbitration). */
|
|
51
|
+
onSuppress?(trackName: string, suppressed: boolean): void;
|
|
52
|
+
/**
|
|
53
|
+
* Fired when a track sat in `joining` for SessionManager.takeoverDeadlineMs
|
|
54
|
+
* without a RAP (BLO-9413/D9). The session has already returned to `unicast`
|
|
55
|
+
* (nothing was suppressed, so nothing to restore) — the host should abandon
|
|
56
|
+
* the multicast attempt (e.g. MediaRouter.failbackToMoq()) so the router
|
|
57
|
+
* stops waiting for a keyframe that is never coming.
|
|
58
|
+
*/
|
|
59
|
+
onTakeoverTimeout?(trackName: string): void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* MMTP track events (discriminated union).
|
|
63
|
+
* Each protocol layer defines its own event union — MMTP events cover
|
|
64
|
+
* media resets, latency, and FEC lifecycle.
|
|
65
|
+
*/
|
|
66
|
+
export type MmtpTrackEvent = {
|
|
67
|
+
type: 'reset';
|
|
68
|
+
} | {
|
|
69
|
+
type: 'latency';
|
|
70
|
+
latencyMs: number;
|
|
71
|
+
} | {
|
|
72
|
+
type: 'fec-setup';
|
|
73
|
+
} | {
|
|
74
|
+
type: 'fec-teardown';
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* MMTP application-layer extension of SessionManagerCallbacks.
|
|
78
|
+
* Single onTrackEvent dispatches all MMTP-specific events.
|
|
79
|
+
* PIM consumers use the base SessionManagerCallbacks (no onTrackEvent).
|
|
80
|
+
*
|
|
81
|
+
* IWA can define its own subinterface with its own TrackEvent union
|
|
82
|
+
* (e.g., IwaTrackEvent for socket health, AMT state) using the same pattern.
|
|
83
|
+
*/
|
|
84
|
+
export interface MmtpSessionCallbacks extends SessionManagerCallbacks {
|
|
85
|
+
onTrackEvent?(trackName: string, event: MmtpTrackEvent, config: TrackSessionConfig): void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Loss-hysteresis window covering the signaled interleave window plus jitter.
|
|
89
|
+
*
|
|
90
|
+
* This path lacks media cadence, so it intentionally does not estimate a full
|
|
91
|
+
* source-plus-repair production horizon. FECManager uses
|
|
92
|
+
* computeFecDeliveryWindowMs with media cadence when configuring block
|
|
93
|
+
* inactivity deadlines.
|
|
94
|
+
*
|
|
95
|
+
* `fecK` no longer feeds the math; it is still validated as a catalog
|
|
96
|
+
* well-formedness guard and kept in the signature for positional API compat
|
|
97
|
+
* (removal is a follow-up with the next cross-repo pin bump).
|
|
98
|
+
*/
|
|
99
|
+
export declare function computeFecLossWindowMs(fecInterleaveMs: number, fecK: number, jitterBufferMs?: number): number;
|
|
100
|
+
export interface FecDeliveryWindowConfig {
|
|
101
|
+
interleaveDepthMs: number;
|
|
102
|
+
sourceSymbols: number;
|
|
103
|
+
repairSymbols?: number;
|
|
104
|
+
symbolSize?: number;
|
|
105
|
+
mediaUnitsPerSecond?: number;
|
|
106
|
+
bandwidthBps?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Jitter + one-way-delay + reorder budget in ms (draft-ramadan-moq-fec §9),
|
|
109
|
+
* sourced from the catalog `jitterBufferMs`. Added on top of the max-of-spans
|
|
110
|
+
* core; it is NOT a multiplier. See the margin-policy note in the function.
|
|
111
|
+
*/
|
|
112
|
+
jitterBufferMs?: number;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Catalog-derived silence window that covers interleave geometry plus the time
|
|
116
|
+
* required to produce or serialize a complete source+repair block. The catalog
|
|
117
|
+
* field remains D media units; this function does not feed mapper geometry.
|
|
118
|
+
*/
|
|
119
|
+
export declare function computeFecDeliveryWindowMs(config: FecDeliveryWindowConfig): number;
|
|
120
|
+
/** Convert the shared FEC delivery deadline into an integer media timescale. */
|
|
121
|
+
export declare function computeFecDeliveryWindowMediaUnits(config: FecDeliveryWindowConfig, timestampTimescale: number): number;
|
|
122
|
+
export declare class TrackSession {
|
|
123
|
+
#private;
|
|
124
|
+
readonly config: TrackSessionConfig;
|
|
125
|
+
constructor(config: TrackSessionConfig, manager: SessionManager);
|
|
126
|
+
get state(): TrackState;
|
|
127
|
+
get subscription(): Subscription | null;
|
|
128
|
+
/** True while this session's onSuppress(true) is outstanding (no matching
|
|
129
|
+
* onSuppress(false) yet). Test/assertion surface for failback coherence. */
|
|
130
|
+
get isSuppressed(): boolean;
|
|
131
|
+
/** Current active transport mode, or null if idle. */
|
|
132
|
+
get transport(): SubscriptionMode | null;
|
|
133
|
+
/** Audio worklet latency: max(fecInterleaveMs, frameDurationMs * fecK).
|
|
134
|
+
* Returns undefined if frame duration unknown (no initData). */
|
|
135
|
+
get audioLatencyMs(): number | undefined;
|
|
136
|
+
/** Frame duration in ms, derived from frameSamples + sampleRate. */
|
|
137
|
+
get frameDurationMs(): number | undefined;
|
|
138
|
+
/** idle → unicast: player subscribes to this track. */
|
|
139
|
+
subscribe(): void;
|
|
140
|
+
/** unicast → joining: multicast/AMT capability detected, join in progress. */
|
|
141
|
+
joinStarted(): void;
|
|
142
|
+
/**
|
|
143
|
+
* any non-fallback state → unicast-fallback. Used when the SSM bridge is
|
|
144
|
+
* absent (vanilla Chromium / no extension) and the host falls back to a
|
|
145
|
+
* MoQ unicast subscription per track. Terminal-ish: activateMulticast,
|
|
146
|
+
* failbackAll, and transportFailed are no-ops while in this state.
|
|
147
|
+
*
|
|
148
|
+
* Fires fec-setup so the per-track repair worker spins up — repair packets
|
|
149
|
+
* still flow over the MoQ repair-track subscription, so FEC source+repair
|
|
150
|
+
* can converge as in the multicast path.
|
|
151
|
+
*
|
|
152
|
+
* Audio latency is NOT re-emitted here: subscribe() already fires latency
|
|
153
|
+
* once on the idle → unicast edge, and enterUnicastFallback is only ever
|
|
154
|
+
* reached from a non-idle state (SessionManager skips idle sessions).
|
|
155
|
+
*/
|
|
156
|
+
enterUnicastFallback(): void;
|
|
157
|
+
/**
|
|
158
|
+
* unicast-fallback → unicast. Called when the SSM bridge appears mid-session
|
|
159
|
+
* (extension installed after fallback engaged). Host first aborts the fallback
|
|
160
|
+
* drainers, then transitions sessions back to unicast so the regular
|
|
161
|
+
* multicast/AMT preference chain can take over via joinStarted().
|
|
162
|
+
*/
|
|
163
|
+
exitUnicastFallback(): void;
|
|
164
|
+
/**
|
|
165
|
+
* joining → multicast or amt: RAP received on the joined transport (Claim 9d).
|
|
166
|
+
* Resets audio worklet, then suppresses MoQ.
|
|
167
|
+
*/
|
|
168
|
+
rapReceived(mode: 'multicast' | 'amt'): void;
|
|
169
|
+
/** multicast/amt → failing: loss detected, start hysteresis timer (Claim 9f). */
|
|
170
|
+
lossDetected(): void;
|
|
171
|
+
/** failing → previous primary: loss recovered within hysteresis window. */
|
|
172
|
+
lossRecovered(): void;
|
|
173
|
+
/**
|
|
174
|
+
* Transport failed (AMT relay down, multicast interface gone).
|
|
175
|
+
* Try next transport in preference chain.
|
|
176
|
+
*/
|
|
177
|
+
transportFailed(): void;
|
|
178
|
+
/** Hysteresis expired → failback to next transport (Claim 9g). */
|
|
179
|
+
hysteresisExpired(): void;
|
|
180
|
+
/** → idle: player unsubscribes / tab close / cleanup. */
|
|
181
|
+
unsubscribe(): void;
|
|
182
|
+
/** True when SessionManager.enterUnicastFallback put this track into the
|
|
183
|
+
* host-driven unicast subscription mode. Host can iterate sessions to
|
|
184
|
+
* decide whether to keep its fallback drainer alive across MediaRouter
|
|
185
|
+
* arbitration events. */
|
|
186
|
+
get isUnicastFallback(): boolean;
|
|
187
|
+
dispose(): void;
|
|
188
|
+
}
|
|
189
|
+
export declare class SessionManager {
|
|
190
|
+
readonly pool: TransportPool;
|
|
191
|
+
readonly sessions: Map<string, TrackSession>;
|
|
192
|
+
callbacks: SessionManagerCallbacks | null;
|
|
193
|
+
/**
|
|
194
|
+
* Takeover deadline (BLO-9413/D9): max time a session may sit in `joining`
|
|
195
|
+
* without a RAP before returning to `unicast` and firing onTakeoverTimeout.
|
|
196
|
+
* MoQ is never suppressed during `joining`, so expiry is a silent abandon —
|
|
197
|
+
* playback never glitches. Hosts tune per stream (e.g. GOP length); 0
|
|
198
|
+
* disables.
|
|
199
|
+
*/
|
|
200
|
+
takeoverDeadlineMs: number;
|
|
201
|
+
/** Narrow to MMTP callbacks (onTrackEvent). Safe — optional chaining handles PIM-only consumers. */
|
|
202
|
+
get mmtp(): MmtpSessionCallbacks | null;
|
|
203
|
+
constructor(poolOptions?: TransportPoolOptions);
|
|
204
|
+
/** Add a track session from catalog config. */
|
|
205
|
+
addTrack(config: TrackSessionConfig): TrackSession;
|
|
206
|
+
/** Remove a track session. Releases subscription with grace period. */
|
|
207
|
+
removeTrack(trackName: string): void;
|
|
208
|
+
/**
|
|
209
|
+
* All tracks with multicast RAP → multicast state (atomic).
|
|
210
|
+
* Called when MediaRouter fires onSourceSwitch('multicast').
|
|
211
|
+
* Prevents split-brain between video and audio.
|
|
212
|
+
*
|
|
213
|
+
* A takeover deadline can return a track from `joining` to `unicast` while
|
|
214
|
+
* the multicast socket keeps delivering packets. If a valid RAP arrives
|
|
215
|
+
* later, allow that late-RAP edge to suppress unicast and promote multicast.
|
|
216
|
+
*/
|
|
217
|
+
activateMulticast(): void;
|
|
218
|
+
/**
|
|
219
|
+
* All tracks with AMT RAP → amt state (atomic).
|
|
220
|
+
*/
|
|
221
|
+
activateAmt(): void;
|
|
222
|
+
/**
|
|
223
|
+
* All tracks → unicast (failback, atomic).
|
|
224
|
+
* Called when MulticastManager fires onFailback().
|
|
225
|
+
* unicast-fallback sessions are skipped — the host owns those subscriptions
|
|
226
|
+
* and they must drain uninterrupted across transport-state events.
|
|
227
|
+
*
|
|
228
|
+
* Coherence invariant (BLO-9413): after this returns, every non-fallback
|
|
229
|
+
* session is `unicast` (or `idle`) AND unsuppressed — unsubscribe() unwinds
|
|
230
|
+
* any outstanding suppression regardless of the state it tears down from
|
|
231
|
+
* (`failing` included; see TrackSession.#suppressFired).
|
|
232
|
+
*/
|
|
233
|
+
failbackAll(): void;
|
|
234
|
+
/**
|
|
235
|
+
* All tracks → unicast-fallback (atomic).
|
|
236
|
+
* Called by the host when the multicast gateway is absent and
|
|
237
|
+
* the player will subscribe to source tracks over MoQ unicast and feed
|
|
238
|
+
* packets via MulticastManager.feedUnicastSource() (or manager.router
|
|
239
|
+
* directly). Sessions in this state stay terminal until the host calls
|
|
240
|
+
* unsubscribe() / disposes the SessionManager.
|
|
241
|
+
*/
|
|
242
|
+
enterUnicastFallback(): void;
|
|
243
|
+
/**
|
|
244
|
+
* True if any session is currently in unicast-fallback. Hosts use this to
|
|
245
|
+
* gate `multicastTrack.close()` on failback events — closing the shared
|
|
246
|
+
* broadcast would kill the host's fallback drainers.
|
|
247
|
+
*/
|
|
248
|
+
hasActiveFallback(): boolean;
|
|
249
|
+
/**
|
|
250
|
+
* All fallback tracks → unicast (atomic).
|
|
251
|
+
* Called when the SSM bridge appears mid-session and the host has aborted
|
|
252
|
+
* the fallback drainers. The session re-enters the regular preference chain
|
|
253
|
+
* via joinStarted() (issued by the host immediately after).
|
|
254
|
+
*/
|
|
255
|
+
exitUnicastFallback(): void;
|
|
256
|
+
/** Tab closed — release all subscriptions for this tab (grace period). */
|
|
257
|
+
tabClosed(tabId: string): void;
|
|
258
|
+
/** Bridge WebTransport connection dropped — same as tab close. */
|
|
259
|
+
bridgeDisconnected(): void;
|
|
260
|
+
/**
|
|
261
|
+
* Track selection changed (user or ABR).
|
|
262
|
+
* Old track released (grace period), new track subscribed.
|
|
263
|
+
*/
|
|
264
|
+
trackSelectionChanged(oldTrackName: string, newConfig: TrackSessionConfig): void;
|
|
265
|
+
/** Get a track session by name. */
|
|
266
|
+
getTrack(trackName: string): TrackSession | undefined;
|
|
267
|
+
dispose(): void;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=track-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-session.d.ts","sourceRoot":"","sources":["../src/track-session.ts"],"names":[],"mappings":"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"}
|