Android · Min SDK 28

Hz Player for Android

A full-featured Android video & audio player inspired by VLC — streams from local storage, SMB, FTP, SFTP, and WebDAV with native subtitle rendering and archive playback.

View Source on GitHub
// 01 / Features

What It Does

Network Streaming

Plays media directly from SMB, FTP, SFTP, and WebDAV servers with custom Media3 DataSources, connection pooling, and mDNS server discovery.

Native Subtitle Engine

ASS/SSA animated subtitles rendered by native libass via JNI, plus SRT/VTT support, external subtitle files, delay adjustment, and SubDL online search.

Archive Playback

Opens media inside zip, 7z, rar, tar, iso, and cab archives without extraction, powered by libarchive cross-compiled with the Android NDK.

In-App Browser

Full WebView browser with native Rust-backed ad blocking, tab management, and a media sniffer that detects and downloads streams from pages.

Secure Credentials

Server passwords are encrypted with AES-256-GCM keys stored in the AndroidKeyStore — nothing sensitive ever touches plain storage.

Player Power Features

Gesture controls, playback speed, HDR surface selection, track selection, playlists, background audio, resume positions, and a stats-for-nerds overlay.

// 02 / Architecture

Under the Hood

Engine-Agnostic Playback

All playback flows through an IPlayerEngine abstraction — no Media3 type ever crosses the boundary. Swapping in a new backend like mpv or libVLC is a single Hilt multibinding away.

Clean MVVM Layers

Stateless Compose screens receive immutable UiState from Hilt ViewModels, which talk to 11 repository interfaces backed by Room, DataStore, and per-protocol network clients.

// 03 / Stack

Built With

Kotlin 2.0
Jetpack Compose
Material 3
MVVM + StateFlow
Hilt
Media3 ExoPlayer
Room
DataStore
Coil 3
libass (JNI)
libarchive (JNI)
NDK / C++