Moonfire NVR, a security camera network video recorder
Go to file
Scott Lamb 560fe804d6 use SameSite=Lax instead of SameSite=Strict
To improve reliability of live streams (#59) on Safari.

Safari was dropping the cookie from websocket update requests.
(But it worked sometimes. I don't get why.) I saw folks on the Internet
thinking this related to HttpOnly:

*   https://developer.apple.com/forums/thread/104488
*   https://stackoverflow.com/q/47742807/23584

but I still see this behavior without HttpOnly. SameSite=Strict vs
SameSite=Lax appears to make a difference. Try that instead.
SameSite=Strict is pointless for us anyway as noted in a new comment.
Turning off HttpOnly would be more unfortunate security-wise.
2021-03-31 13:08:03 -07:00
.cargo keep frame poiners in release mode 2019-07-20 15:33:12 -07:00
.github Merge branch 'master' into new-ui 2021-03-12 14:53:15 -08:00
.vscode recommend installing eslint vscode plugin 2021-03-15 23:29:34 -07:00
design use SameSite=Lax instead of SameSite=Strict 2021-03-31 13:08:03 -07:00
docker dockerfile tweaks 2021-03-27 21:35:44 -07:00
guide Merge branch 'master' into new-ui 2021-03-12 14:53:15 -08:00
misc update lnav config to support newer+older styles 2021-03-12 13:40:37 -08:00
server use SameSite=Lax instead of SameSite=Strict 2021-03-31 13:08:03 -07:00
ui use SameSite=Lax instead of SameSite=Strict 2021-03-31 13:08:03 -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 fix incorrect prev_media_duration_90k calculation 2021-03-25 22:09:29 -07:00
LICENSE.txt shorten per-file copyright headers 2021-02-17 15:39:17 -08:00
README.md prepare version 0.6.2 2021-03-12 12:36:20 -08:00
release.bash release script fixes 2021-03-12 13:33:08 -08:00
screenshot-small.png add a basic Javascript UI 2017-10-21 21:54:27 -07:00
screenshot.png add a basic Javascript UI 2017-10-21 21:54:27 -07:00

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.

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 no support for motion detection, no https/SSL/TLS support (you'll need a proxy server, as described here), and only a console-based (rather than web-based) configuration UI.

screenshot

Moonfire NVR is currently at version 0.6.2. 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 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 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 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.
  • using HTTP Live Streaming rather than requiring custom browser plug-ins.
  • 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.

Documentation

Getting help and getting involved

Please email the 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.

I'd welcome help with testing, development (in Rust, JavaScript, and HTML), user interface/graphic design, and documentation. Please email the mailing 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.