AtcSoft.VideoSurveillance.Wpf.Core 1.2.2

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AtcSoft.VideoSurveillance.Wpf.Core" Version="1.2.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AtcSoft.VideoSurveillance.Wpf.Core" Version="1.2.2" />
                    
Directory.Packages.props
<PackageReference Include="AtcSoft.VideoSurveillance.Wpf.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AtcSoft.VideoSurveillance.Wpf.Core --version 1.2.2
                    
#r "nuget: AtcSoft.VideoSurveillance.Wpf.Core, 1.2.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AtcSoft.VideoSurveillance.Wpf.Core@1.2.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AtcSoft.VideoSurveillance.Wpf.Core&version=1.2.2
                    
Install as a Cake Addin
#tool nuget:?package=AtcSoft.VideoSurveillance.Wpf.Core&version=1.2.2
                    
Install as a Cake Tool

πŸ“Ή 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.

Release NuGet License: MIT

✨ 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 rotate metadata 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 DeviceUnplugged state instead of thrashing in a reconnect loop. See docs/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

  1. βž• Add Camera - Click "Add Camera" in the Cameras tab to open the configuration dialog
  2. πŸ” Network Scanner - Use the built-in scanner in the Add Camera dialog to discover cameras
  3. πŸ“ Layouts - Use the Layouts tab to create, delete, or set startup layouts
  4. πŸ–±οΈ Context Menu - Right-click any camera tile for actions (Edit, Delete, Full Screen, Swap, Snapshot, Recording, Reconnect)
  5. βœ‹ Drag-and-Drop - Drag camera tiles to reorder them in the grid
  6. πŸ”² Full Screen - Double-click a camera tile or use context menu for full screen view
  7. βš™οΈ Settings - Click the Settings button in the View tab to configure all application settings
  8. πŸŽ₯ Recordings - Use the View tab to browse and playback recorded videos
  9. πŸ”„ Check for Updates - Use Help tab to check for new versions on GitHub

πŸ“„ License

MIT

Product Compatible and additional computed target framework versions.
.NET net10.0-windows10.0.19041 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.3 52 9/22/2026
1.2.2 56 9/22/2026
1.2.1 46 9/22/2026