Releases: scottlamb/moonfire-nvr
v0.7.30
v0.7.29
- fix a v0.7.26 regression: the database would not be updated during
normal operation to reflect that recordings had been fully deleted.
This made restarts take a long time because they started with a database
transaction proportional to the number of recordings in the previous run.
It would also cause the SQLite database to (slowly) grow without bound.
v0.7.28
- log full error chains when serving errors to HTTP clients
- upgrade frontend dependencies, including React 18->19 and MUI 5->7
- gracefully degrade live stream on low bandwidth
v0.7.27
- Fix React warnings (and potential malfunction) when opening a recording
in list view.FullScreenVideowas not wrapped inReact.forwardRef,
so MUI'sModal/FocusTrapcould not attach a ref to it. Also fix
an MUI warning about the modal content node not accepting focus, by
addingtabIndex={-1}toFullScreenVideo's root element. - Fix frequent intermittent live view failures in Firefox.
ConcurrentBlob.arrayBuffer()calls in the WebSocket message handler
could resolve out of order, delivering fMP4 segments to the SourceBuffer
with non-monotonic decode timestamps. Fix by processing messages
sequentially via promise chaining.
Fixes #343. - Use real hyperlinks to issues in live view error alert.
Fixes #326. - Fix 9x16 videos being stretched to the full screen dimensions in
list view full screen mode. Clean up some references to ancient
Firefox versions along the way. - Test and fix dir pool shutdown with multiple streams.
v0.7.26introduced a busy loop error in this case. - Fix debug-mode panics within
moonfire-nvr configcommand. - Update to retina 0.4.17,
which improves compatibility with several camera models.
v0.7.26
-
Major changes to sample file directory IO.
-
All directory I/O happens on each directory's two-thread pool with threads
nameddir-<PATH>. Formerly, I/O could happen on the per-stream writer
threads, per-directory reader threads, and occasionally on even the
tokio worker threads. -
Stream shutdowns are more responsive now. Before they could wait up to
30 seconds for a connect/frame timeout; now the shutdown request aborts
these operations. -
Multiple sample file directories are scanned in parallel, speeding
program startup. -
Streamers write only into a recent frames buffer in RAM, which the directory
pool workers asynchronously write to disk approximately once per GOP, where
formerly there was a write call per frame.In the new model, streamers never fall behind due to HDD I/O. Instead, frames
are buffered up to a limit. Recordings are aborted if the pool falls too
far behind.This roughly halves CPU usage as thread hand-offs and syscalls are less common.
It also enables several desirable future changes:- audio recording (which radically increases the number of frames and thus
would otherwise significantly increase CPU usage). - "monitor mode" (allowing live view without recording to disk).
- further CPU reductions for live view (by skipping all SQLite ops and disk I/O).
- audio recording (which radically increases the number of frames and thus
-
Streamers never acquire the full SQLite database lock, only a per-stream lock.
They thus never wait on SQLite operations, except indirectly if the tokio thread
is performing SQLite work on another task. A future change will move all
SQLite operations to a dedicated thread to avoid such stalls. This was previously
not viable because it would cause too many thread hand-offs.
-
-
bump minimum Rust version to 1.91.
v0.7.25
- fix release workflow error
Changes from (tagged but never released) 0.7.24:
- in UI, replace unhelpful
TypeError: Failed to fetchmessages with more descriptive errors such asPOST /api/login failed; see browser console. - update the tested and supported Node.js versions to 20, 22, 24, or 25. Fix some test failures on 24+.
- quick fix for
valid timestamp: parameter 'second' with value 102481911520608 is not in the required range of -377705023201..=253402207200panics.
See #346. - abort on panics. This avoids situations in which the binary continues to run in a broken state after mutexes have been "poisoned". It should be less confusing, and when coupled with typical systemd/Docker policies, will cause the system to recover on its own.
- reduce the amount of debug info in the binary.
- update Retina from v0.4.14 to v0.4.16, improving camera compatibility.
v0.7.23
v0.7.21
- Release with
mimallocallocator, which is significantly faster than the memory
allocator built intomusl. - Eliminate some memory allocations.
v0.7.20
- H.265 fixes. See Retina v0.4.13 release notes.