Rename applies to Go2RTC, Janus, and RTSP2Web streaming options.
Update enum values from Primary/Secondary to Restream/CameraDirectPrimary/CameraDirectSecondary.
- Add db migration zm_update-1.37.79.sql to rename column and migrate data
- Update C++ enum StreamChannelOption and member stream_channel
- Update PHP getStreamChannelOptions() method
- Update all JavaScript references
- Auto-select CameraDirectPrimary when Restream option becomes disabled
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add status bar below video with LIVE indicator for live streams
- Show pulsing red dot animation for live streams
- Display wall clock time that updates as recorded video plays
- Add event start time data attribute to console and events pages
- Hide status bar when no content to display
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Support go2rtc, RTSP2Web, and Janus streaming in thumbnail popups
- Separate still thumbnail logic from hover overlay streaming
- Still thumbnails use event snapshot when not decoding
- Hover overlay prioritizes live streaming over recorded video
- Refactor thumbnail JS into focused helper functions
- Fix video-stream.js path for dynamic import
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Go2rtc, rtsp2web, and janus work independently of ZM's decode/analyze
processes. Check for these external streaming methods before checking
Analysing/Decoding state to ensure live streaming is used when available.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When a monitor is not analyzing or decoding, the console thumbnail now
shows the most recent event's snapshot instead of attempting a live
stream. The hover overlay plays the event replay (with mp4 support if
available).
For active monitors with go2rtc enabled, the hover overlay now uses
go2rtc WebRTC streaming via the video-stream custom element, with a
3-second fallback to MJPEG if the connection fails.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Modified web/ajax/console.php to generate filter querystrings for each event period (Hour, Day, Week, Month, Archived, Total)
- Modified web/skins/classic/views/js/console.js to use filter querystrings in event links
- Links now include proper date filters matching old console.php implementation
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Added Sequence field to row data in ajax/console.php
- Sequence is now available for bootstrap-table to sort by (already configured as default)
- Sequence column remains hidden (not defined in table headers)
- Ensures table sorts by monitor sequence order by default
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Removed session access and manipulation code
- Changed from session_filters to request_filters using $_REQUEST directly
- Removed zm_session_start() and session_write_close() calls
- AJAX handler now stateless, getting all filter values from request parameters
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Added MonitorId to session_filters array
- Implemented MonitorId filtering logic to filter monitors by selected IDs
- Handles both single value and array of monitor IDs
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Initialize params.data to empty object if undefined to prevent errors
- Improve validation logic to consistently handle arrays vs strings
- Make type checking more explicit and readable
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Fixed array field detection in ajaxRequest using endsWith('[]')
- Improved multi-value field detection in monitorFilterOnChange
- Fixed empty value check to properly handle '0' as valid value
- Added proper initialization of array fields in params.data
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Fixed cookie naming to use consistent names without array brackets
- Updated JavaScript to separate field names from cookie names
- Simplified empty value check in AJAX handler using empty()
- Consolidated cookie restoration logic in _monitor_filters.php
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Added cookie restoration in _monitor_filters.php as fallback when session is empty
- Fixed empty array comparison in AJAX console handler
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
- Updated Group::get_group_dropdown() to accept view parameter and use monitorFilterOnChange for console view
- Updated ajaxRequest in console.js to include filter form data in params.data
- Added session update logic in AJAX console handler to persist filter selections
- Added cookie storage in monitorFilterOnChange for client-side persistence
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
Merged commit 52ea542 from SteveGilvarry/ZoneMinder.
Bandwidth was showing as a raw number without units, making it
difficult to interpret. Now formats bandwidth with appropriate
units (B/s, kB/s, MB/s, GB/s) using human_filesize() function
with 1024 as the conversion step.
Server-side formatting is consistent with event disk space
formatting and reduces client-side processing.
Co-authored-by: connortechnology <925519+connortechnology@users.noreply.github.com>
* experiment with namespaces on the Server class
* experiment with namespaces on the Server class
* Implement the ZM namespace on objects
* Implement the ZM namespace on objects
* Implement the ZM namespace on objects