miniav_tools_web 0.5.0
miniav_tools_web: ^0.5.0 copied to clipboard
WebCodecs/MediaStreamTrack-backed codecs for miniav_tools (browser).
miniav_tools_web #
WebCodecs/MediaStream backend for miniav_tools — browser only.
Wraps the browser's native VideoEncoder, VideoDecoder, AudioEncoder, and
AudioDecoder APIs, with a MediaRecorderCapture fallback for browsers that
lack WebCodecs.
Self-registers with the miniav_tools_platform_interface registry on import.
Importing
package:miniav_tools_web/miniav_tools_web.dartis enough. Once registered,MiniAVTools.createEncoder(...)will use this backend at priority 80 — browser-native encoding is preferred over wasm/software paths.
What it provides #
WebCodecsBackend—MiniAVToolsBackendimplementation backed by the browserVideoEncoder/VideoDecoder/AudioEncoder/AudioDecoderAPIs.MediaRecorderCapture—MediaStream-based fallback for browsers that do not yet ship WebCodecs (or when the codec/config is unsupported).WebCapability— runtime feature detection helpers:WebCapability.hasVideoEncoder,WebCapability.hasWebGPU, etc.
Automatic degradation #
| Runtime capability | Behaviour |
|---|---|
| WebGPU + WebCodecs available | GPU effects (WGSL via minigpu_web) + WebCodecs encoding |
| No WebGPU, WebCodecs available | GPU effects skipped; WebCodecs encoding still works |
| No WebCodecs | Use MediaRecorderCapture directly as a fallback |
Check WebCapability.hasVideoEncoder and WebCapability.hasWebGPU at
runtime to branch between paths.
Usage #
import 'package:miniav_tools/miniav_tools.dart';
import 'package:miniav_tools_web/miniav_tools_web.dart'; // self-registers
final encoder = await MiniAVTools.createEncoder(EncoderConfig(
codec: VideoCodec.h264,
width: 1280, height: 720,
bitrateBps: 4_000_000,
));
MediaRecorder fallback #
import 'package:miniav_tools_web/miniav_tools_web.dart';
if (!WebCapability.hasVideoEncoder) {
final capture = MediaRecorderCapture(
stream: videoElement.captureStream(),
mimeType: 'video/webm;codecs=vp9',
);
await capture.start();
// ...
final blob = await capture.stop();
}
Supported codecs #
WebCodecs codec coverage varies by browser. The following are broadly available in Chromium-based browsers:
| Codec | Encode | Decode |
|---|---|---|
| H.264 / AVC | ✅ | ✅ |
| VP8 | ✅ | ✅ |
| VP9 | ✅ | ✅ |
| AV1 | ✅ (Chrome 113+) | ✅ |
| HEVC | ✅ (Chrome 106+, macOS/Windows) | ✅ |
| Opus | ✅ | ✅ |
| AAC | ✅ | ✅ |
Dependencies #
web—dart:js_interopWeb API bindingsminiav_tools_platform_interfaceminigpu_platform_interface— optional GPU interop
See also #
- miniav_tools — user-facing facade
- miniav_tools_ffmpeg — FFmpeg backend (native)
- miniav_tools_minigpu — GPU compute backend
- Design doc