victor-david / camera-eye

.Net Core 3.1 WPF Windows application to view and manipulate multiple IP cameras. Handles RTSP and MJPEG streams. Provides ability to pan and tilt the cameras. Uses plugins to deal with specific camera makes / models.
GNU General Public License v3.0
22 stars 3 forks source link
amcrest camera camera-plugin csharp ffmpeg foscam h264 ipcamera mjpeg netcore31 pan preset-positions rtsp tilt wpf-application

App Icon Camera Eye

Camera Eye is a .Net Core 3.1 WPF Windows application for viewing and manipulating multiple IP cameras. It uses a plugin framework to support various cameras.

Features

For features marked with an asterick to be enabled, both the camera and its associated plugin need to support them. A plugin implements one required interface and zero or more optional interfaces, depending on its target camera and its intended use.

Screenshots

See the screenshot directory

Projects

The solution consists of several projects:

  1. Camera.App - This is the main application and user interface.
  2. Restless.App.Database - This project provides database support. It uses Sqlite to store information about the plugins, the configuration of cameras, and application settings.
  3. Restless.Camera.Contracts - This projects provides interfaces that a camera plugin must implement (some interfaces are optional, depending on the functionality the plugin provides), and classes that are used by the plugins to perform their operations.
  4. Restless.Plugin.Framework - This project provides abstract classes that implement parts of the required interfaces that a camera plugin uses. It's not necessary that a plugin derive from these classes, but it can be helpful as they provide some common functionality such as an Http client and Rtsp handling.
  5. Restless.Plugin.Foscam - A plugin that handles older Foscam SD cameras. It implements ICameraMotion to provide the ability to pan and tilt the camera; ICameraPreset to set and go to preset camera positions; and other interfaces to provide access to other camera settings.
  6. Restless.Plugin.Axis - A plugin that handles Axis cameras. It (currently) provides only the video stream, no ability to move the camera.
  7. Restless.Plugin.Amcrest - A plugin that handles newer Amcrest cameras. It implements ICameraMotion to provide the ability to pan and tilt the camera; ICameraPreset to provide the ability to set, clear, and go to preset camera positions; and other interfaces to provide access to other camera settings.

How to Build

  1. Download / clone the repository
  2. Make sure the environment variable NUGET_PACKAGES is established and pointing to the global directory where packages are stored. See this Microsoft article for more information. The post build process uses this environment var to copy files to the output directory.
  3. Applications uses FFMPEG dlls. You need to download them (they're not included here because I'm not sure about licensing / distribution) and place them into the Ffmpeg directory where they will then get copied into the build. More info in the readme file of the Ffmpeg directory of this repository.
  4. Load the project in Visual Studio 2019 and build.