Quick Start
Installation & Permissions
- Install the app from Google Play
- Grant permissions when prompted:
- Camera - required for video
- Microphone - required for audio and sound detection
- Notifications - required for foreground service
- Optional: Grant battery optimization exemption when prompted (recommended for 24/7 reliability)
Starting the Server
- Open the app — the web server starts automatically
- Note the URL displayed (e.g.,
https://192.168.1.100:8443)
Viewing the Stream
- On another device connected to the same WiFi network, open a browser
- Enter the URL shown in the app
- Accept the certificate warning (click “Advanced” → “Proceed”)
- Click Start Stream on the dashboard to begin viewing
Pro Features
Most features require a Pro license:
| Feature | Description |
|---|---|
| Motion Detection | Any motion, person detection, dog detection |
| Sound Detection | Any sound, dog bark, baby cry |
| Two-Way Audio | Push-to-talk and text-to-speech |
| Activity History | Event timeline and analytics charts |
| RTSP Streaming | Stream to VLC, ffmpeg, or NVR systems |
| MQTT Integration | Publish events to Home Assistant, Node-RED |
| API Documentation | Interactive reference for developers |
| Certificate Download | Install HTTPS certificate permanently |
| Reverse Proxy Mode | Access camera through nginx, Caddy, or CloudFlare |
Free features: live video streaming via web dashboard and camera controls (resolution, FPS, rotation, torch).
Android App
The Android app runs on the phone and acts as the camera server.
Main Screen
The main screen shows:
- Stream URL - the address to access the dashboard
- Status - current streaming state and viewer count
- Control buttons - camera, resolution, FPS, rotation, torch
Quick Controls (tap to change):
- Camera - switch between front/back camera
- Resolution - change video resolution
- FPS - change frame rate (tap the speedometer icon)
- Rotation - rotate video orientation
- Torch - toggle flashlight (if available)
Status Overlay
The status overlay appears on the live preview showing system health. Tap to expand for full details.
Information displayed:
- Connection status (Web, RTSP, MQTT, Audio listeners)
- System metrics (CPU, Memory, Battery, Temperature)
- Detection subsystem status (6 colored dots)
Status States:
| State | Color | Meaning |
|---|---|---|
| STANDBY | Blue | Server running, no viewers |
| ACTIVE | Green | Streaming, viewers connected |
| WARNING | Orange | Battery ≤20% (unplugged) or temperature ≥45°C |
| CRITICAL | Red | Battery ≤15% (unplugged) |
App Settings
Access settings via the gear icon or menu.
Power & Performance:
| Setting | Description |
|---|---|
| Keep Screen On | Prevents screen from sleeping (uses more battery) |
| Run in Background | Keeps streaming when app is minimized or screen turns off. When enabled, the app automatically moves to the background when the screen turns off, so you see your home screen when unlocking (appliance mode) |
| Auto-start on Boot | Starts the service when device powers on. Android 14+: Tap the notification to resume streaming after reboot (see FAQ) |
Security:
| Setting | Description |
|---|---|
| Password | Protect dashboard and API access with a password |
| Certificate | Download the HTTPS certificate for installation (Pro feature) |
| Crash Reporting | Send anonymous crash reports to help fix bugs (enabled by default) |
Dashboard Authentication Details: - Sessions use tokens valid for 7 days - Rate limiting: 5 failed attempts triggers 30-second lockout
Network:
| Setting | Description |
|---|---|
| Reverse Proxy Mode | Trust X-Forwarded-Proto from proxy for HTTPS detection (Pro feature) |
Note: Audio can be enabled/disabled via the Camera Settings panel in the web dashboard.
Web Dashboard
The web dashboard is accessed via a browser and provides full control over the camera. It has five pages accessible via the navigation tabs (desktop) or hamburger menu (mobile).
Dashboard Page
The main page for viewing the live stream and configuring detection.
Live Video
The video stream appears at the top of the page with status information below: - Stream status (Buffering, Streaming, or error) - Resolution and frame rate - Bitrate and viewer count
Controls:
- Fullscreen - expand video to full screen
- Snapshot - capture a still image (downloads as JPEG)
Camera Settings
Click to expand. Changes take effect immediately.
| Setting | Description |
|---|---|
| Camera | Switch between back and front cameras |
| Resolution | Video resolution (higher = better quality, more CPU) |
| Frame Rate | Frames per second |
| Quality | JPEG/H.264 quality level (1-100) |
| Rotation | Rotate video 0°, 90°, 180°, or 270° |
| Audio | Enable/disable microphone audio |
| H.264 | Use H.264 encoding instead of MJPEG (lower CPU and bandwidth) |
| Torch | Turn on flashlight (if available) |
Camera Capabilities:
| Capability | Details |
|---|---|
| Resolutions | Up to 1920x1080 (1080p). Options depend on device. |
| Frame Rate | 1-60 fps. Older (LEGACY) devices capped at 15 fps for stability. |
| Quality | 1-100 quality level. Lower = smaller files, higher = better quality. |
| Automatic Controls | Autofocus, exposure, and white balance are always automatic. |
| Zoom | Not available. |
Two-Way Audio [Pro Feature]
Click to expand. Allows you to speak through the camera.
Push to Talk: Press and hold the button, speak, then release. Your voice plays through the phone’s speaker.
Text to Speech: Type a message and click Speak. The phone reads it aloud. Messages are rate-limited to one per 5 seconds.
Note: PTT requires HTTPS (browser security requirement). PTT and TTS require Pro; listening is free.
Motion Detection [Pro Feature]
Click to expand. Configure motion-based alerts.
Detection types:
- Any Motion - triggers on pixel changes
- Person - AI detection of humans
- Dog - AI detection of dogs
Settings:
- Sensitivity - how easily motion triggers (1 = large movements only, 10 = very sensitive)
- Cooldown - minimum seconds between alerts
- Confidence - for AI detection, how certain the model must be
- Show Boxes - display bounding boxes around detected objects
Sound Detection [Pro Feature]
Click to expand. Configure audio-based alerts.
Detection types:
- Any Sound - triggers on volume threshold
- Dog Bark - AI classification
- Baby Cry - AI classification
Settings:
- Threshold - for Any Sound, how loud before triggering (1 = loud only, 10 = very sensitive)
- Cooldown - minimum seconds between alerts
- Confidence - for AI detection, how certain the model must be
Activity Timeline [Pro Feature]
Shows a visual summary of today’s detection events.
- Each row is a detection type
- Colored blocks show when activity occurred
- Darker blocks = more events
RTSP Page [Pro Feature]
Configure RTSP streaming for use with VLC, ffmpeg, or NVR systems.
Server Settings
| Setting | Default | Description |
|---|---|---|
| Enabled | Off | Turn RTSP server on/off |
| Port | 8554 | Server port |
| Stream Path | /stream | URL path |
| Authentication | Off | Require username/password |
Stream URL
The page displays the full URL to use:
rtsp://192.168.1.100:8554/stream
Connecting with Players
# VLC
vlc --rtsp-tcp rtsp://192.168.1.100:8554/stream
# ffplay
ffplay -rtsp_transport tcp rtsp://192.168.1.100:8554/stream
# With authentication
vlc --rtsp-tcp rtsp://user:pass@192.168.1.100:8554/streamImportant: Always use TCP transport
(--rtsp-tcp or -rtsp_transport tcp).
Limitations
- Video only (no audio)
- Maximum 3 connections per IP address
- Unencrypted - use only on trusted networks
RTSP Authentication Details:
- Uses HTTP Basic authentication (credentials Base64-encoded, not encrypted)
- Video stream is always unencrypted regardless of auth setting
- Rate limiting: 5 failed attempts triggers 60-second lockout
- Only use on trusted networks or behind a VPN
MQTT Page [Pro Feature]
Configure MQTT for integration with Home Assistant, Node-RED, or other IoT platforms.
Connection Settings
| Setting | Description |
|---|---|
| Enabled | Turn MQTT on/off |
| Broker URL | IP address or hostname of your broker |
| Port | Default 1883 (or 8883 for TLS) |
| Use TLS | Enable encrypted connection |
| Username/Password | Broker authentication (if required) |
MQTT Security:
- Credentials are stored encrypted on device (AES-256)
- Enable TLS when using authentication to protect credentials in transit
- Remote commands are disabled by default for security
Published Topics
All topics use a configurable prefix (default:
ipcamera):
| Topic | Description |
|---|---|
{prefix}/status/online |
Online/offline state (LWT) |
{prefix}/events/motion |
Motion detected |
{prefix}/events/sound |
Sound threshold exceeded |
{prefix}/events/vision/person |
Person detected (ML) |
{prefix}/events/vision/dog |
Dog detected (ML) |
{prefix}/events/sound/dog_bark |
Dog bark detected (ML) |
{prefix}/events/sound/baby_cry |
Baby cry detected (ML) |
{prefix}/telemetry/system |
CPU, temperature, battery |
Control Topics
When enabled, the app subscribes to control topics for remote enable/disable of detection features:
| Topic | Message |
|---|---|
{prefix}/control/motion/enabled |
{"enabled": true} or "true" |
{prefix}/control/sound/enabled |
{"enabled": true} or "true" |
{prefix}/control/vision/person/enabled |
{"enabled": true} or "true" |
{prefix}/control/vision/dog/enabled |
{"enabled": true} or "true" |
{prefix}/control/classification/dog_bark/enabled |
{"enabled": true} or "true" |
{prefix}/control/classification/baby_cry/enabled |
{"enabled": true} or "true" |
Note: Control topics are disabled by default for
security. Torch and snapshot are HTTP-only (/torch,
/snapshot).
Activity Page [Pro Feature]
View detection event history and analytics.
Time Range
Select a time range using:
- Quick presets: Today, Yesterday, 7 Days, 30 Days, All Time
- Date picker for custom range
- Arrow buttons to move forward/backward
Filtering
Click filter chips to show specific event types:
- All events
- Motion events (Any, Person, Dog)
- Sound events (Any, Dog Bark, Baby Cry)
Statistics
Cards showing:
- Total motion events
- Total sound events
- Peak activity hour
- Total events
Charts
- Activity Over Time - line chart showing event counts over the selected period
- Hourly Breakdown - bar chart of events by hour (24-hour view)
- Today vs Yesterday - comparison bar chart
- Event Types - donut chart showing distribution of detection types
- Detection Quality - histogram of motion intensity or AI confidence scores
Export [Pro Feature]
Click Export to download events as CSV.
API Page [Pro Feature]
Interactive API documentation for developers integrating with the camera.
Categories
- Authentication - login, logout, token management
- Streaming - MJPEG stream, snapshot, high-res capture
- Settings - read and write camera configuration
- WebSocket - real-time events and H.264 streaming
- RTSP & MQTT - integration endpoints
Usage
The page provides curl examples for each endpoint. Authentication is required when password protection is enabled.
Embedding
MJPEG Stream
Embed the video stream in a web page:
<img src="https://192.168.1.100:8443/stream" />Remote Access
The app runs on your local WiFi network by default. For remote access, you have two options: a VPN or a reverse proxy.
Do not port-forward the camera directly to the internet. Use a VPN or authenticated reverse proxy instead.
Using a VPN
Connect the phone to your home network via a VPN (e.g., WireGuard, OpenVPN, Tailscale). The phone can be on cellular data — it doesn’t need WiFi. Once connected, access the camera by its VPN address:
https://<phone-vpn-address>:8443
Making LAN Devices Reach VPN Clients
Most VPN setups assign clients an address from a separate VPN subnet
(e.g., 10.0.0.x) rather than the main LAN subnet (e.g.,
192.168.1.x). This means your LAN devices won’t be able to
reach the phone’s VPN address unless you configure routing.
The VPN host acts as a router between the two subnets:
LAN device (browser)
|
v
Main router / firewall
(static route: VPN subnet via VPN host)
|
v
VPN host (IP forwarding enabled)
|
v
Phone on VPN (camera app running)
What’s needed:
- IP forwarding enabled on the VPN host
(
net.ipv4.ip_forward=1) - Static route on your main router — destination: VPN subnet, gateway: VPN host’s LAN IP
Without the static route, your router sends VPN-subnet traffic to the default gateway (your ISP), which drops it. This is the most commonly missed step.
Note: Some VPN tools (e.g., Tailscale) handle routing automatically and don’t require manual static routes. Check your VPN’s documentation.
Using a Reverse Proxy
A reverse proxy (nginx, Caddy, Cloudflare Tunnel, etc.) forwards HTTPS requests to the camera and provides a proper domain name and TLS certificate — no browser warnings.
- Configure the proxy to terminate TLS and forward to the camera’s local address
- In the IP Camera app settings, enable Reverse Proxy
Mode so the app trusts the
X-Forwarded-Protoheader (required for secure cookies)
Reverse Proxy Mode is a Pro feature.
Troubleshooting
Stream Won’t Load
- Check you’re on the same WiFi network as the phone
- Verify the IP address (it changes when the phone reconnects to WiFi)
- Make sure streaming is started in the app
- Check no other app is using the camera
Certificate Warning
This is normal. The app uses a self-signed certificate. Click “Advanced” → “Proceed” to continue, or download and install the certificate from the app settings for a permanent fix.
Video Lag
- Move closer to your WiFi router
- Lower the resolution
- Lower the frame rate
- Switch to H.264 (uses less bandwidth than MJPEG)
Phone Overheating
The app automatically reduces frame rate when the phone gets hot: - 38°C+ → 15 fps max - 42°C+ → 10 fps max - 48°C+ → 5 fps max
To reduce heat manually:
- Lower resolution and frame rate
- Use H.264 instead of MJPEG
- Keep phone in a ventilated area
- Avoid direct sunlight
Detection Issues
Too many false alerts:
- Lower motion sensitivity
- Lower sound threshold
- Increase AI confidence
Not detecting:
- Increase motion sensitivity
- Increase sound threshold
- Decrease AI confidence
Detection stopped working: The app auto-disables detection after 5 consecutive ML inference failures to prevent battery drain. A toast notification appears when this happens. To re-enable: 1. Go to the detection panel 2. Toggle the detection type off and back on 3. If failures persist, restart the app
RTSP Won’t Connect
- Check RTSP is enabled on the RTSP page
- Use TCP transport (
--rtsp-tcp) - Verify the port (default 8554)
- Check authentication credentials if enabled
- Android 14+ after reboot: Tap the notification or open the app to unlock camera access (see FAQ)
Remote Access
See the Remote Access section above for VPN setup, WireGuard configuration, and reverse proxy options.
FAQ
How many viewers can connect?
No practical limit. Each viewer has an independent queue.
Does it record video?
No. Use an NVR with RTSP to record.
Can I use multiple cameras?
Run the app on multiple phones. Each phone is one camera.
Why does the IP address change?
Your router assigns dynamic IPs. You can reserve a static IP in your router settings.
Does it work when the phone is locked?
Yes, if “Run in Background” is enabled. The app will continue streaming even with the screen off. Additionally, when you lock the phone, the app automatically moves to the background so you see your home screen when you unlock (appliance mode).
Does it need internet?
No. Only local WiFi is required.
Why request battery optimization exemption?
Without it, Android may kill the app to save battery, stopping your stream.
Why doesn’t auto-start work fully on Android 14+?
Android 14 introduced stricter security for camera and microphone access. After a reboot, the app shows a “Tap to resume streaming” notification. Simply tap the notification to enable camera/mic features (streaming, RTSP, detection) - no need to open the full app. Alternatively, open the app normally to unlock full functionality. This is an Android platform restriction, not an app limitation.
Can I zoom the camera?
No. Digital zoom is not implemented.
What’s the difference between listening and PTT?
Listening plays device audio (phone’s mic) through your browser. Push-to-Talk transmits your voice to the phone’s speaker. Both require Pro.
Why did detection stop automatically?
After 5 consecutive ML inference failures, detection auto-disables to save battery. Re-enable it in the dashboard detection panel.