github ZoneMinder/zoneminder 1.38.1
Seek and Destroy 1.38.1

8 hours ago

ZoneMinder 1.38.1 Release Notes

This is a maintenance release that includes bug fixes, performance improvements, and enhancements to ZoneMinder 1.38.

Key Highlights

🎯 ONVIF Improvements

  • New unified ONVIF control module - Replaces four separate vendor-specific implementations with a single, more robust module
  • Automatic SSL verification fallback for cameras with self-signed certificates
  • Improved clock drift handling - Configurable timestamp validity window (10-600 seconds) to handle time differences between ZoneMinder and cameras
  • Better authentication - Fixes for "not authorized" errors caused by clock synchronization issues in ONVIF Event Listener
  • Direct protocol testing mode - zmcontrol.pl now supports --protocol flag for testing control modules without database access
  • Enhanced event listener support - Better handling of ONVIF events and subscription renewals

🚀 Performance Optimizations

  • Event thread improvements - Uses condition variables instead of sleep for faster response to decoded frames
  • Decoder optimizations - Better queue management and flushing when decoding is no longer needed
  • Persistent blend buffer - Eliminates per-frame allocations in image blending (significant performance gain)
  • Optimized pixel operations - Faster color merging and highlight detection algorithms
  • Binary search for event seeking - Dramatically faster seek operations in event playback

🐛 Critical Bug Fixes

  • Event naming race condition - Fixed events being renamed during recording
  • Memory leaks - Fixed leaks in Event_Tag, blend operations, and hardware frame transfers
  • Tag filtering - Fixed "No Tag" (0) and "Any Tag" (-1) filter logic
  • Timezone handling - Proper handling of camera vs. server time zones in event streams
  • SSL verification - Automatic retry without verification for Go2RTC, Janus, and ONVIF connections

🔧 Stability Improvements

  • Thread safety - Fixed race conditions in analysis, decoder, and event threads
  • Proper cleanup - Events now properly signal termination and wait for threads
  • Better error handling - Improved handling of codec errors, network failures, and resource exhaustion
  • Shared memory fixes - Correct attachment counting and cleanup

Detailed Changes

Core Engine

  • Fixed decoder queue flushing when decoding mode changes
  • Improved packet notification system for faster inter-thread communication
  • Better handling of on-demand decoding modes (KEYFRAMES, KEYFRAMESONDEMAND)
  • Fixed last_write_time updates even when not decoding to prevent monitor stall detection false positives
  • Event threads now use wait_for() instead of sleep for sub-millisecond response times
  • Fixed Event destructor to properly stop and join threads before cleanup

Camera Support

  • FfmpegCamera: Fixed secondary stream credential application
  • LocalCamera: Better error messages for missing /dev devices (systemd PrivateDevices check)
  • LibVNC: Fixed memory allocation error handling
  • LibVLC: Added null pointer checks before stopping player
  • Added MPEG4 decoder support
  • Fixed RTSP stream timeout handling

Control Systems

  • AxisV2: Complete rewrite with credential guessing, binary search optimizations, and configuration get/set support
  • Dahua: SSL verification with automatic fallback
  • Uniview: LAPI JSON API support, configuration management, better network probing
  • ONVIF: Unified module replacing vendor-specific implementations
  • Reolink/TapoC520WS: Fixed brightness case sensitivity bug and missing sendCmd calls
  • All control modules now support direct protocol testing mode

Web Interface & API

  • Fixed tag filter SQL for special values (0 = No Tag, -1 = Any Tag)
  • Better handling of Events_Tags table LEFT JOIN null comparison issues
  • Improved event name updates to preserve user changes during recording

Database

  • Added migration zm_update-1.38.1.sql to increase ONVIF_Options column from 64 to 255 characters
  • Fixed Event_Tag constructor to handle null assigned_by values
  • Async database updates in Event destructor to avoid blocking

Build System

  • Minimum CMake version raised to 3.12
  • Fixed include directory handling (now uses ZM_INCLUDE_DIRS list)
  • Fixed ZM_STRIP_NEON definition
  • Better handling of add_definitions() vs target_compile_definitions()
  • Fixed Perl executable detection (${PERL_EXECUTABLE} instead of hardcoded perl)
  • Removed duplicate code in CMakeLists.txt

Configuration & Logging

  • Fixed zm_config.cpp whitespace trimming logic
  • ConfigItem copy constructor now properly copies all fields
  • Better database command detection (supports MariaDB-native commands like mariadb and mariadb-dump)
  • Improved logging in multi-server configurations
  • Fixed version mismatch handling in zmpkg.pl to warn instead of fatal error

Scripts & Tools

  • zmcontrol.pl: New --protocol mode for direct control module testing without database
  • zmupdate.pl: Uses findDbCommand() for MariaDB compatibility
  • zmcamtool.pl: Uses findDbCommand() for mysqldump
  • zmonvif-probe.pl: Added events command to check ONVIF event support

Miscellaneous

  • Expanded MacVendors.json with many more camera vendor MAC address prefixes
  • Fixed zm_buffer.h null pointer check
  • Fixed numerous typos in comments and debug messages
  • Better error messages throughout the codebase
  • Improved AGENTS.md developer documentation

Platform-Specific Changes

RedHat/Fedora/Rocky Linux

  • Updated spec file to use mariadb-connector-c-devel instead of mariadb-devel
  • Added cjson-devel build dependency
  • Changed to fedora:43 from fedora:rawhide in CI
  • Added arp-scan and iproute dependencies
  • Fixed systemd conflicts in container builds
  • Added explicit paths for network tools to avoid systemd PrivateDevices issues
  • Removed static library packaging per Fedora guidelines

CI/CD

  • Removed obsolete CI workflows (Debian Bullseye/Bookworm, Ubuntu Focal, CentOS 8)
  • Renamed package build workflows for clarity
  • Updated Fedora build matrix

Upgrade Notes

  1. Database Migration: Run zmupdate.pl to apply schema changes (ONVIF_Options column expansion)
  2. ONVIF Users: If you have custom ONVIF control configurations, you may want to switch to the new unified "ONVIF" control type for better reliability
  3. Clock Drift Issues: If experiencing ONVIF authentication failures, add timestamp_validity=120 (or higher) to ONVIF Options field
  4. Control Testing: Use new zmcontrol.pl --protocol ONVIF --address user:pass@ip --command get_config for diagnostics

Contributors

This release includes contributions from the ZoneMinder development team and community members who reported bugs, tested fixes, and provided feedback.


Full Changelog: 1.38.0...1.38.1

Don't miss a new zoneminder release

NewReleases is sending notifications on new releases.