Giter Club home page Giter Club logo

victor-david / camera-eye Goto Github PK

View Code? Open in Web Editor NEW
20.0 3.0 3.0 1.15 MB

.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.

License: GNU General Public License v3.0

C# 99.71% Batchfile 0.29%
ipcamera rtsp wpf-application netcore31 foscam amcrest h264 mjpeg camera-plugin camera

camera-eye's Introduction

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

  • Change the number of slots on the video wall to suit your need.
  • Drag a camera from the camera list and drop it into the slot you want.
  • Supports RTSP and MJPEG.
  • Pan and tilt the camera*.
  • Set, clear, and go to preset positions*.
  • Pan and zoom the video image digitally.
  • Flip and mirror the camera output.
  • Change the video brightness, contrast, hue, and saturation*.
  • For each camera, optionally display a banner over the video at the top or the bottom. A banner shows camera name and/or current time and/or frame count.
  • Everything saved for next run. Window size, position, slots, which cameras are where, etc.

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.

camera-eye's People

Contributors

victor-david avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

camera-eye's Issues

Camera motion translation

When a camera is mounted upside down, the image needs to be flipped. Some cameras, when flipped, automatically adjust an incoming up request to a down request in the firmware. No need for the software to do anything different.

Some cameras, when flipped (such as the older Foscams), don't provide this movement translation in the firmware. Need to provide it in software. But not all Foscams that I've encountered are the same. Maybe it's the firmware version. Some do it; some don't.

Same issue when mirrored. Left / right.

Todo: implement options in camera configuration to provide software translation of movement.

Motion latency on first movement

Depending on the camera setup, there can be noticeable latency (about 1.5 seconds) when first attempting to move the camera, either via a left/right/up/down or by going to a preset.

The problem occurs the first time an HTTP request is made when the HttpClientHandler has its UseProxy property set to true (the default)

var clientHandler = new HttpClientHandler();

If the UseProxy property is set to false, the latency does not occur.

var clientHandler = new HttpClientHandler()
            {
                UseProxy = false
            };

Some cameras (Foscam) make an HTTP request during initialization to obtain values from the camera. Therefore, the latency is "hidden" in startup. Other cameras (Amcrest) do not obtain values from the camera during initialization.

If only Amcrest cameras are mounted on the camera wall, the latency occurs for the first camera to be moved. After that, the underlying .NET doesn't attempt the proxy lookup again and the second camera suffers no latency.

Same if an Amcrest and a Foscam are mounted. The Foscam performs its HTTP request during initialization ("hiding" the latency in startup) and the Amcrest suffers no latency.

Not sure this can be called a "bug" exactly and it may be something particular to my machine. But it is annoying. To fix, I propose to add a camera flag that conditionally sets the UseProxy property according to the flag. This would be an "advanced" config item and involves modifying the camera management window.

Visual indicator while camera is initializing

Sometimes a camera comes on line immediately (no network latency). Other times, the camera takes a while to respond and start feeding images. It would be nice to have some sort of "loading" indicator.

Window title bar improvements

The custom window doesn't quite hold the buttons correctly. Can't tell on default color, but noticeable on other (darker) colors. Also, maybe do something different with the buttons depending on the color

How can view rtsp camera CCTV or camera IP?

Hi Mr. Victor David,

I can not view rtsp camera CCTV or camera IP after I added and configured, drag it to the display position I want.

Can you help me?

I added and configured
Screenshot 2023-06-08 150721

drag it to the display position I want
Screenshot 2023-06-08 150609

Retry video connection on failure

If the video can't be streamed (camera turned off, network outage, etc.) an error is displayed and that's it. You can add the camera to the wall again (which causes the plugin to reinitialize and try again), but it would be nice to have an automatic retry. Likely would want a maximum number of retires, perhaps configurable.

Ad hoc plugin

Idea: A plugin that enables the user to enter the path to the video. It could only support viewing the video, not motion, not flip/mirror, etc.

Visual indicator in camera list

2f8616f provides a visual indicator on the camera wall when a camera in the camera list is selected.

Also nice to have: visual indicator in the camera list that indicates which cameras are currently mounted on the wall.

Status banner

The status banner doesn't stay attached to the video image correctly as size of container and/or the image itself changes.

Implement presets

Cameras that move (all such?) have ability to preset a position. Currently not implemented. Investigate.

Implement motion speed

ICameraMotion specifies properties regarding the speed at which the camera moves.

TODO: Implement the ability to change the speed via the manage camera UI.

In the management panel, should have movement controls also so you can test the speed that is set without the need to return to the main camera window.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.