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 @@
|
|
|
1
|
+
{"version":3,"file":"pixel-formats.js","sourceRoot":"","sources":["../../src/formats/pixel-formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HardwareAcceleration.d.ts","sourceRoot":"","sources":["../../src/hardware/HardwareAcceleration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HardwareAcceleration.js","sourceRoot":"","sources":["../../src/hardware/HardwareAcceleration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware decoder argument building
|
|
3
|
+
*
|
|
4
|
+
* Functions for selecting the best decoder and building FFmpeg arguments
|
|
5
|
+
* for hardware-accelerated decoding.
|
|
6
|
+
*/
|
|
7
|
+
import type { HardwareAccelerationMethod, VideoCodecName } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get the best available decoder for a codec
|
|
10
|
+
*/
|
|
11
|
+
export declare function getBestDecoder(codec: VideoCodecName, preference?: 'prefer-hardware' | 'prefer-software' | 'no-preference'): Promise<{
|
|
12
|
+
decoder: string | null;
|
|
13
|
+
hwaccel: HardwareAccelerationMethod | null;
|
|
14
|
+
isHardware: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function getBestDecoderSync(codec: VideoCodecName, preference?: 'prefer-hardware' | 'prefer-software' | 'no-preference'): {
|
|
17
|
+
decoder: string | null;
|
|
18
|
+
hwaccel: HardwareAccelerationMethod | null;
|
|
19
|
+
isHardware: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get FFmpeg arguments for hardware-accelerated decoding
|
|
23
|
+
*/
|
|
24
|
+
export declare function getDecoderArgs(decoder: string | null, hwaccel: HardwareAccelerationMethod | null): string[];
|
|
25
|
+
//# sourceMappingURL=decoder-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder-args.d.ts","sourceRoot":"","sources":["../../src/hardware/decoder-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,0BAA0B,EAE1B,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,iBAAiB,GAAG,iBAAiB,GAAG,eAAiC,GACpF,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAGtG;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,iBAAiB,GAAG,iBAAiB,GAAG,eAAiC,GACpF;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAG7F;AA+CD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,0BAA0B,GAAG,IAAI,GACzC,MAAM,EAAE,CAwBV"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware decoder argument building
|
|
3
|
+
*
|
|
4
|
+
* Functions for selecting the best decoder and building FFmpeg arguments
|
|
5
|
+
* for hardware-accelerated decoding.
|
|
6
|
+
*/
|
|
7
|
+
import { detectHardwareAcceleration, detectHardwareAccelerationSync, } from './detection.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get the best available decoder for a codec
|
|
10
|
+
*/
|
|
11
|
+
export async function getBestDecoder(codec, preference = 'no-preference') {
|
|
12
|
+
const capabilities = await detectHardwareAcceleration();
|
|
13
|
+
return selectBestDecoder(capabilities, codec, preference);
|
|
14
|
+
}
|
|
15
|
+
export function getBestDecoderSync(codec, preference = 'no-preference') {
|
|
16
|
+
const capabilities = detectHardwareAccelerationSync();
|
|
17
|
+
return selectBestDecoder(capabilities, codec, preference);
|
|
18
|
+
}
|
|
19
|
+
function selectBestDecoder(capabilities, codec, preference) {
|
|
20
|
+
if (preference === 'prefer-software') {
|
|
21
|
+
return {
|
|
22
|
+
decoder: null, // Use default FFmpeg decoder
|
|
23
|
+
hwaccel: null,
|
|
24
|
+
isHardware: false,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// First check if VAAPI is available - it's the most reliable on Linux
|
|
28
|
+
// VAAPI uses -hwaccel vaapi flag, not a specific decoder name
|
|
29
|
+
if (capabilities.methods.includes('vaapi')) {
|
|
30
|
+
return {
|
|
31
|
+
decoder: null,
|
|
32
|
+
hwaccel: 'vaapi',
|
|
33
|
+
isHardware: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Find available hardware decoders for this codec, sorted by priority
|
|
37
|
+
const hwDecoders = capabilities.decoders
|
|
38
|
+
.filter(dec => dec.codec === codec && dec.available)
|
|
39
|
+
.sort((a, b) => a.priority - b.priority);
|
|
40
|
+
if (hwDecoders.length > 0) {
|
|
41
|
+
const best = hwDecoders[0];
|
|
42
|
+
return {
|
|
43
|
+
decoder: best.name,
|
|
44
|
+
hwaccel: best.hwaccel,
|
|
45
|
+
isHardware: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Fall back to software
|
|
49
|
+
return {
|
|
50
|
+
decoder: null,
|
|
51
|
+
hwaccel: null,
|
|
52
|
+
isHardware: false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get FFmpeg arguments for hardware-accelerated decoding
|
|
57
|
+
*/
|
|
58
|
+
export function getDecoderArgs(decoder, hwaccel) {
|
|
59
|
+
const args = [];
|
|
60
|
+
if (hwaccel === 'vaapi') {
|
|
61
|
+
args.push('-hwaccel', 'vaapi');
|
|
62
|
+
args.push('-vaapi_device', '/dev/dri/renderD128');
|
|
63
|
+
args.push('-hwaccel_output_format', 'vaapi');
|
|
64
|
+
}
|
|
65
|
+
else if (hwaccel === 'cuda') {
|
|
66
|
+
args.push('-hwaccel', 'cuda');
|
|
67
|
+
args.push('-hwaccel_output_format', 'cuda');
|
|
68
|
+
if (decoder) {
|
|
69
|
+
args.push('-c:v', decoder);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (hwaccel === 'qsv') {
|
|
73
|
+
args.push('-hwaccel', 'qsv');
|
|
74
|
+
args.push('-hwaccel_output_format', 'qsv');
|
|
75
|
+
if (decoder) {
|
|
76
|
+
args.push('-c:v', decoder);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (decoder) {
|
|
80
|
+
args.push('-c:v', decoder);
|
|
81
|
+
}
|
|
82
|
+
return args;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=decoder-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder-args.js","sourceRoot":"","sources":["../../src/hardware/decoder-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware acceleration detection
|
|
3
|
+
*
|
|
4
|
+
* Detects available hardware acceleration methods, encoders, and decoders
|
|
5
|
+
* by querying FFmpeg capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { HardwareAccelerationMethod, HardwareCapabilities } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Detect available hardware acceleration methods (asynchronously)
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectHardwareAcceleration(): Promise<HardwareCapabilities>;
|
|
12
|
+
/**
|
|
13
|
+
* Detect available hardware acceleration methods synchronously
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectHardwareAccelerationSync(): HardwareCapabilities;
|
|
16
|
+
/**
|
|
17
|
+
* Get list of hardware acceleration methods from FFmpeg
|
|
18
|
+
*/
|
|
19
|
+
export declare function getFFmpegHwaccels(): Promise<HardwareAccelerationMethod[]>;
|
|
20
|
+
export declare function getFFmpegHwaccelsSync(): HardwareAccelerationMethod[];
|
|
21
|
+
/**
|
|
22
|
+
* Get list of available encoders from FFmpeg
|
|
23
|
+
*/
|
|
24
|
+
export declare function getFFmpegEncoders(): Promise<string[]>;
|
|
25
|
+
export declare function getFFmpegEncodersSync(): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Get list of available decoders from FFmpeg
|
|
28
|
+
*/
|
|
29
|
+
export declare function getFFmpegDecoders(): Promise<string[]>;
|
|
30
|
+
export declare function getFFmpegDecodersSync(): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Get a summary of available hardware acceleration
|
|
33
|
+
*/
|
|
34
|
+
export declare function getHardwareAccelerationSummary(): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Clear cached capabilities (for testing or after hardware changes)
|
|
37
|
+
*/
|
|
38
|
+
export declare function clearCapabilitiesCache(): void;
|
|
39
|
+
//# sourceMappingURL=detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/hardware/detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAuGpB;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,oBAAoB,CAKrE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAE/E;AAED,wBAAgB,qBAAqB,IAAI,0BAA0B,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE3D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE3D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,CAgCtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware acceleration detection
|
|
3
|
+
*
|
|
4
|
+
* Detects available hardware acceleration methods, encoders, and decoders
|
|
5
|
+
* by querying FFmpeg capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { createLogger } from '../utils/logger.js';
|
|
9
|
+
import { HARDWARE_ENCODERS, HARDWARE_DECODERS } from './types.js';
|
|
10
|
+
const logger = createLogger('HardwareAcceleration');
|
|
11
|
+
// Cached capabilities
|
|
12
|
+
let cachedCapabilities = null;
|
|
13
|
+
function collectHwaccels() {
|
|
14
|
+
try {
|
|
15
|
+
const output = execSync('ffmpeg -hwaccels 2>&1', { encoding: 'utf8' });
|
|
16
|
+
const lines = output.split('\n');
|
|
17
|
+
const methods = [];
|
|
18
|
+
let startParsing = false;
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
if (line.includes('Hardware acceleration methods:')) {
|
|
21
|
+
startParsing = true;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (startParsing && line.trim()) {
|
|
25
|
+
const method = line.trim();
|
|
26
|
+
if (['vaapi', 'cuda', 'qsv', 'videotoolbox', 'drm', 'v4l2m2m'].includes(method)) {
|
|
27
|
+
methods.push(method);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return methods;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function collectEncoders() {
|
|
38
|
+
try {
|
|
39
|
+
const output = execSync('ffmpeg -encoders 2>&1', { encoding: 'utf8' });
|
|
40
|
+
const encoders = [];
|
|
41
|
+
for (const line of output.split('\n')) {
|
|
42
|
+
const match = line.match(/^\s*V[.\w]+\s+(\S+)/);
|
|
43
|
+
if (match) {
|
|
44
|
+
encoders.push(match[1]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return encoders;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function collectDecoders() {
|
|
54
|
+
try {
|
|
55
|
+
const output = execSync('ffmpeg -decoders 2>&1', { encoding: 'utf8' });
|
|
56
|
+
const decoders = [];
|
|
57
|
+
for (const line of output.split('\n')) {
|
|
58
|
+
const match = line.match(/^\s*V[.\w]+\s+(\S+)/);
|
|
59
|
+
if (match) {
|
|
60
|
+
decoders.push(match[1]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return decoders;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function buildCapabilities() {
|
|
70
|
+
const capabilities = {
|
|
71
|
+
methods: [],
|
|
72
|
+
encoders: [],
|
|
73
|
+
decoders: [],
|
|
74
|
+
detected: false,
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
const hwaccels = collectHwaccels();
|
|
78
|
+
capabilities.methods = hwaccels;
|
|
79
|
+
const availableEncoders = collectEncoders();
|
|
80
|
+
capabilities.encoders = HARDWARE_ENCODERS.map(enc => ({
|
|
81
|
+
...enc,
|
|
82
|
+
available: availableEncoders.includes(enc.name),
|
|
83
|
+
}));
|
|
84
|
+
const availableDecoders = collectDecoders();
|
|
85
|
+
capabilities.decoders = HARDWARE_DECODERS.map(dec => ({
|
|
86
|
+
...dec,
|
|
87
|
+
available: availableDecoders.includes(dec.name),
|
|
88
|
+
}));
|
|
89
|
+
capabilities.detected = true;
|
|
90
|
+
cachedCapabilities = capabilities;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.error('Failed to detect hardware acceleration', { error });
|
|
94
|
+
}
|
|
95
|
+
return capabilities;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Detect available hardware acceleration methods (asynchronously)
|
|
99
|
+
*/
|
|
100
|
+
export async function detectHardwareAcceleration() {
|
|
101
|
+
return detectHardwareAccelerationSync();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Detect available hardware acceleration methods synchronously
|
|
105
|
+
*/
|
|
106
|
+
export function detectHardwareAccelerationSync() {
|
|
107
|
+
if (cachedCapabilities?.detected) {
|
|
108
|
+
return cachedCapabilities;
|
|
109
|
+
}
|
|
110
|
+
return buildCapabilities();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get list of hardware acceleration methods from FFmpeg
|
|
114
|
+
*/
|
|
115
|
+
export async function getFFmpegHwaccels() {
|
|
116
|
+
return collectHwaccels();
|
|
117
|
+
}
|
|
118
|
+
export function getFFmpegHwaccelsSync() {
|
|
119
|
+
return collectHwaccels();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get list of available encoders from FFmpeg
|
|
123
|
+
*/
|
|
124
|
+
export async function getFFmpegEncoders() {
|
|
125
|
+
return collectEncoders();
|
|
126
|
+
}
|
|
127
|
+
export function getFFmpegEncodersSync() {
|
|
128
|
+
return collectEncoders();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get list of available decoders from FFmpeg
|
|
132
|
+
*/
|
|
133
|
+
export async function getFFmpegDecoders() {
|
|
134
|
+
return collectDecoders();
|
|
135
|
+
}
|
|
136
|
+
export function getFFmpegDecodersSync() {
|
|
137
|
+
return collectDecoders();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get a summary of available hardware acceleration
|
|
141
|
+
*/
|
|
142
|
+
export async function getHardwareAccelerationSummary() {
|
|
143
|
+
const capabilities = await detectHardwareAcceleration();
|
|
144
|
+
const lines = [
|
|
145
|
+
'Hardware Acceleration Support:',
|
|
146
|
+
` Methods: ${capabilities.methods.length > 0 ? capabilities.methods.join(', ') : 'none'}`,
|
|
147
|
+
'',
|
|
148
|
+
'Available Hardware Encoders:',
|
|
149
|
+
];
|
|
150
|
+
const availableEncoders = capabilities.encoders.filter(e => e.available);
|
|
151
|
+
if (availableEncoders.length > 0) {
|
|
152
|
+
for (const enc of availableEncoders) {
|
|
153
|
+
lines.push(` ${enc.name} (${enc.codec}, ${enc.hwaccel})`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
lines.push(' none');
|
|
158
|
+
}
|
|
159
|
+
lines.push('');
|
|
160
|
+
lines.push('Available Hardware Decoders:');
|
|
161
|
+
const availableDecoders = capabilities.decoders.filter(d => d.available);
|
|
162
|
+
if (availableDecoders.length > 0) {
|
|
163
|
+
for (const dec of availableDecoders) {
|
|
164
|
+
lines.push(` ${dec.name} (${dec.codec}, ${dec.hwaccel})`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
lines.push(' none');
|
|
169
|
+
}
|
|
170
|
+
return lines.join('\n');
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clear cached capabilities (for testing or after hardware changes)
|
|
174
|
+
*/
|
|
175
|
+
export function clearCapabilitiesCache() {
|
|
176
|
+
cachedCapabilities = null;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../src/hardware/detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware encoder argument building
|
|
3
|
+
*
|
|
4
|
+
* Functions for selecting the best encoder and building FFmpeg arguments
|
|
5
|
+
* for hardware-accelerated encoding.
|
|
6
|
+
*/
|
|
7
|
+
import type { HardwareAccelerationMethod, VideoCodecName } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get the best available encoder for a codec
|
|
10
|
+
*/
|
|
11
|
+
export declare function getBestEncoder(codec: VideoCodecName, preference?: 'prefer-hardware' | 'prefer-software' | 'no-preference'): Promise<{
|
|
12
|
+
encoder: string;
|
|
13
|
+
hwaccel: HardwareAccelerationMethod | null;
|
|
14
|
+
isHardware: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function getBestEncoderSync(codec: VideoCodecName, preference?: 'prefer-hardware' | 'prefer-software' | 'no-preference'): {
|
|
17
|
+
encoder: string;
|
|
18
|
+
hwaccel: HardwareAccelerationMethod | null;
|
|
19
|
+
isHardware: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get FFmpeg arguments for hardware-accelerated encoding
|
|
23
|
+
*/
|
|
24
|
+
export declare function getEncoderArgs(encoder: string, hwaccel: HardwareAccelerationMethod | null, options?: {
|
|
25
|
+
bitrate?: number;
|
|
26
|
+
quality?: number;
|
|
27
|
+
preset?: string;
|
|
28
|
+
}): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Test if a specific hardware encoder actually works
|
|
31
|
+
* (Some systems report encoders as available but they may not function)
|
|
32
|
+
*/
|
|
33
|
+
export declare function testEncoder(encoderName: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Map WebCodecs codec string to VideoCodecName
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseCodecString(webCodecsCodec: string): VideoCodecName | null;
|
|
38
|
+
//# sourceMappingURL=encoder-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder-args.d.ts","sourceRoot":"","sources":["../../src/hardware/encoder-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,0BAA0B,EAE1B,cAAc,EACf,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,iBAAiB,GAAG,iBAAiB,GAAG,eAAiC,GACpF,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAG/F;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,iBAAiB,GAAG,iBAAiB,GAAG,eAAiC,GACpF;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAGtF;AAqCD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,0BAA0B,GAAG,IAAI,EAC1C,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,MAAM,EAAE,CA8DV;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgB9E"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware encoder argument building
|
|
3
|
+
*
|
|
4
|
+
* Functions for selecting the best encoder and building FFmpeg arguments
|
|
5
|
+
* for hardware-accelerated encoding.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from 'child_process';
|
|
8
|
+
import { SOFTWARE_ENCODERS } from './types.js';
|
|
9
|
+
import { detectHardwareAcceleration, detectHardwareAccelerationSync, } from './detection.js';
|
|
10
|
+
/**
|
|
11
|
+
* Get the best available encoder for a codec
|
|
12
|
+
*/
|
|
13
|
+
export async function getBestEncoder(codec, preference = 'no-preference') {
|
|
14
|
+
const capabilities = await detectHardwareAcceleration();
|
|
15
|
+
return selectBestEncoder(capabilities, codec, preference);
|
|
16
|
+
}
|
|
17
|
+
export function getBestEncoderSync(codec, preference = 'no-preference') {
|
|
18
|
+
const capabilities = detectHardwareAccelerationSync();
|
|
19
|
+
return selectBestEncoder(capabilities, codec, preference);
|
|
20
|
+
}
|
|
21
|
+
function selectBestEncoder(capabilities, codec, preference) {
|
|
22
|
+
if (preference === 'prefer-software') {
|
|
23
|
+
return {
|
|
24
|
+
encoder: SOFTWARE_ENCODERS[codec],
|
|
25
|
+
hwaccel: null,
|
|
26
|
+
isHardware: false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Find available hardware encoders for this codec, sorted by priority
|
|
30
|
+
const hwEncoders = capabilities.encoders
|
|
31
|
+
.filter(enc => enc.codec === codec && enc.available)
|
|
32
|
+
.sort((a, b) => a.priority - b.priority);
|
|
33
|
+
if (hwEncoders.length > 0) {
|
|
34
|
+
const best = hwEncoders[0];
|
|
35
|
+
return {
|
|
36
|
+
encoder: best.name,
|
|
37
|
+
hwaccel: best.hwaccel,
|
|
38
|
+
isHardware: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Fall back to software
|
|
42
|
+
return {
|
|
43
|
+
encoder: SOFTWARE_ENCODERS[codec],
|
|
44
|
+
hwaccel: null,
|
|
45
|
+
isHardware: false,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get FFmpeg arguments for hardware-accelerated encoding
|
|
50
|
+
*/
|
|
51
|
+
export function getEncoderArgs(encoder, hwaccel, options = {}) {
|
|
52
|
+
const args = [];
|
|
53
|
+
// Add hwaccel-specific input/filter options
|
|
54
|
+
if (hwaccel === 'vaapi') {
|
|
55
|
+
// VAAPI needs format conversion and upload
|
|
56
|
+
args.push('-vaapi_device', '/dev/dri/renderD128');
|
|
57
|
+
args.push('-vf', 'format=nv12,hwupload');
|
|
58
|
+
}
|
|
59
|
+
else if (hwaccel === 'cuda' || hwaccel === 'nvenc') {
|
|
60
|
+
// NVENC can use CUDA for upload
|
|
61
|
+
args.push('-hwaccel', 'cuda');
|
|
62
|
+
args.push('-hwaccel_output_format', 'cuda');
|
|
63
|
+
}
|
|
64
|
+
else if (hwaccel === 'qsv') {
|
|
65
|
+
args.push('-hwaccel', 'qsv');
|
|
66
|
+
args.push('-hwaccel_output_format', 'qsv');
|
|
67
|
+
}
|
|
68
|
+
// Encoder selection
|
|
69
|
+
args.push('-c:v', encoder);
|
|
70
|
+
// Encoder-specific options
|
|
71
|
+
if (encoder.includes('nvenc')) {
|
|
72
|
+
if (options.preset) {
|
|
73
|
+
args.push('-preset', options.preset);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
args.push('-preset', 'p4'); // Balanced preset
|
|
77
|
+
}
|
|
78
|
+
if (options.bitrate) {
|
|
79
|
+
args.push('-b:v', String(options.bitrate));
|
|
80
|
+
}
|
|
81
|
+
if (options.quality !== undefined) {
|
|
82
|
+
args.push('-cq', String(options.quality));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (encoder.includes('qsv')) {
|
|
86
|
+
if (options.preset) {
|
|
87
|
+
args.push('-preset', options.preset);
|
|
88
|
+
}
|
|
89
|
+
if (options.bitrate) {
|
|
90
|
+
args.push('-b:v', String(options.bitrate));
|
|
91
|
+
}
|
|
92
|
+
if (options.quality !== undefined) {
|
|
93
|
+
args.push('-global_quality', String(options.quality));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (encoder.includes('vaapi')) {
|
|
97
|
+
if (options.bitrate) {
|
|
98
|
+
args.push('-b:v', String(options.bitrate));
|
|
99
|
+
}
|
|
100
|
+
if (options.quality !== undefined) {
|
|
101
|
+
// VAAPI uses rc_mode and quality
|
|
102
|
+
args.push('-rc_mode', 'CQP');
|
|
103
|
+
args.push('-qp', String(options.quality));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (encoder.includes('videotoolbox')) {
|
|
107
|
+
if (options.bitrate) {
|
|
108
|
+
args.push('-b:v', String(options.bitrate));
|
|
109
|
+
}
|
|
110
|
+
if (options.quality !== undefined) {
|
|
111
|
+
args.push('-q:v', String(options.quality));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return args;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Test if a specific hardware encoder actually works
|
|
118
|
+
* (Some systems report encoders as available but they may not function)
|
|
119
|
+
*/
|
|
120
|
+
export async function testEncoder(encoderName) {
|
|
121
|
+
return new Promise((resolve) => {
|
|
122
|
+
const testArgs = [
|
|
123
|
+
'-hide_banner',
|
|
124
|
+
'-loglevel', 'error',
|
|
125
|
+
'-f', 'lavfi',
|
|
126
|
+
'-i', 'color=c=black:s=64x64:d=0.1',
|
|
127
|
+
'-c:v', encoderName,
|
|
128
|
+
'-frames:v', '1',
|
|
129
|
+
'-f', 'null',
|
|
130
|
+
'-',
|
|
131
|
+
];
|
|
132
|
+
// Add VAAPI device if needed
|
|
133
|
+
if (encoderName.includes('vaapi')) {
|
|
134
|
+
testArgs.splice(0, 0, '-vaapi_device', '/dev/dri/renderD128');
|
|
135
|
+
// Insert filter before output options
|
|
136
|
+
const outputIdx = testArgs.indexOf('-c:v');
|
|
137
|
+
testArgs.splice(outputIdx, 0, '-vf', 'format=nv12,hwupload');
|
|
138
|
+
}
|
|
139
|
+
const proc = spawn('ffmpeg', testArgs, {
|
|
140
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
141
|
+
});
|
|
142
|
+
let hasError = false;
|
|
143
|
+
proc.stderr?.on('data', () => {
|
|
144
|
+
hasError = true;
|
|
145
|
+
});
|
|
146
|
+
proc.on('close', (code) => {
|
|
147
|
+
resolve(code === 0 && !hasError);
|
|
148
|
+
});
|
|
149
|
+
proc.on('error', () => {
|
|
150
|
+
resolve(false);
|
|
151
|
+
});
|
|
152
|
+
// Timeout after 5 seconds
|
|
153
|
+
setTimeout(() => {
|
|
154
|
+
proc.kill();
|
|
155
|
+
resolve(false);
|
|
156
|
+
}, 5000);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Map WebCodecs codec string to VideoCodecName
|
|
161
|
+
*/
|
|
162
|
+
export function parseCodecString(webCodecsCodec) {
|
|
163
|
+
const codecBase = webCodecsCodec.split('.')[0].toLowerCase();
|
|
164
|
+
const codecMap = {
|
|
165
|
+
'avc1': 'h264',
|
|
166
|
+
'avc3': 'h264',
|
|
167
|
+
'hev1': 'hevc',
|
|
168
|
+
'hvc1': 'hevc',
|
|
169
|
+
'vp8': 'vp8',
|
|
170
|
+
'vp09': 'vp9',
|
|
171
|
+
'vp9': 'vp9',
|
|
172
|
+
'av01': 'av1',
|
|
173
|
+
'av1': 'av1',
|
|
174
|
+
};
|
|
175
|
+
return codecMap[codecBase] || null;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=encoder-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder-args.js","sourceRoot":"","sources":["../../src/hardware/encoder-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware acceleration utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides hardware-accelerated video encoding/decoding support
|
|
5
|
+
* for VAAPI (Linux), NVENC/NVDEC (NVIDIA), QSV (Intel), VideoToolbox (macOS)
|
|
6
|
+
*/
|
|
7
|
+
export type { HardwareAccelerationMethod, VideoCodecName, HardwareEncoderInfo, HardwareDecoderInfo, HardwareCapabilities, } from './types.js';
|
|
8
|
+
export { HARDWARE_ENCODERS, HARDWARE_DECODERS, SOFTWARE_ENCODERS, } from './types.js';
|
|
9
|
+
export { detectHardwareAcceleration, detectHardwareAccelerationSync, getFFmpegHwaccels, getFFmpegHwaccelsSync, getFFmpegEncoders, getFFmpegEncodersSync, getFFmpegDecoders, getFFmpegDecodersSync, getHardwareAccelerationSummary, clearCapabilitiesCache, } from './detection.js';
|
|
10
|
+
export { getBestEncoder, getBestEncoderSync, getEncoderArgs, testEncoder, parseCodecString, } from './encoder-args.js';
|
|
11
|
+
export { getBestDecoder, getBestDecoderSync, getDecoderArgs, } from './decoder-args.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hardware/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,0BAA0B,EAC1B,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware acceleration utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides hardware-accelerated video encoding/decoding support
|
|
5
|
+
* for VAAPI (Linux), NVENC/NVDEC (NVIDIA), QSV (Intel), VideoToolbox (macOS)
|
|
6
|
+
*/
|
|
7
|
+
export { HARDWARE_ENCODERS, HARDWARE_DECODERS, SOFTWARE_ENCODERS, } from './types.js';
|
|
8
|
+
// Detection functions
|
|
9
|
+
export { detectHardwareAcceleration, detectHardwareAccelerationSync, getFFmpegHwaccels, getFFmpegHwaccelsSync, getFFmpegEncoders, getFFmpegEncodersSync, getFFmpegDecoders, getFFmpegDecodersSync, getHardwareAccelerationSummary, clearCapabilitiesCache, } from './detection.js';
|
|
10
|
+
// Encoder functions
|
|
11
|
+
export { getBestEncoder, getBestEncoderSync, getEncoderArgs, testEncoder, parseCodecString, } from './encoder-args.js';
|
|
12
|
+
// Decoder functions
|
|
13
|
+
export { getBestDecoder, getBestDecoderSync, getDecoderArgs, } from './decoder-args.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hardware/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,sBAAsB;AACtB,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|