An Open Source video surveillance management system for people making this world a safer place.

Overview

Kerberos Open Source

Kerberos Open Source Kerberos Open Source Twitter Widget Kerberos Open Source

Build Status

PkgGoDev Coverage Status Coverage Status Kerberos Open Source

License: MIT

Kerberos.io - video surveillance

Docker Hub | Documentation | Website

Kerberos Open source (v3) is a cutting edge video surveillance management system made available as Open Source under the MIT License. This means that all the source code is available for you or your company, and you can use, transform and distribute the source code; as long you keep a reference of the original license. Kerberos Open Source (v3) can be used for commercial usage (which was not the case for v2). Read more about the license here.

Work In Progress

Kerberos Open Source (v3) is not yet released, and is actively developed. You can follow the progress on our project board and review our designs at Figma. Feel free to give any feedback.

Previous releases

This repository contains the next generation of Kerberos.io, Kerberos Open Source (v3), and is the successor of the machinery and web repositories. A switch in technologies and architecture has been made. This version is still under active development and can be followed on the develop branch and project overview.

Read more about this at the FAQ below.

Introduction

Kerberos.io is a cutting edge video surveillance system with a strong focus on user experience, scalability, resilience, extension and integration. Kerberos.io provides different solutions, but from a high level point of view it comes into two flavours: Kerberos Open Source and Kerberos Enterprise. The main differences, very brief, between Open Source and Enterprise are described below. Both Kerberos Open Source and Kerberos Enterprise can be extended and integrated with Kerberos Storage and/or Kerberos Cloud.

Kerberos Open Source

  • Installation in seconds (Kerberos Etcher, Docker, Binaries).
  • Simplified and modern user interface.
  • Multi architecture (ARMv7, ARMv8, amd64, etc).
  • Multi camera support: IP Cameras (MJPEG/H264), USB cameras, Raspberry Pi Cameras.
  • Single camera per instance (e.g. One Docker container per camera).
  • Cloud integration through Webhooks, MQTT, etc.
  • Cloud storage through Kerberos Cloud.
  • MIT License

Kerberos Enterprise

  • Installation on top of Kubernetes (K8S).
  • Camera support for IP camera only (RTSP/H264).
  • Massive horizontal scaling, thanks to Kubernetes.
  • Management of multiple Kerberos Agents through a single pane of glass.
  • Low memory and CPU intensive.
  • Modular and extensible design for building own extensions and integrations (e.g. a video analytics platform).
  • Commercial licensed and closed source.

How it works: A world of Agents πŸ•΅πŸΌβ€β™‚οΈ

Kerberos.io applies the concept of agents. An agent is running next to or on your camera, and is processing a single camera feed. It applies motion based recording and make those recordings available through a user friendly web interface. Kerberos Open Source allows you to connect to other cloud services or custom applications. Kerberos Open Source is perfect for personal usage and/or is a great tool if you only have a couple of surveillance cameras to be processed.

If you are looking for a solution that scales with your video surveillance or video analytics well, Kerberos Enterprise might be a better fit.

Installation

Kerberos Open Source will ship in different formats: Docker, binary, snap, KiOS. Version 3 is still in active development right now, and not yet released.

Run and develop

Kerberos Open Source is divided in two parts a machinery and web. Both parts live in this repository in their relative folders. For development or running the application on your local machine, you have to run both the machinery and the web as described below. When running in production everything is shipped as only one artifact, read more about this at Building for production.

Web

The web is a React project which is the main entry point for an end user to view recordings, a livestream, and modify the configuration of the machinery.

git clone https://github.com/kerberos-io/opensource
cd web
yarn start

This will start a webserver and launches the web app on port 3000.

Machinery

The machinery is a Golang project which delivers two functions: it acts as the Kerberos Agent which is doing all the heavy lifting with camera processing and other kinds of logic, on the other hand it acts as a webserver (Rest API) that allows communication from the web (React) or any other custom application. The API is documented using swagger.

You can simply run the machinery using following commands.

git clone https://github.com/kerberos-io/opensource
cd machinery
go run main.go run mycameraname 8080

This will launch the Kerberos Agent and run a webserver on port 8080. You can change the port by your own preference.

Building for Production

Running Kerberos Open Source in production only require a single binary to run. Nevertheless, we have two parts, the machinery and the web, we merge them during build time. So this is what happens.

Web

To build the Kerberos Open Source web app, you simply have to run the build command of yarn. This will create a build directory inside the web directory, which contains a minified version of the React application. Other than that, we also move this build directory to the machinery directory.

cd web
yarn build

Machinery

Building the machinery is also super easy πŸš€ , by using go build you can create a single binary which ships it all; thank you Golang. After building you will endup with a binary called main, this is what contains everything you need to run Kerberos Open Source.

Remember the build step of the web part, during build time we move the build directory to the machinery directory. Inside the machinery web server we reference the build directory. This makes it possible to just a have single web server that runs it all.

cd machinery
go build

Building for Docker

Inside the root of this opensource repository, you will find a Dockerfile. This file contains the instructions for building and shipping Kerberos Open Source. Important to note is that start from a prebuild base image, kerberos/debian-opencv-ffmpeg:1.0.0. This base image contains already a couple of tools, such as Golang, FFmpeg and OpenCV. We do this for faster compilation times.

By running the docker build command, you will create the Kerberos Open Source Docker image. After building you can simply run the image as a Docker container.

docker build -t kerberos/opensource .
docker run -p 8080:8080 --name mycamera -d kerberos/opensource

FAQ

1. Why a mono repo?

We have noticed in the past (v1 and v2) splitting the repositories (machinery and web), created a lot of confusion within our community. People didn't understand the different versions and so on. This caused a lack of collaboration, and made it impossible for some people to collaborate and contribute.

Having a mono repo, which is well organised, simplifies the entry point for new people who would like to use, understand and/or contribute to Kerberos Open Source.

2. Why a change in technologies?

In previous versions (v1 and v2) we used technologies like C++, PHP and BackboneJS. 7 years ago this was still acceptable, however time has changed and new technologies such as React and Golang became very popular.

Due to previous reason we have decided to rebuild the Kerberos Open Source technology from scratch, taking into account all the feedback we acquired over the years. Having these technologies available, we will enable more people to contribute and use our technology.

3. What is the difference with Kerberos Enterprise?

We started the developments of Kerberos Enterprise a year ago (January, 2020), our focus here was scalability, and fast development and easy deployment. We noticed that with technologies such as Golang and React, we can still provide a highly performant video surveillance system.

Kerberos Open Source will use the same technology stack, and some code pieces, of Kerberos Enterprise which we have already build. We have a very clear now, of how a well developed and documented video surveillance system needs to look like.

4. When are we going to be able to install the first version?

We plan to ship the first version by the end of Q1, afterwards we will add more and more features as usual.

5. Change in License

Kerberos Open Source (v3) is now available under the MIT license.

Contributors

This project exists thanks to all the people who contribute.

Issues
  • What is happening on port 80?

    What is happening on port 80?

    I am running 7 Podman containers, which all stream to Kerberos Cloud.

    When locking down my CCTV VLAN and firewall, I noticed that the kerberos.io containers attempt connections to the following hosts:

    | IP Address | Protocol | Port | |:----------------------|:------------:|--------| | 159.65.215.225 | TCP | 1883 | |172.67.133.190 | TCP | 443 | |104.155.97.237 | TCP | 443 | |34.79.161.171 | TCP | 80 |

    Now TCP Port 443 is not in question - I assume that kerberos.io containers push their streams via 443 to the above two servers. 1883 is MQTT and Port 80 is unencrypted HTTP!

    My questions are as follows:

    1. Why are the containers connecting to 34.79.161.171 over port 80? What is this connection being used for?
    2. What is MQTT port 1883 being used for specifically?

    FYI, I have been unable to find these answers in the documentation, faq, or list of resolved issues.

    opened by Obezyana33 4
  • Dockerfile bug can't cd to

    Dockerfile bug can't cd to

    Step to reproduce:

    • git clone
    • docker build .

    Docker build fail with this error:

    /bin/sh: 1: cd: can't cd to /go/src/github.com/kerberos-io/opensource/backend
    
    opened by andp97 1
  • Prevent Machinery from crashing due not beeing able to connect to camera

    Prevent Machinery from crashing due not beeing able to connect to camera "Feature suggestion"

    I experienced that the machinery is crashing if the camera can not be reached or similar.

    in pseudo programming i suggest the following:

    try { open camera stream with settings: settings.xml } catch (error) { if error == connection failed or not found { put error to log and say sorry create dummy stream with tiny loop video on 8889 } else{

    something else happened, spam the logz

    }

    }

    This is extremely helpfull also while buildimng up the Network. especially in container environments.... ( network routing issues) You can fire up the container and check if You actually see a stream on 8889 without connecting the cam.

    greetings

    Thomas

    opened by lexustec 1
  • Name change

    Name change

    While I am excited to see how this tool compares to things like ZoneMinder, it confuses me why "kerberos" is the name that was chosen for this project. Kerberos is already an established technology. You're just going to make it harder to make a name for yourself and people are going to have problems finding answers to their questions related to this product using search engines.

    opened by tekkitan 1
  • Suggestion about files removal when storage is almost full

    Suggestion about files removal when storage is almost full

    Hi,

    I like very much this project. I think it is a great one!! I plan to use it with my Home Assistant server.

    One thing I noticed that I think can be improved (user experience aspect) -

    I run kerberos.io on docker and suddenly witnessed all files on the capture folder being removed every 1 min or so. It turned out that my 450GB SSD had only ~32GB free space. Once I cleaned the recycle bin (~80GB), the phenomenon disappeared. I guess Kerberos checks free space by percentage - I suggest to do it by actual GB. 32GB are a lot of free space and should not cause such aggressive files deletion. I also suggest to eliminate older files only. Maybe leave always the newest 50 files or so? Instead of delete them all.

    thanks in advanced and cheers!

    opened by quammy 1
  • Docker build bug - package list out of date

    Docker build bug - package list out of date

    Hi!

    When running the Docker build, I happened to get this problem:

    After this operation, 410 kB of additional disk space will be used.
    Ign:1 http://deb.debian.org/debian buster/main amd64 curl amd64 7.64.0-4+deb10u1
    Err:1 http://deb.debian.org/debian buster/main amd64 curl amd64 7.64.0-4+deb10u1
      404  Not Found [IP: 151.101.18.132 80]
    E: Failed to fetch http://security.debian.org/debian-security/pool/updates/main/c/curl/curl_7.64.0-4+deb10u1_amd64.deb  404  Not Found [IP: 151.101.18.132 80]
    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
    The command '/bin/sh -c apt-get install curl && curl -sL https://deb.nodesource.com/setup_14.x | bash - &&     curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&     echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&     apt update && apt install yarn -y' returned a non-zero code: 100
    

    Fix is very easy - add apt-get update to line 19.

    It should look likes this:

    RUN apt-get update && apt-get install -y curl && curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
        curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
        echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
        apt update && apt install yarn -y
    

    Note I set it to apt-get install -y curl, as there is also this issue:

    49 packages can be upgraded. Run 'apt list --upgradable' to see them.
    Reading package lists...
    Building dependency tree...
    Reading state information...
    The following additional packages will be installed:
      libcurl4
    The following NEW packages will be installed:
      curl
    The following packages will be upgraded:
      libcurl4
    1 upgraded, 1 newly installed, 0 to remove and 48 not upgraded.
    Need to get 597 kB of archives.
    After this operation, 412 kB of additional disk space will be used.
    Do you want to continue? [Y/n] Abort.
    The command '/bin/sh -c apt update && apt-get install curl && curl -sL https://deb.nodesource.com/setup_14.x | bash - &&     curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&     echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&     apt update && apt install yarn -y' returned a non-zero code: 1
    
    opened by milankragujevic 0
  • New Kerberos Agent: Plans for USBCamera and Raspberry PI camera

    New Kerberos Agent: Plans for USBCamera and Raspberry PI camera

    The new agent currently only supports a valid H264 stream (we plan to have H265 support). In the past (previous open source agent) we supported native integrations for USBCameras (v4l2) and Raspberry Pi Cameras (mmal), however this was very intensive to make sure the integrations are fully working. On top of that we required a different codebase for each camera.

    To overcome this and make it easier to support cameras we are moving to a H264/H265 support only, this would mean that we will make a RTSP wrapper for USBCameras and Raspberry PI camera. So far this isn't documented properly, but we plan to ship an additional Docker container that will run next to the Kerberos Agent container.

    Current work-a-round looks like this:

    USB Camera

    We rely on the rtsp-simple-server project, this allows us to run a RTSP server to which we can publish a stream and subscribe to from the Kerberos Agent. You can run the RTSP server as following.

    docker run -d --network=host aler9/rtsp-simple-server
    

    Above command will run the server in host mode and run as a deamon in background. Next we can use ffmpeg to inject the /dev/video1 or /dev/videox (you have to lookup the id) into the RTSP container. Notice that you'll need to add -c:v libx264 which will transcode the stream to H264, if your camera isn't outputting H264 but JPEG; this will require some compute.

    ffmpeg -f v4l2 -i /dev/video1 -preset ultrafast -b:v 600k  -c:v libx264 -f rtsp rtsp://localhost:8554/mystream
    

    Launch the Kerberos Agent and make sure to set the RTSP connection to rtsp://localhost:8554/mystream. You should see the stream coming up, and connected to Kerberos Hub. You will notice that all features are properly working just like if you would have connect to a real IP camera.

    Raspberry Pi camera

    The process is similar as above, make sure you first run the rtsp-simple-server container.

    docker run -d --network=host aler9/rtsp-simple-server
    

    Instead of using the ffmpeg command we can now use the libcamera library in a similar way. The benefit of the Raspberry Pi camera is that it comes with an H264 stream already, so no need to do any transcoding, only thing that happens is to send it into the RTSP server.

    libcamera-vid -t 0 --inline -o - | ffmpeg -i pipe: -c copy -f rtsp rtsp://localhost:8554/mystream
    

    Going next (need help)

    The idea is to bundle this in a single container where you can just pass in some arguments with the type of camera you are target and which deviceID (/dev/video0, /dev/video1, etc). This container would then run next to the Kerberos Agent, on which the Kerberos Agent will read from the stream.

    We are start the project here, feel free to collaborate on the Camera to RTSP repo.

    Why does this matter

    Converting any camera to a RTSP stream will make our code base much easier, and at the same time will allow us to work on features that are more important. We will handle any camera as a RTSP camera, by transforming the camera stream to a valid RTSP stream using the side container.

    Once doing that we have a single integration and same capabilities such as H264 or H265 encoded recordings, livestreaming over MQTT and WEBRTC.

    help wanted 
    opened by cedricve 0
  • Live Stream/View Framerate

    Live Stream/View Framerate

    I'm running the latest Kerberos.io Agent via Docker on an Ubuntu 20 Server VM minimal install. That VM has 4 cores and 8GB of RAM dedicated. I was able to connect my S3VC PoE IP Camera via RTSP using the primary RTSP stream. The Steam is set to 3MP resolution with 20fps H265.

    I have the Streaming Framerate set in the Agent to 20fps to match the RTSP stream.

    The clips captured via Motion Detection in the Agent playback at the expected framerate, but the live view on the dashboard and the Stream provided via the Agent run at about 1/2fps, not even 1fps. I have tried dumbing down the RTSP stream to 1280x720 H264 and it still only runs about 1/2fps on the Live Stream. My plan was to plug several of the Live Streams from multiple cameras into a simple HTML Table to be able to view them all live simultaneously, but at this rate the Live Stream is running, this is not going to be viable.

    Is there something I'm missing?

    What logs can I pull to assist in troubleshooting?

    Thanks!

    opened by tokenwizard 0
  • Feature request: Multiple-level asymmetric encryption

    Feature request: Multiple-level asymmetric encryption

    Nice to have such a feature, in the cunning times we live, for the (compressed) raw recording; for example:

    • owner's key (individual, company)
    • security company's key
    • recognised state authority's (police, notary/conveyancer/scrivener, etc) key
    opened by GHNewbiee 3
  • Agent not displaying rpi camera on pi4 b and kios issues

    Agent not displaying rpi camera on pi4 b and kios issues

    Raspberry Pi 4 Model B 4GB KiOS will not run without replacing fixup4.dat and start4.elf with Bullseye files. Once running, KiOS dashboard does not show a stream of the rpi camera (v 2.1) Camera confirmed working on rpi OS. I'm guessing this has to do with the change in the board architecture and camera commands. Do you intend to release a Pi 4 B/rpi camera compatible version?

    opened by tpolitza 0
  • UX Improvement - Fewer clicks to review captured videos

    UX Improvement - Fewer clicks to review captured videos

    When reviewing captured videos, the user can adjust a slider to select an hour of the day. This will immediately show videos captured early in the hour. How does the user view videos captured near the end of the hour? The user must click "Load more" multiple times and wait a bit on each load. If there are many captures, the user may need to press "Load more" 10 times. This is bad UX, in my opinion.

    There are some options to improve this:

    • Show a list of all videos in the hour immediately. Don't load the thumbnails/previews eagerly. That can be loaded lazily as the user single-clicks a video (double click can open the video player).
    • Continuously load all thumbnails/previews for the hour. Don't make the user click "Load more" multiple times.
    • Allow the user to adjust the size of the interval on the slider. For example, if it were reduced to 10 or 15 minutes, the user could narrow down to the time of interest faster rather than clicking "Load more" over and over.

    Also the grouping of videos is arbitrary and confusing. Why not just show a list of all videos for the hour?

    opened by sunbladehub 0
Releases(v0.0.1-alpha)
  • v0.0.1-alpha(Jun 25, 2022)

    First release of the Kerberos Agent (headless), which includes a base template for future work. The frontend (ui) is build with React, and the backend (machinery) is build with Golang. For the time being only the back-end is complete, the front-end only includes a mockup and working login page. Further integration with the back-end will be added in the next weeks. Please note that this version of the agent is already used by Kerberos Factory in the enterprise suite.

    1. A working backend (machinery) is added which only support IP cameras (RTSP) for the moment, a more complete list of features:
    • IP camera (RTSP)
    • Live streaming over MQTT and WEBRTC (TURN/STUN)
    • Conditional motion based recording (Region and time)
    • Continuous recording
    • Cloud upload to Kerberos Hub using hub credentials
    • Fragmented recordings
    1. A basic frontend was added to illustrate the direction of the UI. Currently only a working login page is added, but some other pages (mockups were added)
    • Dashboard page will show basic overview of the agent
    • Media page will show an overview page of the recordings
    • Settings page will allow to configure the agent accordingly

    Assets

    Docker image is compiled for AMD64, ARMv7 and ARM64.

    https://hub.docker.com/layers/agent/kerberos/agent/2c577c4/images/sha256-820a422fc06fa67c854448ec03d9a601d578cf6565a8b03a1983cb6e72348dc4?context=explore

    Source code(tar.gz)
    Source code(zip)
Owner
Kerberos.io
Video surveillance and video analytics for people and enterprises making this world a safer and smarter place.
Kerberos.io
EdgeLog is a lightweight log management system, and Agent is a part of EdgeLog system

EdgeLog is a lightweight log management system, and Agent is a part of EdgeLog system. It is installed on host machine and its main duty is to collect host program log statics.

null 2 Mar 2, 2022
An open-source and enterprise-level monitoring system.

Falcon+ Documentations Usage Open-Falcon API Prerequisite Git >= 1.7.5 Go >= 1.6 Getting Started Docker Please refer to ./docker/README.md. Build from

Open-Falcon 6.9k Jun 25, 2022
Hidra is a tool to monitor all of your services without making a mess.

hidra Don't lose your mind monitoring your services. Hidra lends you its head. ICMP If you want to use ICMP scenario, you should activate on your syst

null 7 Jun 14, 2022
Hard Drive S.M.A.R.T Monitoring, Historical Trends & Real World Failure Thresholds

Hard Drive S.M.A.R.T Monitoring, Historical Trends & Real World Failure Thresholds

Jason Kulatunga 1.5k Jun 29, 2022
A hello world project with NES.css and Netlify Functions

A hello world project powered by NES.css and Netlify Functions. The frontend part is a simple HTML page showing a progress bar. The input is received

Jang Rush 0 Jan 9, 2022
Distributed simple and robust release management and monitoring system.

Agente Distributed simple and robust release management and monitoring system. **This project on going work. Road map Core system First worker agent M

StreetByters Community 31 Mar 3, 2022
Open source framework for processing, monitoring, and alerting on time series data

Kapacitor Open source framework for processing, monitoring, and alerting on time series data Installation Kapacitor has two binaries: kapacitor – a CL

InfluxData 2.1k Jun 23, 2022
Open Source Supreme Monitor Based on GoLang

Open Source Supreme Monitor Based on GoLang A module built for personal use but ended up being worthy to have it open sourced.

SneakyKiwi 19 May 6, 2022
Open Source Software monitoring platform tools.

ByteOpen Open Source Software monitoring platform tools. Usage Clone the repo to your own go src path cd ~/go/src git clone https://code.byted.org/inf

Ye Xia 2 Nov 21, 2021
An open source Pusher server implementation compatible with Pusher client libraries written in GO

Try browsing the code on Sourcegraph! IPÊ An open source Pusher server implementation compatible with Pusher client libraries written in Go. Why I wro

Claudemiro 353 May 31, 2022
Cloudinsight Agent is a system tool that monitors system processes and services, and sends information back to your Cloudinsight account.

Cloudinsight Agent δΈ­ζ–‡η‰ˆ README Cloudinsight Agent is written in Go for collecting metrics from the system it's running on, or from other services, and

cloudinsight-backup 363 May 30, 2022
System resource usage profiler tool which regularly takes snapshots of the memory and CPU load of one or more running processes so as to dynamically build up a profile of their usage of system resources.

Vegeta is a system resource usage tracking tool built to regularly take snapshots of the memory and CPU load of one or more running processes, so as to dynamically build up a profile of their usage of system resources.

Kartik 8 Jan 16, 2022
Changelog management tool, avoid merge conflicts and generate markdown changelogs.

chalog This is chalog, a changelog management tool. With chalog you can manage your project's changelog in a simple markdown format, split across mult

Jamie Thompson 5 Apr 19, 2021
Gowl is a process management and process monitoring tool at once. An infinite worker pool gives you the ability to control the pool and processes and monitor their status.

Gowl is a process management and process monitoring tool at once. An infinite worker pool gives you the ability to control the pool and processes and monitor their status.

Hamed Yousefi 22 Jun 30, 2022
Go-logging-logrus - Learn how to log management in golang with logrus

Learn how to logging in golang with logrus How to run this project git clone htt

Vandy Ahmad 0 Jan 19, 2022
The open telemetry framework

DISCONTINUATION OF PROJECT This project will no longer be maintained by Intel. Intel will not provide or guarantee development of or support for this

Intel SDI 1.8k Jun 15, 2022
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

The open-source platform for monitoring and observability. Grafana allows you to query, visualize, alert on and understand your metrics no matter wher

Grafana Labs 49.7k Jun 27, 2022
A golang implementation of the Open Pixel Control protocol

__ ___ ___ _____ ___ /'_ `\ / __`\ _______ / __`\/\ '__`\ /'___\ /\ \L\ \/\ \L\ \/\______\/\ \L\ \ \ \L\ \/\ \__/ \ \

Kelly 19 Jun 24, 2022
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Prometheus 43.2k Jul 1, 2022