@blockcast/mmt-container 0.1.0-main.0399efef1f07
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +432 -0
- package/dist/.build-stamp +0 -0
- package/dist/__tests__/test-utils.d.ts +71 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/align.d.ts +152 -0
- package/dist/align.d.ts.map +1 -0
- package/dist/align.js +88 -0
- package/dist/align.js.map +7 -0
- package/dist/audio-init-parser.d.ts +66 -0
- package/dist/audio-init-parser.d.ts.map +1 -0
- package/dist/audio-init-parser.js +118 -0
- package/dist/audio-init-parser.js.map +7 -0
- package/dist/audio-ring-buffer.d.ts +50 -0
- package/dist/audio-ring-buffer.d.ts.map +1 -0
- package/dist/audio-ring-buffer.js +93 -0
- package/dist/audio-ring-buffer.js.map +7 -0
- package/dist/authored-timing.d.ts +32 -0
- package/dist/authored-timing.d.ts.map +1 -0
- package/dist/authored-timing.js +32 -0
- package/dist/authored-timing.js.map +7 -0
- package/dist/browser-runtime.js +20087 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +318 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +873 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +202 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +568 -0
- package/dist/catalog-fec-params.js.map +7 -0
- package/dist/catalog-network-source.d.ts +19 -0
- package/dist/catalog-network-source.d.ts.map +1 -0
- package/dist/catalog-network-source.js +22 -0
- package/dist/catalog-network-source.js.map +7 -0
- package/dist/catalog-validator.d.ts +18 -0
- package/dist/catalog-validator.d.ts.map +1 -0
- package/dist/catalog-validator.js +7747 -0
- package/dist/catalog-validator.js.map +7 -0
- package/dist/cmaf-block-assembler.d.ts +217 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1769 -0
- package/dist/cmaf-block-assembler.js.map +7 -0
- package/dist/cmaf-group-batcher.d.ts +38 -0
- package/dist/cmaf-group-batcher.d.ts.map +1 -0
- package/dist/cmaf-group-batcher.js +195 -0
- package/dist/cmaf-group-batcher.js.map +7 -0
- package/dist/cmcd-producer.d.ts +104 -0
- package/dist/cmcd-producer.d.ts.map +1 -0
- package/dist/cmcd-producer.js +207 -0
- package/dist/cmcd-producer.js.map +7 -0
- package/dist/codec-utils.d.ts +248 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1268 -0
- package/dist/codec-utils.js.map +7 -0
- package/dist/fec-codec.d.ts +32 -0
- package/dist/fec-codec.d.ts.map +1 -0
- package/dist/fec-codec.js +47 -0
- package/dist/fec-codec.js.map +7 -0
- package/dist/fec-manager.d.ts +307 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +1530 -0
- package/dist/fec-manager.js.map +7 -0
- package/dist/fec-starvation-detector.d.ts +59 -0
- package/dist/fec-starvation-detector.d.ts.map +1 -0
- package/dist/fec-starvation-detector.js +75 -0
- package/dist/fec-starvation-detector.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +88 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +614 -0
- package/dist/fec-worker-setup.js.map +7 -0
- package/dist/fmp4-completion.d.ts +30 -0
- package/dist/fmp4-completion.d.ts.map +1 -0
- package/dist/fmp4-completion.js +21 -0
- package/dist/fmp4-completion.js.map +7 -0
- package/dist/fmp4-reader.d.ts +37 -0
- package/dist/fmp4-reader.d.ts.map +1 -0
- package/dist/fmp4-reader.js +100 -0
- package/dist/fmp4-reader.js.map +7 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +380 -0
- package/dist/index.js.map +7 -0
- package/dist/iso-bmff-timing.d.ts +78 -0
- package/dist/iso-bmff-timing.d.ts.map +1 -0
- package/dist/iso-bmff-timing.js +618 -0
- package/dist/iso-bmff-timing.js.map +7 -0
- package/dist/loc.d.ts +68 -0
- package/dist/loc.d.ts.map +1 -0
- package/dist/loc.js +143 -0
- package/dist/loc.js.map +7 -0
- package/dist/manifest-auth-plan.d.ts +30 -0
- package/dist/manifest-auth-plan.d.ts.map +1 -0
- package/dist/manifest-auth-plan.js +1285 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +251 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +624 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +396 -0
- package/dist/mfu-reassembler.d.ts.map +1 -0
- package/dist/mfu-reassembler.js +3085 -0
- package/dist/mfu-reassembler.js.map +7 -0
- package/dist/mfu-reassembly-policy.d.ts +24 -0
- package/dist/mfu-reassembly-policy.d.ts.map +1 -0
- package/dist/mfu-reassembly-policy.js +99 -0
- package/dist/mfu-reassembly-policy.js.map +7 -0
- package/dist/mmtp-container-parser.d.ts +434 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +6164 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +8999 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +132 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +6413 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +390 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +9242 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +181 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +802 -0
- package/dist/mmtp-to-cmaf.js.map +7 -0
- package/dist/multicast-auth-catalog.d.ts +115 -0
- package/dist/multicast-auth-catalog.d.ts.map +1 -0
- package/dist/multicast-auth-catalog.js +202 -0
- package/dist/multicast-auth-catalog.js.map +7 -0
- package/dist/multicast-input.d.ts +107 -0
- package/dist/multicast-input.d.ts.map +1 -0
- package/dist/multicast-input.js +256 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +369 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +13400 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +61 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +1665 -0
- package/dist/multicast-transport.js.map +7 -0
- package/dist/multicast-unwrap.d.ts +57 -0
- package/dist/multicast-unwrap.d.ts.map +1 -0
- package/dist/multicast-unwrap.js +384 -0
- package/dist/multicast-unwrap.js.map +7 -0
- package/dist/no-modules.d.ts +9 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +8965 -0
- package/dist/no-modules.js.map +7 -0
- package/dist/phase14-catalog-override.d.ts +126 -0
- package/dist/phase14-catalog-override.d.ts.map +1 -0
- package/dist/phase14-catalog-override.js +155 -0
- package/dist/phase14-catalog-override.js.map +7 -0
- package/dist/repair-fetch.d.ts +58 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +127 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/repair-layers.d.ts +141 -0
- package/dist/repair-layers.d.ts.map +1 -0
- package/dist/repair-layers.js +303 -0
- package/dist/repair-layers.js.map +7 -0
- package/dist/sample-combiner.d.ts +212 -0
- package/dist/sample-combiner.d.ts.map +1 -0
- package/dist/sample-combiner.js +616 -0
- package/dist/sample-combiner.js.map +7 -0
- package/dist/signaling.d.ts +29 -0
- package/dist/signaling.d.ts.map +1 -0
- package/dist/signaling.js +232 -0
- package/dist/signaling.js.map +7 -0
- package/dist/source-auth.d.ts +2 -0
- package/dist/source-auth.d.ts.map +1 -0
- package/dist/source-auth.js +1238 -0
- package/dist/source-auth.js.map +7 -0
- package/dist/switching-set-alignment.d.ts +61 -0
- package/dist/switching-set-alignment.d.ts.map +1 -0
- package/dist/switching-set-alignment.js +85 -0
- package/dist/switching-set-alignment.js.map +7 -0
- package/dist/timestamp-codec.d.ts +34 -0
- package/dist/timestamp-codec.d.ts.map +1 -0
- package/dist/timestamp-codec.js +456 -0
- package/dist/timestamp-codec.js.map +7 -0
- package/dist/track-pipeline-setup.d.ts +72 -0
- package/dist/track-pipeline-setup.d.ts.map +1 -0
- package/dist/track-pipeline-setup.js +306 -0
- package/dist/track-pipeline-setup.js.map +7 -0
- package/dist/track-pipeline.d.ts +121 -0
- package/dist/track-pipeline.d.ts.map +1 -0
- package/dist/track-pipeline.js +229 -0
- package/dist/track-pipeline.js.map +7 -0
- package/dist/track-session.d.ts +398 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +767 -0
- package/dist/track-session.js.map +7 -0
- package/dist/transport-pool.d.ts +69 -0
- package/dist/transport-pool.d.ts.map +1 -0
- package/dist/transport-pool.js +88 -0
- package/dist/transport-pool.js.map +7 -0
- package/dist/wasm-mfu-reassembler.d.ts +92 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +2139 -0
- package/dist/wasm-mfu-reassembler.js.map +7 -0
- package/dist/wasm-mmtp-container-parser.d.ts +10 -0
- package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
- package/dist/wasm-mmtp-container-parser.js +6418 -0
- package/dist/wasm-mmtp-container-parser.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/README.md +213 -0
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +87 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +279 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/package.json +59 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +319 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
- package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
- package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
- package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +276 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +645 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +899 -0
- package/node_modules/@blockcast/mmt-fec/README.md +270 -0
- package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +82 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +296 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +172 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +254 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +276 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +645 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +899 -0
- package/node_modules/@blockcast/mmt-fec/package.json +79 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +371 -0
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
- package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +317 -0
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +99 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +492 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +669 -0
- package/node_modules/@noble/hashes/LICENSE +21 -0
- package/node_modules/@noble/hashes/README.md +521 -0
- package/node_modules/@noble/hashes/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_assert.js +18 -0
- package/node_modules/@noble/hashes/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_blake.js +50 -0
- package/node_modules/@noble/hashes/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_md.js +162 -0
- package/node_modules/@noble/hashes/_md.js.map +1 -0
- package/node_modules/@noble/hashes/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_u64.js +90 -0
- package/node_modules/@noble/hashes/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/argon2.js +401 -0
- package/node_modules/@noble/hashes/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake1.js +459 -0
- package/node_modules/@noble/hashes/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2.js +420 -0
- package/node_modules/@noble/hashes/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2b.js +14 -0
- package/node_modules/@noble/hashes/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2s.js +24 -0
- package/node_modules/@noble/hashes/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake3.js +255 -0
- package/node_modules/@noble/hashes/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/crypto.js +5 -0
- package/node_modules/@noble/hashes/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.js +18 -0
- package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/eskdf.js +166 -0
- package/node_modules/@noble/hashes/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.js +15 -0
- package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.js +45 -0
- package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.js +155 -0
- package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.js +67 -0
- package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.js +392 -0
- package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.js +452 -0
- package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.js +413 -0
- package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
- package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.js +251 -0
- package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.js +2 -0
- package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
- package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
- package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.js +86 -0
- package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/index.js +33 -0
- package/node_modules/@noble/hashes/esm/index.js.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.js +281 -0
- package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/esm/package.json +10 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
- package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.js +11 -0
- package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.js +375 -0
- package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.js +20 -0
- package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.js +234 -0
- package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.js +26 -0
- package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.js +281 -0
- package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
- package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hkdf.js +88 -0
- package/node_modules/@noble/hashes/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hmac.js +91 -0
- package/node_modules/@noble/hashes/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/index.d.ts +1 -0
- package/node_modules/@noble/hashes/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/index.js +33 -0
- package/node_modules/@noble/hashes/index.js.map +1 -0
- package/node_modules/@noble/hashes/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/legacy.js +287 -0
- package/node_modules/@noble/hashes/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/package.json +266 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/pbkdf2.js +101 -0
- package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.js +16 -0
- package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/scrypt.js +232 -0
- package/node_modules/@noble/hashes/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha1.js +14 -0
- package/node_modules/@noble/hashes/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha2.js +384 -0
- package/node_modules/@noble/hashes/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha256.js +23 -0
- package/node_modules/@noble/hashes/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.js +402 -0
- package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3.js +239 -0
- package/node_modules/@noble/hashes/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha512.js +29 -0
- package/node_modules/@noble/hashes/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/src/_assert.ts +22 -0
- package/node_modules/@noble/hashes/src/_blake.ts +50 -0
- package/node_modules/@noble/hashes/src/_md.ts +176 -0
- package/node_modules/@noble/hashes/src/_u64.ts +91 -0
- package/node_modules/@noble/hashes/src/argon2.ts +497 -0
- package/node_modules/@noble/hashes/src/blake1.ts +534 -0
- package/node_modules/@noble/hashes/src/blake2.ts +486 -0
- package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
- package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
- package/node_modules/@noble/hashes/src/blake3.ts +272 -0
- package/node_modules/@noble/hashes/src/crypto.ts +9 -0
- package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
- package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
- package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
- package/node_modules/@noble/hashes/src/hmac.ts +94 -0
- package/node_modules/@noble/hashes/src/index.ts +31 -0
- package/node_modules/@noble/hashes/src/legacy.ts +293 -0
- package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
- package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
- package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
- package/node_modules/@noble/hashes/src/sha1.ts +10 -0
- package/node_modules/@noble/hashes/src/sha2.ts +402 -0
- package/node_modules/@noble/hashes/src/sha256.ts +24 -0
- package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
- package/node_modules/@noble/hashes/src/sha3.ts +258 -0
- package/node_modules/@noble/hashes/src/sha512.ts +34 -0
- package/node_modules/@noble/hashes/src/utils.ts +395 -0
- package/node_modules/@noble/hashes/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/utils.js +313 -0
- package/node_modules/@noble/hashes/utils.js.map +1 -0
- package/package.json +203 -0
- package/schemas/catalog.schema.json +360 -0
- package/src/align.ts +239 -0
- package/src/audio-init-parser.ts +189 -0
- package/src/audio-ring-buffer.ts +120 -0
- package/src/authored-timing.ts +63 -0
- package/src/carp-catalog.ts +845 -0
- package/src/catalog-fec-params.ts +535 -0
- package/src/catalog-network-source.ts +49 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1167 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +334 -0
- package/src/codec-utils.ts +1611 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +2081 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-worker-setup.ts +213 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +486 -0
- package/src/iso-bmff-timing.ts +813 -0
- package/src/loc.ts +181 -0
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +795 -0
- package/src/mfu-reassembler.ts +3741 -0
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +1836 -0
- package/src/mmtp-decode-pipeline.ts +389 -0
- package/src/mmtp-router.ts +3136 -0
- package/src/mmtp-to-cmaf.ts +1024 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +439 -0
- package/src/multicast-manager.ts +1720 -0
- package/src/multicast-transport.ts +321 -0
- package/src/multicast-unwrap.ts +132 -0
- package/src/no-modules.ts +20 -0
- package/src/phase14-catalog-override.ts +336 -0
- package/src/repair-fetch.ts +238 -0
- package/src/repair-layers.ts +490 -0
- package/src/sample-combiner.ts +938 -0
- package/src/signaling.ts +78 -0
- package/src/source-auth.ts +1 -0
- package/src/switching-set-alignment.ts +109 -0
- package/src/timestamp-codec.ts +265 -0
- package/src/track-pipeline-setup.ts +189 -0
- package/src/track-pipeline.ts +332 -0
- package/src/track-session.ts +994 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +389 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +40 -0
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +27 -0
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +32 -0
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +30 -0
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +31 -0
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +33 -0
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +23 -0
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +32 -0
- package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
- package/test-vectors/catalog/negative/media-track-repair-layer.json +16 -0
- package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
- package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
- package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
- package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
- package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
- package/test-vectors/catalog/negative/network-source-object.json +25 -0
- package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +23 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
- package/test-vectors/catalog/negative/repair-track-legacy-shape.json +19 -0
- package/test-vectors/catalog/negative/track-role-empty.json +16 -0
- package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
- package/test-vectors/catalog/positive/fec-layered-repair.json +104 -0
- package/test-vectors/catalog/positive/fec-multicast.json +51 -0
- package/test-vectors/catalog/positive/flat-av.json +30 -0
- package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
- package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
- package/test-vectors/catalog/positive/track-role.json +49 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
- package/test-vectors/catalog-multicast-auth-v1.json +26 -0
- package/test-vectors/catalog-validation.json +148 -0
- package/test-vectors/catalog-validator-public-api.mjs +25 -0
- package/test-vectors/generate-source-auth-fixture.mjs +114 -0
- package/test-vectors/source-auth-v1.json +61 -0
- package/test-vectors/source-contiguity-v1.json +131 -0
- package/test-vectors/subsample-placement-v1.json +230 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MmtpDecodePipeline — unified MMTP decode pipeline for MoQ and multicast paths.
|
|
3
|
+
*
|
|
4
|
+
* Wraps MmtpContainerParser with optional FEC client integration and a keyframe gate.
|
|
5
|
+
* Designed for the MoQ decode path (hang-mmt-fec audio/video decoders).
|
|
6
|
+
*
|
|
7
|
+
* Two entry points:
|
|
8
|
+
* - feedMoqObject(): raw MMTP packets from MoQ QUIC streams
|
|
9
|
+
* - feedAssembledFrame(): pre-assembled codec frames from multicast (post-reassembly)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
MmtpContainerParser,
|
|
14
|
+
type FrameMeta,
|
|
15
|
+
type MmtpReorderStats,
|
|
16
|
+
type TrackInfo,
|
|
17
|
+
} from './mmtp-container-parser.js'
|
|
18
|
+
import type {
|
|
19
|
+
MfuReassemblerBackend,
|
|
20
|
+
MmtpDeliveryProvenance,
|
|
21
|
+
} from './mfu-reassembler.js'
|
|
22
|
+
import type { MfuReassemblyPolicy } from './mfu-reassembly-policy.js'
|
|
23
|
+
|
|
24
|
+
/** Minimal FEC client interface for source symbol feeding. */
|
|
25
|
+
export interface PipelineFecClient {
|
|
26
|
+
addSourceSymbol?(ssId: number, data: Uint8Array): Uint8Array | null
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface PipelineConfig {
|
|
30
|
+
codec: string
|
|
31
|
+
/** Catalog video cadence exposed to downstream media stages. */
|
|
32
|
+
framerate?: number
|
|
33
|
+
/** Catalog MMTP group duration exposed to downstream media stages. */
|
|
34
|
+
groupDurationMs?: number
|
|
35
|
+
/** MMTP packet_id for this track — from catalog. When omitted, parser accepts all packetIds. */
|
|
36
|
+
packetId?: number
|
|
37
|
+
description?: Uint8Array
|
|
38
|
+
reorderWindow?: number
|
|
39
|
+
/**
|
|
40
|
+
* MFU reassembly timeout (ms). Caller derives from catalog `fec.interleaveDepthMs`,
|
|
41
|
+
* already in milliseconds (FFmpeg `moqenc_mmt.c` converts depth-in-frames →
|
|
42
|
+
* `depth_ms = fec_depth * (1000/fps)` before set_fec_config). Defaults to
|
|
43
|
+
* 1000ms when omitted. Pass null for reliable, clock-free MoQ streams;
|
|
44
|
+
* incomplete MFUs then remain bounded by the reassembler's memory limit.
|
|
45
|
+
*/
|
|
46
|
+
mfuTimeoutMs?: number | null
|
|
47
|
+
/** Explicit transport policy; preferred over mfuTimeoutMs. */
|
|
48
|
+
reassemblyPolicy?: MfuReassemblyPolicy
|
|
49
|
+
/** Shared Rust/WASM backend for browser playback. */
|
|
50
|
+
reassembler?: MfuReassemblerBackend
|
|
51
|
+
maxBufferedMfus?: number
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type FrameCallback = (data: Uint8Array, meta: FrameMeta) => void
|
|
55
|
+
type InitCallback = (data: Uint8Array, packetId: number) => void
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Snapshot of one pipeline's feed tallies.
|
|
59
|
+
*
|
|
60
|
+
* These counters were console-only, and a player builds one pipeline per track,
|
|
61
|
+
* so two instances logged indistinguishably and the audio receive path could not
|
|
62
|
+
* be read at all from a harness artifact. Expose them as a producer-owned typed
|
|
63
|
+
* counter — logs are diagnostic output, not an acceptance API.
|
|
64
|
+
*/
|
|
65
|
+
export interface MmtpFeedStats {
|
|
66
|
+
/** Track identity, so a consumer can tell two concurrent pipelines apart. */
|
|
67
|
+
trackType: 'video' | 'audio' | null
|
|
68
|
+
codec: string | null
|
|
69
|
+
fedObjects: number
|
|
70
|
+
emitted: number
|
|
71
|
+
gateDropped: number
|
|
72
|
+
/**
|
|
73
|
+
* feed() exit-path tallies, keyed by record kind, with
|
|
74
|
+
* 'null(parse-or-extract-failed)' for the early returns and 'threw' when
|
|
75
|
+
* parseHeader()/feed() raises. Mutually exclusive: the values sum to
|
|
76
|
+
* fedObjects on every path (the throw bucket is tallied in a finally), which
|
|
77
|
+
* is what makes a frozen media bucket beside a still-climbing non-media
|
|
78
|
+
* bucket a readable signal.
|
|
79
|
+
*/
|
|
80
|
+
outcomes: Record<string, number>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export class MmtpDecodePipeline {
|
|
84
|
+
#parser: MmtpContainerParser | null = null
|
|
85
|
+
#fecClient: PipelineFecClient | null = null
|
|
86
|
+
#frameCb: FrameCallback | null = null
|
|
87
|
+
#initCb: InitCallback | null = null
|
|
88
|
+
#needsKeyframe = false
|
|
89
|
+
#codec: string | null = null
|
|
90
|
+
/** Set together with #codec at configure(). Also the diagnostic label: a
|
|
91
|
+
* player builds one pipeline per track, and codec alone does not say which
|
|
92
|
+
* role a line belongs to at a glance. */
|
|
93
|
+
#trackType: 'video' | 'audio' | null = null
|
|
94
|
+
/** Diagnostic counters. The keyframe gate drops silently, so a parser that
|
|
95
|
+
* never marks a frame as a keyframe stalls the whole pipeline with no
|
|
96
|
+
* output anywhere: frames are fed, frames are parsed, and nothing is
|
|
97
|
+
* emitted. Bounded logging only — these gate nothing. */
|
|
98
|
+
#gateDropped = 0
|
|
99
|
+
#gateEmitted = 0
|
|
100
|
+
#fedObjects = 0
|
|
101
|
+
/** Warned-once latch for feeds arriving with no parser. Kept separate from
|
|
102
|
+
* #fedObjects so that counter stays a pure monotonic count. */
|
|
103
|
+
#warnedNoParser = false
|
|
104
|
+
/** Histogram of feed() outcomes. feed() already reports which of its ~7 exit
|
|
105
|
+
* paths a packet took, via its return value — but the call below discards it,
|
|
106
|
+
* so a packet that fails header parse, fails MFU extraction, or accumulates
|
|
107
|
+
* forever as an unreassembled fragment is indistinguishable from one that
|
|
108
|
+
* produced a frame. Tally the kinds instead of guessing. */
|
|
109
|
+
#feedOutcomes = new Map<string, number>()
|
|
110
|
+
|
|
111
|
+
/** Configure the inner parser. Call before feedMoqObject(). */
|
|
112
|
+
configure(config: PipelineConfig): void {
|
|
113
|
+
// Reconfiguration is an ordered boundary: emit frames accepted under the
|
|
114
|
+
// old configuration before replacing its parser and track metadata.
|
|
115
|
+
this.#parser?.flush()
|
|
116
|
+
this.#parser?.dispose()
|
|
117
|
+
|
|
118
|
+
// The diagnostic tallies are per-configuration, matching the boundary above.
|
|
119
|
+
// Carrying them across would blend two codecs into one histogram and let
|
|
120
|
+
// "keyframe gate OPENED after N drops" attribute drops accrued under the
|
|
121
|
+
// previous configuration.
|
|
122
|
+
this.#fedObjects = 0
|
|
123
|
+
this.#gateDropped = 0
|
|
124
|
+
this.#gateEmitted = 0
|
|
125
|
+
this.#feedOutcomes.clear()
|
|
126
|
+
this.#warnedNoParser = false
|
|
127
|
+
|
|
128
|
+
this.#codec = config.codec
|
|
129
|
+
|
|
130
|
+
const trackType: 'video' | 'audio' = isVideoCodec(config.codec) ? 'video' : 'audio'
|
|
131
|
+
this.#trackType = trackType
|
|
132
|
+
const trackInfo: TrackInfo = {
|
|
133
|
+
type: trackType,
|
|
134
|
+
codec: config.codec,
|
|
135
|
+
...(config.framerate !== undefined ? { framerate: config.framerate } : {}),
|
|
136
|
+
...(config.groupDurationMs !== undefined
|
|
137
|
+
? { groupDurationMs: config.groupDurationMs }
|
|
138
|
+
: {}),
|
|
139
|
+
}
|
|
140
|
+
const tracks = new Map<number, TrackInfo>()
|
|
141
|
+
if (config.packetId != null) {
|
|
142
|
+
tracks.set(config.packetId, trackInfo)
|
|
143
|
+
}
|
|
144
|
+
// When packetId omitted: empty tracks map → parser accepts all packets,
|
|
145
|
+
// codec/type derived from content. Caller should provide packetId from catalog.
|
|
146
|
+
|
|
147
|
+
this.#parser = new MmtpContainerParser({
|
|
148
|
+
tracks,
|
|
149
|
+
reorderWindow: config.reorderWindow ?? 0,
|
|
150
|
+
mfuTimeoutMs: config.mfuTimeoutMs,
|
|
151
|
+
reassemblyPolicy: config.reassemblyPolicy,
|
|
152
|
+
reassembler: config.reassembler,
|
|
153
|
+
maxBufferedMfus: config.maxBufferedMfus,
|
|
154
|
+
defaultTrack: trackInfo,
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
this.#parser.onFrame((data, meta) => {
|
|
158
|
+
this.#gatedEmit(data, meta)
|
|
159
|
+
})
|
|
160
|
+
this.#parser.onInit((data, packetId) => {
|
|
161
|
+
this.#initCb?.(data, packetId)
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Inject a FEC client for source symbol feeding on the MoQ path. */
|
|
166
|
+
setFecClient(client: PipelineFecClient): void {
|
|
167
|
+
this.#fecClient = client
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Register frame output callback. */
|
|
171
|
+
onFrame(cb: FrameCallback): void {
|
|
172
|
+
this.#frameCb = cb
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Register init segment callback. */
|
|
176
|
+
onInit(cb: InitCallback): void {
|
|
177
|
+
this.#initCb = cb
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Current shared-parser ordering/drop telemetry. */
|
|
181
|
+
get reorderStats(): Readonly<MmtpReorderStats> | null {
|
|
182
|
+
return this.#parser?.reorderStats ?? null
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Feed tallies for this track. A fresh snapshot per call, not a live view.
|
|
187
|
+
*
|
|
188
|
+
* Unlike reorderStats this never returns null: the counters belong to the
|
|
189
|
+
* pipeline rather than the parser, so they survive dispose(). That is
|
|
190
|
+
* deliberate — a wedged pipeline is usually read after teardown, which is
|
|
191
|
+
* exactly when the parser is already gone.
|
|
192
|
+
*/
|
|
193
|
+
get feedStats(): Readonly<MmtpFeedStats> {
|
|
194
|
+
return {
|
|
195
|
+
trackType: this.#trackType,
|
|
196
|
+
codec: this.#codec,
|
|
197
|
+
fedObjects: this.#fedObjects,
|
|
198
|
+
emitted: this.#gateEmitted,
|
|
199
|
+
gateDropped: this.#gateDropped,
|
|
200
|
+
outcomes: Object.fromEntries(this.#feedOutcomes),
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Identity prefix for diagnostics: one pipeline per track means two
|
|
205
|
+
* instances write to the same console, and unlabelled lines interleave into
|
|
206
|
+
* a single unreadable stream. */
|
|
207
|
+
#tag(): string {
|
|
208
|
+
return `track=${this.#trackType ?? 'unconfigured'} codec=${this.#codec ?? 'none'}`
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Feed a raw MoQ object payload (one MMTP packet per MoQ object).
|
|
213
|
+
* Optionally feeds source symbols to FEC client before parsing.
|
|
214
|
+
*/
|
|
215
|
+
feedMoqObject(packet: Uint8Array): void {
|
|
216
|
+
if (!this.#parser) {
|
|
217
|
+
// Distinguishes "never configured" from "configured but emitting nothing".
|
|
218
|
+
// Silent today: the caller has no way to see that its feed went nowhere.
|
|
219
|
+
//
|
|
220
|
+
// The warned-once flag is deliberately separate from #fedObjects. Folding
|
|
221
|
+
// it in (a -1 sentinel) makes this guard test "no parser AND nothing ever
|
|
222
|
+
// fed", so a feed arriving after dispose() — which nulls #parser but
|
|
223
|
+
// leaves the count — would return here silently. That is the exact
|
|
224
|
+
// silent-drop class this file exists to expose, and teardown racing an
|
|
225
|
+
// in-flight feed is the likelier ordering in a live pipeline than
|
|
226
|
+
// feed-before-configure.
|
|
227
|
+
if (!this.#warnedNoParser) {
|
|
228
|
+
this.#warnedNoParser = true
|
|
229
|
+
console.warn(`[mmtp-pipeline] feedMoqObject called with NO PARSER configured ${this.#tag()} — packet dropped`)
|
|
230
|
+
}
|
|
231
|
+
return
|
|
232
|
+
}
|
|
233
|
+
this.#fedObjects += 1
|
|
234
|
+
if (this.#fedObjects === 1) {
|
|
235
|
+
console.log(`[mmtp-pipeline] first object fed ${this.#tag()} bytes=${packet.length}`)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Pessimistic default: any throw from parseHeader()/feed() below leaves
|
|
239
|
+
// this as 'threw', which the finally tallies. That keeps the histogram
|
|
240
|
+
// exact: sum(outcomes) === fedObjects on every path, including the wedge
|
|
241
|
+
// that is exactly when malformed input arrives and the invariant is most
|
|
242
|
+
// load-bearing.
|
|
243
|
+
let outcomeKind = 'threw'
|
|
244
|
+
try {
|
|
245
|
+
if (this.#fecClient?.addSourceSymbol) {
|
|
246
|
+
const info = this.#parser.parseHeader(packet)
|
|
247
|
+
if (info?.fecPayloadId) {
|
|
248
|
+
this.#fecClient.addSourceSymbol(info.fecPayloadId.ssId, packet)
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const record = this.#parser.feed(packet)
|
|
253
|
+
// `null` means feed() bailed at one of its early returns: header parse,
|
|
254
|
+
// MFU extraction, timedFlag, or a fragmentation-indicator guard.
|
|
255
|
+
outcomeKind = record?.kind ?? 'null(parse-or-extract-failed)'
|
|
256
|
+
} finally {
|
|
257
|
+
const seen = (this.#feedOutcomes.get(outcomeKind) ?? 0) + 1
|
|
258
|
+
this.#feedOutcomes.set(outcomeKind, seen)
|
|
259
|
+
if (seen === 1) {
|
|
260
|
+
console.log(
|
|
261
|
+
`[mmtp-pipeline] feed outcome FIRST '${outcomeKind}' ${this.#tag()} at object #${this.#fedObjects} bytes=${packet.length}`,
|
|
262
|
+
)
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (this.#fedObjects % 200 === 0) {
|
|
266
|
+
const hist = [...this.#feedOutcomes].map(([k, v]) => `${k}=${v}`).join(' ')
|
|
267
|
+
console.log(
|
|
268
|
+
`[mmtp-pipeline] feed histogram ${this.#tag()} @${this.#fedObjects}: ${hist} | emitted=${this.#gateEmitted} gateDropped=${this.#gateDropped}`,
|
|
269
|
+
)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Feed a pre-assembled codec frame (from multicast, post-reassembly).
|
|
275
|
+
* Bypasses MMTP parsing — emits directly through the keyframe gate.
|
|
276
|
+
*
|
|
277
|
+
* Callers MUST supply:
|
|
278
|
+
* - packetSequenceNumber: unique per-AU identifier (typically the MMTP
|
|
279
|
+
* packet_sequence_number of the first fragment). Required for
|
|
280
|
+
* deterministic dedup against duplicates arriving via other paths.
|
|
281
|
+
* - packetId: MMTP packet_id of the track (1=video, 2=audio by convention).
|
|
282
|
+
*/
|
|
283
|
+
feedAssembledFrame(
|
|
284
|
+
data: Uint8Array,
|
|
285
|
+
meta: {
|
|
286
|
+
timestamp: number
|
|
287
|
+
/** Raw MMTP short-NTP header timestamp; timing telemetry only. */
|
|
288
|
+
mmtpTimestamp?: bigint
|
|
289
|
+
keyframe: boolean
|
|
290
|
+
packetSequenceNumber: number
|
|
291
|
+
packetId: number
|
|
292
|
+
sourceDiscontinuity?: boolean
|
|
293
|
+
recovered?: boolean
|
|
294
|
+
/**
|
|
295
|
+
* Whole-frame delivery provenance, when the caller knows it. Absent means
|
|
296
|
+
* the caller never told us — which is NOT the same as 'unknown', a
|
|
297
|
+
* verdict the caller reached and is asserting. Keep them distinguishable.
|
|
298
|
+
*/
|
|
299
|
+
deliveryProvenance?: MmtpDeliveryProvenance
|
|
300
|
+
},
|
|
301
|
+
): void {
|
|
302
|
+
const frameMeta: FrameMeta = {
|
|
303
|
+
timestamp: meta.timestamp,
|
|
304
|
+
...(meta.mmtpTimestamp === undefined
|
|
305
|
+
? {}
|
|
306
|
+
: { mmtpTimestamp: meta.mmtpTimestamp }),
|
|
307
|
+
keyframe: meta.keyframe,
|
|
308
|
+
packetId: meta.packetId,
|
|
309
|
+
// Same derivation as configure(), read from the field it set rather than
|
|
310
|
+
// recomputed. Pre-configure the parser is null and routeFrame below is a
|
|
311
|
+
// no-op, so the fallback is unreachable in practice.
|
|
312
|
+
trackType: this.#trackType ?? 'audio',
|
|
313
|
+
packetSequenceNumber: meta.packetSequenceNumber,
|
|
314
|
+
}
|
|
315
|
+
if (meta.sourceDiscontinuity) frameMeta.sourceDiscontinuity = true
|
|
316
|
+
if (meta.recovered) frameMeta.recovered = true
|
|
317
|
+
// Unlike the boolean flags above, forward this whenever it is present —
|
|
318
|
+
// 'unknown' is a real verdict, not a falsy value to drop.
|
|
319
|
+
if (meta.deliveryProvenance !== undefined)
|
|
320
|
+
frameMeta.deliveryProvenance = meta.deliveryProvenance
|
|
321
|
+
this.#parser?.routeFrame(data, frameMeta)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/** Request keyframe — gates output until a keyframe arrives. */
|
|
325
|
+
requestKeyframe(): void {
|
|
326
|
+
this.#needsKeyframe = true
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/** Emit buffered ordered frames. Finite consumers call this before dispose(). */
|
|
330
|
+
flush(): void {
|
|
331
|
+
this.#parser?.flush()
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/** Clean up the pipeline. Finite inputs pass flush=true at EOS; live
|
|
335
|
+
* cancellation keeps the default drop-only teardown behavior. */
|
|
336
|
+
dispose(options: { flush?: boolean } = {}): void {
|
|
337
|
+
const droppedBefore = this.#parser?.reorderStats.droppedOnLiveDispose ?? 0
|
|
338
|
+
if (options.flush) this.#parser?.flush()
|
|
339
|
+
this.#parser?.dispose()
|
|
340
|
+
const droppedFrames = (this.#parser?.reorderStats.droppedOnLiveDispose ?? droppedBefore) -
|
|
341
|
+
droppedBefore
|
|
342
|
+
if (droppedFrames > 0) {
|
|
343
|
+
console.warn(
|
|
344
|
+
`[MmtpDecodePipeline] live dispose ${this.#tag()} dropped ${droppedFrames} buffered frame(s); ` +
|
|
345
|
+
'finite inputs must use dispose({ flush: true })',
|
|
346
|
+
)
|
|
347
|
+
}
|
|
348
|
+
this.#parser = null
|
|
349
|
+
this.#frameCb = null
|
|
350
|
+
this.#initCb = null
|
|
351
|
+
this.#fecClient = null
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
#gatedEmit(data: Uint8Array, meta: FrameMeta): void {
|
|
355
|
+
let sourceDiscontinuity = false
|
|
356
|
+
if (this.#needsKeyframe) {
|
|
357
|
+
if (!meta.keyframe) {
|
|
358
|
+
// Silent drop: the caller keeps feeding, the parser keeps parsing, and
|
|
359
|
+
// no layer reports anything. If the parser never sets meta.keyframe the
|
|
360
|
+
// gate never opens and the decoder is never called.
|
|
361
|
+
this.#gateDropped += 1
|
|
362
|
+
if (this.#gateDropped <= 3 || this.#gateDropped % 200 === 0) {
|
|
363
|
+
console.warn(
|
|
364
|
+
`[mmtp-pipeline] keyframe gate DROP #${this.#gateDropped} ${this.#tag()} bytes=${data.length} fed=${this.#fedObjects} emitted=${this.#gateEmitted}`,
|
|
365
|
+
)
|
|
366
|
+
}
|
|
367
|
+
return
|
|
368
|
+
}
|
|
369
|
+
this.#needsKeyframe = false
|
|
370
|
+
sourceDiscontinuity = true
|
|
371
|
+
console.log(
|
|
372
|
+
`[mmtp-pipeline] keyframe gate OPENED ${this.#tag()} after ${this.#gateDropped} drops, fed=${this.#fedObjects}`,
|
|
373
|
+
)
|
|
374
|
+
}
|
|
375
|
+
this.#gateEmitted += 1
|
|
376
|
+
if (this.#gateEmitted === 1) {
|
|
377
|
+
console.log(`[mmtp-pipeline] first frame emitted ${this.#tag()} bytes=${data.length}`)
|
|
378
|
+
}
|
|
379
|
+
const outMeta = sourceDiscontinuity ? { ...meta, sourceDiscontinuity: true } : meta
|
|
380
|
+
this.#frameCb?.(data, outMeta)
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function isVideoCodec(codec: string): boolean {
|
|
385
|
+
return codec.startsWith('avc') ||
|
|
386
|
+
codec.startsWith('hev1') || codec.startsWith('hvc1') ||
|
|
387
|
+
codec.startsWith('av01') ||
|
|
388
|
+
codec.startsWith('vp09') || codec.startsWith('vp8')
|
|
389
|
+
}
|