Moonfire NVR, a security camera network video recorder
Go to file
Scott Lamb f9d33cd446 continue CI if nightly fails
It seems to be failing spuriously now, eg:
https://github.com/scottlamb/moonfire-nvr/runs/3957348093?check_suite_focus=true

```
error[E0277]: the trait bound `dyn view_trait::View: view_trait::View` is not satisfied
  --> /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.2.2/src/views/list_view.rs:98:14
   |
98 |         view.take_focus(direction::Direction::none());
   |              ^^^^^^^^^^ the trait `view_trait::View` is not implemented for `dyn view_trait::View`

For more information about this error, try `rustc --explain E0277`.
error: could not compile `cursive_core` due to previous error
warning: build failed, waiting for other jobs to finish...
error: build failed
Error: Process completed with exit code 101.
```
2021-10-20 15:12:56 -07:00
.cargo keep frame poiners in release mode 2019-07-20 15:33:12 -07:00
.github continue CI if nightly fails 2021-10-20 15:12:56 -07:00
.vscode mass markdown reformatting 2021-04-01 12:32:31 -07:00
design UNTESTED: note trailing zeros in /recordings reply 2021-10-20 14:55:06 -07:00
docker update arm docker build notes 2021-08-12 09:36:13 -07:00
guide prepare v0.6.7 w/ Retina v0.3.3 2021-10-20 14:59:33 -07:00
misc update lnav config to support newer+older styles 2021-03-12 13:40:37 -08:00
screenshots Prepare v0.6.3 release 2021-03-31 15:21:09 -07:00
server prepare v0.6.7 w/ Retina v0.3.3 2021-10-20 14:59:33 -07:00
ui upgrade to @mui v5 release 2021-09-24 10:57:29 -07:00
.dockerignore start a new React-based UI (#111) 2021-02-17 19:42:32 -08:00
.gitignore start a new React-based UI (#111) 2021-02-17 19:42:32 -08:00
AUTHORS upgrade copyright notices 2020-03-01 22:53:41 -08:00
CHANGELOG.md prepare v0.6.7 w/ Retina v0.3.3 2021-10-20 14:59:33 -07:00
CONTRIBUTING.md adjust support instructions 2021-04-27 11:08:54 -07:00
LICENSE.txt shorten per-file copyright headers 2021-02-17 15:39:17 -08:00
README.md prepare v0.6.7 w/ Retina v0.3.3 2021-10-20 14:59:33 -07:00
release.bash release script fixes 2021-03-12 13:33:08 -08:00

README.md

CI

Introduction

Moonfire NVR is an open-source security camera network video recorder, started 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 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, using less than 10% of the machine's total CPU.

Help wanted to make it great! Please see the contributing guide.

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. There's also an experimental live view UI.

list view screenshot live view screenshot

There's no support yet for motion detection, no https/TLS support (you'll need a proxy server, as described here), and only a console-based (rather than web-based) configuration UI.

Moonfire NVR is currently at version 0.6.7. Until version 1.0, there will be no compatibility guarantees: configuration and storage formats may change from version to version. There is an upgrade procedure but it is not for the faint of heart.

I hope to add features such as video analytics. In time, we can build a full-featured hobbyist-oriented multi-camera NVR that requires nothing but a cheap machine with a big hard drive. 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 remote/mobile streaming. Disk space these days is quite cheap (with 4 TB drives costing about $100), so we can afford to keep many camera-months of both streams on disk.
  • off-loading on-NVR analytics to an inexpensive USB or M.2 neural network accelerator and hardware H.264 decoders.
  • taking advantage of on-camera analytics. They're often not as accurate, but they're the best way to stretch very inexpensive NVR machines.

Documentation