Skip to content

Releases: scottlamb/moonfire-nvr

v0.7.30

20 Feb 02:06

Choose a tag to compare

  • fix another v0.7.26 regression,
    #350: severe timestamp
    drift. This was a pair of errors in the new writer path: the "local start time"
    was not being reset at recording rotation, and the wall clock was not accounting
    for the final frame of each recording.

v0.7.29

19 Feb 18:26

Choose a tag to compare

  • 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

19 Feb 17:44

Choose a tag to compare

  • 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

18 Feb 20:26

Choose a tag to compare

  • Fix React warnings (and potential malfunction) when opening a recording
    in list view. FullScreenVideo was not wrapped in React.forwardRef,
    so MUI's Modal/FocusTrap could not attach a ref to it. Also fix
    an MUI warning about the modal content node not accepting focus, by
    adding tabIndex={-1} to FullScreenVideo's root element.
  • Fix frequent intermittent live view failures in Firefox.
    Concurrent Blob.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.26 introduced a busy loop error in this case.
  • Fix debug-mode panics within moonfire-nvr config command.
  • Update to retina 0.4.17,
    which improves compatibility with several camera models.

v0.7.26

17 Feb 20:13

Choose a tag to compare

  • Major changes to sample file directory IO.

    • All directory I/O happens on each directory's two-thread pool with threads
      named dir-<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).
    • 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

14 Feb 21:31

Choose a tag to compare

  • fix release workflow error

Changes from (tagged but never released) 0.7.24:

  • in UI, replace unhelpful TypeError: Failed to fetch messages with more descriptive errors such as POST /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..=253402207200 panics.
    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

03 Oct 22:50

Choose a tag to compare

  • update Retina to v0.4.14, improving camera compatibility. Fixes #344.
  • bump minimum Rust version to 1.88.

v0.7.21

04 Apr 20:18

Choose a tag to compare

  • Release with mimalloc allocator, which is significantly faster than the memory
    allocator built into musl.
  • Eliminate some memory allocations.

v0.7.20

01 Feb 05:46

Choose a tag to compare

v0.7.19

28 Jan 17:33

Choose a tag to compare

  • support recording H.265 (#33).
    Browser support may vary.
  • bump minimum Rust version to 1.82.
  • improve error message on timeout opening stream.
  • use jiff for time manipulations.