@blockcast/mmt-container 0.3.0 → 0.4.0-main.71d61b2a53f2
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 +14743 -14412
- 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 +29 -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 +36 -30
- package/dist/fec-manager.d.ts.map +1 -1
- package/dist/fec-manager.js +303 -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 +6 -11
- package/dist/mmtp-container-parser.d.ts.map +1 -1
- package/dist/mmtp-container-parser.js +56 -97
- package/dist/mmtp-container-parser.js.map +4 -4
- package/dist/mmtp-container-parser.no-modules.js +78 -105
- package/dist/mmtp-container-parser.no-modules.js.map +4 -4
- package/dist/mmtp-decode-pipeline.js +56 -97
- package/dist/mmtp-decode-pipeline.js.map +4 -4
- package/dist/mmtp-router.d.ts +37 -26
- package/dist/mmtp-router.d.ts.map +1 -1
- package/dist/mmtp-router.js +162 -313
- 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 +34 -6
- package/dist/multicast-manager.d.ts.map +1 -1
- package/dist/multicast-manager.js +709 -658
- 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 +77 -104
- package/dist/no-modules.js.map +4 -4
- package/dist/repair-fetch.d.ts +30 -19
- package/dist/repair-fetch.d.ts.map +1 -1
- package/dist/repair-fetch.js +33 -24
- 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 +56 -97
- 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 +46 -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 +414 -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 +27 -18
- package/src/mmtp-router.ts +146 -313
- package/src/multicast-manager.ts +184 -83
- package/src/multicast-transport.ts +16 -9
- package/src/repair-fetch.ts +46 -27
- package/src/repair-layers.ts +28 -8
- package/src/track-session.ts +28 -9
- package/test-vectors/catalog/README.md +37 -17
- 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 +1 -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-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/dist/mmtp-router.js
CHANGED
|
@@ -1,77 +1,16 @@
|
|
|
1
|
-
// ../mmt-
|
|
1
|
+
// ../mmt-base/dist/mmtp.js
|
|
2
2
|
var MMTP_HEADER_SIZE = 12;
|
|
3
3
|
var MPU_HEADER_SIZE = 8;
|
|
4
|
-
var MPU_LENGTH_FIELD_SIZE = 2;
|
|
5
|
-
var MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
|
|
6
|
-
var TIMED_MFU_DU_HEADER_SIZE = 14;
|
|
7
|
-
var NONTIMED_MFU_DU_HEADER_SIZE = 4;
|
|
8
|
-
var PACKET_TYPE_MPU = 0;
|
|
9
|
-
var MMTP_EXT_TYPE_ALTA_AUTH = 61601;
|
|
10
|
-
var MMTP_EXT_TRAILER_HEADER_SIZE = 4;
|
|
11
|
-
function extractAltaTrailer(mmtpPacket, options) {
|
|
12
|
-
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
13
|
-
return null;
|
|
14
|
-
const packetType = mmtpPacket[1] & 63;
|
|
15
|
-
if (packetType !== PACKET_TYPE_MPU)
|
|
16
|
-
return null;
|
|
17
|
-
const fecType = mmtpPacket[0] >> 3 & 3;
|
|
18
|
-
let headerLength = MMTP_HEADER_SIZE;
|
|
19
|
-
if (fecType < 2 && (mmtpPacket[0] & 32) !== 0)
|
|
20
|
-
headerLength += 4;
|
|
21
|
-
if (fecType < 2 && (mmtpPacket[0] & 2) !== 0) {
|
|
22
|
-
if (headerLength + 4 > mmtpPacket.length)
|
|
23
|
-
return null;
|
|
24
|
-
const extensionLength = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + headerLength + 2, 2).getUint16(0, false);
|
|
25
|
-
headerLength += 4 + extensionLength;
|
|
26
|
-
}
|
|
27
|
-
if (headerLength + MPU_HEADER_SIZE > mmtpPacket.length)
|
|
28
|
-
return null;
|
|
29
|
-
const payload = mmtpPacket.subarray(headerLength);
|
|
30
|
-
const payloadLength = payload[0] << 8 | payload[1];
|
|
31
|
-
const flagsByte = payload[2];
|
|
32
|
-
const fragmentType = flagsByte >> 4 & 15;
|
|
33
|
-
const timed = (flagsByte >> 3 & 1) === 1;
|
|
34
|
-
const fragmentationIndicator = flagsByte >> 1 & 3;
|
|
35
|
-
if (fragmentType !== 2)
|
|
36
|
-
return null;
|
|
37
|
-
const dataUnitHeaderSize = fragmentationIndicator <= 1 ? timed ? TIMED_MFU_DU_HEADER_SIZE : NONTIMED_MFU_DU_HEADER_SIZE : 0;
|
|
38
|
-
if (payloadLength <= MPU_HEADER_REMAINDER_SIZE + dataUnitHeaderSize)
|
|
39
|
-
return null;
|
|
40
|
-
if (fecType > 1)
|
|
41
|
-
return null;
|
|
42
|
-
const hasFecId = !options?.skipFecId && fecType === 1;
|
|
43
|
-
const payloadEnd = hasFecId ? payload.length - 4 : payload.length;
|
|
44
|
-
const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
|
|
45
|
-
if (declaredEnd > payloadEnd)
|
|
46
|
-
return null;
|
|
47
|
-
if (declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE > payloadEnd)
|
|
48
|
-
return null;
|
|
49
|
-
const extType = payload[declaredEnd] << 8 | payload[declaredEnd + 1];
|
|
50
|
-
if (extType !== MMTP_EXT_TYPE_ALTA_AUTH)
|
|
51
|
-
return null;
|
|
52
|
-
const extLen = payload[declaredEnd + 2] << 8 | payload[declaredEnd + 3];
|
|
53
|
-
const authStart = declaredEnd + MMTP_EXT_TRAILER_HEADER_SIZE;
|
|
54
|
-
if (authStart + extLen !== payloadEnd)
|
|
55
|
-
return null;
|
|
56
|
-
return {
|
|
57
|
-
auth: payload.subarray(authStart, payloadEnd),
|
|
58
|
-
signedEnd: headerLength + declaredEnd
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ../mmt-base/dist/mmtp.js
|
|
63
|
-
var MMTP_HEADER_SIZE2 = 12;
|
|
64
|
-
var MPU_HEADER_SIZE2 = 8;
|
|
65
4
|
var MFU_DU_HEADER_SIZE_TIMED = 14;
|
|
66
5
|
var MFU_DU_HEADER_SIZE_NONTIMED = 4;
|
|
67
|
-
var
|
|
68
|
-
var
|
|
6
|
+
var MPU_LENGTH_FIELD_SIZE = 2;
|
|
7
|
+
var MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
|
|
69
8
|
var SOURCE_FEC_PAYLOAD_ID_SIZE = 4;
|
|
70
|
-
var
|
|
9
|
+
var PACKET_TYPE_MPU = 0;
|
|
71
10
|
var PACKET_TYPE_REPAIR = 3;
|
|
72
11
|
var MMTP_SIGNALING_PACKET_ID = 0;
|
|
73
12
|
function parseMMTPHeader(buffer) {
|
|
74
|
-
if (buffer.length <
|
|
13
|
+
if (buffer.length < MMTP_HEADER_SIZE) {
|
|
75
14
|
throw new Error(`MMTP packet too small: ${buffer.length} bytes`);
|
|
76
15
|
}
|
|
77
16
|
const view2 = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
@@ -127,7 +66,7 @@ function parseMMTPHeader(buffer) {
|
|
|
127
66
|
};
|
|
128
67
|
}
|
|
129
68
|
function parseMPUHeader(payload) {
|
|
130
|
-
if (payload.length <
|
|
69
|
+
if (payload.length < MPU_HEADER_SIZE) {
|
|
131
70
|
throw new Error(`Payload too small for MPU header: ${payload.length} bytes`);
|
|
132
71
|
}
|
|
133
72
|
const view2 = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
@@ -160,15 +99,15 @@ function parseTimedMfuDuHeader(payload, offset) {
|
|
|
160
99
|
};
|
|
161
100
|
}
|
|
162
101
|
function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
|
|
163
|
-
if (mpu.payloadLength <
|
|
102
|
+
if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE) {
|
|
164
103
|
return {
|
|
165
104
|
rejection: {
|
|
166
105
|
gate: "mpu-payload-length-below-header-remainder",
|
|
167
|
-
detail: `payload_length=${mpu.payloadLength} < ${
|
|
106
|
+
detail: `payload_length=${mpu.payloadLength} < ${MPU_HEADER_REMAINDER_SIZE}`
|
|
168
107
|
}
|
|
169
108
|
};
|
|
170
109
|
}
|
|
171
|
-
const declaredEnd =
|
|
110
|
+
const declaredEnd = MPU_LENGTH_FIELD_SIZE + mpu.payloadLength;
|
|
172
111
|
if (declaredEnd > payload.length) {
|
|
173
112
|
return {
|
|
174
113
|
rejection: {
|
|
@@ -179,7 +118,7 @@ function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
|
|
|
179
118
|
}
|
|
180
119
|
const hasHeader = fragmentType === 2 && mpu.fragmentationIndicator <= 1;
|
|
181
120
|
const mfuHeaderSize = mpu.timedFlag ? MFU_DU_HEADER_SIZE_TIMED : MFU_DU_HEADER_SIZE_NONTIMED;
|
|
182
|
-
const mfuOffset =
|
|
121
|
+
const mfuOffset = MPU_HEADER_SIZE + (hasHeader ? mfuHeaderSize : 0);
|
|
183
122
|
if (mfuOffset >= declaredEnd) {
|
|
184
123
|
return {
|
|
185
124
|
rejection: {
|
|
@@ -196,44 +135,46 @@ function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
|
|
|
196
135
|
}
|
|
197
136
|
};
|
|
198
137
|
}
|
|
199
|
-
|
|
138
|
+
var LEGACY_TRAILER_EXT_TYPE = 61601;
|
|
139
|
+
var LEGACY_TRAILER_HEADER_SIZE = 4;
|
|
140
|
+
function isEmptyOrExactLegacyTrailer(payload, start, end) {
|
|
200
141
|
if (start === end)
|
|
201
142
|
return true;
|
|
202
|
-
if (start < 0 || end > payload.length || start +
|
|
143
|
+
if (start < 0 || end > payload.length || start + LEGACY_TRAILER_HEADER_SIZE > end) {
|
|
203
144
|
return false;
|
|
204
145
|
}
|
|
205
146
|
const view2 = new DataView(payload.buffer, payload.byteOffset + start, end - start);
|
|
206
|
-
if (view2.getUint16(0, false) !==
|
|
147
|
+
if (view2.getUint16(0, false) !== LEGACY_TRAILER_EXT_TYPE)
|
|
207
148
|
return false;
|
|
208
149
|
const authLength = view2.getUint16(2, false);
|
|
209
|
-
return start +
|
|
150
|
+
return start + LEGACY_TRAILER_HEADER_SIZE + authLength === end;
|
|
210
151
|
}
|
|
211
152
|
function resolveDeclaredTrailers(payload, declaredEnd, fecType, options) {
|
|
212
153
|
if (declaredEnd > payload.length)
|
|
213
154
|
return null;
|
|
214
155
|
if (options?.skipFecId) {
|
|
215
|
-
return
|
|
156
|
+
return isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length) ? { hasFecId: false } : null;
|
|
216
157
|
}
|
|
217
158
|
if (fecType === 1) {
|
|
218
159
|
const fecStart = payload.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
219
|
-
if (fecStart < declaredEnd || !
|
|
160
|
+
if (fecStart < declaredEnd || !isEmptyOrExactLegacyTrailer(payload, declaredEnd, fecStart)) {
|
|
220
161
|
return null;
|
|
221
162
|
}
|
|
222
163
|
return { hasFecId: true };
|
|
223
164
|
}
|
|
224
165
|
if (fecType !== 0)
|
|
225
166
|
return null;
|
|
226
|
-
if (
|
|
167
|
+
if (isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length)) {
|
|
227
168
|
return { hasFecId: false };
|
|
228
169
|
}
|
|
229
170
|
return null;
|
|
230
171
|
}
|
|
231
172
|
function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
232
|
-
if (mmtpPacket.length <
|
|
173
|
+
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
|
|
233
174
|
return {
|
|
234
175
|
rejection: {
|
|
235
176
|
gate: "packet-shorter-than-mmtp-plus-mpu-header",
|
|
236
|
-
detail: `${mmtpPacket.length} bytes < ${
|
|
177
|
+
detail: `${mmtpPacket.length} bytes < ${MMTP_HEADER_SIZE + MPU_HEADER_SIZE}`
|
|
237
178
|
}
|
|
238
179
|
};
|
|
239
180
|
}
|
|
@@ -252,7 +193,7 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
|
252
193
|
};
|
|
253
194
|
}
|
|
254
195
|
}
|
|
255
|
-
if (header.packetType !==
|
|
196
|
+
if (header.packetType !== PACKET_TYPE_MPU) {
|
|
256
197
|
return {
|
|
257
198
|
rejection: {
|
|
258
199
|
gate: "not-an-mpu-packet",
|
|
@@ -261,11 +202,11 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
|
261
202
|
};
|
|
262
203
|
}
|
|
263
204
|
const payload = mmtpPacket.subarray(header.headerLength);
|
|
264
|
-
if (payload.length <
|
|
205
|
+
if (payload.length < MPU_HEADER_SIZE) {
|
|
265
206
|
return {
|
|
266
207
|
rejection: {
|
|
267
208
|
gate: "payload-shorter-than-mpu-header",
|
|
268
|
-
detail: `${payload.length} bytes < ${
|
|
209
|
+
detail: `${payload.length} bytes < ${MPU_HEADER_SIZE}`
|
|
269
210
|
}
|
|
270
211
|
};
|
|
271
212
|
}
|
|
@@ -296,7 +237,7 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
|
296
237
|
return {
|
|
297
238
|
rejection: {
|
|
298
239
|
gate: "declared-trailers-unresolved",
|
|
299
|
-
detail: `trailer bytes [${layout.dataEnd}, ${payload.length}) are neither empty nor an exact
|
|
240
|
+
detail: `trailer bytes [${layout.dataEnd}, ${payload.length}) are neither empty nor an exact legacy authenticator trailer (fecType=${header.fecType})`
|
|
300
241
|
}
|
|
301
242
|
};
|
|
302
243
|
}
|
|
@@ -312,8 +253,8 @@ function extractPlannedMfu(mmtpPacket, result) {
|
|
|
312
253
|
const mfuDuHeaderPresent = layout.hasMfuDuHeader;
|
|
313
254
|
const mfuOffset = layout.mfuOffset;
|
|
314
255
|
const dataEnd = layout.dataEnd;
|
|
315
|
-
const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1 ? parseTimedMfuDuHeader(payload,
|
|
316
|
-
const itemId = mfuDuHeaderPresent && mpu.timedFlag === 0 ? new DataView(payload.buffer, payload.byteOffset +
|
|
256
|
+
const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1 ? parseTimedMfuDuHeader(payload, MPU_HEADER_SIZE) : null;
|
|
257
|
+
const itemId = mfuDuHeaderPresent && mpu.timedFlag === 0 ? new DataView(payload.buffer, payload.byteOffset + MPU_HEADER_SIZE, 4).getUint32(0, false) : null;
|
|
317
258
|
const data = payload.subarray(mfuOffset, dataEnd);
|
|
318
259
|
const fecPayloadId = trailerLayout.hasFecId ? {
|
|
319
260
|
ssId: new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE, SOURCE_FEC_PAYLOAD_ID_SIZE).getUint32(0, false)
|
|
@@ -321,17 +262,17 @@ function extractPlannedMfu(mmtpPacket, result) {
|
|
|
321
262
|
return { header, mpu, fragmentType, data, mfuDuHeader, itemId, fecPayloadId };
|
|
322
263
|
}
|
|
323
264
|
function sourceFecPayloadIdOf(mmtpPacket, header) {
|
|
324
|
-
if (mmtpPacket.length <
|
|
265
|
+
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
325
266
|
return null;
|
|
326
|
-
if (header.packetType !==
|
|
267
|
+
if (header.packetType !== PACKET_TYPE_MPU)
|
|
327
268
|
return null;
|
|
328
269
|
const payload = mmtpPacket.subarray(header.headerLength);
|
|
329
|
-
if (payload.length <
|
|
270
|
+
if (payload.length < MPU_HEADER_SIZE)
|
|
330
271
|
return null;
|
|
331
272
|
const payloadLength = payload[0] << 8 | payload[1];
|
|
332
|
-
if (payloadLength <
|
|
273
|
+
if (payloadLength < MPU_HEADER_REMAINDER_SIZE)
|
|
333
274
|
return null;
|
|
334
|
-
const declaredEnd =
|
|
275
|
+
const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
|
|
335
276
|
if (!resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId)
|
|
336
277
|
return null;
|
|
337
278
|
const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
@@ -339,7 +280,6 @@ function sourceFecPayloadIdOf(mmtpPacket, header) {
|
|
|
339
280
|
ssId: (mmtpPacket[off] << 24 | mmtpPacket[off + 1] << 16 | mmtpPacket[off + 2] << 8 | mmtpPacket[off + 3]) >>> 0
|
|
340
281
|
};
|
|
341
282
|
}
|
|
342
|
-
var extractAltaTrailer2 = extractAltaTrailer;
|
|
343
283
|
var REPAIR_FEC_PID_SIZE = 13;
|
|
344
284
|
function readRepairFecPayloadIdFields(mmtpPacket, parsedHeader) {
|
|
345
285
|
let header;
|
|
@@ -419,7 +359,6 @@ function serial32Precedes(a, b) {
|
|
|
419
359
|
|
|
420
360
|
// ../mmt-base/dist/fec-block-profile.js
|
|
421
361
|
var FEC_BLOCK_PROFILES = Object.freeze([
|
|
422
|
-
"k-padded-v1",
|
|
423
362
|
"iso-ssbg1-v1"
|
|
424
363
|
]);
|
|
425
364
|
|
|
@@ -4526,7 +4465,6 @@ var CmafBlockAssembler = class {
|
|
|
4526
4465
|
failedBlocks: 0
|
|
4527
4466
|
};
|
|
4528
4467
|
this.#config = {
|
|
4529
|
-
k: config.k,
|
|
4530
4468
|
timescale: config.timescale ?? 1e6,
|
|
4531
4469
|
trackId: config.trackId ?? 1,
|
|
4532
4470
|
trackType: config.trackType,
|
|
@@ -6712,6 +6650,21 @@ var FecReleaseSequencer = class {
|
|
|
6712
6650
|
this.#streams.delete(key);
|
|
6713
6651
|
}
|
|
6714
6652
|
}
|
|
6653
|
+
/**
|
|
6654
|
+
* The packet's FEC ended, so no block will resolve a held gap: release its
|
|
6655
|
+
* frames in order, each gap stalled as a discontinuity, and forget its
|
|
6656
|
+
* streams, so FEC configured on it again starts from a fresh one.
|
|
6657
|
+
*/
|
|
6658
|
+
endPacket(packetId) {
|
|
6659
|
+
for (const [key, stream] of this.#streams) {
|
|
6660
|
+
if (stream.packetId !== packetId) continue;
|
|
6661
|
+
while (stream.buf.length > 0 && stream.last !== null) {
|
|
6662
|
+
stream.discontinuity = true;
|
|
6663
|
+
this.#drain(stream);
|
|
6664
|
+
}
|
|
6665
|
+
this.#streams.delete(key);
|
|
6666
|
+
}
|
|
6667
|
+
}
|
|
6715
6668
|
discardPacket(packetId) {
|
|
6716
6669
|
for (const [key, stream] of this.#streams) {
|
|
6717
6670
|
if (stream.packetId !== packetId) continue;
|
|
@@ -7094,6 +7047,13 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7094
7047
|
markFecDiscontinuity(packetId, catalogTrackName) {
|
|
7095
7048
|
this.#fecSequencer?.markDiscontinuity(this.#streamKey(packetId, catalogTrackName));
|
|
7096
7049
|
}
|
|
7050
|
+
/**
|
|
7051
|
+
* The FEC of a packet ID ended: release the frames the FEC release gate
|
|
7052
|
+
* holds for it in order, each gap stalled, and forget its gated streams.
|
|
7053
|
+
*/
|
|
7054
|
+
endFecRelease(packetId) {
|
|
7055
|
+
this.#fecSequencer?.endPacket(packetId);
|
|
7056
|
+
}
|
|
7097
7057
|
/**
|
|
7098
7058
|
* MPU and data-unit identity of one MMTP packet, parsed in place (no copy,
|
|
7099
7059
|
* no reassembly). Null for non-MPU packets and packets that do not parse.
|
|
@@ -7274,7 +7234,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7274
7234
|
const parsed = preParsed !== void 0 && preParsed.skipFecPayloadId === (options?.skipFecPayloadId === true) ? preParsed : this.parsePacket(packet, options);
|
|
7275
7235
|
if (!parsed) return this.#drop("header-parse-failed");
|
|
7276
7236
|
const info = parsed.info;
|
|
7277
|
-
if (info.packetType !==
|
|
7237
|
+
if (info.packetType !== PACKET_TYPE_MPU) {
|
|
7278
7238
|
return {
|
|
7279
7239
|
kind: info.isRepair ? "repair" : "non-media",
|
|
7280
7240
|
packet: info,
|
|
@@ -7283,10 +7243,8 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7283
7243
|
}
|
|
7284
7244
|
if (info.fecPayloadId !== null && this.#sourceSymbolCb) {
|
|
7285
7245
|
const rawSymbol = packet.subarray(0, packet.length - 4);
|
|
7286
|
-
const altaTrailer = extractAltaTrailer2(packet);
|
|
7287
|
-
const alta = altaTrailer ? { auth: altaTrailer.auth, payloadEnd: altaTrailer.signedEnd } : void 0;
|
|
7288
7246
|
try {
|
|
7289
|
-
this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol
|
|
7247
|
+
this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol);
|
|
7290
7248
|
} catch {
|
|
7291
7249
|
}
|
|
7292
7250
|
}
|
|
@@ -8489,6 +8447,8 @@ var MmtpRouter = class {
|
|
|
8489
8447
|
*/
|
|
8490
8448
|
#onPublisherRestart;
|
|
8491
8449
|
#publisherRestarts = 0;
|
|
8450
|
+
/** Inits delivered with no onTrackInit handler for their packetId (MOQT-01). */
|
|
8451
|
+
#unmappedInitDeliveries = 0;
|
|
8492
8452
|
// FEC Payload IDs left unread because their (owner) packetId had no
|
|
8493
8453
|
// configured fec.blockProfile (see #noteUnreadableFecPayloadId).
|
|
8494
8454
|
#fecPayloadIdsWithoutProfile = 0;
|
|
@@ -8685,15 +8645,24 @@ var MmtpRouter = class {
|
|
|
8685
8645
|
return NO_FEC_GEOMETRY_HORIZON;
|
|
8686
8646
|
}
|
|
8687
8647
|
const blockSpanMs = fec.interleaveDepthMsForPacket(packetId);
|
|
8648
|
+
const blockLifetimeMs = fec.blockLifetimeMsForPacket(packetId);
|
|
8649
|
+
if (blockSpanMs === void 0 || blockLifetimeMs === void 0) return NO_FEC_GEOMETRY_HORIZON;
|
|
8688
8650
|
if (blockSpanMs === 0) return NO_BLOCK_SPAN_HORIZON;
|
|
8689
8651
|
return {
|
|
8690
8652
|
kind: "fec-horizon",
|
|
8691
|
-
retentionMs: duplicateRetentionMs({
|
|
8692
|
-
blockSpanMs,
|
|
8693
|
-
blockLifetimeMs: fec.blockLifetimeMsForPacket(packetId)
|
|
8694
|
-
})
|
|
8653
|
+
retentionMs: duplicateRetentionMs({ blockSpanMs, blockLifetimeMs })
|
|
8695
8654
|
};
|
|
8696
8655
|
}
|
|
8656
|
+
/**
|
|
8657
|
+
* Init segments delivered for a packetId with no `onTrackInit` handler
|
|
8658
|
+
* since construction, whether the deprecated aggregate `onInitSegment`
|
|
8659
|
+
* callback then received them or nothing did. A supported deployment reads
|
|
8660
|
+
* 0 here; a non-zero value is the evidence that blocks removing the
|
|
8661
|
+
* aggregate callback (MOQT-01, BLO-21181).
|
|
8662
|
+
*/
|
|
8663
|
+
get unmappedInitDeliveryCount() {
|
|
8664
|
+
return this.#unmappedInitDeliveries;
|
|
8665
|
+
}
|
|
8697
8666
|
/** Publisher restarts detected on the multicast leg since construction. */
|
|
8698
8667
|
get publisherRestartCount() {
|
|
8699
8668
|
return this.#publisherRestarts;
|
|
@@ -8781,7 +8750,7 @@ var MmtpRouter = class {
|
|
|
8781
8750
|
/** Update MFU reassembly timeout. Source and FEC-recovery paths share the
|
|
8782
8751
|
* parser's single reassembler (BLO-8151), so one update covers both. */
|
|
8783
8752
|
setMfuTimeoutMs(ms) {
|
|
8784
|
-
if (ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
|
|
8753
|
+
if (ms !== null && ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
|
|
8785
8754
|
this.#parser.setMfuTimeoutMs(ms);
|
|
8786
8755
|
}
|
|
8787
8756
|
/** Update parser frame reordering for unordered multicast delivery.
|
|
@@ -8851,7 +8820,15 @@ var MmtpRouter = class {
|
|
|
8851
8820
|
onTrackPacket(packetId, cb) {
|
|
8852
8821
|
this.#trackPacketCallbacks.set(packetId, cb);
|
|
8853
8822
|
}
|
|
8854
|
-
/**
|
|
8823
|
+
/**
|
|
8824
|
+
* Register an init segment callback (ftyp+moov from MMTP MPU metadata).
|
|
8825
|
+
* Receives an init only for a packetId with no `onTrackInit` handler.
|
|
8826
|
+
*
|
|
8827
|
+
* @deprecated Use onTrackInit(packetId, cb). Still delivered as a fallback;
|
|
8828
|
+
* removed in the 1.0.0 major, no earlier than one minor release after this
|
|
8829
|
+
* deprecation reaches the `latest` dist-tag (BLO-21181). Count fallback
|
|
8830
|
+
* deliveries with `unmappedInitDeliveryCount`.
|
|
8831
|
+
*/
|
|
8855
8832
|
onInitSegment(cb) {
|
|
8856
8833
|
this.#onInitSegment = cb;
|
|
8857
8834
|
}
|
|
@@ -8865,17 +8842,16 @@ var MmtpRouter = class {
|
|
|
8865
8842
|
* When active, source frames are buffered per FEC block and emitted as
|
|
8866
8843
|
* multi-sample CMAF segments instead of per-frame callbacks. */
|
|
8867
8844
|
enableMseAssembler(packetId, config, catalogTrackName) {
|
|
8868
|
-
const k = this.#kForPacket(packetId);
|
|
8869
8845
|
const assemblerKey = this.#mseAssemblerKey(packetId, catalogTrackName);
|
|
8870
8846
|
const previous = this.#mseAssemblers.get(assemblerKey);
|
|
8871
8847
|
if (previous) {
|
|
8872
8848
|
previous.flush();
|
|
8873
8849
|
previous.dispose();
|
|
8874
8850
|
}
|
|
8875
|
-
const assembler = new CmafBlockAssembler(
|
|
8851
|
+
const assembler = new CmafBlockAssembler(config);
|
|
8876
8852
|
this.#mseAssemblers.set(assemblerKey, assembler);
|
|
8877
8853
|
console.log(
|
|
8878
|
-
`[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (
|
|
8854
|
+
`[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${config.trackType})`
|
|
8879
8855
|
);
|
|
8880
8856
|
return assembler;
|
|
8881
8857
|
}
|
|
@@ -8984,6 +8960,21 @@ var MmtpRouter = class {
|
|
|
8984
8960
|
}
|
|
8985
8961
|
this.#fecMappersByPacketId.set(packetId, mapper);
|
|
8986
8962
|
}
|
|
8963
|
+
/**
|
|
8964
|
+
* Release the router side of a packetId whose FEC is ending: drop its block
|
|
8965
|
+
* mapper and end its FEC release gating. Frames the gate holds are released
|
|
8966
|
+
* in order, each gap stalled (no block will resolve it), not stranded. Call
|
|
8967
|
+
* before FECManager.releasePacket, while the gate can still read its blocks.
|
|
8968
|
+
*/
|
|
8969
|
+
releaseFecPacket(packetId) {
|
|
8970
|
+
this.#fecMappersByPacketId.delete(packetId);
|
|
8971
|
+
this.#withDeferredFecPokes(() => {
|
|
8972
|
+
this.#parser.endFecRelease(packetId);
|
|
8973
|
+
for (const [key, poke] of this.#pendingFecPokes) {
|
|
8974
|
+
if (poke.packetId === packetId) this.#pendingFecPokes.delete(key);
|
|
8975
|
+
}
|
|
8976
|
+
});
|
|
8977
|
+
}
|
|
8987
8978
|
registerManifestTrack(context) {
|
|
8988
8979
|
if (!this.#manifestVerifier) throw new Error("manifest verifier is not configured");
|
|
8989
8980
|
this.#manifestVerifier.registerTrack(context);
|
|
@@ -9103,87 +9094,21 @@ var MmtpRouter = class {
|
|
|
9103
9094
|
this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
|
|
9104
9095
|
return;
|
|
9105
9096
|
}
|
|
9106
|
-
|
|
9107
|
-
this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
|
|
9108
|
-
return;
|
|
9109
|
-
}
|
|
9110
|
-
const repairSbn = this.#deriveRepairSbn(parsed.ssStart, parsed.ssbLength, ownerPacketId);
|
|
9111
|
-
if (repairSbn === null) return;
|
|
9112
|
-
const repairEsi = this.#kForPacket(ownerPacketId) + parsed.rsId;
|
|
9113
|
-
if (!this.#feedFecTransportSymbol(
|
|
9114
|
-
ownerPacketId,
|
|
9115
|
-
repairSbn,
|
|
9116
|
-
repairEsi,
|
|
9117
|
-
parsed.symbolData,
|
|
9118
|
-
"moq",
|
|
9119
|
-
catalogTrackName
|
|
9120
|
-
)) return;
|
|
9121
|
-
const recovered = catalogTrackName === void 0 ? this.#fecManager.feedRepairSymbol(
|
|
9122
|
-
ownerPacketId,
|
|
9123
|
-
parsed.ssStart,
|
|
9124
|
-
parsed.ssbLength,
|
|
9125
|
-
parsed.rsId,
|
|
9126
|
-
parsed.symbolData
|
|
9127
|
-
) : this.#fecManager.feedRepairSymbol(
|
|
9128
|
-
ownerPacketId,
|
|
9129
|
-
parsed.ssStart,
|
|
9130
|
-
parsed.ssbLength,
|
|
9131
|
-
parsed.rsId,
|
|
9132
|
-
parsed.symbolData,
|
|
9133
|
-
catalogTrackName
|
|
9134
|
-
);
|
|
9135
|
-
if (recovered) {
|
|
9136
|
-
const alreadyCompleted = catalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId) : this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
|
|
9137
|
-
if (catalogTrackName === void 0) {
|
|
9138
|
-
this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
|
|
9139
|
-
} else {
|
|
9140
|
-
this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId, catalogTrackName);
|
|
9141
|
-
}
|
|
9142
|
-
if (!alreadyCompleted) {
|
|
9143
|
-
this.#fecManager.countRecovery(ownerPacketId, repairSbn, catalogTrackName);
|
|
9144
|
-
if (catalogTrackName === void 0) {
|
|
9145
|
-
this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
|
|
9146
|
-
} else {
|
|
9147
|
-
this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId, catalogTrackName);
|
|
9148
|
-
}
|
|
9149
|
-
this.#routeRecoveredBlock(
|
|
9150
|
-
repairSbn,
|
|
9151
|
-
recovered,
|
|
9152
|
-
ownerPacketId,
|
|
9153
|
-
catalogTrackName
|
|
9154
|
-
);
|
|
9155
|
-
}
|
|
9156
|
-
}
|
|
9097
|
+
this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
|
|
9157
9098
|
}
|
|
9158
9099
|
}
|
|
9159
|
-
// ──
|
|
9160
|
-
#kForPacket(packetId) {
|
|
9161
|
-
if (packetId != null)
|
|
9162
|
-
return this.#fecManager?.kForPacket?.(packetId) ?? this.#fecMappersByPacketId.get(packetId)?.k ?? this.#fecManager?.k ?? 4;
|
|
9163
|
-
return this.#defaultFecMapper?.k ?? this.#fecManager?.k ?? 4;
|
|
9164
|
-
}
|
|
9100
|
+
// ── Packet FEC geometry and block profile ───────────────────────
|
|
9165
9101
|
#symbolSizeForPacket(packetId) {
|
|
9166
|
-
if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ??
|
|
9102
|
+
if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? 0;
|
|
9167
9103
|
return this.#fecManager?.symbolSize ?? 0;
|
|
9168
9104
|
}
|
|
9169
|
-
/** Derive SBN/ESI from SS_ID using packet-scoped FEC geometry. */
|
|
9170
|
-
#deriveSbnEsi(ssId, packetId) {
|
|
9171
|
-
const mapper = packetId == null ? this.#defaultFecMapper : this.#fecMappersByPacketId.get(packetId) ?? null;
|
|
9172
|
-
if (mapper) return mapper.fromSsId(ssId);
|
|
9173
|
-
const k = this.#kForPacket(packetId);
|
|
9174
|
-
return { sbn: Math.floor(ssId / k), esi: ssId % k };
|
|
9175
|
-
}
|
|
9176
|
-
#deriveRepairSbn(ssStart, ssbLength, packetId) {
|
|
9177
|
-
const k = this.#kForPacket(packetId);
|
|
9178
|
-
if (ssbLength <= 0 || ssbLength > k || ssStart % k !== 0) return null;
|
|
9179
|
-
return Math.floor(ssStart / k);
|
|
9180
|
-
}
|
|
9181
9105
|
/**
|
|
9182
9106
|
* The configured block profile of a packetId, or undefined while it is
|
|
9183
9107
|
* unconfigured. With an FEC manager its per-packet configuration is the
|
|
9184
9108
|
* only source. A router without one still recovers symbols through its
|
|
9185
9109
|
* registered mapper, built with the catalog's explicit profile: the
|
|
9186
|
-
* packet's own mapper, else the default one (
|
|
9110
|
+
* packet's own mapper, else the default one. A NullBlockMapper (a stream
|
|
9111
|
+
* without an FEC instance) states none.
|
|
9187
9112
|
*/
|
|
9188
9113
|
#configuredBlockProfile(packetId) {
|
|
9189
9114
|
if (this.#fecManager) return this.#fecManager.blockProfileForPacket(packetId);
|
|
@@ -9191,9 +9116,10 @@ var MmtpRouter = class {
|
|
|
9191
9116
|
return mapper?.blockProfile ?? void 0;
|
|
9192
9117
|
}
|
|
9193
9118
|
/**
|
|
9194
|
-
* The block profile an FEC coordinate of `packetId` is read under
|
|
9195
|
-
*
|
|
9196
|
-
*
|
|
9119
|
+
* The block profile an FEC coordinate of `packetId` is read under:
|
|
9120
|
+
* `iso-ssbg1-v1`, the only one (`k-padded-v1` is retired and refused).
|
|
9121
|
+
* Throws while none is configured: such a packet has no FEC geometry, and
|
|
9122
|
+
* nothing is inferred from the wire or defaulted.
|
|
9197
9123
|
* Packet ingress leaves such a packet's FEC Payload ID unread first
|
|
9198
9124
|
* (#noteUnreadableFecPayloadId); a throw here is a wiring fault on a path
|
|
9199
9125
|
* that cannot hold an unconfigured packet.
|
|
@@ -9207,8 +9133,16 @@ var MmtpRouter = class {
|
|
|
9207
9133
|
}
|
|
9208
9134
|
return profile;
|
|
9209
9135
|
}
|
|
9210
|
-
|
|
9211
|
-
|
|
9136
|
+
/**
|
|
9137
|
+
* The block coordinates (SS_Start, ESI) of an FEC source: range membership
|
|
9138
|
+
* in a block a repair already stated (ISO/IEC 23008-1 C.5.3). Null while no
|
|
9139
|
+
* repair has stated its block, while its packetId has no configured block
|
|
9140
|
+
* profile, and without an FEC manager: SS_ID alone locates no block, so
|
|
9141
|
+
* nothing is derived from it.
|
|
9142
|
+
*/
|
|
9143
|
+
#locateFecSource(packetId, catalogTrackName, ssId) {
|
|
9144
|
+
if (this.#configuredBlockProfile(packetId) === void 0) return null;
|
|
9145
|
+
return this.#fecManager?.locateIsoSource?.(packetId, catalogTrackName, ssId) ?? null;
|
|
9212
9146
|
}
|
|
9213
9147
|
/**
|
|
9214
9148
|
* Explicit refusal to read an FEC Payload ID: its (owner) packetId has no
|
|
@@ -9227,21 +9161,20 @@ var MmtpRouter = class {
|
|
|
9227
9161
|
}
|
|
9228
9162
|
}
|
|
9229
9163
|
/**
|
|
9230
|
-
* The release-gate anchor of a recovered symbol: its
|
|
9231
|
-
*
|
|
9232
|
-
*
|
|
9164
|
+
* The release-gate anchor of a recovered symbol: its own SS_ID, SS_Start +
|
|
9165
|
+
* ESI modulo 2^32 (C.5.2), where a frame is gated by the SS_IDs between it
|
|
9166
|
+
* and the last released frame.
|
|
9233
9167
|
*/
|
|
9234
|
-
#fecAnchorForRecovered(
|
|
9235
|
-
return
|
|
9168
|
+
#fecAnchorForRecovered(blockStart, index) {
|
|
9169
|
+
return serial32Add(blockStart, index);
|
|
9236
9170
|
}
|
|
9237
9171
|
/**
|
|
9238
9172
|
* One iso-ssbg1-v1 repair symbol (ISO/IEC 23008-1 C.5.3). It states the
|
|
9239
9173
|
* block `[SS_Start, SS_Start + SSB_length)`; repair ESI = SSB_length +
|
|
9240
9174
|
* RS_ID (K' = SSB_length). The held sources it placed (and those of a
|
|
9241
9175
|
* repair-less span in front of it) are fed as first-arrival sources, then
|
|
9242
|
-
* the repair, the order they had on the wire, so a loss-free block
|
|
9243
|
-
* on its repair
|
|
9244
|
-
* block is dropped.
|
|
9176
|
+
* the repair, the order they had on the wire, so a loss-free block completes
|
|
9177
|
+
* clean on its repair. A repair contradicting a known block is dropped.
|
|
9245
9178
|
*/
|
|
9246
9179
|
#handleIsoRepair(ownerPacketId, catalogTrackName, repair, source) {
|
|
9247
9180
|
const fec = this.#fecManager;
|
|
@@ -9308,7 +9241,7 @@ var MmtpRouter = class {
|
|
|
9308
9241
|
}
|
|
9309
9242
|
if (payload.oversized) continue;
|
|
9310
9243
|
const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
|
|
9311
|
-
const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData,
|
|
9244
|
+
const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, catalogTrackName);
|
|
9312
9245
|
if (!recovered || alreadyCompleted) continue;
|
|
9313
9246
|
fec.cancelBlockTimeout(blockStart, ownerPacketId, catalogTrackName);
|
|
9314
9247
|
fec.countRecovery(ownerPacketId, blockStart, catalogTrackName);
|
|
@@ -9333,7 +9266,8 @@ var MmtpRouter = class {
|
|
|
9333
9266
|
return null;
|
|
9334
9267
|
}
|
|
9335
9268
|
/** Route a recovered FEC block through the parser + dedup pipeline.
|
|
9336
|
-
* Sync WASM decoders return K fixed-width
|
|
9269
|
+
* Sync WASM decoders return the block's K' = SSB_length fixed-width
|
|
9270
|
+
* ssbg_mode1 source symbols concatenated. */
|
|
9337
9271
|
routeRecoveredBlock(blockId, data, packetId, catalogTrackName) {
|
|
9338
9272
|
this.#routeRecoveredBlock(blockId, data, packetId, catalogTrackName);
|
|
9339
9273
|
}
|
|
@@ -9801,29 +9735,19 @@ var MmtpRouter = class {
|
|
|
9801
9735
|
resolvedLoss: (packetId, catalogTrackName, fromSbn, toSbn, releasedSbn) => {
|
|
9802
9736
|
const fec = this.#fecManager;
|
|
9803
9737
|
if (!fec?.blockResolution) return [];
|
|
9804
|
-
|
|
9805
|
-
|
|
9806
|
-
return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
|
|
9807
|
-
}
|
|
9808
|
-
const highest = fec.highestSbn?.(packetId, catalogTrackName);
|
|
9809
|
-
const lost = [];
|
|
9810
|
-
for (let sbn = fromSbn; sbn <= toSbn; sbn++) {
|
|
9811
|
-
const resolution = fec.blockResolution(sbn, packetId, catalogTrackName);
|
|
9812
|
-
if (resolution === "pending") return null;
|
|
9813
|
-
if (resolution === "failed") {
|
|
9814
|
-
lost.push(sbn);
|
|
9815
|
-
} else if (resolution === "untracked") {
|
|
9816
|
-
if (sbn === releasedSbn) continue;
|
|
9817
|
-
if (highest === void 0 || sbn > highest) return null;
|
|
9818
|
-
lost.push(sbn);
|
|
9819
|
-
}
|
|
9820
|
-
}
|
|
9821
|
-
return lost;
|
|
9738
|
+
const head = fromSbn === releasedSbn ? toSbn : fromSbn;
|
|
9739
|
+
return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
|
|
9822
9740
|
},
|
|
9823
9741
|
// The retention window itself: a frame is never still held when a block
|
|
9824
9742
|
// it waits on retires. Only consulted while resolvedLoss holds a gap,
|
|
9825
9743
|
// which needs blockResolution, so the check above guarantees the method.
|
|
9826
|
-
|
|
9744
|
+
// A packetId the manager no longer has configured (released) has no
|
|
9745
|
+
// block left to wait on: release its frames now (BLO-45953).
|
|
9746
|
+
holdLimitMs: (packetId) => {
|
|
9747
|
+
const fec = this.#fecManager;
|
|
9748
|
+
if (!fec?.terminalRetentionMsForPacket) return Infinity;
|
|
9749
|
+
return fec.terminalRetentionMsForPacket(packetId) ?? 0;
|
|
9750
|
+
},
|
|
9827
9751
|
decide: (before, after, lostBlocks, discontinuity) => {
|
|
9828
9752
|
const decision = this.#decideGap(before, after, lostBlocks, discontinuity);
|
|
9829
9753
|
this.#onFrameGap?.(decision);
|
|
@@ -9885,9 +9809,10 @@ var MmtpRouter = class {
|
|
|
9885
9809
|
}
|
|
9886
9810
|
/**
|
|
9887
9811
|
* The most media units a gap between two released frames can hold: the
|
|
9888
|
-
* FEC blocks
|
|
9889
|
-
* block touches (ceil(interleaveDepthMs / unit duration), §5.1).
|
|
9890
|
-
* either
|
|
9812
|
+
* FEC blocks between `before`'s anchor and `after`'s, times D, the media
|
|
9813
|
+
* units one block touches (ceil(interleaveDepthMs / unit duration), §5.1).
|
|
9814
|
+
* Null when either anchor, the unit duration or the catalog interleave is
|
|
9815
|
+
* unknown.
|
|
9891
9816
|
*/
|
|
9892
9817
|
#maxMissingUnits(before, after) {
|
|
9893
9818
|
const from = before.fecSbn;
|
|
@@ -9900,7 +9825,7 @@ var MmtpRouter = class {
|
|
|
9900
9825
|
const denominator = BigInt(timing.durationTicks) * 1000n;
|
|
9901
9826
|
const unitsPerBlock = (numerator + denominator - 1n) / denominator;
|
|
9902
9827
|
const blocks = BigInt(
|
|
9903
|
-
(
|
|
9828
|
+
(serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from)) + 1
|
|
9904
9829
|
);
|
|
9905
9830
|
const bound = unitsPerBlock * blocks;
|
|
9906
9831
|
return bound > BigInt(Number.MAX_SAFE_INTEGER) ? null : Number(bound);
|
|
@@ -9950,8 +9875,9 @@ var MmtpRouter = class {
|
|
|
9950
9875
|
const cb = this.#trackInitCallbacks.get(packetId);
|
|
9951
9876
|
if (cb) {
|
|
9952
9877
|
cb(data);
|
|
9953
|
-
} else
|
|
9954
|
-
this.#
|
|
9878
|
+
} else {
|
|
9879
|
+
this.#unmappedInitDeliveries++;
|
|
9880
|
+
this.#onInitSegment?.(data);
|
|
9955
9881
|
}
|
|
9956
9882
|
console.log(
|
|
9957
9883
|
`[MmtpRouter] Init delivered for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${data.byteLength}B)`
|
|
@@ -9993,9 +9919,9 @@ var MmtpRouter = class {
|
|
|
9993
9919
|
if (!info.isRepair && this.#manifestVerifier && !manifestAdmitted) {
|
|
9994
9920
|
let identity = manifestIdentity;
|
|
9995
9921
|
if (!identity && info.fecPayloadId && !fecUnreadable && (this.#resolveManifestIdentityForRoute || this.#resolveManifestIdentity)) {
|
|
9996
|
-
const coordinates = this.#deriveSbnEsi(info.fecPayloadId.ssId, info.packetId);
|
|
9997
9922
|
const catalogTrackName = catalogTrackNameForPacket(ingress, info.packetId);
|
|
9998
|
-
|
|
9923
|
+
const coordinates = this.#locateFecSource(info.packetId, catalogTrackName, info.fecPayloadId.ssId);
|
|
9924
|
+
identity = coordinates === null ? void 0 : (this.#resolveManifestIdentityForRoute ? this.#resolveManifestIdentityForRoute({
|
|
9999
9925
|
packetId: info.packetId,
|
|
10000
9926
|
sbn: coordinates.sbn,
|
|
10001
9927
|
esi: coordinates.esi,
|
|
@@ -10047,79 +9973,7 @@ var MmtpRouter = class {
|
|
|
10047
9973
|
this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
|
|
10048
9974
|
return;
|
|
10049
9975
|
}
|
|
10050
|
-
|
|
10051
|
-
this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
|
|
10052
|
-
return;
|
|
10053
|
-
}
|
|
10054
|
-
const repairSbn = this.#deriveRepairSbn(repair.ssStart, repair.ssbLength, ownerPacketId);
|
|
10055
|
-
if (repairSbn === null) return;
|
|
10056
|
-
const repairEsi = this.#kForPacket(ownerPacketId) + repair.rsId;
|
|
10057
|
-
if (!this.#feedFecTransportSymbol(
|
|
10058
|
-
ownerPacketId,
|
|
10059
|
-
repairSbn,
|
|
10060
|
-
repairEsi,
|
|
10061
|
-
repair.symbolData,
|
|
10062
|
-
source,
|
|
10063
|
-
catalogTrackNameForPacket(ingress, ownerPacketId)
|
|
10064
|
-
)) return;
|
|
10065
|
-
const repairCatalogTrackName = catalogTrackNameForPacket(ingress, ownerPacketId);
|
|
10066
|
-
if (repairCatalogTrackName === void 0) {
|
|
10067
|
-
this.#fecManager.noteBlockActivity?.(repairSbn, ownerPacketId);
|
|
10068
|
-
} else {
|
|
10069
|
-
this.#fecManager.noteBlockActivity?.(
|
|
10070
|
-
repairSbn,
|
|
10071
|
-
ownerPacketId,
|
|
10072
|
-
repairCatalogTrackName
|
|
10073
|
-
);
|
|
10074
|
-
}
|
|
10075
|
-
const recovered = repairCatalogTrackName === void 0 ? this.#fecManager.feedRepairSymbol(
|
|
10076
|
-
ownerPacketId,
|
|
10077
|
-
repair.ssStart,
|
|
10078
|
-
repair.ssbLength,
|
|
10079
|
-
repair.rsId,
|
|
10080
|
-
repair.symbolData
|
|
10081
|
-
) : this.#fecManager.feedRepairSymbol(
|
|
10082
|
-
ownerPacketId,
|
|
10083
|
-
repair.ssStart,
|
|
10084
|
-
repair.ssbLength,
|
|
10085
|
-
repair.rsId,
|
|
10086
|
-
repair.symbolData,
|
|
10087
|
-
repairCatalogTrackName
|
|
10088
|
-
);
|
|
10089
|
-
if (recovered) {
|
|
10090
|
-
const alreadyCompleted = repairCatalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(repairSbn, ownerPacketId) : this.#fecManager.isBlockCompleted(
|
|
10091
|
-
repairSbn,
|
|
10092
|
-
ownerPacketId,
|
|
10093
|
-
repairCatalogTrackName
|
|
10094
|
-
);
|
|
10095
|
-
if (repairCatalogTrackName === void 0) {
|
|
10096
|
-
this.#fecManager.cancelBlockTimeout(repairSbn, ownerPacketId);
|
|
10097
|
-
} else {
|
|
10098
|
-
this.#fecManager.cancelBlockTimeout(
|
|
10099
|
-
repairSbn,
|
|
10100
|
-
ownerPacketId,
|
|
10101
|
-
repairCatalogTrackName
|
|
10102
|
-
);
|
|
10103
|
-
}
|
|
10104
|
-
if (!alreadyCompleted) {
|
|
10105
|
-
this.#fecManager.countRecovery(ownerPacketId, repairSbn, repairCatalogTrackName);
|
|
10106
|
-
if (repairCatalogTrackName === void 0) {
|
|
10107
|
-
this.#fecManager.markBlockCompleted(repairSbn, ownerPacketId);
|
|
10108
|
-
} else {
|
|
10109
|
-
this.#fecManager.markBlockCompleted(
|
|
10110
|
-
repairSbn,
|
|
10111
|
-
ownerPacketId,
|
|
10112
|
-
repairCatalogTrackName
|
|
10113
|
-
);
|
|
10114
|
-
}
|
|
10115
|
-
this.#routeRecoveredBlock(
|
|
10116
|
-
repairSbn,
|
|
10117
|
-
recovered,
|
|
10118
|
-
ownerPacketId,
|
|
10119
|
-
catalogTrackNameForPacket(ingress, ownerPacketId)
|
|
10120
|
-
);
|
|
10121
|
-
}
|
|
10122
|
-
}
|
|
9976
|
+
this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
|
|
10123
9977
|
}
|
|
10124
9978
|
} else {
|
|
10125
9979
|
if (this.#classifyPacketId(info.packetId) === null) return;
|
|
@@ -10143,8 +9997,8 @@ var MmtpRouter = class {
|
|
|
10143
9997
|
}
|
|
10144
9998
|
const duplicates = this.#stream(info.packetId, catalogTrackName).duplicates;
|
|
10145
9999
|
const fecPayloadId = fecUnreadable ? null : info.fecPayloadId;
|
|
10146
|
-
const
|
|
10147
|
-
const coords =
|
|
10000
|
+
const fecSource = this.#fecManager !== null && fecPayloadId != null;
|
|
10001
|
+
const coords = fecSource && fecPayloadId ? this.#locateFecSource(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? void 0 : void 0;
|
|
10148
10002
|
duplicates.advance(coords?.sbn);
|
|
10149
10003
|
if (source === "multicast" && !overlapCopy && !releasedFromQuarantine && catalogTrackName !== void 0 && duplicates.predatesHorizon(info.sequenceNumber, fecPayloadId?.ssId)) {
|
|
10150
10004
|
this.#publisherRestarts++;
|
|
@@ -10159,9 +10013,8 @@ var MmtpRouter = class {
|
|
|
10159
10013
|
}
|
|
10160
10014
|
if (this.#fecManager && fecPayloadId && coords) {
|
|
10161
10015
|
const fecId = fecPayloadId;
|
|
10162
|
-
const symbolSize = this.#symbolSizeForPacket(info.packetId);
|
|
10163
10016
|
const rawSymbol = packet.subarray(0, packet.length - 4);
|
|
10164
|
-
const oversized =
|
|
10017
|
+
const oversized = !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false);
|
|
10165
10018
|
let overlapBlockCompleted = false;
|
|
10166
10019
|
if (overlapCopy) {
|
|
10167
10020
|
overlapBlockCompleted = catalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(coords.sbn, info.packetId) : this.#fecManager.isBlockCompleted(
|
|
@@ -10196,7 +10049,7 @@ var MmtpRouter = class {
|
|
|
10196
10049
|
}
|
|
10197
10050
|
parseSourceSymbol = (overlapCopy ? !overlapBlockCompleted : sourceSymbolAccepted) && !duplicates.parsedSymbols.has(fecId.ssId);
|
|
10198
10051
|
fecInfo = { sbn: coords.sbn, esi: coords.esi, oversized };
|
|
10199
|
-
} else if (
|
|
10052
|
+
} else if (fecSource && this.#fecManager && fecPayloadId) {
|
|
10200
10053
|
const ssId = fecPayloadId.ssId;
|
|
10201
10054
|
if (overlapCopy) {
|
|
10202
10055
|
parseSourceSymbol = !duplicates.parsedSymbols.has(ssId);
|
|
@@ -10230,12 +10083,13 @@ var MmtpRouter = class {
|
|
|
10230
10083
|
this.#feedViaParser(packet, info, fecInfo, {
|
|
10231
10084
|
source,
|
|
10232
10085
|
catalogTrackName,
|
|
10233
|
-
|
|
10086
|
+
// An FEC source frame is anchored by its own SS_ID (C.5.2).
|
|
10087
|
+
...fecSource && fecPayloadId ? { fecSbn: fecPayloadId.ssId } : {}
|
|
10234
10088
|
}, parsed);
|
|
10235
10089
|
}
|
|
10236
10090
|
if (this.#classifyPacketId(info.packetId) === null) return;
|
|
10237
|
-
if (this.#fecManager && fecPayloadId && sourceSymbolAccepted && sourceSymbolTrackable) {
|
|
10238
|
-
const { sbn, esi } =
|
|
10091
|
+
if (this.#fecManager && fecPayloadId && coords && sourceSymbolAccepted && sourceSymbolTrackable) {
|
|
10092
|
+
const { sbn, esi } = coords;
|
|
10239
10093
|
if (this.#classifyPacketId(info.packetId) !== null && this.#fecManager.isTrackConfigured?.(info.packetId) !== false) {
|
|
10240
10094
|
this.#fecManager.trackBlock(
|
|
10241
10095
|
sbn,
|
|
@@ -10256,13 +10110,11 @@ var MmtpRouter = class {
|
|
|
10256
10110
|
const recovered = catalogTrackName === void 0 ? this.#fecManager.feedSourceSymbol(
|
|
10257
10111
|
info.packetId,
|
|
10258
10112
|
sourceFec.ssId,
|
|
10259
|
-
sourceFec.symbolData
|
|
10260
|
-
void 0
|
|
10113
|
+
sourceFec.symbolData
|
|
10261
10114
|
) : this.#fecManager.feedSourceSymbol(
|
|
10262
10115
|
info.packetId,
|
|
10263
10116
|
sourceFec.ssId,
|
|
10264
10117
|
sourceFec.symbolData,
|
|
10265
|
-
void 0,
|
|
10266
10118
|
catalogTrackName
|
|
10267
10119
|
);
|
|
10268
10120
|
if (recovered) {
|
|
@@ -10669,7 +10521,6 @@ var MmtpRouter = class {
|
|
|
10669
10521
|
// ── Private: FEC recovery routing ───────────────────────────────
|
|
10670
10522
|
/** Route WASM-recovered block through appropriate path based on container kind. */
|
|
10671
10523
|
#routeRecoveredBlock(blockId, recovered, ownerPacketId, catalogTrackName) {
|
|
10672
|
-
const k = this.#kForPacket(ownerPacketId);
|
|
10673
10524
|
const packetSymbolSize = this.#symbolSizeForPacket(ownerPacketId);
|
|
10674
10525
|
if (ownerPacketId === void 0) {
|
|
10675
10526
|
throw new Error("[MmtpRouter] a recovered FEC block needs its owner packetId to read its fec.blockProfile");
|
|
@@ -10682,7 +10533,6 @@ var MmtpRouter = class {
|
|
|
10682
10533
|
}
|
|
10683
10534
|
const symbolSize = packetSymbolSize;
|
|
10684
10535
|
const result = processFecBlock(recovered, {
|
|
10685
|
-
...blockProfile === "k-padded-v1" ? { k } : {},
|
|
10686
10536
|
symbolSize,
|
|
10687
10537
|
ownerPacketId,
|
|
10688
10538
|
blockProfile
|
|
@@ -10762,8 +10612,7 @@ var MmtpRouter = class {
|
|
|
10762
10612
|
const admission = verifier.admitObject(
|
|
10763
10613
|
{
|
|
10764
10614
|
...identity,
|
|
10765
|
-
packetId: ownerPacketId
|
|
10766
|
-
...ownerPacketId !== void 0 && this.#isIsoPacket(ownerPacketId) ? {} : { ssId: blockId * this.#kForPacket(ownerPacketId) + symbol.index }
|
|
10615
|
+
packetId: ownerPacketId
|
|
10767
10616
|
},
|
|
10768
10617
|
symbol.rawSymbol,
|
|
10769
10618
|
() => {
|
|
@@ -10866,7 +10715,7 @@ var MmtpRouter = class {
|
|
|
10866
10715
|
rapFlag: sym.fragment.rapFlag,
|
|
10867
10716
|
recovered: true,
|
|
10868
10717
|
deliveryProvenance,
|
|
10869
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
10718
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
10870
10719
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
10871
10720
|
});
|
|
10872
10721
|
continue;
|
|
@@ -10978,7 +10827,7 @@ var MmtpRouter = class {
|
|
|
10978
10827
|
rapFlag: assembled.rapFlag,
|
|
10979
10828
|
recovered: true,
|
|
10980
10829
|
...assembled.deliveryProvenance === void 0 ? {} : { deliveryProvenance: assembled.deliveryProvenance },
|
|
10981
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
10830
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
10982
10831
|
...recoveredCatalogTrackName === void 0 ? {} : { catalogTrackName: recoveredCatalogTrackName }
|
|
10983
10832
|
});
|
|
10984
10833
|
continue;
|
|
@@ -11115,7 +10964,7 @@ var MmtpRouter = class {
|
|
|
11115
10964
|
rapFlag: sym.fragment.rapFlag,
|
|
11116
10965
|
recovered: true,
|
|
11117
10966
|
deliveryProvenance,
|
|
11118
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
10967
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11119
10968
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
11120
10969
|
});
|
|
11121
10970
|
} else {
|
|
@@ -11194,7 +11043,7 @@ var MmtpRouter = class {
|
|
|
11194
11043
|
rapFlag: assembled.rapFlag,
|
|
11195
11044
|
recovered: true,
|
|
11196
11045
|
deliveryProvenance,
|
|
11197
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
11046
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11198
11047
|
...assembled.catalogTrackName === void 0 ? {} : { catalogTrackName: assembled.catalogTrackName }
|
|
11199
11048
|
});
|
|
11200
11049
|
}
|
|
@@ -11229,7 +11078,7 @@ var MmtpRouter = class {
|
|
|
11229
11078
|
...sym.fragment.sampleNumber === void 0 ? {} : { sampleNumber: sym.fragment.sampleNumber },
|
|
11230
11079
|
recovered: true,
|
|
11231
11080
|
deliveryProvenance,
|
|
11232
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
11081
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11233
11082
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
11234
11083
|
});
|
|
11235
11084
|
continue;
|