@blockcast/mmt-container 0.3.0 → 0.4.0-main.1cd3cdea89da
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 +14814 -14255
- 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 +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 +151 -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 +147 -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 +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 +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 +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,
|
|
@@ -6627,6 +6565,42 @@ var FecReleaseSequencer = class {
|
|
|
6627
6565
|
for (const stream of this.#streams.values()) total += stream.buf.length;
|
|
6628
6566
|
return total;
|
|
6629
6567
|
}
|
|
6568
|
+
#deferDepth = 0;
|
|
6569
|
+
#deferredStreams = /* @__PURE__ */ new Set();
|
|
6570
|
+
/**
|
|
6571
|
+
* Run `work` with the drains its pushes would run deferred to its end. A
|
|
6572
|
+
* recovered FEC block is routed one frame at a time, and its block is
|
|
6573
|
+
* already resolved when the first frame is pushed: draining on that push
|
|
6574
|
+
* would release past the gap before the block's other recovered frames
|
|
6575
|
+
* arrive (deciding a conceal or stall for media that is about to land),
|
|
6576
|
+
* and those frames would then be dropped as stale. Nests.
|
|
6577
|
+
*/
|
|
6578
|
+
defer(work) {
|
|
6579
|
+
this.#deferDepth++;
|
|
6580
|
+
let threw = true;
|
|
6581
|
+
try {
|
|
6582
|
+
work();
|
|
6583
|
+
threw = false;
|
|
6584
|
+
} finally {
|
|
6585
|
+
this.#deferDepth--;
|
|
6586
|
+
if (this.#deferDepth === 0 && this.#deferredStreams.size > 0) {
|
|
6587
|
+
const streams = [...this.#deferredStreams];
|
|
6588
|
+
this.#deferredStreams.clear();
|
|
6589
|
+
if (!threw) {
|
|
6590
|
+
for (const stream of streams) this.#drain(stream);
|
|
6591
|
+
} else {
|
|
6592
|
+
try {
|
|
6593
|
+
for (const stream of streams) this.#drain(stream);
|
|
6594
|
+
} catch {
|
|
6595
|
+
}
|
|
6596
|
+
}
|
|
6597
|
+
}
|
|
6598
|
+
}
|
|
6599
|
+
}
|
|
6600
|
+
#drainUnlessDeferred(stream) {
|
|
6601
|
+
if (this.#deferDepth > 0) this.#deferredStreams.add(stream);
|
|
6602
|
+
else this.#drain(stream);
|
|
6603
|
+
}
|
|
6630
6604
|
push(streamKey, data, meta, seq) {
|
|
6631
6605
|
const frame = { data, meta: { ...meta }, seq, arrivedAtMs: performance.now() };
|
|
6632
6606
|
const stream = this.#streamFor(streamKey, meta);
|
|
@@ -6648,7 +6622,7 @@ var FecReleaseSequencer = class {
|
|
|
6648
6622
|
return;
|
|
6649
6623
|
}
|
|
6650
6624
|
this.#release(stream, frame, void 0);
|
|
6651
|
-
this.#
|
|
6625
|
+
this.#drainUnlessDeferred(stream);
|
|
6652
6626
|
return;
|
|
6653
6627
|
}
|
|
6654
6628
|
let lo = 0;
|
|
@@ -6659,7 +6633,23 @@ var FecReleaseSequencer = class {
|
|
|
6659
6633
|
else hi = mid;
|
|
6660
6634
|
}
|
|
6661
6635
|
stream.buf.splice(lo, 0, frame);
|
|
6662
|
-
this.#
|
|
6636
|
+
this.#drainUnlessDeferred(stream);
|
|
6637
|
+
}
|
|
6638
|
+
/**
|
|
6639
|
+
* Arrival time of the earliest frame a stream of `packetId` holds behind a
|
|
6640
|
+
* gap (the gate forces it out `holdLimitMs` after that), or undefined when
|
|
6641
|
+
* none is held. Without `catalogTrackName`, every stream of the packetId.
|
|
6642
|
+
*/
|
|
6643
|
+
earliestHeldArrivalMs(packetId, catalogTrackName) {
|
|
6644
|
+
let earliest;
|
|
6645
|
+
for (const stream of this.#streams.values()) {
|
|
6646
|
+
if (stream.packetId !== packetId) continue;
|
|
6647
|
+
if (catalogTrackName !== void 0 && stream.catalogTrackName !== catalogTrackName) continue;
|
|
6648
|
+
for (const frame of stream.buf) {
|
|
6649
|
+
if (earliest === void 0 || frame.arrivedAtMs < earliest) earliest = frame.arrivedAtMs;
|
|
6650
|
+
}
|
|
6651
|
+
}
|
|
6652
|
+
return earliest;
|
|
6663
6653
|
}
|
|
6664
6654
|
/** Re-evaluate held gaps after FEC state changed. */
|
|
6665
6655
|
poke(streamKey) {
|
|
@@ -6712,6 +6702,21 @@ var FecReleaseSequencer = class {
|
|
|
6712
6702
|
this.#streams.delete(key);
|
|
6713
6703
|
}
|
|
6714
6704
|
}
|
|
6705
|
+
/**
|
|
6706
|
+
* The packet's FEC ended, so no block will resolve a held gap: release its
|
|
6707
|
+
* frames in order, each gap stalled as a discontinuity, and forget its
|
|
6708
|
+
* streams, so FEC configured on it again starts from a fresh one.
|
|
6709
|
+
*/
|
|
6710
|
+
endPacket(packetId) {
|
|
6711
|
+
for (const [key, stream] of this.#streams) {
|
|
6712
|
+
if (stream.packetId !== packetId) continue;
|
|
6713
|
+
while (stream.buf.length > 0 && stream.last !== null) {
|
|
6714
|
+
stream.discontinuity = true;
|
|
6715
|
+
this.#drain(stream);
|
|
6716
|
+
}
|
|
6717
|
+
this.#streams.delete(key);
|
|
6718
|
+
}
|
|
6719
|
+
}
|
|
6715
6720
|
discardPacket(packetId) {
|
|
6716
6721
|
for (const [key, stream] of this.#streams) {
|
|
6717
6722
|
if (stream.packetId !== packetId) continue;
|
|
@@ -7080,6 +7085,22 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7080
7085
|
}
|
|
7081
7086
|
) : null;
|
|
7082
7087
|
}
|
|
7088
|
+
/**
|
|
7089
|
+
* Run `work` with the FEC release gate's drains deferred to its end, so
|
|
7090
|
+
* every frame it pushes is in place before any held gap is decided (see
|
|
7091
|
+
* FecReleaseSequencer.defer).
|
|
7092
|
+
*/
|
|
7093
|
+
deferFecRelease(work) {
|
|
7094
|
+
if (!this.#fecSequencer) {
|
|
7095
|
+
work();
|
|
7096
|
+
return;
|
|
7097
|
+
}
|
|
7098
|
+
this.#fecSequencer.defer(work);
|
|
7099
|
+
}
|
|
7100
|
+
/** See FecReleaseSequencer.earliestHeldArrivalMs. */
|
|
7101
|
+
fecReleaseEarliestHeldAtMs(packetId, catalogTrackName) {
|
|
7102
|
+
return this.#fecSequencer?.earliestHeldArrivalMs(packetId, catalogTrackName);
|
|
7103
|
+
}
|
|
7083
7104
|
/** Re-evaluate held gaps after FEC block state changed. */
|
|
7084
7105
|
pokeFecRelease(packetId, catalogTrackName) {
|
|
7085
7106
|
if (!this.#fecSequencer) return;
|
|
@@ -7094,6 +7115,13 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7094
7115
|
markFecDiscontinuity(packetId, catalogTrackName) {
|
|
7095
7116
|
this.#fecSequencer?.markDiscontinuity(this.#streamKey(packetId, catalogTrackName));
|
|
7096
7117
|
}
|
|
7118
|
+
/**
|
|
7119
|
+
* The FEC of a packet ID ended: release the frames the FEC release gate
|
|
7120
|
+
* holds for it in order, each gap stalled, and forget its gated streams.
|
|
7121
|
+
*/
|
|
7122
|
+
endFecRelease(packetId) {
|
|
7123
|
+
this.#fecSequencer?.endPacket(packetId);
|
|
7124
|
+
}
|
|
7097
7125
|
/**
|
|
7098
7126
|
* MPU and data-unit identity of one MMTP packet, parsed in place (no copy,
|
|
7099
7127
|
* no reassembly). Null for non-MPU packets and packets that do not parse.
|
|
@@ -7274,7 +7302,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7274
7302
|
const parsed = preParsed !== void 0 && preParsed.skipFecPayloadId === (options?.skipFecPayloadId === true) ? preParsed : this.parsePacket(packet, options);
|
|
7275
7303
|
if (!parsed) return this.#drop("header-parse-failed");
|
|
7276
7304
|
const info = parsed.info;
|
|
7277
|
-
if (info.packetType !==
|
|
7305
|
+
if (info.packetType !== PACKET_TYPE_MPU) {
|
|
7278
7306
|
return {
|
|
7279
7307
|
kind: info.isRepair ? "repair" : "non-media",
|
|
7280
7308
|
packet: info,
|
|
@@ -7283,10 +7311,8 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
7283
7311
|
}
|
|
7284
7312
|
if (info.fecPayloadId !== null && this.#sourceSymbolCb) {
|
|
7285
7313
|
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
7314
|
try {
|
|
7289
|
-
this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol
|
|
7315
|
+
this.#sourceSymbolCb(info.packetId, info.fecPayloadId.ssId, rawSymbol);
|
|
7290
7316
|
} catch {
|
|
7291
7317
|
}
|
|
7292
7318
|
}
|
|
@@ -8474,6 +8500,8 @@ var MmtpRouter = class {
|
|
|
8474
8500
|
// ── Keyframe loss detection state ───────────────────────────────
|
|
8475
8501
|
/** Catalog-derived keyframe loss timeout (ms), or a reader evaluated at each arm. null = not configured (warns on video track registration; Phase-13 keyframe repair stays off). */
|
|
8476
8502
|
#keyframeLostTimeoutMs;
|
|
8503
|
+
/** packetIds already warned for running without Phase 13 (non-FEC video only). */
|
|
8504
|
+
#warnedNoKeyframeLostTimeout = /* @__PURE__ */ new Set();
|
|
8477
8505
|
/** Why the last reader evaluation left the timer unarmed; null while arming. Dedups the warning. */
|
|
8478
8506
|
#keyframeLostUnarmedReason = null;
|
|
8479
8507
|
/** Active keyframe loss timer handle. Single timer per video track — cleared on each rapFlag and on dispose(). */
|
|
@@ -8489,6 +8517,8 @@ var MmtpRouter = class {
|
|
|
8489
8517
|
*/
|
|
8490
8518
|
#onPublisherRestart;
|
|
8491
8519
|
#publisherRestarts = 0;
|
|
8520
|
+
/** Inits delivered with no onTrackInit handler for their packetId (MOQT-01). */
|
|
8521
|
+
#unmappedInitDeliveries = 0;
|
|
8492
8522
|
// FEC Payload IDs left unread because their (owner) packetId had no
|
|
8493
8523
|
// configured fec.blockProfile (see #noteUnreadableFecPayloadId).
|
|
8494
8524
|
#fecPayloadIdsWithoutProfile = 0;
|
|
@@ -8685,15 +8715,24 @@ var MmtpRouter = class {
|
|
|
8685
8715
|
return NO_FEC_GEOMETRY_HORIZON;
|
|
8686
8716
|
}
|
|
8687
8717
|
const blockSpanMs = fec.interleaveDepthMsForPacket(packetId);
|
|
8718
|
+
const blockLifetimeMs = fec.blockLifetimeMsForPacket(packetId);
|
|
8719
|
+
if (blockSpanMs === void 0 || blockLifetimeMs === void 0) return NO_FEC_GEOMETRY_HORIZON;
|
|
8688
8720
|
if (blockSpanMs === 0) return NO_BLOCK_SPAN_HORIZON;
|
|
8689
8721
|
return {
|
|
8690
8722
|
kind: "fec-horizon",
|
|
8691
|
-
retentionMs: duplicateRetentionMs({
|
|
8692
|
-
blockSpanMs,
|
|
8693
|
-
blockLifetimeMs: fec.blockLifetimeMsForPacket(packetId)
|
|
8694
|
-
})
|
|
8723
|
+
retentionMs: duplicateRetentionMs({ blockSpanMs, blockLifetimeMs })
|
|
8695
8724
|
};
|
|
8696
8725
|
}
|
|
8726
|
+
/**
|
|
8727
|
+
* Init segments delivered for a packetId with no `onTrackInit` handler
|
|
8728
|
+
* since construction, whether the deprecated aggregate `onInitSegment`
|
|
8729
|
+
* callback then received them or nothing did. A supported deployment reads
|
|
8730
|
+
* 0 here; a non-zero value is the evidence that blocks removing the
|
|
8731
|
+
* aggregate callback (MOQT-01, BLO-21181).
|
|
8732
|
+
*/
|
|
8733
|
+
get unmappedInitDeliveryCount() {
|
|
8734
|
+
return this.#unmappedInitDeliveries;
|
|
8735
|
+
}
|
|
8697
8736
|
/** Publisher restarts detected on the multicast leg since construction. */
|
|
8698
8737
|
get publisherRestartCount() {
|
|
8699
8738
|
return this.#publisherRestarts;
|
|
@@ -8781,7 +8820,7 @@ var MmtpRouter = class {
|
|
|
8781
8820
|
/** Update MFU reassembly timeout. Source and FEC-recovery paths share the
|
|
8782
8821
|
* parser's single reassembler (BLO-8151), so one update covers both. */
|
|
8783
8822
|
setMfuTimeoutMs(ms) {
|
|
8784
|
-
if (ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
|
|
8823
|
+
if (ms !== null && ms <= 0) throw new Error("[MmtpRouter] mfuTimeoutMs must be > 0");
|
|
8785
8824
|
this.#parser.setMfuTimeoutMs(ms);
|
|
8786
8825
|
}
|
|
8787
8826
|
/** Update parser frame reordering for unordered multicast delivery.
|
|
@@ -8792,15 +8831,14 @@ var MmtpRouter = class {
|
|
|
8792
8831
|
}
|
|
8793
8832
|
/** Register MMTP packetId → track type mapping.
|
|
8794
8833
|
* Call BEFORE packets arrive to ensure correct routing from the first packet.
|
|
8795
|
-
*
|
|
8796
|
-
*
|
|
8797
|
-
*
|
|
8834
|
+
* Without keyframeLostTimeoutMs a track WITHOUT FEC has no Phase 13
|
|
8835
|
+
* keyframe repair (video still routes/decodes normally); that is warned at
|
|
8836
|
+
* its first keyframe, once the FEC configuration is known (see
|
|
8837
|
+
* #noteEmittedKeyframe). Nothing is warned here: an FEC track never uses
|
|
8838
|
+
* the timer, and at registration the FEC configuration may not be applied
|
|
8839
|
+
* yet. framerate is OPTIONAL per draft-ietf-moq-catalogformat-01 §3.2.23,
|
|
8840
|
+
* so we can't require the timeout. */
|
|
8798
8841
|
setPacketIdType(packetId, trackType) {
|
|
8799
|
-
if (trackType === "video" && this.#keyframeLostTimeoutMs === null) {
|
|
8800
|
-
console.warn(
|
|
8801
|
-
"[MmtpRouter] keyframeLostTimeoutMs not configured \u2014 Phase 13 keyframe repair disabled for this track. Set it via setKeyframeLostTimeoutMs() or provide in constructor config to enable: Math.ceil(groupDurationMs * KEYFRAME_LOST_TIMEOUT_SLACK)."
|
|
8802
|
-
);
|
|
8803
|
-
}
|
|
8804
8842
|
if (trackType === "video") this.#videoPacketIds.add(packetId);
|
|
8805
8843
|
else this.#audioPacketIds.add(packetId);
|
|
8806
8844
|
const codec = this.#trackCodecs.get(packetId) ?? "";
|
|
@@ -8851,7 +8889,15 @@ var MmtpRouter = class {
|
|
|
8851
8889
|
onTrackPacket(packetId, cb) {
|
|
8852
8890
|
this.#trackPacketCallbacks.set(packetId, cb);
|
|
8853
8891
|
}
|
|
8854
|
-
/**
|
|
8892
|
+
/**
|
|
8893
|
+
* Register an init segment callback (ftyp+moov from MMTP MPU metadata).
|
|
8894
|
+
* Receives an init only for a packetId with no `onTrackInit` handler.
|
|
8895
|
+
*
|
|
8896
|
+
* @deprecated Use onTrackInit(packetId, cb). Still delivered as a fallback;
|
|
8897
|
+
* removed in the 1.0.0 major, no earlier than one minor release after this
|
|
8898
|
+
* deprecation reaches the `latest` dist-tag (BLO-21181). Count fallback
|
|
8899
|
+
* deliveries with `unmappedInitDeliveryCount`.
|
|
8900
|
+
*/
|
|
8855
8901
|
onInitSegment(cb) {
|
|
8856
8902
|
this.#onInitSegment = cb;
|
|
8857
8903
|
}
|
|
@@ -8865,17 +8911,16 @@ var MmtpRouter = class {
|
|
|
8865
8911
|
* When active, source frames are buffered per FEC block and emitted as
|
|
8866
8912
|
* multi-sample CMAF segments instead of per-frame callbacks. */
|
|
8867
8913
|
enableMseAssembler(packetId, config, catalogTrackName) {
|
|
8868
|
-
const k = this.#kForPacket(packetId);
|
|
8869
8914
|
const assemblerKey = this.#mseAssemblerKey(packetId, catalogTrackName);
|
|
8870
8915
|
const previous = this.#mseAssemblers.get(assemblerKey);
|
|
8871
8916
|
if (previous) {
|
|
8872
8917
|
previous.flush();
|
|
8873
8918
|
previous.dispose();
|
|
8874
8919
|
}
|
|
8875
|
-
const assembler = new CmafBlockAssembler(
|
|
8920
|
+
const assembler = new CmafBlockAssembler(config);
|
|
8876
8921
|
this.#mseAssemblers.set(assemblerKey, assembler);
|
|
8877
8922
|
console.log(
|
|
8878
|
-
`[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (
|
|
8923
|
+
`[MmtpRouter] MSE assembler enabled for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${config.trackType})`
|
|
8879
8924
|
);
|
|
8880
8925
|
return assembler;
|
|
8881
8926
|
}
|
|
@@ -8984,6 +9029,21 @@ var MmtpRouter = class {
|
|
|
8984
9029
|
}
|
|
8985
9030
|
this.#fecMappersByPacketId.set(packetId, mapper);
|
|
8986
9031
|
}
|
|
9032
|
+
/**
|
|
9033
|
+
* Release the router side of a packetId whose FEC is ending: drop its block
|
|
9034
|
+
* mapper and end its FEC release gating. Frames the gate holds are released
|
|
9035
|
+
* in order, each gap stalled (no block will resolve it), not stranded. Call
|
|
9036
|
+
* before FECManager.releasePacket, while the gate can still read its blocks.
|
|
9037
|
+
*/
|
|
9038
|
+
releaseFecPacket(packetId) {
|
|
9039
|
+
this.#fecMappersByPacketId.delete(packetId);
|
|
9040
|
+
this.#withDeferredFecPokes(() => {
|
|
9041
|
+
this.#parser.endFecRelease(packetId);
|
|
9042
|
+
for (const [key, poke] of this.#pendingFecPokes) {
|
|
9043
|
+
if (poke.packetId === packetId) this.#pendingFecPokes.delete(key);
|
|
9044
|
+
}
|
|
9045
|
+
});
|
|
9046
|
+
}
|
|
8987
9047
|
registerManifestTrack(context) {
|
|
8988
9048
|
if (!this.#manifestVerifier) throw new Error("manifest verifier is not configured");
|
|
8989
9049
|
this.#manifestVerifier.registerTrack(context);
|
|
@@ -9103,87 +9163,21 @@ var MmtpRouter = class {
|
|
|
9103
9163
|
this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
|
|
9104
9164
|
return;
|
|
9105
9165
|
}
|
|
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
|
-
}
|
|
9166
|
+
this.#handleIsoRepair(ownerPacketId, catalogTrackName, parsed, "moq");
|
|
9157
9167
|
}
|
|
9158
9168
|
}
|
|
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
|
-
}
|
|
9169
|
+
// ── Packet FEC geometry and block profile ───────────────────────
|
|
9165
9170
|
#symbolSizeForPacket(packetId) {
|
|
9166
|
-
if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ??
|
|
9171
|
+
if (packetId != null) return this.#fecManager?.symbolSizeForPacket?.(packetId) ?? 0;
|
|
9167
9172
|
return this.#fecManager?.symbolSize ?? 0;
|
|
9168
9173
|
}
|
|
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
9174
|
/**
|
|
9182
9175
|
* The configured block profile of a packetId, or undefined while it is
|
|
9183
9176
|
* unconfigured. With an FEC manager its per-packet configuration is the
|
|
9184
9177
|
* only source. A router without one still recovers symbols through its
|
|
9185
9178
|
* registered mapper, built with the catalog's explicit profile: the
|
|
9186
|
-
* packet's own mapper, else the default one (
|
|
9179
|
+
* packet's own mapper, else the default one. A NullBlockMapper (a stream
|
|
9180
|
+
* without an FEC instance) states none.
|
|
9187
9181
|
*/
|
|
9188
9182
|
#configuredBlockProfile(packetId) {
|
|
9189
9183
|
if (this.#fecManager) return this.#fecManager.blockProfileForPacket(packetId);
|
|
@@ -9191,9 +9185,10 @@ var MmtpRouter = class {
|
|
|
9191
9185
|
return mapper?.blockProfile ?? void 0;
|
|
9192
9186
|
}
|
|
9193
9187
|
/**
|
|
9194
|
-
* The block profile an FEC coordinate of `packetId` is read under
|
|
9195
|
-
*
|
|
9196
|
-
*
|
|
9188
|
+
* The block profile an FEC coordinate of `packetId` is read under:
|
|
9189
|
+
* `iso-ssbg1-v1`, the only one (`k-padded-v1` is retired and refused).
|
|
9190
|
+
* Throws while none is configured: such a packet has no FEC geometry, and
|
|
9191
|
+
* nothing is inferred from the wire or defaulted.
|
|
9197
9192
|
* Packet ingress leaves such a packet's FEC Payload ID unread first
|
|
9198
9193
|
* (#noteUnreadableFecPayloadId); a throw here is a wiring fault on a path
|
|
9199
9194
|
* that cannot hold an unconfigured packet.
|
|
@@ -9207,8 +9202,16 @@ var MmtpRouter = class {
|
|
|
9207
9202
|
}
|
|
9208
9203
|
return profile;
|
|
9209
9204
|
}
|
|
9210
|
-
|
|
9211
|
-
|
|
9205
|
+
/**
|
|
9206
|
+
* The block coordinates (SS_Start, ESI) of an FEC source: range membership
|
|
9207
|
+
* in a block a repair already stated (ISO/IEC 23008-1 C.5.3). Null while no
|
|
9208
|
+
* repair has stated its block, while its packetId has no configured block
|
|
9209
|
+
* profile, and without an FEC manager: SS_ID alone locates no block, so
|
|
9210
|
+
* nothing is derived from it.
|
|
9211
|
+
*/
|
|
9212
|
+
#locateFecSource(packetId, catalogTrackName, ssId) {
|
|
9213
|
+
if (this.#configuredBlockProfile(packetId) === void 0) return null;
|
|
9214
|
+
return this.#fecManager?.locateIsoSource?.(packetId, catalogTrackName, ssId) ?? null;
|
|
9212
9215
|
}
|
|
9213
9216
|
/**
|
|
9214
9217
|
* Explicit refusal to read an FEC Payload ID: its (owner) packetId has no
|
|
@@ -9227,21 +9230,20 @@ var MmtpRouter = class {
|
|
|
9227
9230
|
}
|
|
9228
9231
|
}
|
|
9229
9232
|
/**
|
|
9230
|
-
* The release-gate anchor of a recovered symbol: its
|
|
9231
|
-
*
|
|
9232
|
-
*
|
|
9233
|
+
* The release-gate anchor of a recovered symbol: its own SS_ID, SS_Start +
|
|
9234
|
+
* ESI modulo 2^32 (C.5.2), where a frame is gated by the SS_IDs between it
|
|
9235
|
+
* and the last released frame.
|
|
9233
9236
|
*/
|
|
9234
|
-
#fecAnchorForRecovered(
|
|
9235
|
-
return
|
|
9237
|
+
#fecAnchorForRecovered(blockStart, index) {
|
|
9238
|
+
return serial32Add(blockStart, index);
|
|
9236
9239
|
}
|
|
9237
9240
|
/**
|
|
9238
9241
|
* One iso-ssbg1-v1 repair symbol (ISO/IEC 23008-1 C.5.3). It states the
|
|
9239
9242
|
* block `[SS_Start, SS_Start + SSB_length)`; repair ESI = SSB_length +
|
|
9240
9243
|
* RS_ID (K' = SSB_length). The held sources it placed (and those of a
|
|
9241
9244
|
* 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.
|
|
9245
|
+
* the repair, the order they had on the wire, so a loss-free block completes
|
|
9246
|
+
* clean on its repair. A repair contradicting a known block is dropped.
|
|
9245
9247
|
*/
|
|
9246
9248
|
#handleIsoRepair(ownerPacketId, catalogTrackName, repair, source) {
|
|
9247
9249
|
const fec = this.#fecManager;
|
|
@@ -9267,6 +9269,7 @@ var MmtpRouter = class {
|
|
|
9267
9269
|
catalogTrackName
|
|
9268
9270
|
)) return;
|
|
9269
9271
|
fec.noteBlockActivity?.(blockStart, ownerPacketId, catalogTrackName);
|
|
9272
|
+
fec.noteRepairGroupLength?.(blockStart, ownerPacketId, repair.rsbLength, catalogTrackName);
|
|
9270
9273
|
const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
|
|
9271
9274
|
const recovered = fec.feedRepairSymbol(
|
|
9272
9275
|
ownerPacketId,
|
|
@@ -9308,7 +9311,7 @@ var MmtpRouter = class {
|
|
|
9308
9311
|
}
|
|
9309
9312
|
if (payload.oversized) continue;
|
|
9310
9313
|
const alreadyCompleted = fec.isBlockCompleted(blockStart, ownerPacketId, catalogTrackName);
|
|
9311
|
-
const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData,
|
|
9314
|
+
const recovered = fec.feedSourceSymbol(ownerPacketId, ssId, payload.symbolData, catalogTrackName);
|
|
9312
9315
|
if (!recovered || alreadyCompleted) continue;
|
|
9313
9316
|
fec.cancelBlockTimeout(blockStart, ownerPacketId, catalogTrackName);
|
|
9314
9317
|
fec.countRecovery(ownerPacketId, blockStart, catalogTrackName);
|
|
@@ -9333,9 +9336,10 @@ var MmtpRouter = class {
|
|
|
9333
9336
|
return null;
|
|
9334
9337
|
}
|
|
9335
9338
|
/** Route a recovered FEC block through the parser + dedup pipeline.
|
|
9336
|
-
* Sync WASM decoders return K fixed-width
|
|
9339
|
+
* Sync WASM decoders return the block's K' = SSB_length fixed-width
|
|
9340
|
+
* ssbg_mode1 source symbols concatenated. */
|
|
9337
9341
|
routeRecoveredBlock(blockId, data, packetId, catalogTrackName) {
|
|
9338
|
-
this.#routeRecoveredBlock(blockId, data, packetId, catalogTrackName);
|
|
9342
|
+
this.#withDeferredFecPokes(() => this.#routeRecoveredBlock(blockId, data, packetId, catalogTrackName));
|
|
9339
9343
|
}
|
|
9340
9344
|
/** Route a single recovered source symbol through the parser + dedup pipeline.
|
|
9341
9345
|
* Worker-backed decoders emit one padded source symbol per frame event. */
|
|
@@ -9749,8 +9753,16 @@ var MmtpRouter = class {
|
|
|
9749
9753
|
#noteEmittedKeyframe(packetId, keyframe) {
|
|
9750
9754
|
if (!keyframe) return;
|
|
9751
9755
|
if (!this.#videoPacketIds.has(packetId)) return;
|
|
9752
|
-
if (this.#keyframeLostTimeoutMs === null) return;
|
|
9753
9756
|
if (this.#isFecTrack(packetId)) return;
|
|
9757
|
+
if (this.#keyframeLostTimeoutMs === null) {
|
|
9758
|
+
if (!this.#warnedNoKeyframeLostTimeout.has(packetId)) {
|
|
9759
|
+
this.#warnedNoKeyframeLostTimeout.add(packetId);
|
|
9760
|
+
console.warn(
|
|
9761
|
+
`[MmtpRouter] keyframeLostTimeoutMs not configured \u2014 Phase 13 keyframe repair disabled for packetId=${packetId}, a video track without FEC. Set it via setKeyframeLostTimeoutMs() or provide in constructor config to enable.`
|
|
9762
|
+
);
|
|
9763
|
+
}
|
|
9764
|
+
return;
|
|
9765
|
+
}
|
|
9754
9766
|
this.#lastKeyframeGroupId++;
|
|
9755
9767
|
this.#armKeyframeLostTimer();
|
|
9756
9768
|
}
|
|
@@ -9762,7 +9774,7 @@ var MmtpRouter = class {
|
|
|
9762
9774
|
#withDeferredFecPokes(work) {
|
|
9763
9775
|
this.#fecPokeDepth++;
|
|
9764
9776
|
try {
|
|
9765
|
-
work
|
|
9777
|
+
this.#parser.deferFecRelease(work);
|
|
9766
9778
|
} finally {
|
|
9767
9779
|
this.#fecPokeDepth--;
|
|
9768
9780
|
if (this.#fecPokeDepth === 0 && this.#pendingFecPokes.size > 0 && !this.#disposed) {
|
|
@@ -9774,6 +9786,13 @@ var MmtpRouter = class {
|
|
|
9774
9786
|
}
|
|
9775
9787
|
}
|
|
9776
9788
|
}
|
|
9789
|
+
/**
|
|
9790
|
+
* Arrival time of the earliest frame the FEC release gate holds for this
|
|
9791
|
+
* stream (see FecReleaseSequencer.earliestHeldArrivalMs), or undefined.
|
|
9792
|
+
*/
|
|
9793
|
+
fecReleaseEarliestHeldAtMs(packetId, catalogTrackName) {
|
|
9794
|
+
return this.#parser.fecReleaseEarliestHeldAtMs(packetId, catalogTrackName);
|
|
9795
|
+
}
|
|
9777
9796
|
#requestFecPoke(packetId, catalogTrackName) {
|
|
9778
9797
|
if (this.#disposed) return;
|
|
9779
9798
|
if (this.#fecPokeDepth > 0) {
|
|
@@ -9801,29 +9820,19 @@ var MmtpRouter = class {
|
|
|
9801
9820
|
resolvedLoss: (packetId, catalogTrackName, fromSbn, toSbn, releasedSbn) => {
|
|
9802
9821
|
const fec = this.#fecManager;
|
|
9803
9822
|
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;
|
|
9823
|
+
const head = fromSbn === releasedSbn ? toSbn : fromSbn;
|
|
9824
|
+
return fec.isoSpanResolution?.(packetId, catalogTrackName, releasedSbn, head) ?? null;
|
|
9822
9825
|
},
|
|
9823
9826
|
// The retention window itself: a frame is never still held when a block
|
|
9824
9827
|
// it waits on retires. Only consulted while resolvedLoss holds a gap,
|
|
9825
9828
|
// which needs blockResolution, so the check above guarantees the method.
|
|
9826
|
-
|
|
9829
|
+
// A packetId the manager no longer has configured (released) has no
|
|
9830
|
+
// block left to wait on: release its frames now (BLO-45953).
|
|
9831
|
+
holdLimitMs: (packetId) => {
|
|
9832
|
+
const fec = this.#fecManager;
|
|
9833
|
+
if (!fec?.terminalRetentionMsForPacket) return Infinity;
|
|
9834
|
+
return fec.terminalRetentionMsForPacket(packetId) ?? 0;
|
|
9835
|
+
},
|
|
9827
9836
|
decide: (before, after, lostBlocks, discontinuity) => {
|
|
9828
9837
|
const decision = this.#decideGap(before, after, lostBlocks, discontinuity);
|
|
9829
9838
|
this.#onFrameGap?.(decision);
|
|
@@ -9885,9 +9894,10 @@ var MmtpRouter = class {
|
|
|
9885
9894
|
}
|
|
9886
9895
|
/**
|
|
9887
9896
|
* 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
|
|
9897
|
+
* FEC blocks between `before`'s anchor and `after`'s, times D, the media
|
|
9898
|
+
* units one block touches (ceil(interleaveDepthMs / unit duration), §5.1).
|
|
9899
|
+
* Null when either anchor, the unit duration or the catalog interleave is
|
|
9900
|
+
* unknown.
|
|
9891
9901
|
*/
|
|
9892
9902
|
#maxMissingUnits(before, after) {
|
|
9893
9903
|
const from = before.fecSbn;
|
|
@@ -9900,7 +9910,7 @@ var MmtpRouter = class {
|
|
|
9900
9910
|
const denominator = BigInt(timing.durationTicks) * 1000n;
|
|
9901
9911
|
const unitsPerBlock = (numerator + denominator - 1n) / denominator;
|
|
9902
9912
|
const blocks = BigInt(
|
|
9903
|
-
(
|
|
9913
|
+
(serial32Precedes(from, to) ? serial32Distance(from, to) : serial32Distance(to, from)) + 1
|
|
9904
9914
|
);
|
|
9905
9915
|
const bound = unitsPerBlock * blocks;
|
|
9906
9916
|
return bound > BigInt(Number.MAX_SAFE_INTEGER) ? null : Number(bound);
|
|
@@ -9950,8 +9960,9 @@ var MmtpRouter = class {
|
|
|
9950
9960
|
const cb = this.#trackInitCallbacks.get(packetId);
|
|
9951
9961
|
if (cb) {
|
|
9952
9962
|
cb(data);
|
|
9953
|
-
} else
|
|
9954
|
-
this.#
|
|
9963
|
+
} else {
|
|
9964
|
+
this.#unmappedInitDeliveries++;
|
|
9965
|
+
this.#onInitSegment?.(data);
|
|
9955
9966
|
}
|
|
9956
9967
|
console.log(
|
|
9957
9968
|
`[MmtpRouter] Init delivered for packetId=${packetId}${catalogTrackName === void 0 ? "" : ` track=${catalogTrackName}`} (${data.byteLength}B)`
|
|
@@ -9993,9 +10004,9 @@ var MmtpRouter = class {
|
|
|
9993
10004
|
if (!info.isRepair && this.#manifestVerifier && !manifestAdmitted) {
|
|
9994
10005
|
let identity = manifestIdentity;
|
|
9995
10006
|
if (!identity && info.fecPayloadId && !fecUnreadable && (this.#resolveManifestIdentityForRoute || this.#resolveManifestIdentity)) {
|
|
9996
|
-
const coordinates = this.#deriveSbnEsi(info.fecPayloadId.ssId, info.packetId);
|
|
9997
10007
|
const catalogTrackName = catalogTrackNameForPacket(ingress, info.packetId);
|
|
9998
|
-
|
|
10008
|
+
const coordinates = this.#locateFecSource(info.packetId, catalogTrackName, info.fecPayloadId.ssId);
|
|
10009
|
+
identity = coordinates === null ? void 0 : (this.#resolveManifestIdentityForRoute ? this.#resolveManifestIdentityForRoute({
|
|
9999
10010
|
packetId: info.packetId,
|
|
10000
10011
|
sbn: coordinates.sbn,
|
|
10001
10012
|
esi: coordinates.esi,
|
|
@@ -10047,79 +10058,7 @@ var MmtpRouter = class {
|
|
|
10047
10058
|
this.#noteUnreadableFecPayloadId(ownerPacketId, "repair");
|
|
10048
10059
|
return;
|
|
10049
10060
|
}
|
|
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
|
-
}
|
|
10061
|
+
this.#handleIsoRepair(ownerPacketId, catalogTrackNameForPacket(ingress, ownerPacketId), repair, source);
|
|
10123
10062
|
}
|
|
10124
10063
|
} else {
|
|
10125
10064
|
if (this.#classifyPacketId(info.packetId) === null) return;
|
|
@@ -10143,8 +10082,8 @@ var MmtpRouter = class {
|
|
|
10143
10082
|
}
|
|
10144
10083
|
const duplicates = this.#stream(info.packetId, catalogTrackName).duplicates;
|
|
10145
10084
|
const fecPayloadId = fecUnreadable ? null : info.fecPayloadId;
|
|
10146
|
-
const
|
|
10147
|
-
const coords =
|
|
10085
|
+
const fecSource = this.#fecManager !== null && fecPayloadId != null;
|
|
10086
|
+
const coords = fecSource && fecPayloadId ? this.#locateFecSource(info.packetId, catalogTrackName, fecPayloadId.ssId) ?? void 0 : void 0;
|
|
10148
10087
|
duplicates.advance(coords?.sbn);
|
|
10149
10088
|
if (source === "multicast" && !overlapCopy && !releasedFromQuarantine && catalogTrackName !== void 0 && duplicates.predatesHorizon(info.sequenceNumber, fecPayloadId?.ssId)) {
|
|
10150
10089
|
this.#publisherRestarts++;
|
|
@@ -10159,9 +10098,8 @@ var MmtpRouter = class {
|
|
|
10159
10098
|
}
|
|
10160
10099
|
if (this.#fecManager && fecPayloadId && coords) {
|
|
10161
10100
|
const fecId = fecPayloadId;
|
|
10162
|
-
const symbolSize = this.#symbolSizeForPacket(info.packetId);
|
|
10163
10101
|
const rawSymbol = packet.subarray(0, packet.length - 4);
|
|
10164
|
-
const oversized =
|
|
10102
|
+
const oversized = !(this.#fecManager.isoSourceFits?.(info.packetId, rawSymbol.length) ?? false);
|
|
10165
10103
|
let overlapBlockCompleted = false;
|
|
10166
10104
|
if (overlapCopy) {
|
|
10167
10105
|
overlapBlockCompleted = catalogTrackName === void 0 ? this.#fecManager.isBlockCompleted(coords.sbn, info.packetId) : this.#fecManager.isBlockCompleted(
|
|
@@ -10196,7 +10134,7 @@ var MmtpRouter = class {
|
|
|
10196
10134
|
}
|
|
10197
10135
|
parseSourceSymbol = (overlapCopy ? !overlapBlockCompleted : sourceSymbolAccepted) && !duplicates.parsedSymbols.has(fecId.ssId);
|
|
10198
10136
|
fecInfo = { sbn: coords.sbn, esi: coords.esi, oversized };
|
|
10199
|
-
} else if (
|
|
10137
|
+
} else if (fecSource && this.#fecManager && fecPayloadId) {
|
|
10200
10138
|
const ssId = fecPayloadId.ssId;
|
|
10201
10139
|
if (overlapCopy) {
|
|
10202
10140
|
parseSourceSymbol = !duplicates.parsedSymbols.has(ssId);
|
|
@@ -10230,12 +10168,13 @@ var MmtpRouter = class {
|
|
|
10230
10168
|
this.#feedViaParser(packet, info, fecInfo, {
|
|
10231
10169
|
source,
|
|
10232
10170
|
catalogTrackName,
|
|
10233
|
-
|
|
10171
|
+
// An FEC source frame is anchored by its own SS_ID (C.5.2).
|
|
10172
|
+
...fecSource && fecPayloadId ? { fecSbn: fecPayloadId.ssId } : {}
|
|
10234
10173
|
}, parsed);
|
|
10235
10174
|
}
|
|
10236
10175
|
if (this.#classifyPacketId(info.packetId) === null) return;
|
|
10237
|
-
if (this.#fecManager && fecPayloadId && sourceSymbolAccepted && sourceSymbolTrackable) {
|
|
10238
|
-
const { sbn, esi } =
|
|
10176
|
+
if (this.#fecManager && fecPayloadId && coords && sourceSymbolAccepted && sourceSymbolTrackable) {
|
|
10177
|
+
const { sbn, esi } = coords;
|
|
10239
10178
|
if (this.#classifyPacketId(info.packetId) !== null && this.#fecManager.isTrackConfigured?.(info.packetId) !== false) {
|
|
10240
10179
|
this.#fecManager.trackBlock(
|
|
10241
10180
|
sbn,
|
|
@@ -10256,13 +10195,11 @@ var MmtpRouter = class {
|
|
|
10256
10195
|
const recovered = catalogTrackName === void 0 ? this.#fecManager.feedSourceSymbol(
|
|
10257
10196
|
info.packetId,
|
|
10258
10197
|
sourceFec.ssId,
|
|
10259
|
-
sourceFec.symbolData
|
|
10260
|
-
void 0
|
|
10198
|
+
sourceFec.symbolData
|
|
10261
10199
|
) : this.#fecManager.feedSourceSymbol(
|
|
10262
10200
|
info.packetId,
|
|
10263
10201
|
sourceFec.ssId,
|
|
10264
10202
|
sourceFec.symbolData,
|
|
10265
|
-
void 0,
|
|
10266
10203
|
catalogTrackName
|
|
10267
10204
|
);
|
|
10268
10205
|
if (recovered) {
|
|
@@ -10669,7 +10606,6 @@ var MmtpRouter = class {
|
|
|
10669
10606
|
// ── Private: FEC recovery routing ───────────────────────────────
|
|
10670
10607
|
/** Route WASM-recovered block through appropriate path based on container kind. */
|
|
10671
10608
|
#routeRecoveredBlock(blockId, recovered, ownerPacketId, catalogTrackName) {
|
|
10672
|
-
const k = this.#kForPacket(ownerPacketId);
|
|
10673
10609
|
const packetSymbolSize = this.#symbolSizeForPacket(ownerPacketId);
|
|
10674
10610
|
if (ownerPacketId === void 0) {
|
|
10675
10611
|
throw new Error("[MmtpRouter] a recovered FEC block needs its owner packetId to read its fec.blockProfile");
|
|
@@ -10682,7 +10618,6 @@ var MmtpRouter = class {
|
|
|
10682
10618
|
}
|
|
10683
10619
|
const symbolSize = packetSymbolSize;
|
|
10684
10620
|
const result = processFecBlock(recovered, {
|
|
10685
|
-
...blockProfile === "k-padded-v1" ? { k } : {},
|
|
10686
10621
|
symbolSize,
|
|
10687
10622
|
ownerPacketId,
|
|
10688
10623
|
blockProfile
|
|
@@ -10762,8 +10697,7 @@ var MmtpRouter = class {
|
|
|
10762
10697
|
const admission = verifier.admitObject(
|
|
10763
10698
|
{
|
|
10764
10699
|
...identity,
|
|
10765
|
-
packetId: ownerPacketId
|
|
10766
|
-
...ownerPacketId !== void 0 && this.#isIsoPacket(ownerPacketId) ? {} : { ssId: blockId * this.#kForPacket(ownerPacketId) + symbol.index }
|
|
10700
|
+
packetId: ownerPacketId
|
|
10767
10701
|
},
|
|
10768
10702
|
symbol.rawSymbol,
|
|
10769
10703
|
() => {
|
|
@@ -10866,7 +10800,7 @@ var MmtpRouter = class {
|
|
|
10866
10800
|
rapFlag: sym.fragment.rapFlag,
|
|
10867
10801
|
recovered: true,
|
|
10868
10802
|
deliveryProvenance,
|
|
10869
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
10803
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
10870
10804
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
10871
10805
|
});
|
|
10872
10806
|
continue;
|
|
@@ -10978,7 +10912,7 @@ var MmtpRouter = class {
|
|
|
10978
10912
|
rapFlag: assembled.rapFlag,
|
|
10979
10913
|
recovered: true,
|
|
10980
10914
|
...assembled.deliveryProvenance === void 0 ? {} : { deliveryProvenance: assembled.deliveryProvenance },
|
|
10981
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
10915
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
10982
10916
|
...recoveredCatalogTrackName === void 0 ? {} : { catalogTrackName: recoveredCatalogTrackName }
|
|
10983
10917
|
});
|
|
10984
10918
|
continue;
|
|
@@ -11115,7 +11049,7 @@ var MmtpRouter = class {
|
|
|
11115
11049
|
rapFlag: sym.fragment.rapFlag,
|
|
11116
11050
|
recovered: true,
|
|
11117
11051
|
deliveryProvenance,
|
|
11118
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
11052
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11119
11053
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
11120
11054
|
});
|
|
11121
11055
|
} else {
|
|
@@ -11194,7 +11128,7 @@ var MmtpRouter = class {
|
|
|
11194
11128
|
rapFlag: assembled.rapFlag,
|
|
11195
11129
|
recovered: true,
|
|
11196
11130
|
deliveryProvenance,
|
|
11197
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
11131
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11198
11132
|
...assembled.catalogTrackName === void 0 ? {} : { catalogTrackName: assembled.catalogTrackName }
|
|
11199
11133
|
});
|
|
11200
11134
|
}
|
|
@@ -11229,7 +11163,7 @@ var MmtpRouter = class {
|
|
|
11229
11163
|
...sym.fragment.sampleNumber === void 0 ? {} : { sampleNumber: sym.fragment.sampleNumber },
|
|
11230
11164
|
recovered: true,
|
|
11231
11165
|
deliveryProvenance,
|
|
11232
|
-
fecSbn: this.#fecAnchorForRecovered(
|
|
11166
|
+
fecSbn: this.#fecAnchorForRecovered(blockId, sym.index),
|
|
11233
11167
|
...catalogTrackName === void 0 ? {} : { catalogTrackName }
|
|
11234
11168
|
});
|
|
11235
11169
|
continue;
|