From ab1c3f7c39918f8d3de5b971bcb765ac5f898bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Tue, 1 Apr 2025 17:26:50 +0300 Subject: [PATCH] publish --- .../grafana-traffic.png | Bin 42805 -> 16629 bytes ...frigate-config.png => moonfire-config.png} | Bin .../2025/construction-site-surveillance.md | 86 +++++++++++++----- 3 files changed, 62 insertions(+), 24 deletions(-) rename assets/_/2025/construction-site-surveillance/{frigate-config.png => moonfire-config.png} (100%) diff --git a/assets/_/2025/construction-site-surveillance/grafana-traffic.png b/assets/_/2025/construction-site-surveillance/grafana-traffic.png index 40ac28bce7f30bf77c2b3ea840a9fe2350c9d6c4..ee8898c636ea20594f277e05a376306cfc4bf409 100644 GIT binary patch literal 16629 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 z%0A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 JF6*2UngD>NaD)H= diff --git a/assets/_/2025/construction-site-surveillance/frigate-config.png b/assets/_/2025/construction-site-surveillance/moonfire-config.png similarity index 100% rename from assets/_/2025/construction-site-surveillance/frigate-config.png rename to assets/_/2025/construction-site-surveillance/moonfire-config.png diff --git a/content/log/2025/construction-site-surveillance.md b/content/log/2025/construction-site-surveillance.md index aa1c912..c19d3be 100644 --- a/content/log/2025/construction-site-surveillance.md +++ b/content/log/2025/construction-site-surveillance.md @@ -1,7 +1,6 @@ --- title: "Construction site surveillance" -date: 2025-02-24T22:01:14+02:00 -draft: true +date: 2025-04-01T14:26:00+02:00 --- I am building a house, for which I decided I need a surveilance cameras. I have @@ -59,12 +58,18 @@ There are two codec choices, mostly: found in Wikipedia][14], it was used by 91% of video industry developers as of September 2019. Every screen-equipped device that I tried can play it. - *H.265* (a.k.a. _HEVC_) is a royalty- and patent-ridden codec which offers - 25-50% better compression ratios[15]. In my experience, the compression ratio - was over 50%. It is amazing for transfer, un-playable on everything I've - tried except Google Chrome browser on Android[^1]. -- Footnote: *H.264+*, *H.264B*, *H.264H* and similar. They are "close" - derivatives of H.264. Software support is hit-or-miss, so I mostly ignore - those. + 25-50% [better compression ratios][15]. In my experience, the compression + ratio was over 50%. It is amazing for transfer, un-playable on everything + I've tried except Google Chrome browser on Android[^1]. +- *AV1* seems to be anecdotally on-par with H.265 and is not patent-ridden. + Camera cannot stream it, but lack of patent problems implies, it should be + good for recordings. However: + - I was not able to (easily) setup go2rtc with AV1. + - The 5-minute experiments yielded similar bitrates for similar quality. In + the end, I decided it's not worth the hassle until go2rtc offers a packaged + configuration for it. +- *H.264+*, *H.264B*, *H.264H* and similar. They are "close" derivatives of + H.264. Software support is hit-or-miss, so I mostly ignore those. # Picking the camera @@ -83,8 +88,7 @@ There are a few variables you may want to check: known about it, or at least read the Dahua part, before purchasing mine. Note that most cameras are designed and manufactured in China. Which, -unsurprisingly, have [bad reputation in the Chinese-controlled areas][1]. I -also found out about it only while researching open-source NVRs. +unsurprisingly, have [bad reputation in the Chinese-controlled areas][1]. # Network Video Recorder @@ -102,20 +106,40 @@ two options for an NVR: [home server]({{< ref "log/2023/nixos-subjective" >}}), I am self-hosting my NVR. +## Moonfire NVR + *Moonfire NVR* seems like the simplest of the bunch: low hardware requirements (raspberry pi 2!), minimal number of features. Cons: does not have object detection, not even "in theory". I have relatively powerful hardware in the closet and want object detection for it. +Moonfire NVR's interface is ncurses-based, similar to how Linux kernel is +configured. In opinion, for end-user product, one either offers file-based +configuration, or web-based configuration directly in the browser. Many +projects do both (e.g. home-assistant, frigate). This is the first ncurses-based +configuration for a consumer product. Which makes me wonder what their audience +is. + + +{{Moonfire-NVR ncurses-based configuration dialog}} + +Once configured, the recordings are printed as a timestamped list. Which is +good if you know the time upfront, but is not great for discovery. + +{{Moonfire-NVR web dialog with a list of recordings}} + +## Setting up Frigate + *Frigate* seems to be what the kids use these days. Documentation is extensive, though sometimes not very accurate, but [their forums][13] compensate for it. It took a few evenings to get it to work, and it works. -*ZoneMinder* is the oldest and most established. I learned about it only after -having set up Frigate. - -## Setting up Frigate - A few tips before you get started: - for object detection you will need hardware support. Look at [recommended @@ -123,16 +147,13 @@ A few tips before you get started: OpenVINO too. - start with go2rtc from the get-go. I had to re-configure all the Frigate streams, which was way more annoying than it's worth if you start with - go2rtc. -- as of writing I have [a performance problem with detectors using lots of - CPU][7] that nobody seem to be able to reproduce. I am hopeful Frigate 0.15 - will fix this. + go2rtc. Saved a lot of bandwidth, too. More on that later. ## Connecting the camera I bought [Teltonika Rutx11][8] 4G router/wifi modem that will fit in the [camera junction box][9]. Antennas will be outside: -- [External 4G antenna from Mikrotik][10] +- [External 4G antenna from Mikrotik][10]. - [Wi-fi dual-band magnetic sma antenna from Teltonika][11]. I purchased an unlimited 4G plan from an ISP that has good connectivity in the @@ -140,14 +161,24 @@ area. Then connected the Rutx11 via tailscale/[headscale][12]. Using tailscale I can connect to the camera directly from both my NVR and all personal devices, a yet another tailscale+headscale recommendation. +I disabled outgoing connections from the camera on the router. As a nice +side-effect, I have a _really nice_ WiFi hotspot in the construction site. + ## Bandwidth and codec considerations Two camera streams (`2688x752` and `1920x1080`), encoded in h.265 consume -around 1.8Mb/s 24/7. Both streams are transcoded to h.264 via go2rtc and then -sent over to Frigate and live view. and +around 2Mb/s 24/7. Both streams are transcoded to h.264 via go2rtc and then +sent over to Frigate and live view. Then recorded as H.264. Recordings for both +cameras take ~21-24GiB/day. Every 5 minutes a separate process captures a full-resolution picture of both -cameras: `5376x1520` and `2560x1440`. +cameras: `5376x1520` and `2560x1440`. I have a bunch of timelapses already! If +we meet in person, I will happily show. + +{{Grafana dashboard showing ~2Mb/s downlink and ~100Kb/s uplink over tailscale0 interface}} Using exactly the same parameters (resolution, fps), but with h.264, the bandwidth grows to 11 Mb/s. Which may not sound like a lot with today's fiber @@ -155,6 +186,7 @@ everywhere, but is considerable on a 4G connection. Since the home server has a graphics card, it can use hardware acceleration for video encoding and decoding. Thanks to proliferation of online video platforms, +those decoders and encoders are available on even the cheapest hardware. It takes ~5-10% of a single CPU core to transcode a stream, depending on the resolution. In my case, I am transcoding 4 streams (2 cameras, "low" and "high" @@ -165,13 +197,19 @@ Once the house is complete and I move NVR to the same physical network, I will change the encoding to h.264, stop transcoding and use more video bandwidth locally. +# Final notes + +With the current open-source NVR ecosystem and the price of consumer-grade +surveilance cameras (low hundreds of €), I highly recommend setting one up if +you are building something. It takes a few weeks to learn all the dusty +corners, but, in my opinion, in the end it's worth it. + [1]: https://uhrp.org/statement/hikvision-and-dahua-facilitating-genocidal-crimes-in-east-turkistan/ [2]: https://web.archive.org/web/20250221205936/https://ipcamtalk.com/wiki/ip-cam-talk-cliff-notes/ [3]: https://frigate.video [4]: https://github.com/scottlamb/moonfire-nvr [5]: https://zoneminder.com/ [6]: https://docs.frigate.video/frigate/hardware -[7]: https://github.com/NixOS/nixpkgs/issues/381280 [8]: https://teltonika-networks.com/products/routers/rutx11 [9]: https://www.dahuasecurity.com/products/All-Products/Accessories/Camera-Accessories/Camera-Mounts/Junction-Boxes/PFA126 [10]: https://mikrotik.com/product/mant_lte_5o