@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockcast/mmt-container",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-main.1cd3cdea89da",
|
|
4
4
|
"description": "MMTP/LOC container parsing for MMT over MoQ and SSM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -152,7 +152,8 @@
|
|
|
152
152
|
},
|
|
153
153
|
"./catalog.schema.json": "./schemas/catalog.schema.json",
|
|
154
154
|
"./test-vectors/catalog-validation.json": "./test-vectors/catalog-validation.json",
|
|
155
|
-
"./test-vectors/align.json": "./test-vectors/align.json"
|
|
155
|
+
"./test-vectors/align.json": "./test-vectors/align.json",
|
|
156
|
+
"./test-vectors/catalog-timing.json": "./test-vectors/catalog-timing.json"
|
|
156
157
|
},
|
|
157
158
|
"files": [
|
|
158
159
|
"dist",
|
|
@@ -177,21 +178,13 @@
|
|
|
177
178
|
},
|
|
178
179
|
"dependencies": {
|
|
179
180
|
"@noble/hashes": "^1.8.0",
|
|
180
|
-
"@blockcast/mmt-fec": "
|
|
181
|
-
"@blockcast/mmt-manifest-verify": "
|
|
182
|
-
"@blockcast/fec-worker": "
|
|
183
|
-
"@blockcast/mmt-
|
|
184
|
-
"@blockcast/mmt-base": "^0.3.0",
|
|
181
|
+
"@blockcast/mmt-fec": "0.3.0-main.1cd3cdea89da",
|
|
182
|
+
"@blockcast/mmt-manifest-verify": "0.3.0-main.1cd3cdea89da",
|
|
183
|
+
"@blockcast/fec-worker": "0.3.0-main.1cd3cdea89da",
|
|
184
|
+
"@blockcast/mmt-base": "0.3.0-main.1cd3cdea89da",
|
|
185
185
|
"ajv": "^8.17.1",
|
|
186
186
|
"ajv-formats": "^3.0.1"
|
|
187
187
|
},
|
|
188
|
-
"bundledDependencies": [
|
|
189
|
-
"@blockcast/mmt-fec",
|
|
190
|
-
"@blockcast/mmt-manifest-verify",
|
|
191
|
-
"@blockcast/fec-worker",
|
|
192
|
-
"@blockcast/mmt-alta-parse",
|
|
193
|
-
"@blockcast/mmt-base"
|
|
194
|
-
],
|
|
195
188
|
"devDependencies": {
|
|
196
189
|
"@blockcast/mmt-transport": "file:../transport",
|
|
197
190
|
"esbuild": "^0.28.0",
|
|
@@ -206,13 +206,13 @@
|
|
|
206
206
|
"properties": {
|
|
207
207
|
"algorithm": { "enum": ["raptorq", "reed-solomon"] },
|
|
208
208
|
"blockProfile": {
|
|
209
|
-
"enum": ["
|
|
210
|
-
"description": "FEC block profile (ISO/IEC 23008-1 Annex C). Required whenever algorithm declares an FEC instance (anything but \"none\"); never defaulted or inferred.
|
|
209
|
+
"enum": ["iso-ssbg1-v1"],
|
|
210
|
+
"description": "FEC block profile (ISO/IEC 23008-1 Annex C, draft-ramadan-moq-fec 5.1). Required whenever algorithm declares an FEC instance (anything but \"none\"); never defaulted or inferred. The only profile is iso-ssbg1-v1: ssbg_mode1, K' = SSB_length, consecutive SS_IDs. Any other token, the retired k-padded-v1 included, is invalid; a receiver treats such a track as having no FEC."
|
|
211
211
|
},
|
|
212
212
|
"sourceSymbols": { "$ref": "#/$defs/positiveInteger" },
|
|
213
213
|
"repairSymbols": { "$ref": "#/$defs/positiveInteger" },
|
|
214
214
|
"symbolSize": { "$ref": "#/$defs/positiveInteger" },
|
|
215
|
-
"interleaveDepthMs": { "
|
|
215
|
+
"interleaveDepthMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
|
|
216
216
|
"reorderToleranceMs": { "$ref": "#/$defs/nonNegativeNumber" },
|
|
217
217
|
"repairTrack": { "type": "string", "minLength": 1 },
|
|
218
218
|
"repairContainer": { "const": "native" },
|
package/src/carp-catalog.ts
CHANGED
|
@@ -169,11 +169,11 @@ export interface FecCatalogConfig {
|
|
|
169
169
|
algorithm: FecAlgorithm;
|
|
170
170
|
/** FEC block profile (BLO-35597, ISO/IEC 23008-1 Annex C). REQUIRED when
|
|
171
171
|
* `algorithm` declares an FEC instance (anything but `"none"`); optional
|
|
172
|
-
* on `"none"`, where a present token must still be
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
172
|
+
* on `"none"`, where a present token must still be implemented. The only
|
|
173
|
+
* profile is `iso-ssbg1-v1` (ssbg_mode1, K' = SSB_length, consecutive
|
|
174
|
+
* SS_IDs; draft-ramadan-moq-fec §5.1). Never defaulted and never inferred
|
|
175
|
+
* from the wire: a track naming any other token (the retired `k-padded-v1`
|
|
176
|
+
* included) has no FEC (`TrackFecUnavailable`). */
|
|
177
177
|
blockProfile?: FecBlockProfile;
|
|
178
178
|
/** K — source symbols per block (REQUIRED). */
|
|
179
179
|
sourceSymbols: number;
|
|
@@ -181,8 +181,8 @@ export interface FecCatalogConfig {
|
|
|
181
181
|
repairSymbols: number;
|
|
182
182
|
/** T — bytes per symbol, 8-byte aligned (REQUIRED). */
|
|
183
183
|
symbolSize: number;
|
|
184
|
-
/**
|
|
185
|
-
*
|
|
184
|
+
/** First-to-last source/repair send span in milliseconds.
|
|
185
|
+
* Zero or absence means no elapsed deadline; in-band FEC remains usable.
|
|
186
186
|
* BLO-14526: renamed from the legacy `interleaveDepth` count-era key — no fallback read. */
|
|
187
187
|
interleaveDepthMs?: number;
|
|
188
188
|
/** Declared jitter/reorder allowance in MILLISECONDS.
|
|
@@ -241,7 +241,14 @@ export interface FecCatalogConfig {
|
|
|
241
241
|
jitterBufferMs?: number;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
/**
|
|
245
|
+
* Whether a catalog `fec` block carries the FEC instance geometry a receiver
|
|
246
|
+
* configures, its block profile aside: a supported `algorithm`, positive
|
|
247
|
+
* `sourceSymbols`, `repairSymbols` and `symbolSize` (8-byte aligned for
|
|
248
|
+
* RaptorQ), and a non-empty `repairTrack`. A block that fails this is
|
|
249
|
+
* malformed whatever its profile. Total: never throws.
|
|
250
|
+
*/
|
|
251
|
+
export function isFecCatalogGeometry(obj: unknown): boolean {
|
|
245
252
|
if (typeof obj !== "object" || obj === null) return false;
|
|
246
253
|
const o = obj as Record<string, unknown>;
|
|
247
254
|
const algorithm = o["algorithm"];
|
|
@@ -253,11 +260,24 @@ export function isFecCatalogConfig(obj: unknown): obj is FecCatalogConfig {
|
|
|
253
260
|
typeof o["repairSymbols"] === "number" && o["repairSymbols"] >= 1 &&
|
|
254
261
|
typeof symbolSize === "number" && symbolSize >= 1 &&
|
|
255
262
|
(algorithm !== "raptorq" || symbolSize % 8 === 0) &&
|
|
256
|
-
typeof o["repairTrack"] === "string" && (o["repairTrack"] as string).length > 0
|
|
257
|
-
(isFecBlockProfile(o["blockProfile"]) || (algorithm === "none" && o["blockProfile"] === undefined))
|
|
263
|
+
typeof o["repairTrack"] === "string" && (o["repairTrack"] as string).length > 0
|
|
258
264
|
);
|
|
259
265
|
}
|
|
260
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Whether a catalog `fec` block is a complete `FecCatalogConfig`: its geometry
|
|
269
|
+
* holds (`isFecCatalogGeometry`) and it names the implemented block profile,
|
|
270
|
+
* `iso-ssbg1-v1` (BLO-35597). On `algorithm: "none"` the profile may be
|
|
271
|
+
* omitted. Any other token, the retired `k-padded-v1` included, is not a
|
|
272
|
+
* known profile, so this is false for it; a receiver resolves such a track to
|
|
273
|
+
* no FEC (`TrackFecUnavailable`) rather than failing the session.
|
|
274
|
+
*/
|
|
275
|
+
export function isFecCatalogConfig(obj: unknown): obj is FecCatalogConfig {
|
|
276
|
+
if (!isFecCatalogGeometry(obj)) return false;
|
|
277
|
+
const o = obj as Record<string, unknown>;
|
|
278
|
+
return isFecBlockProfile(o["blockProfile"]) || (o["algorithm"] === "none" && o["blockProfile"] === undefined);
|
|
279
|
+
}
|
|
280
|
+
|
|
261
281
|
// ── Multicast Catalog Extension (CARP §4.1-4.4) ───────────────
|
|
262
282
|
|
|
263
283
|
export type MulticastProtocol = "ssm" | "asm" | "amt" | "atsc3";
|
|
@@ -298,17 +318,6 @@ export interface MulticastEndpoint {
|
|
|
298
318
|
* type-narrow with `typeof t === "string"` to handle both.
|
|
299
319
|
*/
|
|
300
320
|
tracks: MulticastTrack[];
|
|
301
|
-
/**
|
|
302
|
-
* AMT relay hostname.
|
|
303
|
-
*
|
|
304
|
-
* @deprecated Superseded by catalog-level `multicast.networkSource`
|
|
305
|
-
* (`{type: "amt", discovery, relay}`). Retained so a catalog published
|
|
306
|
-
* before the migration still parses; emitters MUST NOT write it, and
|
|
307
|
-
* `catalog.schema.json` already rejects it (`additionalProperties: false`
|
|
308
|
-
* on the endpoint), as does moq-rs `MulticastEndpoint`
|
|
309
|
-
* (`deny_unknown_fields`, and it carries no relay field at all).
|
|
310
|
-
*/
|
|
311
|
-
relayAddress?: string;
|
|
312
321
|
/**
|
|
313
322
|
* Aggregate bandwidth of this endpoint in bits per second.
|
|
314
323
|
* RECOMMENDED per draft §4.1 — enables capacity-aware joins.
|
|
@@ -671,6 +680,7 @@ export type CmsfCatalogErrorCode =
|
|
|
671
680
|
| "track_fec"
|
|
672
681
|
| "track_fec_bounds"
|
|
673
682
|
| "track_fec_block_profile"
|
|
683
|
+
| "track_fec_block_profile_unimplemented"
|
|
674
684
|
| "track_repair_track"
|
|
675
685
|
| "track_repair_depends"
|
|
676
686
|
| "track_repair_layer"
|
|
@@ -681,6 +691,7 @@ export type CmsfCatalogErrorCode =
|
|
|
681
691
|
| "multicast_auth"
|
|
682
692
|
| "multicast_track"
|
|
683
693
|
| "multicast_packet_id"
|
|
694
|
+
| "multicast_relay_address"
|
|
684
695
|
| "archive_object"
|
|
685
696
|
| "archive_origin";
|
|
686
697
|
|
|
@@ -843,8 +854,9 @@ export function validateCmsfMmtpCatalog(value: unknown): CmsfCatalog {
|
|
|
843
854
|
"repair layers are self-describing fec-repair tracks (depends, repairLayer); fec.enhancementRepair is not supported",
|
|
844
855
|
);
|
|
845
856
|
}
|
|
846
|
-
if (config["interleaveDepthMs"] !== undefined &&
|
|
847
|
-
|
|
857
|
+
if (config["interleaveDepthMs"] !== undefined &&
|
|
858
|
+
(!Number.isSafeInteger(config["interleaveDepthMs"]) || (config["interleaveDepthMs"] as number) < 0)) {
|
|
859
|
+
catalogError("track_fec", `${path}.fec.interleaveDepthMs`, "must be a non-negative safe integer");
|
|
848
860
|
}
|
|
849
861
|
if (algorithm !== "none") {
|
|
850
862
|
for (const field of ["sourceSymbols", "repairSymbols", "symbolSize"] as const) {
|
|
@@ -856,7 +868,7 @@ export function validateCmsfMmtpCatalog(value: unknown): CmsfCatalog {
|
|
|
856
868
|
catalogError("track_fec", `${path}.fec.repairTrack`, "must be a non-empty string");
|
|
857
869
|
}
|
|
858
870
|
}
|
|
859
|
-
// Required on a declared FEC instance, optional but
|
|
871
|
+
// Required on a declared FEC instance, optional but implemented on "none".
|
|
860
872
|
readFecBlockProfile(config["blockProfile"], `${path}.fec.blockProfile`, algorithm !== "none", catalogError);
|
|
861
873
|
}
|
|
862
874
|
}
|
|
@@ -935,6 +947,16 @@ export function validateCmsfMmtpCatalog(value: unknown): CmsfCatalog {
|
|
|
935
947
|
for (let endpointIndex = 0; endpointIndex < endpoints.length; endpointIndex++) {
|
|
936
948
|
const endpoint = endpoints[endpointIndex];
|
|
937
949
|
if (typeof endpoint !== "object" || endpoint === null || Array.isArray(endpoint)) continue;
|
|
950
|
+
// The endpoint relay moved to `multicast.networkSource[{type:"amt",relay}]`.
|
|
951
|
+
// Refuse rather than ignore: a dropped relay strands an AMT endpoint
|
|
952
|
+
// with no tunnel and reads as a gateway failure, not a bad catalog.
|
|
953
|
+
if ("relayAddress" in endpoint) {
|
|
954
|
+
catalogError(
|
|
955
|
+
"multicast_relay_address",
|
|
956
|
+
`$.multicast.endpoints[${endpointIndex}].relayAddress`,
|
|
957
|
+
'relayAddress is retired; publish the relay as multicast.networkSource[{type:"amt",relay}]',
|
|
958
|
+
);
|
|
959
|
+
}
|
|
938
960
|
const refs = (endpoint as Record<string, unknown>)["tracks"];
|
|
939
961
|
if (!Array.isArray(refs)) continue;
|
|
940
962
|
const packetIds = new Map<number, string>();
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "@blockcast/mmt-base";
|
|
15
15
|
import { catalogFecInterleaveMs, type FecInterleaveCatalog } from "@blockcast/mmt-fec";
|
|
16
16
|
import { resolveGroupDurationMs } from "./carp-catalog.js";
|
|
17
|
-
import {
|
|
17
|
+
import { catalogDeclaresFec, isoBlockSpanUsable } from "./fec-state.js";
|
|
18
18
|
import {
|
|
19
19
|
assembleRepairLayers,
|
|
20
20
|
assertRepairTrackReachable,
|
|
@@ -217,20 +217,77 @@ export type KeyframeCadenceCatalog = GroupDurationCatalog & {
|
|
|
217
217
|
gopDurationMs?: number;
|
|
218
218
|
};
|
|
219
219
|
|
|
220
|
+
function positiveNumber(value: number | undefined): number | undefined {
|
|
221
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* A rendition's explicit keyframe cadence in ms: `keyframeInterval*`, then
|
|
226
|
+
* `keyframeDuration*`, then `gopDuration*`, each preferring integer ticks over
|
|
227
|
+
* the timescale to the ms field. Undefined when none is stated; a group
|
|
228
|
+
* duration is not a keyframe cadence and is never substituted.
|
|
229
|
+
*/
|
|
230
|
+
export function catalogKeyframeCadenceMs(rendition: KeyframeCadenceCatalog | undefined): number | undefined {
|
|
231
|
+
if (!rendition) return undefined;
|
|
232
|
+
const timescale = positiveNumber(rendition.timescale);
|
|
233
|
+
const ticksToMs = (ticks: number | undefined) => {
|
|
234
|
+
const value = positiveNumber(ticks);
|
|
235
|
+
return value !== undefined && timescale !== undefined ? (value * 1000) / timescale : undefined;
|
|
236
|
+
};
|
|
237
|
+
return (
|
|
238
|
+
ticksToMs(rendition.keyframeIntervalTicks) ??
|
|
239
|
+
positiveNumber(rendition.keyframeIntervalMs) ??
|
|
240
|
+
ticksToMs(rendition.keyframeDurationTicks) ??
|
|
241
|
+
positiveNumber(rendition.keyframeDurationMs) ??
|
|
242
|
+
ticksToMs(rendition.gopDurationTicks) ??
|
|
243
|
+
positiveNumber(rendition.gopDurationMs)
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Media units per second an FEC track's block geometry is built on, read only
|
|
249
|
+
* from what the catalog states: video frames per second from `framerate`;
|
|
250
|
+
* audio AAC access units (1024 samples) per second from the endpoint sample
|
|
251
|
+
* rate, then the catalog `sampleRate`, then `timescale` (MP4-shaped audio).
|
|
252
|
+
* The first value present is the one validated, so a declared but unusable
|
|
253
|
+
* rate is not replaced by the next. Undefined when no usable rate is stated:
|
|
254
|
+
* there is no default, since this sizes interleave geometry. A video track
|
|
255
|
+
* never reads its timescale as a rate.
|
|
256
|
+
*/
|
|
257
|
+
export function catalogFecMediaUnitsPerSecond(
|
|
258
|
+
type: "video" | "audio",
|
|
259
|
+
rendition: { framerate?: number; sampleRate?: number; timescale?: number } | undefined,
|
|
260
|
+
endpointSampleRate?: number,
|
|
261
|
+
): number | undefined {
|
|
262
|
+
if (type === "video") return positiveNumber(rendition?.framerate);
|
|
263
|
+
const sampleRate = positiveNumber(endpointSampleRate ?? rendition?.sampleRate ?? rendition?.timescale);
|
|
264
|
+
return sampleRate === undefined ? undefined : sampleRate / 1024;
|
|
265
|
+
}
|
|
266
|
+
|
|
220
267
|
/**
|
|
221
268
|
* Why a track's catalog `fec` block resolved to no FEC although it is not a
|
|
222
|
-
* plain no-FEC declaration (BLO-35597):
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
* `
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
269
|
+
* plain no-FEC declaration (BLO-35597, draft-ramadan-moq-fec §5.1):
|
|
270
|
+
*
|
|
271
|
+
* - `track_fec_block_profile_unimplemented`: its `blockProfile` is a token
|
|
272
|
+
* this library does not implement. Only `iso-ssbg1-v1` is implemented; the
|
|
273
|
+
* retired `k-padded-v1` lands here.
|
|
274
|
+
* - `track_fec_block_profile`: it declares an FEC instance but names no
|
|
275
|
+
* `blockProfile`, or the value is not a non-empty string.
|
|
276
|
+
* - `track_fec_block_span`: retained for compatibility with older consumers;
|
|
277
|
+
* absence no longer disables in-band FEC.
|
|
278
|
+
* - `track_fec` (on `interleaveDepthMs`): it names `iso-ssbg1-v1` with a
|
|
279
|
+
* declared span that is not a non-negative safe integer in milliseconds.
|
|
280
|
+
*
|
|
281
|
+
* The profile selects the block math and is never defaulted or inferred, and
|
|
282
|
+
* the span is never borrowed from another track. Per §5.1 a receiver consumes
|
|
283
|
+
* such a track's source without FEC and does not join its repair tracks, so it
|
|
284
|
+
* carries no FEC geometry and no repair track; it is the only track affected,
|
|
285
|
+
* and neither the session nor any other track's FEC fails on its account.
|
|
230
286
|
*/
|
|
231
287
|
export type TrackFecUnavailable = {
|
|
232
|
-
/** The repair-contract code a catalog validator reports for the same field
|
|
233
|
-
|
|
288
|
+
/** The repair-contract code a catalog validator reports for the same field
|
|
289
|
+
* (`track_fec_block_span` excepted: an omitted span is valid shape). */
|
|
290
|
+
readonly code: "track_fec_block_profile" | "track_fec_block_profile_unimplemented" | "track_fec_block_span" | "track_fec";
|
|
234
291
|
/** JSON path of the offending field: `blockProfile`, or `interleaveDepthMs`. */
|
|
235
292
|
readonly path: string;
|
|
236
293
|
/** What is wrong, worded as the `RepairContractError` a validator throws. */
|
|
@@ -241,13 +298,11 @@ export type TrackFecParams = {
|
|
|
241
298
|
fecK: number;
|
|
242
299
|
/** The catalog `fec.blockProfile` (BLO-35597, ISO/IEC 23008-1 Annex C).
|
|
243
300
|
* Present exactly when the track has FEC (`fecK > 0`) and absent on no
|
|
244
|
-
* FEC
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
* instance that names no known profile has no FEC; `fecUnavailable` says
|
|
248
|
-
* why. */
|
|
301
|
+
* FEC. The only profile is `iso-ssbg1-v1` (ssbg_mode1, K' = SSB_length,
|
|
302
|
+
* consecutive SS_IDs); it is never defaulted. A declared instance that
|
|
303
|
+
* names no implemented profile has no FEC; `fecUnavailable` says why. */
|
|
249
304
|
fecBlockProfile?: FecBlockProfile;
|
|
250
|
-
/** Present exactly when the track's `fec` block names no
|
|
305
|
+
/** Present exactly when the track's `fec` block names no implemented
|
|
251
306
|
* `blockProfile`, or names `iso-ssbg1-v1` without a usable block span
|
|
252
307
|
* (see `TrackFecUnavailable`). The track then resolves to
|
|
253
308
|
* no FEC (`fecK` 0, no `fecBlockProfile`, no repair track) and this is
|
|
@@ -340,9 +395,15 @@ function msfTracks(catalog: RepairLayerCatalog): { tracks: Record<string, unknow
|
|
|
340
395
|
* layer 0 are `repair.renditions` entries that `depend` on it.
|
|
341
396
|
*
|
|
342
397
|
* Returns undefined when the source carries no FEC repair track and nothing
|
|
343
|
-
* depends on it
|
|
344
|
-
*
|
|
345
|
-
*
|
|
398
|
+
* depends on it, and when the source's FEC is unavailable
|
|
399
|
+
* (`catalogFecUnavailable`: no implemented `blockProfile`, the retired
|
|
400
|
+
* `k-padded-v1` included, or an `iso-ssbg1-v1` span it cannot use). Per
|
|
401
|
+
* draft-ramadan-moq-fec §5.1 a receiver joins none of that source's repair
|
|
402
|
+
* tracks, so it gets no layers; the catalog's repair contract is still
|
|
403
|
+
* enforced for it as for every source. Throws `RepairContractError` (code +
|
|
404
|
+
* JSON path) on any violation, including a repair rendition whose `depends`
|
|
405
|
+
* names a rendition without FEC, so a player fails closed before joining any
|
|
406
|
+
* repair track.
|
|
346
407
|
*/
|
|
347
408
|
export function resolveRepairLayers(
|
|
348
409
|
catalog: RepairLayerCatalog | undefined,
|
|
@@ -403,11 +464,12 @@ export function resolveRepairLayers(
|
|
|
403
464
|
);
|
|
404
465
|
}
|
|
405
466
|
}
|
|
406
|
-
|
|
467
|
+
const layers = assembleRepairLayers(
|
|
407
468
|
geometryOf(sourceName, `${renditionPath}.fec`, recordOf(rendition["fec"])),
|
|
408
469
|
descriptors,
|
|
409
470
|
throwRepairContractError,
|
|
410
471
|
);
|
|
472
|
+
return catalogFecUnavailable(rendition["fec"], `${renditionPath}.fec`) === undefined ? layers : undefined;
|
|
411
473
|
}
|
|
412
474
|
|
|
413
475
|
const msf = msfTracks(catalog);
|
|
@@ -451,9 +513,13 @@ export function resolveRepairLayers(
|
|
|
451
513
|
);
|
|
452
514
|
}
|
|
453
515
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
516
|
+
const layers = assembleRepairLayers(
|
|
517
|
+
geometryOf(sourceName, `$.tracks[${msfIndex}].fec`, fec),
|
|
518
|
+
descriptors,
|
|
519
|
+
throwRepairContractError,
|
|
520
|
+
{ layerZeroMustBeDeclared: true },
|
|
521
|
+
);
|
|
522
|
+
return catalogFecUnavailable(fec, `$.tracks[${msfIndex}].fec`) === undefined ? layers : undefined;
|
|
457
523
|
}
|
|
458
524
|
|
|
459
525
|
/** A MoQ Transport priority (0..255, lower first), or null. */
|
|
@@ -476,7 +542,9 @@ function moqtPriority(value: unknown): number | null {
|
|
|
476
542
|
* whose renditions carry no MoQ Transport priority) yields null, and the
|
|
477
543
|
* keyframe repair FETCH is then sent without the parameter.
|
|
478
544
|
*
|
|
479
|
-
* Returns null when the track has no repair track
|
|
545
|
+
* Returns null without a positive elapsed span, or when the track has no repair track, including when its FEC is
|
|
546
|
+
* unavailable (`catalogFecUnavailable`): draft-ramadan-moq-fec §5.1 forbids
|
|
547
|
+
* joining that track's repair tracks, so there is nothing to FETCH.
|
|
480
548
|
*
|
|
481
549
|
* @throws RepairContractError exactly as `resolveRepairLayers` does.
|
|
482
550
|
*/
|
|
@@ -490,6 +558,13 @@ export function catalogRepairTarget(
|
|
|
490
558
|
const sourceName = typeof source === "string" ? source : source.name;
|
|
491
559
|
const msf = msfTracks(catalog);
|
|
492
560
|
const entry = msf?.tracks.find((t) => t["name"] === sourceName);
|
|
561
|
+
const hang = catalog as CatalogWithRenditions;
|
|
562
|
+
const roles: Array<"video" | "audio"> = typeof source === "string" ? ["video", "audio"]
|
|
563
|
+
: source.type === "video" ? ["video"] : source.type === "audio" ? ["audio"] : ["video", "audio"];
|
|
564
|
+
const rendition = roles.map((role) => hang[role]?.renditions?.[sourceName]).find((r) => recordOf(r) !== undefined);
|
|
565
|
+
const fec = rendition === undefined ? recordOf(entry?.["fec"]) : recordOf(rendition.fec);
|
|
566
|
+
// Unicast repair requires a known elapsed FEC deadline (§11.4).
|
|
567
|
+
if (!fec || !(catalogFecInterleaveMs(fec) ?? 0)) return null;
|
|
493
568
|
const sourcePriority =
|
|
494
569
|
entry === undefined ? null : moqtPriority(entry["priority"]);
|
|
495
570
|
return { repairTrack: layerZero.repairTrackName, sourcePriority, repairPriority: layerZero.priority };
|
|
@@ -521,12 +596,13 @@ function nonNegativeField(value: unknown): number | undefined {
|
|
|
521
596
|
|
|
522
597
|
/**
|
|
523
598
|
* The track-scoped reading of `readFecBlockProfile` (BLO-35597): the same one
|
|
524
|
-
* rule every catalog reader applies (a declared FEC instance names
|
|
525
|
-
* profile; a block declaring none may omit it, but a token it
|
|
526
|
-
*
|
|
527
|
-
*
|
|
528
|
-
*
|
|
529
|
-
*
|
|
599
|
+
* rule every catalog reader applies (a declared FEC instance names the
|
|
600
|
+
* implemented profile; a block declaring none may omit it, but a token it
|
|
601
|
+
* carries must be implemented), with its two failures,
|
|
602
|
+
* `track_fec_block_profile_unimplemented` and `track_fec_block_profile`,
|
|
603
|
+
* returned as the track's reason instead of thrown. A profile problem costs
|
|
604
|
+
* only its own track: it never aborts resolving the catalog's other tracks, and
|
|
605
|
+
* the token is still never defaulted or inferred.
|
|
530
606
|
*/
|
|
531
607
|
function blockProfileUnavailable(
|
|
532
608
|
value: unknown,
|
|
@@ -537,39 +613,74 @@ function blockProfileUnavailable(
|
|
|
537
613
|
readFecBlockProfile(value, path, declaresFecInstance, throwRepairContractError);
|
|
538
614
|
return undefined;
|
|
539
615
|
} catch (error) {
|
|
540
|
-
if (
|
|
541
|
-
|
|
616
|
+
if (
|
|
617
|
+
!(error instanceof RepairContractError) ||
|
|
618
|
+
(error.code !== "track_fec_block_profile" && error.code !== "track_fec_block_profile_unimplemented")
|
|
619
|
+
) {
|
|
620
|
+
throw error;
|
|
621
|
+
}
|
|
622
|
+
return Object.freeze({ code: error.code, path: error.path, message: error.message });
|
|
542
623
|
}
|
|
543
624
|
}
|
|
544
625
|
|
|
545
|
-
/**
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
626
|
+
/** Invalid declared spans disable the track; absence/zero still permits in-band FEC. */
|
|
627
|
+
function isoSpanUnavailable(
|
|
628
|
+
fec: Record<string, unknown>,
|
|
629
|
+
path: string,
|
|
630
|
+
declaresFecInstance: boolean,
|
|
631
|
+
): TrackFecUnavailable | undefined {
|
|
551
632
|
if (!declaresFecInstance || isoBlockSpanUsable(fec)) return undefined;
|
|
633
|
+
|
|
552
634
|
return Object.freeze({
|
|
553
635
|
code: "track_fec",
|
|
554
636
|
path,
|
|
555
637
|
message:
|
|
556
|
-
`[repair-layers:track_fec] ${path}:
|
|
557
|
-
`${MIN_INTERLEAVE_DEPTH_MS} ms, which bounds its block location`,
|
|
638
|
+
`[repair-layers:track_fec] ${path}: must be a non-negative safe integer in milliseconds`,
|
|
558
639
|
});
|
|
559
640
|
}
|
|
560
641
|
|
|
642
|
+
/**
|
|
643
|
+
* Whether one catalog `fec` block leaves its track without FEC although it is
|
|
644
|
+
* not a plain no-FEC declaration (draft-ramadan-moq-fec §5.1), and why: the
|
|
645
|
+
* one track-scoped availability rule both catalog dialects apply. The hang
|
|
646
|
+
* resolver (`resolveCatalogTrackFec`, `resolveRepairLayers`) and the MSF
|
|
647
|
+
* `tracks[]` ingest (`MulticastManager.configureMultiTrack`) read it, so they
|
|
648
|
+
* cannot disagree about which tracks keep FEC.
|
|
649
|
+
*
|
|
650
|
+
* Returns the reason (`TrackFecUnavailable`) when the block names no
|
|
651
|
+
* implemented `blockProfile` (the retired `k-padded-v1` included; on
|
|
652
|
+
* `algorithm: "none"` only a present token is read) or, for a declared
|
|
653
|
+
* `iso-ssbg1-v1` instance, carries no usable block span. Returns undefined for
|
|
654
|
+
* a non-object and for every block whose FEC is available. It reads only the
|
|
655
|
+
* profile and the span: malformed geometry (`sourceSymbols`, `symbolSize`, ...)
|
|
656
|
+
* is the caller's to reject, and takes precedence. Never throws.
|
|
657
|
+
*
|
|
658
|
+
* @param fec the track's catalog `fec` value.
|
|
659
|
+
* @param fecPath JSON path of that `fec` block; the reason's `path` extends it.
|
|
660
|
+
*/
|
|
661
|
+
export function catalogFecUnavailable(fec: unknown, fecPath: string): TrackFecUnavailable | undefined {
|
|
662
|
+
const block = recordOf(fec);
|
|
663
|
+
if (block === undefined) return undefined;
|
|
664
|
+
const declaresFecInstance = block["algorithm"] !== "none";
|
|
665
|
+
return (
|
|
666
|
+
blockProfileUnavailable(block["blockProfile"], `${fecPath}.blockProfile`, declaresFecInstance) ??
|
|
667
|
+
isoSpanUnavailable(block, `${fecPath}.interleaveDepthMs`, declaresFecInstance)
|
|
668
|
+
);
|
|
669
|
+
}
|
|
670
|
+
|
|
561
671
|
/**
|
|
562
672
|
* Per-track FEC geometry, or `NO_FEC` when the rendition declares none (no
|
|
563
|
-
* `fec`, or `algorithm: "none"`) or
|
|
564
|
-
* `
|
|
673
|
+
* `fec`, or `algorithm: "none"`) or its FEC is unavailable
|
|
674
|
+
* (`catalogFecUnavailable`: no implemented `blockProfile`, or an
|
|
675
|
+
* `iso-ssbg1-v1` span it cannot use), which carries `fecUnavailable`.
|
|
565
676
|
*
|
|
566
677
|
* @throws RepairContractError from `resolveRepairLayers` when the rendition
|
|
567
678
|
* declares a `fec` block (any algorithm, `none` included) and the catalog's
|
|
568
679
|
* repair contract is malformed, and `track_fec` when its `fec` declares an FEC
|
|
569
680
|
* instance whose `sourceSymbols` or `symbolSize` is not a positive integer;
|
|
570
|
-
* see `resolveCatalogTrackFec`. An absent or
|
|
571
|
-
* `iso-ssbg1-v1` span
|
|
572
|
-
* throws: it is this track's `fecUnavailable`.
|
|
681
|
+
* see `resolveCatalogTrackFec`. An absent or unimplemented `blockProfile`, or
|
|
682
|
+
* an invalid `iso-ssbg1-v1` span,
|
|
683
|
+
* never throws: it is this track's `fecUnavailable`.
|
|
573
684
|
*/
|
|
574
685
|
function fecParams(
|
|
575
686
|
catalog: CatalogWithRenditions | undefined,
|
|
@@ -605,15 +716,13 @@ function fecParams(
|
|
|
605
716
|
);
|
|
606
717
|
}
|
|
607
718
|
// What remains is `algorithm: "none"` (which carries no profile; a token
|
|
608
|
-
// it does carry must still be
|
|
609
|
-
//
|
|
610
|
-
// track alone.
|
|
611
|
-
const fecUnavailable =
|
|
612
|
-
blockProfileUnavailable(fec.blockProfile, `${fecPath}.blockProfile`, declaresFecInstance) ??
|
|
613
|
-
isoSpanUnavailable(fec, `${fecPath}.interleaveDepthMs`, declaresFecInstance);
|
|
719
|
+
// it does carry must still be implemented) or a declared instance whose
|
|
720
|
+
// FEC is unavailable (§5.1). Neither has FEC; the reason says why, for
|
|
721
|
+
// this track alone.
|
|
722
|
+
const fecUnavailable = catalogFecUnavailable(fec, fecPath);
|
|
614
723
|
return fecUnavailable === undefined ? { ...NO_FEC, ...mediaRate } : { ...NO_FEC, ...mediaRate, fecUnavailable };
|
|
615
724
|
}
|
|
616
|
-
// The predicate held, so the profile is
|
|
725
|
+
// The predicate held, so the profile is implemented: this read cannot fail.
|
|
617
726
|
const fecBlockProfile = readFecBlockProfile(fec.blockProfile, `${fecPath}.blockProfile`, true, throwRepairContractError);
|
|
618
727
|
return {
|
|
619
728
|
fecK: fec.sourceSymbols ?? 0,
|
|
@@ -622,9 +731,7 @@ function fecParams(
|
|
|
622
731
|
// The wire RSB_length: every base layer's packets carry the base total (§7.1).
|
|
623
732
|
fecTotalRepairCount: repair?.totalBaseRepairSymbols ?? fec.repairSymbols ?? 0,
|
|
624
733
|
fecSymbolSize: fec.symbolSize ?? 0,
|
|
625
|
-
//
|
|
626
|
-
// only interleave key the catalog carries post-BLO-14526. Receivers
|
|
627
|
-
// derive D by positive round-half-up of span / GOP duration where needed.
|
|
734
|
+
// Zero/absence leaves the elapsed deadline unknown; geometry stays in-band.
|
|
628
735
|
fecInterleaveMs: catalogFecInterleaveMs(fec) ?? 0,
|
|
629
736
|
// Additive, never a multiplier on the span: jitter belongs to the network
|
|
630
737
|
// path and the span belongs to the encoder, so scaling one by the other
|
|
@@ -648,14 +755,16 @@ function fecParams(
|
|
|
648
755
|
* interleave and repair layers, never the first rendition's. A track with no
|
|
649
756
|
* rendition of its type resolves to no FEC (`fecK` 0) and no media rate.
|
|
650
757
|
*
|
|
651
|
-
* The block profile is track-scoped (BLO-35597).
|
|
652
|
-
*
|
|
653
|
-
*
|
|
654
|
-
*
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
*
|
|
658
|
-
*
|
|
758
|
+
* The block profile is track-scoped (BLO-35597, draft-ramadan-moq-fec §5.1).
|
|
759
|
+
* `iso-ssbg1-v1` is the only implemented profile. A rendition whose `fec`
|
|
760
|
+
* declares an FEC instance but names no `blockProfile`
|
|
761
|
+
* (`track_fec_block_profile`), or whose `fec` (a `none` block included) names
|
|
762
|
+
* any other token (`track_fec_block_profile_unimplemented`; the retired
|
|
763
|
+
* `k-padded-v1` is one), resolves to no FEC: `fecK` 0, no `fecBlockProfile`,
|
|
764
|
+
* no repair track, layers or overlays, and `fecUnavailable` carrying the
|
|
765
|
+
* reason at the field's JSON path for the caller to surface. Every other track
|
|
766
|
+
* resolves as usual. The profile is never defaulted or inferred;
|
|
767
|
+
* `algorithm: "none"` may omit it.
|
|
659
768
|
*
|
|
660
769
|
* @throws RepairContractError `track_fec` when a rendition's `fec` declares an
|
|
661
770
|
* FEC instance (any `algorithm` but `none`) whose `sourceSymbols` or
|
|
@@ -200,8 +200,6 @@ export interface CmafAudioConcealStats {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
export interface BlockAssemblerConfig {
|
|
203
|
-
/** Number of source symbols per FEC block */
|
|
204
|
-
k: number
|
|
205
203
|
/** Timescale for CMAF segments (default 1_000_000 = microseconds) */
|
|
206
204
|
timescale?: number
|
|
207
205
|
/** ISO track ID (default 1) */
|
|
@@ -272,7 +270,7 @@ export class CmafBlockAssembler {
|
|
|
272
270
|
#config: Required<
|
|
273
271
|
Pick<
|
|
274
272
|
BlockAssemblerConfig,
|
|
275
|
-
'
|
|
273
|
+
'timescale' | 'trackId' | 'trackType' | 'admitAuthoredTiming'
|
|
276
274
|
>
|
|
277
275
|
>
|
|
278
276
|
#pendingRecovered = new Map<number, BlockFrame>()
|
|
@@ -832,7 +830,6 @@ export class CmafBlockAssembler {
|
|
|
832
830
|
|
|
833
831
|
constructor(config: BlockAssemblerConfig) {
|
|
834
832
|
this.#config = {
|
|
835
|
-
k: config.k,
|
|
836
833
|
timescale: config.timescale ?? 1_000_000,
|
|
837
834
|
trackId: config.trackId ?? 1,
|
|
838
835
|
trackType: config.trackType,
|
package/src/cmcd-producer.ts
CHANGED
|
@@ -97,12 +97,6 @@ function buildFecParams(stats: FecTrackStats): CmcdParams {
|
|
|
97
97
|
params['x-bc-fec-p'] = cfg.repairCount
|
|
98
98
|
params['x-bc-fec-recovery'] = parseFloat((stats.recoveryRate / 100).toFixed(4))
|
|
99
99
|
|
|
100
|
-
// ALTA keys: omit entirely when altaEnabled is false (D-09)
|
|
101
|
-
if (cfg.altaEnabled) {
|
|
102
|
-
params['x-bc-alta-verified'] = stats.altaVerified > 0
|
|
103
|
-
params['x-bc-alta-failures'] = stats.altaFailed
|
|
104
|
-
}
|
|
105
|
-
|
|
106
100
|
return params
|
|
107
101
|
}
|
|
108
102
|
|