finds.dev← search

// the find

bytedance/xgplayer

★ 9,243 · JavaScript · MIT · updated Jun 2026

A HTML5 video player with a parser that saves traffic

xgplayer is a HTML5 video player from ByteDance that handles its own format parsing — FLV, HLS, DASH, and MP4 — without depending on native browser support. The MP4 plugin does range-request based loading so you can seek into non-streamable MP4s without downloading the whole file first. Built for high-traffic Chinese video platforms, it shows.

The transmuxer is the real meat here: it parses FLV/TS in-browser and remuxes to fMP4 for MSE, with actual test coverage against real binary fixtures — not just mocked data. The MP4 range-loader solving the 'progressive MP4 seeking' problem is genuinely useful and not something most players bother with. Plugin architecture is clean enough that you can swap or disable individual UI controls without fighting the core. Active maintenance from a team that runs it in production at scale — the CHANGELOG entries are substantive.

Documentation is primarily written for a Chinese audience; the English docs lag behind and some config options exist only in the Chinese README. The monorepo has two parallel implementations of some formats (xgplayer-hls vs xgplayer-hls.js, xgplayer-flv vs xgplayer-flv.js) with no clear guidance on which to use, which will bite you on first setup. TypeScript types are absent — you get no autocomplete or type safety when wiring up config objects or plugin APIs. The DASH implementation is noticeably thinner than the HLS/FLV work; complex DASH manifests with multiple adaptations or DRM will need xgplayer-shaka as a fallback anyway.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →