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,237 @@
|
|
|
1
|
+
import _objectSpread2 from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js";
|
|
2
|
+
import _asyncToGenerator from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/asyncToGenerator.js";
|
|
3
|
+
import { keySystemHandlers, normalizeSystemId } from "../drm-shared.js";
|
|
4
|
+
//#region src/stages/eme-core/index.ts
|
|
5
|
+
const CLEARKEY = "org.w3.clearkey";
|
|
6
|
+
function bytesToBase64Url(bytes) {
|
|
7
|
+
let binary = "";
|
|
8
|
+
for (const b of bytes) binary += String.fromCharCode(b);
|
|
9
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
10
|
+
}
|
|
11
|
+
/** A ClearKey handler: the license is a JSON the app answers from its keys. */
|
|
12
|
+
function clearKeyHandler(clearKeys) {
|
|
13
|
+
return {
|
|
14
|
+
keySystem: CLEARKEY,
|
|
15
|
+
systemIds: ["1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"],
|
|
16
|
+
initDataTypes: ["cenc", "keyids"],
|
|
17
|
+
localLicense: true,
|
|
18
|
+
buildLicenseRequest(message) {
|
|
19
|
+
var _request$kids;
|
|
20
|
+
const keys = ((_request$kids = JSON.parse(new TextDecoder().decode(message)).kids) !== null && _request$kids !== void 0 ? _request$kids : []).filter((kid) => clearKeys[kid] !== void 0).map((kid) => ({
|
|
21
|
+
kty: "oct",
|
|
22
|
+
kid,
|
|
23
|
+
k: clearKeys[kid]
|
|
24
|
+
}));
|
|
25
|
+
return new TextEncoder().encode(JSON.stringify({
|
|
26
|
+
keys,
|
|
27
|
+
type: "temporary"
|
|
28
|
+
}));
|
|
29
|
+
},
|
|
30
|
+
parseLicenseResponse(response) {
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** The MSE capability config for requestMediaKeySystemAccess. */
|
|
36
|
+
function accessConfig(handler) {
|
|
37
|
+
return (handler.robustness && handler.robustness.length > 0 ? handler.robustness : [""]).map((robustness) => ({
|
|
38
|
+
initDataTypes: [...handler.initDataTypes],
|
|
39
|
+
videoCapabilities: [{
|
|
40
|
+
contentType: "video/mp4; codecs=\"avc1.42c01e\"",
|
|
41
|
+
robustness
|
|
42
|
+
}, {
|
|
43
|
+
contentType: "video/mp4; codecs=\"vp09.00.10.08\"",
|
|
44
|
+
robustness
|
|
45
|
+
}],
|
|
46
|
+
audioCapabilities: [{
|
|
47
|
+
contentType: "audio/mp4; codecs=\"mp4a.40.2\"",
|
|
48
|
+
robustness
|
|
49
|
+
}, {
|
|
50
|
+
contentType: "audio/mp4; codecs=\"opus\"",
|
|
51
|
+
robustness
|
|
52
|
+
}]
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
function emeCore(options = {}) {
|
|
56
|
+
return {
|
|
57
|
+
name: "eme-core",
|
|
58
|
+
provides: ["eme-core"],
|
|
59
|
+
requires: ["mse"],
|
|
60
|
+
install(ctx) {
|
|
61
|
+
var _options$licenseUrl;
|
|
62
|
+
const element = ctx.element;
|
|
63
|
+
let mediaKeys = null;
|
|
64
|
+
let keySystem = null;
|
|
65
|
+
let handler = null;
|
|
66
|
+
let licenseUrl = (_options$licenseUrl = options.licenseUrl) !== null && _options$licenseUrl !== void 0 ? _options$licenseUrl : null;
|
|
67
|
+
const sessionsByKey = /* @__PURE__ */ new Map();
|
|
68
|
+
const statuses = /* @__PURE__ */ new Map();
|
|
69
|
+
const initDataSeen = /* @__PURE__ */ new Set();
|
|
70
|
+
let disposed = false;
|
|
71
|
+
ctx.registerNamespace("drm", {
|
|
72
|
+
get keySystem() {
|
|
73
|
+
return keySystem;
|
|
74
|
+
},
|
|
75
|
+
get sessions() {
|
|
76
|
+
return [...statuses.entries()].map(([keyId, status]) => ({
|
|
77
|
+
keyId,
|
|
78
|
+
status
|
|
79
|
+
}));
|
|
80
|
+
},
|
|
81
|
+
setLicenseUrl(url) {
|
|
82
|
+
licenseUrl = url;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
function fail(code, recoverable, cause) {
|
|
86
|
+
ctx.emit("error", _objectSpread2({
|
|
87
|
+
category: "drm",
|
|
88
|
+
code,
|
|
89
|
+
fatal: !recoverable,
|
|
90
|
+
recoverable
|
|
91
|
+
}, cause !== void 0 ? { context: { message: String(cause) } } : {}));
|
|
92
|
+
}
|
|
93
|
+
/** All handlers eme-core can use: ClearKey plus whatever registered. */
|
|
94
|
+
function allHandlers() {
|
|
95
|
+
const registered = keySystemHandlers();
|
|
96
|
+
const clearKeys = options.clearKeys;
|
|
97
|
+
return clearKeys !== void 0 ? [clearKeyHandler(clearKeys), ...registered] : [...registered];
|
|
98
|
+
}
|
|
99
|
+
/** Chooses and initializes a key system for the given systemIds. */
|
|
100
|
+
function ensureKeys(_x) {
|
|
101
|
+
return _ensureKeys.apply(this, arguments);
|
|
102
|
+
}
|
|
103
|
+
function _ensureKeys() {
|
|
104
|
+
_ensureKeys = _asyncToGenerator(function* (preferredSystemIds) {
|
|
105
|
+
if (mediaKeys !== null) return true;
|
|
106
|
+
const handlers = allHandlers();
|
|
107
|
+
const ordered = options.preferredKeySystems ? [...handlers].sort((a, b) => options.preferredKeySystems.indexOf(a.keySystem) - options.preferredKeySystems.indexOf(b.keySystem)) : handlers;
|
|
108
|
+
const candidates = preferredSystemIds.length > 0 ? ordered.filter((h) => h.systemIds.some((id) => preferredSystemIds.includes(id))) : ordered;
|
|
109
|
+
for (const candidate of candidates.length > 0 ? candidates : ordered) try {
|
|
110
|
+
var _candidate$fairplay;
|
|
111
|
+
const keys = yield (yield navigator.requestMediaKeySystemAccess(candidate.keySystem, accessConfig(candidate))).createMediaKeys();
|
|
112
|
+
if (disposed) return false;
|
|
113
|
+
if (((_candidate$fairplay = candidate.fairplay) === null || _candidate$fairplay === void 0 ? void 0 : _candidate$fairplay.certificateUrl) !== void 0) {
|
|
114
|
+
const cert = yield ctx.request(candidate.fairplay.certificateUrl, {}).then((r) => r.arrayBuffer());
|
|
115
|
+
yield keys.setServerCertificate(cert);
|
|
116
|
+
}
|
|
117
|
+
yield element.setMediaKeys(keys);
|
|
118
|
+
mediaKeys = keys;
|
|
119
|
+
keySystem = candidate.keySystem;
|
|
120
|
+
handler = candidate;
|
|
121
|
+
ctx.emit("drm:keysystem", { keySystem });
|
|
122
|
+
return true;
|
|
123
|
+
} catch (_unused) {}
|
|
124
|
+
fail("DRM_KEY_SYSTEM_UNAVAILABLE", false);
|
|
125
|
+
return false;
|
|
126
|
+
});
|
|
127
|
+
return _ensureKeys.apply(this, arguments);
|
|
128
|
+
}
|
|
129
|
+
/** Opens a session for one init data blob, deduped by key id. */
|
|
130
|
+
function openSession(_x2, _x3) {
|
|
131
|
+
return _openSession.apply(this, arguments);
|
|
132
|
+
}
|
|
133
|
+
function _openSession() {
|
|
134
|
+
_openSession = _asyncToGenerator(function* (initDataType, initData) {
|
|
135
|
+
if (mediaKeys === null || handler === null || disposed) return;
|
|
136
|
+
const fingerprint = `${initDataType}:${bytesToBase64Url(new Uint8Array(initData))}`;
|
|
137
|
+
if (initDataSeen.has(fingerprint)) return;
|
|
138
|
+
initDataSeen.add(fingerprint);
|
|
139
|
+
let session;
|
|
140
|
+
try {
|
|
141
|
+
session = mediaKeys.createSession("temporary");
|
|
142
|
+
} catch (err) {
|
|
143
|
+
fail("DRM_SESSION_FAILED", false, err);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
session.addEventListener("message", (event) => {
|
|
147
|
+
onMessage(session, event);
|
|
148
|
+
});
|
|
149
|
+
session.addEventListener("keystatuseschange", () => onKeyStatus(session));
|
|
150
|
+
try {
|
|
151
|
+
yield session.generateRequest(initDataType, initData);
|
|
152
|
+
} catch (err) {
|
|
153
|
+
fail("DRM_INIT_DATA_INVALID", false, err);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
return _openSession.apply(this, arguments);
|
|
157
|
+
}
|
|
158
|
+
function onMessage(_x4, _x5) {
|
|
159
|
+
return _onMessage.apply(this, arguments);
|
|
160
|
+
}
|
|
161
|
+
function _onMessage() {
|
|
162
|
+
_onMessage = _asyncToGenerator(function* (session, event) {
|
|
163
|
+
if (handler === null) return;
|
|
164
|
+
try {
|
|
165
|
+
var _options$licenseUrls, _options$licenseUrls2, _keySystem2;
|
|
166
|
+
let body = handler.buildLicenseRequest(event.message);
|
|
167
|
+
if (handler.localLicense === true) {
|
|
168
|
+
yield session.update(body instanceof Uint8Array ? new Uint8Array(body) : body);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (options.requestFilter !== void 0) {
|
|
172
|
+
var _keySystem;
|
|
173
|
+
body = options.requestFilter(new Uint8Array(body), (_keySystem = keySystem) !== null && _keySystem !== void 0 ? _keySystem : "");
|
|
174
|
+
}
|
|
175
|
+
const url = (_options$licenseUrls = (_options$licenseUrls2 = options.licenseUrls) === null || _options$licenseUrls2 === void 0 ? void 0 : _options$licenseUrls2[(_keySystem2 = keySystem) !== null && _keySystem2 !== void 0 ? _keySystem2 : ""]) !== null && _options$licenseUrls !== void 0 ? _options$licenseUrls : licenseUrl;
|
|
176
|
+
if (url === null || url === void 0) {
|
|
177
|
+
fail("DRM_LICENSE_FAILED", false, "no license url");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const response = yield ctx.request(url, {
|
|
181
|
+
method: "POST",
|
|
182
|
+
headers: _objectSpread2({}, handler.licenseHeaders),
|
|
183
|
+
body
|
|
184
|
+
});
|
|
185
|
+
if (!response.ok) {
|
|
186
|
+
fail("DRM_LICENSE_FAILED", true, `status ${response.status}`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const raw = handler.parseLicenseResponse(yield response.arrayBuffer());
|
|
190
|
+
yield session.update(raw instanceof Uint8Array ? new Uint8Array(raw) : raw);
|
|
191
|
+
} catch (err) {
|
|
192
|
+
fail("DRM_LICENSE_FAILED", true, err);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return _onMessage.apply(this, arguments);
|
|
196
|
+
}
|
|
197
|
+
function onKeyStatus(session) {
|
|
198
|
+
session.keyStatuses.forEach((status, keyIdBuffer) => {
|
|
199
|
+
const keyId = bytesToBase64Url(new Uint8Array(keyIdBuffer));
|
|
200
|
+
statuses.set(keyId, status);
|
|
201
|
+
sessionsByKey.set(keyId, session);
|
|
202
|
+
ctx.emit("drm:keystatus", {
|
|
203
|
+
keyId,
|
|
204
|
+
status
|
|
205
|
+
});
|
|
206
|
+
if (status === "expired") fail("DRM_KEY_EXPIRED", true);
|
|
207
|
+
else if (status === "output-restricted") fail("DRM_OUTPUT_RESTRICTED", false);
|
|
208
|
+
else if (status === "internal-error") fail("DRM_KEY_STATUS_ERROR", false);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const onEncrypted = (event) => {
|
|
212
|
+
const e = event;
|
|
213
|
+
if (e.initData === null) return;
|
|
214
|
+
ensureKeys([]).then((ok) => {
|
|
215
|
+
if (ok) openSession(e.initDataType, e.initData);
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
element.addEventListener("encrypted", onEncrypted);
|
|
219
|
+
const offManifest = ctx.on("presentation:protection", (payload) => {
|
|
220
|
+
const schemes = payload;
|
|
221
|
+
ensureKeys(schemes.map((s) => normalizeSystemId(s.systemId)).filter((id) => id !== null)).then((ok) => {
|
|
222
|
+
if (!ok) return;
|
|
223
|
+
for (const scheme of schemes) if (scheme.initData !== null && scheme.initDataType !== null) openSession(scheme.initDataType, scheme.initData);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
return () => {
|
|
227
|
+
disposed = true;
|
|
228
|
+
element.removeEventListener("encrypted", onEncrypted);
|
|
229
|
+
offManifest();
|
|
230
|
+
for (const session of sessionsByKey.values()) session.close().catch(() => {});
|
|
231
|
+
element.setMediaKeys(null).catch(() => {});
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//#endregion
|
|
237
|
+
export { emeCore as default };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import _objectSpread2 from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/objectSpread2.js";
|
|
2
|
+
import { registerKeySystem } from "../drm-shared.js";
|
|
3
|
+
//#region src/stages/eme-fairplay/index.ts
|
|
4
|
+
const FAIRPLAY_SYSTEM_ID = "94ce86fb-07ff-4f43-adb8-93d2fa968ca2";
|
|
5
|
+
/** The content id from a skd:// init data blob: the URI's opaque tail. */
|
|
6
|
+
function contentIdFromSkd(initData) {
|
|
7
|
+
const text = new TextDecoder().decode(initData);
|
|
8
|
+
const match = /skd:\/\/(.+)$/.exec(text.trim());
|
|
9
|
+
return match !== null ? match[1] : text.trim();
|
|
10
|
+
}
|
|
11
|
+
/** Wraps the SPC as the `spc=` form body Apple's key servers expect. */
|
|
12
|
+
function buildSpcRequest(message) {
|
|
13
|
+
let binary = "";
|
|
14
|
+
for (const b of new Uint8Array(message)) binary += String.fromCharCode(b);
|
|
15
|
+
const spc = btoa(binary);
|
|
16
|
+
return new TextEncoder().encode(`spc=${encodeURIComponent(spc)}`);
|
|
17
|
+
}
|
|
18
|
+
/** Decodes a CKC form/base64 response into the bytes session.update wants. */
|
|
19
|
+
function parseCkcResponse(response) {
|
|
20
|
+
var _exec$, _exec;
|
|
21
|
+
const text = new TextDecoder().decode(response).trim();
|
|
22
|
+
const b64 = (_exec$ = (_exec = /^ckc=(.+)$/.exec(text)) === null || _exec === void 0 ? void 0 : _exec[1]) !== null && _exec$ !== void 0 ? _exec$ : /^[A-Za-z0-9+/=]+$/.test(text) ? text : null;
|
|
23
|
+
if (b64 === null) return response;
|
|
24
|
+
try {
|
|
25
|
+
const binary = atob(decodeURIComponent(b64));
|
|
26
|
+
const bytes = new Uint8Array(binary.length);
|
|
27
|
+
for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);
|
|
28
|
+
return bytes;
|
|
29
|
+
} catch (_unused) {
|
|
30
|
+
return response;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function emeFairplay(options = {}) {
|
|
34
|
+
return {
|
|
35
|
+
name: "eme-fairplay",
|
|
36
|
+
provides: ["eme-fairplay"],
|
|
37
|
+
requires: ["eme-core"],
|
|
38
|
+
install() {
|
|
39
|
+
registerKeySystem({
|
|
40
|
+
keySystem: "com.apple.fps",
|
|
41
|
+
systemIds: [FAIRPLAY_SYSTEM_ID],
|
|
42
|
+
initDataTypes: ["sinf", "skd"],
|
|
43
|
+
licenseHeaders: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
44
|
+
buildLicenseRequest: buildSpcRequest,
|
|
45
|
+
parseLicenseResponse: parseCkcResponse,
|
|
46
|
+
fairplay: _objectSpread2(_objectSpread2({}, options.certificateUrl !== void 0 ? { certificateUrl: options.certificateUrl } : {}), {}, { contentId: contentIdFromSkd })
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { buildSpcRequest, contentIdFromSkd, emeFairplay as default, parseCkcResponse };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { id3Cues } from "../../containers/id3.js";
|
|
2
|
+
import { createMetadataSink } from "../../kernel/sinks/metadata-sink.js";
|
|
3
|
+
//#region src/stages/meta-id3/index.ts
|
|
4
|
+
/**
|
|
5
|
+
* ID3 timed metadata as cues. A metadata rendition whose segments are ID3,
|
|
6
|
+
* or a packed-audio segment's leading ID3 tag, becomes zero-length cues on a
|
|
7
|
+
* metadata TextTrack through the same MetadataSink the emsg and DATERANGE
|
|
8
|
+
* paths use. The ID3 decoding itself lives in the container layer so this
|
|
9
|
+
* stage and packed-audio share it without importing each other.
|
|
10
|
+
*
|
|
11
|
+
* It requires `media-transform`, which ts-transmux and packed-audio both
|
|
12
|
+
* provide: ID3 only reaches the engine once one of them is decoding the
|
|
13
|
+
* legacy segments it rides in.
|
|
14
|
+
*/
|
|
15
|
+
function parseId3Segment(data, meta) {
|
|
16
|
+
return id3Cues(data, meta.start);
|
|
17
|
+
}
|
|
18
|
+
function metaId3() {
|
|
19
|
+
return {
|
|
20
|
+
name: "meta-id3",
|
|
21
|
+
provides: ["meta-id3", {
|
|
22
|
+
contentType: "metadata",
|
|
23
|
+
mimeType: "application/id3"
|
|
24
|
+
}],
|
|
25
|
+
requires: ["media-transform"],
|
|
26
|
+
install(ctx) {
|
|
27
|
+
ctx.registerParser("application/id3", parseId3Segment);
|
|
28
|
+
ctx.registerSink("metadata", ({ element }) => createMetadataSink({
|
|
29
|
+
element,
|
|
30
|
+
parse: parseId3Segment,
|
|
31
|
+
label: "ID3"
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { metaId3 as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { findBox, findBoxes, parseSidx, parseTfdt, walkBoxes } from "../../containers/mp4-box/index.js";
|
|
2
|
+
//#region src/stages/mp4-box/index.ts
|
|
3
|
+
/**
|
|
4
|
+
* mp4-box as a loadable stage. The walker is a container-layer library used
|
|
5
|
+
* across the engine; this stage exposes it on the facade as `engine.mp4box`
|
|
6
|
+
* so a composition can inspect ISOBMFF box trees at runtime, which is what the
|
|
7
|
+
* playground uses to make the module observable rather than a silent
|
|
8
|
+
* dependency. Loading it also declares the `mp4-box` capability that
|
|
9
|
+
* codec-probe and the DASH addressing stages resolve against.
|
|
10
|
+
*/
|
|
11
|
+
function mp4Box() {
|
|
12
|
+
return {
|
|
13
|
+
name: "mp4-box",
|
|
14
|
+
provides: ["mp4-box"],
|
|
15
|
+
install(ctx) {
|
|
16
|
+
ctx.registerNamespace("mp4box", {
|
|
17
|
+
walkBoxes,
|
|
18
|
+
findBox,
|
|
19
|
+
findBoxes,
|
|
20
|
+
parseTfdt,
|
|
21
|
+
parseSidx
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { mp4Box as default };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { captionsWanted, deliverCaptions } from "../../containers/captions.js";
|
|
2
|
+
import { findBox, parseTfdt } from "../../containers/mp4-box/index.js";
|
|
3
|
+
import { ccTriplesFromSei } from "../../containers/sei.js";
|
|
4
|
+
//#region src/stages/nal-scan/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* nal-scan exists only to reach captions in fMP4. On native CMAF content
|
|
7
|
+
* there is no transmux walking the NALs, so this stage does: it walks the
|
|
8
|
+
* moof and mdat, finds the SEI NAL units in each coded sample, times them
|
|
9
|
+
* from the fragment's tfdt and trun, and delivers the caption bytes to the
|
|
10
|
+
* same seam ts-transmux uses. It imports mp4-box for the box reads and the
|
|
11
|
+
* shared SEI decoder; it never imports text-cea608.
|
|
12
|
+
*
|
|
13
|
+
* It is not cheap and does not pretend to be: per entanglement #1 it loads
|
|
14
|
+
* only when a caption stage needs an fMP4 SEI source, and it does zero work
|
|
15
|
+
* when no caption consumer is registered.
|
|
16
|
+
*/
|
|
17
|
+
/** After transmux (100) so it can walk transmuxed TS output as well as native fMP4. */
|
|
18
|
+
const SCAN_ORDER = 150;
|
|
19
|
+
const DEFAULT_TIMESCALE = 9e4;
|
|
20
|
+
const SEI_NAL_TYPE = 6;
|
|
21
|
+
/** Reads sample durations and sizes from a trun, honouring its flag layout. */
|
|
22
|
+
function parseTrun(payload) {
|
|
23
|
+
const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
24
|
+
const flags = view.getUint32(0) & 16777215;
|
|
25
|
+
const sampleCount = view.getUint32(4);
|
|
26
|
+
let offset = 8;
|
|
27
|
+
if (flags & 1) offset += 4;
|
|
28
|
+
if (flags & 4) offset += 4;
|
|
29
|
+
const hasDuration = (flags & 256) !== 0;
|
|
30
|
+
const hasSize = (flags & 512) !== 0;
|
|
31
|
+
const hasFlags = (flags & 1024) !== 0;
|
|
32
|
+
const hasCts = (flags & 2048) !== 0;
|
|
33
|
+
const samples = [];
|
|
34
|
+
for (let i = 0; i < sampleCount; i += 1) {
|
|
35
|
+
let duration = 0;
|
|
36
|
+
let size = 0;
|
|
37
|
+
if (hasDuration) {
|
|
38
|
+
duration = view.getUint32(offset);
|
|
39
|
+
offset += 4;
|
|
40
|
+
}
|
|
41
|
+
if (hasSize) {
|
|
42
|
+
size = view.getUint32(offset);
|
|
43
|
+
offset += 4;
|
|
44
|
+
}
|
|
45
|
+
if (hasFlags) offset += 4;
|
|
46
|
+
if (hasCts) offset += 4;
|
|
47
|
+
if (offset > payload.byteLength) break;
|
|
48
|
+
samples.push({
|
|
49
|
+
duration,
|
|
50
|
+
size
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
samples,
|
|
55
|
+
defaultDuration: DEFAULT_TIMESCALE / 30
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Walks one AVCC sample's length-prefixed NALs, collecting the SEI units. */
|
|
59
|
+
function seiOfSample(sample) {
|
|
60
|
+
const view = new DataView(sample.buffer, sample.byteOffset, sample.byteLength);
|
|
61
|
+
const sei = [];
|
|
62
|
+
let offset = 0;
|
|
63
|
+
while (offset + 4 <= sample.byteLength) {
|
|
64
|
+
var _nal$;
|
|
65
|
+
const length = view.getUint32(offset);
|
|
66
|
+
offset += 4;
|
|
67
|
+
if (length === 0 || offset + length > sample.byteLength) break;
|
|
68
|
+
const nal = sample.subarray(offset, offset + length);
|
|
69
|
+
if ((((_nal$ = nal[0]) !== null && _nal$ !== void 0 ? _nal$ : 0) & 31) === SEI_NAL_TYPE) sei.push(nal);
|
|
70
|
+
offset += length;
|
|
71
|
+
}
|
|
72
|
+
return sei;
|
|
73
|
+
}
|
|
74
|
+
function nalScan() {
|
|
75
|
+
let timescale = DEFAULT_TIMESCALE;
|
|
76
|
+
return {
|
|
77
|
+
name: "nal-scan",
|
|
78
|
+
provides: ["nal-scan"],
|
|
79
|
+
install(ctx) {
|
|
80
|
+
ctx.registerTransform({
|
|
81
|
+
name: "nal-scan",
|
|
82
|
+
order: SCAN_ORDER,
|
|
83
|
+
transform(data, _meta) {
|
|
84
|
+
var _parseTfdt$baseMediaD, _parseTfdt;
|
|
85
|
+
if (!captionsWanted()) return data;
|
|
86
|
+
const mdhd = findBox(data, "moov/trak/mdia/mdhd");
|
|
87
|
+
if (mdhd !== null) {
|
|
88
|
+
const view = new DataView(mdhd.payload.buffer, mdhd.payload.byteOffset, mdhd.payload.byteLength);
|
|
89
|
+
timescale = view.getUint8(0) === 1 ? view.getUint32(20) : view.getUint32(12);
|
|
90
|
+
}
|
|
91
|
+
const mdat = findBox(data, "mdat");
|
|
92
|
+
const trunBox = findBox(data, "moof/traf/trun");
|
|
93
|
+
if (mdat === null || trunBox === null) return data;
|
|
94
|
+
const tfdtBox = findBox(data, "moof/traf/tfdt");
|
|
95
|
+
const base = tfdtBox !== null ? (_parseTfdt$baseMediaD = (_parseTfdt = parseTfdt(tfdtBox.payload)) === null || _parseTfdt === void 0 ? void 0 : _parseTfdt.baseMediaDecodeTime) !== null && _parseTfdt$baseMediaD !== void 0 ? _parseTfdt$baseMediaD : 0 : 0;
|
|
96
|
+
const { samples } = parseTrun(trunBox.payload);
|
|
97
|
+
const packets = [];
|
|
98
|
+
let cursor = 0;
|
|
99
|
+
let decodeTime = base;
|
|
100
|
+
for (const sample of samples) {
|
|
101
|
+
const bytes = mdat.payload.subarray(cursor, cursor + sample.size);
|
|
102
|
+
cursor += sample.size;
|
|
103
|
+
const time = decodeTime / (timescale || DEFAULT_TIMESCALE);
|
|
104
|
+
decodeTime += sample.duration;
|
|
105
|
+
for (const sei of seiOfSample(bytes)) {
|
|
106
|
+
const triples = ccTriplesFromSei(sei);
|
|
107
|
+
if (triples.length > 0) packets.push({
|
|
108
|
+
time,
|
|
109
|
+
triples
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
deliverCaptions(packets);
|
|
114
|
+
return data;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
|
+
export { nalScan as default };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/stages/pdt/index.ts
|
|
2
|
+
function anchorOf(state) {
|
|
3
|
+
var _state$presentation;
|
|
4
|
+
const live = (_state$presentation = state.presentation) === null || _state$presentation === void 0 ? void 0 : _state$presentation.live;
|
|
5
|
+
if ((live === null || live === void 0 ? void 0 : live.dateAnchor) !== void 0) return live.dateAnchor;
|
|
6
|
+
if ((live === null || live === void 0 ? void 0 : live.availabilityStart) !== void 0) return {
|
|
7
|
+
wallClock: live.availabilityStart,
|
|
8
|
+
presentationTime: 0
|
|
9
|
+
};
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
function pdt() {
|
|
13
|
+
return {
|
|
14
|
+
name: "pdt",
|
|
15
|
+
provides: ["pdt"],
|
|
16
|
+
requires: ["timeline"],
|
|
17
|
+
install(ctx) {
|
|
18
|
+
ctx.registerNamespace("pdt", {
|
|
19
|
+
toWallClock(presentationTime) {
|
|
20
|
+
const anchor = anchorOf(ctx.getState());
|
|
21
|
+
if (anchor === null) return null;
|
|
22
|
+
return anchor.wallClock + (presentationTime - anchor.presentationTime);
|
|
23
|
+
},
|
|
24
|
+
toPresentationTime(wallClock) {
|
|
25
|
+
const anchor = anchorOf(ctx.getState());
|
|
26
|
+
if (anchor === null) return null;
|
|
27
|
+
return anchor.presentationTime + (wallClock - anchor.wallClock);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { pdt as default };
|