
Product
Introducing Pull Request Stories to Help Security Teams Track Supply Chain Risks
Socket’s new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.
A network video recorder for multiple IP cameras using VLC.
[[http://mlug-au.org/doku.php/workshops/electric_eye_mpd][MLUG presentation slides on electric_eye]]
** History
I've been using Zoneminder & motion and these programs are either too large for my requirements (zoneminder) or don't work with the cameras I own (motion). What I did notice is all my cameras work through VLC with high resolution and VLC can record.
I started with VLC doing the recording up to 0.1.0 where I changed over to using ffmpeg instead.
** Requirements
** Installation
Under linux install vlc xvfb & ruby
: sudo apt-get install ffmpeg ruby
Add this line to your application's Gemfile:
: gem 'electric_eye'
And then execute:
: $ bundle
Or install it yourself as:
: $ gem install electric_eye ** Configuration
Enter your cameras into the JSON config file like so
: --- : duration: 60 : path: "/media/data/recordings" : threshold: 2 : cameras: : - :name: Reception : :url: rtsp://:@<camera's ip>/live2.sdp : - :name: Kitchen : :url: rtsp://:@<camera's ip>/live2.sdp : - :name: Workstations : :url: rtsp://:@<camera's ip>/live2.sdp
You should be able to view the URL through vlc before using this program.
The recordings directory will end up with these directories
: /media/data/recordings/reception : /media/data/recordings/kitchen
Files will be numbered up to your wrap figure. The wrap figure determines when the recording program should start from zero again. EG: If you select you duration as 3600 seconds and a wrap figure of 168 then you get a rolling recording over a 1 week period which would be divided up into 1hr files.
: reception000.mjpeg : motion-reception000.mjpeg : reception001.mjpeg : motion-reception001.mjpeg
The default is going to be 10 minute blocks, this can be overridden with the duration variable above in minutes.
** Configure ffmpeg location
Add the following to your ~/.bashrc file pointing it to your ffmpeg location : export FFMPEG_BIN="/opt/ffmpeg3/bin/ffmpeg"
To compile ffmpeg 3 into there do the following : ./configure --prefix=/opt/ffmpeg3 : make -j4 : sudo make install
** Rebooting cameras
Some people reboot their cameras everynight. This does not work well with electric eye at the moment. As a work around you have to stop and start electric eye in your crontab.
** Usage
First make sure you add your cameras
: electric_eye -a Reception
Now start the daemon to start the recording process
: electric_eye -s
Start with debug messages
: electric_eye -s --log-level=debug
Stop all recordings
: electric_eye -k
Usage in development mode
: bundle exec bin/electric_eye -h
Debug mode
: bundle exec bin/electric_eye -s --log-level=debug
** Start on boot
To start the service on boot (on a linux machine) add the following
Add the following to /etc/init/electric_eye
: #!/usr/bin/env ruby : # : # Electric Eye : # : # chkconfig: 2345 80 20 : # description: Network Video Recorder : : RBENV_DIR= '/usr/local/rbenv/shims' : APP_NAME = 'electric_eye' : : case ARGV.first : : when 'start' : system "su johnsmith -c "#{RBENV_DIR}/electric_eye -s"" : : when 'stop' : system "su johnsmith -c "#{RBENV_DIR}/electric_eye -k"" : : when 'restart' : system "su johnsmith -c "#{RBENV_DIR}/electric_eye -k"" : sleep 0.5 : system "su johnsmith -c "#{RBENV_DIR}/electric_eye -s"" : : end : : unless %w{start stop restart}.include? ARGV.first : puts "Usage: #{APP_NAME} {start|stop|restart}" : exit : end
Make executable & add to startup
: cd /etc/init.d : chmod +x electric_eye : update-rc.d electric_eye defaults
Replace johnsmith with your user where you have setup your camera profiles. NOTE: I cannot get it working nicely with the root user.
** Cleanup
Optional - This was needed for versions prior to 0.1.0, now it is only a precaution as ffmpeg does clean up after itself.
Cleaning up recordings. Put the following into your /etc/crontab per recording directory.
: 00 19 * * * root /usr/bin/find -type f -mtime + -exec rm {} ;
Example for cleaning up reception after 60days at 7pm everynight.
: 00 19 * * * root /usr/bin/find /media/recordings/reception -type f -mtime +60 -exec rm {} ;
** Contributing
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)** TODO :PROPERTIES: :CREATED: [2015-07-01 Wed 16:37] :END:
Add more testing
Add post recording motion detection (use vlc)
Make sure we cannot add blank cameras
Create threshold as a variable
Swap over to using ffmpeg
Do post motion detection (using fmmpeg)
Add a feature to clean up old recordings using a "period" setting (ffmpeg handles this) EG: 60 day period which could be set in the config file how many days you want to keep Then just call 'electric_eye --remove-recordings' within crontab This would iterate over all my cameras and remove old recordings to keep a rolling set of days.
Adjust motion detection to date format : --.mpeg
Allow motion detection to be turned on/off (default: off)
Threshold should be per camera or have inside & outside thresholds There is a large difference in movement between indoor office cameras and outdoor cameras. With wind and rain comes a lot of motion!
FAQs
Unknown package
We found that electric_eye demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket’s new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.
Research
/Security News
npm author Qix’s account was compromised, with malicious versions of popular packages like chalk-template, color-convert, and strip-ansi published.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.