// the find
zhihu/griffith
A React-based web video player
Griffith is a React video player from Zhihu (China's Quora equivalent) that handles MP4 and HLS via MediaSource Extensions rather than dumping raw URLs into a `<video>` tag. It ships with its own fMP4 muxer written from scratch in TypeScript, which means it can do progressive segment loading from plain MP4 files without requiring a server that speaks HLS. For React apps that need reliable video playback with quality switching and don't want to wire up Video.js or Shaka, this is a reasonable starting point.
The hand-rolled fMP4 box parser and generator (`griffith-mp4/src/fmp4` and `griffith-mp4/src/mp4`) is surprisingly well-tested — there are individual spec files for every box type (avc1, avcC, esds, moov, etc.), which means the low-level parsing code has actual coverage rather than being a black box. The plugin architecture that lets you alias `griffith-hls` or `griffith-mp4` to false at build time is clean — you don't pay bundle cost for formats you don't use. The cross-window messaging package (`griffith-message`) makes iframe-embedded players manageable without ad-hoc postMessage wiring. And the UMD standalone build means you can drop it into a non-React app without a build step.
SSR is explicitly unsupported and there is no plan for it, which rules this out for Next.js App Router or any isomorphic setup without a client-only boundary hack. The project is maintained by Zhihu's frontend team for Zhihu's needs — the last meaningful activity is slow and issues pile up unanswered, so if you hit an edge case you are likely fixing it yourself. There is no subtitle/caption support (no WebVTT, no SRT parsing, nothing) — for any content that needs accessibility compliance this is a blocker. The styling approach uses a library called `aphrodite` for CSS-in-JS, which is effectively unmaintained; if you need to customize the player skin deeply you will be fighting a dead dependency.