webcodecs-node 0.2.2
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 +656 -0
- package/README.md +607 -0
- package/dist/AudioData.d.ts +6 -0
- package/dist/AudioData.d.ts.map +1 -0
- package/dist/AudioData.js +6 -0
- package/dist/AudioData.js.map +1 -0
- package/dist/AudioDecoder.d.ts +6 -0
- package/dist/AudioDecoder.d.ts.map +1 -0
- package/dist/AudioDecoder.js +6 -0
- package/dist/AudioDecoder.js.map +1 -0
- package/dist/AudioEncoder.d.ts +6 -0
- package/dist/AudioEncoder.d.ts.map +1 -0
- package/dist/AudioEncoder.js +6 -0
- package/dist/AudioEncoder.js.map +1 -0
- package/dist/EncodedAudioChunk.d.ts +6 -0
- package/dist/EncodedAudioChunk.d.ts.map +1 -0
- package/dist/EncodedAudioChunk.js +6 -0
- package/dist/EncodedAudioChunk.js.map +1 -0
- package/dist/EncodedVideoChunk.d.ts +6 -0
- package/dist/EncodedVideoChunk.d.ts.map +1 -0
- package/dist/EncodedVideoChunk.js +6 -0
- package/dist/EncodedVideoChunk.js.map +1 -0
- package/dist/FFmpegProcess.d.ts +6 -0
- package/dist/FFmpegProcess.d.ts.map +1 -0
- package/dist/FFmpegProcess.js +6 -0
- package/dist/FFmpegProcess.js.map +1 -0
- package/dist/HardwareAcceleration.d.ts +6 -0
- package/dist/HardwareAcceleration.d.ts.map +1 -0
- package/dist/HardwareAcceleration.js +6 -0
- package/dist/HardwareAcceleration.js.map +1 -0
- package/dist/ImageDecoder.d.ts +6 -0
- package/dist/ImageDecoder.d.ts.map +1 -0
- package/dist/ImageDecoder.js +6 -0
- package/dist/ImageDecoder.js.map +1 -0
- package/dist/Logger.d.ts +6 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +6 -0
- package/dist/Logger.js.map +1 -0
- package/dist/MediaCapabilities.d.ts +9 -0
- package/dist/MediaCapabilities.d.ts.map +1 -0
- package/dist/MediaCapabilities.js +8 -0
- package/dist/MediaCapabilities.js.map +1 -0
- package/dist/VideoDecoder.d.ts +6 -0
- package/dist/VideoDecoder.d.ts.map +1 -0
- package/dist/VideoDecoder.js +6 -0
- package/dist/VideoDecoder.js.map +1 -0
- package/dist/VideoEncoder.d.ts +6 -0
- package/dist/VideoEncoder.d.ts.map +1 -0
- package/dist/VideoEncoder.js +6 -0
- package/dist/VideoEncoder.js.map +1 -0
- package/dist/VideoFrame.d.ts +10 -0
- package/dist/VideoFrame.d.ts.map +1 -0
- package/dist/VideoFrame.js +9 -0
- package/dist/VideoFrame.js.map +1 -0
- package/dist/__tests__/AudioData.test.d.ts +5 -0
- package/dist/__tests__/AudioData.test.d.ts.map +1 -0
- package/dist/__tests__/AudioData.test.js +179 -0
- package/dist/__tests__/AudioData.test.js.map +1 -0
- package/dist/__tests__/AudioDecoder.test.d.ts +5 -0
- package/dist/__tests__/AudioDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/AudioDecoder.test.js +733 -0
- package/dist/__tests__/AudioDecoder.test.js.map +1 -0
- package/dist/__tests__/AudioEncoder.test.d.ts +5 -0
- package/dist/__tests__/AudioEncoder.test.d.ts.map +1 -0
- package/dist/__tests__/AudioEncoder.test.js +247 -0
- package/dist/__tests__/AudioEncoder.test.js.map +1 -0
- package/dist/__tests__/EncodedChunks.test.d.ts +5 -0
- package/dist/__tests__/EncodedChunks.test.d.ts.map +1 -0
- package/dist/__tests__/EncodedChunks.test.js +99 -0
- package/dist/__tests__/EncodedChunks.test.js.map +1 -0
- package/dist/__tests__/HardwareAcceleration.test.d.ts +5 -0
- package/dist/__tests__/HardwareAcceleration.test.d.ts.map +1 -0
- package/dist/__tests__/HardwareAcceleration.test.js +84 -0
- package/dist/__tests__/HardwareAcceleration.test.js.map +1 -0
- package/dist/__tests__/ImageDecoder.test.d.ts +5 -0
- package/dist/__tests__/ImageDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/ImageDecoder.test.js +587 -0
- package/dist/__tests__/ImageDecoder.test.js.map +1 -0
- package/dist/__tests__/MediaCapabilities.test.d.ts +5 -0
- package/dist/__tests__/MediaCapabilities.test.d.ts.map +1 -0
- package/dist/__tests__/MediaCapabilities.test.js +346 -0
- package/dist/__tests__/MediaCapabilities.test.js.map +1 -0
- package/dist/__tests__/VideoDecoder.test.d.ts +5 -0
- package/dist/__tests__/VideoDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/VideoDecoder.test.js +675 -0
- package/dist/__tests__/VideoDecoder.test.js.map +1 -0
- package/dist/__tests__/VideoEncoder.test.d.ts +5 -0
- package/dist/__tests__/VideoEncoder.test.d.ts.map +1 -0
- package/dist/__tests__/VideoEncoder.test.js +468 -0
- package/dist/__tests__/VideoEncoder.test.js.map +1 -0
- package/dist/__tests__/VideoFrame.test.d.ts +5 -0
- package/dist/__tests__/VideoFrame.test.d.ts.map +1 -0
- package/dist/__tests__/VideoFrame.test.js +243 -0
- package/dist/__tests__/VideoFrame.test.js.map +1 -0
- package/dist/__tests__/aac-utils.test.d.ts +2 -0
- package/dist/__tests__/aac-utils.test.d.ts.map +1 -0
- package/dist/__tests__/aac-utils.test.js +37 -0
- package/dist/__tests__/aac-utils.test.js.map +1 -0
- package/dist/__tests__/avc-utils.test.d.ts +2 -0
- package/dist/__tests__/avc-utils.test.d.ts.map +1 -0
- package/dist/__tests__/avc-utils.test.js +63 -0
- package/dist/__tests__/avc-utils.test.js.map +1 -0
- package/dist/__tests__/hevc-utils.test.d.ts +2 -0
- package/dist/__tests__/hevc-utils.test.d.ts.map +1 -0
- package/dist/__tests__/hevc-utils.test.js +78 -0
- package/dist/__tests__/hevc-utils.test.js.map +1 -0
- package/dist/capabilities/MediaCapabilities.d.ts +78 -0
- package/dist/capabilities/MediaCapabilities.d.ts.map +1 -0
- package/dist/capabilities/MediaCapabilities.js +276 -0
- package/dist/capabilities/MediaCapabilities.js.map +1 -0
- package/dist/capabilities/codecs.d.ts +72 -0
- package/dist/capabilities/codecs.d.ts.map +1 -0
- package/dist/capabilities/codecs.js +153 -0
- package/dist/capabilities/codecs.js.map +1 -0
- package/dist/capabilities/index.d.ts +7 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +8 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/types.d.ts +77 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +5 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/core/AudioData.d.ts +36 -0
- package/dist/core/AudioData.d.ts.map +1 -0
- package/dist/core/AudioData.js +229 -0
- package/dist/core/AudioData.js.map +1 -0
- package/dist/core/EncodedAudioChunk.d.ts +26 -0
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -0
- package/dist/core/EncodedAudioChunk.js +58 -0
- package/dist/core/EncodedAudioChunk.js.map +1 -0
- package/dist/core/EncodedVideoChunk.d.ts +23 -0
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -0
- package/dist/core/EncodedVideoChunk.js +55 -0
- package/dist/core/EncodedVideoChunk.js.map +1 -0
- package/dist/core/VideoFrame.d.ts +61 -0
- package/dist/core/VideoFrame.d.ts.map +1 -0
- package/dist/core/VideoFrame.js +385 -0
- package/dist/core/VideoFrame.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/debug-h264.d.ts +5 -0
- package/dist/debug-h264.d.ts.map +1 -0
- package/dist/debug-h264.js +103 -0
- package/dist/debug-h264.js.map +1 -0
- package/dist/decoders/AudioDecoder.d.ts +57 -0
- package/dist/decoders/AudioDecoder.d.ts.map +1 -0
- package/dist/decoders/AudioDecoder.js +333 -0
- package/dist/decoders/AudioDecoder.js.map +1 -0
- package/dist/decoders/ImageDecoder.d.ts +111 -0
- package/dist/decoders/ImageDecoder.d.ts.map +1 -0
- package/dist/decoders/ImageDecoder.js +686 -0
- package/dist/decoders/ImageDecoder.js.map +1 -0
- package/dist/decoders/VideoDecoder.d.ts +70 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -0
- package/dist/decoders/VideoDecoder.js +410 -0
- package/dist/decoders/VideoDecoder.js.map +1 -0
- package/dist/decoders/index.d.ts +8 -0
- package/dist/decoders/index.d.ts.map +1 -0
- package/dist/decoders/index.js +7 -0
- package/dist/decoders/index.js.map +1 -0
- package/dist/demos/demo-audio-opus.d.ts +5 -0
- package/dist/demos/demo-audio-opus.d.ts.map +1 -0
- package/dist/demos/demo-audio-opus.js +107 -0
- package/dist/demos/demo-audio-opus.js.map +1 -0
- package/dist/demos/demo-audio.d.ts +10 -0
- package/dist/demos/demo-audio.d.ts.map +1 -0
- package/dist/demos/demo-audio.js +135 -0
- package/dist/demos/demo-audio.js.map +1 -0
- package/dist/demos/demo-conversion.d.ts +13 -0
- package/dist/demos/demo-conversion.d.ts.map +1 -0
- package/dist/demos/demo-conversion.js +301 -0
- package/dist/demos/demo-conversion.js.map +1 -0
- package/dist/demos/demo-h264.d.ts +7 -0
- package/dist/demos/demo-h264.d.ts.map +1 -0
- package/dist/demos/demo-h264.js +134 -0
- package/dist/demos/demo-h264.js.map +1 -0
- package/dist/demos/demo-hwaccel-conversion.d.ts +8 -0
- package/dist/demos/demo-hwaccel-conversion.d.ts.map +1 -0
- package/dist/demos/demo-hwaccel-conversion.js +161 -0
- package/dist/demos/demo-hwaccel-conversion.js.map +1 -0
- package/dist/demos/demo-hwaccel.d.ts +7 -0
- package/dist/demos/demo-hwaccel.d.ts.map +1 -0
- package/dist/demos/demo-hwaccel.js +51 -0
- package/dist/demos/demo-hwaccel.js.map +1 -0
- package/dist/demos/demo-image.d.ts +12 -0
- package/dist/demos/demo-image.d.ts.map +1 -0
- package/dist/demos/demo-image.js +178 -0
- package/dist/demos/demo-image.js.map +1 -0
- package/dist/demos/demo-mediabunny.d.ts +7 -0
- package/dist/demos/demo-mediabunny.d.ts.map +1 -0
- package/dist/demos/demo-mediabunny.js +78 -0
- package/dist/demos/demo-mediabunny.js.map +1 -0
- package/dist/demos/demo-pipeline.d.ts +8 -0
- package/dist/demos/demo-pipeline.d.ts.map +1 -0
- package/dist/demos/demo-pipeline.js +83 -0
- package/dist/demos/demo-pipeline.js.map +1 -0
- package/dist/demos/demo-samples.d.ts +9 -0
- package/dist/demos/demo-samples.d.ts.map +1 -0
- package/dist/demos/demo-samples.js +413 -0
- package/dist/demos/demo-samples.js.map +1 -0
- package/dist/demos/demo-streaming.d.ts +8 -0
- package/dist/demos/demo-streaming.d.ts.map +1 -0
- package/dist/demos/demo-streaming.js +299 -0
- package/dist/demos/demo-streaming.js.map +1 -0
- package/dist/demos/demo-webcodecs.d.ts +8 -0
- package/dist/demos/demo-webcodecs.d.ts.map +1 -0
- package/dist/demos/demo-webcodecs.js +316 -0
- package/dist/demos/demo-webcodecs.js.map +1 -0
- package/dist/demos/demo.d.ts +10 -0
- package/dist/demos/demo.d.ts.map +1 -0
- package/dist/demos/demo.js +123 -0
- package/dist/demos/demo.js.map +1 -0
- package/dist/encoders/AudioEncoder.d.ts +69 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -0
- package/dist/encoders/AudioEncoder.js +425 -0
- package/dist/encoders/AudioEncoder.js.map +1 -0
- package/dist/encoders/VideoEncoder.d.ts +80 -0
- package/dist/encoders/VideoEncoder.d.ts.map +1 -0
- package/dist/encoders/VideoEncoder.js +386 -0
- package/dist/encoders/VideoEncoder.js.map +1 -0
- package/dist/encoders/codecs/av1.d.ts +31 -0
- package/dist/encoders/codecs/av1.d.ts.map +1 -0
- package/dist/encoders/codecs/av1.js +66 -0
- package/dist/encoders/codecs/av1.js.map +1 -0
- package/dist/encoders/codecs/h264.d.ts +28 -0
- package/dist/encoders/codecs/h264.d.ts.map +1 -0
- package/dist/encoders/codecs/h264.js +95 -0
- package/dist/encoders/codecs/h264.js.map +1 -0
- package/dist/encoders/codecs/hevc.d.ts +28 -0
- package/dist/encoders/codecs/hevc.d.ts.map +1 -0
- package/dist/encoders/codecs/hevc.js +73 -0
- package/dist/encoders/codecs/hevc.js.map +1 -0
- package/dist/encoders/codecs/index.d.ts +19 -0
- package/dist/encoders/codecs/index.d.ts.map +1 -0
- package/dist/encoders/codecs/index.js +60 -0
- package/dist/encoders/codecs/index.js.map +1 -0
- package/dist/encoders/codecs/vp9.d.ts +29 -0
- package/dist/encoders/codecs/vp9.d.ts.map +1 -0
- package/dist/encoders/codecs/vp9.js +58 -0
- package/dist/encoders/codecs/vp9.js.map +1 -0
- package/dist/encoders/index.d.ts +8 -0
- package/dist/encoders/index.d.ts.map +1 -0
- package/dist/encoders/index.js +8 -0
- package/dist/encoders/index.js.map +1 -0
- package/dist/ffmpeg/FFmpegProcess.d.ts +111 -0
- package/dist/ffmpeg/FFmpegProcess.d.ts.map +1 -0
- package/dist/ffmpeg/FFmpegProcess.js +543 -0
- package/dist/ffmpeg/FFmpegProcess.js.map +1 -0
- package/dist/ffmpeg/audio-codecs.d.ts +59 -0
- package/dist/ffmpeg/audio-codecs.d.ts.map +1 -0
- package/dist/ffmpeg/audio-codecs.js +99 -0
- package/dist/ffmpeg/audio-codecs.js.map +1 -0
- package/dist/ffmpeg/formats.d.ts +42 -0
- package/dist/ffmpeg/formats.d.ts.map +1 -0
- package/dist/ffmpeg/formats.js +147 -0
- package/dist/ffmpeg/formats.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +9 -0
- package/dist/ffmpeg/index.d.ts.map +1 -0
- package/dist/ffmpeg/index.js +13 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/parsers/annexb.d.ts +88 -0
- package/dist/ffmpeg/parsers/annexb.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/annexb.js +201 -0
- package/dist/ffmpeg/parsers/annexb.js.map +1 -0
- package/dist/ffmpeg/parsers/index.d.ts +6 -0
- package/dist/ffmpeg/parsers/index.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/index.js +8 -0
- package/dist/ffmpeg/parsers/index.js.map +1 -0
- package/dist/ffmpeg/parsers/ivf.d.ts +54 -0
- package/dist/ffmpeg/parsers/ivf.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/ivf.js +109 -0
- package/dist/ffmpeg/parsers/ivf.js.map +1 -0
- package/dist/ffmpeg/types.d.ts +85 -0
- package/dist/ffmpeg/types.d.ts.map +1 -0
- package/dist/ffmpeg/types.js +8 -0
- package/dist/ffmpeg/types.js.map +1 -0
- package/dist/formats/audio-formats.d.ts +61 -0
- package/dist/formats/audio-formats.d.ts.map +1 -0
- package/dist/formats/audio-formats.js +113 -0
- package/dist/formats/audio-formats.js.map +1 -0
- package/dist/formats/color-space.d.ts +35 -0
- package/dist/formats/color-space.d.ts.map +1 -0
- package/dist/formats/color-space.js +62 -0
- package/dist/formats/color-space.js.map +1 -0
- package/dist/formats/conversions/frame-converter.d.ts +42 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -0
- package/dist/formats/conversions/frame-converter.js +244 -0
- package/dist/formats/conversions/frame-converter.js.map +1 -0
- package/dist/formats/conversions/index.d.ts +8 -0
- package/dist/formats/conversions/index.d.ts.map +1 -0
- package/dist/formats/conversions/index.js +10 -0
- package/dist/formats/conversions/index.js.map +1 -0
- package/dist/formats/index.d.ts +9 -0
- package/dist/formats/index.d.ts.map +1 -0
- package/dist/formats/index.js +14 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/parsers/index.d.ts +5 -0
- package/dist/formats/parsers/index.d.ts.map +1 -0
- package/dist/formats/parsers/index.js +5 -0
- package/dist/formats/parsers/index.js.map +1 -0
- package/dist/formats/parsers/webp.d.ts +16 -0
- package/dist/formats/parsers/webp.d.ts.map +1 -0
- package/dist/formats/parsers/webp.js +116 -0
- package/dist/formats/parsers/webp.js.map +1 -0
- package/dist/formats/pixel-formats.d.ts +41 -0
- package/dist/formats/pixel-formats.d.ts.map +1 -0
- package/dist/formats/pixel-formats.js +113 -0
- package/dist/formats/pixel-formats.js.map +1 -0
- package/dist/hardware/HardwareAcceleration.d.ts +6 -0
- package/dist/hardware/HardwareAcceleration.d.ts.map +1 -0
- package/dist/hardware/HardwareAcceleration.js +6 -0
- package/dist/hardware/HardwareAcceleration.js.map +1 -0
- package/dist/hardware/decoder-args.d.ts +25 -0
- package/dist/hardware/decoder-args.d.ts.map +1 -0
- package/dist/hardware/decoder-args.js +84 -0
- package/dist/hardware/decoder-args.js.map +1 -0
- package/dist/hardware/detection.d.ts +39 -0
- package/dist/hardware/detection.d.ts.map +1 -0
- package/dist/hardware/detection.js +178 -0
- package/dist/hardware/detection.js.map +1 -0
- package/dist/hardware/encoder-args.d.ts +38 -0
- package/dist/hardware/encoder-args.d.ts.map +1 -0
- package/dist/hardware/encoder-args.js +177 -0
- package/dist/hardware/encoder-args.js.map +1 -0
- package/dist/hardware/index.d.ts +12 -0
- package/dist/hardware/index.d.ts.map +1 -0
- package/dist/hardware/index.js +14 -0
- package/dist/hardware/index.js.map +1 -0
- package/dist/hardware/types.d.ts +29 -0
- package/dist/hardware/types.d.ts.map +1 -0
- package/dist/hardware/types.js +58 -0
- package/dist/hardware/types.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +37 -0
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegAudioDecoder.js +254 -0
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -0
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +77 -0
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegAudioEncoder.js +484 -0
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -0
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +58 -0
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegVideoDecoder.js +366 -0
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -0
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +77 -0
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegVideoEncoder.js +551 -0
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -0
- package/dist/mediabunny/index.d.ts +21 -0
- package/dist/mediabunny/index.d.ts.map +1 -0
- package/dist/mediabunny/index.js +33 -0
- package/dist/mediabunny/index.js.map +1 -0
- package/dist/polyfill.d.ts +27 -0
- package/dist/polyfill.d.ts.map +1 -0
- package/dist/polyfill.js +78 -0
- package/dist/polyfill.js.map +1 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +72 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +1 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +293 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +1 -0
- package/dist/polyfills/ImageDataPolyfill.d.ts +12 -0
- package/dist/polyfills/ImageDataPolyfill.d.ts.map +1 -0
- package/dist/polyfills/ImageDataPolyfill.js +22 -0
- package/dist/polyfills/ImageDataPolyfill.js.map +1 -0
- package/dist/polyfills/OffscreenCanvas.d.ts +15 -0
- package/dist/polyfills/OffscreenCanvas.d.ts.map +1 -0
- package/dist/polyfills/OffscreenCanvas.js +35 -0
- package/dist/polyfills/OffscreenCanvas.js.map +1 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +16 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +1 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.js +46 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.js.map +1 -0
- package/dist/polyfills/VideoFramePolyfill.d.ts +44 -0
- package/dist/polyfills/VideoFramePolyfill.d.ts.map +1 -0
- package/dist/polyfills/VideoFramePolyfill.js +98 -0
- package/dist/polyfills/VideoFramePolyfill.js.map +1 -0
- package/dist/tools/generate-capabilities-profile.d.ts +2 -0
- package/dist/tools/generate-capabilities-profile.d.ts.map +1 -0
- package/dist/tools/generate-capabilities-profile.js +63 -0
- package/dist/tools/generate-capabilities-profile.js.map +1 -0
- package/dist/types/audio.d.ts +26 -0
- package/dist/types/audio.d.ts.map +1 -0
- package/dist/types/audio.js +5 -0
- package/dist/types/audio.js.map +1 -0
- package/dist/types/common.d.ts +68 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +70 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/geometry.d.ts +35 -0
- package/dist/types/geometry.d.ts.map +1 -0
- package/dist/types/geometry.js +34 -0
- package/dist/types/geometry.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/video.d.ts +43 -0
- package/dist/types/video.d.ts.map +1 -0
- package/dist/types/video.js +5 -0
- package/dist/types/video.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/aac.d.ts +26 -0
- package/dist/utils/aac.d.ts.map +1 -0
- package/dist/utils/aac.js +129 -0
- package/dist/utils/aac.js.map +1 -0
- package/dist/utils/avc.d.ts +39 -0
- package/dist/utils/avc.d.ts.map +1 -0
- package/dist/utils/avc.js +225 -0
- package/dist/utils/avc.js.map +1 -0
- package/dist/utils/buffer.d.ts +25 -0
- package/dist/utils/buffer.d.ts.map +1 -0
- package/dist/utils/buffer.js +73 -0
- package/dist/utils/buffer.js.map +1 -0
- package/dist/utils/hevc.d.ts +27 -0
- package/dist/utils/hevc.d.ts.map +1 -0
- package/dist/utils/hevc.js +239 -0
- package/dist/utils/hevc.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +55 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +110 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/type-guards.d.ts +50 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +49 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +66 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/api.md +506 -0
- package/docs/codecs.md +382 -0
- package/docs/configuration.md +442 -0
- package/examples/README.md +100 -0
- package/examples/audio-encoding.ts +85 -0
- package/examples/hardware-decoding.ts +245 -0
- package/examples/hardware-encoding.ts +231 -0
- package/examples/image-decoding.ts +145 -0
- package/examples/streaming.ts +151 -0
- package/examples/transparent-video.ts +162 -0
- package/examples/video-decoding.ts +107 -0
- package/examples/video-encoding.ts +93 -0
- package/package.json +105 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaCapabilities API implementation
|
|
3
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/MediaCapabilities
|
|
4
|
+
*
|
|
5
|
+
* Provides methods to query decoding and encoding capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { parseContentType, isVideoCodecSupported, isAudioCodecSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
|
|
10
|
+
/**
|
|
11
|
+
* MediaCapabilities API implementation
|
|
12
|
+
*/
|
|
13
|
+
export class MediaCapabilities {
|
|
14
|
+
_profile = null;
|
|
15
|
+
constructor(profile) {
|
|
16
|
+
this._profile = profile ?? loadCapabilitiesProfileFromEnv();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Query decoding capabilities for a media configuration
|
|
20
|
+
*
|
|
21
|
+
* @param configuration - The media configuration to query
|
|
22
|
+
* @returns Promise resolving to capability information
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const info = await mediaCapabilities.decodingInfo({
|
|
27
|
+
* type: 'file',
|
|
28
|
+
* video: {
|
|
29
|
+
* contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
30
|
+
* width: 1920,
|
|
31
|
+
* height: 1080,
|
|
32
|
+
* bitrate: 5000000,
|
|
33
|
+
* framerate: 30,
|
|
34
|
+
* },
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* if (info.supported && info.smooth) {
|
|
38
|
+
* console.log('Can decode smoothly!');
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
async decodingInfo(configuration) {
|
|
43
|
+
// Validate configuration
|
|
44
|
+
if (!configuration.type) {
|
|
45
|
+
throw new TypeError('configuration.type is required');
|
|
46
|
+
}
|
|
47
|
+
if (!configuration.video && !configuration.audio) {
|
|
48
|
+
throw new TypeError('At least one of video or audio configuration is required');
|
|
49
|
+
}
|
|
50
|
+
let videoSupported = true;
|
|
51
|
+
let audioSupported = true;
|
|
52
|
+
let videoCodec = null;
|
|
53
|
+
// Check video support
|
|
54
|
+
if (configuration.video) {
|
|
55
|
+
const videoConfig = configuration.video;
|
|
56
|
+
const { mimeType, codec } = parseContentType(videoConfig.contentType);
|
|
57
|
+
videoCodec = codec;
|
|
58
|
+
videoSupported = isVideoCodecSupported(mimeType, codec) && this._isVideoConfigValid(videoConfig);
|
|
59
|
+
}
|
|
60
|
+
// Check audio support
|
|
61
|
+
if (configuration.audio) {
|
|
62
|
+
const audioConfig = configuration.audio;
|
|
63
|
+
const { mimeType, codec } = parseContentType(audioConfig.contentType);
|
|
64
|
+
audioSupported = isAudioCodecSupported(mimeType, codec) && this._isAudioConfigValid(audioConfig);
|
|
65
|
+
}
|
|
66
|
+
const supported = videoSupported && audioSupported;
|
|
67
|
+
if (!supported) {
|
|
68
|
+
return {
|
|
69
|
+
supported: false,
|
|
70
|
+
smooth: false,
|
|
71
|
+
powerEfficient: false,
|
|
72
|
+
configuration,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const { smooth, powerEfficient } = await this._evaluateVideoCapabilities(configuration.video, videoCodec);
|
|
76
|
+
return {
|
|
77
|
+
supported,
|
|
78
|
+
smooth,
|
|
79
|
+
powerEfficient,
|
|
80
|
+
configuration,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Query encoding capabilities for a media configuration
|
|
85
|
+
*
|
|
86
|
+
* @param configuration - The media configuration to query
|
|
87
|
+
* @returns Promise resolving to capability information
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const info = await mediaCapabilities.encodingInfo({
|
|
92
|
+
* type: 'record',
|
|
93
|
+
* video: {
|
|
94
|
+
* contentType: 'video/webm; codecs="vp9"',
|
|
95
|
+
* width: 1280,
|
|
96
|
+
* height: 720,
|
|
97
|
+
* bitrate: 2000000,
|
|
98
|
+
* framerate: 30,
|
|
99
|
+
* },
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* if (info.supported && info.powerEfficient) {
|
|
103
|
+
* console.log('Can encode with hardware acceleration!');
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
async encodingInfo(configuration) {
|
|
108
|
+
// Validate configuration
|
|
109
|
+
if (!configuration.type) {
|
|
110
|
+
throw new TypeError('configuration.type is required');
|
|
111
|
+
}
|
|
112
|
+
if (!configuration.video && !configuration.audio) {
|
|
113
|
+
throw new TypeError('At least one of video or audio configuration is required');
|
|
114
|
+
}
|
|
115
|
+
let videoSupported = true;
|
|
116
|
+
let audioSupported = true;
|
|
117
|
+
let videoCodec = null;
|
|
118
|
+
// Check video support
|
|
119
|
+
if (configuration.video) {
|
|
120
|
+
const videoConfig = configuration.video;
|
|
121
|
+
const { mimeType, codec } = parseContentType(videoConfig.contentType);
|
|
122
|
+
videoCodec = codec;
|
|
123
|
+
videoSupported = isVideoCodecSupported(mimeType, codec) && this._isVideoConfigValid(videoConfig);
|
|
124
|
+
}
|
|
125
|
+
// Check audio support
|
|
126
|
+
if (configuration.audio) {
|
|
127
|
+
const audioConfig = configuration.audio;
|
|
128
|
+
const { mimeType, codec } = parseContentType(audioConfig.contentType);
|
|
129
|
+
audioSupported = isAudioCodecSupported(mimeType, codec) && this._isAudioConfigValid(audioConfig);
|
|
130
|
+
}
|
|
131
|
+
const supported = videoSupported && audioSupported;
|
|
132
|
+
if (!supported) {
|
|
133
|
+
return {
|
|
134
|
+
supported: false,
|
|
135
|
+
smooth: false,
|
|
136
|
+
powerEfficient: false,
|
|
137
|
+
configuration,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const { smooth, powerEfficient } = await this._evaluateVideoCapabilities(configuration.video, videoCodec);
|
|
141
|
+
return {
|
|
142
|
+
supported,
|
|
143
|
+
smooth,
|
|
144
|
+
powerEfficient,
|
|
145
|
+
configuration,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
_isVideoConfigValid(config) {
|
|
149
|
+
return (this._isPositiveInteger(config.width) &&
|
|
150
|
+
this._isPositiveInteger(config.height) &&
|
|
151
|
+
this._isPositiveNumber(config.framerate) &&
|
|
152
|
+
this._isPositiveNumber(config.bitrate));
|
|
153
|
+
}
|
|
154
|
+
_isAudioConfigValid(config) {
|
|
155
|
+
if (config.channels !== undefined && config.channels <= 0) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (config.samplerate !== undefined && config.samplerate <= 0) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
if (config.bitrate !== undefined && config.bitrate <= 0) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
_isPositiveNumber(value) {
|
|
167
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
168
|
+
}
|
|
169
|
+
_isPositiveInteger(value) {
|
|
170
|
+
return Number.isInteger(value) && value > 0;
|
|
171
|
+
}
|
|
172
|
+
async _evaluateVideoCapabilities(video, codec) {
|
|
173
|
+
if (!video) {
|
|
174
|
+
return { smooth: true, powerEfficient: false };
|
|
175
|
+
}
|
|
176
|
+
const hasHardwareAcceleration = await checkHardwareAcceleration(codec);
|
|
177
|
+
const smooth = this._profile
|
|
178
|
+
? this._evaluateWithProfile(video, codec, hasHardwareAcceleration)
|
|
179
|
+
: await estimateSmoothPlayback(video, hasHardwareAcceleration);
|
|
180
|
+
return {
|
|
181
|
+
smooth,
|
|
182
|
+
powerEfficient: hasHardwareAcceleration,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
_evaluateWithProfile(video, codec, hasHardwareAccel) {
|
|
186
|
+
if (!this._profile || !codec) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const entry = findProfileEntry(this._profile.video, codec, video.profile, video.level);
|
|
190
|
+
if (!entry) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
if (entry.maxWidth && video.width > entry.maxWidth)
|
|
194
|
+
return false;
|
|
195
|
+
if (entry.maxHeight && video.height > entry.maxHeight)
|
|
196
|
+
return false;
|
|
197
|
+
if (entry.maxFramerate && video.framerate > entry.maxFramerate)
|
|
198
|
+
return false;
|
|
199
|
+
if (entry.maxBitrate && video.bitrate > entry.maxBitrate)
|
|
200
|
+
return false;
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
let cachedProfile = null;
|
|
205
|
+
let profilePath = null;
|
|
206
|
+
export function loadCapabilitiesProfile(filePath) {
|
|
207
|
+
try {
|
|
208
|
+
const resolved = filePath ?? profilePath ?? defaultProfilePath();
|
|
209
|
+
if (!resolved) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
const data = fs.readFileSync(resolved, 'utf-8');
|
|
213
|
+
const parsed = JSON.parse(data);
|
|
214
|
+
cachedProfile = parsed;
|
|
215
|
+
profilePath = resolved;
|
|
216
|
+
return parsed;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
export function setCapabilitiesProfilePath(filePath) {
|
|
223
|
+
profilePath = filePath;
|
|
224
|
+
if (filePath) {
|
|
225
|
+
loadCapabilitiesProfile(filePath);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
cachedProfile = null;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export function loadCapabilitiesProfileFromEnv() {
|
|
232
|
+
const envPath = process.env.WEBCODECS_CAPABILITIES_PROFILE;
|
|
233
|
+
if (envPath) {
|
|
234
|
+
return loadCapabilitiesProfile(envPath);
|
|
235
|
+
}
|
|
236
|
+
if (cachedProfile) {
|
|
237
|
+
return cachedProfile;
|
|
238
|
+
}
|
|
239
|
+
return loadCapabilitiesProfile();
|
|
240
|
+
}
|
|
241
|
+
function defaultProfilePath() {
|
|
242
|
+
try {
|
|
243
|
+
const home = process.env.HOME;
|
|
244
|
+
if (!home)
|
|
245
|
+
return null;
|
|
246
|
+
const candidate = path.join(home, '.config', 'webcodecs-node', 'capabilities.json');
|
|
247
|
+
return fs.existsSync(candidate) ? candidate : null;
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function findProfileEntry(entries, codec, profile, level) {
|
|
254
|
+
if (!entries) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
258
|
+
const exact = entries.find((entry) => {
|
|
259
|
+
const base = entry.codec.split('.')[0].toLowerCase();
|
|
260
|
+
if (base !== codecBase)
|
|
261
|
+
return false;
|
|
262
|
+
if (entry.profile && profile && entry.profile !== profile)
|
|
263
|
+
return false;
|
|
264
|
+
if (entry.level && level && entry.level !== level)
|
|
265
|
+
return false;
|
|
266
|
+
return true;
|
|
267
|
+
});
|
|
268
|
+
if (exact)
|
|
269
|
+
return exact;
|
|
270
|
+
return entries.find((entry) => entry.codec.split('.')[0].toLowerCase() === codecBase) ?? null;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Global MediaCapabilities instance (matches browser API pattern)
|
|
274
|
+
*/
|
|
275
|
+
export const mediaCapabilities = new MediaCapabilities();
|
|
276
|
+
//# sourceMappingURL=MediaCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaCapabilities.js","sourceRoot":"","sources":["../../src/capabilities/MediaCapabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported codecs and codec checking utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { VideoConfiguration } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Supported video codecs by container (via FFmpeg)
|
|
7
|
+
*/
|
|
8
|
+
export declare const SUPPORTED_VIDEO_CODECS: Record<string, string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Supported audio codecs by container (via FFmpeg)
|
|
11
|
+
*/
|
|
12
|
+
export declare const SUPPORTED_AUDIO_CODECS: Record<string, string[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Supported video codec base names (for encoder/decoder validation)
|
|
15
|
+
*/
|
|
16
|
+
export declare const SUPPORTED_VIDEO_CODEC_BASES: readonly ["avc1", "avc3", "hev1", "hvc1", "vp8", "vp09", "vp9", "av01", "av1"];
|
|
17
|
+
/**
|
|
18
|
+
* Supported audio codec base names (for encoder/decoder validation)
|
|
19
|
+
*/
|
|
20
|
+
export declare const SUPPORTED_AUDIO_CODEC_BASES: readonly ["mp4a", "aac", "opus", "vorbis", "flac", "mp3"];
|
|
21
|
+
/**
|
|
22
|
+
* Check if a video codec base name is supported
|
|
23
|
+
*/
|
|
24
|
+
export declare function isVideoCodecBaseSupported(codec: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Check if an audio codec base name is supported
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAudioCodecBaseSupported(codec: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Resolution thresholds for smooth playback estimation
|
|
31
|
+
*/
|
|
32
|
+
export declare const SMOOTH_THRESHOLDS: {
|
|
33
|
+
software: {
|
|
34
|
+
maxWidth: number;
|
|
35
|
+
maxHeight: number;
|
|
36
|
+
maxFramerate: number;
|
|
37
|
+
maxPixelRate: number;
|
|
38
|
+
maxBitrate: number;
|
|
39
|
+
};
|
|
40
|
+
hardware: {
|
|
41
|
+
maxWidth: number;
|
|
42
|
+
maxHeight: number;
|
|
43
|
+
maxFramerate: number;
|
|
44
|
+
maxPixelRate: number;
|
|
45
|
+
maxBitrate: number;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Parse a content type string to extract MIME type and codec
|
|
50
|
+
* @param contentType - e.g., 'video/mp4; codecs="avc1.42E01E"'
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseContentType(contentType: string): {
|
|
53
|
+
mimeType: string;
|
|
54
|
+
codec: string | null;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Check if a video codec is supported
|
|
58
|
+
*/
|
|
59
|
+
export declare function isVideoCodecSupported(mimeType: string, codec: string | null): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Check if an audio codec is supported
|
|
62
|
+
*/
|
|
63
|
+
export declare function isAudioCodecSupported(mimeType: string, codec: string | null): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Estimate if playback would be smooth based on resolution and hardware capabilities
|
|
66
|
+
*/
|
|
67
|
+
export declare function estimateSmoothPlayback(video: VideoConfiguration | undefined, hasHardwareAccel: boolean): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Check if hardware acceleration is available for a codec
|
|
70
|
+
*/
|
|
71
|
+
export declare function checkHardwareAcceleration(codec: string | null): Promise<boolean>;
|
|
72
|
+
//# sourceMappingURL=codecs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/capabilities/codecs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAI3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,gFAE9B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,2DAE9B,CAAC;AAEX;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAe7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAchG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CASrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAQrF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtF"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported codecs and codec checking utilities
|
|
3
|
+
*/
|
|
4
|
+
import { detectHardwareAcceleration, parseCodecString } from '../hardware/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Supported video codecs by container (via FFmpeg)
|
|
7
|
+
*/
|
|
8
|
+
export const SUPPORTED_VIDEO_CODECS = {
|
|
9
|
+
'video/mp4': ['avc1', 'avc3', 'hev1', 'hvc1', 'av01'],
|
|
10
|
+
'video/webm': ['vp8', 'vp9', 'vp09', 'av01'],
|
|
11
|
+
'video/ogg': ['theora'],
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Supported audio codecs by container (via FFmpeg)
|
|
15
|
+
*/
|
|
16
|
+
export const SUPPORTED_AUDIO_CODECS = {
|
|
17
|
+
'audio/mp4': ['mp4a', 'aac'],
|
|
18
|
+
'audio/webm': ['opus', 'vorbis'],
|
|
19
|
+
'audio/ogg': ['opus', 'vorbis', 'flac'],
|
|
20
|
+
'audio/mpeg': ['mp3'],
|
|
21
|
+
'audio/flac': ['flac'],
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Supported video codec base names (for encoder/decoder validation)
|
|
25
|
+
*/
|
|
26
|
+
export const SUPPORTED_VIDEO_CODEC_BASES = [
|
|
27
|
+
'avc1', 'avc3', 'hev1', 'hvc1', 'vp8', 'vp09', 'vp9', 'av01', 'av1'
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Supported audio codec base names (for encoder/decoder validation)
|
|
31
|
+
*/
|
|
32
|
+
export const SUPPORTED_AUDIO_CODEC_BASES = [
|
|
33
|
+
'mp4a', 'aac', 'opus', 'vorbis', 'flac', 'mp3'
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Check if a video codec base name is supported
|
|
37
|
+
*/
|
|
38
|
+
export function isVideoCodecBaseSupported(codec) {
|
|
39
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
40
|
+
return SUPPORTED_VIDEO_CODEC_BASES.includes(codecBase);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if an audio codec base name is supported
|
|
44
|
+
*/
|
|
45
|
+
export function isAudioCodecBaseSupported(codec) {
|
|
46
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
47
|
+
return SUPPORTED_AUDIO_CODEC_BASES.includes(codecBase);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolution thresholds for smooth playback estimation
|
|
51
|
+
*/
|
|
52
|
+
export const SMOOTH_THRESHOLDS = {
|
|
53
|
+
software: {
|
|
54
|
+
maxWidth: 1920,
|
|
55
|
+
maxHeight: 1080,
|
|
56
|
+
maxFramerate: 60,
|
|
57
|
+
maxPixelRate: 1920 * 1080 * 60,
|
|
58
|
+
maxBitrate: 10_000_000,
|
|
59
|
+
},
|
|
60
|
+
hardware: {
|
|
61
|
+
maxWidth: 3840,
|
|
62
|
+
maxHeight: 2160,
|
|
63
|
+
maxFramerate: 120,
|
|
64
|
+
maxPixelRate: 3840 * 2160 * 120,
|
|
65
|
+
maxBitrate: 50_000_000,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Parse a content type string to extract MIME type and codec
|
|
70
|
+
* @param contentType - e.g., 'video/mp4; codecs="avc1.42E01E"'
|
|
71
|
+
*/
|
|
72
|
+
export function parseContentType(contentType) {
|
|
73
|
+
const parts = contentType.split(';').map(p => p.trim());
|
|
74
|
+
const mimeType = parts[0].toLowerCase();
|
|
75
|
+
let codec = null;
|
|
76
|
+
for (const part of parts.slice(1)) {
|
|
77
|
+
const codecMatch = part.match(/codecs\s*=\s*["']?([^"']+)["']?/i);
|
|
78
|
+
if (codecMatch) {
|
|
79
|
+
codec = codecMatch[1];
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { mimeType, codec };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a video codec is supported
|
|
87
|
+
*/
|
|
88
|
+
export function isVideoCodecSupported(mimeType, codec) {
|
|
89
|
+
const supportedCodecs = SUPPORTED_VIDEO_CODECS[mimeType];
|
|
90
|
+
if (!supportedCodecs)
|
|
91
|
+
return false;
|
|
92
|
+
if (!codec)
|
|
93
|
+
return true; // MIME type supported, no specific codec required
|
|
94
|
+
// Extract base codec (e.g., 'avc1' from 'avc1.42E01E')
|
|
95
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
96
|
+
return supportedCodecs.some(c => c.toLowerCase() === codecBase);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if an audio codec is supported
|
|
100
|
+
*/
|
|
101
|
+
export function isAudioCodecSupported(mimeType, codec) {
|
|
102
|
+
const supportedCodecs = SUPPORTED_AUDIO_CODECS[mimeType];
|
|
103
|
+
if (!supportedCodecs)
|
|
104
|
+
return false;
|
|
105
|
+
if (!codec)
|
|
106
|
+
return true;
|
|
107
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
108
|
+
return supportedCodecs.some(c => c.toLowerCase() === codecBase);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Estimate if playback would be smooth based on resolution and hardware capabilities
|
|
112
|
+
*/
|
|
113
|
+
export async function estimateSmoothPlayback(video, hasHardwareAccel) {
|
|
114
|
+
if (!video)
|
|
115
|
+
return true; // Audio-only is always smooth
|
|
116
|
+
const thresholds = hasHardwareAccel ? SMOOTH_THRESHOLDS.hardware : SMOOTH_THRESHOLDS.software;
|
|
117
|
+
const framerate = video.framerate ?? thresholds.maxFramerate;
|
|
118
|
+
if (video.width > thresholds.maxWidth || video.height > thresholds.maxHeight) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
if (framerate > thresholds.maxFramerate) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
const pixelRate = video.width * video.height * framerate;
|
|
125
|
+
if (pixelRate > thresholds.maxPixelRate) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (typeof video.bitrate === 'number' && video.bitrate > thresholds.maxBitrate) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if hardware acceleration is available for a codec
|
|
135
|
+
*/
|
|
136
|
+
export async function checkHardwareAcceleration(codec) {
|
|
137
|
+
if (!codec)
|
|
138
|
+
return false;
|
|
139
|
+
try {
|
|
140
|
+
const hwCapabilities = await detectHardwareAcceleration();
|
|
141
|
+
const codecName = parseCodecString(codec);
|
|
142
|
+
if (!codecName)
|
|
143
|
+
return false;
|
|
144
|
+
// Check if any hardware decoder/encoder is available for this codec
|
|
145
|
+
const hasHwDecoder = hwCapabilities.decoders.some(d => d.codec === codecName);
|
|
146
|
+
const hasHwEncoder = hwCapabilities.encoders.some(e => e.codec === codecName);
|
|
147
|
+
return hasHwDecoder || hasHwEncoder;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=codecs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecs.js","sourceRoot":"","sources":["../../src/capabilities/codecs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaCapabilities module - capability detection and querying
|
|
3
|
+
*/
|
|
4
|
+
export type { VideoConfiguration, AudioConfiguration, MediaDecodingConfiguration, MediaEncodingConfiguration, MediaCapabilitiesInfo, MediaCapabilitiesDecodingInfo, MediaCapabilitiesEncodingInfo, } from './types.js';
|
|
5
|
+
export { SUPPORTED_VIDEO_CODECS, SUPPORTED_AUDIO_CODECS, SUPPORTED_VIDEO_CODEC_BASES, SUPPORTED_AUDIO_CODEC_BASES, SMOOTH_THRESHOLDS, parseContentType, isVideoCodecSupported, isAudioCodecSupported, isVideoCodecBaseSupported, isAudioCodecBaseSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
|
|
6
|
+
export { MediaCapabilities, mediaCapabilities, loadCapabilitiesProfile, setCapabilitiesProfilePath, } from './MediaCapabilities.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaCapabilities module - capability detection and querying
|
|
3
|
+
*/
|
|
4
|
+
// Codec utilities
|
|
5
|
+
export { SUPPORTED_VIDEO_CODECS, SUPPORTED_AUDIO_CODECS, SUPPORTED_VIDEO_CODEC_BASES, SUPPORTED_AUDIO_CODEC_BASES, SMOOTH_THRESHOLDS, parseContentType, isVideoCodecSupported, isAudioCodecSupported, isVideoCodecBaseSupported, isAudioCodecBaseSupported, estimateSmoothPlayback, checkHardwareAcceleration, } from './codecs.js';
|
|
6
|
+
// MediaCapabilities class
|
|
7
|
+
export { MediaCapabilities, mediaCapabilities, loadCapabilitiesProfile, setCapabilitiesProfilePath, } from './MediaCapabilities.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,kBAAkB;AAClB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,0BAA0B;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MediaCapabilities type definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Video configuration for capability queries
|
|
6
|
+
*/
|
|
7
|
+
export interface VideoConfiguration {
|
|
8
|
+
contentType: string;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
bitrate: number;
|
|
12
|
+
framerate: number;
|
|
13
|
+
profile?: string;
|
|
14
|
+
level?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Audio configuration for capability queries
|
|
18
|
+
*/
|
|
19
|
+
export interface AudioConfiguration {
|
|
20
|
+
contentType: string;
|
|
21
|
+
channels?: number;
|
|
22
|
+
bitrate?: number;
|
|
23
|
+
samplerate?: number;
|
|
24
|
+
profile?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Media configuration for decoding capability queries
|
|
28
|
+
*/
|
|
29
|
+
export interface MediaDecodingConfiguration {
|
|
30
|
+
type: 'file' | 'media-source' | 'webrtc';
|
|
31
|
+
video?: VideoConfiguration;
|
|
32
|
+
audio?: AudioConfiguration;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Media configuration for encoding capability queries
|
|
36
|
+
*/
|
|
37
|
+
export interface MediaEncodingConfiguration {
|
|
38
|
+
type: 'record' | 'webrtc';
|
|
39
|
+
video?: VideoConfiguration;
|
|
40
|
+
audio?: AudioConfiguration;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of a capability query
|
|
44
|
+
*/
|
|
45
|
+
export interface MediaCapabilitiesInfo {
|
|
46
|
+
supported: boolean;
|
|
47
|
+
smooth: boolean;
|
|
48
|
+
powerEfficient: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Result of a decoding capability query
|
|
52
|
+
*/
|
|
53
|
+
export interface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {
|
|
54
|
+
configuration?: MediaDecodingConfiguration;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Result of an encoding capability query
|
|
58
|
+
*/
|
|
59
|
+
export interface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {
|
|
60
|
+
configuration?: MediaEncodingConfiguration;
|
|
61
|
+
}
|
|
62
|
+
export interface CapabilityProfile {
|
|
63
|
+
video: CapabilityProfileEntry[];
|
|
64
|
+
audio: CapabilityProfileEntry[];
|
|
65
|
+
}
|
|
66
|
+
export interface CapabilityProfileEntry {
|
|
67
|
+
codec: string;
|
|
68
|
+
profile?: string;
|
|
69
|
+
level?: string;
|
|
70
|
+
maxWidth?: number;
|
|
71
|
+
maxHeight?: number;
|
|
72
|
+
maxFramerate?: number;
|
|
73
|
+
maxBitrate?: number;
|
|
74
|
+
pixelFormat?: string;
|
|
75
|
+
hardwareAccelerated?: boolean;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,aAAa,CAAC,EAAE,0BAA0B,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,aAAa,CAAC,EAAE,0BAA0B,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|