Видеонаблюдение в FreeBSD с помощью motion, ffserver, ffmpeg

video_frebsdПрограмма motion позволяет вести запись и наблюдение с ip-камер или web-камер.

Первый вариант

Используется ip-камера в связке с motion. Тестировались камеры Ubiquiti Aircam mini и D-Link DCS-930L.

Установка motion:

# cd /usr/ports/multimedia/motion
# make install clean

Правим конфигурационный файл по адресу /usr/local/etc/motion.conf. Он отлично прокомментирован по умолчанию, оставлю только нужные опции:

daemon on
# Нужно будет создать папку motion по этому адресу, по дефолту не создается
process_id_file /var/run/motion/motion.pid
setup_mode off
Если используется веб-камера или аналоговая камера, то указываем путь к устройству:
#videodevice /dev/video0

# V4L2_PIX_FMT_SN9C10X : 0 'S910'
# V4L2_PIX_FMT_SBGGR8 : 1 'BA81'
# V4L2_PIX_FMT_MJPEG : 2 'MJPEG'
# V4L2_PIX_FMT_JPEG : 3 'JPEG'
# V4L2_PIX_FMT_RGB24 : 4 'RGB3'
# V4L2_PIX_FMT_UYVY : 5 'UYVY'
# V4L2_PIX_FMT_YUYV : 6 'YUYV'
# V4L2_PIX_FMT_YUV422P : 7 '422P'
# V4L2_PIX_FMT_YUV420 : 8 'YU12'

# У нас ip-камера, указываем данный режим:
v4l2_palette 2

input 8
norm 0
rotate 0

width 640
height 480

framerate 10

# Путь к котоку mjpeg камеры. В случае Ubiquiti Aircam mini это:
netcam_url http://172.16.0.105/snapshot.cgi
# В случае D-Link DCS-930L, путь будет вида http://172.16.0.105/video.cgi

Если нужно, указываем авторизацию к камере:
#netcam_userpass admin:admin
netcam_http 1.0
auto_brightness off

# Чувствительность камеры к движению:
threshold 2500

threshold_tune off

noise_level 32
noise_tune on
gap 60

# Максимальное время записи для одного видеофайла в секундах:
max_mpeg_time 2000

# Не будем делать снимки в формате jpeg:
output_all off
output_normal off
output_motion off
quality 75

############################################################
# FFMPEG related options
# Film (mpeg) file output, and deinterlacing of the video input
# The options movie_filename and timelapse_filename are also used
# by the ffmpeg feature
############################################################

ffmpeg_cap_new on
ffmpeg_cap_motion off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily

# Качество видео (битрейт)
ffmpeg_bps 150000
ffmpeg_variable_bitrate 0

ffmpeg_video_prec mpeg4

ffmpeg_deinterlace off

snapshot_interval 0

# Наложение текста на видео
text_right %Y-%m-%d\n%T-%q
text_changes off
text_event %Y%m%d%H%M%S

# Увеличим размер текста:
text_double on

# Путь для сохранения видео:
target_dir /usr/local/www/motion/video

# Форматы имен файлов:
snapshot_filename %v_%Y_%m_%d_%H%M%S
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v_%Y.%m.%d_%H.%M.%S
timelapse_filename %Y%m%d-timelapse

############################################################
# HTTP Based Control
############################################################
control_localhost on
control_html_output on

quiet on

Здесь можно задать команды или скрипты, которые будут выполняться при каких-то событиях:
# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by gap.
; on_event_start value

# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option gap.
; on_event_end value

# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
; on_picture_save value

# Command to be executed when a motion frame is detected (default: none)
; on_motion_detected value

# Command to be executed when motion in a predefined area is detected
# Check option 'area_detect'. (default: none)
; on_area_detected value

# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_start value

# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_end value

# Command to be executed when a camera can't be opened or if it is lost
# NOTE: There is situations when motion doesn't detect a lost camera!
# It depends on the driver, some drivers don't detect a lost camera at all
# Some hang the motion thread. Some even hang the PC! (default: none)
; on_camera_lost value

# Если камер несколько, то здесь нужно указать пути к таким же конфигурационным файлам:
; thread /usr/local/etc/thread2.conf
; thread /usr/local/etc/thread3.conf
; thread /usr/local/etc/thread4.conf

Стартуем motion:

# /usr/local/etc/rc.d/motion start

Теперь у нас практически готова система видеонаблюдения. Видеозаписи сохраняются по адресу /usr/local/www/motion/video
Для просмотра видео в реальном времени можно задействовать демон ffserver и ffmpeg, идущие в комплекте с motion или же использовать веб-морду ip-камеры.

Второй вариант

Используется ip-камера в связке с motion+ffmpeg+ffserver. Тестировались камеры Ubiquiti Aircam mini и D-Link DCS-930L.
В этом случаем можно организовать видео-трансляцию со своей камеры, если в ней нет веб-интерфейса. Для этого понадобиться донастроить ffserver и запустить ffmpeg.
Для этого настройки motion оставляем как есть (указаны выше, с помощью motion будет вестись запись). И настроиваем конфиг ffserver по адресу /usr/local/etc/ffserver.conf:

Port 8090
BindAddress 0.0.0.0
MaxClients 100
MaxBandwidth 20000
NoDaemon


File /tmp/feed.ffm
FileMaxSize 3M


Feed feed.ffm
Format flv
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 80000
VideoBitRate 200
VideoQMin 1
VideoQMax 5
VideoSize 352x288
PreRoll 1
Noaudio


Feed feed.ffm
Format swf
VideoCodec flv
VideoFrameRate 30
VideoBufferSize 50000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
VideoSize 352x288
PreRoll 0
Noaudio

Запускаем ffserver:

# /usr/local/etc/rc.d/ffserve start

Запускаем ffmpeg:

# ffmpeg -s 352x288 -r 15 -f mjpeg -i http://172.16.0.105:8081/stream.mjpg http://localhost:8090/feed.ffm

Теперь по адресу http://localhost:8090/test.swf имеем трансляцию в flash, которую можно встроить куда вам нужно.

Источник


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!