2020-12-23 01:21:17 -05:00
|
|
|
[![CI](https://github.com/scottlamb/moonfire-nvr/workflows/CI/badge.svg)](https://github.com/scottlamb/moonfire-nvr/actions?query=workflow%3ACI)
|
|
|
|
|
2016-01-02 01:06:47 -05:00
|
|
|
# Introduction
|
|
|
|
|
|
|
|
Moonfire NVR is an open-source security camera network video recorder, started
|
2016-11-25 16:03:58 -05:00
|
|
|
by Scott Lamb <<slamb@slamb.org>>. It saves H.264-over-RTSP streams from
|
|
|
|
IP cameras to disk into a hybrid format: video frames in a directory on
|
2016-11-25 16:00:27 -05:00
|
|
|
spinning disk, other data in a SQLite3 database on flash. It can construct
|
|
|
|
`.mp4` files for arbitrary time ranges on-the-fly. It does not decode,
|
|
|
|
analyze, or re-encode video frames, so it requires little CPU. It handles six
|
|
|
|
1080p/30fps streams on a [Raspberry Pi
|
|
|
|
2](https://www.raspberrypi.org/products/raspberry-pi-2-model-b/), using
|
|
|
|
less than 10% of the machine's total CPU.
|
|
|
|
|
2017-10-22 00:54:27 -04:00
|
|
|
So far, the web interface is basic: a filterable list of video segments,
|
|
|
|
with support for trimming them to arbitrary time ranges. No scrub bar yet.
|
2018-11-26 00:31:50 -05:00
|
|
|
There's also no support for motion detection, no https/SSL/TLS support (you'll
|
2018-12-27 17:00:15 -05:00
|
|
|
need a proxy server, as described [here](guide/secure.md)), and only a
|
|
|
|
console-based (rather than web-based) configuration UI.
|
2017-10-22 00:54:27 -04:00
|
|
|
|
2017-10-22 01:03:12 -04:00
|
|
|
![screenshot](screenshot.png)
|
2016-01-02 01:06:47 -05:00
|
|
|
|
2021-03-12 15:36:20 -05:00
|
|
|
Moonfire NVR is currently at version 0.6.2. Until version 1.0, there will be no
|
2016-01-02 01:06:47 -05:00
|
|
|
compatibility guarantees: configuration and storage formats may change from
|
2016-12-21 01:08:18 -05:00
|
|
|
version to version. There is an [upgrade procedure](guide/schema.md) but it is
|
|
|
|
not for the faint of heart.
|
2016-01-02 01:06:47 -05:00
|
|
|
|
|
|
|
I hope to add features such as salient motion detection. It's way too early to
|
|
|
|
make promises, but it seems possible to build a full-featured
|
|
|
|
hobbyist-oriented multi-camera NVR that requires nothing but a cheap machine
|
|
|
|
with a big hard drive. I welcome help; see [Getting help and getting
|
|
|
|
involved](#help) below. There are many exciting techniques we could use to
|
|
|
|
make this possible:
|
|
|
|
|
|
|
|
* avoiding CPU-intensive H.264 encoding in favor of simply continuing to use the
|
|
|
|
camera's already-encoded video streams. Cheap IP cameras these days provide
|
|
|
|
pre-encoded H.264 streams in both "main" (full-sized) and "sub" (lower
|
|
|
|
resolution, compression quality, and/or frame rate) varieties. The "sub"
|
|
|
|
stream is more suitable for fast computer vision work as well as
|
2021-01-21 19:30:46 -05:00
|
|
|
remote/mobile streaming. Disk space these days is quite cheap (with 4 TB
|
2016-01-02 01:06:47 -05:00
|
|
|
drives costing about $100), so we can afford to keep many camera-months of
|
|
|
|
both streams on disk.
|
2021-01-22 00:58:07 -05:00
|
|
|
* off-loading on-NVR analytics to an inexpensive USB or M.2 neural network
|
2021-01-21 19:30:46 -05:00
|
|
|
accelerator.
|
2016-01-02 01:06:47 -05:00
|
|
|
* using [HTTP Live Streaming](https://en.wikipedia.org/wiki/HTTP_Live_Streaming)
|
|
|
|
rather than requiring custom browser plug-ins.
|
2021-01-21 19:30:46 -05:00
|
|
|
* taking advantage of on-camera analytics. This is the lowest CPU usage option,
|
|
|
|
although many cameras' analytics aren't as good as what can be done on the NVR,
|
|
|
|
they're hard to experiment with, and even when they use modern ML-based
|
|
|
|
approaches, their built-in models can't be retrained.
|
2016-01-02 01:06:47 -05:00
|
|
|
|
2017-10-02 01:02:39 -04:00
|
|
|
# Documentation
|
2016-01-02 01:06:47 -05:00
|
|
|
|
2021-02-17 16:28:48 -05:00
|
|
|
* [License](LICENSE.txt) —
|
|
|
|
[GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html)
|
|
|
|
with [https://spdx.org/licenses/GPL-3.0-linking-exception.html](GPL-3.0-linking-exception)
|
|
|
|
for OpenSSL.
|
2021-01-21 19:30:46 -05:00
|
|
|
* [Installing](guide/install.md)
|
|
|
|
* [Building from source](guide/build.md)
|
2018-03-07 16:09:43 -05:00
|
|
|
* [UI Development](guide/developing-ui.md)
|
2017-10-02 01:02:39 -04:00
|
|
|
* [Troubleshooting](guide/troubleshooting.md)
|
2019-07-10 14:43:58 -04:00
|
|
|
* [Wiki](https://github.com/scottlamb/moonfire-nvr/wiki) has notes on
|
2021-01-21 19:30:46 -05:00
|
|
|
several camera models. Please add yours!
|
2016-11-25 17:34:00 -05:00
|
|
|
|
2016-01-02 01:06:47 -05:00
|
|
|
# <a name="help"></a> Getting help and getting involved
|
|
|
|
|
|
|
|
Please email the
|
2017-10-17 01:20:29 -04:00
|
|
|
[moonfire-nvr-users](https://groups.google.com/d/forum/moonfire-nvr-users)
|
|
|
|
mailing list with questions, or just to say you love/hate the software and
|
|
|
|
why. You can also file bugs and feature requests on the
|
|
|
|
[github issue tracker](https://github.com/scottlamb/moonfire-nvr/issues).
|
2016-01-02 01:06:47 -05:00
|
|
|
|
2016-11-25 17:34:00 -05:00
|
|
|
I'd welcome help with testing, development (in Rust, JavaScript, and HTML),
|
|
|
|
user interface/graphic design, and documentation. Please email the mailing
|
2017-10-02 01:02:39 -04:00
|
|
|
list if interested. Pull requests are welcome, but I encourage you to discuss
|
|
|
|
large changes on the mailing list or in a github issue first to save effort.
|