Practical examples demonstrating webcodecs-node features.
Build the project first:
npm run buildUse npx tsx to run TypeScript examples directly:
npx tsx examples/video-encoding.ts
npx tsx examples/video-decoding.ts
npx tsx examples/audio-encoding.ts
npx tsx examples/image-decoding.ts
npx tsx examples/transparent-video.ts
npx tsx examples/streaming.ts
npx tsx examples/hardware-encoding.ts
npx tsx examples/hardware-decoding.ts
npx tsx examples/canvas-encoding.ts
npx tsx examples/offscreen-canvas.tsBasic video encoding with H.264. Demonstrates:
- Creating a VideoEncoder
- Configuring codec, bitrate, and framerate
- Encoding VideoFrames from raw RGBA data
- Handling keyframes
Video decoding back to raw frames. Demonstrates:
- Encoding frames to get sample chunks
- Creating a VideoDecoder
- Decoding EncodedVideoChunks back to VideoFrames
Audio encoding with Opus. Demonstrates:
- Creating an AudioEncoder
- Configuring sample rate, channels, and bitrate
- Encoding AudioData from float32 samples
- Generating sine wave test audio
Image decoding including animated formats. Demonstrates:
- Checking format support with isTypeSupported
- Decoding PNG, JPEG, GIF, WebP images
- Accessing frame timing for animated images
- Using ImageTrackList for animation info
VP9 encoding with alpha channel. Demonstrates:
- Configuring
alpha: 'keep'for transparency - Creating frames with varying alpha values
- Comparing file sizes with/without alpha
Real-time vs quality encoding comparison. Demonstrates:
- Using
latencyMode: 'realtime'for streaming - Using
latencyMode: 'quality'for best compression - Measuring encode time and output size differences
GPU-accelerated encoding. Demonstrates:
- Detecting available hardware acceleration (VAAPI, NVENC, QSV)
- Using
hardwareAcceleration: 'prefer-hardware' - Benchmarking hardware vs software encoding
- Getting the best encoder for a codec
GPU-accelerated decoding. Demonstrates:
- Detecting available hardware decoders (VAAPI, NVDEC, QSV)
- Using
hardwareAcceleration: 'prefer-hardware'for decoding - Benchmarking hardware vs software decoding
- Real-time decoding capability analysis
GPU-accelerated canvas rendering with skia-canvas. Demonstrates:
- GPU acceleration detection (Metal/Vulkan/D3D)
- Creating GPU-accelerated canvas with
createCanvas() - Using
FrameLoopwith backpressure for smooth encoding - Animated canvas drawing with gradients and shapes
- Proper memory lifecycle (frame closing)
- Real-time encoding speed measurement
Browser-compatible OffscreenCanvas API. Demonstrates:
- Using
OffscreenCanvasPolyfill(matches browser API) - Installing polyfill globally with
installOffscreenCanvasPolyfill() ImageDataPolyfillwithUint8ClampedArraycreatePixelBuffer()utilities for pixel manipulationconvertToBlob()for PNG/JPEG/WebP exportvalidateEvenDimensions()for YUV420 compatibility- Direct
VideoFramecreation from OffscreenCanvas
The demos/ folder contains more complete demos that can be run via npm scripts:
npm run demo:webcodecs # Basic WebCodecs demo
npm run demo:image # Image decoding demo
npm run demo:streaming # Streaming comparison
npm run demo:hwaccel # Hardware acceleration detection
npm run demo:fourcorners # Video quadrant compositor
npm run demo:containers # Container demuxing/muxing
npm run demo:1080p # 1080p transcoding benchmark
npm run demo:dvd # Bouncing DVD logo animation
npm run demo:visualizer # Audio visualizer with waveform