Программа 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, которую можно встроить куда вам нужно.