// the find
bytedance/xgplayer
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.