Видеонаблюдение от идеи до… идеи. Факты

Сама идея: «Видеонаблюдение от идеи до… идеи«Тут будут описаны факты работы системы. Картинки, логи, и еще что-то.Самое сложное была не оптимизация алгоритмов, не придумывание хорошей системы, а борьба с load average. Представьте, у вас есть 30 потоков камер, которые пишут на диск, диски десктопные в рейде на FreeNas через NFS. Жуть? Не, не жуть, даже если бы без NFS, то всё равно просадка системы колоссальная. Решение — рамдиски.

Так как система лежала мертвым грузом уже как месяц, а я не спеша изучал Java (тут), то не совсем в курсе сколько камер живых и что происходит на сервере. Будем разбираться по ходу статьи. Не отпускает меня пока тема видеонаблюдения.

Вот она заветная машинка:

image

По картинке видно что она пережила множество тестов и нагрузок (от графики Windows 2003 до сервера minecraft). Load average показан в рабочем состоянии, т.е. сейчас работают камеры и машина пишет видео.

Вот «рабочая виртуальная лошадка» системы. Идея была в том, чтобы их множить и запускать в разных частях «мира». И при желании воплощать в железе. Распаковать qcow на диск, вроде бы, задача тривиальна.

image

Лезем внутрь машины.top

top — 10:41:49 up 25 min, 2 users, load average: 0.34, 0.45, 0.40 Tasks: 168 total, 1 running, 167 sleeping, 0 stopped, 0 zombie %Cpu (s): 4.0 us, 2.3 sy, 0.0 ni, 90.5 id, 0.1 wa, 1.2 hi, 1.2 si, 0.7 st KiB Mem: 6112740 total, 2076652 used, 4036088 free, 19736 buffers KiB Swap: 2047996 total, 0 used, 2047996 free, 1586536 cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9727 vlc 20 0 690412 29852 1776 S 4.3 0.5 0:44.78 motion 9713 vlc 20 0 2067540 88944 11928 S 3.7 1.5 0:33.55 vlc 9911 vlc 20 0 1407164 42080 11968 S 2.0 0.7 0:22.40 vlc 10133 vlc 20 0 1481508 42672 7732 S 1.3 0.7 0:17.86 vlc 23982 vlc 20 0 397988 7948 1908 S 0.7 0.1 0:00.02 php-fpm 15 root 20 0 0 0 0 S 0.3 0.0 0:00.73 ksoftirqd/2 918 vlc 20 0 55700 2384 892 S 0.3 0.0 0:03.47 nginx 9935 vlc 20 0 604916 16616 1528 S 0.3 0.3 0:04.62 motion … free total used free shared buffers cached Mem: 5.8G 2.1G 3.8G 647M 19M 1.6G -/+ buffers/cache: 461M 5.4G Swap: 2.0G 0B 2.0G df

Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora_dvr-root 7.4G 6.9G 28M 100% / devtmpfs 3.0G 0 3.0G 0% /dev tmpfs 3.0G 0 3.0G 0% /dev/shm tmpfs 3.0G 17M 2.9G 1% /run tmpfs 3.0G 0 3.0G 0% /sys/fs/cgroup tmpfs 3.0G 48K 3.0G 1% /tmp tmpfs 4.0G 602M 3.4G 15% /home/vlc/dvr/tmpfs /dev/sda1 477M 90M 358M 20% /boot *.*.*.211:/mnt/raid1/mx/video 11T 2.2T 8.2T 21% /home/vlc/dvr/nfs Самая работая лошадь в текущей реализации это VLC (приступал к разработке ffserve, но так и не доделал)

vlc 9713 1 2 10:22? 00:00:39 /usr/bin/vlc -I dummy -vvv --rtsp-tcp -d -I http --http-host=0.0.0.0 --http-port 8101 -I telnet --telnet-port 44301 --telnet-password 12345 --repeat --loop --live-caching 500 --network-caching 500 --sout-mux-caching 300 --sout-ts-dts-delay 400 --pidfile /home/vlc/dvr/local/proc/1/vlc.pid --extraintf=http: logger --file-logging --log-verbose 0 --logfile /home/vlc/dvr/local/log/1/vlc.logCaching нельзя ставить меньше 500 (мс), так как в VLC есть некий буфер, который не успевает заполняться видеоданными и они уходят на отдачу и рушат видеопоток (звук будет, видео нет).Кэши подобраны опытным путем.--telnet — позволяет управлять VLC через telnet.telnet localhost 44301> show

команда show instances CAM_9_l_flv type: broadcast enabled: yes loop: yes inputs 1: http://localhost:55309 output: #transcode{vcodec=FLV1, vb=4096, fps=25, scale=1, acodec=mp3, samplerate=44100, ab=128}: http{dst=*:11009/stream.flv} options instances CAM_11_live type: broadcast enabled: yes loop: yes inputs 1: rtsp://10.112.249.48:10003/live/ch01_0 output: #transcode{acodec=none}: std{access=http{mime=video/mp4}, mux=ts{use-key-frames}, dst=*:9011/path.mp4} options instances instance name: default state: playing position: 0.000000 time: 1555935707 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_11_lhttp type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9011/path.mp4 output: #std{access=livehttp{seglen=5, delsegs=true, numsegs=15, splitanywhere=true, index=/home/vlc/dvr/tmpfs/lhttp/1/stream-11.m3u8, index-url=http://10.154.28.202/lhttp/1/stream-11-########.ts}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/lhttp/1/stream-11-########.ts} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_11_l_flv type: broadcast enabled: yes loop: yes inputs 1: http://localhost:55311 output: #transcode{vcodec=FLV1, vb=4096, fps=25, scale=1, acodec=mp3, samplerate=44100, ab=128}: http{dst=*:11011/stream.flv} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_12_live type: broadcast enabled: yes loop: yes inputs 1: rtsp://10.112.249.48:10004/live/ch01_0 output: #transcode{acodec=none}: std{access=http{mime=video/mp4}, mux=ts{use-key-frames}, dst=*:9012/path.mp4} options instances instance name: default state: playing position: 0.000000 time: 1560325097 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_12_lhttp type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9012/path.mp4 output: #std{access=livehttp{seglen=5, delsegs=true, numsegs=15, splitanywhere=true, index=/home/vlc/dvr/tmpfs/lhttp/1/stream-12.m3u8, index-url=http://10.154.28.202/lhttp/1/stream-12-########.ts}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/lhttp/1/stream-12-########.ts} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_12_l_flv type: broadcast enabled: yes loop: yes inputs 1: http://localhost:55312 output: #transcode{vcodec=FLV1, vb=4096, fps=25, scale=1, acodec=mp3, samplerate=44100, ab=128}: http{dst=*:11012/stream.flv} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_14_live type: broadcast enabled: yes loop: yes inputs 1: http://95.31.22.173:3128/cam_1.cgi output: #transcode{acodec=none}: std{access=http{mime=video/mp4}, mux=ts{use-key-frames}, dst=*:9014/path.mp4} options instances CAM_14_lhttp type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9014/path.mp4 output: #std{access=livehttp{seglen=5, delsegs=true, numsegs=15, splitanywhere=true, index=/home/vlc/dvr/tmpfs/lhttp/1/stream-14.m3u8, index-url=http://10.154.28.202/lhttp/1/stream-14-########.ts}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/lhttp/1/stream-14-########.ts} options instances CAM_14_l_flv type: broadcast enabled: yes loop: yes inputs 1: http://localhost:55314 output: #transcode{vcodec=FLV1, vb=4096, fps=25, scale=1, acodec=mp3, samplerate=44100, ab=128}: http{dst=*:11014/stream.flv} options instances CAM_15_live type: broadcast enabled: yes loop: yes inputs 1: rtsp://10.112.249.48:10001/live/ch01_0 output: #transcode{acodec=none}: std{access=http{mime=video/mp4}, mux=ts{use-key-frames}, dst=*:9015/path.mp4} options instances CAM_15_lhttp type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9015/path.mp4 output: #std{access=livehttp{seglen=5, delsegs=true, numsegs=15, splitanywhere=true, index=/home/vlc/dvr/tmpfs/lhttp/1/stream-15.m3u8, index-url=http://10.154.28.202/lhttp/1/stream-15-########.ts}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/lhttp/1/stream-15-########.ts} options instances CAM_15_l_flv type: broadcast enabled: yes loop: yes inputs 1: http://localhost:55315 output: #transcode{vcodec=FLV1, vb=4096, fps=25, scale=1, acodec=mp3, samplerate=44100, ab=128}: http{dst=*:11015/stream.flv} options instances CAM_11_rec type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9011/path.mp4 output: #std{access=file{append}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/rec/1/20140822/11_104211.avi} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_12_rec type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9012/path.mp4 output: #std{access=file{append}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/rec/1/20140822/12_104412.avi} options instances instance name: default state: playing position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 0 playlistindex: 1 CAM_11_mtn type: broadcast enabled: yes loop: yes inputs 1: http://localhost:9011/path.mp4 output: #std{access=file{append}, mux=ts{use-key-frames}, dst=/home/vlc/dvr/tmpfs/mtn/1/20140822/11_104831.avi} options instances instance name: default state: stopped position: 0.000000 time: 0 length: 0 rate: 1.000000 title: 0 chapter: 0 can-seek: 1 playlistindex: 1 schedule > CAM_12_lhttp это наши камеры12 — id из sqlCAM — сущностьlhttp — потокЛогика работы простая. Раз в 10 минут удаляем поток rec, создаем новый поток rec с новым именем файла. Видеопоток разрезан.Новые потоки добавляются в конец списка.Мы тут видим CAM_11_mtn стоит последним — он пишет в данный момент, так как motion сказал писать.в директории ~/vlc есть local, nfs, tmpfs.fstab объясняет кто это и что это

tmpfs /home/vlc/dvr/tmpfs tmpfs size=4072m 0 0 *.*.*.211:/mnt/*/*/video /home/vlc/dvr/nfs nfs users 0 0 local — Обычная папка. Она содержит промежуточные конфиги, логи, и файлы-флаги proc (см. выше команду запуска VLC)[vlc@dvr tmpfs]$ lsimg lhttp lock mtn rec tmpВ каждом каталоге есть подкаталоги где имя это id пользователя из sqlв каждом пользователе лежит его информацияimg — склад картинокlastsnap.jpg snapshot-2014_08_22–10_32_00.jpg snapshot-2014_08_22–10_39_00.jpg snapshot-2014_08_22–10_46_00.jpg snapshot-2014_08_22–10_53_00.jpg snapshot-2014_08_22–10_26_00.jpg …

lhttp — VLCшный hlsstream-11–00000414.ts stream-11–00000419.ts stream-11–00000424.ts …lock — файлы флаги для синхронизации всего этого зоопаркаmotionDetected_11.lock time_16_timelapse.lock time_23_timelapse.lock time_CAM_25_rec.lock update.lockmotionDetected_11 — говорит о том, что на 11 камере есть движение.update.lock — говорит что идет update системыИ по этим файлам идет отсчет времени. Таймлапса, записи и еще всяких задержек.

mnt, rec — текущие записи. Напомню что это рам диск и 10 минут мы пишем в память. Если не пишем — папки пустые. Как только проходит 10 минут файлик мигрируется на NFS. Ведь проще куском бросить на NFS, нежели лить потоки с камер.в tmp лежат вспомогательные файлы, либо доп инфа для php, так как мы не демоном работаем, а запускаемся 1 раз в update про крну.

Из картинок мы делаем тайплапсы

257K 11_20140714_132700_timelapse.mp4 560K 11_20140714_142600_timelapse.mp4 Пока пишу статью у нас есть движения (ls с NFS)

[vlc@dvr 20140822]$ ls -hs | grep -v asdfasdf total 129M 2.6M 11_101919.mp4 1.4M 11_101943.mp4 3.6M 11_103431.mp4 2.8M 11_103734.mp4 1.5M 11_104036.mp4 3.9M 11_104142.mp4 1000K 11_104219.mp4 1.8M 11_104354.mp4 3.2M 11_104831.mp4 2.8M 11_104908.mp4 3.3M 11_104942.mp4 2.1M 11_105034.mp4 2.1M 11_105156.mp4 1.2M 11_105215.mp4 944K 11_105228.mp4 2.6M 11_105321.mp4 161K 11_105410.mp4 1.6M 11_105505.mp4 1.4M 11_105855.mp4 4.5M 11_105943.mp4 7.3M 11_110022.mp4 3.8M 11_110256.mp4 1.4M 11_110342.mp4 1.8M 11_110448.mp4 1.3M 12_101917.mp4 2.9M 12_102416.mp4 1.7M 12_102753.mp4 5.5M 12_102831.mp4 1.4M 12_103319.mp4 1.5M 12_103529.mp4 1.8M 12_103551.mp4 2.5M 12_103622.mp4 1.4M 12_103955.mp4 1.8M 12_105112.mp4 2.5M 12_105816.mp4 48M 12_105839.mp4

А это то что записали за сегодня17M 11_101734.mp4 71M 11_102230.mp4 74M 11_103212.mp4 73M 11_104211.mp4 74M 11_105211.mp4 18M 12_101735.mp4 88M 12_102231.mp4 75M 12_103411.mp4 75M 12_104412.mp4 81M 12_105413.mp4

Кусок лога системы, отражает работу системы. [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Lock-time_CAM_26_rec.lock __construct [ 2014–08–22 11:08:32 ] UID:0 NOTICE TimeLock 249 [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Lock-time_CAM_26_mtn.lock __construct [ 2014–08–22 11:08:32 ] UID:0 NOTICE TimeLock 370 [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Lock-motionDetected_26.lock __construct [ 2014–08–22 11:08:32 ] UID:7 NOTICE system2\Daemon (vlc) __construct [ 2014–08–22 11:08:32 ] UID:7 NOTICE system2\Daemon (motion) __construct [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Lock-motionDetected_11.lock __construct [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Lock-motionDetected_11.lock delete [ 2014–08–22 11:08:32 ] UID:11 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Vlm control CAM_11_mtn stop [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\Vlm del CAM_11_mtn [ 2014–08–22 11:08:32 ] UID:11 NOTICE system2\BBRecStream moveToNfs [ 2014–08–22 11:08:32 ] UID:11 NOTICE system2\BBRecStream insert into archive values (0, 11, 'mtn', 1408691293, 1408691311, 1408691312, 0.00010013580322266, 'yes', 0, '/home/vlc/dvr/nfs/mtn/1/20140822/11_110813') [ 2014–08–22 11:08:32 ] UID:0 NOTICE system2\MoveVideoCommand ffmpeg -y -i /home/vlc/dvr/tmpfs/mtn/1/20140822/11_110813.avi -codec copy /home/vlc/dvr/nfs/mtn/1/20140822/11_110813.mp4 [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\HLSVlcStream update [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\HLSVlcStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_17_lhttp stop [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-17 [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_17_rec stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_17_rec [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Lock-time_CAM_17_rec.lock create [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\TimeLock time_CAM_17_rec.lock [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_17_mtn stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_17_mtn [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_17_mtn stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_17_mtn [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Lock-time_CAM_17_mtn.lock create [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\TimeLock time_CAM_17_mtn.lock [ 2014–08–22 11:08:34 ] UID:17 NOTICE system2\UrlFlvVlcStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\Cam update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\Streams update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\MotionStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBLiveStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBLiveStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_live stop [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\HLSVlcStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\HLSVlcStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_lhttp stop [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-18 [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\HLSVlcStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_lhttp stop [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-18 [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_rec stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_18_rec [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_rec stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_18_rec [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Lock-time_CAM_18_rec.lock create [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\TimeLock time_CAM_18_rec.lock [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_mtn stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_18_mtn [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_mtn stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_18_mtn [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Lock-time_CAM_18_mtn.lock create [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\TimeLock time_CAM_18_mtn.lock [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\UrlFlvVlcStream update [ 2014–08–22 11:08:34 ] UID:18 NOTICE system2\UrlFlvVlcStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_18_l_flv stop [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\Cam update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\Streams update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\MotionStream update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\BBLiveStream update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\BBLiveStream start [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_19_live play [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\HLSVlcStream update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Lock-time_CAM_19_rec.lock create [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\TimeLock time_CAM_19_rec.lock [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\BBRecStream update [ 2014–08–22 11:08:34 ] UID:19 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm control CAM_19_mtn stop [ 2014–08–22 11:08:34 ] UID:0 NOTICE system2\Vlm del CAM_19_mtn [ 2014–08–22 11:08:35 ] UID:0 NOTICE system2\Lock-time_CAM_19_mtn.lock create [ 2014–08–22 11:08:35 ] UID:19 NOTICE system2\BBRecStream stop [ 2014–08–22 11:08:35 ] UID:0 NOTICE system2\Vlm control CAM_19_mtn stop [ 2014–08–22 11:08:35 ] UID:0 NOTICE system2\Vlm del CAM_19_mtn [ 2014–08–22 11:08:35 ] UID:19 NOTICE system2\UrlFlvVlcStream update [ 2014–08–22 11:08:35 ] UID:20 NOTICE system2\Cam update [ 2014–08–22 11:08:35 ] UID:20 NOTICE system2\Streams update [ 2014–08–22 11:08:35 ] UID:20 NOTICE system2\MotionStream update [ 2014–08–22 11:08:35 ] UID:20 NOTICE system2\BBLiveStream update [ 2014–08–22 11:08:38 ] UID:20 NOTICE system2\BBLiveStream stop [ 2014–08–22 11:08:38 ] UID:0 NOTICE system2\Vlm control CAM_20_live stop [ 2014–08–22 11:08:38 ] UID:20 NOTICE system2\BBLiveStream start Логов пишет много. Не продакшн все-таки.Текущая нагрузка на сетевой интерфейс (iptraf-ng) in-15000 kbps, out 1500 kbps.Нагрузка на FreeNas:

image

Интерфейс гигабитный, стоит ZRaid2 + твердотелка (ZLog?)Freenas: Intel® Core2 Duo CPU E4500 @ 2.20GHzMemory: 4006MBLoad Average 0.15, 0.16, 0.11

ЗаписиimageЗеленые — постоянная записькрасные — записи по движениюсиние — таймлапсы

Смотрим запись по движению. И правда есть движение:

image

И все эвенты кладутся в sql.

Вот и таймлапс подоспел за последний час.Продолжительность 20 секунд.Можно увидеть что то вроде этого:

image

Если 1 час можно посмотреть за 20 секунд, то 1 сутки можно посмотреть за 8 минут.

Вот так вот из подручных средств можно собрать что то оформленное и рабочее.

Виде не выкладываю так как камеры частные. На скриншотах общественное помещение, в которое может попасть любой желающий.

P.S.[vlc@dvr 7]$ uptime; 11:36:09 up 1:19, 2 users, load average: 0.31, 0.35, 0.33calc@vm001:~$ uptime; 11:37:05 up 20:33, 1 user, load average: 0.01, 0.02, 0.03

© Habrahabr.ru