Skip to content
Moe edited this page Apr 2, 2017 · 133 revisions

What is the aim of Shinobi

Become a World Class Surveillance Software. The Guardian you Deserve.

A Quick Look at Shinobi YouTube

Key Aspects

  • Records IP Cameras and Local Cameras
  • Streams by WebSocket, HLS (includes audio), and MJPEG
  • Save to WebM and MP4
    • Can save Audio
  • Push Events - When a video is finished it will appear in the dashboard without a refresh
  • Region Motion Detection (Similar to ZoneMinder Zone Detection)
    • Represented by a Motion Guage on each monitor
  • 1 Process for Each Camera to do both, Recording and Streaming
  • Timeline for viewing Motion Events and Videos
  • Sub-Accounts with permissions
    • Monitor Viewing
    • Monitor Editing
    • Video Deleting
    • Separate API keys for sub account
  • Cron Filters can be set based on master account
  • Stream Analyzer built-in (FFprobe GUI)
  • Monitor Groups
  • Can snapshot images from stream directly
  • Lower Bandwidth Mode (JPEG Mode)
    • Snapshot (cgi-bin) must be enabled in Monitor Settings
  • Control Cameras from Interface
  • API
    • Get videos
    • Get monitors
    • Change monitor modes : Disabled, Watch, Record
    • Embedding streams
  • Dashboard Framework made with Google Material Design Lite, jQuery, and Bootstrap

Why make this? Other solutions already exist.

I want to help people. I want to make a turnkey solution with advanced features. In short : I want to make a world class CCTV platform.

I needed something to start with and my brother suggested ZoneMinder... so I took to the internet for more answers.

ZoneMinder was the primary choice but it wasn't as expected. A few reasons are mentioned below. Solutions such as ispyconnect are not relevant as they have a cost for using their platform.

  • MJPEG streams : no good

    • With MJPEG you are opening a new stream every time you create an image with an MJPEG url. Even if you remove this element it will continue to eat resources from the server and client. Only way to deal with it currently is through an iframe, popup, or hard refresh.
    • Shinobi addresses this with Websocket streams. As frames are captured by FFMPEG they are base64 encoded and sent to the client.
    • As of January 2017 : Shinobi can output HLS (m3u8) and MJPEG (in an iframe) also.
  • JPEG Storage : mildly acceptable

    • Saving each frame as a separate file in JPEG format can have a seriously detrimental effect on storage space and the hardware itself. Hardware is more likely to fail under the stress of continuously saving frames to storage.
    • Shinobi saves to WebM and MP4 files. While MP4 takes a fair amount of space.. its level of CPU usage during encoding for H.264 streams is just amazing.
  • Using too many languages

    • You'll find that ZoneMinder uses multiple languages to achieve very small results. This probably just because of the time it was written in. ZoneMinder uses Perl, PHP, JavaScript, C++, HTML, CSS, MySQL, and probably more.
    • Shinobi uses JavaScript, HTML, CSS, and MySQL. Simple right? It should be.
  • Outdated methods

    • Continuously hammering the database is not a good idea. Websockets can be used to get real-time data about events. Shinobi uses socket.io.
    • For every camera ZoneMinder creates a new process every time a viewer opens a stream. 1 Stream = 1 Process. Shinobi uses 1 process per camera for all viewers.
  • General Issues

    • No Audio recording
    • No ability to re-stream

As much as ZoneMinder is godly among CCTV applications. It only has this praise because no other solutions existed until Shinobi came along. If they did they were a mere sliver in ZoneMinder's shadow. At first I tried to fix the issues ZoneMinder was having by myself as I was using the video branch which was not updated with the rest of ZoneMinder. I needed MP4 recording.

The more I worked on ZoneMinder, the more bitter I became. Issues getting ignored for more than 1 year should have been the hint when I first started.

Neither ZoneMinder devs or I are competing with each other. Frankly it's not a possibility, Our goals are different. They are looking to make an awesome open-source cctv community, make friends. My focus is on the platform, I am looking to make an amazing CCTV platform. I believe becoming friends is a part of that result.

Supported Systems

How to Install and Run

Author

Moe Alam

Follow me on Twitter

Find me on Slack! :)

Help make Shinobi the best Open Source CCTV platform.

If you like Shinobi please check out some ways you can help support Shinobi. Development with a man of 1 is a tough gig with bills to pay. Please consider Donating.

Credits

If you wish to use this software for commercial purposes please consider donating :) If not.. including my name would be nice.

    Shinobi
    Copyright (C) 2016-2025 Moe Alam, moeiscool

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    # Libraries Used
    
    vbox.css (the framework that does the vertical panel layout) - I honestly don't know who made this, i found it in a zip.
    jQuery - http://jquery.com/
    Socket.io - http://socket.io/
    Bootstrap - http://getbootstrap.com/
    Moment.js - http://momentjs.com/
    Livestamp.js - https://mattbradley.github.io/livestampjs/
    Font Awesome - http://fontawesome.io/
    Node.js - https://nodejs.org
    MySQL - https://www.mysql.com/
    NPM: mysql - https://www.npmjs.com/package/mysql
    NPM: crypto - https://www.npmjs.com/package/crypto
    NPM: express - http://expressjs.com/
    NPM: request - https://www.npmjs.com/package/request
    NPM: connection-tester - https://www.npmjs.com/package/connection-tester
    image : shinobi.jpg - the background image on the front page is not mine, there were no credits where i found it. it just looks cool :D
    
    and maybe a few others.
Clone this wiki locally