Skip to content

Latest commit

 

History

1,308 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiBee NVR

MiBee NVR logo

GitHub Release CI Go Svelte SQLite Docker ARM License: AGPL-3.0-only Contributors

Turn any low-power ARM device into a professional NVR in 60 seconds.
Single binary, zero dependencies, no cloud required. Runs on low-power ARM devices with a 512MB memory budget.

中文 — English

Quick Start

One-click Install (Recommended)

curl -fsSL https://raw.githubusercontent.com/Mi-Bee-Studio/MiBeeNvr/main/install.sh | sudo bash

Downloads the binary, creates a system user (nvr), generates a config, installs a systemd service, and starts it. Data directory: /var/lib/mibee-nvr.

Option 1: Pre-built Binary

Download the latest binary from GitHub Releases:

# AMD64 (most PCs/servers)
wget https://github.com/Mi-Bee-Studio/MiBeeNvr/releases/latest/download/mibee-nvr-amd64
chmod +x mibee-nvr-amd64

# ARM64 (Raspberry Pi 4/5, etc.)
wget https://github.com/Mi-Bee-Studio/MiBeeNvr/releases/latest/download/mibee-nvr-arm64
chmod +x mibee-nvr-arm64

# ARMv7 (Raspberry Pi 2/3, etc.)
wget https://github.com/Mi-Bee-Studio/MiBeeNvr/releases/latest/download/mibee-nvr-armv7
chmod +x mibee-nvr-armv7

Initialize config and start:

./mibee-nvr-amd64 init --password yourpassword
./mibee-nvr-amd64 -config mibee-nvr.yaml

Open http://localhost:9090 to access the Web UI.

Option 2: Docker

docker compose --project-directory . -f deploy/docker/docker-compose.yml up -d

Open http://localhost:9090 to access the Web UI.

To store recordings on an external drive, edit the volume mount in docker-compose.yml:

    volumes:
      - /mnt/external/nvr:/data    # ← change to your host path
    environment:
      - NVR_DATA_DIR=/data          # must match the volume mount

Option 3: Build from Source

git clone https://github.com/Mi-Bee-Studio/MiBeeNvr.git
cd MiBeeNvr
make build
./mibee-nvr init --password yourpassword
./mibee-nvr -config mibee-nvr.yaml

For detailed setup, see Getting Started.

Why MiBee NVR?

  • Single Binary: Zero dependencies, embedded Svelte 5 SPA, CGO_ENABLED=0
  • Low-Power ARM Ready: Runs on 1GB RAM with a 512MB memory budget (validated on Raspberry Pi 3B as the minimum baseline)
  • Multi-Protocol Streaming: HLS, WebRTC, HTTP-FLV, RTMP, SRT, WebSocket
  • No Cloud Required: Self-hosted, no subscriptions, no vendor lock-in
  • Modern Web UI: Dark/light themes, i18n support, responsive design
  • ONVIF Support: Auto-discovery, PTZ control, stream URI management
  • Plug-and-Play Auto-Discover: ONVIF cameras joining the LAN are enrolled automatically in the background (Hikvision-NVR-style) — no manual scan. Unauthenticated devices start recording immediately; authenticated ones are added as pending activation until you supply credentials
  • IP Self-Healing: ONVIF cameras that change IP (Wi-Fi roaming across APs) are auto-relocated by serial number and reconnected — unicast probing works across routed subnets
  • Smart Integrations: MQTT triggers, WebDAV, FTP, FFmpeg transcoding

Screenshots

Surveillance grid
Surveillance grid: multi-camera live view (WebCodecs / MJPEG) with health scores and AI overlay

Recordings timeline
Recordings: per-camera timeline with AI event markers; list and timelapse views available

Cameras page
Cameras: discovery scanning, start/stop, and push-out relay management in one place

Features

📷 Camera Support

  • RTSP (H.264/H.265/MJPEG) streaming
  • HTTP JPEG snapshot streaming
  • ONVIF discovery & management with PTZ control
  • Xiaomi CS2 + legacy TUTK (7 models) cloud camera support
  • SRT/RTMP push-in cameras (cross-network ingest — receive streams from remote publishers)
  • GB/T 28181 national-standard platform (experimental): SIP cameras (Hikvision/Dahua/Uniview) register to the NVR — catalog, PTZ, voice intercom, device-side recording search & playback, alarm subscription, cascade. Default off
  • Native Go push-out relay (forward any camera to remote RTMP/RTSP targets; FFmpeg optional for compatibility)

📺 Streaming & Live View

  • HLS on-demand streaming with LL-HLS support
  • WebRTC WHEP for sub-second latency viewing
  • HTTP-FLV for browser-friendly streaming
  • RTMP ingest server for push/pull workflows
  • SRT low-latency transport receiver
  • WebSocket real-time binary frame streaming

💾 Recording & Storage

  • Automatic MP4 segment generation
  • Multi-camera concurrent recording
  • Per-camera retention policies
  • Audio capture (AAC + G.711 + Opus)
  • Segment merging with configurable policies
  • Periodic timelapse recording
  • Continuous playback: double-buffered seamless segment chaining + full-day VOD timeline (scrub across recordings and gaps), AVI frame-browse mode
  • LAN discovery (mDNS _mibee-nvr._tcp + UDP 49090 responder) with a stable device_id in /api/health

🔧 Management

  • Modern Svelte 5 web UI with dark/light themes
  • REST API for automation
  • BasicAuth with bcrypt password hashing
  • Prometheus metrics integration
  • Atomic configuration with validation

🤖 Smart Features

  • Browser-side AI detection (ONNX Runtime Web, WebGPU-accelerated) — no backend inference
  • Audio recording and playback (AAC + G.711 μ-law/A-law + Opus); AAC live preview via WebCodecs
  • Multi-layer camera health monitoring
  • Auto-remediation for connection issues
  • SSE-based real-time event system
  • Quality scoring and alerting

🔌 Integrations

  • MQTT trigger-based recording
  • WebDAV server for file access
  • FTP server for remote uploads
  • FFmpeg hardware transcoding
  • Event-driven architecture

Supported Protocols

Protocol Direction Status Notes
RTSP Camera → NVR ✅ Done H.264/H.265/MJPEG support
HTTP JPEG Camera → NVR ✅ Done Snapshot streaming
HLS NVR → Browser ✅ Done On-demand streaming
WebRTC NVR → Browser ✅ Done WHEP sub-second latency
HTTP-FLV NVR → Browser ✅ Done Browser-friendly streaming
RTMP (ingest) Camera → NVR ✅ Done Push-in: receive streams from remote publishers
SRT (ingest) Camera → NVR ✅ Done Push-in: low-latency transport
RTMP (relay) NVR → External ✅ Done Push-out: native Go relay to remote targets
RTSP (relay) NVR → External ✅ Done Push-out: native Go relay to remote targets
ONVIF Camera ↔ NVR ✅ Done Discovery, PTZ, stream URI
Xiaomi (CS2 + TUTK) Camera → NVR ✅ Done CS2 P2P + legacy TUTK (7 models), cloud auth
GB/T 28181 Camera → NVR ✅ Done SIP platform, auto-enrollment, audio + talk, subscriptions, PTZ, device-side playback

Use Cases

🏠 Home Security

Monitor your property with multiple cameras. Motion-triggered recording, smartphone alerts, and easy remote viewing from anywhere.

🏪 Small Business

Affordable security system for shops, offices, and warehouses. Multi-camera support with individual retention policies.

🔧 DIY/Tinkering

Perfect for homelab enthusiasts. Self-hosted, no subscriptions, works with any RTSP camera and integrates with smart home systems.

Documentation

Document Description
Getting Started Installation, first camera setup
Upgrade Guide Breaking changes & migration steps between versions
Configuration Full config reference
API Reference REST API documentation
MediaMTX Guide MediaMTX integration for CSI cameras
Deployment systemd, reverse proxy, cross-compile, and per-platform NAS guides (unRAID / fnOS / iStoreOS / Synology / QNAP / ZSpace)
Auto-update (Docker) Manual + optional Watchtower auto-updates and rollback
Object-Storage Offload Async S3-compatible cold backup with verified local eviction
Desktop Edition Windows / macOS desktop installers and trust model
Xiaomi Setup Xiaomi cloud camera integration
ONVIF Guide ONVIF camera setup, PTZ control, troubleshooting
Camera Guide Camera setup, protocols, troubleshooting
FTP Integration FTP file access setup
MQTT Integration MQTT smart home integration
Home Assistant Home Assistant integration guide
WebDAV Integration WebDAV file access setup
Troubleshooting Common issues and solutions
Transcoding FFmpeg transcoding setup
Prometheus Metrics Complete Prometheus metric reference with types, labels, and examples
Relay Guide RTMP live platform relay configuration and troubleshooting
Remote Access External/4G access via Tailscale, Cloudflare Tunnel, and WebRTC ICE/STUN/TURN config

Build & Deploy

# Build for current architecture
make build

# Cross-compile for ARM64 (Raspberry Pi)
make cross

# Run tests
make test

# Build Docker images
make docker-build       # Multi-stage build
make docker-build-arm64 # Cross-compile arm64 (no QEMU)
make docker-build-all   # All architectures

Docker deployment:

docker compose --project-directory . -f deploy/docker/docker-compose.yml up -d

Images published to ghcr.io/mi-bee-studio/mibeenvr with tags: 0.13.0 (exact version), 0.13 (minor track), 0 (major track), latest

Project Structure

cmd/mibee-nvr/       # CLI entry point + app lifecycle
internal/            # Core packages (43 Go modules)
web/                # Svelte 5 SPA frontend
deploy/             # systemd services, Caddyfile
docs/               # Bilingual documentation (EN/ZH)
tests/              # Integration tests
e2e-tests/         # Playwright E2E tests

For full project details, see the architecture overview.

Contributing

  1. Run make lint before submitting (golangci-lint v2; run make lint-install first)
  2. Add tests for new features
  3. Write clear commit messages

Thanks to everyone who has contributed:

Contributors

License

AGPL-3.0-only © Mi&Bee Studio, with a linking exception for pkg/ so third-party programs may build on the extension interfaces without triggering AGPL obligations.

  • Using MiBee NVR (running it, recording cameras, watching streams): no obligations — use it freely, including commercially.
  • Modifying and distributing it: your modified version must be released under AGPL-3.0.
  • Building on pkg/ in your own program: allowed under the linking exception; your program's license is your choice.
  • Separate programs talking to a running NVR over its HTTP/WebSocket APIs: never affected by the license.

Releases up to v0.10.1 were MIT-licensed; that continues to apply to those versions. See NOTICE for third-party components and CONTRIBUTING.md for the contribution licensing policy.

About

Lightweight self-hosted NVR in Go — single static binary, zero dependencies, embedded web UI. RTSP/ONVIF/Xiaomi/GB28181 cameras, RTMP/SRT/WebRTC push-in ingest, WebRTC/HLS/FLV live view, audio, timelapse, continuous playback, browser-side AI detection. Runs on low-power ARM.

Topics

Resources

Contributing

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages