Clone this wiki locally
Firstly what is CCTV? What is Open Source?
CCTV stands for Closed-Circuit Television. It’s also a fancy way of saying DVR, Digital Video Recorder. It’s a system in which multiple cameras can be watched or recorded for either personal or business circumstances.
Open Source means it is open for editing to your liking… and the way its being made. It will not be difficult. There are no arbitrary libraries, like mootools, to get in your way.
If you really wanted you could rebuild the client side from scratch, just include socket.io, set the transport to websocket and connect to your Shinobi server.
A Quick Look at Shinobi on YouTube
What is the aim of Shinobi
Shinobi can be used as a Baby Monitor, Construction Site Montage Viewer, Store Camera DVR, and much more. I suppose the simplest way of saying it is As Magento is to eCommerce, Shinobi is to CCTV.
Help make Shinobi the best Open Source CCTV platform.
- Records IP Cameras and Local Cameras
- Streams by WebSocket
- Save to WebM and MP4
- Other formats will be added after codec choices are less confusing.
- Get videos
- Get monitors
- Change monitor modes : Disabled, Watch, Record
Why make this? Other solutions already exist.
ZoneMinder was the first choice but it proved unstable. A few reasons are mentioned below. Solutions such as ispyconnect are not relevant as they have a cost for using their platform.
MJPEG streams are beyond unusable in modern applications.
- Essentially with MJPEG you are opening a new stream everytime 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` or `popup`. Neither of which should be considered acceptable.
- Shinobi addresses this with `WebSocket` streams. As frames are captured by FFMPEG they are base64 encoded and sent to the client.
JPEG Storage is just a terrible idea.
- Saving each frame as a separate file in JPEG format can have a seriously detrmental 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 languages that are not needed.
Using outdated or troublesome libraries.
- Mootools, need I say more? and the API is done with an added library called CakePHP… just.. why?
- Continuously hammering the database is not a good idea. It should already have had websockets added and interval refreshes removed completely before 2014.
+70 devs and gaining +$900/month in donations.. they should have gotten somewhere. This is why Shinobi had to be born.
Follow me on Twitter
Find me on Discord! :)
If you like Shinobi please check out some ways you can help support Shinobi.
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.