@blockcast/mmt-container 0.3.0 → 0.4.0-main.1e94b11199ea
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 +33 -16
- package/dist/browser-runtime.js +14816 -14254
- package/dist/browser-runtime.js.map +4 -4
- package/dist/carp-catalog.d.ts +24 -19
- package/dist/carp-catalog.d.ts.map +1 -1
- package/dist/carp-catalog.js +32 -14
- package/dist/carp-catalog.js.map +4 -4
- package/dist/catalog-fec-params.d.ts +88 -28
- package/dist/catalog-fec-params.d.ts.map +1 -1
- package/dist/catalog-fec-params.js +60 -23
- package/dist/catalog-fec-params.js.map +4 -4
- package/dist/catalog-network-source.js +1 -7
- package/dist/catalog-network-source.js.map +4 -4
- package/dist/cmaf-block-assembler.d.ts +0 -2
- package/dist/cmaf-block-assembler.d.ts.map +1 -1
- package/dist/cmaf-block-assembler.js +0 -1
- package/dist/cmaf-block-assembler.js.map +2 -2
- package/dist/cmcd-producer.d.ts.map +1 -1
- package/dist/cmcd-producer.js +0 -4
- package/dist/cmcd-producer.js.map +2 -2
- package/dist/delivery-catalog.d.ts +124 -0
- package/dist/delivery-catalog.d.ts.map +1 -0
- package/dist/delivery-catalog.js +1857 -0
- package/dist/delivery-catalog.js.map +7 -0
- package/dist/delta-fallback-config.d.ts +42 -0
- package/dist/delta-fallback-config.d.ts.map +1 -0
- package/dist/delta-fallback-config.js +59 -0
- package/dist/delta-fallback-config.js.map +7 -0
- package/dist/fec-manager.d.ts +52 -30
- package/dist/fec-manager.d.ts.map +1 -1
- package/dist/fec-manager.js +338 -293
- package/dist/fec-manager.js.map +4 -4
- package/dist/fec-state.d.ts +19 -31
- package/dist/fec-state.d.ts.map +1 -1
- package/dist/fec-state.js +4 -10
- package/dist/fec-state.js.map +4 -4
- package/dist/fec-worker-setup.d.ts +18 -14
- package/dist/fec-worker-setup.d.ts.map +1 -1
- package/dist/fec-worker-setup.js +81 -96
- package/dist/fec-worker-setup.js.map +4 -4
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +2 -2
- package/dist/iso-block-locator.js +1 -7
- package/dist/iso-block-locator.js.map +4 -4
- package/dist/media-router.d.ts +20 -8
- package/dist/media-router.d.ts.map +1 -1
- package/dist/media-router.js +46 -21
- package/dist/media-router.js.map +2 -2
- package/dist/mfu-reassembler.js +24 -30
- package/dist/mfu-reassembler.js.map +4 -4
- package/dist/mmtp-container-parser.d.ts +14 -11
- package/dist/mmtp-container-parser.d.ts.map +1 -1
- package/dist/mmtp-container-parser.js +126 -99
- package/dist/mmtp-container-parser.js.map +4 -4
- package/dist/mmtp-container-parser.no-modules.js +154 -108
- package/dist/mmtp-container-parser.no-modules.js.map +4 -4
- package/dist/mmtp-decode-pipeline.js +126 -99
- package/dist/mmtp-decode-pipeline.js.map +4 -4
- package/dist/mmtp-router.d.ts +51 -29
- package/dist/mmtp-router.d.ts.map +1 -1
- package/dist/mmtp-router.js +260 -326
- package/dist/mmtp-router.js.map +4 -4
- package/dist/multicast-input.js +1 -7
- package/dist/multicast-input.js.map +4 -4
- package/dist/multicast-manager.d.ts +72 -6
- package/dist/multicast-manager.d.ts.map +1 -1
- package/dist/multicast-manager.js +882 -673
- package/dist/multicast-manager.js.map +4 -4
- package/dist/multicast-transport.d.ts +1 -1
- package/dist/multicast-transport.d.ts.map +1 -1
- package/dist/multicast-transport.js +44 -26
- package/dist/multicast-transport.js.map +4 -4
- package/dist/multicast-unwrap.js +29 -35
- package/dist/multicast-unwrap.js.map +4 -4
- package/dist/no-modules.js +150 -106
- package/dist/no-modules.js.map +4 -4
- package/dist/repair-fetch.d.ts +116 -21
- package/dist/repair-fetch.d.ts.map +1 -1
- package/dist/repair-fetch.js +114 -34
- package/dist/repair-fetch.js.map +4 -4
- package/dist/repair-layers.d.ts +18 -7
- package/dist/repair-layers.d.ts.map +1 -1
- package/dist/repair-layers.js +12 -10
- package/dist/repair-layers.js.map +4 -4
- package/dist/signaling.js +2 -11
- package/dist/signaling.js.map +4 -4
- package/dist/timestamp-codec.js +24 -30
- package/dist/timestamp-codec.js.map +4 -4
- package/dist/track-session.d.ts +7 -0
- package/dist/track-session.d.ts.map +1 -1
- package/dist/track-session.js +15 -8
- package/dist/track-session.js.map +2 -2
- package/dist/wasm-mfu-reassembler.js +1 -7
- package/dist/wasm-mfu-reassembler.js.map +4 -4
- package/dist/wasm-mmtp-container-parser.js +126 -99
- package/dist/wasm-mmtp-container-parser.js.map +4 -4
- package/package.json +7 -14
- package/schemas/catalog.schema.json +3 -3
- package/src/carp-catalog.ts +51 -24
- package/src/catalog-fec-params.ts +173 -64
- package/src/cmaf-block-assembler.ts +1 -4
- package/src/cmcd-producer.ts +0 -6
- package/src/delivery-catalog.ts +498 -0
- package/src/delta-fallback-config.ts +72 -0
- package/src/fec-manager.ts +457 -334
- package/src/fec-state.ts +20 -32
- package/src/fec-worker-setup.ts +109 -90
- package/src/index.ts +32 -0
- package/src/media-router.ts +59 -21
- package/src/mmtp-container-parser.ts +106 -20
- package/src/mmtp-router.ts +189 -330
- package/src/multicast-manager.ts +265 -86
- package/src/multicast-transport.ts +16 -9
- package/src/repair-fetch.ts +273 -43
- package/src/repair-layers.ts +28 -8
- package/src/track-session.ts +28 -9
- package/test-vectors/catalog/README.md +44 -18
- package/test-vectors/catalog/negative/fec-block-profile-retired.json +52 -0
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +1 -1
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +1 -1
- package/test-vectors/catalog/negative/multicast-endpoint-relay-address.json +39 -0
- package/test-vectors/catalog/negative/multicast-network-source-empty.json +1 -1
- package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +1 -1
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +2 -1
- package/test-vectors/catalog/positive/fec-layered-repair.json +2 -2
- package/test-vectors/catalog/positive/fec-multicast.json +2 -1
- package/test-vectors/catalog/positive/multicast-amt-manual-relay.json +38 -0
- package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +2 -1
- package/test-vectors/catalog/section-codes.json +33 -0
- package/test-vectors/catalog-timing.json +356 -0
- package/test-vectors/catalog-validation.json +40 -5
- package/test-vectors/delivery-catalog/README.md +11 -0
- package/test-vectors/delivery-catalog/negative/missing-block-profile.json +58 -0
- package/test-vectors/delivery-catalog/negative/packet-id-signaling.json +59 -0
- package/test-vectors/delivery-catalog/negative/retired-k-padded-block-profile.json +59 -0
- package/test-vectors/delivery-catalog/positive/dash.json +56 -0
- package/test-vectors/delivery-catalog/positive/mmtp-source-only.json +43 -0
- package/node_modules/@blockcast/fec-worker/README.md +0 -223
- package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +0 -38
- package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/block-order.js +0 -78
- package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +0 -93
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +0 -346
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +0 -380
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +0 -11
- package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +0 -14
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +0 -859
- package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +0 -7
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts +0 -10
- package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/index.js +0 -8
- package/node_modules/@blockcast/fec-worker/dist/index.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +0 -20
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +0 -370
- package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +0 -7
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +0 -104
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +0 -181
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +0 -194
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +0 -62
- package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +0 -9
- package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +0 -1
- package/node_modules/@blockcast/fec-worker/dist/transfer.js +0 -13
- package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +0 -1
- package/node_modules/@blockcast/fec-worker/package.json +0 -59
- package/node_modules/@blockcast/fec-worker/src/block-order.ts +0 -93
- package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +0 -392
- package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +0 -399
- package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +0 -1502
- package/node_modules/@blockcast/fec-worker/src/index.ts +0 -35
- package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +0 -589
- package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +0 -222
- package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +0 -209
- package/node_modules/@blockcast/fec-worker/src/transfer.ts +0 -12
- package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
- package/node_modules/@blockcast/mmt-base/README.md +0 -134
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
- package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/package.json +0 -49
- package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
- package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
- package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
- package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
- package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
- package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
- package/node_modules/@blockcast/mmt-fec/README.md +0 -271
- package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +0 -82
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +0 -296
- package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +0 -106
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +0 -288
- package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +0 -46
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +0 -96
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +0 -33
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +0 -57
- package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +0 -205
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +0 -240
- package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +0 -28
- package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/index.js +0 -28
- package/node_modules/@blockcast/mmt-fec/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +0 -20
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +0 -28
- package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +0 -258
- package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/oti.js +0 -382
- package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +0 -41
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +0 -81
- package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts +0 -82
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.js +0 -170
- package/node_modules/@blockcast/mmt-fec/dist/repair-group.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
- 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 +0 -57
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +0 -134
- 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 +0 -55
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +0 -49
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
- package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
- package/node_modules/@blockcast/mmt-fec/package.json +0 -79
- package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +0 -371
- package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +0 -439
- package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +0 -127
- package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +0 -68
- package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +0 -310
- package/node_modules/@blockcast/mmt-fec/src/index.ts +0 -94
- package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +0 -34
- package/node_modules/@blockcast/mmt-fec/src/oti.ts +0 -463
- package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +0 -101
- package/node_modules/@blockcast/mmt-fec/src/repair-group.ts +0 -195
- package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +0 -28
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +0 -128
- package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +0 -4
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +0 -4
- package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +0 -37
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +0 -179
- package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +0 -99
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +0 -492
- package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +0 -1
- package/node_modules/@blockcast/mmt-manifest-verify/package.json +0 -45
- package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +0 -171
- package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +0 -3
- package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +0 -230
- package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +0 -669
- package/node_modules/@noble/hashes/LICENSE +0 -21
- package/node_modules/@noble/hashes/README.md +0 -521
- package/node_modules/@noble/hashes/_assert.d.ts +0 -17
- package/node_modules/@noble/hashes/_assert.d.ts.map +0 -1
- package/node_modules/@noble/hashes/_assert.js +0 -18
- package/node_modules/@noble/hashes/_assert.js.map +0 -1
- package/node_modules/@noble/hashes/_blake.d.ts +0 -14
- package/node_modules/@noble/hashes/_blake.d.ts.map +0 -1
- package/node_modules/@noble/hashes/_blake.js +0 -50
- package/node_modules/@noble/hashes/_blake.js.map +0 -1
- package/node_modules/@noble/hashes/_md.d.ts +0 -51
- package/node_modules/@noble/hashes/_md.d.ts.map +0 -1
- package/node_modules/@noble/hashes/_md.js +0 -162
- package/node_modules/@noble/hashes/_md.js.map +0 -1
- package/node_modules/@noble/hashes/_u64.d.ts +0 -55
- package/node_modules/@noble/hashes/_u64.d.ts.map +0 -1
- package/node_modules/@noble/hashes/_u64.js +0 -90
- package/node_modules/@noble/hashes/_u64.js.map +0 -1
- package/node_modules/@noble/hashes/argon2.d.ts +0 -32
- package/node_modules/@noble/hashes/argon2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/argon2.js +0 -401
- package/node_modules/@noble/hashes/argon2.js.map +0 -1
- package/node_modules/@noble/hashes/blake1.d.ts +0 -106
- package/node_modules/@noble/hashes/blake1.d.ts.map +0 -1
- package/node_modules/@noble/hashes/blake1.js +0 -459
- package/node_modules/@noble/hashes/blake1.js.map +0 -1
- package/node_modules/@noble/hashes/blake2.d.ts +0 -116
- package/node_modules/@noble/hashes/blake2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/blake2.js +0 -420
- package/node_modules/@noble/hashes/blake2.js.map +0 -1
- package/node_modules/@noble/hashes/blake2b.d.ts +0 -11
- package/node_modules/@noble/hashes/blake2b.d.ts.map +0 -1
- package/node_modules/@noble/hashes/blake2b.js +0 -14
- package/node_modules/@noble/hashes/blake2b.js.map +0 -1
- package/node_modules/@noble/hashes/blake2s.d.ts +0 -20
- package/node_modules/@noble/hashes/blake2s.d.ts.map +0 -1
- package/node_modules/@noble/hashes/blake2s.js +0 -24
- package/node_modules/@noble/hashes/blake2s.js.map +0 -1
- package/node_modules/@noble/hashes/blake3.d.ts +0 -54
- package/node_modules/@noble/hashes/blake3.d.ts.map +0 -1
- package/node_modules/@noble/hashes/blake3.js +0 -255
- package/node_modules/@noble/hashes/blake3.js.map +0 -1
- package/node_modules/@noble/hashes/crypto.d.ts +0 -2
- package/node_modules/@noble/hashes/crypto.d.ts.map +0 -1
- package/node_modules/@noble/hashes/crypto.js +0 -5
- package/node_modules/@noble/hashes/crypto.js.map +0 -1
- package/node_modules/@noble/hashes/cryptoNode.d.ts +0 -2
- package/node_modules/@noble/hashes/cryptoNode.d.ts.map +0 -1
- package/node_modules/@noble/hashes/cryptoNode.js +0 -18
- package/node_modules/@noble/hashes/cryptoNode.js.map +0 -1
- package/node_modules/@noble/hashes/eskdf.d.ts +0 -47
- package/node_modules/@noble/hashes/eskdf.d.ts.map +0 -1
- package/node_modules/@noble/hashes/eskdf.js +0 -166
- package/node_modules/@noble/hashes/eskdf.js.map +0 -1
- package/node_modules/@noble/hashes/esm/_assert.d.ts +0 -17
- package/node_modules/@noble/hashes/esm/_assert.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/_assert.js +0 -15
- package/node_modules/@noble/hashes/esm/_assert.js.map +0 -1
- package/node_modules/@noble/hashes/esm/_blake.d.ts +0 -14
- package/node_modules/@noble/hashes/esm/_blake.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/_blake.js +0 -45
- package/node_modules/@noble/hashes/esm/_blake.js.map +0 -1
- package/node_modules/@noble/hashes/esm/_md.d.ts +0 -51
- package/node_modules/@noble/hashes/esm/_md.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/_md.js +0 -155
- package/node_modules/@noble/hashes/esm/_md.js.map +0 -1
- package/node_modules/@noble/hashes/esm/_u64.d.ts +0 -55
- package/node_modules/@noble/hashes/esm/_u64.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/_u64.js +0 -67
- package/node_modules/@noble/hashes/esm/_u64.js.map +0 -1
- package/node_modules/@noble/hashes/esm/argon2.d.ts +0 -32
- package/node_modules/@noble/hashes/esm/argon2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/argon2.js +0 -392
- package/node_modules/@noble/hashes/esm/argon2.js.map +0 -1
- package/node_modules/@noble/hashes/esm/blake1.d.ts +0 -106
- package/node_modules/@noble/hashes/esm/blake1.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/blake1.js +0 -452
- package/node_modules/@noble/hashes/esm/blake1.js.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2.d.ts +0 -116
- package/node_modules/@noble/hashes/esm/blake2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2.js +0 -413
- package/node_modules/@noble/hashes/esm/blake2.js.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2b.d.ts +0 -11
- package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2b.js +0 -11
- package/node_modules/@noble/hashes/esm/blake2b.js.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2s.d.ts +0 -20
- package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/blake2s.js +0 -21
- package/node_modules/@noble/hashes/esm/blake2s.js.map +0 -1
- package/node_modules/@noble/hashes/esm/blake3.d.ts +0 -54
- package/node_modules/@noble/hashes/esm/blake3.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/blake3.js +0 -251
- package/node_modules/@noble/hashes/esm/blake3.js.map +0 -1
- package/node_modules/@noble/hashes/esm/crypto.d.ts +0 -2
- package/node_modules/@noble/hashes/esm/crypto.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/crypto.js +0 -2
- package/node_modules/@noble/hashes/esm/crypto.js.map +0 -1
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +0 -2
- package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/cryptoNode.js +0 -15
- package/node_modules/@noble/hashes/esm/cryptoNode.js.map +0 -1
- package/node_modules/@noble/hashes/esm/eskdf.d.ts +0 -47
- package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/eskdf.js +0 -160
- package/node_modules/@noble/hashes/esm/eskdf.js.map +0 -1
- package/node_modules/@noble/hashes/esm/hkdf.d.ts +0 -36
- package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/hkdf.js +0 -82
- package/node_modules/@noble/hashes/esm/hkdf.js.map +0 -1
- package/node_modules/@noble/hashes/esm/hmac.d.ts +0 -35
- package/node_modules/@noble/hashes/esm/hmac.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/hmac.js +0 -86
- package/node_modules/@noble/hashes/esm/hmac.js.map +0 -1
- package/node_modules/@noble/hashes/esm/index.d.ts +0 -2
- package/node_modules/@noble/hashes/esm/index.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/index.js +0 -33
- package/node_modules/@noble/hashes/esm/index.js.map +0 -1
- package/node_modules/@noble/hashes/esm/legacy.d.ts +0 -71
- package/node_modules/@noble/hashes/esm/legacy.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/legacy.js +0 -281
- package/node_modules/@noble/hashes/esm/legacy.js.map +0 -1
- package/node_modules/@noble/hashes/esm/package.json +0 -10
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +0 -23
- package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/pbkdf2.js +0 -97
- package/node_modules/@noble/hashes/esm/pbkdf2.js.map +0 -1
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts +0 -13
- package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/ripemd160.js +0 -13
- package/node_modules/@noble/hashes/esm/ripemd160.js.map +0 -1
- package/node_modules/@noble/hashes/esm/scrypt.d.ts +0 -34
- package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/scrypt.js +0 -228
- package/node_modules/@noble/hashes/esm/scrypt.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha1.d.ts +0 -11
- package/node_modules/@noble/hashes/esm/sha1.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha1.js +0 -11
- package/node_modules/@noble/hashes/esm/sha1.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha2.d.ts +0 -159
- package/node_modules/@noble/hashes/esm/sha2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha2.js +0 -375
- package/node_modules/@noble/hashes/esm/sha2.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha256.d.ts +0 -20
- package/node_modules/@noble/hashes/esm/sha256.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha256.js +0 -20
- package/node_modules/@noble/hashes/esm/sha256.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +0 -142
- package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha3-addons.js +0 -393
- package/node_modules/@noble/hashes/esm/sha3-addons.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha3.d.ts +0 -53
- package/node_modules/@noble/hashes/esm/sha3.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha3.js +0 -234
- package/node_modules/@noble/hashes/esm/sha3.js.map +0 -1
- package/node_modules/@noble/hashes/esm/sha512.d.ts +0 -26
- package/node_modules/@noble/hashes/esm/sha512.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/sha512.js +0 -26
- package/node_modules/@noble/hashes/esm/sha512.js.map +0 -1
- package/node_modules/@noble/hashes/esm/utils.d.ts +0 -161
- package/node_modules/@noble/hashes/esm/utils.d.ts.map +0 -1
- package/node_modules/@noble/hashes/esm/utils.js +0 -281
- package/node_modules/@noble/hashes/esm/utils.js.map +0 -1
- package/node_modules/@noble/hashes/hkdf.d.ts +0 -36
- package/node_modules/@noble/hashes/hkdf.d.ts.map +0 -1
- package/node_modules/@noble/hashes/hkdf.js +0 -88
- package/node_modules/@noble/hashes/hkdf.js.map +0 -1
- package/node_modules/@noble/hashes/hmac.d.ts +0 -35
- package/node_modules/@noble/hashes/hmac.d.ts.map +0 -1
- package/node_modules/@noble/hashes/hmac.js +0 -91
- package/node_modules/@noble/hashes/hmac.js.map +0 -1
- package/node_modules/@noble/hashes/index.d.ts +0 -1
- package/node_modules/@noble/hashes/index.d.ts.map +0 -1
- package/node_modules/@noble/hashes/index.js +0 -33
- package/node_modules/@noble/hashes/index.js.map +0 -1
- package/node_modules/@noble/hashes/legacy.d.ts +0 -71
- package/node_modules/@noble/hashes/legacy.d.ts.map +0 -1
- package/node_modules/@noble/hashes/legacy.js +0 -287
- package/node_modules/@noble/hashes/legacy.js.map +0 -1
- package/node_modules/@noble/hashes/package.json +0 -266
- package/node_modules/@noble/hashes/pbkdf2.d.ts +0 -23
- package/node_modules/@noble/hashes/pbkdf2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/pbkdf2.js +0 -101
- package/node_modules/@noble/hashes/pbkdf2.js.map +0 -1
- package/node_modules/@noble/hashes/ripemd160.d.ts +0 -13
- package/node_modules/@noble/hashes/ripemd160.d.ts.map +0 -1
- package/node_modules/@noble/hashes/ripemd160.js +0 -16
- package/node_modules/@noble/hashes/ripemd160.js.map +0 -1
- package/node_modules/@noble/hashes/scrypt.d.ts +0 -34
- package/node_modules/@noble/hashes/scrypt.d.ts.map +0 -1
- package/node_modules/@noble/hashes/scrypt.js +0 -232
- package/node_modules/@noble/hashes/scrypt.js.map +0 -1
- package/node_modules/@noble/hashes/sha1.d.ts +0 -11
- package/node_modules/@noble/hashes/sha1.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha1.js +0 -14
- package/node_modules/@noble/hashes/sha1.js.map +0 -1
- package/node_modules/@noble/hashes/sha2.d.ts +0 -159
- package/node_modules/@noble/hashes/sha2.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha2.js +0 -384
- package/node_modules/@noble/hashes/sha2.js.map +0 -1
- package/node_modules/@noble/hashes/sha256.d.ts +0 -20
- package/node_modules/@noble/hashes/sha256.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha256.js +0 -23
- package/node_modules/@noble/hashes/sha256.js.map +0 -1
- package/node_modules/@noble/hashes/sha3-addons.d.ts +0 -142
- package/node_modules/@noble/hashes/sha3-addons.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha3-addons.js +0 -402
- package/node_modules/@noble/hashes/sha3-addons.js.map +0 -1
- package/node_modules/@noble/hashes/sha3.d.ts +0 -53
- package/node_modules/@noble/hashes/sha3.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha3.js +0 -239
- package/node_modules/@noble/hashes/sha3.js.map +0 -1
- package/node_modules/@noble/hashes/sha512.d.ts +0 -26
- package/node_modules/@noble/hashes/sha512.d.ts.map +0 -1
- package/node_modules/@noble/hashes/sha512.js +0 -29
- package/node_modules/@noble/hashes/sha512.js.map +0 -1
- package/node_modules/@noble/hashes/src/_assert.ts +0 -22
- package/node_modules/@noble/hashes/src/_blake.ts +0 -50
- package/node_modules/@noble/hashes/src/_md.ts +0 -176
- package/node_modules/@noble/hashes/src/_u64.ts +0 -91
- package/node_modules/@noble/hashes/src/argon2.ts +0 -497
- package/node_modules/@noble/hashes/src/blake1.ts +0 -534
- package/node_modules/@noble/hashes/src/blake2.ts +0 -486
- package/node_modules/@noble/hashes/src/blake2b.ts +0 -10
- package/node_modules/@noble/hashes/src/blake2s.ts +0 -20
- package/node_modules/@noble/hashes/src/blake3.ts +0 -272
- package/node_modules/@noble/hashes/src/crypto.ts +0 -9
- package/node_modules/@noble/hashes/src/cryptoNode.ts +0 -15
- package/node_modules/@noble/hashes/src/eskdf.ts +0 -187
- package/node_modules/@noble/hashes/src/hkdf.ts +0 -88
- package/node_modules/@noble/hashes/src/hmac.ts +0 -94
- package/node_modules/@noble/hashes/src/index.ts +0 -31
- package/node_modules/@noble/hashes/src/legacy.ts +0 -293
- package/node_modules/@noble/hashes/src/pbkdf2.ts +0 -122
- package/node_modules/@noble/hashes/src/ripemd160.ts +0 -12
- package/node_modules/@noble/hashes/src/scrypt.ts +0 -257
- package/node_modules/@noble/hashes/src/sha1.ts +0 -10
- package/node_modules/@noble/hashes/src/sha2.ts +0 -402
- package/node_modules/@noble/hashes/src/sha256.ts +0 -24
- package/node_modules/@noble/hashes/src/sha3-addons.ts +0 -499
- package/node_modules/@noble/hashes/src/sha3.ts +0 -258
- package/node_modules/@noble/hashes/src/sha512.ts +0 -34
- package/node_modules/@noble/hashes/src/utils.ts +0 -395
- package/node_modules/@noble/hashes/utils.d.ts +0 -161
- package/node_modules/@noble/hashes/utils.d.ts.map +0 -1
- package/node_modules/@noble/hashes/utils.js +0 -313
- package/node_modules/@noble/hashes/utils.js.map +0 -1
package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zero-dependency helper for extracting the detached ALTA authenticator trailer
|
|
3
|
-
* from an MMTP source packet.
|
|
4
|
-
*
|
|
5
|
-
* Lives in its own leaf package so both `@blockcast/mmt-container` (wire-path
|
|
6
|
-
* parsing) and `@blockcast/fec-worker` (FEC-recovered-source parsing) can share
|
|
7
|
-
* one implementation without creating a package cycle between them.
|
|
8
|
-
*
|
|
9
|
-
* Spec: ISO/IEC 23008-1:2023 + draft-ramadan-moq-mmt §12 (detached trailer, Path 2).
|
|
10
|
-
*/
|
|
11
|
-
// --- Private MMTP/MPU/MFU constants (ISO/IEC 23008-1 §9.2.2–9.2.3) ---
|
|
12
|
-
// Duplicated here as immutable spec values so this package stays a leaf with
|
|
13
|
-
// zero `@blockcast/*` dependencies. Re-deriving from `mmt-container` would
|
|
14
|
-
// reintroduce the package cycle this split exists to avoid.
|
|
15
|
-
const MMTP_HEADER_SIZE = 12;
|
|
16
|
-
const MPU_HEADER_SIZE = 8;
|
|
17
|
-
const MPU_LENGTH_FIELD_SIZE = 2;
|
|
18
|
-
const MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
|
|
19
|
-
const TIMED_MFU_DU_HEADER_SIZE = 14;
|
|
20
|
-
const NONTIMED_MFU_DU_HEADER_SIZE = 4;
|
|
21
|
-
const PACKET_TYPE_MPU = 0x00;
|
|
22
|
-
// --- Public ALTA trailer constants ---
|
|
23
|
-
/**
|
|
24
|
-
* MMTP header-extension ext_type assigned to the detached ALTA authenticator
|
|
25
|
-
* trailer (Path 2 / 08-07). Carried in an `[ext_type][ext_length][auth]`
|
|
26
|
-
* block appended after the MPU's declared payload bytes, before the 4-byte
|
|
27
|
-
* Source FEC Payload ID. MMTP X-bit stays 0 — non-ALTA MMTP receivers treat
|
|
28
|
-
* the trailer as bytes past `payload_length` and skip it (per ISO 23008-1
|
|
29
|
-
* §9.2.2 "may be discarded without impacting correct processing").
|
|
30
|
-
*/
|
|
31
|
-
export const MMTP_EXT_TYPE_ALTA_AUTH = 0xf0a1;
|
|
32
|
-
/** Fixed size of the trailer's `[ext_type][ext_length]` prefix (2 + 2 BE). */
|
|
33
|
-
export const MMTP_EXT_TRAILER_HEADER_SIZE = 4;
|
|
34
|
-
/**
|
|
35
|
-
* Extract the detached ALTA authenticator trailer from an MMTP source packet.
|
|
36
|
-
*
|
|
37
|
-
* Wire layout:
|
|
38
|
-
* `[MMTP hdr][length(2)][remaining MPU hdr(6)][DU?][media][TRAILER][SS_ID?]`
|
|
39
|
-
* `payload_length = 6 + DU bytes + media bytes`
|
|
40
|
-
*
|
|
41
|
-
* Returns `null` when:
|
|
42
|
-
* - the packet is too small / malformed,
|
|
43
|
-
* - `payload_length` cannot contain the remaining six MPU-header bytes,
|
|
44
|
-
* - the declared payload overruns the packet,
|
|
45
|
-
* - no bytes remain between `payload_length` and the SS_ID,
|
|
46
|
-
* - the trailer's `ext_type` isn't {@link MMTP_EXT_TYPE_ALTA_AUTH},
|
|
47
|
-
* - the declared `ext_length` would extend past the SS_ID boundary.
|
|
48
|
-
*
|
|
49
|
-
* Non-MPU packets (repair, signaling) always return `null`.
|
|
50
|
-
*
|
|
51
|
-
* @param options.skipFecId When true, do NOT reserve 4 trailing bytes for the
|
|
52
|
-
* Source FEC Payload ID. Use on FEC-recovered symbols where the PID has
|
|
53
|
-
* already been stripped upstream.
|
|
54
|
-
*/
|
|
55
|
-
export function extractAltaTrailer(mmtpPacket, options) {
|
|
56
|
-
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
57
|
-
return null;
|
|
58
|
-
// ISO/IEC 23008-1:2023 Figure 8 places V=0 packet_type in the low six bits.
|
|
59
|
-
const packetType = mmtpPacket[1] & 0x3f;
|
|
60
|
-
if (packetType !== PACKET_TYPE_MPU)
|
|
61
|
-
return null;
|
|
62
|
-
const fecType = (mmtpPacket[0] >> 3) & 0x03;
|
|
63
|
-
let headerLength = MMTP_HEADER_SIZE;
|
|
64
|
-
if (fecType < 2 && (mmtpPacket[0] & 0x20) !== 0)
|
|
65
|
-
headerLength += 4;
|
|
66
|
-
if (fecType < 2 && (mmtpPacket[0] & 0x02) !== 0) {
|
|
67
|
-
if (headerLength + 4 > mmtpPacket.length)
|
|
68
|
-
return null;
|
|
69
|
-
const extensionLength = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + headerLength + 2, 2).getUint16(0, false);
|
|
70
|
-
headerLength += 4 + extensionLength;
|
|
71
|
-
}
|
|
72
|
-
if (headerLength + MPU_HEADER_SIZE > mmtpPacket.length)
|
|
73
|
-
return null;
|
|
74
|
-
const payload = mmtpPacket.subarray(headerLength);
|
|
75
|
-
// Inline a minimal MPU-header read — only the fields extractAltaTrailer needs.
|
|
76
|
-
// payloadLength: 16 BE at bytes 0-1.
|
|
77
|
-
// Byte 2 packs FT(4) | T(1) | FI(2) | A(1).
|
|
78
|
-
const payloadLength = (payload[0] << 8) | payload[1];
|
|
79
|
-
const flagsByte = payload[2];
|
|
80
|
-
const fragmentType = (flagsByte >> 4) & 0x0f;
|
|
81
|
-
const timed = ((flagsByte >> 3) & 0x01) === 1;
|
|
82
|
-
const fragmentationIndicator = (flagsByte >> 1) & 0x03;
|
|
83
|
-
// Only MFU packets (FT=2) carry the detached trailer.
|
|
84
|
-
if (fragmentType !== 2)
|
|
85
|
-
return null;
|
|
86
|
-
// FI=0/1 structurally carries a DU header; FI=2/3 does not. Require at
|
|
87
|
-
// least one media byte after that deterministic layout so the bytes at the
|
|
88
|
-
// declared boundary cannot impersonate ALTA for a header-only fragment.
|
|
89
|
-
const dataUnitHeaderSize = fragmentationIndicator <= 1
|
|
90
|
-
? (timed ? TIMED_MFU_DU_HEADER_SIZE : NONTIMED_MFU_DU_HEADER_SIZE)
|
|
91
|
-
: 0;
|
|
92
|
-
if (payloadLength <= MPU_HEADER_REMAINDER_SIZE + dataUnitHeaderSize)
|
|
93
|
-
return null;
|
|
94
|
-
if (fecType > 1)
|
|
95
|
-
return null;
|
|
96
|
-
const hasFecId = !options?.skipFecId && fecType === 1;
|
|
97
|
-
const payloadEnd = hasFecId ? payload.length - 4 : payload.length;
|
|
98
|
-
const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
|
|
99
|
-
if (declaredEnd > payloadEnd)
|
|
100
|
-
return null;
|
|
101
|
-
if (declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE > payloadEnd)
|
|
102
|
-
return null;
|
|
103
|
-
const extType = (payload[declaredEnd] << 8) | payload[declaredEnd + 1];
|
|
104
|
-
if (extType !== MMTP_EXT_TYPE_ALTA_AUTH)
|
|
105
|
-
return null;
|
|
106
|
-
const extLen = (payload[declaredEnd + 2] << 8) | payload[declaredEnd + 3];
|
|
107
|
-
const authStart = declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE;
|
|
108
|
-
if (authStart + extLen !== payloadEnd)
|
|
109
|
-
return null;
|
|
110
|
-
return {
|
|
111
|
-
auth: payload.subarray(authStart, payloadEnd),
|
|
112
|
-
signedEnd: headerLength + declaredEnd,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=index.js.map
|
package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,wEAAwE;AACxE,6EAA6E;AAC7E,2EAA2E;AAC3E,4DAA4D;AAE5D,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAC/B,MAAM,yBAAyB,GAAG,eAAe,GAAG,qBAAqB,CAAA;AACzE,MAAM,wBAAwB,GAAG,EAAE,CAAA;AACnC,MAAM,2BAA2B,GAAG,CAAC,CAAA;AACrC,MAAM,eAAe,GAAG,IAAI,CAAA;AAE5B,wCAAwC;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAA;AAE7C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAc7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,OAAiC;IAEjC,IAAI,UAAU,CAAC,MAAM,GAAG,gBAAgB,GAAG,eAAe;QAAE,OAAO,IAAI,CAAA;IACvE,4EAA4E;IAC5E,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAE,GAAG,IAAI,CAAA;IACxC,IAAI,UAAU,KAAK,eAAe;QAAE,OAAO,IAAI,CAAA;IAE/C,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IAC5C,IAAI,YAAY,GAAG,gBAAgB,CAAA;IACnC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAAE,YAAY,IAAI,CAAC,CAAA;IACnE,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACrD,MAAM,eAAe,GAAG,IAAI,QAAQ,CAClC,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,UAAU,GAAG,YAAY,GAAG,CAAC,EACxC,CAAC,CACF,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACrB,YAAY,IAAI,CAAC,GAAG,eAAe,CAAA;IACrC,CAAC;IACD,IAAI,YAAY,GAAG,eAAe,GAAG,UAAU,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAEnE,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IAEjD,+EAA+E;IAC/E,qCAAqC;IACrC,4CAA4C;IAC5C,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;IAC7B,MAAM,YAAY,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,sBAAsB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IAEtD,sDAAsD;IACtD,IAAI,YAAY,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,uEAAuE;IACvE,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,kBAAkB,GAAG,sBAAsB,IAAI,CAAC;QACpD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,2BAA2B,CAAC;QAClE,CAAC,CAAC,CAAC,CAAA;IACL,IAAI,aAAa,IAAI,yBAAyB,GAAG,kBAAkB;QAAE,OAAO,IAAI,CAAA;IAEhF,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,SAAS,IAAI,OAAO,KAAK,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAA;IACjE,MAAM,WAAW,GAAG,qBAAqB,GAAG,aAAa,CAAA;IACzD,IAAI,WAAW,GAAG,UAAU;QAAE,OAAO,IAAI,CAAA;IAEzC,IAAI,WAAW,GAAG,4BAA4B,GAAG,UAAU;QAAE,OAAO,IAAI,CAAA;IACxE,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,CAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAE,CAAA;IACxE,IAAI,OAAO,KAAK,uBAAuB;QAAE,OAAO,IAAI,CAAA;IACpD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAE,CAAA;IAE3E,MAAM,SAAS,GAAG,WAAW,GAAG,4BAA4B,CAAA;IAC5D,IAAI,SAAS,GAAG,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;QAC7C,SAAS,EAAE,YAAY,GAAG,WAAW;KACtC,CAAA;AACH,CAAC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@blockcast/mmt-alta-parse",
|
|
3
|
-
"version": "0.3.0",
|
|
4
|
-
"description": "Zero-dependency leaf: extract the detached ALTA authenticator trailer from an MMTP source packet",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"files": [
|
|
15
|
-
"dist",
|
|
16
|
-
"src",
|
|
17
|
-
"!src/**/*.test.ts",
|
|
18
|
-
"!src/**/*.spec.ts",
|
|
19
|
-
"!src/**/__tests__",
|
|
20
|
-
"!dist/**/*.test.*",
|
|
21
|
-
"!dist/**/*.spec.*"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc",
|
|
25
|
-
"dev": "tsc --watch",
|
|
26
|
-
"clean": "rm -rf dist",
|
|
27
|
-
"typecheck": "tsc --noEmit",
|
|
28
|
-
"test": "vitest run",
|
|
29
|
-
"test:watch": "vitest"
|
|
30
|
-
},
|
|
31
|
-
"dependencies": {},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"typescript": "^5.3.0",
|
|
34
|
-
"vitest": "^1.0.0"
|
|
35
|
-
},
|
|
36
|
-
"keywords": [
|
|
37
|
-
"mmt",
|
|
38
|
-
"mmtp",
|
|
39
|
-
"alta",
|
|
40
|
-
"authenticator",
|
|
41
|
-
"trailer",
|
|
42
|
-
"iso23008-1"
|
|
43
|
-
],
|
|
44
|
-
"license": "Apache-2.0",
|
|
45
|
-
"repository": {
|
|
46
|
-
"type": "git",
|
|
47
|
-
"url": "https://github.com/Blockcast/libmmt.git",
|
|
48
|
-
"directory": "packages/mmt-alta-parse"
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zero-dependency helper for extracting the detached ALTA authenticator trailer
|
|
3
|
-
* from an MMTP source packet.
|
|
4
|
-
*
|
|
5
|
-
* Lives in its own leaf package so both `@blockcast/mmt-container` (wire-path
|
|
6
|
-
* parsing) and `@blockcast/fec-worker` (FEC-recovered-source parsing) can share
|
|
7
|
-
* one implementation without creating a package cycle between them.
|
|
8
|
-
*
|
|
9
|
-
* Spec: ISO/IEC 23008-1:2023 + draft-ramadan-moq-mmt §12 (detached trailer, Path 2).
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// --- Private MMTP/MPU/MFU constants (ISO/IEC 23008-1 §9.2.2–9.2.3) ---
|
|
13
|
-
// Duplicated here as immutable spec values so this package stays a leaf with
|
|
14
|
-
// zero `@blockcast/*` dependencies. Re-deriving from `mmt-container` would
|
|
15
|
-
// reintroduce the package cycle this split exists to avoid.
|
|
16
|
-
|
|
17
|
-
const MMTP_HEADER_SIZE = 12
|
|
18
|
-
const MPU_HEADER_SIZE = 8
|
|
19
|
-
const MPU_LENGTH_FIELD_SIZE = 2
|
|
20
|
-
const MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE
|
|
21
|
-
const TIMED_MFU_DU_HEADER_SIZE = 14
|
|
22
|
-
const NONTIMED_MFU_DU_HEADER_SIZE = 4
|
|
23
|
-
const PACKET_TYPE_MPU = 0x00
|
|
24
|
-
|
|
25
|
-
// --- Public ALTA trailer constants ---
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* MMTP header-extension ext_type assigned to the detached ALTA authenticator
|
|
29
|
-
* trailer (Path 2 / 08-07). Carried in an `[ext_type][ext_length][auth]`
|
|
30
|
-
* block appended after the MPU's declared payload bytes, before the 4-byte
|
|
31
|
-
* Source FEC Payload ID. MMTP X-bit stays 0 — non-ALTA MMTP receivers treat
|
|
32
|
-
* the trailer as bytes past `payload_length` and skip it (per ISO 23008-1
|
|
33
|
-
* §9.2.2 "may be discarded without impacting correct processing").
|
|
34
|
-
*/
|
|
35
|
-
export const MMTP_EXT_TYPE_ALTA_AUTH = 0xf0a1
|
|
36
|
-
|
|
37
|
-
/** Fixed size of the trailer's `[ext_type][ext_length]` prefix (2 + 2 BE). */
|
|
38
|
-
export const MMTP_EXT_TRAILER_HEADER_SIZE = 4
|
|
39
|
-
|
|
40
|
-
/** Result of extracting the detached ALTA authenticator from an MMTP packet. */
|
|
41
|
-
export interface AltaTrailer {
|
|
42
|
-
/** Authenticator bytes (no ext_type/ext_length prefix, no trailing padding). */
|
|
43
|
-
auth: Uint8Array
|
|
44
|
-
/**
|
|
45
|
-
* Wire-packet byte offset where the signed payload ends, i.e. where the
|
|
46
|
-
* trailer begins. Caller uses this to produce
|
|
47
|
-
* `payload = wirePacket.subarray(0, signedEnd)` for verify_detached.
|
|
48
|
-
*/
|
|
49
|
-
signedEnd: number
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Extract the detached ALTA authenticator trailer from an MMTP source packet.
|
|
54
|
-
*
|
|
55
|
-
* Wire layout:
|
|
56
|
-
* `[MMTP hdr][length(2)][remaining MPU hdr(6)][DU?][media][TRAILER][SS_ID?]`
|
|
57
|
-
* `payload_length = 6 + DU bytes + media bytes`
|
|
58
|
-
*
|
|
59
|
-
* Returns `null` when:
|
|
60
|
-
* - the packet is too small / malformed,
|
|
61
|
-
* - `payload_length` cannot contain the remaining six MPU-header bytes,
|
|
62
|
-
* - the declared payload overruns the packet,
|
|
63
|
-
* - no bytes remain between `payload_length` and the SS_ID,
|
|
64
|
-
* - the trailer's `ext_type` isn't {@link MMTP_EXT_TYPE_ALTA_AUTH},
|
|
65
|
-
* - the declared `ext_length` would extend past the SS_ID boundary.
|
|
66
|
-
*
|
|
67
|
-
* Non-MPU packets (repair, signaling) always return `null`.
|
|
68
|
-
*
|
|
69
|
-
* @param options.skipFecId When true, do NOT reserve 4 trailing bytes for the
|
|
70
|
-
* Source FEC Payload ID. Use on FEC-recovered symbols where the PID has
|
|
71
|
-
* already been stripped upstream.
|
|
72
|
-
*/
|
|
73
|
-
export function extractAltaTrailer(
|
|
74
|
-
mmtpPacket: Uint8Array,
|
|
75
|
-
options?: { skipFecId?: boolean },
|
|
76
|
-
): AltaTrailer | null {
|
|
77
|
-
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) return null
|
|
78
|
-
// ISO/IEC 23008-1:2023 Figure 8 places V=0 packet_type in the low six bits.
|
|
79
|
-
const packetType = mmtpPacket[1]! & 0x3f
|
|
80
|
-
if (packetType !== PACKET_TYPE_MPU) return null
|
|
81
|
-
|
|
82
|
-
const fecType = (mmtpPacket[0]! >> 3) & 0x03
|
|
83
|
-
let headerLength = MMTP_HEADER_SIZE
|
|
84
|
-
if (fecType < 2 && (mmtpPacket[0]! & 0x20) !== 0) headerLength += 4
|
|
85
|
-
if (fecType < 2 && (mmtpPacket[0]! & 0x02) !== 0) {
|
|
86
|
-
if (headerLength + 4 > mmtpPacket.length) return null
|
|
87
|
-
const extensionLength = new DataView(
|
|
88
|
-
mmtpPacket.buffer,
|
|
89
|
-
mmtpPacket.byteOffset + headerLength + 2,
|
|
90
|
-
2,
|
|
91
|
-
).getUint16(0, false)
|
|
92
|
-
headerLength += 4 + extensionLength
|
|
93
|
-
}
|
|
94
|
-
if (headerLength + MPU_HEADER_SIZE > mmtpPacket.length) return null
|
|
95
|
-
|
|
96
|
-
const payload = mmtpPacket.subarray(headerLength)
|
|
97
|
-
|
|
98
|
-
// Inline a minimal MPU-header read — only the fields extractAltaTrailer needs.
|
|
99
|
-
// payloadLength: 16 BE at bytes 0-1.
|
|
100
|
-
// Byte 2 packs FT(4) | T(1) | FI(2) | A(1).
|
|
101
|
-
const payloadLength = (payload[0]! << 8) | payload[1]!
|
|
102
|
-
const flagsByte = payload[2]!
|
|
103
|
-
const fragmentType = (flagsByte >> 4) & 0x0f
|
|
104
|
-
const timed = ((flagsByte >> 3) & 0x01) === 1
|
|
105
|
-
const fragmentationIndicator = (flagsByte >> 1) & 0x03
|
|
106
|
-
|
|
107
|
-
// Only MFU packets (FT=2) carry the detached trailer.
|
|
108
|
-
if (fragmentType !== 2) return null
|
|
109
|
-
|
|
110
|
-
// FI=0/1 structurally carries a DU header; FI=2/3 does not. Require at
|
|
111
|
-
// least one media byte after that deterministic layout so the bytes at the
|
|
112
|
-
// declared boundary cannot impersonate ALTA for a header-only fragment.
|
|
113
|
-
const dataUnitHeaderSize = fragmentationIndicator <= 1
|
|
114
|
-
? (timed ? TIMED_MFU_DU_HEADER_SIZE : NONTIMED_MFU_DU_HEADER_SIZE)
|
|
115
|
-
: 0
|
|
116
|
-
if (payloadLength <= MPU_HEADER_REMAINDER_SIZE + dataUnitHeaderSize) return null
|
|
117
|
-
|
|
118
|
-
if (fecType > 1) return null
|
|
119
|
-
const hasFecId = !options?.skipFecId && fecType === 1
|
|
120
|
-
const payloadEnd = hasFecId ? payload.length - 4 : payload.length
|
|
121
|
-
const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength
|
|
122
|
-
if (declaredEnd > payloadEnd) return null
|
|
123
|
-
|
|
124
|
-
if (declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE > payloadEnd) return null
|
|
125
|
-
const extType = (payload[declaredEnd]! << 8) | payload[declaredEnd + 1]!
|
|
126
|
-
if (extType !== MMTP_EXT_TYPE_ALTA_AUTH) return null
|
|
127
|
-
const extLen = (payload[declaredEnd + 2]! << 8) | payload[declaredEnd + 3]!
|
|
128
|
-
|
|
129
|
-
const authStart = declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE
|
|
130
|
-
if (authStart + extLen !== payloadEnd) return null
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
auth: payload.subarray(authStart, payloadEnd),
|
|
134
|
-
signedEnd: headerLength + declaredEnd,
|
|
135
|
-
}
|
|
136
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# @blockcast/mmt-base
|
|
2
|
-
|
|
3
|
-
The shared MMTP packet-parsing leaf for libmmt's TypeScript packages. It hosts the low-level MMTP / MPU / MFU header parsers, FEC payload-id predicates, and ALTA-trailer extractor — everything that operates on raw MMTP packet bytes **with zero FEC-decode dependency**. RFC 6330 OTI geometry belongs to `@blockcast/mmt-fec`.
|
|
4
|
-
|
|
5
|
-
It exists for one structural reason. Both `@blockcast/mmt-fec` and `@blockcast/mmt-container` need these primitives. Before this package they lived in `mmt-container`, so `mmt-fec` had to import `mmt-container` for them — while `mmt-container`'s `FecManager` already imports `mmt-fec`. That is a circular dependency. Extracting the primitives into this leaf breaks the cycle: both packages now import **down** into `mmt-base` rather than across into each other. Its only dependency is `@blockcast/mmt-alta-parse` (for the ALTA trailer types it re-exports).
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm add @blockcast/mmt-base
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Quick start
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
import {
|
|
15
|
-
unwrapMMTP, extractMFUPayload, extractTimestamp,
|
|
16
|
-
isFecRepairPacket, hasSourceFecPayloadId,
|
|
17
|
-
PACKET_TYPE_MPU,
|
|
18
|
-
} from "@blockcast/mmt-base"
|
|
19
|
-
|
|
20
|
-
const pkt = unwrapMMTP(datagram) // { header, payload }
|
|
21
|
-
if (pkt.header.packetType === PACKET_TYPE_MPU) {
|
|
22
|
-
const mfu = extractMFUPayload(datagram) // { data, fragmentationIndicator, mpuSequenceNumber, ... }
|
|
23
|
-
const ts = extractTimestamp(datagram) // bigint MPU timestamp
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (isFecRepairPacket(datagram)) {
|
|
27
|
-
// repair flow — hand the payload to @blockcast/mmt-fec
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Exports
|
|
32
|
-
|
|
33
|
-
Single entry point — `package.json#exports` declares only `.`, and `src/index.ts` re-exports the packet primitives. Group them as three families:
|
|
34
|
-
|
|
35
|
-
### Header, MPU & MFU parsing
|
|
36
|
-
|
|
37
|
-
| Symbol | Kind | Purpose |
|
|
38
|
-
|--------|------|---------|
|
|
39
|
-
| `parseMMTPHeader` | function | Parse the 12-byte MMTP header → `MMTPHeader` |
|
|
40
|
-
| `unwrapMMTP` | function | Header + payload split → `MMTPPacket` |
|
|
41
|
-
| `parseMPUHeader` | function | Parse the 8-byte MPU header → `MPUHeader` |
|
|
42
|
-
| `extractMFUPayload` | function | Pull the MFU data unit out of an MMTP packet → `MFUExtraction` (handles timed `T=1` and non-timed `T=0` DU headers) |
|
|
43
|
-
| `extractNALUnit` | function | Extract the NAL unit bytes from an MMTP packet |
|
|
44
|
-
| `extractTimestamp` | function | MPU presentation timestamp as `bigint` |
|
|
45
|
-
| `MMTPHeader`, `MPUHeader`, `MMTPPacket`, `MFUExtraction` | type | Parsed-structure shapes |
|
|
46
|
-
| `MMTP_HEADER_SIZE` (12), `MPU_HEADER_SIZE` (8), `MFU_DU_HEADER_SIZE_TIMED` (14), `MFU_DU_HEADER_SIZE_NONTIMED` (4) | const | Fixed header sizes |
|
|
47
|
-
| `PACKET_TYPE_MPU` (0x00), `PACKET_TYPE_SIGNALING` (0x02), `PACKET_TYPE_REPAIR` (0x03) | const | MMTP `packet_type` values |
|
|
48
|
-
|
|
49
|
-
MPU `payload_length` is interpreted strictly as ISO's length-after-field value: six remaining MPU-header bytes plus the data-unit header and media. ALTA and Source FEC Payload ID suffixes are outside that span; malformed, zero-length, media-only, and ambiguous declarations are rejected.
|
|
50
|
-
|
|
51
|
-
### FEC payload-id, repair & AL-FEC signaling
|
|
52
|
-
|
|
53
|
-
| Symbol | Kind | Purpose |
|
|
54
|
-
|--------|------|---------|
|
|
55
|
-
| `isFecRepairPacket` | function | Is this a `PACKET_TYPE_REPAIR` packet? |
|
|
56
|
-
| `hasSourceFecPayloadId` | function | Strict predicate for a source packet's declared four-byte FEC payload ID |
|
|
57
|
-
| `extractFecPayloadId` | function | `{ ssId }` from a source packet's FEC payload id (or `null`) |
|
|
58
|
-
| `extractRepairFecPayloadId` | function | Repair-flow FEC payload id (13-byte, `REPAIR_FEC_PID_SIZE`) |
|
|
59
|
-
| `parseMoqRepairFrame` | function | Strictly parse a mode-0 MMTP Annex C repair frame → `MoqRepairFrame` |
|
|
60
|
-
| `MoqRepairFrame` | type | Repair-frame shape |
|
|
61
|
-
| `ALFEC_MESSAGE_ID` (0x0203), `FEC_CODE_XOR` (1), `FEC_CODE_RAPTORQ` (2), `REPAIR_FEC_PID_SIZE` (13) | const | AL-FEC signaling + payload-id constants |
|
|
62
|
-
| `MMTP_SIGNALING_PACKET_ID` (0), `MMTP_PACKET_ID_MAX` (0xffff) | const | Signaling-flow `packet_id` (never a track's) and the 16-bit `packet_id` ceiling; a track's `packet_id` is 1..65535 |
|
|
63
|
-
|
|
64
|
-
### Signalling messages (`signalling.ts`, packet_id 0)
|
|
65
|
-
|
|
66
|
-
Total parsers (malformed or unsupported input → `null`, never a throw), per
|
|
67
|
-
ISO/IEC 23008-1:2023 9.3.4.2, 10.2-10.3, 10.6 and Annex C Table C.3 as
|
|
68
|
-
replaced by Amd 1:2025.
|
|
69
|
-
|
|
70
|
-
| Symbol | Kind | Purpose |
|
|
71
|
-
|--------|------|---------|
|
|
72
|
-
| `parseSignallingPayload` | function | Split a signalling packet into complete messages; reports the payload form: `iso-9.3.4.2` (Figure 15 header) or `legacy-bare-alfec` (message 0x0203 directly after the MMTP header, recognised by its exact `0x02 0x03` peek) |
|
|
73
|
-
| `parseSignallingPacket` | function | Decode every message of a signalling packet → `al-fec` / `pa` / `mpt` / `other` |
|
|
74
|
-
| `parseAlFecMessage`, `parseAlFecMessageBody` | function | Every FEC flow of an AL-FEC message: all asset packet_ids, one-stage / two-stage / LA-FEC repair flows, private fields → `AlFecMessage` |
|
|
75
|
-
| `alFecRaptorQFlowConfig` | function | One flow's decoder geometry under the Blockcast one-stage RaptorQ profile (private field = OTI + interleave depth) → `AlFecRaptorQFlowConfig` |
|
|
76
|
-
| `parsePaMessageBody`, `parseMptMessageBody`, `parseMpTable`, `mpAssetPacketIds` | function | PA / MPT messages and the MP table: asset → packet_id mapping |
|
|
77
|
-
|
|
78
|
-
### ALTA trailer (re-exported from `@blockcast/mmt-alta-parse`)
|
|
79
|
-
|
|
80
|
-
| Symbol | Kind | Purpose |
|
|
81
|
-
|--------|------|---------|
|
|
82
|
-
| `extractAltaTrailer` | function | Extract the ALTA authentication trailer from an MMTP packet |
|
|
83
|
-
| `AltaTrailer` | type | Parsed trailer shape |
|
|
84
|
-
| `MMTP_EXT_TYPE_ALTA_AUTH`, `MMTP_EXT_TRAILER_HEADER_SIZE` | const | ALTA extension-header identifiers |
|
|
85
|
-
|
|
86
|
-
These four are re-exported so callers that already pull MMTP primitives from here don't need a second import from `@blockcast/mmt-alta-parse` just for the trailer.
|
|
87
|
-
|
|
88
|
-
## Why this package exists
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
before after
|
|
92
|
-
┌──────────────┐ ┌──────────────┐
|
|
93
|
-
│ mmt-fec │──needs primitives──► │ mmt-fec │─┐
|
|
94
|
-
└──────────────┘ └──────────────┘ │ import down
|
|
95
|
-
┌──────────────┐ ┌──────────────┐ │
|
|
96
|
-
│ mmt-container│◄─FecManager needs─┐ │ mmt-container│─┤
|
|
97
|
-
│ (hosts the │ mmt-fec │ └──────────────┘ │
|
|
98
|
-
│ primitives) │───────────────────┘ ▼
|
|
99
|
-
└──────────────┘ ⟲ CYCLE ┌──────────────────────────┐
|
|
100
|
-
│ @blockcast/mmt-base │
|
|
101
|
-
│ (MMTP/MPU/MFU/PID) │
|
|
102
|
-
└──────────────────────────┘
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
- `@blockcast/mmt-fec` imports the parsers in `src/block-processor.ts` (splitting a decoded FEC block back into MFU fragments).
|
|
106
|
-
- `@blockcast/mmt-container` imports these primitives directly. The obsolete
|
|
107
|
-
container re-export shim and `@blockcast/mmt-container/mmtp` subpath were
|
|
108
|
-
removed so there is one parser authority.
|
|
109
|
-
|
|
110
|
-
Keep this package dependency-light. OTI geometry and anything that needs the WASM FEC decoder belong in `@blockcast/mmt-fec`; anything that needs catalog/CMAF/reassembly state belongs in `@blockcast/mmt-container`. `mmt-base` stays pure MMTP packet parsing so both can depend on it without pulling in the other.
|
|
111
|
-
|
|
112
|
-
## Build & test
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
npm run build # tsc → dist/
|
|
116
|
-
npm run typecheck # tsc --noEmit
|
|
117
|
-
npm test # vitest run
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
The direct suite owns header parsing, MFU extraction, payload-ID predicates,
|
|
121
|
-
declared-boundary rejection, C/X optional headers, and
|
|
122
|
-
ALTA/FEC suffix coverage. Downstream suites exercise integration only.
|
|
123
|
-
|
|
124
|
-
## Related packages
|
|
125
|
-
|
|
126
|
-
| Package | Relationship |
|
|
127
|
-
|---------|-------------|
|
|
128
|
-
| [`@blockcast/mmt-alta-parse`](../mmt-alta-parse) | Only dependency — supplies the ALTA trailer types this package re-exports |
|
|
129
|
-
| [`@blockcast/mmt-fec`](../fec) | Imports these parsers in `block-processor` to turn decoded FEC blocks back into MFU fragments |
|
|
130
|
-
| [`@blockcast/mmt-container`](../container) | Imports these primitives directly and builds the `FecManager`, MFU reassembler, and CMAF demuxer on top |
|
|
131
|
-
|
|
132
|
-
## License
|
|
133
|
-
|
|
134
|
-
Apache-2.0 — see `LICENSE`.
|
|
File without changes
|
package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/** The two block profiles a catalog `fec.blockProfile` may name. */
|
|
2
|
-
export type FecBlockProfile = 'k-padded-v1' | 'iso-ssbg1-v1';
|
|
3
|
-
/** Every accepted `fec.blockProfile` token, legacy first. */
|
|
4
|
-
export declare const FEC_BLOCK_PROFILES: readonly FecBlockProfile[];
|
|
5
|
-
/** True for a known block-profile token. */
|
|
6
|
-
export declare function isFecBlockProfile(value: unknown): value is FecBlockProfile;
|
|
7
|
-
/**
|
|
8
|
-
* Read a required `fec.blockProfile`. Throws on an absent or unknown token:
|
|
9
|
-
* there is no default and nothing is inferred, because the two profiles carry
|
|
10
|
-
* identical wire tuples whose repair math differs.
|
|
11
|
-
*
|
|
12
|
-
* @param where the catalog path of the field, for the error message.
|
|
13
|
-
*/
|
|
14
|
-
export declare function parseFecBlockProfile(value: unknown, where: string): FecBlockProfile;
|
|
15
|
-
/** ISO/IEC 23008-1 C.3.3 ssbg_mode1: the two-octet packet length field. */
|
|
16
|
-
export declare const SSBG1_LENGTH_FIELD_BYTES = 2;
|
|
17
|
-
/** The largest protected packet an ssbg_mode1 symbol of size T can carry. */
|
|
18
|
-
export declare function ssbg1MaxPacketLength(symbolSize: number): number;
|
|
19
|
-
/** Whether a protected packet of `packetLength` bytes fits one T-byte ssbg_mode1 symbol. */
|
|
20
|
-
export declare function ssbg1FitsSymbol(packetLength: number, symbolSize: number): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Build one ssbg_mode1 source symbol (C.3.3): the protected packet's length
|
|
23
|
-
* in two octets, network byte order, then the packet, then zero octets up to
|
|
24
|
-
* T. The protected packet is the MMTP packet before its Source FEC Payload ID
|
|
25
|
-
* is appended (C.4.2).
|
|
26
|
-
*
|
|
27
|
-
* @throws when `length + 2 > T`: the packet cannot be protected under this
|
|
28
|
-
* profile, and silently truncating it would corrupt every repair symbol.
|
|
29
|
-
*/
|
|
30
|
-
export declare function buildSsbg1SourceSymbol(packet: Uint8Array, symbolSize: number): Uint8Array;
|
|
31
|
-
/**
|
|
32
|
-
* Recover the protected packet from one ssbg_mode1 source symbol: the bytes
|
|
33
|
-
* the length field names. Returns null, never a guess, when the length field
|
|
34
|
-
* points past the symbol or any padding octet is non-zero (C.3.3 padding is
|
|
35
|
-
* all 00h), since either means the recovered symbol is not what was sent.
|
|
36
|
-
*/
|
|
37
|
-
export declare function trimSsbg1SourceSymbol(symbol: Uint8Array): Uint8Array | null;
|
|
38
|
-
/** The SS_ID after the last source symbol of `[ssStart, ssStart + ssbLength)`. */
|
|
39
|
-
export declare function isoBlockEnd(ssStart: number, ssbLength: number): number;
|
|
40
|
-
/**
|
|
41
|
-
* Range membership (C.5.2, C.5.3): whether `ssId` is one of the
|
|
42
|
-
* `ssbLength` consecutive SS_IDs starting at `ssStart`, modulo 2^32.
|
|
43
|
-
*/
|
|
44
|
-
export declare function isoBlockContains(ssStart: number, ssbLength: number, ssId: number): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* A lower bound on how many blocks the block starting at `a` lies behind the
|
|
47
|
-
* one starting at `b` (0 when `a` does not precede `b`). An iso-ssbg1-v1
|
|
48
|
-
* block holds at most `kMax` source symbols (the catalog `sourceSymbols`, the
|
|
49
|
-
* AL-FEC maximum_k_for_repair_flow), so `n * kMax` SS_IDs always span at least
|
|
50
|
-
* `n` blocks. Every interleave horizon in the receiver (decoder retention,
|
|
51
|
-
* worker retirement, ordered-relay settlement) uses this one bound, so the
|
|
52
|
-
* manager's horizon can never fall inside the decoder's.
|
|
53
|
-
*/
|
|
54
|
-
export declare function isoBlocksBehindLowerBound(a: number, b: number, kMax: number): number;
|
|
55
|
-
//# sourceMappingURL=fec-block-profile.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fec-block-profile.d.ts","sourceRoot":"","sources":["../src/fec-block-profile.ts"],"names":[],"mappings":"AAwBA,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,CAAA;AAE5D,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAGvD,CAAA;AAEF,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAUnF;AAED,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAEzC,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAOjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAczF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAS3E;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpF"}
|
package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FEC block profile (BLO-35597, ISO/IEC 23008-1 Annex C).
|
|
3
|
-
*
|
|
4
|
-
* Every catalog `fec` object that declares an FEC instance names exactly one
|
|
5
|
-
* block profile in `fec.blockProfile`. A receiver applies all of a profile's
|
|
6
|
-
* rules or none of them, so the token is the one explicit per-stream
|
|
7
|
-
* discriminator: it is never defaulted and never inferred from the wire.
|
|
8
|
-
*
|
|
9
|
-
* - `k-padded-v1` (legacy, Blockcast-private): a source symbol is the
|
|
10
|
-
* protected MMTP packet zero-padded to T with no length field; every block
|
|
11
|
-
* is a K-symbol RaptorQ block whose ESIs `SSB_length..K-1` are implicit
|
|
12
|
-
* zero padding; `SS_ID = SBN*K + ESI`, so `SS_Start = SBN*K`; repair
|
|
13
|
-
* ESI = K + RS_ID; the MoQ repair group id is the SBN.
|
|
14
|
-
* - `iso-ssbg1-v1`: ssbg_mode1 (C.3.3): a source symbol is
|
|
15
|
-
* `u16 length || protected packet || zero padding` to T; a block is a
|
|
16
|
-
* K' = SSB_length RaptorQ block (C.5.3) and repair ESI = SSB_length + RS_ID;
|
|
17
|
-
* SS_ID increments by one per FEC source packet and wraps at 2^32 (C.5.2),
|
|
18
|
-
* so a block is located by membership in `[SS_Start, SS_Start + SSB_length)`
|
|
19
|
-
* under RFC 1982 serial arithmetic; the MoQ repair group id is the 62-bit
|
|
20
|
-
* wrap-epoch-extended SS_Start. The AL-FEC coding byte for this profile is
|
|
21
|
-
* 0x14 (one-stage, ssbg_mode1, fec_payload_id_mode 0, Amd 1:2025 Table C.3).
|
|
22
|
-
*/
|
|
23
|
-
import { serial32Add, serial32Distance, serial32Precedes } from './serial-number.js';
|
|
24
|
-
/** Every accepted `fec.blockProfile` token, legacy first. */
|
|
25
|
-
export const FEC_BLOCK_PROFILES = Object.freeze([
|
|
26
|
-
'k-padded-v1',
|
|
27
|
-
'iso-ssbg1-v1',
|
|
28
|
-
]);
|
|
29
|
-
/** True for a known block-profile token. */
|
|
30
|
-
export function isFecBlockProfile(value) {
|
|
31
|
-
return value === 'k-padded-v1' || value === 'iso-ssbg1-v1';
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Read a required `fec.blockProfile`. Throws on an absent or unknown token:
|
|
35
|
-
* there is no default and nothing is inferred, because the two profiles carry
|
|
36
|
-
* identical wire tuples whose repair math differs.
|
|
37
|
-
*
|
|
38
|
-
* @param where the catalog path of the field, for the error message.
|
|
39
|
-
*/
|
|
40
|
-
export function parseFecBlockProfile(value, where) {
|
|
41
|
-
if (isFecBlockProfile(value))
|
|
42
|
-
return value;
|
|
43
|
-
if (value === undefined) {
|
|
44
|
-
throw new Error(`${where} is required: name the FEC block profile ("k-padded-v1" or "iso-ssbg1-v1")`);
|
|
45
|
-
}
|
|
46
|
-
throw new Error(`${where} must be "k-padded-v1" or "iso-ssbg1-v1" (got ${JSON.stringify(value)})`);
|
|
47
|
-
}
|
|
48
|
-
/** ISO/IEC 23008-1 C.3.3 ssbg_mode1: the two-octet packet length field. */
|
|
49
|
-
export const SSBG1_LENGTH_FIELD_BYTES = 2;
|
|
50
|
-
/** The largest protected packet an ssbg_mode1 symbol of size T can carry. */
|
|
51
|
-
export function ssbg1MaxPacketLength(symbolSize) {
|
|
52
|
-
return symbolSize - SSBG1_LENGTH_FIELD_BYTES;
|
|
53
|
-
}
|
|
54
|
-
/** Whether a protected packet of `packetLength` bytes fits one T-byte ssbg_mode1 symbol. */
|
|
55
|
-
export function ssbg1FitsSymbol(packetLength, symbolSize) {
|
|
56
|
-
return (Number.isSafeInteger(packetLength) &&
|
|
57
|
-
packetLength >= 0 &&
|
|
58
|
-
packetLength <= ssbg1MaxPacketLength(symbolSize) &&
|
|
59
|
-
packetLength <= 0xffff);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Build one ssbg_mode1 source symbol (C.3.3): the protected packet's length
|
|
63
|
-
* in two octets, network byte order, then the packet, then zero octets up to
|
|
64
|
-
* T. The protected packet is the MMTP packet before its Source FEC Payload ID
|
|
65
|
-
* is appended (C.4.2).
|
|
66
|
-
*
|
|
67
|
-
* @throws when `length + 2 > T`: the packet cannot be protected under this
|
|
68
|
-
* profile, and silently truncating it would corrupt every repair symbol.
|
|
69
|
-
*/
|
|
70
|
-
export function buildSsbg1SourceSymbol(packet, symbolSize) {
|
|
71
|
-
if (!Number.isSafeInteger(symbolSize) || symbolSize <= SSBG1_LENGTH_FIELD_BYTES) {
|
|
72
|
-
throw new Error(`ssbg_mode1 symbol size must exceed ${SSBG1_LENGTH_FIELD_BYTES} (got ${symbolSize})`);
|
|
73
|
-
}
|
|
74
|
-
if (!ssbg1FitsSymbol(packet.byteLength, symbolSize)) {
|
|
75
|
-
throw new Error(`ssbg_mode1 source symbol needs ${packet.byteLength} + ${SSBG1_LENGTH_FIELD_BYTES} bytes but T is ${symbolSize}`);
|
|
76
|
-
}
|
|
77
|
-
const symbol = new Uint8Array(symbolSize);
|
|
78
|
-
symbol[0] = (packet.byteLength >>> 8) & 0xff;
|
|
79
|
-
symbol[1] = packet.byteLength & 0xff;
|
|
80
|
-
symbol.set(packet, SSBG1_LENGTH_FIELD_BYTES);
|
|
81
|
-
return symbol;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Recover the protected packet from one ssbg_mode1 source symbol: the bytes
|
|
85
|
-
* the length field names. Returns null, never a guess, when the length field
|
|
86
|
-
* points past the symbol or any padding octet is non-zero (C.3.3 padding is
|
|
87
|
-
* all 00h), since either means the recovered symbol is not what was sent.
|
|
88
|
-
*/
|
|
89
|
-
export function trimSsbg1SourceSymbol(symbol) {
|
|
90
|
-
if (symbol.byteLength < SSBG1_LENGTH_FIELD_BYTES)
|
|
91
|
-
return null;
|
|
92
|
-
const length = (symbol[0] << 8) | symbol[1];
|
|
93
|
-
const end = SSBG1_LENGTH_FIELD_BYTES + length;
|
|
94
|
-
if (end > symbol.byteLength)
|
|
95
|
-
return null;
|
|
96
|
-
for (let i = end; i < symbol.byteLength; i++) {
|
|
97
|
-
if (symbol[i] !== 0)
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
return symbol.subarray(SSBG1_LENGTH_FIELD_BYTES, end);
|
|
101
|
-
}
|
|
102
|
-
/** The SS_ID after the last source symbol of `[ssStart, ssStart + ssbLength)`. */
|
|
103
|
-
export function isoBlockEnd(ssStart, ssbLength) {
|
|
104
|
-
return serial32Add(ssStart, ssbLength);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Range membership (C.5.2, C.5.3): whether `ssId` is one of the
|
|
108
|
-
* `ssbLength` consecutive SS_IDs starting at `ssStart`, modulo 2^32.
|
|
109
|
-
*/
|
|
110
|
-
export function isoBlockContains(ssStart, ssbLength, ssId) {
|
|
111
|
-
return serial32Distance(ssStart, ssId) < ssbLength;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* A lower bound on how many blocks the block starting at `a` lies behind the
|
|
115
|
-
* one starting at `b` (0 when `a` does not precede `b`). An iso-ssbg1-v1
|
|
116
|
-
* block holds at most `kMax` source symbols (the catalog `sourceSymbols`, the
|
|
117
|
-
* AL-FEC maximum_k_for_repair_flow), so `n * kMax` SS_IDs always span at least
|
|
118
|
-
* `n` blocks. Every interleave horizon in the receiver (decoder retention,
|
|
119
|
-
* worker retirement, ordered-relay settlement) uses this one bound, so the
|
|
120
|
-
* manager's horizon can never fall inside the decoder's.
|
|
121
|
-
*/
|
|
122
|
-
export function isoBlocksBehindLowerBound(a, b, kMax) {
|
|
123
|
-
if (!Number.isSafeInteger(kMax) || kMax <= 0) {
|
|
124
|
-
throw new Error(`iso-ssbg1-v1 block horizon needs a positive maximum K (got ${kMax})`);
|
|
125
|
-
}
|
|
126
|
-
return serial32Precedes(a, b) ? Math.floor(serial32Distance(a, b) / kMax) : 0;
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=fec-block-profile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fec-block-profile.js","sourceRoot":"","sources":["../src/fec-block-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAKpF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAA+B,MAAM,CAAC,MAAM,CAAC;IAC1E,aAAa;IACb,cAAc;CACf,CAAC,CAAA;AAEF,4CAA4C;AAC5C,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,cAAc,CAAA;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,KAAa;IAChE,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,4EAA4E,CACrF,CAAA;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,iDAAiD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAClF,CAAA;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAEzC,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,OAAO,UAAU,GAAG,wBAAwB,CAAA;AAC9C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,UAAkB;IACtE,OAAO,CACL,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;QAClC,YAAY,IAAI,CAAC;QACjB,YAAY,IAAI,oBAAoB,CAAC,UAAU,CAAC;QAChD,YAAY,IAAI,MAAM,CACvB,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkB,EAAE,UAAkB;IAC3E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,wBAAwB,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,sCAAsC,wBAAwB,SAAS,UAAU,GAAG,CAAC,CAAA;IACvG,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,CAAC,UAAU,MAAM,wBAAwB,mBAAmB,UAAU,EAAE,CACjH,CAAA;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA;IAC5C,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;IACpC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;IAC5C,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,IAAI,MAAM,CAAC,UAAU,GAAG,wBAAwB;QAAE,OAAO,IAAI,CAAA;IAC7D,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,wBAAwB,GAAG,MAAM,CAAA;IAC7C,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IACxC,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;AACvD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,SAAiB;IAC5D,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,SAAiB,EAAE,IAAY;IAC/E,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY;IAC1E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,8DAA8D,IAAI,GAAG,CAAC,CAAA;IACxF,CAAC;IACD,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/E,CAAC"}
|
package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA"}
|