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,98 @@
|
|
|
1
|
+
import { buildEpochs, epochForSeq, segmentAtTime, timestampOffsetFor } from './timeline.js';
|
|
2
|
+
const DEFAULT_GAP_TOLERANCE = 0.25;
|
|
3
|
+
/**
|
|
4
|
+
* The end of continuous buffer from `time`, merging gaps below the
|
|
5
|
+
* tolerance. Returns `time` itself when nothing is buffered there.
|
|
6
|
+
*/
|
|
7
|
+
export function bufferedEndFrom(ranges, time, tolerance) {
|
|
8
|
+
let end = time;
|
|
9
|
+
let advanced = true;
|
|
10
|
+
while (advanced) {
|
|
11
|
+
advanced = false;
|
|
12
|
+
for (const range of ranges) {
|
|
13
|
+
if (range.start <= end + tolerance && range.end > end) {
|
|
14
|
+
end = range.end;
|
|
15
|
+
advanced = true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return end;
|
|
20
|
+
}
|
|
21
|
+
/** The buffered range holding the segment's midpoint, the sign it was appended, or null. */
|
|
22
|
+
function coveringMidpoint(ranges, segment) {
|
|
23
|
+
const mid = segment.start + segment.duration / 2;
|
|
24
|
+
return ranges.find((range) => range.start <= mid && range.end > mid) ?? null;
|
|
25
|
+
}
|
|
26
|
+
export function schedule(input) {
|
|
27
|
+
const tolerance = input.gapToleranceSeconds ?? DEFAULT_GAP_TOLERANCE;
|
|
28
|
+
const effects = [];
|
|
29
|
+
const requests = [];
|
|
30
|
+
let tokenSeq = input.tokenSeq;
|
|
31
|
+
for (const track of input.tracks) {
|
|
32
|
+
// One request per track at a time. A burst would race itself: the next
|
|
33
|
+
// decision is better made once this segment's bytes have arrived.
|
|
34
|
+
if (track.inflight.length > 0)
|
|
35
|
+
continue;
|
|
36
|
+
const bufferedEnd = bufferedEndFrom(track.ranges, input.currentTime, tolerance);
|
|
37
|
+
if (bufferedEnd - input.currentTime >= input.bufferGoal)
|
|
38
|
+
continue;
|
|
39
|
+
let target = Math.max(bufferedEnd, input.currentTime);
|
|
40
|
+
if (input.liveWindow != null && target < input.liveWindow.start) {
|
|
41
|
+
// The window slid past this position; resume at its start.
|
|
42
|
+
target = input.liveWindow.start;
|
|
43
|
+
}
|
|
44
|
+
let segment = segmentAtTime(track.rendition.segments, target + tolerance, track.period.start);
|
|
45
|
+
// Media shorter than its playlist entry (an ad pod's last segment whose
|
|
46
|
+
// audio was cut early, say) leaves a hole the run cannot cross, inside
|
|
47
|
+
// or right after a segment already appended. Fetching that segment again
|
|
48
|
+
// cannot close the hole and would trip the repeat breaker. A segment
|
|
49
|
+
// whose midpoint is buffered counts as consumed: the walk moves past it
|
|
50
|
+
// and past anything buffered beyond the hole, up to the goal, and the
|
|
51
|
+
// hole itself is recovery's to jump.
|
|
52
|
+
let frontier = bufferedEnd;
|
|
53
|
+
while (segment !== null) {
|
|
54
|
+
const covering = coveringMidpoint(track.ranges, segment);
|
|
55
|
+
if (covering === null)
|
|
56
|
+
break;
|
|
57
|
+
frontier = Math.max(frontier, covering.end);
|
|
58
|
+
if (frontier - input.currentTime >= input.bufferGoal) {
|
|
59
|
+
segment = null;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
segment = segmentAtTime(track.rendition.segments, segment.start + segment.duration + tolerance, track.period.start);
|
|
63
|
+
}
|
|
64
|
+
if (segment === null)
|
|
65
|
+
continue;
|
|
66
|
+
if (input.liveWindow != null && segment.start + segment.duration > input.liveWindow.end) {
|
|
67
|
+
// Not fully available yet. The next window update reschedules it.
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const epochs = buildEpochs([{ period: track.period, rendition: track.rendition }]);
|
|
71
|
+
const epoch = epochForSeq(epochs, segment.seq);
|
|
72
|
+
tokenSeq += 1;
|
|
73
|
+
const token = `t${tokenSeq}:${track.trackId}:${segment.seq}`;
|
|
74
|
+
effects.push({
|
|
75
|
+
kind: 'fetch',
|
|
76
|
+
token,
|
|
77
|
+
url: segment.url,
|
|
78
|
+
...(segment.byteRange !== undefined ? { range: segment.byteRange } : {}),
|
|
79
|
+
});
|
|
80
|
+
requests.push({
|
|
81
|
+
token,
|
|
82
|
+
trackId: track.trackId,
|
|
83
|
+
seq: segment.seq,
|
|
84
|
+
url: segment.url,
|
|
85
|
+
renditionId: track.rendition.id,
|
|
86
|
+
segmentStart: segment.start,
|
|
87
|
+
segmentDuration: segment.duration,
|
|
88
|
+
...(track.sbId !== undefined ? { sbId: track.sbId } : {}),
|
|
89
|
+
...(input.mediaTimeNormalized === true
|
|
90
|
+
? { timestampOffset: 0 }
|
|
91
|
+
: epoch !== null
|
|
92
|
+
? { timestampOffset: timestampOffsetFor(epoch) }
|
|
93
|
+
: {}),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return { effects, requests, tokenSeq };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/kernel/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timed metadata (ID3, emsg, DATERANGE) as cues on a metadata TextTrack.
|
|
3
|
+
* Same machinery as text: metadata is a pipeline, not a special case.
|
|
4
|
+
*/
|
|
5
|
+
import type { CueSink, CueSinkDeps } from './text-track-sink.js';
|
|
6
|
+
export declare function createMetadataSink(deps: CueSinkDeps): CueSink<'metadata'>;
|
|
7
|
+
//# sourceMappingURL=metadata-sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-sink.d.ts","sourceRoot":"","sources":["../../../src/kernel/sinks/metadata-sink.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-sink.js","sourceRoot":"","sources":["../../../src/kernel/sinks/metadata-sink.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The first Sink implementation: audio and video bytes to SourceBuffers.
|
|
3
|
+
* The sink returns effects rather than touching MSE itself, so the append
|
|
4
|
+
* path stays inside the effect runner and the trace.
|
|
5
|
+
*/
|
|
6
|
+
import type { ContentType, TimeRangesSnapshot } from '../../types/ir.js';
|
|
7
|
+
import type { SbId } from '../../types/kernel.js';
|
|
8
|
+
import type { Sink } from '../../types/sink.js';
|
|
9
|
+
export type MediaContentType = Extract<ContentType, 'audio' | 'video'>;
|
|
10
|
+
/** The sbId naming convention: one SourceBuffer per media content type. */
|
|
11
|
+
export declare function sbIdFor(contentType: MediaContentType): SbId;
|
|
12
|
+
export interface MseSinkDeps {
|
|
13
|
+
/** Real SourceBuffer ranges, provided by the mse controller. */
|
|
14
|
+
buffered(sbId: SbId): TimeRangesSnapshot;
|
|
15
|
+
}
|
|
16
|
+
export declare function createMseSink<C extends MediaContentType>(contentType: C, deps: MseSinkDeps): Sink<C>;
|
|
17
|
+
//# sourceMappingURL=mse-sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mse-sink.d.ts","sourceRoot":"","sources":["../../../src/kernel/sinks/mse-sink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAW,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;AAEvE,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAE3D;AAED,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB,CAAC;CAC1C;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,gBAAgB,EACtD,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,WAAW,GAChB,IAAI,CAAC,CAAC,CAAC,CAcT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** The sbId naming convention: one SourceBuffer per media content type. */
|
|
2
|
+
export function sbIdFor(contentType) {
|
|
3
|
+
return `sb:${contentType}`;
|
|
4
|
+
}
|
|
5
|
+
export function createMseSink(contentType, deps) {
|
|
6
|
+
const sbId = sbIdFor(contentType);
|
|
7
|
+
return {
|
|
8
|
+
contentType,
|
|
9
|
+
accept(_trackId, data) {
|
|
10
|
+
return [{ kind: 'append', sbId, data }];
|
|
11
|
+
},
|
|
12
|
+
ranges(_trackId) {
|
|
13
|
+
return deps.buffered(sbId);
|
|
14
|
+
},
|
|
15
|
+
clear(_trackId, start, end) {
|
|
16
|
+
return [{ kind: 'remove', sbId, start, end }];
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=mse-sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mse-sink.js","sourceRoot":"","sources":["../../../src/kernel/sinks/mse-sink.ts"],"names":[],"mappings":"AAYA,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,WAA6B;IACnD,OAAO,MAAM,WAAW,EAAE,CAAC;AAC7B,CAAC;AAOD,MAAM,UAAU,aAAa,CAC3B,WAAc,EACd,IAAiB;IAEjB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO;QACL,WAAW;QACX,MAAM,CAAC,QAAiB,EAAE,IAAiB;YACzC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,CAAC,QAAiB;YACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,QAAiB,EAAE,KAAa,EAAE,GAAW;YACjD,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text as a peer media pipeline: cues go to a native TextTrack, because the
|
|
3
|
+
* browser's renderer, styling, and caption UI come free. This sink accepts
|
|
4
|
+
* segment bytes like any other sink; turning bytes into cues is a parser's
|
|
5
|
+
* job (text-webvtt, Stage 12), so without a registered parser a segment is
|
|
6
|
+
* consumed but yields no cues.
|
|
7
|
+
*/
|
|
8
|
+
import type { ContentType, TrackId } from '../../types/ir.js';
|
|
9
|
+
import type { CueDescriptor } from '../../types/messages.js';
|
|
10
|
+
import type { Sink } from '../../types/sink.js';
|
|
11
|
+
import type { ParserFn } from '../../types/stage.js';
|
|
12
|
+
export type CueContentType = Extract<ContentType, 'text' | 'metadata'>;
|
|
13
|
+
export interface CueSinkDeps {
|
|
14
|
+
readonly element: HTMLMediaElement;
|
|
15
|
+
/** bytes to cues. Absent until a text stage registers one. */
|
|
16
|
+
readonly parse?: ParserFn;
|
|
17
|
+
/** TextTrack label prefix, visible in browser UIs. */
|
|
18
|
+
readonly label?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CueSink<C extends CueContentType> extends Sink<C> {
|
|
21
|
+
/** The handler for the emitCues effect. Register with the effect runner. */
|
|
22
|
+
handleEmitCues(trackId: TrackId, cues: readonly CueDescriptor[]): void;
|
|
23
|
+
/**
|
|
24
|
+
* Creates the native track for a trackId ahead of any segment, so the
|
|
25
|
+
* browser's caption menu lists it before it is ever selected. Idempotent;
|
|
26
|
+
* returns the native track either way.
|
|
27
|
+
*/
|
|
28
|
+
declare(trackId: TrackId): TextTrack;
|
|
29
|
+
/** The native track backing a trackId, for tests and track UIs. */
|
|
30
|
+
nativeTrack(trackId: TrackId): TextTrack | null;
|
|
31
|
+
/** Every trackId with a native track. */
|
|
32
|
+
trackIds(): readonly TrackId[];
|
|
33
|
+
/**
|
|
34
|
+
* Releases one track: its cues go, its mode ends disabled, and the sink
|
|
35
|
+
* forgets it. The native track itself stays on the element, empty, since
|
|
36
|
+
* the element has no way to remove one; a later declare adopts it.
|
|
37
|
+
*/
|
|
38
|
+
retire(trackId: TrackId): void;
|
|
39
|
+
/** Retires every track. The teardown path; idempotent. */
|
|
40
|
+
dispose(): void;
|
|
41
|
+
}
|
|
42
|
+
export declare function createCueSink<C extends CueContentType>(contentType: C, kind: TextTrackKind, deps: CueSinkDeps): CueSink<C>;
|
|
43
|
+
/** Subtitles and captions to a native TextTrack. */
|
|
44
|
+
export declare function createTextTrackSink(deps: CueSinkDeps): CueSink<'text'>;
|
|
45
|
+
//# sourceMappingURL=text-track-sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-track-sink.d.ts","sourceRoot":"","sources":["../../../src/kernel/sinks/text-track-sink.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAiC,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IAChE,4EAA4E;IAC5E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;IACvE;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,mEAAmE;IACnE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IAChD,yCAAyC;IACzC,QAAQ,IAAI,SAAS,OAAO,EAAE,CAAC;IAC/B;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAuDD,wBAAgB,aAAa,CAAC,CAAC,SAAS,cAAc,EACpD,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,CAAC,CAAC,CAwHZ;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtE"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/** Applies the WebVTT settings string's known keys onto a native cue. */
|
|
2
|
+
function applySettings(cue, settings) {
|
|
3
|
+
if (settings === undefined)
|
|
4
|
+
return;
|
|
5
|
+
for (const part of settings.split(/\s+/)) {
|
|
6
|
+
const [key, value] = part.split(':');
|
|
7
|
+
if (value === undefined)
|
|
8
|
+
continue;
|
|
9
|
+
const percent = value.endsWith('%') ? Number(value.slice(0, -1)) : null;
|
|
10
|
+
switch (key) {
|
|
11
|
+
case 'line':
|
|
12
|
+
cue.line = percent ?? Number(value);
|
|
13
|
+
if (percent !== null)
|
|
14
|
+
cue.snapToLines = false;
|
|
15
|
+
break;
|
|
16
|
+
case 'position':
|
|
17
|
+
if (percent !== null)
|
|
18
|
+
cue.position = percent;
|
|
19
|
+
break;
|
|
20
|
+
case 'size':
|
|
21
|
+
if (percent !== null)
|
|
22
|
+
cue.size = percent;
|
|
23
|
+
break;
|
|
24
|
+
case 'align':
|
|
25
|
+
cue.align = value;
|
|
26
|
+
break;
|
|
27
|
+
case 'vertical':
|
|
28
|
+
cue.vertical = value;
|
|
29
|
+
break;
|
|
30
|
+
default:
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function mergeRange(coverage, added) {
|
|
36
|
+
const merged = [];
|
|
37
|
+
let pending = added;
|
|
38
|
+
for (const range of [...coverage].sort((a, b) => a.start - b.start)) {
|
|
39
|
+
if (range.end < pending.start || range.start > pending.end) {
|
|
40
|
+
merged.push(range);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
pending = {
|
|
44
|
+
start: Math.min(range.start, pending.start),
|
|
45
|
+
end: Math.max(range.end, pending.end),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
merged.push(pending);
|
|
50
|
+
return merged.sort((a, b) => a.start - b.start);
|
|
51
|
+
}
|
|
52
|
+
export function createCueSink(contentType, kind, deps) {
|
|
53
|
+
const tracks = new Map();
|
|
54
|
+
/**
|
|
55
|
+
* A native track for the id. The element has no removeTextTrack, so a
|
|
56
|
+
* previous attach on the same element (a rebuild, an element swap back)
|
|
57
|
+
* leaves its tracks behind; one with our kind and label is adopted and
|
|
58
|
+
* emptied rather than duplicated in the browser's caption menu.
|
|
59
|
+
*/
|
|
60
|
+
/** Empties a native track. `cues` reads null while disabled; hidden makes them removable. */
|
|
61
|
+
function empty(textTrack) {
|
|
62
|
+
textTrack.mode = 'hidden';
|
|
63
|
+
const { cues } = textTrack;
|
|
64
|
+
if (cues !== null) {
|
|
65
|
+
for (let i = cues.length - 1; i >= 0; i -= 1) {
|
|
66
|
+
const cue = cues[i];
|
|
67
|
+
if (cue !== undefined)
|
|
68
|
+
textTrack.removeCue(cue);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function adopt(label) {
|
|
73
|
+
for (const existing of deps.element.textTracks) {
|
|
74
|
+
if (existing.kind !== kind || existing.label !== label)
|
|
75
|
+
continue;
|
|
76
|
+
empty(existing);
|
|
77
|
+
return existing;
|
|
78
|
+
}
|
|
79
|
+
return deps.element.addTextTrack(kind, label);
|
|
80
|
+
}
|
|
81
|
+
function retire(trackId) {
|
|
82
|
+
const entry = tracks.get(trackId);
|
|
83
|
+
if (entry === undefined)
|
|
84
|
+
return;
|
|
85
|
+
empty(entry.textTrack);
|
|
86
|
+
entry.textTrack.mode = 'disabled';
|
|
87
|
+
tracks.delete(trackId);
|
|
88
|
+
}
|
|
89
|
+
function ensure(trackId) {
|
|
90
|
+
let entry = tracks.get(trackId);
|
|
91
|
+
if (entry === undefined) {
|
|
92
|
+
const textTrack = adopt(`${deps.label ?? 'mattebox'}:${trackId}`);
|
|
93
|
+
textTrack.mode = 'hidden';
|
|
94
|
+
entry = { textTrack, coverage: [], ids: new Set() };
|
|
95
|
+
tracks.set(trackId, entry);
|
|
96
|
+
}
|
|
97
|
+
return entry;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
contentType,
|
|
101
|
+
accept(trackId, data, meta) {
|
|
102
|
+
const entry = ensure(trackId);
|
|
103
|
+
if (!meta.isInit) {
|
|
104
|
+
entry.coverage = mergeRange(entry.coverage, {
|
|
105
|
+
start: meta.start,
|
|
106
|
+
end: meta.start + meta.duration,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (deps.parse === undefined)
|
|
110
|
+
return [];
|
|
111
|
+
const cues = deps.parse(new Uint8Array(data), meta);
|
|
112
|
+
if (cues.length === 0)
|
|
113
|
+
return [];
|
|
114
|
+
return [{ kind: 'emitCues', trackId, cues }];
|
|
115
|
+
},
|
|
116
|
+
ranges(trackId) {
|
|
117
|
+
return tracks.get(trackId)?.coverage ?? [];
|
|
118
|
+
},
|
|
119
|
+
clear(trackId, start, end) {
|
|
120
|
+
// Cue removal has no effect kind: unlike appendBuffer it needs no
|
|
121
|
+
// serialization against a hardware pipeline, so it happens here, and
|
|
122
|
+
// the returned effect list is empty by design.
|
|
123
|
+
const entry = tracks.get(trackId);
|
|
124
|
+
if (entry === undefined)
|
|
125
|
+
return [];
|
|
126
|
+
const { cues } = entry.textTrack;
|
|
127
|
+
if (cues !== null) {
|
|
128
|
+
for (let i = cues.length - 1; i >= 0; i -= 1) {
|
|
129
|
+
const cue = cues[i];
|
|
130
|
+
if (cue !== undefined && cue.startTime >= start && cue.endTime <= end) {
|
|
131
|
+
entry.textTrack.removeCue(cue);
|
|
132
|
+
if (cue.id !== '')
|
|
133
|
+
entry.ids.delete(cue.id);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
entry.coverage = entry.coverage.flatMap((range) => {
|
|
138
|
+
if (range.end <= start || range.start >= end)
|
|
139
|
+
return [range];
|
|
140
|
+
const kept = [];
|
|
141
|
+
if (range.start < start)
|
|
142
|
+
kept.push({ start: range.start, end: start });
|
|
143
|
+
if (range.end > end)
|
|
144
|
+
kept.push({ start: end, end: range.end });
|
|
145
|
+
return kept;
|
|
146
|
+
});
|
|
147
|
+
return [];
|
|
148
|
+
},
|
|
149
|
+
handleEmitCues(trackId, cues) {
|
|
150
|
+
const entry = ensure(trackId);
|
|
151
|
+
for (const cue of cues) {
|
|
152
|
+
// Re-delivered segments re-emit their cues; identity dedups them.
|
|
153
|
+
if (cue.id !== undefined && entry.ids.has(cue.id))
|
|
154
|
+
continue;
|
|
155
|
+
const vtt = new VTTCue(cue.start, cue.end, cue.text ?? '');
|
|
156
|
+
if (cue.id !== undefined) {
|
|
157
|
+
vtt.id = cue.id;
|
|
158
|
+
entry.ids.add(cue.id);
|
|
159
|
+
}
|
|
160
|
+
applySettings(vtt, cue.settings);
|
|
161
|
+
entry.textTrack.addCue(vtt);
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
declare(trackId) {
|
|
165
|
+
return ensure(trackId).textTrack;
|
|
166
|
+
},
|
|
167
|
+
nativeTrack(trackId) {
|
|
168
|
+
return tracks.get(trackId)?.textTrack ?? null;
|
|
169
|
+
},
|
|
170
|
+
trackIds() {
|
|
171
|
+
return [...tracks.keys()];
|
|
172
|
+
},
|
|
173
|
+
retire,
|
|
174
|
+
dispose() {
|
|
175
|
+
for (const trackId of [...tracks.keys()])
|
|
176
|
+
retire(trackId);
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/** Subtitles and captions to a native TextTrack. */
|
|
181
|
+
export function createTextTrackSink(deps) {
|
|
182
|
+
return createCueSink('text', 'subtitles', deps);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=text-track-sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-track-sink.js","sourceRoot":"","sources":["../../../src/kernel/sinks/text-track-sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media time to presentation time mapping. A playlist discontinuity and a
|
|
3
|
+
* period boundary are the same concept: a point where the media timeline's
|
|
4
|
+
* mapping to presentation time changes and timestampOffset must be
|
|
5
|
+
* recomputed. Both produce a TimelineEpoch, and everything downstream works
|
|
6
|
+
* on epochs; that shared model is why timeline is kernel and not a stage.
|
|
7
|
+
*
|
|
8
|
+
* Pure functions only. No clocks: the live edge is supplied by the live
|
|
9
|
+
* stages, never computed here.
|
|
10
|
+
*/
|
|
11
|
+
import type { Period, Presentation, Rendition, Segment, SegmentAddressing, TimeRange } from '../types/ir.js';
|
|
12
|
+
/** One continuous stretch of media timeline mapped onto presentation time. */
|
|
13
|
+
export interface TimelineEpoch {
|
|
14
|
+
readonly periodId: string;
|
|
15
|
+
/** First segment sequence number belonging to this epoch. */
|
|
16
|
+
readonly firstSeq: number;
|
|
17
|
+
/** Where this epoch starts in presentation time, in seconds. */
|
|
18
|
+
readonly presentationStart: number;
|
|
19
|
+
/**
|
|
20
|
+
* Where the media timestamps start inside the segments, in seconds.
|
|
21
|
+
* Zero until real tfdt values arrive; reconcileTfdt corrects it.
|
|
22
|
+
*/
|
|
23
|
+
readonly mediaStart: number;
|
|
24
|
+
}
|
|
25
|
+
export interface PeriodRendition {
|
|
26
|
+
readonly period: Period;
|
|
27
|
+
readonly rendition: Rendition;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Epochs for one rendition timeline across periods. A period boundary opens
|
|
31
|
+
* an epoch; inside a period, every segment flagged `discontinuity` opens
|
|
32
|
+
* another. One code path for both.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildEpochs(parts: readonly PeriodRendition[]): readonly TimelineEpoch[];
|
|
35
|
+
/** The epoch a sequence number belongs to, or null before the first epoch. */
|
|
36
|
+
export declare function epochForSeq(epochs: readonly TimelineEpoch[], seq: number): TimelineEpoch | null;
|
|
37
|
+
/** The timestampOffset an append from this epoch requires. */
|
|
38
|
+
export declare function timestampOffsetFor(epoch: TimelineEpoch): number;
|
|
39
|
+
export declare function mediaToPresentation(mediaTime: number, epoch: TimelineEpoch): number;
|
|
40
|
+
export declare function presentationToMedia(presentationTime: number, epoch: TimelineEpoch): number;
|
|
41
|
+
/**
|
|
42
|
+
* Corrects an epoch with a real baseMediaDecodeTime once mp4-box can read
|
|
43
|
+
* tfdt (Stage 07). Interface only for now: manifests promise timing, the
|
|
44
|
+
* bytes tell the truth.
|
|
45
|
+
*/
|
|
46
|
+
export declare function reconcileTfdt(epoch: TimelineEpoch, baseMediaDecodeTime: number, timescale: number): TimelineEpoch;
|
|
47
|
+
/** Materializes one segment from an indexed form. Null outside the window. */
|
|
48
|
+
export declare function segmentAt(addressing: SegmentAddressing, seq: number, periodStart?: number): Segment | null;
|
|
49
|
+
/** The first segment whose interval contains or follows `time`, or null past the end. */
|
|
50
|
+
export declare function segmentAtTime(addressing: SegmentAddressing, time: number, periodStart?: number): Segment | null;
|
|
51
|
+
/**
|
|
52
|
+
* The seekable window. VOD: zero to the announced or derivable duration.
|
|
53
|
+
* Live: the sliding window ending at the supplied edge; the kernel never
|
|
54
|
+
* computes the edge itself.
|
|
55
|
+
*/
|
|
56
|
+
export declare function seekableWindow(presentation: Presentation, liveEdge: number | null): TimeRange;
|
|
57
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/kernel/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAEV,MAAM,EACN,YAAY,EACZ,SAAS,EACT,OAAO,EACP,iBAAiB,EAEjB,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,SAAS,aAAa,EAAE,CAmCvF;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAM/F;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE/D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAEnF;AAED,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,MAAM,GAChB,aAAa,CAEf;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CACvB,UAAU,EAAE,iBAAiB,EAC7B,GAAG,EAAE,MAAM,EACX,WAAW,SAAI,GACd,OAAO,GAAG,IAAI,CAiDhB;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAC3B,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,SAAI,GACd,OAAO,GAAG,IAAI,CAwBhB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CA0B7F"}
|