Archive

Posts Tagged ‘ffmpeg’

Видеонаблюдение (часть 2)

April 9th, 2009 No comments

sk-2000fИмеется:
SK-2000F (EK-500F) PCI плата видео захвата 4 канала 1-25 кадр/сек
Вход для камеры: 4 канала
Аудиовход: 1 канал
Разрешение: 768*576 (PAL), 640*480 (NTSC)
Контроль сигнализация: возможность подключения 16-каналов сигнализации

Операционная система:

1
2
$ uname -rps
FreeBSD 6.4-STABLE amd64

Прописываем в /boot/loader.conf:

1
bktr_load="YES"

Либо сразу в конфиг ядра:

1
2
3
4
device  bktr
device  iicbus
device  iicbb
device  smbus

Устанавливаем плату. Перезагружаем компьютер. После загрузки видим:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat /var/run/dmesg.boot |grep bktr
bktr0:  mem 0x90001000-0x90001fff irq 21 at device 0.0 on pci4
bktr0: [GIANT-LOCKED]
bktr0: Warning - card vendor 0x0000 (model 0x0000) unknown.
bktr0: Detected a DPL34-1@-@0 at 0x84
bktr0: Intel Smart Video III/VideoLogic Captivator PCI,  tuner, dpl3518a dolby.
$ pciconf -lv
bktr0@pci4:0:0: class=0x040000 card=0x00000000 chip=0x036e109e rev=0x11 hdr=0x00
    vendor     = 'Conexant (Was: Brooktree Corp)'
    device     = 'Bt878/Fusion 878A Mediastream Controller'
    class      = multimedia
    subclass   = video
none1@pci4:0:1: class=0x048000 card=0x00000000 chip=0x0878109e rev=0x11 hdr=0x00
    vendor     = 'Conexant (Was: Brooktree Corp)'
    device     = '7610144D&REV_02\4&1F7DBC9F&0&09F0 TV Video Capture'
    class      = multimedia

 

ZoneMinder

 

Устанавливаем.

1
2
3
4
5
$ wget http://matrix.gatewaynet.com/panix/zoneminder.tar.gz
$ tar zxvf zoneminder.tar.gz
$ mv zoneminder /usr/ports/multimedia/
$ cd /usr/ports/multimedia/zoneminder
$ make install clean

Если во время сборки возникла ошибка:

1
2
3
zm_mpeg.cpp: In destructor 'VideoStream::~VideoStream()':
zm_mpeg.cpp:281: error: cannot convert 'ByteIOContext**' to 'ByteIOContext*' for argument '1' to 'int
url_fclose(ByteIOContext*)'

то удаляем патч и собираем заново:

1
2
3
$ cd /usr/ports/multimedia/zoneminder
$ rm files/patch-zm_mpeg.cpp
$ make reinstall clean

 

Если во время работы программы возникает ошибка:

1
zmwatch[2320]: ERR [Shared memory size conflict in shared_data, expected 312, got 320]

Удаляем патч и собираем заново:

1
2
3
$ cd /usr/ports/multimedia/zoneminder
$ rm files/patch-SharedMem.pm
$ make reinstall clean

 

Если во время работы программы возникает ошибка:

1
 WAR [Buffer overrun at index 54, slow down capture, speed up analysis or increase ring buffer size]

То в настройках камеры надо уменьшить Maximum FPS и Alarm Maximum FPS или увеличить буферы.

 

Для корректной работы ZoneMinder прописываем в /etc/sysctl.conf:

1
2
3
kern.ipc.shm_use_phys=1
kern.ipc.shmmax=536870912
kern.ipc.shmall=524288

 

Пояснение по режимам: None (и так понятно), Monitor (только просмотр), Modetect (запись только движения что я использую), Record (постоянная запись), Mocord (тоже что и Record, но дополнительно выделяются те области где было замечено движение). (c) densan

 

FFMPEG

 

Для захвата видео с помощью ffmpeg поэксперементируйте со следующими командами:

1
2
3
$ BKTR_DEV=1 ffmpeg -y -tvstd pal -r 12 -s 768x576 -deinterlace -isync -f bktr -i /dev/bktr0 -s 768x576 -vcodec rawvideo raw.avi
$ ffmpeg -y -tvstd pal -r 12 -s 640x480 -deinterlace -isync -f bktr -i /dev/bktr0 -s 640x480 -vcodec rawvideo raw.av
$ ffmpeg -y -tvstd pal -r 12 -s 640x480 -deinterlace -isync -f bktr -i /dev/bktr0 -s 640x480 -vcodec mpeg4 -vb 800k raw.avi

 

Motion

 

Устанавливаем:

1
2
3
4
5
6
7
8
$ cd /usr/ports/multimedia/motion/
$ make showconfig
===> The following configuration options are available for motion-3.2.11_1:
     PWCBSD=off "PWCBSD based Webcams (disables BKTR)"
     BKTR=on "Support for TV Capture cards"
     LINUXTHREADS=off "Use LinuxThreads"
===> Use 'make config' to modify these settings
$ make install clean

Прописываем в /etc/rc.conf:

1
motion_enable="YES"

Взяв за основу /usr/local/etc/motion.conf.sample создаем свой конфиг /usr/local/etc/motion.conf (приведены только изменения):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
daemon on
process_id_file /var/run/motion.pid
setup_mode off
videodevice /dev/bktr0
input 1
norm 0
framerate 5
minimum_frame_time 0
output_all off
output_normal on
output_motion off
quality 75
ffmpeg_cap_new off
ffmpeg_cap_motion off
target_dir /mnt/share/case/motion/
jpeg_filename %s-%q
webcam_port 0
control_port 0
sql_log_image off
sql_log_snapshot off
sql_log_mpeg off
sql_log_timelapse off

 

Дублирование

 

Для дублирования изображения на другой сервер были написаны пару скриптов. На первом сервере list.php, лежащий в каталоге куда плодит картинки motion:

1
<?php system('ls -r -U *.jpg | head -n 100'); ?>

На втором сервере, скрипт на shell забирающий недостающий файлы с первого сервера:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/sh
 
file="http://example.com/list.php"
url="http://example.com/"
 
cd `dirname $0`
 
while test true
do
 
    if test -f list.php
    then
        rm list.php
    fi
 
    if test -f files
    then
        rm files
    fi
 
    wget -o /dev/null $file
 
    cat list.php | while read line
    do
        if ! test -e $line
        then
            echo $url$line &gt;&gt; files
        fi
    done
 
    if test -s files
    then
        wget -o /dev/null -c -i files
    fi
 
    if [ -e stop ]
    then
        rm stop
 
        if test -f list.php
        then
            rm list.php
        fi
 
        if test -f files
        then
            rm files
        fi
 
        exit 1
    fi
 
    sleep 1
 
done

 

Ссылки: