This is a "learn-as-we-code" hobby project. It is currently in Pre-Alpha.
- Goal: A lightweight app that automatically discovers local CCTV cameras and connects to them seamlessly on your home network.
- Current State: Hardcoded for a specific setup, but proving the core "Gold Mine" logic works where other apps fail.
- Stability: Expect bugs, messy code, and frequent changes. Not even beta yet!
Most modern ONVIF apps are too bloated or strict for older HiSilicon/XM-based camera boards. We spent nights fighting through:
- The Token Trap: Discovering that
PROFILE_000is the specific key required for these boards. - The Port 80/8899 Dance: Realizing Port 80 is the "Gatekeeper" (Device Service) while Port 8899 handles the PTZ "heavy lifting."
- Ghosting Issues: Fixing 2K stream "smearing" by forcing specific hardware decoding settings in LibVLC.
- RTSP Streaming: Using LibVLC to pull high-res 2K video. We use a stream-switching toggle to jump between
ch00_0(HD) andch00_1(SD) for better performance on weak Wi-Fi. - SOAP Networking: Instead of heavy ONVIF libraries, we send raw XML "envelopes" (SOAP) via HTTP. It's faster and more compatible with "stubborn" camera firmware.
- Security: Implementing WS-Security with PasswordDigests. No plain-text passwords flying over your network.
- Fullscreen Immersive: Optimized for modern tall displays (like the Samsung A17) to use every pixel.
- Automatic Discovery: Implementing WS-Discovery to find cameras without typing IPs.
- Floating Joystick: Replacing clunky D-Pad buttons with a smooth, responsive touch controller.
- Multi-Camera Grid: Viewing more than one ghost-cat at a time.
- GitHub Commit: Preparing for a clean repo once the code is less "spaghetti."
-
Min SDK: 26 (Android 8.0) - Reaching back to keep those old wall-mounted tablets useful!
-
Tested On: Samsung A17, HiSilicon/XM-Board IP Cameras.
-
📊 Project Status: Pre-Alpha (Phase 1 Complete) ✅ What is working (The Wins) 2K RTSP Stream: Solid, no ghosting, hardware decoding is tuned.
Dual-Channel Switching: Instant toggle between HD and SD.
Stable PTZ: The PROFILE_000 discovery was the breakthrough. Buttons are commanding the camera with 200 OK status.
Zero-Permission Footprint: No storage or mic access needed yet, keeping it light.
🚧 Current Challenge: The Joystick Status: Migrating from clunky buttons to a smooth 360° touch controller.
Goal: Map x,y coordinates to ContinuousMove without DDOS-ing the camera's CPU.
🎙️ The Audio Situation (The "One-Way" Reality) We are currently at one-Way Audio, and here is why "two-Way" is our next milestone:
The Stream: Most of these HiSilicon boards encode audio in G.711 (PCMU/PCMA) or AAC.
The VLC Advantage: Since we are using LibVLC, the "Hearing" part should actually work out of the box if the camera is sending the audio track over RTSP.
The "Talk Back" (Two-Way) Wall: Talking to the camera is a whole different beast. It requires a specific ONVIF "Backchannel" or a raw G.711 stream sent via a different POST command. We aren't there yet—that's Phase 3.
Unlike basic D-Pad implementations, this release features a normalized 360° floating joystick.
-
Dynamic Velocity: Translates touch coordinates into ONVIF Pan/Tilt vectors (
$x, y$ from$-1.0$ to$1.0$ ). -
Visual Feedback: Includes a real-time "knob" animation using
translationX/Yfor a tactile feel. -
Precision Tuning: Implements a
$0.2$ deadzone to prevent accidental motor jitter.
- One-Way Audio: Native G.711/AAC support via LibVLC.
- Status Overlay: Real-time HUD showing stream health and resolution.
- Hardware Acceleration: Optimized for Android 8.0+ to handle 2K H.264/H.265 streams without ghosting.