finds.dev← search

// the find

CarGuo/GSYVideoPlayer

★ 21,458 · Java · Apache-2.0 · updated Jul 2026

Video players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking/dragging, volume and brightness adjustment, play-while-cache support

GSYVideoPlayer is a multi-kernel Android video player library that wraps IJKPlayer, ExoPlayer/Media3, and the system MediaPlayer behind a unified API. It's aimed at Android developers who need production-grade video playback with features like danmaku, ads, subtitles, and DLNA casting without building each piece from scratch. At 21k stars it's one of the most battle-tested video player abstractions in the Android Java ecosystem.

The kernel-switching design is genuinely useful — you can swap between IJK, ExoPlayer, and system player at runtime with a single `PlayerFactory.setPlayManager()` call, which matters when you need FFmpeg formats in some flows but lighter APK size in others. The 16k page size support for arm64/x86_64 is a real differentiator now that Android 15 devices ship with 16k kernels and most FFmpeg-based libraries lag behind on this. The new Compose module ships 24 runnable demo activities covering edge cases like floating windows, vertical short video, and seamless list-to-detail transitions — that's not hand-wavy Compose support, it's actually tested surface area. WebVTT sprite-sheet seek preview via `GSYVideoPreviewVttParser` is the right approach: offloads frame extraction to the server rather than hammering the device CPU.

IJKPlayer is based on FFmpeg 4.3 and OpenSSL 1.1.1w — both are past end-of-life, and the README acknowledges no plan to update them. If you're in a security-sensitive environment this is a hard blocker. The library is Java-first and the Kotlin/Compose surface is a thin wrapper over View-based internals, so you will eventually need to understand the legacy layer to debug anything non-trivial. The GitHub Packages setup requires a personal access token with `read:packages`, and the hardcoded fallback credentials could be revoked at any time — this is a fragile dependency story for a CI pipeline. The DLNA cast feature is on an unreleased branch (`feature/cast-capability`), so anyone reading the README thinking they get first-class casting from Maven Central will be surprised.

View on GitHub →

// 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 →