@blockcast/mmt-container 0.1.0 → 0.3.0-main.d9354616fdf2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +524 -0
- package/dist/.build-stamp +0 -0
- package/dist/__tests__/test-utils.d.ts +71 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/align.d.ts +152 -0
- package/dist/align.d.ts.map +1 -0
- package/dist/align.js +88 -0
- package/dist/align.js.map +7 -0
- package/dist/audio-init-parser.d.ts +66 -0
- package/dist/audio-init-parser.d.ts.map +1 -0
- package/dist/audio-init-parser.js +118 -0
- package/dist/audio-init-parser.js.map +7 -0
- package/dist/audio-ring-buffer.d.ts +50 -0
- package/dist/audio-ring-buffer.d.ts.map +1 -0
- package/dist/audio-ring-buffer.js +80 -0
- package/dist/audio-ring-buffer.js.map +7 -0
- package/dist/authored-timing.d.ts +32 -0
- package/dist/authored-timing.d.ts.map +1 -0
- package/dist/authored-timing.js +32 -0
- package/dist/authored-timing.js.map +7 -0
- package/dist/block-policy.d.ts +314 -0
- package/dist/block-policy.d.ts.map +1 -0
- package/dist/block-policy.js +466 -0
- package/dist/block-policy.js.map +7 -0
- package/dist/browser-runtime.js +26549 -0
- package/dist/browser-runtime.js.map +7 -0
- package/dist/carp-catalog.d.ts +429 -0
- package/dist/carp-catalog.d.ts.map +1 -0
- package/dist/carp-catalog.js +985 -0
- package/dist/carp-catalog.js.map +7 -0
- package/dist/catalog-fec-params.d.ts +275 -0
- package/dist/catalog-fec-params.d.ts.map +1 -0
- package/dist/catalog-fec-params.js +702 -0
- package/dist/catalog-fec-params.js.map +7 -0
- package/dist/catalog-network-source.d.ts +42 -0
- package/dist/catalog-network-source.d.ts.map +1 -0
- package/dist/catalog-network-source.js +47 -0
- package/dist/catalog-network-source.js.map +7 -0
- package/dist/catalog-validator.d.ts +18 -0
- package/dist/catalog-validator.d.ts.map +1 -0
- package/dist/catalog-validator.js +7747 -0
- package/dist/catalog-validator.js.map +7 -0
- package/dist/cmaf-block-assembler.d.ts +285 -0
- package/dist/cmaf-block-assembler.d.ts.map +1 -0
- package/dist/cmaf-block-assembler.js +1966 -0
- package/dist/cmaf-block-assembler.js.map +7 -0
- package/dist/cmaf-group-batcher.d.ts +38 -0
- package/dist/cmaf-group-batcher.d.ts.map +1 -0
- package/dist/cmaf-group-batcher.js +176 -0
- package/dist/cmaf-group-batcher.js.map +7 -0
- package/dist/cmcd-producer.d.ts +104 -0
- package/dist/cmcd-producer.d.ts.map +1 -0
- package/dist/cmcd-producer.js +183 -0
- package/dist/cmcd-producer.js.map +7 -0
- package/dist/codec-utils.d.ts +384 -0
- package/dist/codec-utils.d.ts.map +1 -0
- package/dist/codec-utils.js +1546 -0
- package/dist/codec-utils.js.map +7 -0
- package/dist/conceal-timeline.d.ts +146 -0
- package/dist/conceal-timeline.d.ts.map +1 -0
- package/dist/conceal-timeline.js +137 -0
- package/dist/conceal-timeline.js.map +7 -0
- package/dist/delivery-gap.d.ts +75 -0
- package/dist/delivery-gap.d.ts.map +1 -0
- package/dist/delivery-gap.js +88 -0
- package/dist/delivery-gap.js.map +7 -0
- package/dist/duplicate-ledger.d.ts +197 -0
- package/dist/duplicate-ledger.d.ts.map +1 -0
- package/dist/duplicate-ledger.js +226 -0
- package/dist/duplicate-ledger.js.map +7 -0
- package/dist/fec-codec.d.ts +32 -0
- package/dist/fec-codec.d.ts.map +1 -0
- package/dist/fec-codec.js +47 -0
- package/dist/fec-codec.js.map +7 -0
- package/dist/fec-manager.d.ts +583 -0
- package/dist/fec-manager.d.ts.map +1 -0
- package/dist/fec-manager.js +3899 -0
- package/dist/fec-manager.js.map +7 -0
- package/dist/fec-starvation-detector.d.ts +59 -0
- package/dist/fec-starvation-detector.d.ts.map +1 -0
- package/dist/fec-starvation-detector.js +60 -0
- package/dist/fec-starvation-detector.js.map +7 -0
- package/dist/fec-state.d.ts +131 -0
- package/dist/fec-state.d.ts.map +1 -0
- package/dist/fec-state.js +87 -0
- package/dist/fec-state.js.map +7 -0
- package/dist/fec-worker-setup.d.ts +94 -0
- package/dist/fec-worker-setup.d.ts.map +1 -0
- package/dist/fec-worker-setup.js +673 -0
- package/dist/fec-worker-setup.js.map +7 -0
- package/dist/fmp4-completion.d.ts +30 -0
- package/dist/fmp4-completion.d.ts.map +1 -0
- package/dist/fmp4-completion.js +21 -0
- package/dist/fmp4-completion.js.map +7 -0
- package/dist/fmp4-reader.d.ts +37 -0
- package/dist/fmp4-reader.d.ts.map +1 -0
- package/dist/fmp4-reader.js +100 -0
- package/dist/fmp4-reader.js.map +7 -0
- package/dist/index.d.ts +44 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +460 -14
- package/dist/index.js.map +7 -1
- package/dist/iso-block-locator.d.ts +118 -0
- package/dist/iso-block-locator.d.ts.map +1 -0
- package/dist/iso-block-locator.js +289 -0
- package/dist/iso-block-locator.js.map +7 -0
- package/dist/iso-bmff-timing.d.ts +78 -0
- package/dist/iso-bmff-timing.d.ts.map +1 -0
- package/dist/iso-bmff-timing.js +593 -0
- package/dist/iso-bmff-timing.js.map +7 -0
- package/dist/loc.d.ts +70 -75
- package/dist/loc.d.ts.map +1 -1
- package/dist/loc.js +106 -192
- package/dist/loc.js.map +7 -1
- package/dist/manifest-auth-plan.d.ts +30 -0
- package/dist/manifest-auth-plan.d.ts.map +1 -0
- package/dist/manifest-auth-plan.js +1266 -0
- package/dist/manifest-auth-plan.js.map +7 -0
- package/dist/media-router.d.ts +262 -0
- package/dist/media-router.d.ts.map +1 -0
- package/dist/media-router.js +584 -0
- package/dist/media-router.js.map +7 -0
- package/dist/mfu-reassembler.d.ts +313 -9
- package/dist/mfu-reassembler.d.ts.map +1 -1
- package/dist/mfu-reassembler.js +3051 -285
- package/dist/mfu-reassembler.js.map +7 -1
- package/dist/mfu-reassembly-policy.d.ts +24 -0
- package/dist/mfu-reassembly-policy.d.ts.map +1 -0
- package/dist/mfu-reassembly-policy.js +99 -0
- package/dist/mfu-reassembly-policy.js.map +7 -0
- package/dist/mmtp-container-parser.d.ts +568 -0
- package/dist/mmtp-container-parser.d.ts.map +1 -0
- package/dist/mmtp-container-parser.js +6580 -0
- package/dist/mmtp-container-parser.js.map +7 -0
- package/dist/mmtp-container-parser.no-modules.js +9616 -0
- package/dist/mmtp-container-parser.no-modules.js.map +7 -0
- package/dist/mmtp-decode-pipeline.d.ts +138 -0
- package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
- package/dist/mmtp-decode-pipeline.js +6814 -0
- package/dist/mmtp-decode-pipeline.js.map +7 -0
- package/dist/mmtp-router.d.ts +679 -0
- package/dist/mmtp-router.d.ts.map +1 -0
- package/dist/mmtp-router.js +11278 -0
- package/dist/mmtp-router.js.map +7 -0
- package/dist/mmtp-to-cmaf.d.ts +187 -0
- package/dist/mmtp-to-cmaf.d.ts.map +1 -0
- package/dist/mmtp-to-cmaf.js +716 -0
- package/dist/mmtp-to-cmaf.js.map +7 -0
- package/dist/multicast-auth-catalog.d.ts +115 -0
- package/dist/multicast-auth-catalog.d.ts.map +1 -0
- package/dist/multicast-auth-catalog.js +202 -0
- package/dist/multicast-auth-catalog.js.map +7 -0
- package/dist/multicast-input.d.ts +141 -0
- package/dist/multicast-input.d.ts.map +1 -0
- package/dist/multicast-input.js +390 -0
- package/dist/multicast-input.js.map +7 -0
- package/dist/multicast-manager.d.ts +669 -0
- package/dist/multicast-manager.d.ts.map +1 -0
- package/dist/multicast-manager.js +19101 -0
- package/dist/multicast-manager.js.map +7 -0
- package/dist/multicast-transport.d.ts +271 -0
- package/dist/multicast-transport.d.ts.map +1 -0
- package/dist/multicast-transport.js +2264 -0
- package/dist/multicast-transport.js.map +7 -0
- package/dist/multicast-unwrap.d.ts +57 -0
- package/dist/multicast-unwrap.d.ts.map +1 -0
- package/dist/multicast-unwrap.js +418 -0
- package/dist/multicast-unwrap.js.map +7 -0
- package/dist/no-modules.d.ts +10 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +9491 -0
- package/dist/no-modules.js.map +7 -0
- package/dist/phase14-catalog-override.d.ts +126 -0
- package/dist/phase14-catalog-override.d.ts.map +1 -0
- package/dist/phase14-catalog-override.js +155 -0
- package/dist/phase14-catalog-override.js.map +7 -0
- package/dist/repair-fetch.d.ts +270 -0
- package/dist/repair-fetch.d.ts.map +1 -0
- package/dist/repair-fetch.js +381 -0
- package/dist/repair-fetch.js.map +7 -0
- package/dist/repair-layers.d.ts +158 -0
- package/dist/repair-layers.d.ts.map +1 -0
- package/dist/repair-layers.js +344 -0
- package/dist/repair-layers.js.map +7 -0
- package/dist/sample-combiner.d.ts +212 -0
- package/dist/sample-combiner.d.ts.map +1 -0
- package/dist/sample-combiner.js +595 -0
- package/dist/sample-combiner.js.map +7 -0
- package/dist/signaling.d.ts +29 -0
- package/dist/signaling.d.ts.map +1 -0
- package/dist/signaling.js +572 -0
- package/dist/signaling.js.map +7 -0
- package/dist/source-auth.d.ts +2 -0
- package/dist/source-auth.d.ts.map +1 -0
- package/dist/source-auth.js +1209 -0
- package/dist/source-auth.js.map +7 -0
- package/dist/switching-set-alignment.d.ts +61 -0
- package/dist/switching-set-alignment.d.ts.map +1 -0
- package/dist/switching-set-alignment.js +70 -0
- package/dist/switching-set-alignment.js.map +7 -0
- package/dist/timestamp-codec.d.ts +34 -0
- package/dist/timestamp-codec.d.ts.map +1 -0
- package/dist/timestamp-codec.js +473 -0
- package/dist/timestamp-codec.js.map +7 -0
- package/dist/track-pipeline-setup.d.ts +83 -0
- package/dist/track-pipeline-setup.d.ts.map +1 -0
- package/dist/track-pipeline-setup.js +291 -0
- package/dist/track-pipeline-setup.js.map +7 -0
- package/dist/track-pipeline.d.ts +121 -0
- package/dist/track-pipeline.d.ts.map +1 -0
- package/dist/track-pipeline.js +209 -0
- package/dist/track-pipeline.js.map +7 -0
- package/dist/track-session.d.ts +414 -0
- package/dist/track-session.d.ts.map +1 -0
- package/dist/track-session.js +754 -0
- package/dist/track-session.js.map +7 -0
- package/dist/transport-pool.d.ts +69 -0
- package/dist/transport-pool.d.ts.map +1 -0
- package/dist/transport-pool.js +74 -0
- package/dist/transport-pool.js.map +7 -0
- package/dist/wasm-mfu-reassembler.d.ts +97 -0
- package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
- package/dist/wasm-mfu-reassembler.js +2133 -0
- package/dist/wasm-mfu-reassembler.js.map +7 -0
- package/dist/wasm-mmtp-container-parser.d.ts +10 -0
- package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
- package/dist/wasm-mmtp-container-parser.js +6834 -0
- package/dist/wasm-mmtp-container-parser.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/README.md +223 -0
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +38 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.js +78 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +93 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +346 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +380 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +859 -0
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
- package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +370 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +194 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +62 -0
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
- package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
- package/node_modules/@blockcast/fec-worker/package.json +59 -0
- package/node_modules/@blockcast/fec-worker/src/block-order.ts +93 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +392 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +399 -0
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1502 -0
- package/node_modules/@blockcast/fec-worker/src/index.ts +35 -0
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +589 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
- package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +209 -0
- package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
- package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-base/README.md +134 -0
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +55 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +128 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +7 -0
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js +7 -0
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +292 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +612 -0
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +18 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
- package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +1 -0
- package/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +145 -0
- package/node_modules/@blockcast/mmt-base/src/index.ts +6 -0
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +892 -0
- package/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
- package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
- package/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
- package/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -0
- package/node_modules/@blockcast/mmt-fec/README.md +271 -0
- package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +82 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +296 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +106 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +288 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +205 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +240 -0
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +258 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +382 -0
- package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +82 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +170 -0
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +134 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +55 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +128 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +7 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +7 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +292 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +612 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +18 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +1 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +145 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +6 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +892 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -0
- package/node_modules/@blockcast/mmt-fec/package.json +79 -0
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +371 -0
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +439 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
- package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
- package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +310 -0
- package/node_modules/@blockcast/mmt-fec/src/index.ts +94 -0
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +463 -0
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
- package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +195 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +99 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +492 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
- package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
- package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +669 -0
- package/node_modules/@noble/hashes/LICENSE +21 -0
- package/node_modules/@noble/hashes/README.md +521 -0
- package/node_modules/@noble/hashes/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_assert.js +18 -0
- package/node_modules/@noble/hashes/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_blake.js +50 -0
- package/node_modules/@noble/hashes/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_md.js +162 -0
- package/node_modules/@noble/hashes/_md.js.map +1 -0
- package/node_modules/@noble/hashes/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/_u64.js +90 -0
- package/node_modules/@noble/hashes/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/argon2.js +401 -0
- package/node_modules/@noble/hashes/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake1.js +459 -0
- package/node_modules/@noble/hashes/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2.js +420 -0
- package/node_modules/@noble/hashes/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2b.js +14 -0
- package/node_modules/@noble/hashes/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake2s.js +24 -0
- package/node_modules/@noble/hashes/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/blake3.js +255 -0
- package/node_modules/@noble/hashes/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/crypto.js +5 -0
- package/node_modules/@noble/hashes/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/cryptoNode.js +18 -0
- package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/eskdf.js +166 -0
- package/node_modules/@noble/hashes/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
- package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_assert.js +15 -0
- package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
- package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_blake.js +45 -0
- package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
- package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_md.js +155 -0
- package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
- package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/_u64.js +67 -0
- package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
- package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/argon2.js +392 -0
- package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
- package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake1.js +452 -0
- package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
- package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2.js +413 -0
- package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
- package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
- package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
- package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/blake3.js +251 -0
- package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/crypto.js +2 -0
- package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
- package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
- package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
- package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
- package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/hmac.js +86 -0
- package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
- package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/index.js +33 -0
- package/node_modules/@noble/hashes/esm/index.js.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/legacy.js +281 -0
- package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/esm/package.json +10 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
- package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
- package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
- package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha1.js +11 -0
- package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha2.js +375 -0
- package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha256.js +20 -0
- package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
- package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha3.js +234 -0
- package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/sha512.js +26 -0
- package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/esm/utils.js +281 -0
- package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
- package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
- package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hkdf.js +88 -0
- package/node_modules/@noble/hashes/hkdf.js.map +1 -0
- package/node_modules/@noble/hashes/hmac.d.ts +35 -0
- package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
- package/node_modules/@noble/hashes/hmac.js +91 -0
- package/node_modules/@noble/hashes/hmac.js.map +1 -0
- package/node_modules/@noble/hashes/index.d.ts +1 -0
- package/node_modules/@noble/hashes/index.d.ts.map +1 -0
- package/node_modules/@noble/hashes/index.js +33 -0
- package/node_modules/@noble/hashes/index.js.map +1 -0
- package/node_modules/@noble/hashes/legacy.d.ts +71 -0
- package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
- package/node_modules/@noble/hashes/legacy.js +287 -0
- package/node_modules/@noble/hashes/legacy.js.map +1 -0
- package/node_modules/@noble/hashes/package.json +266 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/pbkdf2.js +101 -0
- package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
- package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
- package/node_modules/@noble/hashes/ripemd160.js +16 -0
- package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
- package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
- package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
- package/node_modules/@noble/hashes/scrypt.js +232 -0
- package/node_modules/@noble/hashes/scrypt.js.map +1 -0
- package/node_modules/@noble/hashes/sha1.d.ts +11 -0
- package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha1.js +14 -0
- package/node_modules/@noble/hashes/sha1.js.map +1 -0
- package/node_modules/@noble/hashes/sha2.d.ts +159 -0
- package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha2.js +384 -0
- package/node_modules/@noble/hashes/sha2.js.map +1 -0
- package/node_modules/@noble/hashes/sha256.d.ts +20 -0
- package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha256.js +23 -0
- package/node_modules/@noble/hashes/sha256.js.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3-addons.js +402 -0
- package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
- package/node_modules/@noble/hashes/sha3.d.ts +53 -0
- package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha3.js +239 -0
- package/node_modules/@noble/hashes/sha3.js.map +1 -0
- package/node_modules/@noble/hashes/sha512.d.ts +26 -0
- package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
- package/node_modules/@noble/hashes/sha512.js +29 -0
- package/node_modules/@noble/hashes/sha512.js.map +1 -0
- package/node_modules/@noble/hashes/src/_assert.ts +22 -0
- package/node_modules/@noble/hashes/src/_blake.ts +50 -0
- package/node_modules/@noble/hashes/src/_md.ts +176 -0
- package/node_modules/@noble/hashes/src/_u64.ts +91 -0
- package/node_modules/@noble/hashes/src/argon2.ts +497 -0
- package/node_modules/@noble/hashes/src/blake1.ts +534 -0
- package/node_modules/@noble/hashes/src/blake2.ts +486 -0
- package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
- package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
- package/node_modules/@noble/hashes/src/blake3.ts +272 -0
- package/node_modules/@noble/hashes/src/crypto.ts +9 -0
- package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
- package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
- package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
- package/node_modules/@noble/hashes/src/hmac.ts +94 -0
- package/node_modules/@noble/hashes/src/index.ts +31 -0
- package/node_modules/@noble/hashes/src/legacy.ts +293 -0
- package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
- package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
- package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
- package/node_modules/@noble/hashes/src/sha1.ts +10 -0
- package/node_modules/@noble/hashes/src/sha2.ts +402 -0
- package/node_modules/@noble/hashes/src/sha256.ts +24 -0
- package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
- package/node_modules/@noble/hashes/src/sha3.ts +258 -0
- package/node_modules/@noble/hashes/src/sha512.ts +34 -0
- package/node_modules/@noble/hashes/src/utils.ts +395 -0
- package/node_modules/@noble/hashes/utils.d.ts +161 -0
- package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
- package/node_modules/@noble/hashes/utils.js +313 -0
- package/node_modules/@noble/hashes/utils.js.map +1 -0
- package/package.json +179 -8
- package/schemas/catalog.schema.json +357 -0
- package/src/align.ts +239 -0
- package/src/audio-init-parser.ts +189 -0
- package/src/audio-ring-buffer.ts +120 -0
- package/src/authored-timing.ts +63 -0
- package/src/block-policy.ts +903 -0
- package/src/carp-catalog.ts +1065 -0
- package/src/catalog-fec-params.ts +729 -0
- package/src/catalog-network-source.ts +74 -0
- package/src/catalog-validator.ts +34 -0
- package/src/cmaf-block-assembler.ts +1255 -0
- package/src/cmaf-group-batcher.ts +104 -0
- package/src/cmcd-producer.ts +329 -0
- package/src/codec-utils.ts +1984 -0
- package/src/conceal-timeline.ts +293 -0
- package/src/delivery-gap.ts +147 -0
- package/src/duplicate-ledger.ts +372 -0
- package/src/fec-codec.ts +61 -0
- package/src/fec-manager.ts +4298 -0
- package/src/fec-starvation-detector.ts +128 -0
- package/src/fec-state.ts +219 -0
- package/src/fec-worker-setup.ts +283 -0
- package/src/fmp4-completion.ts +47 -0
- package/src/fmp4-reader.ts +112 -0
- package/src/index.ts +590 -21
- package/src/iso-block-locator.ts +329 -0
- package/src/iso-bmff-timing.ts +813 -0
- package/src/loc.ts +128 -154
- package/src/manifest-auth-plan.ts +107 -0
- package/src/media-router.ts +841 -0
- package/src/mfu-reassembler.ts +3480 -155
- package/src/mfu-reassembly-policy.ts +134 -0
- package/src/mmtp-container-parser.ts +2380 -0
- package/src/mmtp-decode-pipeline.ts +406 -0
- package/src/mmtp-router.ts +4860 -0
- package/src/mmtp-to-cmaf.ts +977 -0
- package/src/multicast-auth-catalog.ts +340 -0
- package/src/multicast-input.ts +793 -0
- package/src/multicast-manager.ts +2783 -0
- package/src/multicast-transport.ts +1058 -0
- package/src/multicast-unwrap.ts +132 -0
- package/src/no-modules.ts +21 -0
- package/src/phase14-catalog-override.ts +336 -0
- package/src/repair-fetch.ts +772 -0
- package/src/repair-layers.ts +533 -0
- package/src/sample-combiner.ts +938 -0
- package/src/signaling.ts +78 -0
- package/src/source-auth.ts +1 -0
- package/src/switching-set-alignment.ts +109 -0
- package/src/timestamp-codec.ts +265 -0
- package/src/track-pipeline-setup.ts +205 -0
- package/src/track-pipeline.ts +332 -0
- package/src/track-session.ts +1010 -0
- package/src/transport-pool.ts +128 -0
- package/src/wasm-mfu-reassembler.ts +405 -0
- package/src/wasm-mmtp-container-parser.ts +23 -0
- package/test-vectors/align.json +199 -0
- package/test-vectors/catalog/README.md +106 -0
- package/test-vectors/catalog/negative/archive-origin-with-path.json +33 -0
- package/test-vectors/catalog/negative/archive-unknown-field.json +34 -0
- package/test-vectors/catalog/negative/fec-block-profile-missing.json +51 -0
- package/test-vectors/catalog/negative/fec-block-profile-unknown.json +52 -0
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +28 -0
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +33 -0
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +31 -0
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +32 -0
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +34 -0
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +24 -0
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +33 -0
- package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
- package/test-vectors/catalog/negative/media-track-repair-layer.json +16 -0
- package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
- package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
- package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
- package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
- package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
- package/test-vectors/catalog/negative/multicast-network-source-empty.json +44 -0
- package/test-vectors/catalog/negative/multicast-packet-id-signaling.json +26 -0
- package/test-vectors/catalog/negative/network-source-object.json +25 -0
- package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +24 -0
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +27 -0
- package/test-vectors/catalog/negative/repair-track-legacy-shape.json +19 -0
- package/test-vectors/catalog/negative/track-role-empty.json +16 -0
- package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
- package/test-vectors/catalog/positive/archive-origin.json +34 -0
- package/test-vectors/catalog/positive/fec-iso-ssbg1.json +52 -0
- package/test-vectors/catalog/positive/fec-layered-repair.json +106 -0
- package/test-vectors/catalog/positive/fec-multicast.json +52 -0
- package/test-vectors/catalog/positive/flat-av.json +30 -0
- package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
- package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +43 -0
- package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
- package/test-vectors/catalog/positive/track-role.json +49 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
- package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
- package/test-vectors/catalog-multicast-auth-v1.json +26 -0
- package/test-vectors/catalog-validation.json +732 -0
- package/test-vectors/catalog-validator-public-api.mjs +25 -0
- package/test-vectors/generate-source-auth-fixture.mjs +114 -0
- package/test-vectors/hevc-x265-repeat-headers-v1.json +40 -0
- package/test-vectors/source-auth-v1.json +61 -0
- package/test-vectors/source-contiguity-v1.json +131 -0
- package/test-vectors/subsample-placement-v1.json +230 -0
- package/dist/mmtp.d.ts +0 -73
- package/dist/mmtp.d.ts.map +0 -1
- package/dist/mmtp.js +0 -210
- package/dist/mmtp.js.map +0 -1
- package/src/mmtp.ts +0 -277
|
@@ -0,0 +1,716 @@
|
|
|
1
|
+
// src/mmtp-to-cmaf.ts
|
|
2
|
+
function box(type, ...children) {
|
|
3
|
+
let size = 8;
|
|
4
|
+
for (const c of children) size += c.length;
|
|
5
|
+
const buf = new Uint8Array(size);
|
|
6
|
+
new DataView(buf.buffer).setUint32(0, size);
|
|
7
|
+
buf[4] = type.charCodeAt(0);
|
|
8
|
+
buf[5] = type.charCodeAt(1);
|
|
9
|
+
buf[6] = type.charCodeAt(2);
|
|
10
|
+
buf[7] = type.charCodeAt(3);
|
|
11
|
+
let pos = 8;
|
|
12
|
+
for (const c of children) {
|
|
13
|
+
buf.set(c, pos);
|
|
14
|
+
pos += c.length;
|
|
15
|
+
}
|
|
16
|
+
return buf;
|
|
17
|
+
}
|
|
18
|
+
function fullBox(type, version, flags, ...children) {
|
|
19
|
+
let size = 12;
|
|
20
|
+
for (const c of children) size += c.length;
|
|
21
|
+
const buf = new Uint8Array(size);
|
|
22
|
+
const dv = new DataView(buf.buffer);
|
|
23
|
+
dv.setUint32(0, size);
|
|
24
|
+
buf[4] = type.charCodeAt(0);
|
|
25
|
+
buf[5] = type.charCodeAt(1);
|
|
26
|
+
buf[6] = type.charCodeAt(2);
|
|
27
|
+
buf[7] = type.charCodeAt(3);
|
|
28
|
+
dv.setUint32(8, version << 24 | flags & 16777215);
|
|
29
|
+
let pos = 12;
|
|
30
|
+
for (const c of children) {
|
|
31
|
+
buf.set(c, pos);
|
|
32
|
+
pos += c.length;
|
|
33
|
+
}
|
|
34
|
+
return buf;
|
|
35
|
+
}
|
|
36
|
+
function u32(v) {
|
|
37
|
+
const b = new Uint8Array(4);
|
|
38
|
+
new DataView(b.buffer).setUint32(0, v);
|
|
39
|
+
return b;
|
|
40
|
+
}
|
|
41
|
+
var KEYFRAME_FLAGS = 33554432;
|
|
42
|
+
var DELTA_FLAGS = 16842752;
|
|
43
|
+
var UINT32_MAX = 4294967295;
|
|
44
|
+
var MAX_TRACK_ID = UINT32_MAX - 1;
|
|
45
|
+
var INT32_MIN = -2147483648;
|
|
46
|
+
var INT32_MAX = 2147483647;
|
|
47
|
+
function assertTrackId(trackId, label) {
|
|
48
|
+
if (!Number.isInteger(trackId) || trackId <= 0 || trackId > MAX_TRACK_ID) {
|
|
49
|
+
throw new RangeError(`${label} must be an integer in 1..${MAX_TRACK_ID}, got ${trackId}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function assertTimescale(timescale, label) {
|
|
53
|
+
if (!Number.isInteger(timescale) || timescale <= 0 || timescale > UINT32_MAX) {
|
|
54
|
+
throw new RangeError(`${label} must be an integer in 1..${UINT32_MAX}, got ${timescale}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function assertCompositionTimeOffsets(samples) {
|
|
58
|
+
for (let i = 0; i < samples.length; i++) {
|
|
59
|
+
const offset = samples[i].compositionTimeOffset;
|
|
60
|
+
if (offset !== void 0 && (!Number.isInteger(offset) || offset < INT32_MIN || offset > INT32_MAX)) {
|
|
61
|
+
throw new RangeError(
|
|
62
|
+
`sample ${i} compositionTimeOffset must be an integer in ${INT32_MIN}..${INT32_MAX}, got ${offset}`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function encodeMultiSampleSegment(samples, baseDecodeTime, sequence, trackId = 1) {
|
|
68
|
+
if (samples.length === 0) return new Uint8Array(0);
|
|
69
|
+
assertTrackId(trackId, "trackId");
|
|
70
|
+
assertCompositionTimeOffsets(samples);
|
|
71
|
+
const mfhd = fullBox("mfhd", 0, 0, u32(sequence));
|
|
72
|
+
const tfhd = fullBox("tfhd", 0, 131072, u32(trackId));
|
|
73
|
+
const tfdtBody = new Uint8Array(8);
|
|
74
|
+
const tfdtView = new DataView(tfdtBody.buffer);
|
|
75
|
+
tfdtView.setUint32(0, Math.floor(baseDecodeTime / 4294967296));
|
|
76
|
+
tfdtView.setUint32(4, baseDecodeTime >>> 0);
|
|
77
|
+
const tfdt = fullBox("tfdt", 1, 0, tfdtBody);
|
|
78
|
+
const hasCompositionTimeOffset = samples.some((sample) => sample.compositionTimeOffset !== void 0);
|
|
79
|
+
const trunVersion = hasCompositionTimeOffset ? 1 : 0;
|
|
80
|
+
const trunFlags = 1793 | (hasCompositionTimeOffset ? 2048 : 0);
|
|
81
|
+
const sampleCount = samples.length;
|
|
82
|
+
const sampleEntrySize = hasCompositionTimeOffset ? 16 : 12;
|
|
83
|
+
const trunBody = new Uint8Array(8 + sampleCount * sampleEntrySize);
|
|
84
|
+
const trunView = new DataView(trunBody.buffer);
|
|
85
|
+
trunView.setUint32(0, sampleCount);
|
|
86
|
+
trunView.setUint32(4, 0);
|
|
87
|
+
for (let i = 0; i < sampleCount; i++) {
|
|
88
|
+
const s = samples[i];
|
|
89
|
+
const off = 8 + i * sampleEntrySize;
|
|
90
|
+
trunView.setUint32(off, s.duration >>> 0);
|
|
91
|
+
trunView.setUint32(off + 4, s.data.length);
|
|
92
|
+
trunView.setUint32(off + 8, s.keyframe ? KEYFRAME_FLAGS : DELTA_FLAGS);
|
|
93
|
+
if (hasCompositionTimeOffset) {
|
|
94
|
+
trunView.setInt32(off + 12, s.compositionTimeOffset ?? 0);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const trun = fullBox("trun", trunVersion, trunFlags, trunBody);
|
|
98
|
+
const traf = box("traf", tfhd, tfdt, trun);
|
|
99
|
+
const moof = box("moof", mfhd, traf);
|
|
100
|
+
let mdatSize = 0;
|
|
101
|
+
for (const s of samples) mdatSize += s.data.length;
|
|
102
|
+
const mdatPayload = new Uint8Array(mdatSize);
|
|
103
|
+
let pos = 0;
|
|
104
|
+
for (const s of samples) {
|
|
105
|
+
mdatPayload.set(s.data, pos);
|
|
106
|
+
pos += s.data.length;
|
|
107
|
+
}
|
|
108
|
+
const mdat = box("mdat", mdatPayload);
|
|
109
|
+
const dataOffsetPos = 8 + mfhd.length + 8 + tfhd.length + tfdt.length + 12 + 4;
|
|
110
|
+
new DataView(moof.buffer).setUint32(dataOffsetPos, moof.length + 8);
|
|
111
|
+
const result = new Uint8Array(moof.length + mdat.length);
|
|
112
|
+
result.set(moof, 0);
|
|
113
|
+
result.set(mdat, moof.length);
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
function generateSilenceFrame(codec, sampleRate, channels) {
|
|
117
|
+
if (codec.startsWith("opus") || codec.startsWith("Opus")) {
|
|
118
|
+
return generateSilenceOpus(channels);
|
|
119
|
+
}
|
|
120
|
+
return generateSilenceAAC(sampleRate, channels);
|
|
121
|
+
}
|
|
122
|
+
function generateSilenceAAC(sampleRate, channels) {
|
|
123
|
+
if (channels >= 2) {
|
|
124
|
+
return new Uint8Array([
|
|
125
|
+
33,
|
|
126
|
+
0,
|
|
127
|
+
73,
|
|
128
|
+
144,
|
|
129
|
+
2,
|
|
130
|
+
25,
|
|
131
|
+
0,
|
|
132
|
+
35,
|
|
133
|
+
128
|
|
134
|
+
]);
|
|
135
|
+
}
|
|
136
|
+
return new Uint8Array([
|
|
137
|
+
1,
|
|
138
|
+
0,
|
|
139
|
+
2,
|
|
140
|
+
0,
|
|
141
|
+
0,
|
|
142
|
+
0,
|
|
143
|
+
0
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
function generateSilenceOpus(channels) {
|
|
147
|
+
return new Uint8Array([248, 255, 254]);
|
|
148
|
+
}
|
|
149
|
+
function normalizeAacSampleForCmaf(data) {
|
|
150
|
+
if (data.length < 7 || data[0] !== 255 || (data[1] & 246) !== 240) {
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
const headerLength = data[1] & 1 ? 7 : 9;
|
|
154
|
+
if (data.length <= headerLength) return data;
|
|
155
|
+
const frameLength = (data[3] & 3) << 11 | data[4] << 3 | (data[5] & 224) >>> 5;
|
|
156
|
+
if (frameLength !== data.length || frameLength <= headerLength) return data;
|
|
157
|
+
return data.subarray(headerLength);
|
|
158
|
+
}
|
|
159
|
+
function encodeDataSegment(data, timestamp, duration, keyframe, sequence, trackId = 1, compositionTimeOffset) {
|
|
160
|
+
assertTrackId(trackId, "trackId");
|
|
161
|
+
assertCompositionTimeOffsets([{ compositionTimeOffset }]);
|
|
162
|
+
if (compositionTimeOffset !== void 0) {
|
|
163
|
+
return encodeMultiSampleSegment(
|
|
164
|
+
[{ data, duration, keyframe, compositionTimeOffset }],
|
|
165
|
+
timestamp,
|
|
166
|
+
sequence,
|
|
167
|
+
trackId
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
const sampleFlags = keyframe ? KEYFRAME_FLAGS : DELTA_FLAGS;
|
|
171
|
+
const mfhd = fullBox("mfhd", 0, 0, u32(sequence));
|
|
172
|
+
const tfhd = fullBox("tfhd", 0, 131072, u32(trackId));
|
|
173
|
+
const tfdtBody = new Uint8Array(8);
|
|
174
|
+
const tfdtView = new DataView(tfdtBody.buffer);
|
|
175
|
+
tfdtView.setUint32(0, Math.floor(timestamp / 4294967296));
|
|
176
|
+
tfdtView.setUint32(4, timestamp >>> 0);
|
|
177
|
+
const tfdt = fullBox("tfdt", 1, 0, tfdtBody);
|
|
178
|
+
const trunBody = new Uint8Array(20);
|
|
179
|
+
const trunView = new DataView(trunBody.buffer);
|
|
180
|
+
trunView.setUint32(0, 1);
|
|
181
|
+
trunView.setUint32(4, 0);
|
|
182
|
+
trunView.setUint32(8, duration >>> 0);
|
|
183
|
+
trunView.setUint32(12, data.length);
|
|
184
|
+
trunView.setUint32(16, sampleFlags);
|
|
185
|
+
const trun = fullBox("trun", 0, 1793, trunBody);
|
|
186
|
+
const traf = box("traf", tfhd, tfdt, trun);
|
|
187
|
+
const moof = box("moof", mfhd, traf);
|
|
188
|
+
const mdat = box("mdat", data);
|
|
189
|
+
const dataOffsetPos = 8 + mfhd.length + 8 + tfhd.length + tfdt.length + 12 + 4;
|
|
190
|
+
new DataView(moof.buffer).setUint32(dataOffsetPos, moof.length + 8);
|
|
191
|
+
const result = new Uint8Array(moof.length + mdat.length);
|
|
192
|
+
result.set(moof, 0);
|
|
193
|
+
result.set(mdat, moof.length);
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
function buildVideoInitSegment(avcC, width, height, timescale = 1e6, trackId = 1) {
|
|
197
|
+
return buildVisualInitSegment("avc1", "avcC", avcC, width, height, timescale, trackId);
|
|
198
|
+
}
|
|
199
|
+
function buildHevcVideoInitSegment(sampleEntry, hvcC, width, height, timescale, trackId) {
|
|
200
|
+
if (sampleEntry !== "hev1" && sampleEntry !== "hvc1") {
|
|
201
|
+
throw new Error(`HEVC init segment requires an hev1 or hvc1 sample entry, got ${String(sampleEntry)}`);
|
|
202
|
+
}
|
|
203
|
+
return buildVisualInitSegment(sampleEntry, "hvcC", hvcC, width, height, timescale, trackId);
|
|
204
|
+
}
|
|
205
|
+
function buildVisualInitSegment(sampleEntryType, configBoxType, configRecord, width, height, timescale, trackId) {
|
|
206
|
+
assertTrackId(trackId, "video trackId");
|
|
207
|
+
assertTimescale(timescale, "video timescale");
|
|
208
|
+
const ftyp = box("ftyp", new Uint8Array([
|
|
209
|
+
105,
|
|
210
|
+
115,
|
|
211
|
+
111,
|
|
212
|
+
109,
|
|
213
|
+
0,
|
|
214
|
+
0,
|
|
215
|
+
2,
|
|
216
|
+
0,
|
|
217
|
+
105,
|
|
218
|
+
115,
|
|
219
|
+
111,
|
|
220
|
+
109,
|
|
221
|
+
105,
|
|
222
|
+
115,
|
|
223
|
+
111,
|
|
224
|
+
54,
|
|
225
|
+
109,
|
|
226
|
+
112,
|
|
227
|
+
52,
|
|
228
|
+
49
|
|
229
|
+
]));
|
|
230
|
+
const configBox = box(configBoxType, configRecord);
|
|
231
|
+
const sampleEntryBody = new Uint8Array(78 + configBox.length);
|
|
232
|
+
const sampleEntryView = new DataView(sampleEntryBody.buffer);
|
|
233
|
+
sampleEntryView.setUint16(6, 1);
|
|
234
|
+
sampleEntryView.setUint16(24, width);
|
|
235
|
+
sampleEntryView.setUint16(26, height);
|
|
236
|
+
sampleEntryView.setUint32(28, 4718592);
|
|
237
|
+
sampleEntryView.setUint32(32, 4718592);
|
|
238
|
+
sampleEntryView.setUint16(40, 1);
|
|
239
|
+
sampleEntryView.setUint16(74, 24);
|
|
240
|
+
sampleEntryView.setInt16(76, -1);
|
|
241
|
+
sampleEntryBody.set(configBox, 78);
|
|
242
|
+
const visualSampleEntry = box(sampleEntryType, sampleEntryBody);
|
|
243
|
+
const stsd = fullBox("stsd", 0, 0, u32(1), visualSampleEntry);
|
|
244
|
+
const stbl = box(
|
|
245
|
+
"stbl",
|
|
246
|
+
stsd,
|
|
247
|
+
fullBox("stts", 0, 0, u32(0)),
|
|
248
|
+
fullBox("stsc", 0, 0, u32(0)),
|
|
249
|
+
fullBox("stsz", 0, 0, u32(0), u32(0)),
|
|
250
|
+
fullBox("stco", 0, 0, u32(0))
|
|
251
|
+
);
|
|
252
|
+
const dinf = box("dinf", fullBox("dref", 0, 0, u32(1), fullBox("url ", 0, 1)));
|
|
253
|
+
const minf = box("minf", fullBox("vmhd", 0, 1, new Uint8Array(8)), dinf, stbl);
|
|
254
|
+
const hdlr = fullBox("hdlr", 0, 0, new Uint8Array([
|
|
255
|
+
0,
|
|
256
|
+
0,
|
|
257
|
+
0,
|
|
258
|
+
0,
|
|
259
|
+
118,
|
|
260
|
+
105,
|
|
261
|
+
100,
|
|
262
|
+
101,
|
|
263
|
+
0,
|
|
264
|
+
0,
|
|
265
|
+
0,
|
|
266
|
+
0,
|
|
267
|
+
0,
|
|
268
|
+
0,
|
|
269
|
+
0,
|
|
270
|
+
0,
|
|
271
|
+
0,
|
|
272
|
+
0,
|
|
273
|
+
0,
|
|
274
|
+
0,
|
|
275
|
+
86,
|
|
276
|
+
105,
|
|
277
|
+
100,
|
|
278
|
+
101,
|
|
279
|
+
111,
|
|
280
|
+
0
|
|
281
|
+
]));
|
|
282
|
+
const mdhdBody = new Uint8Array(20);
|
|
283
|
+
new DataView(mdhdBody.buffer).setUint32(8, timescale);
|
|
284
|
+
const mdhd = fullBox("mdhd", 0, 0, mdhdBody);
|
|
285
|
+
const mdia = box("mdia", mdhd, hdlr, minf);
|
|
286
|
+
const tkhdBody = new Uint8Array(80);
|
|
287
|
+
const tkhdView = new DataView(tkhdBody.buffer);
|
|
288
|
+
tkhdView.setUint32(8, trackId);
|
|
289
|
+
tkhdView.setUint32(36, 65536);
|
|
290
|
+
tkhdView.setUint32(52, 65536);
|
|
291
|
+
tkhdView.setUint32(64, 1073741824);
|
|
292
|
+
tkhdView.setUint32(72, width << 16);
|
|
293
|
+
tkhdView.setUint32(76, height << 16);
|
|
294
|
+
const tkhd = fullBox("tkhd", 0, 3, tkhdBody);
|
|
295
|
+
const trak = box("trak", tkhd, mdia);
|
|
296
|
+
const mvhdBody = new Uint8Array(96);
|
|
297
|
+
const mvhdView = new DataView(mvhdBody.buffer);
|
|
298
|
+
mvhdView.setUint32(8, timescale);
|
|
299
|
+
mvhdView.setUint32(16, 65536);
|
|
300
|
+
mvhdView.setUint16(20, 256);
|
|
301
|
+
mvhdView.setUint32(32, 65536);
|
|
302
|
+
mvhdView.setUint32(48, 65536);
|
|
303
|
+
mvhdView.setUint32(60, 1073741824);
|
|
304
|
+
mvhdView.setUint32(92, trackId + 1);
|
|
305
|
+
const mvhd = fullBox("mvhd", 0, 0, mvhdBody);
|
|
306
|
+
const trexBody = new Uint8Array(20);
|
|
307
|
+
new DataView(trexBody.buffer).setUint32(0, trackId);
|
|
308
|
+
new DataView(trexBody.buffer).setUint32(4, 1);
|
|
309
|
+
const mvex = box("mvex", fullBox("trex", 0, 0, trexBody));
|
|
310
|
+
const moov = box("moov", mvhd, trak, mvex);
|
|
311
|
+
const result = new Uint8Array(ftyp.length + moov.length);
|
|
312
|
+
result.set(ftyp, 0);
|
|
313
|
+
result.set(moov, ftyp.length);
|
|
314
|
+
return result;
|
|
315
|
+
}
|
|
316
|
+
function buildAudioInitSegment(sampleRate, channels, asc, timescale, trackId = 1) {
|
|
317
|
+
assertTrackId(trackId, "audio trackId");
|
|
318
|
+
const ts = timescale ?? sampleRate;
|
|
319
|
+
assertTimescale(ts, "audio timescale");
|
|
320
|
+
if (!asc) {
|
|
321
|
+
const freqTable = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
|
|
322
|
+
const fi = freqTable.indexOf(sampleRate);
|
|
323
|
+
const freqIdx = fi >= 0 ? fi : 15;
|
|
324
|
+
if (freqIdx <= 14) {
|
|
325
|
+
const v = 2 << 11 | freqIdx << 7 | channels << 3;
|
|
326
|
+
asc = new Uint8Array([v >> 8 & 255, v & 255]);
|
|
327
|
+
} else {
|
|
328
|
+
asc = new Uint8Array([
|
|
329
|
+
2 << 3 | 7,
|
|
330
|
+
(8 | sampleRate >> 20 & 7) & 255,
|
|
331
|
+
sampleRate >> 12 & 255,
|
|
332
|
+
sampleRate >> 4 & 255,
|
|
333
|
+
((sampleRate & 15) << 4 | channels << 0) & 255
|
|
334
|
+
]);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
const dsi = new Uint8Array(2 + asc.length);
|
|
338
|
+
dsi[0] = 5;
|
|
339
|
+
dsi[1] = asc.length;
|
|
340
|
+
dsi.set(asc, 2);
|
|
341
|
+
const dcdBody = new Uint8Array(13 + dsi.length);
|
|
342
|
+
dcdBody[0] = 64;
|
|
343
|
+
dcdBody[1] = 21;
|
|
344
|
+
dcdBody.set(dsi, 13);
|
|
345
|
+
const dcd = new Uint8Array(2 + dcdBody.length);
|
|
346
|
+
dcd[0] = 4;
|
|
347
|
+
dcd[1] = dcdBody.length;
|
|
348
|
+
dcd.set(dcdBody, 2);
|
|
349
|
+
const esBody = new Uint8Array(3 + dcd.length);
|
|
350
|
+
esBody[0] = 0;
|
|
351
|
+
esBody[1] = 1;
|
|
352
|
+
esBody[2] = 0;
|
|
353
|
+
esBody.set(dcd, 3);
|
|
354
|
+
const es = new Uint8Array(2 + esBody.length);
|
|
355
|
+
es[0] = 3;
|
|
356
|
+
es[1] = esBody.length;
|
|
357
|
+
es.set(esBody, 2);
|
|
358
|
+
const esdsBox = fullBox("esds", 0, 0, es);
|
|
359
|
+
const mp4aBody = new Uint8Array(28 + esdsBox.length);
|
|
360
|
+
const mp4aView = new DataView(mp4aBody.buffer);
|
|
361
|
+
mp4aView.setUint16(6, 1);
|
|
362
|
+
mp4aView.setUint16(16, channels);
|
|
363
|
+
mp4aView.setUint16(18, 16);
|
|
364
|
+
mp4aView.setUint32(24, sampleRate << 16);
|
|
365
|
+
mp4aBody.set(esdsBox, 28);
|
|
366
|
+
const mp4a = box("mp4a", mp4aBody);
|
|
367
|
+
const stsd = fullBox("stsd", 0, 0, u32(1), mp4a);
|
|
368
|
+
const stbl = box(
|
|
369
|
+
"stbl",
|
|
370
|
+
stsd,
|
|
371
|
+
fullBox("stts", 0, 0, u32(0)),
|
|
372
|
+
fullBox("stsc", 0, 0, u32(0)),
|
|
373
|
+
fullBox("stsz", 0, 0, u32(0), u32(0)),
|
|
374
|
+
fullBox("stco", 0, 0, u32(0))
|
|
375
|
+
);
|
|
376
|
+
const dinf = box("dinf", fullBox("dref", 0, 0, u32(1), fullBox("url ", 0, 1)));
|
|
377
|
+
const minf = box("minf", fullBox("smhd", 0, 0, new Uint8Array(4)), dinf, stbl);
|
|
378
|
+
const hdlr = fullBox("hdlr", 0, 0, new Uint8Array([
|
|
379
|
+
0,
|
|
380
|
+
0,
|
|
381
|
+
0,
|
|
382
|
+
0,
|
|
383
|
+
115,
|
|
384
|
+
111,
|
|
385
|
+
117,
|
|
386
|
+
110,
|
|
387
|
+
0,
|
|
388
|
+
0,
|
|
389
|
+
0,
|
|
390
|
+
0,
|
|
391
|
+
0,
|
|
392
|
+
0,
|
|
393
|
+
0,
|
|
394
|
+
0,
|
|
395
|
+
0,
|
|
396
|
+
0,
|
|
397
|
+
0,
|
|
398
|
+
0,
|
|
399
|
+
83,
|
|
400
|
+
111,
|
|
401
|
+
117,
|
|
402
|
+
110,
|
|
403
|
+
100,
|
|
404
|
+
0
|
|
405
|
+
]));
|
|
406
|
+
const mdhdBody = new Uint8Array(20);
|
|
407
|
+
new DataView(mdhdBody.buffer).setUint32(8, ts);
|
|
408
|
+
const mdhd = fullBox("mdhd", 0, 0, mdhdBody);
|
|
409
|
+
const mdia = box("mdia", mdhd, hdlr, minf);
|
|
410
|
+
const tkhdBody = new Uint8Array(80);
|
|
411
|
+
const tkhdView = new DataView(tkhdBody.buffer);
|
|
412
|
+
tkhdView.setUint32(8, trackId);
|
|
413
|
+
tkhdView.setUint32(36, 65536);
|
|
414
|
+
tkhdView.setUint32(52, 65536);
|
|
415
|
+
tkhdView.setUint32(64, 1073741824);
|
|
416
|
+
const tkhd = fullBox("tkhd", 0, 3, tkhdBody);
|
|
417
|
+
const trak = box("trak", tkhd, mdia);
|
|
418
|
+
const mvhdBody = new Uint8Array(96);
|
|
419
|
+
const mvhdView = new DataView(mvhdBody.buffer);
|
|
420
|
+
mvhdView.setUint32(8, ts);
|
|
421
|
+
mvhdView.setUint32(16, 65536);
|
|
422
|
+
mvhdView.setUint16(20, 256);
|
|
423
|
+
mvhdView.setUint32(32, 65536);
|
|
424
|
+
mvhdView.setUint32(48, 65536);
|
|
425
|
+
mvhdView.setUint32(60, 1073741824);
|
|
426
|
+
mvhdView.setUint32(92, trackId + 1);
|
|
427
|
+
const mvhd = fullBox("mvhd", 0, 0, mvhdBody);
|
|
428
|
+
const trexBody = new Uint8Array(20);
|
|
429
|
+
new DataView(trexBody.buffer).setUint32(0, trackId);
|
|
430
|
+
new DataView(trexBody.buffer).setUint32(4, 1);
|
|
431
|
+
const mvex = box("mvex", fullBox("trex", 0, 0, trexBody));
|
|
432
|
+
const moov = box("moov", mvhd, trak, mvex);
|
|
433
|
+
const ftyp = box("ftyp", new Uint8Array([
|
|
434
|
+
105,
|
|
435
|
+
115,
|
|
436
|
+
111,
|
|
437
|
+
109,
|
|
438
|
+
0,
|
|
439
|
+
0,
|
|
440
|
+
2,
|
|
441
|
+
0,
|
|
442
|
+
105,
|
|
443
|
+
115,
|
|
444
|
+
111,
|
|
445
|
+
109,
|
|
446
|
+
105,
|
|
447
|
+
115,
|
|
448
|
+
111,
|
|
449
|
+
54,
|
|
450
|
+
109,
|
|
451
|
+
112,
|
|
452
|
+
52,
|
|
453
|
+
49
|
|
454
|
+
]));
|
|
455
|
+
const result = new Uint8Array(ftyp.length + moov.length);
|
|
456
|
+
result.set(ftyp, 0);
|
|
457
|
+
result.set(moov, ftyp.length);
|
|
458
|
+
return result;
|
|
459
|
+
}
|
|
460
|
+
var MmtpToCmaf = class {
|
|
461
|
+
#videoSeq = 1;
|
|
462
|
+
#audioSeq = 1;
|
|
463
|
+
#videoInitSegment = null;
|
|
464
|
+
// Known only for locally-built init segments. Wire-supplied MPU metadata is
|
|
465
|
+
// intentionally opaque here, so setVideoTrackParams remains the API that
|
|
466
|
+
// lets a caller declare its track geometry before wrapping samples.
|
|
467
|
+
#videoInitTrackId = null;
|
|
468
|
+
#audioInitSegment = null;
|
|
469
|
+
#lastVideoTimestamp = 0;
|
|
470
|
+
// Sticky sample duration in video timescale units, updated from caller-
|
|
471
|
+
// supplied durations or adjacent-timestamp deltas. null means "nothing
|
|
472
|
+
// observed yet", in which case #videoFrameDuration derives ~30fps from the
|
|
473
|
+
// configured timescale (33333 at the 1_000_000 default, i.e. unchanged).
|
|
474
|
+
#frameDuration = null;
|
|
475
|
+
// Per-track rebase: each track anchors on its OWN first sample so
|
|
476
|
+
// baseMediaDecodeTime is never negative. A shared base was wrong — if the
|
|
477
|
+
// first sample of one track arrives later than the other's first sample,
|
|
478
|
+
// the earlier track computes `timestamp - sharedBase` as a negative number,
|
|
479
|
+
// which serializes into tfdt as a huge unsigned uint64 (~2^64 - 46) and
|
|
480
|
+
// Chromium rejects the segment with CHUNK_DEMUXER_ERROR_APPEND_FAILED,
|
|
481
|
+
// closing the MediaSource and detaching all SourceBuffers.
|
|
482
|
+
// For A/V alignment, choose a COMMON anchor: set when the first sample of
|
|
483
|
+
// EITHER track arrives, but only if that sample's timestamp is <= any
|
|
484
|
+
// subsequent track's first sample. Implementation: each track rebases to
|
|
485
|
+
// the minimum timestamp seen across tracks on their respective first sample.
|
|
486
|
+
#videoBaseTs = -1;
|
|
487
|
+
#audioBaseTs = -1;
|
|
488
|
+
// Video track geometry. These pair with the video init segment's tkhd
|
|
489
|
+
// track_ID and mdhd/mvhd timescale: every moof this converter emits must
|
|
490
|
+
// reference the same track at the same rate or the browser either drops the
|
|
491
|
+
// fragment (unknown track) or plays it at the wrong rate. They are
|
|
492
|
+
// configuration rather than stream state, so — unlike the sequence numbers
|
|
493
|
+
// and time bases above — reset() deliberately preserves them, matching the
|
|
494
|
+
// fact that reset() also preserves #videoInitSegment.
|
|
495
|
+
#videoTrackId = 1;
|
|
496
|
+
#videoTimescale = 1e6;
|
|
497
|
+
/**
|
|
498
|
+
* Point the single-sample video wrappers at a specific track and rate.
|
|
499
|
+
*
|
|
500
|
+
* Call this when the init segment came off the wire (setInitSegmentFromMpu)
|
|
501
|
+
* rather than from buildVideoInit, so the wrappers match the publisher's
|
|
502
|
+
* tkhd/mdhd instead of assuming trackId=1 at microsecond rate. Consumers
|
|
503
|
+
* that build their init through buildVideoInit can pass the same values
|
|
504
|
+
* there instead and skip this call.
|
|
505
|
+
*
|
|
506
|
+
* The rate is settable only until the first single-sample wrap — see the
|
|
507
|
+
* throw below for why.
|
|
508
|
+
*/
|
|
509
|
+
setVideoTrackParams(trackId, timescale) {
|
|
510
|
+
assertTrackId(trackId, "video trackId");
|
|
511
|
+
assertTimescale(timescale, "video timescale");
|
|
512
|
+
if (trackId !== this.#videoTrackId && this.#videoInitTrackId !== null) {
|
|
513
|
+
throw new Error(
|
|
514
|
+
`video track ID cannot change from ${this.#videoTrackId} to ${trackId} after a video init has been cached; replace the init atomically`
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
if (timescale !== this.#videoTimescale && this.#videoBaseTs >= 0) {
|
|
518
|
+
throw new Error(
|
|
519
|
+
`video timescale cannot change from ${this.#videoTimescale} to ${timescale} after video samples have been wrapped; call reset() first`
|
|
520
|
+
);
|
|
521
|
+
}
|
|
522
|
+
this.#videoTrackId = trackId;
|
|
523
|
+
this.#videoTimescale = timescale;
|
|
524
|
+
}
|
|
525
|
+
/** Set init segment from MPU metadata packet (fragment_type=0).
|
|
526
|
+
* These are complete ftyp+moov bytes from FFmpeg — use directly. */
|
|
527
|
+
setInitSegmentFromMpu(data, isAudio) {
|
|
528
|
+
if (isAudio) {
|
|
529
|
+
this.#audioInitSegment = data;
|
|
530
|
+
} else {
|
|
531
|
+
this.#videoInitSegment = data;
|
|
532
|
+
this.#videoInitTrackId = null;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
/** Build init segment from codec config (catalog path — no MPU metadata available).
|
|
536
|
+
* Passing timescale/trackId also configures the wrappers via
|
|
537
|
+
* setVideoTrackParams, so init and media segments cannot disagree. */
|
|
538
|
+
buildVideoInit(avcC, width, height, timescale, trackId) {
|
|
539
|
+
const nextTimescale = timescale ?? this.#videoTimescale;
|
|
540
|
+
const nextTrackId = trackId ?? this.#videoTrackId;
|
|
541
|
+
assertTrackId(nextTrackId, "video trackId");
|
|
542
|
+
assertTimescale(nextTimescale, "video timescale");
|
|
543
|
+
if (nextTimescale !== this.#videoTimescale && this.#videoBaseTs >= 0) {
|
|
544
|
+
throw new Error(
|
|
545
|
+
`video timescale cannot change from ${this.#videoTimescale} to ${nextTimescale} after video samples have been wrapped; call reset() first`
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
const init = buildVideoInitSegment(
|
|
549
|
+
avcC,
|
|
550
|
+
width,
|
|
551
|
+
height,
|
|
552
|
+
nextTimescale,
|
|
553
|
+
nextTrackId
|
|
554
|
+
);
|
|
555
|
+
this.#videoTimescale = nextTimescale;
|
|
556
|
+
this.#videoTrackId = nextTrackId;
|
|
557
|
+
this.#videoInitSegment = init;
|
|
558
|
+
this.#videoInitTrackId = nextTrackId;
|
|
559
|
+
}
|
|
560
|
+
buildAudioInit(sampleRate, channels, asc, timescale) {
|
|
561
|
+
const ts = timescale ?? sampleRate;
|
|
562
|
+
const init = buildAudioInitSegment(sampleRate, channels, asc, ts);
|
|
563
|
+
this.#audioTimescale = ts;
|
|
564
|
+
this.#audioInitSegment = init;
|
|
565
|
+
}
|
|
566
|
+
get videoInitSegment() {
|
|
567
|
+
return this.#videoInitSegment;
|
|
568
|
+
}
|
|
569
|
+
get audioInitSegment() {
|
|
570
|
+
return this.#audioInitSegment;
|
|
571
|
+
}
|
|
572
|
+
/** Convert a raw video sample to an fMP4 moof+mdat segment. */
|
|
573
|
+
wrapVideoSample(data, timestamp, keyframe, duration, compositionTimeOffset) {
|
|
574
|
+
return this.wrapVideoSampleWithTiming(data, timestamp, keyframe, duration, compositionTimeOffset).segment;
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Convert a raw video sample and return the exact browser media interval
|
|
578
|
+
* encoded into tfdt/trun. Consumers that correlate SourceBuffer appends with
|
|
579
|
+
* requestVideoFrameCallback must use this rebased timestamp, not the wire or
|
|
580
|
+
* caller-owned timestamp passed above.
|
|
581
|
+
*
|
|
582
|
+
* `compositionTimeOffset` is the signed authored PTS-DTS delta, in the same
|
|
583
|
+
* #videoTimescale units as `timestamp` and `duration` — unlike wrapAudioSample,
|
|
584
|
+
* which takes microseconds and rescales, because every other quantity on this
|
|
585
|
+
* path is already denominated in #videoTimescale (see setVideoTrackParams).
|
|
586
|
+
* Passing it therefore needs no conversion here; rescaling would double-convert.
|
|
587
|
+
* Absent leaves the trun at version 0 with no offset field; a declared 0 is an
|
|
588
|
+
* authored value and still promotes to version 1. Never reconstruct it from
|
|
589
|
+
* arrival time.
|
|
590
|
+
*/
|
|
591
|
+
wrapVideoSampleWithTiming(data, timestamp, keyframe, duration, compositionTimeOffset) {
|
|
592
|
+
assertCompositionTimeOffsets([{ compositionTimeOffset }]);
|
|
593
|
+
if (duration !== void 0 && Number.isFinite(duration) && duration > 0) {
|
|
594
|
+
this.#frameDuration = Math.round(duration);
|
|
595
|
+
} else if (this.#lastVideoTimestamp > 0 && timestamp > this.#lastVideoTimestamp) {
|
|
596
|
+
const delta = timestamp - this.#lastVideoTimestamp;
|
|
597
|
+
if (delta > 0 && delta < this.#videoTimescale) this.#frameDuration = delta;
|
|
598
|
+
}
|
|
599
|
+
this.#lastVideoTimestamp = timestamp;
|
|
600
|
+
if (this.#videoBaseTs < 0) this.#videoBaseTs = timestamp;
|
|
601
|
+
const relTs = timestamp - this.#videoBaseTs;
|
|
602
|
+
const frameDuration = this.#videoFrameDuration;
|
|
603
|
+
return Object.freeze({
|
|
604
|
+
segment: encodeDataSegment(
|
|
605
|
+
data,
|
|
606
|
+
relTs,
|
|
607
|
+
frameDuration,
|
|
608
|
+
keyframe,
|
|
609
|
+
this.#videoSeq++,
|
|
610
|
+
this.#videoTrackId,
|
|
611
|
+
compositionTimeOffset
|
|
612
|
+
),
|
|
613
|
+
mediaTimestamp: relTs,
|
|
614
|
+
duration: frameDuration
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
/** Sticky duration if one has been observed, else ~30fps at the current rate. */
|
|
618
|
+
get #videoFrameDuration() {
|
|
619
|
+
return this.#frameDuration ?? Math.max(1, Math.round(this.#videoTimescale / 30));
|
|
620
|
+
}
|
|
621
|
+
/** Convert an append-safe video batch using the caller-owned timeline.
|
|
622
|
+
* Durations, baseDecodeTime, and compositionTimeOffset are in the
|
|
623
|
+
* configured video timescale. compositionTimeOffset is the signed PTS-DTS
|
|
624
|
+
* delta; its presence selects a version-1 trun for the whole batch.
|
|
625
|
+
* An explicit trackId is range-checked before #videoSeq++ for the same
|
|
626
|
+
* reason as wrapAudioSamples: the encoder's own check fires too late to
|
|
627
|
+
* keep the sequence ungapped. */
|
|
628
|
+
wrapVideoSamples(samples, baseDecodeTime, trackId = this.#videoTrackId) {
|
|
629
|
+
assertTrackId(trackId, "video trackId");
|
|
630
|
+
assertCompositionTimeOffsets(samples);
|
|
631
|
+
return encodeMultiSampleSegment(samples, baseDecodeTime, this.#videoSeq++, trackId);
|
|
632
|
+
}
|
|
633
|
+
// Audio timescale from init segment (default 1M µs; real FFmpeg init uses sampleRate).
|
|
634
|
+
// Set by buildAudioInit or setAudioTimescale.
|
|
635
|
+
#audioTimescale = 1e6;
|
|
636
|
+
/** Set audio timescale to match the init segment's mdhd timescale.
|
|
637
|
+
* Call after appending the real encoder init (FT=0 ftyp+moov).
|
|
638
|
+
* Fails closed on a value the mdhd uint32 cannot hold, as the video paths
|
|
639
|
+
* already do. wrapAudioSample rescales the authored composition offset by
|
|
640
|
+
* this value, so the two failure modes are both silent: a 0 multiplies
|
|
641
|
+
* every authored offset to 0 — indistinguishable from a feed that authored
|
|
642
|
+
* none — while a value above uint32 scales the trun to a timescale the
|
|
643
|
+
* mdhd cannot declare, since it is emitted with setUint32 modulo 2^32. */
|
|
644
|
+
setAudioTimescale(timescale) {
|
|
645
|
+
assertTimescale(timescale, "audio timescale");
|
|
646
|
+
this.#audioTimescale = timescale;
|
|
647
|
+
}
|
|
648
|
+
// Audio sample counter for drift-free baseMediaDecodeTime.
|
|
649
|
+
// AAC frames are exactly 1024 samples at sampleRate. Using sequential
|
|
650
|
+
// counter × 1024 avoids floating-point rounding drift from timestamp conversion.
|
|
651
|
+
#audioSampleCount = 0;
|
|
652
|
+
/** AAC access-unit length in samples. ISO/IEC 14496-3: an AAC-LC frame is
|
|
653
|
+
* exactly 1024 samples at every sample rate — it is not rate-dependent. */
|
|
654
|
+
#aacFrameSamples = 1024;
|
|
655
|
+
/** Convert a raw audio sample to an fMP4 moof+mdat segment. */
|
|
656
|
+
wrapAudioSample(data, timestamp, sampleDuration = 21333, compositionTimeOffset) {
|
|
657
|
+
assertCompositionTimeOffsets([{ compositionTimeOffset }]);
|
|
658
|
+
const sampleData = normalizeAacSampleForCmaf(data);
|
|
659
|
+
if (this.#audioBaseTs < 0) this.#audioBaseTs = timestamp;
|
|
660
|
+
const samplesPerFrame = this.#audioTimescale !== 1e6 ? this.#aacFrameSamples : sampleDuration;
|
|
661
|
+
const scaledTs = this.#audioTimescale !== 1e6 ? this.#audioSampleCount * samplesPerFrame : timestamp - this.#audioBaseTs;
|
|
662
|
+
this.#audioSampleCount++;
|
|
663
|
+
const scaledCompositionTimeOffset = compositionTimeOffset === void 0 || this.#audioTimescale === 1e6 ? compositionTimeOffset : Math.round(compositionTimeOffset * this.#audioTimescale / 1e6);
|
|
664
|
+
return encodeDataSegment(
|
|
665
|
+
sampleData,
|
|
666
|
+
scaledTs,
|
|
667
|
+
samplesPerFrame,
|
|
668
|
+
true,
|
|
669
|
+
this.#audioSeq++,
|
|
670
|
+
1,
|
|
671
|
+
scaledCompositionTimeOffset
|
|
672
|
+
);
|
|
673
|
+
}
|
|
674
|
+
/** Convert an ordered audio batch using the caller-owned timeline. */
|
|
675
|
+
wrapAudioSamples(samples, baseDecodeTime, trackId = 1) {
|
|
676
|
+
assertTrackId(trackId, "audio trackId");
|
|
677
|
+
assertCompositionTimeOffsets(samples);
|
|
678
|
+
return encodeMultiSampleSegment(
|
|
679
|
+
samples.map((sample) => ({
|
|
680
|
+
data: normalizeAacSampleForCmaf(sample.data),
|
|
681
|
+
duration: sample.duration,
|
|
682
|
+
keyframe: true,
|
|
683
|
+
compositionTimeOffset: sample.compositionTimeOffset
|
|
684
|
+
})),
|
|
685
|
+
baseDecodeTime,
|
|
686
|
+
this.#audioSeq++,
|
|
687
|
+
trackId
|
|
688
|
+
);
|
|
689
|
+
}
|
|
690
|
+
/** Clear per-stream sequencing and time bases.
|
|
691
|
+
* Cached init segments and the video track geometry survive, so a converter
|
|
692
|
+
* reset mid-subscription keeps emitting moofs the existing init can resolve.
|
|
693
|
+
* Clearing the timescale-denominated timing state also re-opens the video
|
|
694
|
+
* rate for change — this is the sanctioned way to retarget mid-subscription. */
|
|
695
|
+
reset() {
|
|
696
|
+
this.#videoSeq = 1;
|
|
697
|
+
this.#audioSeq = 1;
|
|
698
|
+
this.#audioSampleCount = 0;
|
|
699
|
+
this.#lastVideoTimestamp = 0;
|
|
700
|
+
this.#frameDuration = null;
|
|
701
|
+
this.#videoBaseTs = -1;
|
|
702
|
+
this.#audioBaseTs = -1;
|
|
703
|
+
this.#audioTimescale = 1e6;
|
|
704
|
+
}
|
|
705
|
+
};
|
|
706
|
+
export {
|
|
707
|
+
MmtpToCmaf,
|
|
708
|
+
buildAudioInitSegment,
|
|
709
|
+
buildHevcVideoInitSegment,
|
|
710
|
+
buildVideoInitSegment,
|
|
711
|
+
encodeDataSegment,
|
|
712
|
+
encodeMultiSampleSegment,
|
|
713
|
+
generateSilenceFrame,
|
|
714
|
+
normalizeAacSampleForCmaf
|
|
715
|
+
};
|
|
716
|
+
//# sourceMappingURL=mmtp-to-cmaf.js.map
|