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

в 7:39, , рубрики: videolan, vlc, видеонаблюдение через интернет

Сама идея: habrahabr.ru/post/234139/

Тут будут описаны факты работы системы. Картинки, логи, и еще что то.

Самое сложное было не оптимизация алгоритмов, не придумывание хорошей системы, а борьба с 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.log
Caching нельзя ставить меньше 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 из sql
CAM — сущность
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]$ ls
img 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шный hls
stream-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.lock
motionDetected_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 system2Lock-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 system2Lock-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 system2Lock-motionDetected_26.lock __construct
[ 2014-08-22 11:08:32 ] UID:7 NOTICE system2Daemon(vlc) __construct
[ 2014-08-22 11:08:32 ] UID:7 NOTICE system2Daemon(motion) __construct
[ 2014-08-22 11:08:32 ] UID:0 NOTICE system2Lock-motionDetected_11.lock __construct
[ 2014-08-22 11:08:32 ] UID:0 NOTICE system2Lock-motionDetected_11.lock delete
[ 2014-08-22 11:08:32 ] UID:11 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:32 ] UID:0 NOTICE system2Vlm control CAM_11_mtn stop
[ 2014-08-22 11:08:32 ] UID:0 NOTICE system2Vlm del CAM_11_mtn
[ 2014-08-22 11:08:32 ] UID:11 NOTICE system2BBRecStream moveToNfs
[ 2014-08-22 11:08:32 ] UID:11 NOTICE system2BBRecStream 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 system2MoveVideoCommand 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 system2HLSVlcStream update
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2HLSVlcStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_17_lhttp stop
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-17
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_17_rec stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_17_rec
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Lock-time_CAM_17_rec.lock create
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2TimeLock time_CAM_17_rec.lock
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_17_mtn stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_17_mtn
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_17_mtn stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_17_mtn
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Lock-time_CAM_17_mtn.lock create
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2TimeLock time_CAM_17_mtn.lock
[ 2014-08-22 11:08:34 ] UID:17 NOTICE system2UrlFlvVlcStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2Cam update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2Streams update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2MotionStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBLiveStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBLiveStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_live stop
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2HLSVlcStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2HLSVlcStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_lhttp stop
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-18
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2HLSVlcStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_lhttp stop
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2HLSVlcStream rm -rf /home/vlc/dvr/tmpfs/lhttp/2/stream-18
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_rec stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_18_rec
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_rec stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_18_rec
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Lock-time_CAM_18_rec.lock create
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2TimeLock time_CAM_18_rec.lock
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_mtn stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_18_mtn
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_mtn stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_18_mtn
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Lock-time_CAM_18_mtn.lock create
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2TimeLock time_CAM_18_mtn.lock
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2UrlFlvVlcStream update
[ 2014-08-22 11:08:34 ] UID:18 NOTICE system2UrlFlvVlcStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_18_l_flv stop
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2Cam update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2Streams update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2MotionStream update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2BBLiveStream update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2BBLiveStream start
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_19_live play
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2HLSVlcStream update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Lock-time_CAM_19_rec.lock create
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2TimeLock time_CAM_19_rec.lock
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2BBRecStream update
[ 2014-08-22 11:08:34 ] UID:19 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm control CAM_19_mtn stop
[ 2014-08-22 11:08:34 ] UID:0 NOTICE system2Vlm del CAM_19_mtn
[ 2014-08-22 11:08:35 ] UID:0 NOTICE system2Lock-time_CAM_19_mtn.lock create
[ 2014-08-22 11:08:35 ] UID:19 NOTICE system2BBRecStream stop
[ 2014-08-22 11:08:35 ] UID:0 NOTICE system2Vlm control CAM_19_mtn stop
[ 2014-08-22 11:08:35 ] UID:0 NOTICE system2Vlm del CAM_19_mtn
[ 2014-08-22 11:08:35 ] UID:19 NOTICE system2UrlFlvVlcStream update
[ 2014-08-22 11:08:35 ] UID:20 NOTICE system2Cam update
[ 2014-08-22 11:08:35 ] UID:20 NOTICE system2Streams update
[ 2014-08-22 11:08:35 ] UID:20 NOTICE system2MotionStream update
[ 2014-08-22 11:08:35 ] UID:20 NOTICE system2BBLiveStream update
[ 2014-08-22 11:08:38 ] UID:20 NOTICE system2BBLiveStream stop
[ 2014-08-22 11:08:38 ] UID:0 NOTICE system2Vlm control CAM_20_live stop
[ 2014-08-22 11:08:38 ] UID:20 NOTICE system2BBLiveStream start

Логов пишет много :) Не продакшн все-таки)

Текущая нагрузка на сетевой интерфейс (iptraf-ng) in-15000 kbps, out 1500 kbps.
Нагрузка на FreeNas
image
Интерфейс гигабитный, стоит ZRaid2 + твердотелка (ZLog?)
Freenas:
Intel® Core(TM)2 Duo CPU E4500 @ 2.20GHz
Memory: 4006MB
Load Average 0.15, 0.16, 0.11

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

Смотрим запись по движению. И правда есть движение.
image
И все эвенты кладутся в sql.

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

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

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

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

Автор: Calc

Источник

Поделиться

* - обязательные к заполнению поля