HomeCam TV

Your Dahua NVR on the television, driven entirely by the remote.

Android TV Kotlin Jetpack Compose Open source
HomeCam TV camera wall showing four live cameras in a 2×2 grid
[ 01 — What it does ]

Four screens, no menus.

Camera wall

Every camera at once, 1×1 / 2×2 / 3×3. Select one for fullscreen.

Recorded playback

Scrub a 24-hour timeline of the recorder's own archive to any moment.

Status

Whether everything is actually recording, and which stream each camera is on.

Channel up / down

Changes camera. In playback it keeps the time, so 18:05 on camera 1 becomes 18:05 on camera 2.

Self-configuring

Asks the recorder for its channels and uses its names. Nothing about the setup is compiled in.

[ 02 — Screens ]
Recordings screen with four camera cards
Pick a camera.
Playback with a 24-hour timeline showing recorded segments
Scrub the day. Green is footage that exists.
Status screen reading Everything is recording
One sentence, then the detail.
Settings screen with wall layout and stream buffer options
Everything stays on the TV.
[ 03 — Why ]

The hard part is the d-pad.

Most camera apps on a television are phone apps with a TV manifest entry. Focus lands nowhere, controls can't be reached, and text is sized for arm's length.

Every screen here names the control it opens on, so the remote never goes dead. Up out of a page returns to the tab you were on. Anything at a screen edge names its vertical neighbour rather than trusting geometry — because focus search only considers what sits inside its beam, and a right-aligned button with nothing above it finds nothing at all.

It also notices when a camera's sub-stream returns audio and no picture — a real fault on real hardware — and quietly falls back to the main stream for that channel.

[ 04 — Built with ]
Kotlin 2.0 Jetpack Compose androidx.tv-material libVLC Dahua CGI over HTTP Digest RTSP