No description
  • JavaScript 92.8%
  • Rust 3.6%
  • HTML 3%
  • Python 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-10 22:28:21 +00:00
app feat(sub): sous-titres texte SRT/ASS/tx3g — parsers, scan sans seek, overlay synchronisé 2026-10-10 22:28:21 +00:00
crates/mkv-demux phase 1B: parse Rust WASM câblé (?nowasm=1 force JS) + stats debug 2026-09-12 10:59:01 +00:00
media migration /workspace: médias persistants, fixtures locales, wasm rebuild, remote à venir 2026-09-12 17:39:57 +00:00
packages feat(sub): sous-titres texte SRT/ASS/tx3g — parsers, scan sans seek, overlay synchronisé 2026-10-10 22:28:21 +00:00
server/certs migration /workspace: médias persistants, fixtures locales, wasm rebuild, remote à venir 2026-09-12 17:39:57 +00:00
tests feat(sub): sous-titres texte SRT/ASS/tx3g — parsers, scan sans seek, overlay synchronisé 2026-10-10 22:28:21 +00:00
.gitignore chore: retire target/ du suivi (artefacts build Rust) + gitignore 2026-10-10 17:26:14 +00:00
avcc.bin phase 1A: worker câblé compat+bridge, ?src= beta, image vérifiée headless 2026-09-12 10:24:34 +00:00
Cargo.lock phase 1B: parse Rust WASM câblé (?nowasm=1 force JS) + stats debug 2026-09-12 10:59:01 +00:00
Cargo.toml phase 1B: parse Rust WASM câblé (?nowasm=1 force JS) + stats debug 2026-09-12 10:59:01 +00:00
NOTICE.md feat(phase4): SW TrueHD via build FFmpeg maison — résout codec_0 6 voies (vendor/truehd) 2026-09-15 00:23:42 +00:00
PLAN.md feat(sub): sous-titres texte SRT/ASS/tx3g — parsers, scan sans seek, overlay synchronisé 2026-10-10 22:28:21 +00:00
PROVENANCE.md phase 1A: bridge fidèle + compat demux D1-D10 + tests (parité Ice Age: 2931pkts/19keys) 2026-09-12 10:11:46 +00:00
README.md scaffold: shell AVERA (sans libav) comme base de migration 2026-09-12 10:03:54 +00:00
server.mjs feat(demux): conteneur MP4 maison — progressif (moov ±fin) + fMP4 (packages/mp4-demux) 2026-09-13 16:30:15 +00:00

AVera Player

AVera Player is a web media player built from scratch using WebCodecs, WebAudio and LibAV.js. The goal is a universal media player that can play as many formats as possible.

Supports any container LibAV.js can demux (mp4, mkv, webm, avi, mov, etc.) and any video codec supported by WebCodecs (H.264, VP8/9, AV1, etc.). Audio is decoded via WebCodecs or LibAV.js and played through WebAudio. Inspired by the WebCodecs spec's audio/video sample.

Features

  • Streaming playback via HTTP Range requests (no full download) — 1 MiB block-based read
  • WebCodecs hardware decoding with LibAV.js software fallback
  • Three renderers chosen dynamically: WebGPU → WebGL2 → WebGL → Canvas2D
  • Synchronized A/V with WebAudio clock + drift correction
  • Seeking with audio/video preroll and frame-accurate display
  • Worker-side lag monitoring — FPS and frame time tracking in the render worker
  • Bilinear chroma upsampling for YUV→RGB conversion (I420, NV12)
  • Packet queue with byte budget (60 packets / 16 MiB max)
  • queueMicrotask-based pipeline pump — no setTimeout(fn, 0) in hot paths
  • Dynamic stream switching (video/audio track selection)

Getting Started

git clone --recurse-submodules https://github.com/kylianpl/AVera-Player.git
cd AVera-Player
python server.py

Open http://localhost:8888.

Contributing

Contributions welcome! Open issues and pull requests for features, bug fixes, or improvements. Particularly welcome: seeking accuracy, more media format support, and splitting the monolithic Worker into separate demuxer/decoder/renderer threads.