Project

videoreg

0.0
No commit activity in last 3 years
No release in over 3 years
Video Registration scripts. Allows to register continuously
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.10.0

Runtime

>= 0
>= 0
>= 0
>= 0
>= 0
 Project Readme

Videoreg: script for continuous video recording from the plugged webcams

Prerequisites: you will need to install the required libraries

RabbitMQ and Ruby are required to use this script.

sudo echo "deb http://www.rabbitmq.com/debian/ testing main" >> /etc/apt/sources.list
sudo wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc
sudo apt-get update
sudo apt-get install -y mencoder ffmpeg qc-usb-utils v4l-utils rabbitmq-server ruby1.9.1 rubygems ruby1.9.1-dev
sudo gem install videoreg

Then write the configuration file according to your setup (give it a name "config.rb", for example)

	reg {
	  device      '/dev/webcam0'
	  resolution  '640x480'
	  fps         25
	  duration    60
	  filename    '#{time}-webcam0.avi'
	  storage     '/tmp/webcam0'
	  lockfile    '/tmp/videoreg.webcam0.lock'
	  store_max   5
	}

	reg {
	  device      '/dev/webcam1'
	  resolution  '640x480'
	  fps         25
	  duration    60
	  filename    '#{time}-webcam1.avi'
	  storage     '/tmp/webcam1'
	  lockfile    '/tmp/videoreg.webcam1.lock'
	  store_max   3
	}

	reg {
	  device      '/dev/webcam2'
	  resolution  '640x480'
	  fps         25
	  duration    60
	  filename    '#{time}-webcam2.avi'
	  storage     '/tmp/webcam2'
	  lockfile    '/tmp/videoreg.webcam2.lock'
	  store_max   3
	}

	log_path    '/tmp/videoreg.log'
	pid_path    '/tmp/videoreg.pid'
	mq_queue    'com.ifree.videoreg.daemon'
	mq_host     'localhost'

After the installation you are able to manage the process using 'videoreg' command:

	$ videoreg -h
	Usage: videoreg [options]
	    -c, --config CONFIG              Use the specified config
	    -d, --device DEVICE              Run only the specified device
	    -H, --halt DEVICE                Halt (SIGKILL) recording process
	    -P, --pause DEVICE               Pause (SIGSTOP) recording process
	    -R, --resume DEVICE              Resume (SIGCONT) recording process
	    -r, --recover DEVICE             Recover the recording process
	    -p, --pid PID                    Set the PID file for the capture process
	    -l, --log LOGFILE                Set the logfile for daemon
	    -e, --ensure                     Check the state of the daemon
	    -C, --clear                      Clear the state (remove lock-files)
	    -k, --kill                       Kills the capture processes
	    -v, --version                    Show the version
	    -h, --help                       Show this help message
	    -U, --udev                       Generate udev rules for current config
	    -I, --info                       Show info about plugged devices

To get the current daemon status:

	$  videoreg -c config.rb -e
	Running command 'ensure' for device(s): 'all'...
	DAEMON:		     [RUNNING]
	Uptime:		     4sec
	/dev/webcam0: 	 [RUNNING]
	/dev/webcam1: 	 [RUNNING]
	/dev/webcam2: 	 [NO DEVICE]

To run the daemon:

	$ videoreg -c config.rb
	Daemon has started successfully

To stop the daemon:

	$ videoreg -c config.rb --k
	Stopped PID: 3870 at /tmp/videoreg.pid

To stop recording from the specified device:

	$ videoreg -c config.rb -H /dev/webcam0
	Running command 'halt' for device(s): '/dev/webcam0'...
	I, [2012-07-03T14:00:35.802428 #8115]  INFO -- : Publish message to RabbitMQ 'HALT' with arg '/dev/webcam0' to 'com.ifree.videoreg.daemon'...
	I, [2012-07-03T14:00:36.347704 #8115]  INFO -- : Disconnecting from RabbitMQ...

	$ videoreg -c config.rb -e
	Running command 'ensure' for device(s): 'all'...
	DAEMON:		     [RUNNING]
	Uptime:		     1min 18sec
	/dev/webcam0: 	 [NOT RUNNING]
	/dev/webcam1: 	 [RUNNING]
	/dev/webcam2: 	 [NO DEVICE]

To run recording from the specified device:

	$ videoreg -c config.rb -r /dev/webcam0
	Running command 'recover' for device(s): '/dev/webcam0'...
	I, [2012-07-03T14:02:12.375352 #8193]  INFO -- : Publish message to RabbitMQ 'RECOVER' with arg '/dev/webcam0' to 'com.ifree.videoreg.daemon'...
	I, [2012-07-03T14:02:12.920787 #8193]  INFO -- : Disconnecting from RabbitMQ...

	$ videoreg -c config.rb -e
	Running command 'ensure' for device(s): 'all'...
	DAEMON:		     [RUNNING]
	Uptime:		     2min 34sec
	/dev/webcam0: 	 [RUNNING]
	/dev/webcam1: 	 [RUNNING]
	/dev/webcam2: 	 [NO DEVICE]

To pause the device:

	$ videoreg -c config.rb -P /dev/webcam0
	Running command 'pause' for device(s): '/dev/webcam0'...
	I, [2012-07-03T14:03:28.840693 #8254]  INFO -- : Publish message to RabbitMQ 'PAUSE' with arg '/dev/webcam0' to 'com.ifree.videoreg.daemon'...
	I, [2012-07-03T14:03:29.386111 #8254]  INFO -- : Disconnecting from RabbitMQ...

	$ videoreg -c config.rb -e
	Running command 'ensure' for device(s): 'all'...
	DAEMON:		     [RUNNING]
	Uptime:		     3min 50sec
	/dev/webcam0: 	 [PAUSED]
	/dev/webcam1: 	 [RUNNING]
	/dev/webcam2: 	 [NO DEVICE]

To resume the device:

	$ videoreg -c config.rb -R /dev/webcam0
	Running command 'resume' for device(s): '/dev/webcam0'...
	I, [2012-07-03T14:04:34.870130 #8308]  INFO -- : Publish message to RabbitMQ 'RESUME' with arg '/dev/webcam0' to 'com.ifree.videoreg.daemon'...
	I, [2012-07-03T14:04:35.415852 #8308]  INFO -- : Disconnecting from RabbitMQ...

	$ videoreg -c config.rb -e
	Running command 'ensure' for device(s): 'all'...
	DAEMON:		     [RUNNING]
	Uptime:		     4min 58sec
	/dev/webcam0: 	 [RUNNING]
	/dev/webcam1: 	 [RUNNING]
	/dev/webcam2: 	 [NO DEVICE]

Get the information about the plugged webcams:

	$ videoreg -I
	usb1[1-1] --> /dev/webcam0
	usb2[2-1] --> /dev/webcam1

To generate the udev rules file (create the user-friendly symlinks to the webcam devices):

	$ videoreg -U
	Writing the rules to /etc/udev/rules.d/50-udev-videoreg.rules file:
	            BUS=="usb" ACTION=="add" DEVPATH=="/devices/pci0000:00/0000:00:1a.0/usb1/1-1/*/video4linux/video*" SYMLINK+="webcam0" GROUP="video"
	            BUS=="usb" ACTION=="add" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb2/2-1/*/video4linux/video*" SYMLINK+="webcam1" GROUP="video"
	File has been written successfully! Now restart udev (/etc/init.d/udev restart) and replug the webcams!

Changelog

03.07.2012

Current status

  • Реализация правил udev (добавление симлинков на девайсы по определённым правилам)

29.06.2012

Current status

  • Проверка наличия всех девайсов (камер)
  • По команде прервать запись с определенной камеры и начать заново (это нужно чтобы вытащить кадр из текущего кусочка записи)
  • "Ленивая" инициализация заданной камеры: пауза/запуск процесса записи

28.06.2012

Current status

  • Запуск видеозаписи
    • Параметры для всех камер хранятся в одном конфиге (разрешение, фпс, длительность каждого файла)
    • Запись по кускам (по 10минут в один файл например)
    • Слежение

TODO

  • Состояние системы (свободное место на винте, время работы с момента последней перезагрузки и тп) – тоже в конфиге как-то хранить
  • Слежение за свободным местом на диске (например записи с камер 1 и 2 должны хранится 12 часов, но все вместе не более 15Гб)
  • Алерты об ошибках в Приложение1
  • Запуск Приложения3 – при появлении файлов с определенной камеры надо запускать нашу программку (Приложение2), потом файлик удалять (или не удалять – параметр в конфиге)