mattebox 0.1.0
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/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/cdn/mattebox.dash-drm.min.js +2 -0
- package/dist/cdn/mattebox.dash.min.js +2 -0
- package/dist/cdn/mattebox.dual-drm.min.js +2 -0
- package/dist/cdn/mattebox.dual-ts-drm.min.js +3 -0
- package/dist/cdn/mattebox.dual-ts.min.js +3 -0
- package/dist/cdn/mattebox.dual.min.js +2 -0
- package/dist/cdn/mattebox.hls-drm.min.js +2 -0
- package/dist/cdn/mattebox.hls-ts-drm.min.js +3 -0
- package/dist/cdn/mattebox.hls-ts.min.js +3 -0
- package/dist/cdn/mattebox.hls.min.js +2 -0
- package/dist/cdn/mattebox.kernel.min.js +1 -0
- package/dist/cdn/mattebox.min.js +6 -0
- package/dist/cdn/transmux.worker.js +1 -0
- package/dist/containers/adts.d.ts +33 -0
- package/dist/containers/adts.d.ts.map +1 -0
- package/dist/containers/adts.js +66 -0
- package/dist/containers/adts.js.map +1 -0
- package/dist/containers/captions.d.ts +27 -0
- package/dist/containers/captions.d.ts.map +1 -0
- package/dist/containers/captions.js +36 -0
- package/dist/containers/captions.js.map +1 -0
- package/dist/containers/codec-probe/index.d.ts +35 -0
- package/dist/containers/codec-probe/index.d.ts.map +1 -0
- package/dist/containers/codec-probe/index.js +222 -0
- package/dist/containers/codec-probe/index.js.map +1 -0
- package/dist/containers/fmp4/writer.d.ts +62 -0
- package/dist/containers/fmp4/writer.d.ts.map +1 -0
- package/dist/containers/fmp4/writer.js +201 -0
- package/dist/containers/fmp4/writer.js.map +1 -0
- package/dist/containers/id3.d.ts +25 -0
- package/dist/containers/id3.d.ts.map +1 -0
- package/dist/containers/id3.js +75 -0
- package/dist/containers/id3.js.map +1 -0
- package/dist/containers/mp4-box/index.d.ts +79 -0
- package/dist/containers/mp4-box/index.d.ts.map +1 -0
- package/dist/containers/mp4-box/index.js +231 -0
- package/dist/containers/mp4-box/index.js.map +1 -0
- package/dist/containers/packed-audio/index.d.ts +7 -0
- package/dist/containers/packed-audio/index.d.ts.map +1 -0
- package/dist/containers/packed-audio/index.js +63 -0
- package/dist/containers/packed-audio/index.js.map +1 -0
- package/dist/containers/sei.d.ts +26 -0
- package/dist/containers/sei.d.ts.map +1 -0
- package/dist/containers/sei.js +100 -0
- package/dist/containers/sei.js.map +1 -0
- package/dist/containers/ts-transmux/demux.d.ts +49 -0
- package/dist/containers/ts-transmux/demux.d.ts.map +1 -0
- package/dist/containers/ts-transmux/demux.js +222 -0
- package/dist/containers/ts-transmux/demux.js.map +1 -0
- package/dist/containers/ts-transmux/h264.d.ts +48 -0
- package/dist/containers/ts-transmux/h264.d.ts.map +1 -0
- package/dist/containers/ts-transmux/h264.js +211 -0
- package/dist/containers/ts-transmux/h264.js.map +1 -0
- package/dist/containers/ts-transmux/index.d.ts +17 -0
- package/dist/containers/ts-transmux/index.d.ts.map +1 -0
- package/dist/containers/ts-transmux/index.js +34 -0
- package/dist/containers/ts-transmux/index.js.map +1 -0
- package/dist/containers/ts-transmux/runner.d.ts +23 -0
- package/dist/containers/ts-transmux/runner.d.ts.map +1 -0
- package/dist/containers/ts-transmux/runner.js +99 -0
- package/dist/containers/ts-transmux/runner.js.map +1 -0
- package/dist/containers/ts-transmux/transmux.d.ts +24 -0
- package/dist/containers/ts-transmux/transmux.d.ts.map +1 -0
- package/dist/containers/ts-transmux/transmux.js +212 -0
- package/dist/containers/ts-transmux/transmux.js.map +1 -0
- package/dist/containers/ts-transmux/transmux.worker.d.ts +2 -0
- package/dist/containers/ts-transmux/transmux.worker.d.ts.map +1 -0
- package/dist/containers/ts-transmux/transmux.worker.js +19 -0
- package/dist/containers/ts-transmux/transmux.worker.js.map +1 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/asyncToGenerator.js +27 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/defineProperty.js +12 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js +25 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutProperties.js +13 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectWithoutPropertiesLoose.js +12 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPrimitive.js +14 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/toPropertyKey.js +9 -0
- package/dist/es2015/_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/typeof.js +11 -0
- package/dist/es2015/containers/adts.js +77 -0
- package/dist/es2015/containers/captions.js +36 -0
- package/dist/es2015/containers/codec-probe/index.js +220 -0
- package/dist/es2015/containers/fmp4/writer.js +165 -0
- package/dist/es2015/containers/id3.js +72 -0
- package/dist/es2015/containers/mp4-box/index.js +209 -0
- package/dist/es2015/containers/packed-audio/index.js +67 -0
- package/dist/es2015/containers/sei.js +79 -0
- package/dist/es2015/containers/ts-transmux/demux.js +211 -0
- package/dist/es2015/containers/ts-transmux/h264.js +204 -0
- package/dist/es2015/containers/ts-transmux/index.js +37 -0
- package/dist/es2015/containers/ts-transmux/runner.js +95 -0
- package/dist/es2015/containers/ts-transmux/transmux.js +210 -0
- package/dist/es2015/containers/ts-transmux/transmux.worker.js +26 -0
- package/dist/es2015/index.js +356 -0
- package/dist/es2015/kernel/append-queue.js +148 -0
- package/dist/es2015/kernel/bus.js +134 -0
- package/dist/es2015/kernel/context.js +92 -0
- package/dist/es2015/kernel/effects.js +62 -0
- package/dist/es2015/kernel/evictor.js +67 -0
- package/dist/es2015/kernel/lifecycle.js +122 -0
- package/dist/es2015/kernel/loader.js +108 -0
- package/dist/es2015/kernel/mime.js +20 -0
- package/dist/es2015/kernel/mse.js +426 -0
- package/dist/es2015/kernel/reducer.js +1051 -0
- package/dist/es2015/kernel/rendition-select.js +263 -0
- package/dist/es2015/kernel/scheduler.js +82 -0
- package/dist/es2015/kernel/sinks/metadata-sink.js +7 -0
- package/dist/es2015/kernel/sinks/mse-sink.js +31 -0
- package/dist/es2015/kernel/sinks/text-track-sink.js +167 -0
- package/dist/es2015/kernel/timeline.js +127 -0
- package/dist/es2015/kernel/trace.js +134 -0
- package/dist/es2015/kernel/track-registry.js +47 -0
- package/dist/es2015/kernel/transport.js +242 -0
- package/dist/es2015/kernel/watchdog.js +38 -0
- package/dist/es2015/presets/dash/index.js +9 -0
- package/dist/es2015/presets/dash-drm/index.js +13 -0
- package/dist/es2015/presets/define.js +45 -0
- package/dist/es2015/presets/dual/index.js +14 -0
- package/dist/es2015/presets/dual-drm/index.js +14 -0
- package/dist/es2015/presets/dual-ts/index.js +14 -0
- package/dist/es2015/presets/dual-ts-drm/index.js +15 -0
- package/dist/es2015/presets/full/index.js +28 -0
- package/dist/es2015/presets/hls/index.js +9 -0
- package/dist/es2015/presets/hls-drm/index.js +13 -0
- package/dist/es2015/presets/hls-ts/index.js +13 -0
- package/dist/es2015/presets/hls-ts-drm/index.js +14 -0
- package/dist/es2015/presets/kernel/index.js +10 -0
- package/dist/es2015/presets/storage.js +24 -0
- package/dist/es2015/presets/tiers.js +93 -0
- package/dist/es2015/protocols/dash-cmaf/index.js +161 -0
- package/dist/es2015/protocols/dash-cmaf/parse.js +491 -0
- package/dist/es2015/protocols/dash-live/index.js +192 -0
- package/dist/es2015/protocols/hls-cmaf/index.js +168 -0
- package/dist/es2015/protocols/hls-cmaf/lexer.js +72 -0
- package/dist/es2015/protocols/hls-cmaf/parse.js +457 -0
- package/dist/es2015/protocols/hls-live/index.js +296 -0
- package/dist/es2015/protocols/live-shared.js +29 -0
- package/dist/es2015/stages/abr/index.js +126 -0
- package/dist/es2015/stages/abr-cap-size/index.js +22 -0
- package/dist/es2015/stages/abr-persist/index.js +52 -0
- package/dist/es2015/stages/aes-128/index.js +76 -0
- package/dist/es2015/stages/alt-audio/index.js +80 -0
- package/dist/es2015/stages/cmaf-timing/index.js +55 -0
- package/dist/es2015/stages/cmcd/index.js +70 -0
- package/dist/es2015/stages/codec-probe/index.js +65 -0
- package/dist/es2015/stages/codec-switch/index.js +48 -0
- package/dist/es2015/stages/content-steering/index.js +179 -0
- package/dist/es2015/stages/drm-shared.js +18 -0
- package/dist/es2015/stages/eme-cenc/index.js +46 -0
- package/dist/es2015/stages/eme-core/index.js +237 -0
- package/dist/es2015/stages/eme-fairplay/index.js +52 -0
- package/dist/es2015/stages/meta-id3/index.js +37 -0
- package/dist/es2015/stages/mp4-box/index.js +27 -0
- package/dist/es2015/stages/nal-scan/index.js +121 -0
- package/dist/es2015/stages/pdt/index.js +34 -0
- package/dist/es2015/stages/recovery/index.js +283 -0
- package/dist/es2015/stages/text-cea608/decode.js +201 -0
- package/dist/es2015/stages/text-cea608/index.js +71 -0
- package/dist/es2015/stages/text-webvtt/index.js +82 -0
- package/dist/es2015/stages/text-webvtt/parse.js +60 -0
- package/dist/es2015/stages/text-webvtt-segmented/index.js +57 -0
- package/dist/es2015/stages/thumbnails/index.js +73 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +423 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/append-queue.d.ts +47 -0
- package/dist/kernel/append-queue.d.ts.map +1 -0
- package/dist/kernel/append-queue.js +180 -0
- package/dist/kernel/append-queue.js.map +1 -0
- package/dist/kernel/bus.d.ts +50 -0
- package/dist/kernel/bus.d.ts.map +1 -0
- package/dist/kernel/bus.js +147 -0
- package/dist/kernel/bus.js.map +1 -0
- package/dist/kernel/context.d.ts +45 -0
- package/dist/kernel/context.d.ts.map +1 -0
- package/dist/kernel/context.js +116 -0
- package/dist/kernel/context.js.map +1 -0
- package/dist/kernel/effects.d.ts +33 -0
- package/dist/kernel/effects.d.ts.map +1 -0
- package/dist/kernel/effects.js +65 -0
- package/dist/kernel/effects.js.map +1 -0
- package/dist/kernel/evictor.d.ts +46 -0
- package/dist/kernel/evictor.d.ts.map +1 -0
- package/dist/kernel/evictor.js +92 -0
- package/dist/kernel/evictor.js.map +1 -0
- package/dist/kernel/lifecycle.d.ts +41 -0
- package/dist/kernel/lifecycle.d.ts.map +1 -0
- package/dist/kernel/lifecycle.js +129 -0
- package/dist/kernel/lifecycle.js.map +1 -0
- package/dist/kernel/loader.d.ts +28 -0
- package/dist/kernel/loader.d.ts.map +1 -0
- package/dist/kernel/loader.js +126 -0
- package/dist/kernel/loader.js.map +1 -0
- package/dist/kernel/mime.d.ts +13 -0
- package/dist/kernel/mime.d.ts.map +1 -0
- package/dist/kernel/mime.js +18 -0
- package/dist/kernel/mime.js.map +1 -0
- package/dist/kernel/mse.d.ts +62 -0
- package/dist/kernel/mse.d.ts.map +1 -0
- package/dist/kernel/mse.js +490 -0
- package/dist/kernel/mse.js.map +1 -0
- package/dist/kernel/reducer.d.ts +39 -0
- package/dist/kernel/reducer.d.ts.map +1 -0
- package/dist/kernel/reducer.js +1316 -0
- package/dist/kernel/reducer.js.map +1 -0
- package/dist/kernel/rendition-select.d.ts +102 -0
- package/dist/kernel/rendition-select.d.ts.map +1 -0
- package/dist/kernel/rendition-select.js +295 -0
- package/dist/kernel/rendition-select.js.map +1 -0
- package/dist/kernel/scheduler.d.ts +57 -0
- package/dist/kernel/scheduler.d.ts.map +1 -0
- package/dist/kernel/scheduler.js +98 -0
- package/dist/kernel/scheduler.js.map +1 -0
- package/dist/kernel/sinks/metadata-sink.d.ts +7 -0
- package/dist/kernel/sinks/metadata-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/metadata-sink.js +5 -0
- package/dist/kernel/sinks/metadata-sink.js.map +1 -0
- package/dist/kernel/sinks/mse-sink.d.ts +17 -0
- package/dist/kernel/sinks/mse-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/mse-sink.js +20 -0
- package/dist/kernel/sinks/mse-sink.js.map +1 -0
- package/dist/kernel/sinks/text-track-sink.d.ts +45 -0
- package/dist/kernel/sinks/text-track-sink.d.ts.map +1 -0
- package/dist/kernel/sinks/text-track-sink.js +184 -0
- package/dist/kernel/sinks/text-track-sink.js.map +1 -0
- package/dist/kernel/timeline.d.ts +57 -0
- package/dist/kernel/timeline.d.ts.map +1 -0
- package/dist/kernel/timeline.js +203 -0
- package/dist/kernel/timeline.js.map +1 -0
- package/dist/kernel/trace.d.ts +42 -0
- package/dist/kernel/trace.d.ts.map +1 -0
- package/dist/kernel/trace.js +165 -0
- package/dist/kernel/trace.js.map +1 -0
- package/dist/kernel/track-registry.d.ts +22 -0
- package/dist/kernel/track-registry.d.ts.map +1 -0
- package/dist/kernel/track-registry.js +42 -0
- package/dist/kernel/track-registry.js.map +1 -0
- package/dist/kernel/transport.d.ts +90 -0
- package/dist/kernel/transport.d.ts.map +1 -0
- package/dist/kernel/transport.js +256 -0
- package/dist/kernel/transport.js.map +1 -0
- package/dist/kernel/watchdog.d.ts +35 -0
- package/dist/kernel/watchdog.d.ts.map +1 -0
- package/dist/kernel/watchdog.js +43 -0
- package/dist/kernel/watchdog.js.map +1 -0
- package/dist/presets/dash/index.d.ts +4 -0
- package/dist/presets/dash/index.d.ts.map +1 -0
- package/dist/presets/dash/index.js +8 -0
- package/dist/presets/dash/index.js.map +1 -0
- package/dist/presets/dash-drm/index.d.ts +4 -0
- package/dist/presets/dash-drm/index.d.ts.map +1 -0
- package/dist/presets/dash-drm/index.js +8 -0
- package/dist/presets/dash-drm/index.js.map +1 -0
- package/dist/presets/define.d.ts +36 -0
- package/dist/presets/define.d.ts.map +1 -0
- package/dist/presets/define.js +39 -0
- package/dist/presets/define.js.map +1 -0
- package/dist/presets/dual/index.d.ts +4 -0
- package/dist/presets/dual/index.d.ts.map +1 -0
- package/dist/presets/dual/index.js +9 -0
- package/dist/presets/dual/index.js.map +1 -0
- package/dist/presets/dual-drm/index.d.ts +4 -0
- package/dist/presets/dual-drm/index.d.ts.map +1 -0
- package/dist/presets/dual-drm/index.js +13 -0
- package/dist/presets/dual-drm/index.js.map +1 -0
- package/dist/presets/dual-ts/index.d.ts +4 -0
- package/dist/presets/dual-ts/index.d.ts.map +1 -0
- package/dist/presets/dual-ts/index.js +8 -0
- package/dist/presets/dual-ts/index.js.map +1 -0
- package/dist/presets/dual-ts-drm/index.d.ts +4 -0
- package/dist/presets/dual-ts-drm/index.d.ts.map +1 -0
- package/dist/presets/dual-ts-drm/index.js +14 -0
- package/dist/presets/dual-ts-drm/index.js.map +1 -0
- package/dist/presets/full/index.d.ts +4 -0
- package/dist/presets/full/index.d.ts.map +1 -0
- package/dist/presets/full/index.js +27 -0
- package/dist/presets/full/index.js.map +1 -0
- package/dist/presets/hls/index.d.ts +4 -0
- package/dist/presets/hls/index.d.ts.map +1 -0
- package/dist/presets/hls/index.js +8 -0
- package/dist/presets/hls/index.js.map +1 -0
- package/dist/presets/hls-drm/index.d.ts +4 -0
- package/dist/presets/hls-drm/index.d.ts.map +1 -0
- package/dist/presets/hls-drm/index.js +8 -0
- package/dist/presets/hls-drm/index.js.map +1 -0
- package/dist/presets/hls-ts/index.d.ts +4 -0
- package/dist/presets/hls-ts/index.d.ts.map +1 -0
- package/dist/presets/hls-ts/index.js +8 -0
- package/dist/presets/hls-ts/index.js.map +1 -0
- package/dist/presets/hls-ts-drm/index.d.ts +4 -0
- package/dist/presets/hls-ts-drm/index.d.ts.map +1 -0
- package/dist/presets/hls-ts-drm/index.js +13 -0
- package/dist/presets/hls-ts-drm/index.js.map +1 -0
- package/dist/presets/kernel/index.d.ts +4 -0
- package/dist/presets/kernel/index.d.ts.map +1 -0
- package/dist/presets/kernel/index.js +9 -0
- package/dist/presets/kernel/index.js.map +1 -0
- package/dist/presets/storage.d.ts +9 -0
- package/dist/presets/storage.d.ts.map +1 -0
- package/dist/presets/storage.js +24 -0
- package/dist/presets/storage.js.map +1 -0
- package/dist/presets/tiers.d.ts +22 -0
- package/dist/presets/tiers.d.ts.map +1 -0
- package/dist/presets/tiers.js +78 -0
- package/dist/presets/tiers.js.map +1 -0
- package/dist/protocols/dash-cmaf/index.d.ts +20 -0
- package/dist/protocols/dash-cmaf/index.d.ts.map +1 -0
- package/dist/protocols/dash-cmaf/index.js +176 -0
- package/dist/protocols/dash-cmaf/index.js.map +1 -0
- package/dist/protocols/dash-cmaf/parse.d.ts +24 -0
- package/dist/protocols/dash-cmaf/parse.d.ts.map +1 -0
- package/dist/protocols/dash-cmaf/parse.js +586 -0
- package/dist/protocols/dash-cmaf/parse.js.map +1 -0
- package/dist/protocols/dash-live/index.d.ts +4 -0
- package/dist/protocols/dash-live/index.d.ts.map +1 -0
- package/dist/protocols/dash-live/index.js +188 -0
- package/dist/protocols/dash-live/index.js.map +1 -0
- package/dist/protocols/hls-cmaf/index.d.ts +17 -0
- package/dist/protocols/hls-cmaf/index.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/index.js +189 -0
- package/dist/protocols/hls-cmaf/index.js.map +1 -0
- package/dist/protocols/hls-cmaf/lexer.d.ts +25 -0
- package/dist/protocols/hls-cmaf/lexer.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/lexer.js +81 -0
- package/dist/protocols/hls-cmaf/lexer.js.map +1 -0
- package/dist/protocols/hls-cmaf/parse.d.ts +57 -0
- package/dist/protocols/hls-cmaf/parse.d.ts.map +1 -0
- package/dist/protocols/hls-cmaf/parse.js +572 -0
- package/dist/protocols/hls-cmaf/parse.js.map +1 -0
- package/dist/protocols/hls-live/index.d.ts +4 -0
- package/dist/protocols/hls-live/index.d.ts.map +1 -0
- package/dist/protocols/hls-live/index.js +309 -0
- package/dist/protocols/hls-live/index.js.map +1 -0
- package/dist/protocols/live-shared.d.ts +21 -0
- package/dist/protocols/live-shared.d.ts.map +1 -0
- package/dist/protocols/live-shared.js +32 -0
- package/dist/protocols/live-shared.js.map +1 -0
- package/dist/stages/abr/index.d.ts +16 -0
- package/dist/stages/abr/index.d.ts.map +1 -0
- package/dist/stages/abr/index.js +176 -0
- package/dist/stages/abr/index.js.map +1 -0
- package/dist/stages/abr-cap-size/index.d.ts +8 -0
- package/dist/stages/abr-cap-size/index.d.ts.map +1 -0
- package/dist/stages/abr-cap-size/index.js +21 -0
- package/dist/stages/abr-cap-size/index.js.map +1 -0
- package/dist/stages/abr-persist/index.d.ts +8 -0
- package/dist/stages/abr-persist/index.d.ts.map +1 -0
- package/dist/stages/abr-persist/index.js +44 -0
- package/dist/stages/abr-persist/index.js.map +1 -0
- package/dist/stages/aes-128/index.d.ts +15 -0
- package/dist/stages/aes-128/index.d.ts.map +1 -0
- package/dist/stages/aes-128/index.js +78 -0
- package/dist/stages/aes-128/index.js.map +1 -0
- package/dist/stages/alt-audio/index.d.ts +4 -0
- package/dist/stages/alt-audio/index.d.ts.map +1 -0
- package/dist/stages/alt-audio/index.js +90 -0
- package/dist/stages/alt-audio/index.js.map +1 -0
- package/dist/stages/cmaf-timing/index.d.ts +3 -0
- package/dist/stages/cmaf-timing/index.d.ts.map +1 -0
- package/dist/stages/cmaf-timing/index.js +56 -0
- package/dist/stages/cmaf-timing/index.js.map +1 -0
- package/dist/stages/cmcd/index.d.ts +22 -0
- package/dist/stages/cmcd/index.d.ts.map +1 -0
- package/dist/stages/cmcd/index.js +92 -0
- package/dist/stages/cmcd/index.js.map +1 -0
- package/dist/stages/codec-probe/index.d.ts +9 -0
- package/dist/stages/codec-probe/index.d.ts.map +1 -0
- package/dist/stages/codec-probe/index.js +68 -0
- package/dist/stages/codec-probe/index.js.map +1 -0
- package/dist/stages/codec-switch/index.d.ts +6 -0
- package/dist/stages/codec-switch/index.d.ts.map +1 -0
- package/dist/stages/codec-switch/index.js +59 -0
- package/dist/stages/codec-switch/index.js.map +1 -0
- package/dist/stages/content-steering/index.d.ts +4 -0
- package/dist/stages/content-steering/index.d.ts.map +1 -0
- package/dist/stages/content-steering/index.js +174 -0
- package/dist/stages/content-steering/index.js.map +1 -0
- package/dist/stages/drm-shared.d.ts +46 -0
- package/dist/stages/drm-shared.d.ts.map +1 -0
- package/dist/stages/drm-shared.js +28 -0
- package/dist/stages/drm-shared.js.map +1 -0
- package/dist/stages/eme-cenc/index.d.ts +12 -0
- package/dist/stages/eme-cenc/index.d.ts.map +1 -0
- package/dist/stages/eme-cenc/index.js +53 -0
- package/dist/stages/eme-cenc/index.js.map +1 -0
- package/dist/stages/eme-core/index.d.ts +29 -0
- package/dist/stages/eme-core/index.d.ts.map +1 -0
- package/dist/stages/eme-core/index.js +244 -0
- package/dist/stages/eme-core/index.js.map +1 -0
- package/dist/stages/eme-fairplay/index.d.ts +20 -0
- package/dist/stages/eme-fairplay/index.d.ts.map +1 -0
- package/dist/stages/eme-fairplay/index.js +59 -0
- package/dist/stages/eme-fairplay/index.js.map +1 -0
- package/dist/stages/meta-id3/index.d.ts +14 -0
- package/dist/stages/meta-id3/index.d.ts.map +1 -0
- package/dist/stages/meta-id3/index.js +30 -0
- package/dist/stages/meta-id3/index.js.map +1 -0
- package/dist/stages/mp4-box/index.d.ts +3 -0
- package/dist/stages/mp4-box/index.d.ts.map +1 -0
- package/dist/stages/mp4-box/index.js +19 -0
- package/dist/stages/mp4-box/index.js.map +1 -0
- package/dist/stages/nal-scan/index.d.ts +3 -0
- package/dist/stages/nal-scan/index.d.ts.map +1 -0
- package/dist/stages/nal-scan/index.js +123 -0
- package/dist/stages/nal-scan/index.js.map +1 -0
- package/dist/stages/pdt/index.d.ts +14 -0
- package/dist/stages/pdt/index.d.ts.map +1 -0
- package/dist/stages/pdt/index.js +34 -0
- package/dist/stages/pdt/index.js.map +1 -0
- package/dist/stages/recovery/index.d.ts +16 -0
- package/dist/stages/recovery/index.d.ts.map +1 -0
- package/dist/stages/recovery/index.js +270 -0
- package/dist/stages/recovery/index.js.map +1 -0
- package/dist/stages/text-cea608/decode.d.ts +44 -0
- package/dist/stages/text-cea608/decode.d.ts.map +1 -0
- package/dist/stages/text-cea608/decode.js +225 -0
- package/dist/stages/text-cea608/decode.js.map +1 -0
- package/dist/stages/text-cea608/index.d.ts +3 -0
- package/dist/stages/text-cea608/index.d.ts.map +1 -0
- package/dist/stages/text-cea608/index.js +84 -0
- package/dist/stages/text-cea608/index.js.map +1 -0
- package/dist/stages/text-webvtt/index.d.ts +3 -0
- package/dist/stages/text-webvtt/index.d.ts.map +1 -0
- package/dist/stages/text-webvtt/index.js +82 -0
- package/dist/stages/text-webvtt/index.js.map +1 -0
- package/dist/stages/text-webvtt/parse.d.ts +19 -0
- package/dist/stages/text-webvtt/parse.d.ts.map +1 -0
- package/dist/stages/text-webvtt/parse.js +62 -0
- package/dist/stages/text-webvtt/parse.js.map +1 -0
- package/dist/stages/text-webvtt-segmented/index.d.ts +5 -0
- package/dist/stages/text-webvtt-segmented/index.d.ts.map +1 -0
- package/dist/stages/text-webvtt-segmented/index.js +63 -0
- package/dist/stages/text-webvtt-segmented/index.js.map +1 -0
- package/dist/stages/thumbnails/index.d.ts +34 -0
- package/dist/stages/thumbnails/index.d.ts.map +1 -0
- package/dist/stages/thumbnails/index.js +58 -0
- package/dist/stages/thumbnails/index.js.map +1 -0
- package/dist/types/error.d.ts +33 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +7 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/facade.d.ts +104 -0
- package/dist/types/facade.d.ts.map +1 -0
- package/dist/types/facade.js +2 -0
- package/dist/types/facade.js.map +1 -0
- package/dist/types/ir.d.ts +238 -0
- package/dist/types/ir.d.ts.map +1 -0
- package/dist/types/ir.js +7 -0
- package/dist/types/ir.js.map +1 -0
- package/dist/types/kernel.d.ts +217 -0
- package/dist/types/kernel.d.ts.map +1 -0
- package/dist/types/kernel.js +2 -0
- package/dist/types/kernel.js.map +1 -0
- package/dist/types/messages.d.ts +288 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/quality.d.ts +108 -0
- package/dist/types/quality.d.ts.map +1 -0
- package/dist/types/quality.js +2 -0
- package/dist/types/quality.js.map +1 -0
- package/dist/types/sink.d.ts +27 -0
- package/dist/types/sink.d.ts.map +1 -0
- package/dist/types/sink.js +2 -0
- package/dist/types/sink.js.map +1 -0
- package/dist/types/stage.d.ts +139 -0
- package/dist/types/stage.d.ts.map +1 -0
- package/dist/types/stage.js +2 -0
- package/dist/types/stage.js.map +1 -0
- package/package.json +132 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { mergePlaylist, parseMediaPlaylist } from '../hls-cmaf/parse.js';
|
|
2
|
+
import { registerLiveNamespace } from '../live-shared.js';
|
|
3
|
+
const REFRESH_TOKEN = 'hls:live:refresh';
|
|
4
|
+
const TICK_TOKEN = 'hls-live:reload';
|
|
5
|
+
const INITIAL = {
|
|
6
|
+
manifestUrl: null,
|
|
7
|
+
target: null,
|
|
8
|
+
companions: [],
|
|
9
|
+
round: 0,
|
|
10
|
+
tickPending: false,
|
|
11
|
+
inflight: null,
|
|
12
|
+
lastEndSeq: -1,
|
|
13
|
+
awaitingTarget: false,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A two-hour DVR playlist is tens of kilobytes; reloading four of them every
|
|
17
|
+
* target duration saturates a slow link. The audio and text companions keep
|
|
18
|
+
* the full cadence because playback consumes them; the other video rungs
|
|
19
|
+
* only need to be fresh enough for a switch, which reloads the new target
|
|
20
|
+
* at once anyway.
|
|
21
|
+
*/
|
|
22
|
+
const LADDER_EVERY = 3;
|
|
23
|
+
/**
|
|
24
|
+
* Every reload names its rendition in the token, the target's included. A
|
|
25
|
+
* response is merged into the rendition it was fetched for, never into
|
|
26
|
+
* whichever rendition is the target when it lands: a switch while a
|
|
27
|
+
* reload is in flight would otherwise file one rendition's segment URLs
|
|
28
|
+
* under another, and the scheduler would then append the wrong bytes under
|
|
29
|
+
* a matching rendition id, which no init guard can catch.
|
|
30
|
+
*/
|
|
31
|
+
function refreshToken(renditionId) {
|
|
32
|
+
return `${REFRESH_TOKEN}:${renditionId}`;
|
|
33
|
+
}
|
|
34
|
+
function renditionOfToken(token) {
|
|
35
|
+
return token.startsWith(`${REFRESH_TOKEN}:`) ? token.slice(REFRESH_TOKEN.length + 1) : null;
|
|
36
|
+
}
|
|
37
|
+
function findRendition(presentation, renditionId) {
|
|
38
|
+
for (const period of presentation.periods) {
|
|
39
|
+
for (const track of period.tracks) {
|
|
40
|
+
for (const rendition of track.renditions) {
|
|
41
|
+
if (rendition.id === renditionId)
|
|
42
|
+
return rendition;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The active tracks' playlists other than the window rendition's: every
|
|
50
|
+
* other video rendition, the audio group rendition, a segmented subtitle
|
|
51
|
+
* playlist. The whole video ladder reloads because a switch can only land
|
|
52
|
+
* on a rendition whose playlist reaches the playhead; one left at its
|
|
53
|
+
* startup window can never be scheduled from, so the switch never happens.
|
|
54
|
+
* Renditions without a playlist of their own (muxed audio, a text track in
|
|
55
|
+
* a single file) need no reload.
|
|
56
|
+
*/
|
|
57
|
+
function companionTargets(presentation, kernel, windowRenditionId) {
|
|
58
|
+
const activeIds = new Set(['video', 'audio', 'text']
|
|
59
|
+
.map((contentType) => kernel.tracks.active.get(contentType))
|
|
60
|
+
.filter((id) => id !== undefined));
|
|
61
|
+
const out = [];
|
|
62
|
+
for (const period of presentation.periods) {
|
|
63
|
+
for (const track of period.tracks) {
|
|
64
|
+
if (!activeIds.has(track.id))
|
|
65
|
+
continue;
|
|
66
|
+
for (const rendition of track.renditions) {
|
|
67
|
+
if (rendition.id === windowRenditionId || rendition.playlistUrl === undefined)
|
|
68
|
+
continue;
|
|
69
|
+
out.push({
|
|
70
|
+
url: rendition.playlistUrl,
|
|
71
|
+
renditionId: rendition.id,
|
|
72
|
+
ladder: track.contentType === 'video',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/** Loops a message back into the bus through a zero-delay schedule effect. */
|
|
80
|
+
function feed(message) {
|
|
81
|
+
// biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
|
|
82
|
+
return { kind: 'schedule', token: 'hls-live:loopback', delayMs: 0, then: message };
|
|
83
|
+
}
|
|
84
|
+
function tick(delaySeconds) {
|
|
85
|
+
return {
|
|
86
|
+
kind: 'schedule',
|
|
87
|
+
token: TICK_TOKEN,
|
|
88
|
+
delayMs: Math.max(500, delaySeconds * 1000),
|
|
89
|
+
// biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
|
|
90
|
+
then: { type: 'TICK', token: TICK_TOKEN },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The rendition whose playlist drives the live window: the active video
|
|
95
|
+
* rendition, else the first with segments. Video leads, but an audio-only
|
|
96
|
+
* presentation (a radio or packed-audio DVR stream) has no video track, so
|
|
97
|
+
* audio drives the window there.
|
|
98
|
+
*/
|
|
99
|
+
function windowRendition(presentation, kernel) {
|
|
100
|
+
let fallback = null;
|
|
101
|
+
for (const contentType of ['video', 'audio']) {
|
|
102
|
+
for (const period of presentation.periods) {
|
|
103
|
+
for (const track of period.tracks) {
|
|
104
|
+
if (track.contentType !== contentType)
|
|
105
|
+
continue;
|
|
106
|
+
for (const rendition of track.renditions) {
|
|
107
|
+
if (!Array.isArray(rendition.segments) || rendition.segments.length === 0)
|
|
108
|
+
continue;
|
|
109
|
+
if (rendition.id === kernel.quality.active)
|
|
110
|
+
return rendition;
|
|
111
|
+
fallback = fallback ?? rendition;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (fallback !== null)
|
|
116
|
+
return fallback;
|
|
117
|
+
}
|
|
118
|
+
return fallback;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The window fact for the rendition's current segment list, or null when
|
|
122
|
+
* the kernel already holds exactly that window: every companion reload
|
|
123
|
+
* feeds a MANIFEST_LOADED, and a window that has not moved is not news.
|
|
124
|
+
*/
|
|
125
|
+
function windowFact(presentation, rendition, kernel) {
|
|
126
|
+
const segments = rendition.segments;
|
|
127
|
+
if (!Array.isArray(segments) || segments.length === 0)
|
|
128
|
+
return null;
|
|
129
|
+
const first = segments[0];
|
|
130
|
+
const last = segments[segments.length - 1];
|
|
131
|
+
if (first === undefined || last === undefined)
|
|
132
|
+
return null;
|
|
133
|
+
const end = last.start + last.duration;
|
|
134
|
+
const holdBack = presentation.live?.holdBack ?? 3 * (presentation.live?.updatePeriod ?? last.duration);
|
|
135
|
+
const start = first.start;
|
|
136
|
+
const edge = Math.max(start, end - holdBack);
|
|
137
|
+
const known = kernel.live;
|
|
138
|
+
if (known !== null &&
|
|
139
|
+
known.span.start === start &&
|
|
140
|
+
known.span.end === end &&
|
|
141
|
+
known.edge === edge) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return feed({ type: 'LIVE_WINDOW_CHANGED', start, end, edge });
|
|
145
|
+
}
|
|
146
|
+
/** The playlist URL a rendition's reload resolves against. */
|
|
147
|
+
function playlistUrlFor(presentation, renditionId, target) {
|
|
148
|
+
const rendition = findRendition(presentation, renditionId);
|
|
149
|
+
if (rendition?.playlistUrl !== undefined)
|
|
150
|
+
return rendition.playlistUrl;
|
|
151
|
+
// A bare media-playlist source: the rendition has no playlist of its own
|
|
152
|
+
// and the manifest itself is reloaded as the target.
|
|
153
|
+
return target !== null && target.renditionId === renditionId ? target.url : null;
|
|
154
|
+
}
|
|
155
|
+
const reduceHlsLive = (slice, msg, kernel) => {
|
|
156
|
+
const state = slice ?? INITIAL;
|
|
157
|
+
if (msg.type === 'LOAD')
|
|
158
|
+
return [{ ...INITIAL, manifestUrl: msg.url }, []];
|
|
159
|
+
if (msg.type === 'UNLOAD' || msg.type === 'DETACH')
|
|
160
|
+
return [INITIAL, []];
|
|
161
|
+
if (msg.type === 'MANIFEST_LOADED') {
|
|
162
|
+
if (!msg.presentation.isLive) {
|
|
163
|
+
return [{ ...state, target: null, companions: [], inflight: null }, []];
|
|
164
|
+
}
|
|
165
|
+
const rendition = windowRendition(msg.presentation, kernel);
|
|
166
|
+
const effects = [];
|
|
167
|
+
// The reload target: the rendition's own playlist when it has one, the
|
|
168
|
+
// manifest itself for a bare media-playlist source.
|
|
169
|
+
const url = rendition?.playlistUrl ?? state.manifestUrl;
|
|
170
|
+
const target = url !== null && rendition !== null
|
|
171
|
+
? { url, renditionId: rendition.id, ladder: false }
|
|
172
|
+
: state.target;
|
|
173
|
+
const companions = companionTargets(msg.presentation, kernel, rendition?.id ?? null);
|
|
174
|
+
const switched = state.target !== null && target !== null && target.renditionId !== state.target.renditionId;
|
|
175
|
+
let awaitingTarget = state.awaitingTarget;
|
|
176
|
+
let inflight = state.inflight;
|
|
177
|
+
if (switched && target !== null) {
|
|
178
|
+
// A quality switch moved the window onto a playlist last fetched at
|
|
179
|
+
// startup. Reload it now and hold the window until it lands. A reload
|
|
180
|
+
// of that very rendition already in flight serves the same purpose.
|
|
181
|
+
if (inflight !== target.renditionId) {
|
|
182
|
+
effects.push({ kind: 'fetch', token: refreshToken(target.renditionId), url: target.url });
|
|
183
|
+
inflight = target.renditionId;
|
|
184
|
+
}
|
|
185
|
+
awaitingTarget = true;
|
|
186
|
+
}
|
|
187
|
+
else if (!awaitingTarget && rendition !== null) {
|
|
188
|
+
const window = windowFact(msg.presentation, rendition, kernel);
|
|
189
|
+
if (window !== null)
|
|
190
|
+
effects.push(window);
|
|
191
|
+
}
|
|
192
|
+
// Only a dead loop (startup, or after ENDLIST) starts one.
|
|
193
|
+
let tickPending = state.tickPending;
|
|
194
|
+
if (!tickPending && inflight === null && target !== null) {
|
|
195
|
+
effects.push(tick(msg.presentation.live?.updatePeriod ?? 4));
|
|
196
|
+
tickPending = true;
|
|
197
|
+
}
|
|
198
|
+
return [{ ...state, target, companions, tickPending, inflight, awaitingTarget }, effects];
|
|
199
|
+
}
|
|
200
|
+
if (msg.type === 'TICK' && msg.token === TICK_TOKEN) {
|
|
201
|
+
if (state.target === null || kernel.presentation?.isLive !== true) {
|
|
202
|
+
return [{ ...state, tickPending: false, inflight: null }, []];
|
|
203
|
+
}
|
|
204
|
+
const effects = [];
|
|
205
|
+
let inflight = state.inflight;
|
|
206
|
+
// One target reload at a time: a second in flight would answer twice
|
|
207
|
+
// and every answer schedules the next tick, forking the loop.
|
|
208
|
+
if (inflight !== state.target.renditionId) {
|
|
209
|
+
effects.push({
|
|
210
|
+
kind: 'fetch',
|
|
211
|
+
token: refreshToken(state.target.renditionId),
|
|
212
|
+
url: state.target.url,
|
|
213
|
+
});
|
|
214
|
+
inflight = state.target.renditionId;
|
|
215
|
+
}
|
|
216
|
+
for (const companion of state.companions) {
|
|
217
|
+
if (companion.ladder && state.round % LADDER_EVERY !== 0)
|
|
218
|
+
continue;
|
|
219
|
+
effects.push({
|
|
220
|
+
kind: 'fetch',
|
|
221
|
+
token: refreshToken(companion.renditionId),
|
|
222
|
+
url: companion.url,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
// The target's answer schedules the next tick.
|
|
226
|
+
return [{ ...state, round: state.round + 1, tickPending: false, inflight }, effects];
|
|
227
|
+
}
|
|
228
|
+
if (msg.type === 'SEGMENT_FAILED') {
|
|
229
|
+
const renditionId = renditionOfToken(msg.trackId);
|
|
230
|
+
if (renditionId === null)
|
|
231
|
+
return [state, []];
|
|
232
|
+
// A failed companion reload is nothing; a failed target reload is not
|
|
233
|
+
// fatal either: try again soon rather than let the loop die.
|
|
234
|
+
if (state.target === null || renditionId !== state.target.renditionId)
|
|
235
|
+
return [state, []];
|
|
236
|
+
if (state.tickPending)
|
|
237
|
+
return [{ ...state, inflight: null }, []];
|
|
238
|
+
return [{ ...state, inflight: null, tickPending: true }, [tick(2)]];
|
|
239
|
+
}
|
|
240
|
+
if (msg.type === 'SEGMENT_LOADED') {
|
|
241
|
+
const renditionId = renditionOfToken(msg.trackId);
|
|
242
|
+
if (renditionId === null || kernel.presentation === null)
|
|
243
|
+
return [state, []];
|
|
244
|
+
const isTarget = state.target !== null && renditionId === state.target.renditionId;
|
|
245
|
+
const url = playlistUrlFor(kernel.presentation, renditionId, state.target);
|
|
246
|
+
if (url === null)
|
|
247
|
+
return [state, []];
|
|
248
|
+
const text = new TextDecoder().decode(msg.bytes);
|
|
249
|
+
const media = parseMediaPlaylist(text, url);
|
|
250
|
+
if (media.playlist === null) {
|
|
251
|
+
// A bad reload is not fatal: try again on the same cadence.
|
|
252
|
+
if (!isTarget)
|
|
253
|
+
return [state, []];
|
|
254
|
+
if (state.tickPending)
|
|
255
|
+
return [{ ...state, inflight: null }, []];
|
|
256
|
+
return [{ ...state, inflight: null, tickPending: true }, [tick(2)]];
|
|
257
|
+
}
|
|
258
|
+
// Always merge, never re-parse: mergePlaylist rebases the new window onto
|
|
259
|
+
// the running timeline, which a fresh parse of a bare media playlist would
|
|
260
|
+
// throw away, stalling live once the first window drains.
|
|
261
|
+
const refreshed = mergePlaylist(kernel.presentation, renditionId, media.playlist);
|
|
262
|
+
const effects = [
|
|
263
|
+
feed({
|
|
264
|
+
type: 'PLAYLIST_REFRESHED',
|
|
265
|
+
trackId: renditionId,
|
|
266
|
+
renditionId,
|
|
267
|
+
mediaSequence: media.playlist.mediaSequence,
|
|
268
|
+
segments: media.playlist.segments,
|
|
269
|
+
}),
|
|
270
|
+
feed({ type: 'MANIFEST_LOADED', presentation: refreshed }),
|
|
271
|
+
];
|
|
272
|
+
if (!isTarget) {
|
|
273
|
+
// A companion, or the target of a moment ago: merged in, nothing
|
|
274
|
+
// else. The window and the cadence belong to the target's reload.
|
|
275
|
+
return [state, effects];
|
|
276
|
+
}
|
|
277
|
+
const lastSegment = media.playlist.segments[media.playlist.segments.length - 1];
|
|
278
|
+
const endSeq = lastSegment?.seq ?? -1;
|
|
279
|
+
const changed = endSeq !== state.lastEndSeq;
|
|
280
|
+
const cadence = media.playlist.targetDuration || 4;
|
|
281
|
+
// RFC 8216: full cadence after a changed reload, half after an
|
|
282
|
+
// unchanged one. A switch's reload answers while the regular tick is
|
|
283
|
+
// still pending: that tick carries on, this answer adds none. The
|
|
284
|
+
// loop dies with ENDLIST.
|
|
285
|
+
let tickPending = state.tickPending;
|
|
286
|
+
if (!media.playlist.endlist && !tickPending) {
|
|
287
|
+
effects.push(tick(changed ? cadence : cadence / 2));
|
|
288
|
+
tickPending = true;
|
|
289
|
+
}
|
|
290
|
+
return [
|
|
291
|
+
{ ...state, lastEndSeq: endSeq, tickPending, inflight: null, awaitingTarget: false },
|
|
292
|
+
effects,
|
|
293
|
+
];
|
|
294
|
+
}
|
|
295
|
+
return [state, []];
|
|
296
|
+
};
|
|
297
|
+
/** The stage factory. Requires hls-cmaf; the loader enforces it. */
|
|
298
|
+
export default function hlsLive() {
|
|
299
|
+
return {
|
|
300
|
+
name: 'hls-live',
|
|
301
|
+
provides: ['hls-live'],
|
|
302
|
+
requires: ['hls-cmaf'],
|
|
303
|
+
install(ctx) {
|
|
304
|
+
ctx.reduce('hls-live', reduceHlsLive);
|
|
305
|
+
registerLiveNamespace(ctx);
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocols/hls-live/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The engine.live surface both live adapters register. Reads come from
|
|
3
|
+
* kernel state, so the two implementations are identical by construction
|
|
4
|
+
* and loading both adapters is harmless.
|
|
5
|
+
*/
|
|
6
|
+
import type { StageContext } from '../types/stage.js';
|
|
7
|
+
declare module '../index.js' {
|
|
8
|
+
interface MatteboxNamespaces {
|
|
9
|
+
live: LiveApi;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export interface LiveApi {
|
|
13
|
+
/** Where seekToEdge lands, in presentation time, or null before the first window. */
|
|
14
|
+
readonly edge: number | null;
|
|
15
|
+
/** Seconds between the availability end and the playhead, or null. */
|
|
16
|
+
readonly latency: number | null;
|
|
17
|
+
readonly atEdge: boolean;
|
|
18
|
+
seekToEdge(): void;
|
|
19
|
+
}
|
|
20
|
+
export declare function registerLiveNamespace(ctx: StageContext): void;
|
|
21
|
+
//# sourceMappingURL=live-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-shared.d.ts","sourceRoot":"","sources":["../../src/protocols/live-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,kBAAkB;QAC1B,IAAI,EAAE,OAAO,CAAC;KACf;CACF;AAED,MAAM,WAAW,OAAO;IACtB,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAyB7D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** How far behind the edge still counts as at it, in seconds. */
|
|
2
|
+
const AT_EDGE_SLACK = 2;
|
|
3
|
+
export function registerLiveNamespace(ctx) {
|
|
4
|
+
const api = {
|
|
5
|
+
get edge() {
|
|
6
|
+
return ctx.getState().live?.edge ?? null;
|
|
7
|
+
},
|
|
8
|
+
get latency() {
|
|
9
|
+
const state = ctx.getState();
|
|
10
|
+
if (state.live === null)
|
|
11
|
+
return null;
|
|
12
|
+
return state.live.span.end - state.playback.currentTime;
|
|
13
|
+
},
|
|
14
|
+
get atEdge() {
|
|
15
|
+
const state = ctx.getState();
|
|
16
|
+
if (state.live === null)
|
|
17
|
+
return false;
|
|
18
|
+
return state.playback.currentTime >= state.live.edge - AT_EDGE_SLACK;
|
|
19
|
+
},
|
|
20
|
+
seekToEdge() {
|
|
21
|
+
ctx.dispatch({ type: 'SEEK_TO_LIVE_EDGE' });
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
try {
|
|
25
|
+
ctx.registerNamespace('live', api);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// The other live adapter registered first. Both surfaces derive from
|
|
29
|
+
// the same kernel state, so the existing one already answers.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=live-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-shared.js","sourceRoot":"","sources":["../../src/protocols/live-shared.ts"],"names":[],"mappings":"AAsBA,iEAAiE;AACjE,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,UAAU,qBAAqB,CAAC,GAAiB;IACrD,MAAM,GAAG,GAAY;QACnB,IAAI,IAAI;YACN,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO;YACT,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM;YACR,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtC,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QACvE,CAAC;QACD,UAAU;YACR,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;IACF,IAAI,CAAC;QACH,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,8DAA8D;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Stage } from '../../types/stage.js';
|
|
2
|
+
export interface AbrOptions {
|
|
3
|
+
/** Fraction of the estimate a rendition may consume. */
|
|
4
|
+
readonly safetyFactor?: number;
|
|
5
|
+
/** Forward buffer required before switching up, in seconds. */
|
|
6
|
+
readonly upBufferSeconds?: number;
|
|
7
|
+
/** Forward buffer below which any sustainable down-switch happens immediately, in seconds. */
|
|
8
|
+
readonly downBufferSeconds?: number;
|
|
9
|
+
/** Fast-estimate fraction of the active bitrate that triggers the emergency floor. */
|
|
10
|
+
readonly emergencyFactor?: number;
|
|
11
|
+
/** Fast-estimate multiple of the emergency cap that releases it. */
|
|
12
|
+
readonly recoveryFactor?: number;
|
|
13
|
+
}
|
|
14
|
+
/** The stage factory. One chooser, one emergency constraint source. */
|
|
15
|
+
export default function abr(options?: AbrOptions): Stage;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/abr/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,8FAA8F;IAC9F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,sFAAsF;IACtF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AA8JD,uEAAuE;AACvE,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,CAavD"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive bitrate as a stage, not kernel. It registers one chooser
|
|
3
|
+
* consulted at arbitration step 5 and one constraint source for
|
|
4
|
+
* emergencies; it never mutates another source's constraints and playback
|
|
5
|
+
* works identically without it, at the lowest permitted rendition.
|
|
6
|
+
*
|
|
7
|
+
* The chooser is a pure function of its arguments: every input comes from
|
|
8
|
+
* kernel telemetry, so replaying a trace through the same composition
|
|
9
|
+
* reproduces every decision. The emergency path lives in a slice reducer
|
|
10
|
+
* for the same reason.
|
|
11
|
+
*/
|
|
12
|
+
import { canSwitchTo } from '../../kernel/rendition-select.js';
|
|
13
|
+
const DEFAULTS = {
|
|
14
|
+
safetyFactor: 0.7,
|
|
15
|
+
upBufferSeconds: 8,
|
|
16
|
+
downBufferSeconds: 4,
|
|
17
|
+
emergencyFactor: 0.5,
|
|
18
|
+
recoveryFactor: 2,
|
|
19
|
+
};
|
|
20
|
+
/** The conservative estimate: the minimum of the slow and fast EWMAs. */
|
|
21
|
+
function estimateBps(telemetry) {
|
|
22
|
+
const slow = telemetry.throughputEwma;
|
|
23
|
+
const fast = telemetry.throughputFastEwma ?? slow;
|
|
24
|
+
if (slow === 0)
|
|
25
|
+
return fast;
|
|
26
|
+
if (fast === 0)
|
|
27
|
+
return slow;
|
|
28
|
+
return Math.min(slow, fast);
|
|
29
|
+
}
|
|
30
|
+
function choose(allowed, telemetry, options) {
|
|
31
|
+
const sorted = [...allowed].sort((a, b) => a.bitrate - b.bitrate);
|
|
32
|
+
const lowestRendition = sorted[0];
|
|
33
|
+
const current = allowed.find((r) => r.id === telemetry.current) ?? null;
|
|
34
|
+
const estimate = estimateBps(telemetry);
|
|
35
|
+
if (estimate === 0)
|
|
36
|
+
return (current ?? lowestRendition).id;
|
|
37
|
+
// The highest rendition the estimate sustains with headroom.
|
|
38
|
+
let best = lowestRendition;
|
|
39
|
+
for (const candidate of sorted) {
|
|
40
|
+
if (candidate.bitrate <= estimate * options.safetyFactor)
|
|
41
|
+
best = candidate;
|
|
42
|
+
}
|
|
43
|
+
if (current === null)
|
|
44
|
+
return best.id;
|
|
45
|
+
if (best.id === current.id)
|
|
46
|
+
return current.id;
|
|
47
|
+
const buffer = telemetry.bufferAhead ?? 0;
|
|
48
|
+
// The switch policy in force: codec-switch's when loaded, the kernel
|
|
49
|
+
// default otherwise. abr imports neither codec-switch nor knows which.
|
|
50
|
+
const policy = telemetry.canSwitchTo ?? canSwitchTo;
|
|
51
|
+
if (best.bitrate > current.bitrate) {
|
|
52
|
+
// Up only on a comfortable buffer, and never through a reloading switch.
|
|
53
|
+
if (buffer < options.upBufferSeconds)
|
|
54
|
+
return current.id;
|
|
55
|
+
if (policy(current, best) === 'reload')
|
|
56
|
+
return current.id;
|
|
57
|
+
return best.id;
|
|
58
|
+
}
|
|
59
|
+
// Down: aggressive on a thin buffer; on a healthy one only when the
|
|
60
|
+
// current rendition is genuinely unsustainable.
|
|
61
|
+
if (buffer < options.downBufferSeconds || current.bitrate > estimate) {
|
|
62
|
+
if (policy(current, best) === 'reload')
|
|
63
|
+
return current.id;
|
|
64
|
+
return best.id;
|
|
65
|
+
}
|
|
66
|
+
return current.id;
|
|
67
|
+
}
|
|
68
|
+
const INITIAL = { emergencyCap: null };
|
|
69
|
+
/** Loops a command back into the bus through a zero-delay schedule effect. */
|
|
70
|
+
function feed(message) {
|
|
71
|
+
// biome-ignore lint/suspicious/noThenProperty: `then` is the schedule effect's field name from the message taxonomy
|
|
72
|
+
return { kind: 'schedule', token: 'abr:emergency', delayMs: 0, then: message };
|
|
73
|
+
}
|
|
74
|
+
function activeBitrate(kernel) {
|
|
75
|
+
if (kernel.presentation === null || kernel.quality.active === null)
|
|
76
|
+
return null;
|
|
77
|
+
for (const period of kernel.presentation.periods) {
|
|
78
|
+
for (const track of period.tracks) {
|
|
79
|
+
for (const rendition of track.renditions) {
|
|
80
|
+
if (rendition.id === kernel.quality.active)
|
|
81
|
+
return rendition.bitrate;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/** The track ABR steers: video where there is one, else audio. */
|
|
88
|
+
function leadTrack(kernel) {
|
|
89
|
+
return kernel.tracks.active.get('video') ?? kernel.tracks.active.get('audio');
|
|
90
|
+
}
|
|
91
|
+
function lowestBitrate(kernel) {
|
|
92
|
+
let lowest = Number.POSITIVE_INFINITY;
|
|
93
|
+
for (const period of kernel.presentation?.periods ?? []) {
|
|
94
|
+
for (const track of period.tracks) {
|
|
95
|
+
if (track.contentType !== 'video')
|
|
96
|
+
continue;
|
|
97
|
+
for (const rendition of track.renditions) {
|
|
98
|
+
lowest = Math.min(lowest, rendition.bitrate);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return Number.isFinite(lowest) ? lowest : 0;
|
|
103
|
+
}
|
|
104
|
+
/** Samples smaller than this are jitter-dominated; ignore them for emergencies. */
|
|
105
|
+
const MIN_SAMPLE_BYTES = 10_000;
|
|
106
|
+
function createEmergencyReducer(options) {
|
|
107
|
+
return (slice, msg, kernel) => {
|
|
108
|
+
const state = slice ?? INITIAL;
|
|
109
|
+
if (msg.type === 'UNLOAD' || msg.type === 'DETACH')
|
|
110
|
+
return [INITIAL, []];
|
|
111
|
+
// Sample-driven only: a collapse shows up in the samples, not the clock.
|
|
112
|
+
// The trigger is the raw sample, not the average: waiting for an EWMA to
|
|
113
|
+
// catch up means waiting several slow segments, which is exactly the
|
|
114
|
+
// stall the emergency exists to prevent. A one-off spike self-heals
|
|
115
|
+
// because release watches the fast average.
|
|
116
|
+
//
|
|
117
|
+
// Only a media segment of the active rendition's own track is a sample.
|
|
118
|
+
// A playlist reload, an init segment, or an audio segment beside a video
|
|
119
|
+
// rendition is a small transfer whose time is latency, not bandwidth:
|
|
120
|
+
// counted, a 50 KB playlist that takes 120 ms reads as a collapse to
|
|
121
|
+
// 3 Mbps under a 7 Mbps rendition, and the cap flaps on every reload.
|
|
122
|
+
let raw = null;
|
|
123
|
+
if (msg.type === 'THROUGHPUT_SAMPLE') {
|
|
124
|
+
raw = msg.bps;
|
|
125
|
+
}
|
|
126
|
+
else if (msg.type === 'SEGMENT_LOADED' &&
|
|
127
|
+
msg.seq >= 0 &&
|
|
128
|
+
msg.trackId === leadTrack(kernel) &&
|
|
129
|
+
msg.rtt > 0 &&
|
|
130
|
+
msg.size >= MIN_SAMPLE_BYTES) {
|
|
131
|
+
raw = (msg.size * 8000) / msg.rtt;
|
|
132
|
+
}
|
|
133
|
+
if (raw === null)
|
|
134
|
+
return [state, []];
|
|
135
|
+
if (state.emergencyCap === null) {
|
|
136
|
+
const bitrate = activeBitrate(kernel);
|
|
137
|
+
if (bitrate === null || bitrate === 0)
|
|
138
|
+
return [state, []];
|
|
139
|
+
if (raw >= bitrate * options.emergencyFactor)
|
|
140
|
+
return [state, []];
|
|
141
|
+
// Collapse: floor the selection at what the network still carries,
|
|
142
|
+
// as this stage's own source so nobody else's constraint is touched.
|
|
143
|
+
const cap = Math.max(raw, lowestBitrate(kernel));
|
|
144
|
+
return [
|
|
145
|
+
{ emergencyCap: cap },
|
|
146
|
+
[
|
|
147
|
+
feed({
|
|
148
|
+
type: 'CONSTRAIN',
|
|
149
|
+
source: 'abr-emergency',
|
|
150
|
+
constraint: { maxBitrate: cap },
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
if (kernel.stats.throughputFastEwma >= state.emergencyCap * options.recoveryFactor) {
|
|
156
|
+
return [INITIAL, [feed({ type: 'RELEASE_CONSTRAINT', source: 'abr-emergency' })]];
|
|
157
|
+
}
|
|
158
|
+
return [state, []];
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/** The stage factory. One chooser, one emergency constraint source. */
|
|
162
|
+
export default function abr(options) {
|
|
163
|
+
const resolved = { ...DEFAULTS, ...options };
|
|
164
|
+
return {
|
|
165
|
+
name: 'abr',
|
|
166
|
+
provides: ['abr'],
|
|
167
|
+
requires: ['scheduler', 'track-registry'],
|
|
168
|
+
install(ctx) {
|
|
169
|
+
ctx.registerChooser({
|
|
170
|
+
choose: (allowed, telemetry) => choose(allowed, telemetry, resolved),
|
|
171
|
+
});
|
|
172
|
+
ctx.reduce('abr', createEmergencyReducer(resolved));
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stages/abr/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAoB/D,MAAM,QAAQ,GAAyB;IACrC,YAAY,EAAE,GAAG;IACjB,eAAe,EAAE,CAAC;IAClB,iBAAiB,EAAE,CAAC;IACpB,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF,yEAAyE;AACzE,SAAS,WAAW,CAAC,SAAuB;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAClD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,MAAM,CACb,OAA6B,EAC7B,SAAuB,EACvB,OAA6B;IAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAc,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC;IAE3D,6DAA6D;IAC7D,IAAI,IAAI,GAAG,eAAe,CAAC;IAC3B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,OAAO,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY;YAAE,IAAI,GAAG,SAAS,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,EAAE,CAAC;IAE9C,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;IAC1C,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,IAAI,WAAW,CAAC;IACpD,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,yEAAyE;QACzE,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe;YAAE,OAAO,OAAO,CAAC,EAAE,CAAC;QACxD,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,oEAAoE;IACpE,gDAAgD;IAChD,IAAI,MAAM,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;QACrE,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,CAAC;AAOD,MAAM,OAAO,GAAa,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAEjD,8EAA8E;AAC9E,SAAS,IAAI,CAAC,OAAgB;IAC5B,oHAAoH;IACpH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM;oBAAE,OAAO,SAAS,CAAC,OAAO,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kEAAkE;AAClE,SAAS,SAAS,CAAC,MAA6B;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;gBAAE,SAAS;YAC5C,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,mFAAmF;AACnF,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,SAAS,sBAAsB,CAAC,OAA6B;IAC3D,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzE,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,oEAAoE;QACpE,4CAA4C;QAC5C,EAAE;QACF,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,qEAAqE;QACrE,sEAAsE;QACtE,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAChB,CAAC;aAAM,IACL,GAAG,CAAC,IAAI,KAAK,gBAAgB;YAC7B,GAAG,CAAC,GAAG,IAAI,CAAC;YACZ,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC;YACjC,GAAG,CAAC,GAAG,GAAG,CAAC;YACX,GAAG,CAAC,IAAI,IAAI,gBAAgB,EAC5B,CAAC;YACD,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QACpC,CAAC;QACD,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC;gBAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1D,IAAI,GAAG,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe;gBAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,mEAAmE;YACnE,qEAAqE;YACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,OAAO;gBACL,EAAE,YAAY,EAAE,GAAG,EAAE;gBACrB;oBACE,IAAI,CAAC;wBACH,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,eAAe;wBACvB,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;qBAChC,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACnF,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,OAAoB;IAC9C,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,QAAQ,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC;QACzC,OAAO,CAAC,GAAG;YACT,GAAG,CAAC,eAAe,CAAC;gBAClB,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;aACrE,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAiB,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The element-size cap from docs/08, verbatim: a ResizeObserver feeding one
|
|
3
|
+
* named constraint source. Its size is the litmus test for the constraint
|
|
4
|
+
* API; if this file grows, the API is wrong.
|
|
5
|
+
*/
|
|
6
|
+
import type { Stage } from '../../types/stage.js';
|
|
7
|
+
export default function abrCapSize(): Stage;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/abr-cap-size/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,UAAU,IAAI,KAAK,CAkB1C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default function abrCapSize() {
|
|
2
|
+
return {
|
|
3
|
+
name: 'abr-cap-size',
|
|
4
|
+
requires: ['rendition-select'],
|
|
5
|
+
install(ctx) {
|
|
6
|
+
const observer = new ResizeObserver(([entry]) => {
|
|
7
|
+
if (entry === undefined)
|
|
8
|
+
return;
|
|
9
|
+
const dpr = Math.min(globalThis.devicePixelRatio || 1, 2);
|
|
10
|
+
ctx.dispatch({
|
|
11
|
+
type: 'CONSTRAIN',
|
|
12
|
+
source: 'element-size',
|
|
13
|
+
constraint: { maxHeight: entry.contentRect.height * dpr },
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
observer.observe(ctx.element);
|
|
17
|
+
return () => observer.disconnect();
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stages/abr-cap-size/index.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,UAAU;IAChC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,CAAC,kBAAkB,CAAC;QAC9B,OAAO,CAAC,GAAG;YACT,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9C,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO;gBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1D,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,cAAc;oBACtB,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE;iBAC1D,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Stage } from '../../types/stage.js';
|
|
2
|
+
export interface AbrPersistStorage {
|
|
3
|
+
/** The remembered estimate in bits per second, or null for none. */
|
|
4
|
+
get(): number | null;
|
|
5
|
+
set(bps: number): void;
|
|
6
|
+
}
|
|
7
|
+
export default function abrPersist(storage: AbrPersistStorage): Stage;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stages/abr-persist/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAcD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,CAqCpE"}
|