Skip to content

v0.2.2 — postertime, Folder Playlist, Encrypted Hardening

Choose a tag to compare

@MrUjjwalG MrUjjwalG released this 26 Apr 14:58
· 192 commits to main since this release

Highlights

  • postertime attribute — generate a native-resolution poster from any timestamp ("10%", "5", "1:30", "0:01:30") with no explicit poster URL. Isolated thumbnail pipeline, rotation-aware, race-guarded against src swaps.
  • dispose() + clean playlist flows — tears down the internal player and resets transient UI on every src change, so playlist-style flows never leak state between sources.
  • Folder Playlist (web demo app) — File System Access API (with webkitdirectory fallback), YouTube-style items with thumbnail, duration, HDR chip, codec/quality/size, watched-progress bar, autoplay-next, drag-and-drop multi-file.
  • Encrypted playback hardeningEncryptedHttpSource rewritten: prefetch tuning, concurrent-stream cap, accurate read-cursor reporting, parent position kept in sync. Encrypted-server ported to the new protocol.
  • Worker security — Referer allowlist on /proxy and /eproxy, plus magic-byte validation on /proxy responses to mitigate MIME confusion.

Added

  • postertime attribute (timestamp-based poster generation).
  • dispose() method — auto-called on every src change.
  • playing getter — read-only boolean, precise inverse of paused.
  • MoviElement.cleanVideoTitle(filename) static utility.
  • Folder playlist UI in the web demo app.

Changed

  • play() queues intent during isLoading and flushes on init — matches HTMLMediaElement behavior.
  • Software-decoder fallback no longer sticks across src changes.
  • Encrypted playback protocol rewritten end-to-end.
  • Runtime buffer tuning via the existing buffersize attribute (value is megabytes, not seconds — applies to HTTP and encrypted sources).
  • Production bundles re-enable terser drop_console + drop_debugger.
  • app:release script ties build + R2 upload + worker deploy into one command.

Fixed

  • Post-seek A/V sync: cap audio gap at 200ms; sync to video and drop stale audio when first frame arrives late (sparse keyframes / slow HEVC+HDR).
  • Pre-play seek position no longer resets to 0 — first-play poster-seek reads clock.getTime().
  • Buffered range reports full duration when the file is fully cached.
  • Buffer indicator: collapsed seek-race scan sweep that drew phantom buffered ranges.
  • Encrypted thumbnails share the main source instead of opening a parallel session.
  • Worker /proxy retries empty 206 responses before streaming.
  • Worker probe failures no longer misreported as 415.
  • TMDb title parser detects TV shows when episode title trails the SxxExx code.

Security

  • Worker /proxy and /eproxy gated by Referer allowlist.
  • Worker /proxy validates magic bytes against expected media types.

📦 npm: movi-player@0.2.2
📖 Changelog: CHANGELOG.md