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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input validation utilities
|
|
3
|
+
*/
|
|
4
|
+
import { DOMException } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Validate that a value is a positive integer
|
|
7
|
+
*/
|
|
8
|
+
export function validatePositiveInteger(value, name) {
|
|
9
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {
|
|
10
|
+
throw new TypeError(`${name} must be a positive integer`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate that a value is a non-negative integer
|
|
16
|
+
*/
|
|
17
|
+
export function validateNonNegativeInteger(value, name) {
|
|
18
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
|
|
19
|
+
throw new TypeError(`${name} must be a non-negative integer`);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validate that a value is a finite number
|
|
25
|
+
*/
|
|
26
|
+
export function validateFiniteNumber(value, name) {
|
|
27
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
28
|
+
throw new TypeError(`${name} must be a finite number`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate that an object is not null or undefined
|
|
34
|
+
*/
|
|
35
|
+
export function validateRequired(value, name) {
|
|
36
|
+
if (value === null || value === undefined) {
|
|
37
|
+
throw new TypeError(`${name} is required`);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate that a string is not empty
|
|
43
|
+
*/
|
|
44
|
+
export function validateNonEmptyString(value, name) {
|
|
45
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
46
|
+
throw new TypeError(`${name} must be a non-empty string`);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validate codec state is configured
|
|
52
|
+
*/
|
|
53
|
+
export function validateConfigured(state, operation) {
|
|
54
|
+
if (state !== 'configured') {
|
|
55
|
+
throw new DOMException(`Cannot ${operation} on ${state} codec`, 'InvalidStateError');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate codec is not closed
|
|
60
|
+
*/
|
|
61
|
+
export function validateNotClosed(state) {
|
|
62
|
+
if (state === 'closed') {
|
|
63
|
+
throw new DOMException('Codec is closed', 'InvalidStateError');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc,EAAE,IAAY;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAc,EAAE,IAAY;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,IAAY;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAA2B,EAAE,IAAY;IAC3E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,IAAY;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,SAAiB;IACjE,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,UAAU,SAAS,OAAO,KAAK,QAAQ,EACvC,mBAAmB,CACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
|
package/docs/api.md
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
This document provides detailed API documentation for webcodecs-node.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [VideoEncoder](#videoencoder)
|
|
8
|
+
- [VideoDecoder](#videodecoder)
|
|
9
|
+
- [AudioEncoder](#audioencoder)
|
|
10
|
+
- [AudioDecoder](#audiodecoder)
|
|
11
|
+
- [ImageDecoder](#imagedecoder)
|
|
12
|
+
- [VideoFrame](#videoframe)
|
|
13
|
+
- [AudioData](#audiodata)
|
|
14
|
+
- [EncodedVideoChunk](#encodedvideochunk)
|
|
15
|
+
- [EncodedAudioChunk](#encodedaudiochunk)
|
|
16
|
+
- [MediaCapabilities](#mediacapabilities)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## VideoEncoder
|
|
21
|
+
|
|
22
|
+
Encodes raw video frames into compressed video chunks.
|
|
23
|
+
|
|
24
|
+
### Constructor
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
new VideoEncoder(init: VideoEncoderInit)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**VideoEncoderInit:**
|
|
31
|
+
- `output: (chunk: EncodedVideoChunk, metadata?: VideoEncoderOutputMetadata) => void` - Called for each encoded chunk
|
|
32
|
+
- `error: (error: Error) => void` - Called on encoding errors
|
|
33
|
+
|
|
34
|
+
### Static Methods
|
|
35
|
+
|
|
36
|
+
#### `isConfigSupported(config: VideoEncoderConfig): Promise<VideoEncoderSupport>`
|
|
37
|
+
|
|
38
|
+
Check if a configuration is supported before encoding.
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
const support = await VideoEncoder.isConfigSupported({
|
|
42
|
+
codec: 'avc1.42001E',
|
|
43
|
+
width: 1920,
|
|
44
|
+
height: 1080,
|
|
45
|
+
});
|
|
46
|
+
console.log(support.supported); // true or false
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Instance Methods
|
|
50
|
+
|
|
51
|
+
#### `configure(config: VideoEncoderConfig): void`
|
|
52
|
+
|
|
53
|
+
Configure the encoder. Must be called before encoding.
|
|
54
|
+
|
|
55
|
+
**VideoEncoderConfig:**
|
|
56
|
+
| Property | Type | Required | Description |
|
|
57
|
+
|----------|------|----------|-------------|
|
|
58
|
+
| `codec` | string | Yes | Codec string (e.g., 'avc1.42001E', 'vp9') |
|
|
59
|
+
| `width` | number | Yes | Frame width in pixels |
|
|
60
|
+
| `height` | number | Yes | Frame height in pixels |
|
|
61
|
+
| `bitrate` | number | No | Target bitrate in bits/second |
|
|
62
|
+
| `framerate` | number | No | Target framerate |
|
|
63
|
+
| `bitrateMode` | 'constant' \| 'variable' \| 'quantizer' | No | Bitrate control mode |
|
|
64
|
+
| `alpha` | 'discard' \| 'keep' | No | Alpha channel handling |
|
|
65
|
+
| `latencyMode` | 'quality' \| 'realtime' | No | Latency vs quality tradeoff |
|
|
66
|
+
| `hardwareAcceleration` | 'no-preference' \| 'prefer-hardware' \| 'prefer-software' | No | Hardware acceleration preference |
|
|
67
|
+
|
|
68
|
+
#### `encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void`
|
|
69
|
+
|
|
70
|
+
Encode a video frame.
|
|
71
|
+
|
|
72
|
+
**VideoEncoderEncodeOptions:**
|
|
73
|
+
- `keyFrame?: boolean` - Force this frame to be a keyframe
|
|
74
|
+
|
|
75
|
+
#### `flush(): Promise<void>`
|
|
76
|
+
|
|
77
|
+
Flush all pending frames and wait for output.
|
|
78
|
+
|
|
79
|
+
#### `reset(): void`
|
|
80
|
+
|
|
81
|
+
Reset encoder to unconfigured state.
|
|
82
|
+
|
|
83
|
+
#### `close(): void`
|
|
84
|
+
|
|
85
|
+
Close the encoder and release resources.
|
|
86
|
+
|
|
87
|
+
### Properties
|
|
88
|
+
|
|
89
|
+
- `state: 'unconfigured' | 'configured' | 'closed'` - Current encoder state
|
|
90
|
+
- `encodeQueueSize: number` - Number of frames pending encoding
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## VideoDecoder
|
|
95
|
+
|
|
96
|
+
Decodes compressed video chunks into raw video frames.
|
|
97
|
+
|
|
98
|
+
### Constructor
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
new VideoDecoder(init: VideoDecoderInit)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**VideoDecoderInit:**
|
|
105
|
+
- `output: (frame: VideoFrame) => void` - Called for each decoded frame
|
|
106
|
+
- `error: (error: Error) => void` - Called on decoding errors
|
|
107
|
+
|
|
108
|
+
### Static Methods
|
|
109
|
+
|
|
110
|
+
#### `isConfigSupported(config: VideoDecoderConfig): Promise<VideoDecoderSupport>`
|
|
111
|
+
|
|
112
|
+
Check if a configuration is supported.
|
|
113
|
+
|
|
114
|
+
### Instance Methods
|
|
115
|
+
|
|
116
|
+
#### `configure(config: VideoDecoderConfig): void`
|
|
117
|
+
|
|
118
|
+
**VideoDecoderConfig:**
|
|
119
|
+
| Property | Type | Required | Description |
|
|
120
|
+
|----------|------|----------|-------------|
|
|
121
|
+
| `codec` | string | Yes | Codec string |
|
|
122
|
+
| `codedWidth` | number | No | Coded frame width |
|
|
123
|
+
| `codedHeight` | number | No | Coded frame height |
|
|
124
|
+
| `description` | BufferSource | No | Codec-specific data (e.g., SPS/PPS for H.264) |
|
|
125
|
+
|
|
126
|
+
#### `decode(chunk: EncodedVideoChunk): void`
|
|
127
|
+
|
|
128
|
+
Decode an encoded video chunk.
|
|
129
|
+
|
|
130
|
+
#### `flush(): Promise<void>`
|
|
131
|
+
|
|
132
|
+
Flush all pending chunks.
|
|
133
|
+
|
|
134
|
+
#### `reset(): void`
|
|
135
|
+
|
|
136
|
+
Reset decoder to unconfigured state.
|
|
137
|
+
|
|
138
|
+
#### `close(): void`
|
|
139
|
+
|
|
140
|
+
Close the decoder.
|
|
141
|
+
|
|
142
|
+
### Properties
|
|
143
|
+
|
|
144
|
+
- `state: 'unconfigured' | 'configured' | 'closed'`
|
|
145
|
+
- `decodeQueueSize: number`
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## AudioEncoder
|
|
150
|
+
|
|
151
|
+
Encodes raw audio data into compressed audio chunks.
|
|
152
|
+
|
|
153
|
+
### Constructor
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
new AudioEncoder(init: AudioEncoderInit)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Static Methods
|
|
160
|
+
|
|
161
|
+
#### `isConfigSupported(config: AudioEncoderConfig): Promise<AudioEncoderSupport>`
|
|
162
|
+
|
|
163
|
+
### Instance Methods
|
|
164
|
+
|
|
165
|
+
#### `configure(config: AudioEncoderConfig): void`
|
|
166
|
+
|
|
167
|
+
**AudioEncoderConfig:**
|
|
168
|
+
| Property | Type | Required | Description |
|
|
169
|
+
|----------|------|----------|-------------|
|
|
170
|
+
| `codec` | string | Yes | Codec string (e.g., 'opus', 'mp4a.40.2') |
|
|
171
|
+
| `sampleRate` | number | Yes | Sample rate in Hz |
|
|
172
|
+
| `numberOfChannels` | number | Yes | Number of audio channels |
|
|
173
|
+
| `bitrate` | number | No | Target bitrate |
|
|
174
|
+
|
|
175
|
+
#### `encode(data: AudioData): void`
|
|
176
|
+
|
|
177
|
+
Encode audio data.
|
|
178
|
+
|
|
179
|
+
#### `flush(): Promise<void>`
|
|
180
|
+
|
|
181
|
+
#### `reset(): void`
|
|
182
|
+
|
|
183
|
+
#### `close(): void`
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## AudioDecoder
|
|
188
|
+
|
|
189
|
+
Decodes compressed audio chunks into raw audio data.
|
|
190
|
+
|
|
191
|
+
### Constructor
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
new AudioDecoder(init: AudioDecoderInit)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Instance Methods
|
|
198
|
+
|
|
199
|
+
#### `configure(config: AudioDecoderConfig): void`
|
|
200
|
+
|
|
201
|
+
**AudioDecoderConfig:**
|
|
202
|
+
| Property | Type | Required | Description |
|
|
203
|
+
|----------|------|----------|-------------|
|
|
204
|
+
| `codec` | string | Yes | Codec string |
|
|
205
|
+
| `sampleRate` | number | Yes | Sample rate in Hz |
|
|
206
|
+
| `numberOfChannels` | number | Yes | Number of channels |
|
|
207
|
+
| `description` | BufferSource | No | Codec-specific data |
|
|
208
|
+
|
|
209
|
+
#### `decode(chunk: EncodedAudioChunk): void`
|
|
210
|
+
|
|
211
|
+
#### `flush(): Promise<void>`
|
|
212
|
+
|
|
213
|
+
#### `reset(): void`
|
|
214
|
+
|
|
215
|
+
#### `close(): void`
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## ImageDecoder
|
|
220
|
+
|
|
221
|
+
Decodes images (including animated) into VideoFrames.
|
|
222
|
+
|
|
223
|
+
### Constructor
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
new ImageDecoder(init: ImageDecoderInit)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**ImageDecoderInit:**
|
|
230
|
+
| Property | Type | Required | Description |
|
|
231
|
+
|----------|------|----------|-------------|
|
|
232
|
+
| `type` | string | Yes | MIME type (e.g., 'image/png') |
|
|
233
|
+
| `data` | BufferSource \| ReadableStream | Yes | Image data |
|
|
234
|
+
| `transfer` | ArrayBuffer[] | No | Buffers to transfer ownership |
|
|
235
|
+
| `colorSpaceConversion` | 'none' \| 'default' | No | Color space handling |
|
|
236
|
+
| `desiredWidth` | number | No | Target width |
|
|
237
|
+
| `desiredHeight` | number | No | Target height |
|
|
238
|
+
| `preferAnimation` | boolean | No | Prefer animated track |
|
|
239
|
+
| `premultiplyAlpha` | 'none' \| 'premultiply' \| 'default' | No | Alpha handling |
|
|
240
|
+
|
|
241
|
+
### Static Methods
|
|
242
|
+
|
|
243
|
+
#### `isTypeSupported(type: string): Promise<boolean>`
|
|
244
|
+
|
|
245
|
+
Check if a MIME type is supported.
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
const supported = await ImageDecoder.isTypeSupported('image/webp');
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Instance Methods
|
|
252
|
+
|
|
253
|
+
#### `decode(options?: ImageDecodeOptions): Promise<ImageDecodeResult>`
|
|
254
|
+
|
|
255
|
+
Decode a frame from the image.
|
|
256
|
+
|
|
257
|
+
**ImageDecodeOptions:**
|
|
258
|
+
- `frameIndex?: number` - Frame index to decode (for animated images)
|
|
259
|
+
- `completeFramesOnly?: boolean` - Only return complete frames
|
|
260
|
+
|
|
261
|
+
**ImageDecodeResult:**
|
|
262
|
+
- `image: VideoFrame` - The decoded frame
|
|
263
|
+
- `complete: boolean` - Whether decoding is complete
|
|
264
|
+
|
|
265
|
+
#### `close(): void`
|
|
266
|
+
|
|
267
|
+
Close the decoder.
|
|
268
|
+
|
|
269
|
+
### Properties
|
|
270
|
+
|
|
271
|
+
- `type: string` - MIME type
|
|
272
|
+
- `complete: boolean` - Whether all data is buffered
|
|
273
|
+
- `completed: Promise<void>` - Resolves when ready to decode
|
|
274
|
+
- `tracks: ImageTrackList` - Track information
|
|
275
|
+
|
|
276
|
+
### ImageTrackList
|
|
277
|
+
|
|
278
|
+
- `ready: Promise<void>` - Resolves when tracks are parsed
|
|
279
|
+
- `length: number` - Number of tracks
|
|
280
|
+
- `selectedIndex: number` - Currently selected track
|
|
281
|
+
- `selectedTrack: ImageTrack | null` - Selected track object
|
|
282
|
+
|
|
283
|
+
### ImageTrack
|
|
284
|
+
|
|
285
|
+
- `animated: boolean` - Whether track is animated
|
|
286
|
+
- `frameCount: number` - Number of frames
|
|
287
|
+
- `repetitionCount: number` - Loop count (Infinity = forever)
|
|
288
|
+
- `selected: boolean` - Whether track is selected
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## VideoFrame
|
|
293
|
+
|
|
294
|
+
Represents a single video frame with raw pixel data.
|
|
295
|
+
|
|
296
|
+
### Constructor
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
new VideoFrame(data: BufferSource, init: VideoFrameBufferInit)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**VideoFrameBufferInit:**
|
|
303
|
+
| Property | Type | Required | Description |
|
|
304
|
+
|----------|------|----------|-------------|
|
|
305
|
+
| `format` | VideoPixelFormat | Yes | Pixel format |
|
|
306
|
+
| `codedWidth` | number | Yes | Frame width |
|
|
307
|
+
| `codedHeight` | number | Yes | Frame height |
|
|
308
|
+
| `timestamp` | number | Yes | Timestamp in microseconds |
|
|
309
|
+
| `duration` | number | No | Duration in microseconds |
|
|
310
|
+
| `displayWidth` | number | No | Display width |
|
|
311
|
+
| `displayHeight` | number | No | Display height |
|
|
312
|
+
|
|
313
|
+
**Supported VideoPixelFormat values:**
|
|
314
|
+
- `'I420'` - YUV 4:2:0 planar
|
|
315
|
+
- `'I420A'` - YUV 4:2:0 planar with alpha
|
|
316
|
+
- `'I422'` - YUV 4:2:2 planar
|
|
317
|
+
- `'I444'` - YUV 4:4:4 planar
|
|
318
|
+
- `'NV12'` - YUV 4:2:0 semi-planar
|
|
319
|
+
- `'RGBA'` - 8-bit RGBA
|
|
320
|
+
- `'RGBX'` - 8-bit RGB (alpha ignored)
|
|
321
|
+
- `'BGRA'` - 8-bit BGRA
|
|
322
|
+
- `'BGRX'` - 8-bit BGR (alpha ignored)
|
|
323
|
+
|
|
324
|
+
### Instance Methods
|
|
325
|
+
|
|
326
|
+
#### `allocationSize(options?: VideoFrameCopyToOptions): number`
|
|
327
|
+
|
|
328
|
+
Get buffer size needed for copyTo.
|
|
329
|
+
|
|
330
|
+
#### `copyTo(destination: BufferSource, options?: VideoFrameCopyToOptions): Promise<PlaneLayout[]>`
|
|
331
|
+
|
|
332
|
+
Copy frame data to a buffer.
|
|
333
|
+
|
|
334
|
+
#### `clone(): VideoFrame`
|
|
335
|
+
|
|
336
|
+
Create a copy of the frame.
|
|
337
|
+
|
|
338
|
+
#### `close(): void`
|
|
339
|
+
|
|
340
|
+
Release frame resources. Always call this when done.
|
|
341
|
+
|
|
342
|
+
### Properties
|
|
343
|
+
|
|
344
|
+
- `format: VideoPixelFormat | null`
|
|
345
|
+
- `codedWidth: number`
|
|
346
|
+
- `codedHeight: number`
|
|
347
|
+
- `displayWidth: number`
|
|
348
|
+
- `displayHeight: number`
|
|
349
|
+
- `timestamp: number`
|
|
350
|
+
- `duration: number | null`
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## AudioData
|
|
355
|
+
|
|
356
|
+
Represents raw audio samples.
|
|
357
|
+
|
|
358
|
+
### Constructor
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
new AudioData(init: AudioDataInit)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**AudioDataInit:**
|
|
365
|
+
| Property | Type | Required | Description |
|
|
366
|
+
|----------|------|----------|-------------|
|
|
367
|
+
| `format` | AudioSampleFormat | Yes | Sample format |
|
|
368
|
+
| `sampleRate` | number | Yes | Sample rate in Hz |
|
|
369
|
+
| `numberOfChannels` | number | Yes | Channel count |
|
|
370
|
+
| `numberOfFrames` | number | Yes | Number of audio frames |
|
|
371
|
+
| `timestamp` | number | Yes | Timestamp in microseconds |
|
|
372
|
+
| `data` | BufferSource | Yes | Sample data |
|
|
373
|
+
|
|
374
|
+
**Supported AudioSampleFormat values:**
|
|
375
|
+
- `'u8'` - Unsigned 8-bit
|
|
376
|
+
- `'s16'` - Signed 16-bit
|
|
377
|
+
- `'s32'` - Signed 32-bit
|
|
378
|
+
- `'f32'` - 32-bit float
|
|
379
|
+
- `'u8-planar'` - Unsigned 8-bit planar
|
|
380
|
+
- `'s16-planar'` - Signed 16-bit planar
|
|
381
|
+
- `'s32-planar'` - Signed 32-bit planar
|
|
382
|
+
- `'f32-planar'` - 32-bit float planar
|
|
383
|
+
|
|
384
|
+
### Instance Methods
|
|
385
|
+
|
|
386
|
+
#### `allocationSize(options: AudioDataCopyToOptions): number`
|
|
387
|
+
|
|
388
|
+
#### `copyTo(destination: BufferSource, options: AudioDataCopyToOptions): void`
|
|
389
|
+
|
|
390
|
+
#### `clone(): AudioData`
|
|
391
|
+
|
|
392
|
+
#### `close(): void`
|
|
393
|
+
|
|
394
|
+
### Properties
|
|
395
|
+
|
|
396
|
+
- `format: AudioSampleFormat | null`
|
|
397
|
+
- `sampleRate: number`
|
|
398
|
+
- `numberOfChannels: number`
|
|
399
|
+
- `numberOfFrames: number`
|
|
400
|
+
- `duration: number`
|
|
401
|
+
- `timestamp: number`
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## EncodedVideoChunk
|
|
406
|
+
|
|
407
|
+
Represents a compressed video frame.
|
|
408
|
+
|
|
409
|
+
### Constructor
|
|
410
|
+
|
|
411
|
+
```typescript
|
|
412
|
+
new EncodedVideoChunk(init: EncodedVideoChunkInit)
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
**EncodedVideoChunkInit:**
|
|
416
|
+
- `type: 'key' | 'delta'` - Frame type
|
|
417
|
+
- `timestamp: number` - Timestamp in microseconds
|
|
418
|
+
- `duration?: number` - Duration in microseconds
|
|
419
|
+
- `data: BufferSource` - Encoded data
|
|
420
|
+
|
|
421
|
+
### Instance Methods
|
|
422
|
+
|
|
423
|
+
#### `copyTo(destination: BufferSource): void`
|
|
424
|
+
|
|
425
|
+
Copy chunk data to a buffer.
|
|
426
|
+
|
|
427
|
+
### Properties
|
|
428
|
+
|
|
429
|
+
- `type: 'key' | 'delta'`
|
|
430
|
+
- `timestamp: number`
|
|
431
|
+
- `duration: number | null`
|
|
432
|
+
- `byteLength: number`
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## EncodedAudioChunk
|
|
437
|
+
|
|
438
|
+
Represents compressed audio data.
|
|
439
|
+
|
|
440
|
+
### Constructor
|
|
441
|
+
|
|
442
|
+
```typescript
|
|
443
|
+
new EncodedAudioChunk(init: EncodedAudioChunkInit)
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### Properties
|
|
447
|
+
|
|
448
|
+
- `type: 'key' | 'delta'`
|
|
449
|
+
- `timestamp: number`
|
|
450
|
+
- `duration: number | null`
|
|
451
|
+
- `byteLength: number`
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## MediaCapabilities
|
|
456
|
+
|
|
457
|
+
Query codec support and performance characteristics.
|
|
458
|
+
|
|
459
|
+
### Methods
|
|
460
|
+
|
|
461
|
+
#### `decodingInfo(config: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>`
|
|
462
|
+
|
|
463
|
+
```typescript
|
|
464
|
+
const info = await mediaCapabilities.decodingInfo({
|
|
465
|
+
type: 'file',
|
|
466
|
+
video: {
|
|
467
|
+
contentType: 'video/mp4; codecs="avc1.42E01E"',
|
|
468
|
+
width: 1920,
|
|
469
|
+
height: 1080,
|
|
470
|
+
bitrate: 5_000_000,
|
|
471
|
+
framerate: 30,
|
|
472
|
+
},
|
|
473
|
+
});
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
#### `encodingInfo(config: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>`
|
|
477
|
+
|
|
478
|
+
```typescript
|
|
479
|
+
const info = await mediaCapabilities.encodingInfo({
|
|
480
|
+
type: 'record',
|
|
481
|
+
video: {
|
|
482
|
+
contentType: 'video/webm; codecs="vp9"',
|
|
483
|
+
width: 1280,
|
|
484
|
+
height: 720,
|
|
485
|
+
bitrate: 2_000_000,
|
|
486
|
+
framerate: 30,
|
|
487
|
+
},
|
|
488
|
+
});
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### Result Properties
|
|
492
|
+
|
|
493
|
+
- `supported: boolean` - Configuration is supported
|
|
494
|
+
- `smooth: boolean` - Smooth playback/encoding expected
|
|
495
|
+
- `powerEfficient: boolean` - Hardware acceleration available
|
|
496
|
+
|
|
497
|
+
### Capability Profiles
|
|
498
|
+
|
|
499
|
+
You can generate a hardware-specific capability profile to make `mediaCapabilities` match your actual FFmpeg install. Use the provided CLI:
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
npm run capabilities:generate -- ./webcodecs-capabilities.json
|
|
503
|
+
export WEBCODECS_CAPABILITIES_PROFILE=$(pwd)/webcodecs-capabilities.json
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
The JSON follows the `CapabilityProfile` schema (see `src/capabilities/types.ts`). If no profile is provided, `mediaCapabilities` falls back to built-in heuristics based on resolution, bitrate, and detected hardware acceleration.
|