| hevc.js | libde265.js | ffmpeg.wasm | h265web.js | |
|---|---|---|---|---|
| Built for | MSE streaming fallback for dash.js / Shaka Player | Raw HEVC decoding (proof of concept) | General A/V toolbox — file processing | Complete standalone player (live FLV/TS/HLS focus) |
| WASM size | 236 KB | ~2 MB | Tens of MB (core) | Multiple builds (incl. 256/512 MB memory variants) |
| License | MIT | LGPL-3.0 | MIT wrapper — FFmpeg core LGPL/GPL per build | Custom (CYL_Free-1.0) |
| COOP/COEP headers | Not required | Not required | Required for the multithreaded build (SharedArrayBuffer) | Depends on build |
| Plugs into dash.js / Shaka | Yes — drop-in plugins | No | No | No — it is its own player |
| Output path | Real SourceBuffer fed with H.264 — the player keeps buffer, seek & ABR control | Canvas | Files / buffers | Canvas / WebGL rendering |
| Native HEVC passthrough | Yes — SourceBuffer probe, dormant when native decode exists | — | — | Hardware decode via WebCodecs in its own pipeline |
| CPU-aware quality control | Yes — caps the host player's ABR when transcoding falls behind | — | — | — |
| 1080p decode (WASM, single-threaded) | ~61 fps — 83% of libde265's speed at 1/8th the size | Baseline (faster, larger) | Depends on threads/build | Not published here — see their benchmarks |
| Validation | Pixel-perfect vs ffmpeg on 128 bitstreams | Mature libde265 core, early JS port | FFmpeg itself | Production usage at large platforms |
Sizes, licenses and capabilities as published by each project (August 2026). Corrections welcome — open an issue.
Which one should you use?
Pick hevc.js if…
You already ship dash.js or Shaka Player and need HEVC streams to play on clients without native HEVC decode — Chrome on Windows without an HEVC-capable GPU, Edge/Firefox without the Microsoft codec extension, Linux fleets. One function call, MIT license, no server changes, dormant when native decode exists.
Pick ffmpeg.wasm if…
You need general media processing in the browser — converting files, extracting frames, transmuxing across dozens of codecs and containers. It's a toolbox, not a playback fallback: no MSE pipeline, and the fast multithreaded build needs COOP/COEP headers.
Pick h265web.js if…
You want a complete, battle-tested standalone player — especially for live surveillance-style workflows (HttpFLV, TS, WebSocket) — and its custom license works for your product. You adopt its player UI and rendering pipeline rather than plugging into your own.
Pick libde265.js if…
You're experimenting with raw HEVC decoding and want the libde265 core in a browser context. It's an early-stage port without a streaming pipeline — for production streaming you'll be building the MSE layer yourself, and the LGPL license may matter for your distribution model.
See hevc.js run
30-second HEVC ABR stream, transcoded to H.264 live in your browser.