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,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaSource lifecycle and the effect handlers that touch it. This is the
|
|
3
|
+
* boundary module: facts about the media pipeline enter the loop here, and
|
|
4
|
+
* buffer effects are executed here through per-buffer append queues.
|
|
5
|
+
*
|
|
6
|
+
* ManagedMediaSource is preferred where available (Safari): the OS can
|
|
7
|
+
* reclaim buffer under memory pressure, and some iOS paths require it.
|
|
8
|
+
* The blob-URL fallback revokes in the sourceopen handler, not on detach;
|
|
9
|
+
* revoking on detach is the classic leak.
|
|
10
|
+
*/
|
|
11
|
+
import type { SbId } from '../types/kernel.js';
|
|
12
|
+
import type { Fact, SegmentMeta } from '../types/messages.js';
|
|
13
|
+
import type { EffectRunner } from './effects.js';
|
|
14
|
+
export interface MseControllerOptions {
|
|
15
|
+
readonly absorb: (fact: Fact) => void;
|
|
16
|
+
/** 'auto' prefers srcObject; 'object-url' forces the blob fallback (used by tests). */
|
|
17
|
+
readonly attachMode?: 'auto' | 'object-url';
|
|
18
|
+
/** Feature-detects by default; false forces plain MediaSource even on Safari. */
|
|
19
|
+
readonly preferManaged?: boolean;
|
|
20
|
+
readonly backBufferSeconds?: number;
|
|
21
|
+
readonly maxEvictionPasses?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Reads a full type from a segment's bytes. When present, a
|
|
24
|
+
* createSourceBuffer effect whose type names no codecs (a bare media
|
|
25
|
+
* playlist) is held until the first append, and the buffer opens with the
|
|
26
|
+
* type read from those bytes. When it reads nothing, or when absent, the
|
|
27
|
+
* bare type is tried as given: some browsers accept it.
|
|
28
|
+
*/
|
|
29
|
+
readonly inferType?: (bytes: Uint8Array) => string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Rewrites segment bytes before they reach the SourceBuffer, for the
|
|
32
|
+
* transform pipeline (ts-transmux, packed-audio). Absent in every CMAF
|
|
33
|
+
* composition, so the direct-enqueue path below is byte-for-byte what it
|
|
34
|
+
* always was. When present, appends are serialized per buffer through a
|
|
35
|
+
* promise chain so an asynchronous transform (a Worker round-trip) never
|
|
36
|
+
* reorders segments.
|
|
37
|
+
*/
|
|
38
|
+
readonly appendTransform?: (data: Uint8Array, meta: SegmentMeta) => Uint8Array | Promise<Uint8Array>;
|
|
39
|
+
}
|
|
40
|
+
export interface MseDiagnostics {
|
|
41
|
+
readonly liveObjectUrls: number;
|
|
42
|
+
readonly liveListeners: number;
|
|
43
|
+
readonly sourceBuffers: number;
|
|
44
|
+
}
|
|
45
|
+
export interface MseController {
|
|
46
|
+
/** Docs-09 attach sequence. Throws when the element is already occupied. */
|
|
47
|
+
attach(el: HTMLMediaElement): void;
|
|
48
|
+
/** Docs-09 detach sequence. Idempotent and safe from an error state. */
|
|
49
|
+
detach(): void;
|
|
50
|
+
registerHandlers(runner: EffectRunner): void;
|
|
51
|
+
isManaged(): boolean;
|
|
52
|
+
readyState(): ReadyState | 'detached';
|
|
53
|
+
buffered(sbId: SbId): ReadonlyArray<{
|
|
54
|
+
start: number;
|
|
55
|
+
end: number;
|
|
56
|
+
}>;
|
|
57
|
+
diagnostics(): MseDiagnostics;
|
|
58
|
+
}
|
|
59
|
+
type ReadyState = MediaSource['readyState'];
|
|
60
|
+
export declare function createMseController(options: MseControllerOptions): MseController;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=mse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mse.d.ts","sourceRoot":"","sources":["../../src/kernel/mse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA2BjD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC5C,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,WAAW,KACd,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,wEAAwE;IACxE,MAAM,IAAI,IAAI,CAAC;IACf,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,SAAS,IAAI,OAAO,CAAC;IACrB,UAAU,IAAI,UAAU,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,WAAW,IAAI,cAAc,CAAC;CAC/B;AAED,KAAK,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAO5C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0ehF"}
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import { createAppendQueue } from './append-queue.js';
|
|
2
|
+
import { createEvictor } from './evictor.js';
|
|
3
|
+
function managedMediaSource() {
|
|
4
|
+
return globalThis.ManagedMediaSource;
|
|
5
|
+
}
|
|
6
|
+
// The boundary meta a media transform receives. A transmux step reads the
|
|
7
|
+
// content type (which the sbId names) to know which stream it is unwrapping,
|
|
8
|
+
// and the presentation start to align its baseMediaDecodeTime to the
|
|
9
|
+
// playlist timeline. Only referenced on the appendTransform path.
|
|
10
|
+
function appendMeta(sbId, start, renditionId, seq) {
|
|
11
|
+
const contentType = sbId === 'sb:audio' ? 'audio' : 'video';
|
|
12
|
+
return { trackId: sbId, renditionId, contentType, seq, start, duration: 0, isInit: seq < 0 };
|
|
13
|
+
}
|
|
14
|
+
/** Whether a SourceBuffer type names its codecs; a bare `video/mp4` does not. */
|
|
15
|
+
function declaresCodecs(type) {
|
|
16
|
+
return /codecs\s*=/i.test(type);
|
|
17
|
+
}
|
|
18
|
+
export function createMseController(options) {
|
|
19
|
+
const { absorb } = options;
|
|
20
|
+
const evictor = createEvictor({
|
|
21
|
+
...(options.backBufferSeconds !== undefined
|
|
22
|
+
? { backBufferSeconds: options.backBufferSeconds }
|
|
23
|
+
: {}),
|
|
24
|
+
...(options.maxEvictionPasses !== undefined ? { maxPasses: options.maxEvictionPasses } : {}),
|
|
25
|
+
});
|
|
26
|
+
let element = null;
|
|
27
|
+
let mediaSource = null;
|
|
28
|
+
let managed = false;
|
|
29
|
+
const buffers = new Map();
|
|
30
|
+
// Per-buffer append ordering when a transform pipeline is loaded.
|
|
31
|
+
const appendChains = new Map();
|
|
32
|
+
/** Buffers requested without codecs, waiting for their first bytes to be typed. */
|
|
33
|
+
const deferred = new Map();
|
|
34
|
+
let objectUrl = null;
|
|
35
|
+
let liveObjectUrls = 0;
|
|
36
|
+
let pendingEndOfStream = null;
|
|
37
|
+
let pendingDuration = null;
|
|
38
|
+
let pendingLiveRange = null;
|
|
39
|
+
let unobserveManaged = null;
|
|
40
|
+
// Every listener goes through these so detach can prove it removed them
|
|
41
|
+
// all; "the player leaks listeners per navigation" starts with one stray
|
|
42
|
+
// addEventListener.
|
|
43
|
+
const tracked = [];
|
|
44
|
+
function listen(target, type, fn) {
|
|
45
|
+
target.addEventListener(type, fn);
|
|
46
|
+
tracked.push({ target, type, fn });
|
|
47
|
+
}
|
|
48
|
+
function unlistenAll() {
|
|
49
|
+
for (const { target, type, fn } of tracked) {
|
|
50
|
+
target.removeEventListener(type, fn);
|
|
51
|
+
}
|
|
52
|
+
tracked.length = 0;
|
|
53
|
+
}
|
|
54
|
+
function currentTime() {
|
|
55
|
+
return element?.currentTime ?? 0;
|
|
56
|
+
}
|
|
57
|
+
function readyState() {
|
|
58
|
+
return mediaSource?.readyState ?? 'detached';
|
|
59
|
+
}
|
|
60
|
+
function allIdle() {
|
|
61
|
+
for (const { queue } of buffers.values()) {
|
|
62
|
+
if (!queue.idle())
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
/** endOfStream and duration assignment both throw while any buffer updates; run them at quiet points. */
|
|
68
|
+
function runDeferredGlobalOps() {
|
|
69
|
+
if (mediaSource === null || mediaSource.readyState !== 'open' || !allIdle())
|
|
70
|
+
return;
|
|
71
|
+
if (pendingDuration !== null) {
|
|
72
|
+
const seconds = pendingDuration;
|
|
73
|
+
pendingDuration = null;
|
|
74
|
+
try {
|
|
75
|
+
mediaSource.duration = seconds;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// The source closed between the check and the assignment; absorbed
|
|
79
|
+
// by the sourceclose fact.
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (pendingLiveRange !== null) {
|
|
83
|
+
const { start, end } = pendingLiveRange;
|
|
84
|
+
pendingLiveRange = null;
|
|
85
|
+
// Only meaningful with an infinite duration; the seekable attribute
|
|
86
|
+
// then reports this window instead of [0, buffered end], so native
|
|
87
|
+
// controls scrub the DVR span and clamp seeks into it.
|
|
88
|
+
const source = mediaSource;
|
|
89
|
+
if (typeof source.setLiveSeekableRange === 'function' && end > start && start >= 0) {
|
|
90
|
+
try {
|
|
91
|
+
source.setLiveSeekableRange(start, end);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Closed between the check and the call, or a browser without
|
|
95
|
+
// the method behind a feature flag; the next window retries.
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (pendingEndOfStream !== null) {
|
|
100
|
+
const reason = pendingEndOfStream;
|
|
101
|
+
pendingEndOfStream = null;
|
|
102
|
+
try {
|
|
103
|
+
if (reason === 'none') {
|
|
104
|
+
mediaSource.endOfStream();
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
mediaSource.endOfStream(reason);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Same race as above.
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function onQuota(sbId, attempt) {
|
|
116
|
+
absorb({ type: 'QUOTA_EXCEEDED', sbId });
|
|
117
|
+
const entry = buffers.get(sbId);
|
|
118
|
+
if (entry === undefined)
|
|
119
|
+
return;
|
|
120
|
+
// A pass that frees nothing (playhead at 0, no back-buffer yet) would
|
|
121
|
+
// leave the parked append waiting forever; skip forward to the first
|
|
122
|
+
// pass with something to remove.
|
|
123
|
+
let effective = attempt;
|
|
124
|
+
let plan = evictor.plan(entry.sb, currentTime(), effective);
|
|
125
|
+
while (plan !== null && plan.length === 0) {
|
|
126
|
+
effective += 1;
|
|
127
|
+
plan = evictor.plan(entry.sb, currentTime(), effective);
|
|
128
|
+
}
|
|
129
|
+
if (plan === null) {
|
|
130
|
+
// Escalation exhausted. Surface a fatal error instead of looping.
|
|
131
|
+
entry.queue.abort();
|
|
132
|
+
absorb({
|
|
133
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
134
|
+
sbId,
|
|
135
|
+
error: {
|
|
136
|
+
category: 'media',
|
|
137
|
+
code: 'MEDIA_QUOTA_EXCEEDED',
|
|
138
|
+
fatal: true,
|
|
139
|
+
recoverable: false,
|
|
140
|
+
context: { attempts: attempt },
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Front of the queue, ahead of the failed append, in plan order.
|
|
146
|
+
for (let i = plan.length - 1; i >= 0; i -= 1) {
|
|
147
|
+
const range = plan[i];
|
|
148
|
+
if (range === undefined)
|
|
149
|
+
continue;
|
|
150
|
+
entry.queue.enqueueFront({ op: 'remove', start: range.start, end: range.end });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function createQueue(sbId, sb) {
|
|
154
|
+
return createAppendQueue(sbId, sb, {
|
|
155
|
+
absorb,
|
|
156
|
+
onQuota,
|
|
157
|
+
onIdle: () => runDeferredGlobalOps(),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function trimAllBackBuffers() {
|
|
161
|
+
// ManagedMediaSource said streaming can stop; give memory back rather
|
|
162
|
+
// than waiting for quota pressure.
|
|
163
|
+
for (const [, entry] of buffers) {
|
|
164
|
+
const plan = evictor.plan(entry.sb, currentTime(), 1);
|
|
165
|
+
if (plan === null)
|
|
166
|
+
continue;
|
|
167
|
+
for (const range of plan) {
|
|
168
|
+
entry.queue.enqueue({ op: 'remove', start: range.start, end: range.end });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function attach(el) {
|
|
173
|
+
if (element !== null) {
|
|
174
|
+
throw Object.assign(new Error('already attached'), {
|
|
175
|
+
category: 'config',
|
|
176
|
+
code: 'CONFIG_ELEMENT_OCCUPIED',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (el.getAttribute('src') !== null || el.querySelector('source') !== null) {
|
|
180
|
+
// Silent takeover of an occupied element produces unreproducible
|
|
181
|
+
// races with the browser's resource selection; refuse explicitly.
|
|
182
|
+
throw Object.assign(new Error('element already has a source'), {
|
|
183
|
+
category: 'config',
|
|
184
|
+
code: 'CONFIG_ELEMENT_OCCUPIED',
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// Reset the resource selection algorithm so MSE attachment cannot race
|
|
188
|
+
// a previous load.
|
|
189
|
+
el.removeAttribute('src');
|
|
190
|
+
while (el.firstChild)
|
|
191
|
+
el.removeChild(el.firstChild);
|
|
192
|
+
el.load();
|
|
193
|
+
const Managed = options.preferManaged === false ? undefined : managedMediaSource();
|
|
194
|
+
managed = Managed !== undefined;
|
|
195
|
+
const ms = Managed !== undefined ? new Managed() : new MediaSource();
|
|
196
|
+
element = el;
|
|
197
|
+
mediaSource = ms;
|
|
198
|
+
listen(ms, 'sourceopen', () => {
|
|
199
|
+
if (objectUrl !== null) {
|
|
200
|
+
// Revoke at sourceopen, not detach. Waiting until detach leaks the
|
|
201
|
+
// MediaSource for the lifetime of the page in shipped code.
|
|
202
|
+
URL.revokeObjectURL(objectUrl);
|
|
203
|
+
objectUrl = null;
|
|
204
|
+
liveObjectUrls -= 1;
|
|
205
|
+
}
|
|
206
|
+
absorb({ type: 'MEDIASOURCE_OPEN' });
|
|
207
|
+
});
|
|
208
|
+
listen(ms, 'sourceclose', () => {
|
|
209
|
+
absorb({ type: 'MEDIASOURCE_CLOSED' });
|
|
210
|
+
});
|
|
211
|
+
if (managed) {
|
|
212
|
+
unobserveManaged = evictor.observeManaged(ms, trimAllBackBuffers);
|
|
213
|
+
// Safari requires remote playback disabled before it will open a
|
|
214
|
+
// ManagedMediaSource.
|
|
215
|
+
el.disableRemotePlayback = true;
|
|
216
|
+
}
|
|
217
|
+
let useSrcObject = options.attachMode !== 'object-url' && 'srcObject' in el;
|
|
218
|
+
if (useSrcObject) {
|
|
219
|
+
try {
|
|
220
|
+
el.srcObject = ms;
|
|
221
|
+
useSrcObject = el.srcObject === ms;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
useSrcObject = false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (!useSrcObject) {
|
|
228
|
+
objectUrl = URL.createObjectURL(ms);
|
|
229
|
+
liveObjectUrls += 1;
|
|
230
|
+
el.src = objectUrl;
|
|
231
|
+
}
|
|
232
|
+
absorb({ type: 'ELEMENT_ATTACHED', element: el });
|
|
233
|
+
}
|
|
234
|
+
function detach() {
|
|
235
|
+
if (element === null && mediaSource === null)
|
|
236
|
+
return;
|
|
237
|
+
const el = element;
|
|
238
|
+
const ms = mediaSource;
|
|
239
|
+
for (const [, entry] of buffers) {
|
|
240
|
+
if (ms !== null && ms.readyState === 'open') {
|
|
241
|
+
entry.queue.abort();
|
|
242
|
+
}
|
|
243
|
+
entry.queue.destroy();
|
|
244
|
+
if (ms !== null && ms.readyState === 'open') {
|
|
245
|
+
try {
|
|
246
|
+
ms.removeSourceBuffer(entry.sb);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Already detached from the MediaSource; nothing to remove.
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
buffers.clear();
|
|
254
|
+
appendChains.clear();
|
|
255
|
+
deferred.clear();
|
|
256
|
+
if (ms !== null && ms.readyState === 'open') {
|
|
257
|
+
try {
|
|
258
|
+
ms.endOfStream();
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// A buffer race can close the source first; the goal is reached.
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
unobserveManaged?.();
|
|
265
|
+
unobserveManaged = null;
|
|
266
|
+
unlistenAll();
|
|
267
|
+
if (el !== null) {
|
|
268
|
+
if ('srcObject' in el)
|
|
269
|
+
el.srcObject = null;
|
|
270
|
+
el.removeAttribute('src');
|
|
271
|
+
if (objectUrl !== null) {
|
|
272
|
+
// sourceopen never fired (attach aborted early); do not leak the URL.
|
|
273
|
+
URL.revokeObjectURL(objectUrl);
|
|
274
|
+
objectUrl = null;
|
|
275
|
+
liveObjectUrls -= 1;
|
|
276
|
+
}
|
|
277
|
+
el.load();
|
|
278
|
+
}
|
|
279
|
+
element = null;
|
|
280
|
+
mediaSource = null;
|
|
281
|
+
managed = false;
|
|
282
|
+
pendingEndOfStream = null;
|
|
283
|
+
pendingDuration = null;
|
|
284
|
+
pendingLiveRange = null;
|
|
285
|
+
}
|
|
286
|
+
/** Adds the SourceBuffer, reporting creation or a clean codec error. */
|
|
287
|
+
function open(sbId, type) {
|
|
288
|
+
const ms = mediaSource;
|
|
289
|
+
if (ms === null)
|
|
290
|
+
return false;
|
|
291
|
+
try {
|
|
292
|
+
// `type` is the full content type, e.g. 'video/mp4; codecs="avc1.42c01e"'.
|
|
293
|
+
const sb = ms.addSourceBuffer(type);
|
|
294
|
+
buffers.set(sbId, { sb, queue: createQueue(sbId, sb) });
|
|
295
|
+
absorb({ type: 'SOURCEBUFFER_CREATED', sbId, codecs: type });
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
// A bogus codec string surfaces as a MatteboxError fact, never as a
|
|
300
|
+
// DOMException escaping into user code.
|
|
301
|
+
absorb({
|
|
302
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
303
|
+
sbId,
|
|
304
|
+
error: {
|
|
305
|
+
category: 'media',
|
|
306
|
+
code: 'MEDIA_CODEC_UNSUPPORTED',
|
|
307
|
+
fatal: false,
|
|
308
|
+
recoverable: false,
|
|
309
|
+
context: { codecs: type, message: String(err) },
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Hands bytes to the buffer's queue, first opening a deferred buffer with
|
|
317
|
+
* the type the probe reads from them, or with the bare type when the probe
|
|
318
|
+
* reads nothing, which is what an unprobed composition does from the
|
|
319
|
+
* start. Bytes for a buffer that does not exist and is not deferred are
|
|
320
|
+
* dropped, as before.
|
|
321
|
+
*/
|
|
322
|
+
function enqueueAppend(sbId, data) {
|
|
323
|
+
const bare = deferred.get(sbId);
|
|
324
|
+
if (bare !== undefined && !buffers.has(sbId)) {
|
|
325
|
+
deferred.delete(sbId);
|
|
326
|
+
const type = options.inferType?.(new Uint8Array(data)) ?? bare;
|
|
327
|
+
if (!open(sbId, type))
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
buffers.get(sbId)?.queue.enqueue({ op: 'append', data });
|
|
331
|
+
}
|
|
332
|
+
function registerHandlers(runner) {
|
|
333
|
+
runner.register('createSourceBuffer', (effect) => {
|
|
334
|
+
const ms = mediaSource;
|
|
335
|
+
if (ms === null || ms.readyState !== 'open') {
|
|
336
|
+
absorb({
|
|
337
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
338
|
+
sbId: effect.sbId,
|
|
339
|
+
error: {
|
|
340
|
+
category: 'media',
|
|
341
|
+
code: 'MEDIA_SOURCE_CLOSED',
|
|
342
|
+
fatal: false,
|
|
343
|
+
recoverable: true,
|
|
344
|
+
context: { readyState: readyState() },
|
|
345
|
+
},
|
|
346
|
+
});
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
if (buffers.has(effect.sbId) || deferred.has(effect.sbId)) {
|
|
350
|
+
// Already created or awaiting its first bytes; a duplicate request
|
|
351
|
+
// is absorbed, not doubled.
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
if (options.inferType !== undefined && !declaresCodecs(effect.codecs)) {
|
|
355
|
+
// Chrome refuses a bare `video/mp4`; the first segment says what
|
|
356
|
+
// it holds. The buffer opens on that append, typed from the bytes.
|
|
357
|
+
deferred.set(effect.sbId, effect.codecs);
|
|
358
|
+
return undefined;
|
|
359
|
+
}
|
|
360
|
+
open(effect.sbId, effect.codecs);
|
|
361
|
+
return undefined;
|
|
362
|
+
});
|
|
363
|
+
runner.register('append', (effect) => {
|
|
364
|
+
const { appendTransform } = options;
|
|
365
|
+
if (appendTransform === undefined) {
|
|
366
|
+
enqueueAppend(effect.sbId, effect.data);
|
|
367
|
+
return undefined;
|
|
368
|
+
}
|
|
369
|
+
// A transform pipeline is loaded. Serialize per buffer so a Worker
|
|
370
|
+
// round-trip cannot let segment N+1 land before segment N. The chain
|
|
371
|
+
// holds arrival order; the queue then holds append order.
|
|
372
|
+
const prior = appendChains.get(effect.sbId) ?? Promise.resolve();
|
|
373
|
+
const next = prior
|
|
374
|
+
.then(async () => {
|
|
375
|
+
const out = await appendTransform(new Uint8Array(effect.data), appendMeta(effect.sbId, effect.start ?? 0, effect.renditionId ?? '', effect.seq ?? 0));
|
|
376
|
+
const bytes = out.byteOffset === 0 && out.byteLength === out.buffer.byteLength
|
|
377
|
+
? out.buffer
|
|
378
|
+
: out.slice().buffer;
|
|
379
|
+
enqueueAppend(effect.sbId, bytes);
|
|
380
|
+
})
|
|
381
|
+
.catch((err) => {
|
|
382
|
+
// A transmux failure is a container error, never a throw or a hang.
|
|
383
|
+
absorb({
|
|
384
|
+
type: 'SOURCEBUFFER_ERROR',
|
|
385
|
+
sbId: effect.sbId,
|
|
386
|
+
error: {
|
|
387
|
+
category: 'media',
|
|
388
|
+
code: 'MEDIA_CONTAINER_INVALID',
|
|
389
|
+
fatal: false,
|
|
390
|
+
recoverable: false,
|
|
391
|
+
context: { message: String(err) },
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
appendChains.set(effect.sbId, next);
|
|
396
|
+
return undefined;
|
|
397
|
+
});
|
|
398
|
+
// With a transform pipeline loaded, appends reach the queue only after
|
|
399
|
+
// an async hop. Every other buffer operation must take the same hop,
|
|
400
|
+
// or a remove or offset change emitted after an append runs before it:
|
|
401
|
+
// a switch's flush would then land under the segment it meant to cut,
|
|
402
|
+
// and the decoder would meet one rendition's frames under another's
|
|
403
|
+
// init segment.
|
|
404
|
+
function sequenced(sbId, op) {
|
|
405
|
+
if (options.appendTransform === undefined) {
|
|
406
|
+
op();
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
const prior = appendChains.get(sbId) ?? Promise.resolve();
|
|
410
|
+
appendChains.set(sbId, prior.then(op).catch(() => undefined));
|
|
411
|
+
}
|
|
412
|
+
runner.register('remove', (effect) => {
|
|
413
|
+
sequenced(effect.sbId, () => {
|
|
414
|
+
const entry = buffers.get(effect.sbId);
|
|
415
|
+
if (entry === undefined)
|
|
416
|
+
return;
|
|
417
|
+
const clamped = evictor.clamp(entry.sb, effect.start, effect.end, currentTime());
|
|
418
|
+
if (clamped === null)
|
|
419
|
+
return;
|
|
420
|
+
entry.queue.enqueue({ op: 'remove', start: clamped.start, end: clamped.end });
|
|
421
|
+
});
|
|
422
|
+
return undefined;
|
|
423
|
+
});
|
|
424
|
+
runner.register('changeType', (effect) => {
|
|
425
|
+
sequenced(effect.sbId, () => {
|
|
426
|
+
buffers.get(effect.sbId)?.queue.enqueue({ op: 'changeType', type: effect.codecs });
|
|
427
|
+
});
|
|
428
|
+
return undefined;
|
|
429
|
+
});
|
|
430
|
+
runner.register('setTimestampOffset', (effect) => {
|
|
431
|
+
sequenced(effect.sbId, () => {
|
|
432
|
+
buffers
|
|
433
|
+
.get(effect.sbId)
|
|
434
|
+
?.queue.enqueue({ op: 'setTimestampOffset', offset: effect.offset });
|
|
435
|
+
});
|
|
436
|
+
return undefined;
|
|
437
|
+
});
|
|
438
|
+
runner.register('endOfStream', (effect) => {
|
|
439
|
+
if (mediaSource === null || mediaSource.readyState !== 'open') {
|
|
440
|
+
// Calling endOfStream on a closed or ended source is an
|
|
441
|
+
// InvalidStateError; the stream is already not open, so the intent
|
|
442
|
+
// is moot. Deliberate no-op.
|
|
443
|
+
return undefined;
|
|
444
|
+
}
|
|
445
|
+
pendingEndOfStream = effect.reason ?? 'none';
|
|
446
|
+
runDeferredGlobalOps();
|
|
447
|
+
return undefined;
|
|
448
|
+
});
|
|
449
|
+
runner.register('setDuration', (effect) => {
|
|
450
|
+
if (mediaSource === null || mediaSource.readyState !== 'open')
|
|
451
|
+
return undefined;
|
|
452
|
+
pendingDuration = effect.seconds;
|
|
453
|
+
runDeferredGlobalOps();
|
|
454
|
+
return undefined;
|
|
455
|
+
});
|
|
456
|
+
runner.register('setLiveSeekableRange', (effect) => {
|
|
457
|
+
if (mediaSource === null || mediaSource.readyState !== 'open')
|
|
458
|
+
return undefined;
|
|
459
|
+
pendingLiveRange = { start: effect.start, end: effect.end };
|
|
460
|
+
runDeferredGlobalOps();
|
|
461
|
+
return undefined;
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
return {
|
|
465
|
+
attach,
|
|
466
|
+
detach,
|
|
467
|
+
registerHandlers,
|
|
468
|
+
isManaged: () => managed,
|
|
469
|
+
readyState,
|
|
470
|
+
buffered(sbId) {
|
|
471
|
+
const entry = buffers.get(sbId);
|
|
472
|
+
if (entry === undefined)
|
|
473
|
+
return [];
|
|
474
|
+
const out = [];
|
|
475
|
+
const { buffered } = entry.sb;
|
|
476
|
+
for (let i = 0; i < buffered.length; i += 1) {
|
|
477
|
+
out.push({ start: buffered.start(i), end: buffered.end(i) });
|
|
478
|
+
}
|
|
479
|
+
return out;
|
|
480
|
+
},
|
|
481
|
+
diagnostics() {
|
|
482
|
+
return {
|
|
483
|
+
liveObjectUrls,
|
|
484
|
+
liveListeners: tracked.length,
|
|
485
|
+
sourceBuffers: buffers.size,
|
|
486
|
+
};
|
|
487
|
+
},
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
//# sourceMappingURL=mse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mse.js","sourceRoot":"","sources":["../../src/kernel/mse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { KernelConfig, KernelState, Reducer, SliceReducer } from '../types/kernel.js';
|
|
2
|
+
import type { Command, Message } from '../types/messages.js';
|
|
3
|
+
import type { AbrChooser, SwitchPolicy } from './rendition-select.js';
|
|
4
|
+
/**
|
|
5
|
+
* The default tuning. Every value is overridable through the `config`
|
|
6
|
+
* parameters of `initialState` and `createReducer`; these are starting
|
|
7
|
+
* points, not policy.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_KERNEL_CONFIG: KernelConfig;
|
|
10
|
+
export declare function resolveConfig(config?: Partial<KernelConfig>): KernelConfig;
|
|
11
|
+
export declare function initialState(config?: Partial<KernelConfig>): KernelState;
|
|
12
|
+
/**
|
|
13
|
+
* Hooks resolved at composition time, closure configuration like slices
|
|
14
|
+
* and config: a replay must rebuild the reducer with the same hooks.
|
|
15
|
+
*/
|
|
16
|
+
export interface ReducerHooks {
|
|
17
|
+
/** The abr stage's chooser, when one is registered. */
|
|
18
|
+
readonly abr?: AbrChooser | null;
|
|
19
|
+
/** The switch policy codec-switch registers; the kernel default otherwise. */
|
|
20
|
+
readonly switchPolicy?: SwitchPolicy | null;
|
|
21
|
+
/**
|
|
22
|
+
* The manifest MIME types the composition's adapters parse, normalized
|
|
23
|
+
* (`Composition.manifestTypes`). A LOAD carrying a `mimeType` outside the
|
|
24
|
+
* set fails before fetching. Absent, no pre-fetch check runs; the
|
|
25
|
+
* unclaimed-bytes check still reports an unsupported manifest. A replay
|
|
26
|
+
* must pass the same set the recording ran with.
|
|
27
|
+
*/
|
|
28
|
+
readonly manifestTypes?: ReadonlySet<string>;
|
|
29
|
+
}
|
|
30
|
+
export declare function isCommand(msg: Message): msg is Command;
|
|
31
|
+
/**
|
|
32
|
+
* Builds the root reducer from the built-in kernel logic plus stage slices.
|
|
33
|
+
* A slice reducer receives its own slice (undefined on first run) and a
|
|
34
|
+
* read-only view of kernel state. A throwing slice reducer is contained: its
|
|
35
|
+
* slice keeps the previous value and an error event effect is emitted, so
|
|
36
|
+
* one broken stage cannot corrupt kernel state.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createReducer(slices?: Iterable<readonly [string, SliceReducer]>, config?: Partial<KernelConfig>, hooks?: ReducerHooks): Reducer;
|
|
39
|
+
//# sourceMappingURL=reducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../src/kernel/reducer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAgB,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQtE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAqBnC,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAE1E;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,WAAW,CAgBxE;AAuhCD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAwRD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,OAAO,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAClD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,KAAK,GAAE,YAAiB,GACvB,OAAO,CAkET"}
|