AtcSoft.VideoSurveillance.Wpf.Core
1.2.2
See the version list below for details.
dotnet add package AtcSoft.VideoSurveillance.Wpf.Core --version 1.2.2
NuGet\Install-Package AtcSoft.VideoSurveillance.Wpf.Core -Version 1.2.2
<PackageReference Include="AtcSoft.VideoSurveillance.Wpf.Core" Version="1.2.2" />
<PackageVersion Include="AtcSoft.VideoSurveillance.Wpf.Core" Version="1.2.2" />
<PackageReference Include="AtcSoft.VideoSurveillance.Wpf.Core" />
paket add AtcSoft.VideoSurveillance.Wpf.Core --version 1.2.2
#r "nuget: AtcSoft.VideoSurveillance.Wpf.Core, 1.2.2"
#:package AtcSoft.VideoSurveillance.Wpf.Core@1.2.2
#addin nuget:?package=AtcSoft.VideoSurveillance.Wpf.Core&version=1.2.2
#tool nuget:?package=AtcSoft.VideoSurveillance.Wpf.Core&version=1.2.2
πΉ AtcSoft.VideoSurveillance
A professional video surveillance platform for live monitoring of multiple RTSP/HTTP camera streams. Includes a WPF desktop application with an intuitive ribbon interface, a headless REST API + SignalR server edition, and Aspire orchestration.
β¨ Features
π₯οΈ Camera Display
- Dynamic Grid Layout - Auto-calculates optimal grid based on camera count (optimized for 4:3 aspect ratio)
- Camera Tile Overlay - Configurable overlay showing title, description, timestamp, and connection status
- Overlay Configuration - Choose corner position (TopLeft, TopRight, BottomLeft, BottomRight) and opacity (0-100%)
- Stream Rotation - Per-camera 0Β°/90Β°/180Β°/270Β° rotation applied at the GPU video processor stage; live display, snapshots, and recordings are all rotated. Recordings carry an MP4
rotatemetadata tag so any standard player honours it. - Full Screen Mode - Double-click or use context menu to view any camera in full screen (Escape to exit)
- Connection State Indicators - Visual indicators for Connected, Connecting, and Error states
π Zoom & Pan
- Scroll Zoom - Ctrl+Scroll to zoom in/out on any camera tile or full screen view, centered on mouse pointer
- Rectangle Selection Zoom - Ctrl+Left-drag to draw a selection rectangle, zooms to the selected region on release
- Pan - Ctrl+Left-drag while zoomed to pan the viewport
- Zoom Indicator - "Zoom: 150%" badge displayed on camera tile while zoomed
- Reset Zoom - Double-click or ESC to reset back to fit-to-view
- Single Zoom Policy - Only one camera tile can be zoomed at a time in the grid layout; zooming another resets the previous
- Motion Overlay Pause - Bounding box overlays are hidden while zoomed to avoid visual clutter, restored on reset
- GPU-Accelerated - Zoom operates at the DirectComposition transform level for smooth, low-latency rendering
π· Camera Management
- Context Menu - Edit, Delete, Full Screen, Swap Left/Right, Snapshot, Reconnect, Start/Stop Recording, Reset Zoom, Rotate (0Β°/90Β°/180Β°/270Β°)
- Drag-and-Drop - Reorder cameras by dragging tiles within the grid
- Network Scanner - Auto-discover cameras on the local network (integrated in Add Camera dialog)
- Test Connection - Validate camera connectivity before saving
- Multiple Protocols - RTSP, HTTP, and HTTPS support with configurable ports and paths
- USB / Webcam Support - Mix DirectShow / UVC USB cameras with IP cameras in the same grid (Windows). Devices are enumerated via Media Foundation; hot-plug events surface via WMI so unplugged devices transition cleanly to a
DeviceUnpluggedstate instead of thrashing in a reconnect loop. Seedocs/usb-cameras.md. - Per-Camera Overrides - Override any application-level setting on a per-camera basis (connection, display, performance, recording, motion detection)
π΄ Recording
- Manual Recording - Start/stop recording per camera via context menu
- Auto-Record on Connect - Automatically start recording when a camera connects
- Motion-Triggered Recording - Automatically record when motion is detected, with configurable post-motion duration
- Recording Segmentation - Clock-aligned automatic file segmentation (e.g., every 15 minutes at :00, :15, :30, :45)
- Recording Format - Configurable format (MP4, MKV, AVI) with per-camera override
- Recording Indicator - Visual indicator when recording is active
- Thumbnail Generation - Auto-generates thumbnails from recording frames (single image or 2x2 grid)
- Recordings Browser - Browse, filter, and playback recorded videos with playback overlay
π Motion Detection
- Frame-Based Detection - Compares consecutive frames using grayscale pixel differencing
- Multi-Bounding Box - Detects and highlights multiple motion regions simultaneously using grid-based clustering
- Configurable Sensitivity - 0-100 scale (higher = more motion required to trigger)
- Analysis Resolution - Configurable analysis width/height for performance tuning
- Bounding Box Visualization - Real-time colored bounding boxes in both grid and full-screen views with configurable color, thickness, smoothing, and minimum area
- Smart Scheduling - Staggered analysis across cameras to prevent CPU spikes
- Post-Motion Duration - Continue recording for configurable seconds after motion stops
- Cooldown - Configurable delay before motion can trigger a new recording
β±οΈ Timelapse
- Interval Capture - Automatically capture snapshots at configurable intervals (10s, 1m, 5m, 1h)
- Per-Camera Configuration - Enable/disable and configure interval per camera
- Organized Storage - Snapshots stored in camera-named subdirectories
π Layout Management
- Named Layouts - Create, save, and switch between named layouts
- Startup Layout - Designate a layout to load on application start
- Auto-Save - Automatic persistence of camera positions (configurable)
- Camera Assignment - Dual-list dialog for assigning cameras to layouts
π§Ή Media Cleanup
- Automatic Cleanup - Remove old recordings and snapshots based on retention policy
- Flexible Scheduling - On startup, hourly, daily, or weekly cleanup
- Configurable Retention - Set maximum age for recordings (default 30 days) and snapshots (default 7 days)
π Connectivity
- Auto-Reconnect - Automatic reconnection on failure with configurable delay
- Connection Timeout - Configurable timeout per camera or globally
- Disconnect Notifications - Optional notifications on camera disconnect/reconnect
- Notification Sounds - Optional audio alert on connectivity events
π¨ User Interface
- Fluent Ribbon UI - Modern ribbon interface with Layouts, Cameras, View, and Help tabs
- Theme Support - Dark/Light theme switching with configurable accent colors
- Multi-Language - Localization support via LCID-based language selection
- Settings Dialog - Comprehensive settings organized into General, Camera Display, Connection, Performance, Recording, Motion Detection, Timelapse, and Advanced sections
- Recordings Browser - Browse and playback recorded videos with filtering
- About Dialog - Application version and information
- Check for Updates - GitHub-based update checking with download link
π¦ Installation
- MSI Installer - Windows installer with Start Menu and Desktop shortcuts
- Per-Machine Install - Installs for all users on the machine
π οΈ Technology Stack
| Component | Technology |
|---|---|
| Framework | .NET 10.0 / .NET 10.0-windows |
| Desktop UI | WPF with Fluent.Ribbon, Atc.Wpf.Controls |
| Server | ASP.NET Core, SignalR |
| API Definition | OpenAPI 3.2 (atc-rest-api-source-generator) |
| Video Engine | AtcSoft.VideoEngine (desktop + server, in-process FFmpeg) |
| Orchestration | .NET Aspire |
| MVVM | Atc.XamlToolkit |
| Source Generators | Atc.SourceGenerators |
| Theming | Atc.Wpf.Theming |
| Logging | Serilog (file sink) |
| Versioning | release-please (Conventional Commits) |
| Installer | WiX Toolset v5 |
ποΈ Solution Structure
AtcSoft.VideoSurveillance/
βββ src/
β βββ AtcSoft.VideoSurveillance.Core/ # π Shared library: models, enums, events, service interfaces
β βββ AtcSoft.VideoEngine/ # π¬ Cross-platform video engine (FFmpeg in-process)
β βββ AtcSoft.VideoEngine.DirectX/ # π₯οΈ D3D11VA GPU acceleration for WPF
β βββ AtcSoft.VideoPlayer.Wpf/ # ποΈ WPF VideoHost control (DComp surface + overlay)
β βββ AtcSoft.VideoSurveillance.Wpf.Core/ # π§© Shared WPF library (dialogs, controls, services)
β βββ AtcSoft.CameraWall.Wpf/ # π§± CameraWall WPF library (used by the CameraWall app)
β βββ AtcSoft.CameraWall.Wpf.App/ # π Standalone WPF desktop app (Fluent.Ribbon)
β βββ AtcSoft.VideoSurveillance.Wpf/ # π WPF library for API client (GatewayService, SignalR)
β βββ AtcSoft.VideoSurveillance.Wpf.App/ # π WPF API client app (Fluent.Ribbon)
β βββ VideoSurveillance.yaml # π OpenAPI 3.2 spec (shared contract)
β βββ AtcSoft.VideoSurveillance.Api.Contracts/ # π Generated: endpoints, models, handler interfaces
β βββ AtcSoft.VideoSurveillance.Api.Domain/ # βοΈ Handler implementations calling Core services
β βββ AtcSoft.VideoSurveillance.Api/ # π ASP.NET Core host with SignalR hub
β βββ AtcSoft.VideoSurveillance.Blazor.App/ # π Blazor WebAssembly UI (MudBlazor)
β βββ AtcSoft.VideoSurveillance.Aspire/ # βοΈ Aspire AppHost (orchestration + dashboard)
β
βββ setup/
β βββ AtcSoft.CameraWall.Installer/ # π¦ WiX MSI installer (CameraWall)
β βββ AtcSoft.VideoSurveillance.Installer/ # π¦ WiX MSI installer (VideoSurveillance)
β
βββ test/
β βββ AtcSoft.VideoSurveillance.Core.Tests/ # β
xUnit v3 tests for Core
β βββ AtcSoft.VideoSurveillance.Wpf.Core.Tests/ # β
xUnit v3 tests for Wpf.Core
β βββ AtcSoft.VideoSurveillance.Api.Tests/ # β
xUnit v3 tests for API
β βββ AtcSoft.VideoEngine.Tests/ # β
xUnit v3 tests for VideoEngine
β
βββ docs/
βββ architecture.md # ποΈ Architecture diagrams and assembly details
βββ roadmap.md # πΊοΈ Overall project roadmap
βββ roadmap_VSWpfApp.md # πΊοΈ VideoSurveillance WPF App roadmap
βββ motion-detection.md # π Motion detection setup guide
βββ settings.md # βοΈ Complete settings reference
π Dependency Graph
Arrows point from a project to the projects it depends on (compile-time ProjectReference).
flowchart TD
subgraph Foundation["π Foundation (cross-platform, net10.0)"]
Core[AtcSoft.VideoSurveillance.Core]
VE[AtcSoft.VideoEngine]
end
subgraph Server["βοΈ Server (REST + SignalR)"]
Contracts[AtcSoft.VideoSurveillance.Api.Contracts]
Domain[AtcSoft.VideoSurveillance.Api.Domain]
Api[AtcSoft.VideoSurveillance.Api]
Blazor[AtcSoft.VideoSurveillance.Blazor.App]
end
subgraph Windows["πͺ Windows-only (net10.0-windows)"]
VEDx[AtcSoft.VideoEngine.DirectX]
VPWpf[AtcSoft.VideoPlayer.Wpf]
WpfCore[AtcSoft.VideoSurveillance.Wpf.Core]
CamWall[AtcSoft.CameraWall.Wpf]
VsWpf[AtcSoft.VideoSurveillance.Wpf]
end
subgraph Apps["π Applications"]
CamApp[AtcSoft.CameraWall.Wpf.App]
VsApp[AtcSoft.VideoSurveillance.Wpf.App]
Aspire[AtcSoft.VideoSurveillance.Aspire]
end
%% Server stack
Contracts --> Core
Domain --> Contracts
Domain --> Core
Api --> Contracts
Api --> Domain
Api --> Core
Api --> VE
%% Windows / WPF stack
VEDx --> VE
VPWpf --> VEDx
WpfCore --> Core
WpfCore --> VPWpf
CamWall --> WpfCore
VsWpf --> Core
VsWpf --> WpfCore
%% App composition
CamApp --> CamWall
VsApp --> VsWpf
Aspire --> Api
Aspire --> Blazor
Aspire --> CamApp
Aspire --> VsApp
π§ Services
Services are split between Core (shared) and WPF (UI-specific), all auto-registered via [Registration] attributes.
π Core Services (AtcSoft.VideoSurveillance.Core)
| Service | Description |
|---|---|
ICameraStorageService |
πΎ Persistence for cameras and layouts |
IApplicationSettingsService |
βοΈ Application settings with per-camera override support |
IRecordingService |
π΄ Manual and motion-triggered recording management |
IRecordingSegmentationService |
βοΈ Clock-aligned recording file segmentation |
IMotionDetectionService |
π Frame-based motion detection with multi-bounding box support |
ITimelapseService |
β±οΈ Interval-based timelapse snapshot capture |
IThumbnailGeneratorService |
πΌοΈ Recording thumbnail generation |
IMediaCleanupService |
π§Ή Automatic cleanup of old recordings and snapshots |
IGitHubReleaseService |
π GitHub-based update checking |
IMediaPipeline |
π¬ Abstraction for video stream operations (record, capture frame) |
IMediaPipelineFactory |
π Creates IMediaPipeline instances per camera |
π₯οΈ WPF Services (AtcSoft.CameraWall.Wpf)
| Service | Description |
|---|---|
ICameraWallManager |
ποΈ Main facade for all camera wall operations |
IDialogService |
π¬ Dialog abstraction for camera config, settings, input, confirmations |
π Per-Camera Override System
Every application-level setting can be overridden per camera. Override models use nullable properties -- null means "use application default":
// Get effective value: per-camera override wins over app default
var timeout = settingsService.GetEffectiveValue(
camera,
settingsService.Connection.ConnectionTimeoutSeconds,
o => o?.Connection.ConnectionTimeoutSeconds);
Override categories: Connection, CameraDisplay, Performance, Recording, MotionDetection (with nested BoundingBox).
π Getting Started
π Prerequisites
- Windows 10/11
- .NET 10 SDK (for building from source)
π₯ Install
Download the latest MSI installer from GitHub Releases.
π¨ Build from Source
dotnet build
dotnet run --project src/AtcSoft.CameraWall.Wpf.App
βοΈ Run Server Edition with Aspire
dotnet run --project src/AtcSoft.VideoSurveillance.Aspire
This starts the Aspire dashboard and the REST API server. The dashboard provides monitoring, logs, and traces for all orchestrated services.
π Run Server Edition Standalone
dotnet run --project src/AtcSoft.VideoSurveillance.Api
π User Data
Application data is stored in:
%ProgramData%/AtcSoft/CameraWall/
βββ cameras.json # π· Camera configurations and layouts
βββ settings.json # βοΈ Application settings
βββ logs/ # π Debug log files (when enabled)
βββ snapshots/ # πΌοΈ Camera snapshots and timelapse frames
βββ recordings/ # π₯ Camera recordings with thumbnails
π Usage
- β Add Camera - Click "Add Camera" in the Cameras tab to open the configuration dialog
- π Network Scanner - Use the built-in scanner in the Add Camera dialog to discover cameras
- π Layouts - Use the Layouts tab to create, delete, or set startup layouts
- π±οΈ Context Menu - Right-click any camera tile for actions (Edit, Delete, Full Screen, Swap, Snapshot, Recording, Reconnect)
- β Drag-and-Drop - Drag camera tiles to reorder them in the grid
- π² Full Screen - Double-click a camera tile or use context menu for full screen view
- βοΈ Settings - Click the Settings button in the View tab to configure all application settings
- π₯ Recordings - Use the View tab to browse and playback recorded videos
- π Check for Updates - Use Help tab to check for new versions on GitHub
π License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-windows10.0.19041 is compatible. |
-
net10.0-windows10.0.19041
- Atc (>= 3.0.67)
- Atc.Network (>= 1.0.236)
- Atc.Wpf (>= 4.0.215)
- Atc.Wpf.Components (>= 4.0.215)
- Atc.Wpf.Controls (>= 4.0.215)
- Atc.Wpf.FontIcons (>= 4.0.215)
- Atc.Wpf.Forms (>= 4.0.215)
- Atc.Wpf.Hardware (>= 4.0.215)
- Atc.Wpf.Network (>= 4.0.215)
- Atc.Wpf.Theming (>= 4.0.215)
- Atc.XamlToolkit (>= 3.1.1)
- Atc.XamlToolkit.Wpf (>= 3.1.1)
- AtcSoft.VideoPlayer.Wpf (>= 1.2.2)
- AtcSoft.VideoSurveillance.Core (>= 1.2.2)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.