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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADTS AAC framing. Both ts-transmux (AAC inside a TS PES) and packed-audio
|
|
3
|
+
* (a bare .aac HLS segment) meet AAC as ADTS frames and need the same three
|
|
4
|
+
* things: the raw AAC payloads for the mdat, the codec parameters for the
|
|
5
|
+
* esds, and the sample count for timing. This is the shared module both
|
|
6
|
+
* import; neither imports the other.
|
|
7
|
+
*/
|
|
8
|
+
/** The MPEG-4 sampling frequency table, indexed by samplingFrequencyIndex. */
|
|
9
|
+
export const SAMPLE_RATES = [
|
|
10
|
+
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350,
|
|
11
|
+
];
|
|
12
|
+
/** Samples per AAC frame; fixed for AAC-LC. */
|
|
13
|
+
export const SAMPLES_PER_FRAME = 1024;
|
|
14
|
+
/**
|
|
15
|
+
* Parses every ADTS frame in a buffer. Each frame header carries its own
|
|
16
|
+
* length, so parsing walks frame to frame; a bad or truncated header stops
|
|
17
|
+
* the walk rather than throwing. The returned codec parameters come from the
|
|
18
|
+
* first valid frame, which is what the init segment describes.
|
|
19
|
+
*/
|
|
20
|
+
export function parseAdts(data) {
|
|
21
|
+
const frames = [];
|
|
22
|
+
let audioObjectType = 2;
|
|
23
|
+
let samplingFrequencyIndex = 4;
|
|
24
|
+
let channelConfig = 2;
|
|
25
|
+
let offset = 0;
|
|
26
|
+
const length = data.byteLength;
|
|
27
|
+
while (offset + 7 <= length) {
|
|
28
|
+
// Syncword: eleven set bits across the first byte and the top of the second.
|
|
29
|
+
if (data[offset] !== 0xff || (data[offset + 1] & 0xf6) !== 0xf0) {
|
|
30
|
+
offset += 1;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const protectionAbsent = data[offset + 1] & 0x01;
|
|
34
|
+
const profile = (data[offset + 2] >> 6) & 0x03;
|
|
35
|
+
const freqIndex = (data[offset + 2] >> 2) & 0x0f;
|
|
36
|
+
const channels = ((data[offset + 2] & 0x01) << 2) | ((data[offset + 3] >> 6) & 0x03);
|
|
37
|
+
const frameLength = ((data[offset + 3] & 0x03) << 11) |
|
|
38
|
+
(data[offset + 4] << 3) |
|
|
39
|
+
((data[offset + 5] >> 5) & 0x07);
|
|
40
|
+
if (frameLength < 7 || offset + frameLength > length)
|
|
41
|
+
break;
|
|
42
|
+
const headerSize = protectionAbsent ? 7 : 9;
|
|
43
|
+
if (headerSize < frameLength) {
|
|
44
|
+
frames.push({
|
|
45
|
+
data: data.subarray(offset + headerSize, offset + frameLength),
|
|
46
|
+
audioObjectType: profile + 1,
|
|
47
|
+
samplingFrequencyIndex: freqIndex,
|
|
48
|
+
channelConfig: channels,
|
|
49
|
+
});
|
|
50
|
+
if (frames.length === 1) {
|
|
51
|
+
audioObjectType = profile + 1;
|
|
52
|
+
samplingFrequencyIndex = freqIndex;
|
|
53
|
+
channelConfig = channels;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
offset += frameLength;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
frames,
|
|
60
|
+
sampleRate: SAMPLE_RATES[samplingFrequencyIndex] ?? 44100,
|
|
61
|
+
audioObjectType,
|
|
62
|
+
samplingFrequencyIndex,
|
|
63
|
+
channelConfig,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=adts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adts.js","sourceRoot":"","sources":["../../src/containers/adts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caption seam of entanglement #1. Two sources reach in-band captions:
|
|
3
|
+
* ts-transmux, which already splits NALs in its Worker and returns the SEI
|
|
4
|
+
* caption bytes it finds, and nal-scan, which walks an fMP4 mdat for the same
|
|
5
|
+
* bytes. Both deliver here; text-cea608 registers the one consumer that
|
|
6
|
+
* decodes them. Nobody imports text-cea608 to do it, and when no caption
|
|
7
|
+
* stage has registered, `wanted()` is false and neither source does the work.
|
|
8
|
+
*/
|
|
9
|
+
import type { CcTriple } from './sei.js';
|
|
10
|
+
/** One access unit's caption triples at its presentation time, in seconds. */
|
|
11
|
+
export interface CcPacket {
|
|
12
|
+
readonly time: number;
|
|
13
|
+
readonly triples: readonly CcTriple[];
|
|
14
|
+
}
|
|
15
|
+
export type CaptionConsumer = (packets: readonly CcPacket[]) => void;
|
|
16
|
+
/** Registers the caption decoder. Returns an unregister for stage teardown. */
|
|
17
|
+
export declare function registerCaptionConsumer(fn: CaptionConsumer): () => void;
|
|
18
|
+
/** True when a caption stage is loaded, so a SEI source should extract. */
|
|
19
|
+
export declare function captionsWanted(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Hands extracted caption packets to the registered decoder. When both a
|
|
22
|
+
* ts-transmux and a nal-scan source are composed they extract the same SEI
|
|
23
|
+
* from the same segment back to back; an identical batch arriving twice in a
|
|
24
|
+
* row is dropped so the decoder never sees a caption doubled.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deliverCaptions(packets: readonly CcPacket[]): void;
|
|
27
|
+
//# sourceMappingURL=captions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions.d.ts","sourceRoot":"","sources":["../../src/containers/captions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,CAAC;AAKrE,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,IAAI,CAMvE;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAQD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAMlE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
let consumer = null;
|
|
2
|
+
let lastFingerprint = '';
|
|
3
|
+
/** Registers the caption decoder. Returns an unregister for stage teardown. */
|
|
4
|
+
export function registerCaptionConsumer(fn) {
|
|
5
|
+
consumer = fn;
|
|
6
|
+
lastFingerprint = '';
|
|
7
|
+
return () => {
|
|
8
|
+
if (consumer === fn)
|
|
9
|
+
consumer = null;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** True when a caption stage is loaded, so a SEI source should extract. */
|
|
13
|
+
export function captionsWanted() {
|
|
14
|
+
return consumer !== null;
|
|
15
|
+
}
|
|
16
|
+
function fingerprint(packets) {
|
|
17
|
+
const first = packets[0];
|
|
18
|
+
const last = packets[packets.length - 1];
|
|
19
|
+
return `${packets.length}:${first?.time}:${first?.triples[0]?.a}:${last?.time}:${last?.triples[0]?.b}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Hands extracted caption packets to the registered decoder. When both a
|
|
23
|
+
* ts-transmux and a nal-scan source are composed they extract the same SEI
|
|
24
|
+
* from the same segment back to back; an identical batch arriving twice in a
|
|
25
|
+
* row is dropped so the decoder never sees a caption doubled.
|
|
26
|
+
*/
|
|
27
|
+
export function deliverCaptions(packets) {
|
|
28
|
+
if (packets.length === 0 || consumer === null)
|
|
29
|
+
return;
|
|
30
|
+
const print = fingerprint(packets);
|
|
31
|
+
if (print === lastFingerprint)
|
|
32
|
+
return;
|
|
33
|
+
lastFingerprint = print;
|
|
34
|
+
consumer(packets);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=captions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions.js","sourceRoot":"","sources":["../../src/containers/captions.ts"],"names":[],"mappings":"AAkBA,IAAI,QAAQ,GAA2B,IAAI,CAAC;AAC5C,IAAI,eAAe,GAAG,EAAE,CAAC;AAEzB,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,EAAmB;IACzD,QAAQ,GAAG,EAAE,CAAC;IACd,eAAe,GAAG,EAAE,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ,KAAK,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,OAA4B;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO;IACtD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO;IACtC,eAAe,GAAG,KAAK,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives the exact codecs= string from an init segment's moov. Manifests
|
|
3
|
+
* routinely omit or misstate CODECS, and isTypeSupported wants exact
|
|
4
|
+
* strings; when the manifest and the probe disagree, the probe wins,
|
|
5
|
+
* because the probe read the actual bytes the decoder will see.
|
|
6
|
+
*/
|
|
7
|
+
import type { MatteboxError } from '../../types/error.js';
|
|
8
|
+
export interface ProbedTrack {
|
|
9
|
+
/** The stsd sample entry fourcc, such as 'avc1' or 'mp4a'. */
|
|
10
|
+
readonly format: string;
|
|
11
|
+
/** The derived RFC 6381 codec string, or null when underivable. */
|
|
12
|
+
readonly codec: string | null;
|
|
13
|
+
readonly kind: 'video' | 'audio' | 'unknown';
|
|
14
|
+
}
|
|
15
|
+
export interface ProbeResult {
|
|
16
|
+
readonly tracks: readonly ProbedTrack[];
|
|
17
|
+
readonly codecs: readonly string[];
|
|
18
|
+
/** Ready for isTypeSupported, or null when nothing was derivable. */
|
|
19
|
+
readonly mimeType: string | null;
|
|
20
|
+
readonly error: MatteboxError | null;
|
|
21
|
+
}
|
|
22
|
+
/** Probes every stsd sample entry in the init segment's moov. */
|
|
23
|
+
export declare function probeInitSegment(init: Uint8Array): ProbeResult;
|
|
24
|
+
export interface CodecReconciliation {
|
|
25
|
+
/** The string to hand to addSourceBuffer. */
|
|
26
|
+
readonly contentType: string;
|
|
27
|
+
/** True when the manifest and the probe disagreed; emit a warning. */
|
|
28
|
+
readonly mismatch: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The probe wins over the manifest: it read the bytes the decoder will
|
|
32
|
+
* decode. The mismatch flag exists so the discrepancy stays visible.
|
|
33
|
+
*/
|
|
34
|
+
export declare function reconcileCodecs(manifestContentType: string | null, probe: ProbeResult): CodecReconciliation;
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/containers/codec-probe/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAoLD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAmC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,EAClC,KAAK,EAAE,WAAW,GACjB,mBAAmB,CAYrB"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { findBoxes, fullBox, walkBoxes } from '../mp4-box/index.js';
|
|
2
|
+
const VIDEO_FORMATS = new Set(['avc1', 'avc3', 'hvc1', 'hev1', 'vp09', 'av01']);
|
|
3
|
+
const AUDIO_FORMATS = new Set(['mp4a', 'Opus', 'opus', 'ac-3', 'ec-3']);
|
|
4
|
+
/** Sample entry fixed-part sizes before the codec config child boxes. */
|
|
5
|
+
const VISUAL_ENTRY_HEADER = 8 + 70;
|
|
6
|
+
const AUDIO_ENTRY_HEADER = 8 + 20;
|
|
7
|
+
function hex(byte) {
|
|
8
|
+
return byte.toString(16).padStart(2, '0');
|
|
9
|
+
}
|
|
10
|
+
function childBox(entry, fixedOffset, type) {
|
|
11
|
+
// Child boxes start after the sample entry's fixed part. A malformed or
|
|
12
|
+
// versioned entry shifts them; scan forward conservatively.
|
|
13
|
+
for (const offset of [fixedOffset, fixedOffset + 16]) {
|
|
14
|
+
let at = offset;
|
|
15
|
+
const view = new DataView(entry.buffer, entry.byteOffset, entry.byteLength);
|
|
16
|
+
while (at + 8 <= entry.byteLength) {
|
|
17
|
+
const size = view.getUint32(at);
|
|
18
|
+
if (size < 8 || at + size > entry.byteLength)
|
|
19
|
+
break;
|
|
20
|
+
const name = String.fromCharCode(entry[at + 4] ?? 0, entry[at + 5] ?? 0, entry[at + 6] ?? 0, entry[at + 7] ?? 0);
|
|
21
|
+
if (name === type)
|
|
22
|
+
return entry.subarray(at + 8, at + size);
|
|
23
|
+
at += size;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
/** avcC: profile, constraint flags, level -> avc1.PPCCLL. ISO 14496-15 §5.3. */
|
|
29
|
+
function avcCodec(format, entry) {
|
|
30
|
+
const config = childBox(entry, VISUAL_ENTRY_HEADER, 'avcC');
|
|
31
|
+
if (config === null || config.byteLength < 4)
|
|
32
|
+
return null;
|
|
33
|
+
return `${format}.${hex(config[1])}${hex(config[2])}${hex(config[3])}`;
|
|
34
|
+
}
|
|
35
|
+
/** hvcC -> the full hvc1/hev1 form. ISO 14496-15 annex E. */
|
|
36
|
+
function hevcCodec(format, entry) {
|
|
37
|
+
const c = childBox(entry, VISUAL_ENTRY_HEADER, 'hvcC');
|
|
38
|
+
if (c === null || c.byteLength < 13)
|
|
39
|
+
return null;
|
|
40
|
+
const profileSpace = (c[1] >> 6) & 0x3;
|
|
41
|
+
const tier = (c[1] >> 5) & 0x1;
|
|
42
|
+
const profileIdc = c[1] & 0x1f;
|
|
43
|
+
const compat = (c[2] << 24) |
|
|
44
|
+
(c[3] << 16) |
|
|
45
|
+
(c[4] << 8) |
|
|
46
|
+
c[5];
|
|
47
|
+
// The compatibility flags are written bit-reversed in the codec string.
|
|
48
|
+
let reversed = 0;
|
|
49
|
+
for (let i = 0; i < 32; i += 1) {
|
|
50
|
+
reversed = (reversed << 1) | ((compat >>> i) & 1);
|
|
51
|
+
}
|
|
52
|
+
const levelIdc = c[12];
|
|
53
|
+
const constraints = [];
|
|
54
|
+
for (let i = 6; i < 12; i += 1) {
|
|
55
|
+
constraints.push(c[i].toString(16).toUpperCase());
|
|
56
|
+
}
|
|
57
|
+
while (constraints.length > 1 && constraints[constraints.length - 1] === '0') {
|
|
58
|
+
constraints.pop();
|
|
59
|
+
}
|
|
60
|
+
const space = ['', 'A', 'B', 'C'][profileSpace] ?? '';
|
|
61
|
+
return `${format}.${space}${profileIdc}.${(reversed >>> 0).toString(16).toUpperCase()}.${tier === 1 ? 'H' : 'L'}${levelIdc}.${constraints.join('.')}`;
|
|
62
|
+
}
|
|
63
|
+
/** esds -> mp4a.40.N via the DecoderSpecificInfo audio object type. ISO 14496-1 §7.2.6. */
|
|
64
|
+
function aacCodec(entry) {
|
|
65
|
+
const esds = childBox(entry, AUDIO_ENTRY_HEADER, 'esds');
|
|
66
|
+
if (esds === null)
|
|
67
|
+
return null;
|
|
68
|
+
const body = fullBox(esds)?.body;
|
|
69
|
+
if (body === undefined)
|
|
70
|
+
return null;
|
|
71
|
+
// Descriptors: tag byte, then an expandable length (0x80-continued).
|
|
72
|
+
function descriptor(data, tag) {
|
|
73
|
+
let at = 0;
|
|
74
|
+
while (at + 2 <= data.byteLength) {
|
|
75
|
+
const thisTag = data[at];
|
|
76
|
+
at += 1;
|
|
77
|
+
let size = 0;
|
|
78
|
+
let more = true;
|
|
79
|
+
while (more && at < data.byteLength) {
|
|
80
|
+
const byte = data[at];
|
|
81
|
+
size = (size << 7) | (byte & 0x7f);
|
|
82
|
+
more = (byte & 0x80) !== 0;
|
|
83
|
+
at += 1;
|
|
84
|
+
}
|
|
85
|
+
if (at + size > data.byteLength)
|
|
86
|
+
return null;
|
|
87
|
+
if (thisTag === tag)
|
|
88
|
+
return data.subarray(at, at + size);
|
|
89
|
+
at += size;
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const es = descriptor(body, 0x03);
|
|
94
|
+
if (es === null)
|
|
95
|
+
return null;
|
|
96
|
+
// ES_Descriptor: ES_ID (2) + flags byte, then optional fields none of
|
|
97
|
+
// which appear in practice for CMAF.
|
|
98
|
+
const decoderConfig = descriptor(es.subarray(3), 0x04);
|
|
99
|
+
if (decoderConfig === null || decoderConfig.byteLength < 1)
|
|
100
|
+
return null;
|
|
101
|
+
const objectType = decoderConfig[0];
|
|
102
|
+
const specific = descriptor(decoderConfig.subarray(13), 0x05);
|
|
103
|
+
if (objectType === 0x40 && specific !== null && specific.byteLength >= 1) {
|
|
104
|
+
const audioObjectType = (specific[0] >> 3) & 0x1f;
|
|
105
|
+
return `mp4a.40.${audioObjectType}`;
|
|
106
|
+
}
|
|
107
|
+
return `mp4a.${hex(objectType)}`;
|
|
108
|
+
}
|
|
109
|
+
/** vpcC -> vp09.PP.LL.DD. VP9-in-ISOBMFF binding. */
|
|
110
|
+
function vp9Codec(entry) {
|
|
111
|
+
const c = childBox(entry, VISUAL_ENTRY_HEADER, 'vpcC');
|
|
112
|
+
const body = c === null ? null : (fullBox(c)?.body ?? null);
|
|
113
|
+
if (body === null || body.byteLength < 2)
|
|
114
|
+
return null;
|
|
115
|
+
const profile = body[0];
|
|
116
|
+
const level = body[1];
|
|
117
|
+
const bitDepth = ((body[2] ?? 8) >> 4) & 0xf;
|
|
118
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
119
|
+
return `vp09.${pad(profile)}.${pad(level)}.${pad(bitDepth)}`;
|
|
120
|
+
}
|
|
121
|
+
/** av1C -> av01.P.LLT.DD. AV1-in-ISOBMFF binding. */
|
|
122
|
+
function av1Codec(entry) {
|
|
123
|
+
const c = childBox(entry, VISUAL_ENTRY_HEADER, 'av1C');
|
|
124
|
+
if (c === null || c.byteLength < 2)
|
|
125
|
+
return null;
|
|
126
|
+
const profile = (c[1] >> 5) & 0x7;
|
|
127
|
+
const levelIdx = c[1] & 0x1f;
|
|
128
|
+
const tier = ((c[2] ?? 0) >> 7) & 0x1;
|
|
129
|
+
const highBitdepth = ((c[2] ?? 0) >> 6) & 0x1;
|
|
130
|
+
const twelveBit = ((c[2] ?? 0) >> 5) & 0x1;
|
|
131
|
+
const bitDepth = highBitdepth === 1 ? (twelveBit === 1 ? 12 : 10) : 8;
|
|
132
|
+
return `av01.${profile}.${String(levelIdx).padStart(2, '0')}${tier === 1 ? 'H' : 'M'}.${String(bitDepth).padStart(2, '0')}`;
|
|
133
|
+
}
|
|
134
|
+
function deriveTrack(format, entry) {
|
|
135
|
+
const kind = VIDEO_FORMATS.has(format)
|
|
136
|
+
? 'video'
|
|
137
|
+
: AUDIO_FORMATS.has(format)
|
|
138
|
+
? 'audio'
|
|
139
|
+
: 'unknown';
|
|
140
|
+
let codec = null;
|
|
141
|
+
switch (format) {
|
|
142
|
+
case 'avc1':
|
|
143
|
+
case 'avc3':
|
|
144
|
+
codec = avcCodec(format, entry);
|
|
145
|
+
break;
|
|
146
|
+
case 'hvc1':
|
|
147
|
+
case 'hev1':
|
|
148
|
+
codec = hevcCodec(format, entry);
|
|
149
|
+
break;
|
|
150
|
+
case 'mp4a':
|
|
151
|
+
codec = aacCodec(entry);
|
|
152
|
+
break;
|
|
153
|
+
case 'vp09':
|
|
154
|
+
codec = vp9Codec(entry);
|
|
155
|
+
break;
|
|
156
|
+
case 'av01':
|
|
157
|
+
codec = av1Codec(entry);
|
|
158
|
+
break;
|
|
159
|
+
case 'Opus':
|
|
160
|
+
case 'opus':
|
|
161
|
+
codec = 'opus';
|
|
162
|
+
break;
|
|
163
|
+
case 'ac-3':
|
|
164
|
+
codec = 'ac-3';
|
|
165
|
+
break;
|
|
166
|
+
case 'ec-3':
|
|
167
|
+
codec = 'ec-3';
|
|
168
|
+
break;
|
|
169
|
+
default:
|
|
170
|
+
codec = null;
|
|
171
|
+
}
|
|
172
|
+
return { format, codec, kind };
|
|
173
|
+
}
|
|
174
|
+
/** Probes every stsd sample entry in the init segment's moov. */
|
|
175
|
+
export function probeInitSegment(init) {
|
|
176
|
+
const walk = walkBoxes(init, () => undefined);
|
|
177
|
+
if (walk.error !== null) {
|
|
178
|
+
return { tracks: [], codecs: [], mimeType: null, error: walk.error };
|
|
179
|
+
}
|
|
180
|
+
const tracks = [];
|
|
181
|
+
const stsds = findBoxes(init, 'moov/trak/mdia/minf/stbl/stsd');
|
|
182
|
+
for (const stsd of stsds) {
|
|
183
|
+
const header = fullBox(stsd.payload);
|
|
184
|
+
if (header === null || header.body.byteLength < 4)
|
|
185
|
+
continue;
|
|
186
|
+
const view = new DataView(header.body.buffer, header.body.byteOffset, header.body.byteLength);
|
|
187
|
+
const count = view.getUint32(0);
|
|
188
|
+
let at = 4;
|
|
189
|
+
for (let i = 0; i < count && at + 8 <= header.body.byteLength; i += 1) {
|
|
190
|
+
const size = view.getUint32(at);
|
|
191
|
+
if (size < 8 || at + size > header.body.byteLength)
|
|
192
|
+
break;
|
|
193
|
+
const format = String.fromCharCode(header.body[at + 4] ?? 0, header.body[at + 5] ?? 0, header.body[at + 6] ?? 0, header.body[at + 7] ?? 0);
|
|
194
|
+
tracks.push(deriveTrack(format, header.body.subarray(at + 8, at + size)));
|
|
195
|
+
at += size;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const codecs = tracks.map((t) => t.codec).filter((c) => c !== null);
|
|
199
|
+
const hasVideo = tracks.some((t) => t.kind === 'video');
|
|
200
|
+
const mimeType = codecs.length === 0
|
|
201
|
+
? null
|
|
202
|
+
: `${hasVideo ? 'video' : 'audio'}/mp4; codecs="${codecs.join(',')}"`;
|
|
203
|
+
return { tracks, codecs, mimeType, error: null };
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* The probe wins over the manifest: it read the bytes the decoder will
|
|
207
|
+
* decode. The mismatch flag exists so the discrepancy stays visible.
|
|
208
|
+
*/
|
|
209
|
+
export function reconcileCodecs(manifestContentType, probe) {
|
|
210
|
+
if (probe.mimeType === null) {
|
|
211
|
+
return { contentType: manifestContentType ?? '', mismatch: false };
|
|
212
|
+
}
|
|
213
|
+
if (manifestContentType === null) {
|
|
214
|
+
return { contentType: probe.mimeType, mismatch: false };
|
|
215
|
+
}
|
|
216
|
+
const normalize = (s) => s.toLowerCase().replaceAll(/\s+/g, '');
|
|
217
|
+
return {
|
|
218
|
+
contentType: probe.mimeType,
|
|
219
|
+
mismatch: normalize(manifestContentType) !== normalize(probe.mimeType),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/codec-probe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal fragmented-ISOBMFF writer, the counterpart to mp4-box's reader.
|
|
3
|
+
* It emits exactly the boxes MSE needs to accept a fragment: an init segment
|
|
4
|
+
* (ftyp + a moov with one trak per elementary stream and an mvex) and a
|
|
5
|
+
* media segment (moof + mdat). A muxed TS segment becomes one init with a
|
|
6
|
+
* video trak and an audio trak, so a single SourceBuffer decodes both.
|
|
7
|
+
* Nothing here reads the clock or a random source: identical samples in
|
|
8
|
+
* produce identical bytes out, which is what the golden fixtures pin.
|
|
9
|
+
*
|
|
10
|
+
* ts-transmux and packed-audio both import this module. It is a shared
|
|
11
|
+
* container utility, not a stage, so neither imports the other.
|
|
12
|
+
*/
|
|
13
|
+
/** An AVC video track, configured from the SPS/PPS the demux extracted. */
|
|
14
|
+
export interface VideoTrackConfig {
|
|
15
|
+
readonly id: number;
|
|
16
|
+
readonly kind: 'video';
|
|
17
|
+
/** 90 kHz for MPEG-TS sources. */
|
|
18
|
+
readonly timescale: number;
|
|
19
|
+
/** The sequence parameter set, one raw NAL with no start code or length prefix. */
|
|
20
|
+
readonly sps: Uint8Array;
|
|
21
|
+
readonly pps: Uint8Array;
|
|
22
|
+
readonly width: number;
|
|
23
|
+
readonly height: number;
|
|
24
|
+
}
|
|
25
|
+
/** An AAC audio track, configured from an ADTS header or an AudioSpecificConfig. */
|
|
26
|
+
export interface AudioTrackConfig {
|
|
27
|
+
readonly id: number;
|
|
28
|
+
readonly kind: 'audio';
|
|
29
|
+
/** The sampling frequency in Hz; also the track timescale. */
|
|
30
|
+
readonly timescale: number;
|
|
31
|
+
/** MPEG-4 Audio Object Type. AAC-LC is 2. */
|
|
32
|
+
readonly audioObjectType: number;
|
|
33
|
+
/** Index into the MPEG-4 sampling frequency table. */
|
|
34
|
+
readonly samplingFrequencyIndex: number;
|
|
35
|
+
readonly channelConfig: number;
|
|
36
|
+
}
|
|
37
|
+
export type TrackConfig = VideoTrackConfig | AudioTrackConfig;
|
|
38
|
+
/** One access unit: length-prefixed AVCC NALs for video, one raw AAC frame for audio. */
|
|
39
|
+
export interface Sample {
|
|
40
|
+
readonly data: Uint8Array;
|
|
41
|
+
/** Duration in track timescale units. */
|
|
42
|
+
readonly duration: number;
|
|
43
|
+
/** Composition-time offset for B-frame reordering; zero for audio. */
|
|
44
|
+
readonly cts: number;
|
|
45
|
+
readonly isKeyframe: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** One track's samples for a media segment, timed from its own decode time. */
|
|
48
|
+
export interface TrackFragment {
|
|
49
|
+
readonly trackId: number;
|
|
50
|
+
readonly baseMediaDecodeTime: number;
|
|
51
|
+
readonly samples: readonly Sample[];
|
|
52
|
+
}
|
|
53
|
+
/** The init segment: ftyp then a moov describing every track. */
|
|
54
|
+
export declare function writeInitSegment(configs: readonly TrackConfig[]): Uint8Array;
|
|
55
|
+
/**
|
|
56
|
+
* The moof/mdat pair for one or more track fragments. Each trun's data offset
|
|
57
|
+
* is back-patched once the moof size is known, so the offsets are exact
|
|
58
|
+
* regardless of how many tracks the fragment carries or how large the trafs
|
|
59
|
+
* grew. The mdat interleaves tracks in the order given.
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeMediaSegment(sequenceNumber: number, fragments: readonly TrackFragment[]): Uint8Array;
|
|
62
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/containers/fmp4/writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE9D,yFAAyF;AACzF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAuQD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,UAAU,CAK5E;AA4BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,aAAa,EAAE,GAClC,UAAU,CA2CZ"}
|