Установка настройка Zoneminder 1.25.0_2, FreeBSD 9.1 AMD64
15.08.2013 Сайт https://anteh.ru
Решение на 99.9(9)% рабочее.
Настройки zoneminder, через web интерфейс, делайте только его остановив. Иначе, предположительно это может привести к искажению записей в базе данных и минимум Modect Mocord режимы будут работать некорректно.
Удалось победить проблему не прекращающейся записи в режиме Modect и Mocord. По детектору движения запись стартует, как положено, но не прекращается при прекращении движения, не создаются новые Event и в режиме Mocord, всё пишется в один бесконечный event. Прекращается, например, если сделать save на какой-либо вкладке. Описание решения ниже по тексту.
Как ускорить Zoneminder? Нужно реплицировать базу данных он её интенсивно использует и вообще размещать её удаленно -это теория.
Под FreeBSD 8.x zoneminder-1.25_2 пакет помечен как broken. Под 9.x ставится. Здесь можно взять дистрибутив zm для 8.x, который можно поставить под 8, не проверял. Перед установкой обновляем всё что можно. Распаковываем и кладем содержимое архива в /usr/ports/multimedia/zoneminder
# make make install
Устанавливалась версия ZoneMinder-1.25.0.tar под FreeBSD 9.1 AMD64.
При установке пакета zoneminder не делать make clean. Нужен будет сценарий настройки базы данных из work директории.
Установка zoneminder:
Если нужно переустановить порт:
# cd /usr/ports/путь до порта # make deinstall && make clean && make # make install clean
|
Устанавливаем пакеты:
p5-Net
p5-libwww
Загвоздка была в том, что при установке zoneminder на FreeBSD 9.1 p4 обновлённой с FreeBSD 8.3 p1 этому пакету понадобились дополнительные perl модули. Установлен perl-5.16.3. С одной стороны и нет проблем, ставим из имеющихся портов соответствующие p5-xxx пакеты. Но проблемы возникли. Даже если пакет был нормально установлен, zoneminder при компиляции сообщал, что модуля нет:
…
checking for perl module Date::Manip... no
Причём пакет # cd /usr/ports/devel/p5-Date-Manip установлен и через # instmodsh видим, что он действительно установлен:
# instmodsh Available commands are: l - List all installed modules m <module> - Select a module q - Quit the program cmd? l Installed modules are: DBD::mysql DBI Date::Manip LWP Net Perl
|
Т.е. модуль установлен, но zoneminder его не видит. Получаем ошибку при компиляции со ссылкой на отсутствие модуля.
Вопрос был разрешён следующим образом. Прежде чем повторять читаем до конца.
Через cpan качаем соответствующий модуль:
# cpan
Terminal does not support AddHistory. cpan shell -- CPAN exploration and modules installation (v1.9800) Enter 'h' for help.
cpan[1]> get Date::Manip
Reading '/root/.cpan/Metadata' Database was generated on Wed, 03 Jul 2013 02:41:02 GMT Running get for module 'Date::Manip' Fetching with Net::FTP: ftp://mirror.checkdomain.de/CPAN/authors/id/S/SB/SBECK/Date-Manip-6.40.tar.gz Checksum for /root/.cpan/sources/authors/id/S/SB/SBECK/Date-Manip-6.40.tar.gz ok Scanning cache /root/.cpan/build for sizes ............................................................................DONE Could not read metadata file. Falling back to other methods to determine prerequisites
Соответственно извлекаем архив ~/.cpan/sources/authors/id/S/SB/SBECK/Date-Manip-6.40.tar.gz в эту же директорию # cd ~/.cpan/sources/authors/id/S/SB/SBECK # gzip -d Date-Manip-6.40.tar.gz # tar xvf Date-Manip-6.40.tar Или можем воспользоваться # mc Далее: # cd ~/.cpan/sources/authors/id/S/SB/SBECK/Date-Manip-6.40 # perl Makefile.PL Warning Test::Inter Writing Makefile for Date::Manip Writing MYMETA.yml and MYMETA.json
Видим дополнительную зависимость. Для Date-Manip-6.40 была выявлена зависимость от Test::Inter
Соответственно бросаем всё и качаем таким же образом Test::Inter. Скачали, распаковали, перешли в папку # cd ~/.cpan/sources/authors/id/S/SB/SBECK/Test-Inter-1.05 # perl Makefile.PL Не обнаружили никаких дополнительных зависимостей # make # make test # make install Установка прошла успешно, теперь возвращаемся в # cd ~/.cpan/sources/authors/id/S/SB/SBECK/Date-Manip-6.40 # perl Makefile.PL Writing Makefile for Date::Manip Writing MYMETA.yml and MYMETA.json
Никаких дополнительных зависимостей нет. # make # make test # make install
|
Установка прошла успешно
При очередном запуске компиляции zoneminder видим, что
checking for perl module Date::Manip... ok
Date::Manip установлен. Если бы перед установкой Date::Manip модуля порта /usr/ports/devel/p5-Date-Manip, был установлен порт /usr/ports/devel/p5-Test-Inter, то при компиляции не было бы ошибок.
Далее при очередной установке zoneminder:
checking for perl module LWP::UserAgent... no
через cpan качаем LWP::UserAgent распаковываем и:
# cd /root/.cpan/sources/authors/id/G/GA/GAAS/libwww-perl-6.05
# perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Encode::Locale 0 not found.
Warning: prerequisite File::Listing 6 not found.
Warning: prerequisite HTML::Entities 0 not found.
Warning: prerequisite HTML::HeadParser 0 not found.
Warning: prerequisite HTTP::Cookies 6 not found.
Warning: prerequisite HTTP::Daemon 6 not found.
Warning: prerequisite HTTP::Date 6 not found.
Warning: prerequisite HTTP::Negotiate 6 not found.
Warning: prerequisite HTTP::Request 6 not found.
Warning: prerequisite HTTP::Request::Common 6 not found.
Warning: prerequisite HTTP::Response 6 not found.
Warning: prerequisite HTTP::Status 6 not found.
Warning: prerequisite LWP::MediaTypes 6 not found.
Warning: prerequisite Net::HTTP 6.04 not found.
Warning: prerequisite URI 1.10 not found.
Warning: prerequisite URI::Escape 0 not found.
Warning: prerequisite WWW::RobotRules 6 not found.
Writing Makefile for LWP
Writing MYMETA.yml and MYMETA.json
Здесь очень много зависимостей, которые в свою очередь зависят ещё от каких-то модулей. В ручную всё это делать совсем не серьёзно.
Пробовал устанавливать через cpan c автоматической установкой всех зависимостей, не помогло, при компиляции всё равно ошибка со ссылкой на отсутствующий perl модуль, который был установлен.
Помогла перекомпиляция всех портов, тем более после перехода с 8.3 на 9.1:
# portupgrade -afrR
3-4 часа более 300 портов AMD 2 ядра 3200MHz.
Проверяем:
# cd ~/.cpan/sources/authors/id/G/GA/GAAS/libwww-perl-6.05
# perl Makefile.PL
Writing Makefile for LWP
Writing MYMETA.yml and MYMETA.json
Неустановленных зависимостей нет. Установку текущего модуля продолжать не будем, всё нужное есть. Попробуем сейчас запустить инсталляцию пакета zoneminder:
# cd /usr/ports/multimedia/zoneminder # make && make install && make clean … == Automatic Execution at Boot ==
Obviously, if this is to be used as a security device, you'll want it to start automatically on a reboot. Again obviously, you need to have both apache and mysql start up as well, unless of course, you're running mysql on a remote machine. If you are, I'm sure you're an expert at this stuff already.
Add following lines into /etc/rc.conf, if not already present. Order is not important.
* apache_enable="YES" * mysql _enable="YES" * zm_enable="YES"
Just for your information, I had to put 'sleep 10' in ZoneMinder startup script because mysql port does not become available immediately after mysql startup script finishes.
== More Quirks ==
Depending on the number of cameras and their resolution settings, you may need a lot more shared memory than provided by a default kernel. If you've never built a custom kernel before, umm, time for you to read the FreeBSD Handbook. It can be found at /usr/share/doc/handbook/index.html or at http://freebsd.org/
For the rest of you, just add a reasonable-looking version of the following lines into your kernel configuration file and go though the buildkernel, installkernel process.
* options SHMMAXPGS=65536 * options SHMMNI=384 * options SHMSEG=256
I think above gives maximum of 256MB of shared memory. SHMMNI statement probably isn't required since ZoneMinder probably creates one big instance per camera instead of many little instances. I'm not sure about the last one. Whatever the case, above works for me with two Axis 206 cameras.
Adding the following line into /etc/sysctl.conf may speed up the shared memory accesses, so even though it's not required, it's probably a good idea.
* kern.ipc.shm_use_phys=1
== Modify php.ini === Change in php.ini short_open_tag to On (short_open_tag = On)
That's all folks! ===> Compressing manual pages for zoneminder-1.25.0_2 ===> Registering installation for zoneminder-1.25.0_2 ===> SECURITY REPORT: This port has installed the following binaries which execute with increased privileges. /usr/local/bin/zmfix
This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/www/zoneminder/cgi-bin/zms /usr/local/bin/zmu /usr/local/bin/zmstreamer /usr/local/bin/zma /usr/local/bin/zmc /usr/local/bin/zmf /usr/local/www/zoneminder/cgi-bin/nph-zms
This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/zoneminder
If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern.
For more information, and contact details about the security status of this software, see the following webpage: http://www.zoneminder.com/ # make config ===> No options to configure # make clean ===> Cleaning for sudo-1.8.7 ===> Cleaning for zoneminder-1.25.0_2
|
Перекомпиляция всех установленных портов помогла, после перехода с 8 на 9. Если бы раньше..., то про perl не пришлось бы вспоминать.
Настройка zoneminder 1.25.0_2 на FreeBSD 9.1 p4
Считаем, что apache22, php55, php55-extensions с поддержкой mysql, mysql(настройка ниже), apache-ant(перед его установкой ставим openjdk7) установлены. И пакет zoneminder только что установлен без make clean.
Опции, использующиеся в установленных пакетах взяты из /var/db/ports: apache22_options
Приведу настройки zm, с которыми всё работало. Использовать лучше Firefox. Но в нём, при просмотре текущего изображения с камеры fps равен установленному в General->Maximum FPS, а не заданному в options->Low B/W лли какой либо другой ...B/W. В этом отношении IE работает согласно установкам. Это нужно для экономии трафика и ресурса сервера.
Логирование создаём самостоятельно. Настройки все дефолтные, кроме вкладки paths.
Если камера поддерживает аудио и видео потоки, то для работы с потоками нужно использовать ffmpeg + ffserver.
Настройки TL-SC3130
С камеры можно получить потоки http mpeg, rtsp видеопотоки + http mjpeg и http поток скриншотов. Причём, чтобы получить http поток, rtsp поток должен быть отключён в настройках камеры и наоборот.
name и password принадлежат администраторской записи. Другие не пробовал.
Maximum FPS -количество кадров в секунду, принимаемых от камеры в штатном режиме.
Alarm Maximum FPS -количество кадров в секунду, принимаемых от камеры при возникновении каккого либо события. Например срабатывания детектора движения. Т.е. при срабатывании детектора движения частота принимаемых кадров будет увеличена, здесь это только 1 fps, что особого смысла не имеет. Но можно настроить например как 5 и 15fps.
Image Buffer Size(frames) -циклический буфер для хранения принятых кадров, он вроде в shared будет располагаться, или он там располагался в предыдущих версиях zm.
Warmup Frames -количество кадров, которое будет пропущено при инициализации потока с камеры. Это важно, если используется не mjpeg, а rtsp поток, в mjpeg каждый кадр сам по себе и по логике Warmup Frames можно установить в 0 или в 1. При использовании rtsp потока передаётся ключевой кадр, а за ним следуют не полные кадры, а только изменения в предыдущих кадрах. Этот параметр(I Frame Interval) выставляется в настройках IP камеры и может быть равен например 50 или 100. Его можно и в 1 установить, но трафик увеличится в десятки раз. Сравнительное описание этого параметра есть в этой статье. Если I Frame Interval =50, то Warmup Frames можно установить в 51.
Pre и Post Event Image Count -количество записываемых кадров до и после события.
Stream Replay Image Buffer -на официальном сайте об этом параметре умалчивается.
Alarm Frame Count -1(минус один) - это количество кадров, содержащих ключевое событие, после которых начнётся запись. Т.е. Если параметр =1, все кадры с событием будут записаны, если =3, то на 2 кадра будет меньше записано. Максимальное значение параметра =16,
больше 3-4 устанавливать не рекомендуется.
Настройки DS-2CD2012-I
Минус камеры -это видимое глазу свечение инфракрасных диодов при включении ночного режима. В темноте камера тут-же себя демаскирует. Свечение весьма заметное. На герметичную она не похожа, с тыльной стороны камеры есть кнопка reset и похоже, что через неё внутрь может попасть влага.
Прошивка Hikvision_Baseline_Firmware_IPC_Raptor_series_En_V5.0.2_130805
Прошивка DS-2CD2012-I_V5.0.0_130412_raptor_2013.05.03.rar
Прошивка DS-2CD2012-I_V4.0.9_130106_raptor_2013.02.20.rar
Ставим только V4.0.9, остальные непригодны, проблемы с обменом. Множественные ошибки при передаче, потеря кадров. В следствии c V5.x прошивками хоть как-то работает только на tcp. И канал потребляет раза в два больше. В общем только V4.0.9, может версии ниже тоже подойдут.
DS-2CD2012-I поддерживает только rtsp H.264 и rtsp MJPEG потоки. Все испытания проводились с V4.0.9 прошивкой. У камеры 2 потока первичный и вторичный, могут работать одновременно. С прошивкой V4.0.9 не получилось завести вторичный поток на ffserver, хотя в VLC вторичный поток отлично работал. Первичный поток только H.264, вторичный H.264 и MJPEG. Для прошивок V5,V4 разрешения первичного H.264 потока: 640x480, 704x576, 1280x720P, 1280x960. Разрешения вторичного H.264 и MJPEG потоков: 320x240, 352x288, 704x576.
Протестированные в VLC URL потоков DS-2CD2012-I:
VLC test V4.0.9 MainStream:
rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream
rtsp://admin:12345@192.168.6.3/MPEG-4/ch1/main/av_stream
rtsp://admin:12345@192.168.6.3/MPEG4/ch1/main/av_stream
rtsp://admin:12345@192.168.6.3:554/mpeg4/ch01/main/av_stream
rtsp://admin:12345@192.168.6.3:554/Streaming/Channels/1
rtsp://admin:12345@192.168.6.3:554/play1.sdp
rtsp://admin:12345@192.168.6.3:554/play2.sdp
rtsp://admin:12345@192.168.6.3:554/video.h264
VLC test V4.0.9 SubStream:
rtsp://admin:12345@192.168.6.3/mpeg4/ch1/sub/av_stream
rtsp://admin:12345@192.168.6.3/h264/ch1/sub/av_stream
rtsp://admin:12345@192.168.6.3:554/Streaming/Channels/2
rtsp://admin:12345@192.168.6.3/mjpeg/ch1/sub/av_stream
Форм url запросов конечно же больше, здесь только те, которые нашёл.
Вход на страницу конфигурации
http://192.168.6.3/dispatch.asp?user=admin&pass=12345&page=preview.asp[&]
|
http://192.168.6.3/Streaming/channels/1/picture?snapShotImageType=JPEG -отдаёт по запросу JPEG основного потока -это работало для V5.0.0 прошивки SnapShot требует ввода пароля admin:12345
Чтобы получить максимальное разрешение будем использовать первичный поток.
Настроим DS-2CD2012-I обязательно читаем эту статью. Иначе, при неправильных настройках, наблюдались проблемы с изображением, артефакты, размытость нижней части при просмотре изображения через VLC и при трансляции с ffserver
На изображении приведены все необходимые настройки для заведения rtsp потока DS-2CD2012-I на zoneminder. Сначала настраиваем IP камеру через её интерфейс. По умолчанию и после reset: IP=192.0.0.64, UserName=admin, Password=12345, HTTP port =80. Необходимые настройки zoneminder приведены на изображении выше. Т.е. на вкладке General нужно выбрать ffmpeg, поля Maximum FPS и Alarm Maximum FPS должны быть пустыми. FPS при приёме rtsp потока задаётся в настройках самой камеры. На вкладке Source в поле Source Path нужно ввести полный адрес rtsp потока выдаваемого камерой, например rtsp://admin:12345@192.168.6.3:554/video.h264?tcp. '?tcp' это для надёжности, речь об этом ещё пойдёт. В соответствующие поля прописываем выбранное разрешение, заданное в настройках камеры. Теперь в основном окне будет доступен просмотр изображения с камеры, по ссылке DS-2CD2012-I. Для работы с zoneminder желательно использовать IE. Firefox в окне просмотра выводит изображение не с заданным в настройках fps, а с полным fps транслируемом потоком, что приводит к черезмерной нагрузке на сервер. В поле Linked Monitors Вы можете заметить наличие только TL-SC3130 -это баг ни на что не влияющий, если перейти на другую вкладку и затем снова вернуться на General, то появится вторая строка с DS-2CD2012-I.
Окончательные настройки первичного и вторичного канала DS-2CD2012-I:
Настройки не совсем корректные, читаем статью для ясности.
Смазывание/подтёк видео изображения для камеры DS-2CD2012-I
Эта же ошибка может проявлять себя как постепенно сползающее вниз изображение. IP камера подключена напрямую к сетевой карте сервера через хвост в 3 метра, питание от внешнего блока питания, PoE не используется. Соответственно ffmpeg1 запускается на этом же сервере.
Лечение:
Соблюдение рекомендаций, приведённых здесь. Или использование tcp для обмена с камерой. RTSP, и все остальные, потоки нужно запрашивать по tcp, некоторые камеры, при неправильных настройках, некорректно выдают данные по udp, zmc периодически отваливается и перезапускается от таких ошибок + возникновение артефактов в виде смазываний и подтеканий. ffmpeg 0.7.15,1 используемый в zm, по умолчанию использует udp при приёме rtsp потока и всего остального. Нужно поменять на tcp. Для этого через web интерфейс zm в source диалоговом окне на вкладке source в поле Source Path в конце строки пути к источнику нужно указать '?tcp'.
rtsp://admin:12345@192.168.6.3:554/video.h264?tcp
|
Подобное знание пришлось постигать в течении более чем 2.5 недель
Путь самурая:
Ссылка 1 Ссылка 2 на видео с подобной ошибкой. В конце записи есть несколько нормальных кадров. 1280x960 12fps I Frame Interval =24. По записи видно, что проблема заключается именно в ключевом кадре. При текущих настройках он передаётся раз в 2 секунды 24/12=2, что можно наблюдать по предложенной записи. При I Frame Interval =24 нормально просматривается только верхние 15процентов изображения, при I Frame Rate Interval =1 видно половину изображения.
1.Если просматривать изображение через web интерфейс IP камеры, то искажений для прошивки V4.0.9 не наблюдается, крайне редко(почти никогда) что-то проскакивало. Для V5.0.2 прошивки торможение кадров проявлялись постоянно.
2.Для DS-2CD2012 прошивка V4.0.9 при просмотре через VLC нужно Bitrate Type выбрать Variable и Video Quality = Lowest, тогда смазывание наблюдается крайне редко.
3.Не вылечилось всё и при установке V5.0.2 прошивки. С прошивкой V5.0.0 не удавалось получить поток с камеры. Вернул 4.0.9 и установил 1280x960 8fps Bitrate 4096 I Frame Rate =50 Variable Lowest. И ничего не заработало, смазывание осталось. Зависимость смазывания от каких либо настроек камеры установить не удалось. Получается, что zoneminder, точнее модуль захвата изображения zmc(rtsp ffmpeg 0.7.15,1) некорректно воспринимает rtsp потоки, от них ему плохо становиться, так, что возможно база данных портится и приходится пересоздавать таблицу Monitors, чтобы восстановить работоспособность Mocord и Modect. Иначе получаем бесконечно длинные Event.
ВЫВОД:
Через web интерфейс камеры проблем с картинкой не наблюдалось. Через VLC, в основном, также всё в порядке, а в zoneminder смазывание изображения. Вывод: IP камера DS-2CD2012 выдадаёт не всегда корректный udp rtsp поток, а ffmpeg 0.7.15,1 не может корректно обработать сутуацию и вылетает(это справедливо для V5 прошивки), в следствии модуль zmc раз в 5-10 секунд постоянно перезагружается. Судя по многочисленным наблюдениям и записям проблема именно с ключевым кадром. Причём некорректный ключевой кадр, или его передачу, формирует DS-2CD2012. Проверено, что ffmpeg 0.7.15,1 сыпется сразу, при приёме такого кадра, а ffmpeg1-1.2.3 ситуацию разрешает корректно, не вылетает, но выводит сообщение об ошибке. Т.е. заводить rtsp поток в zoneminder нужно через ffmpeg1. Встроенный ffmpeg заменить на ffmpeg1 не получилось. Вопрос разрешился для V5 прошивки переходом на обмен по tcp, но в последствии прошивка V5 была заменена на V4.
В подтверждение написанного привожу вывод ffmpeg и ffmpeg1 записей rtsp потока в файл:
Для ffmpeg, который используется zm:
#!/bin/sh
/usr/local/bin/ffmpeg -y -r 8 -i rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream \
-b 2048k /1/output_file.flv
# /bin/sh /123/scr/ffmp ffmpeg version 0.7.15, Copyright (c) 2000-2013 the FFmpeg developers built on Aug 31 2013 18:25:18 with gcc 4.2.1 20070831 patched [FreeBSD] configuration: --prefix=/usr/local --mandir=/usr/local/man --enable-shared --enable-gpl --enable-postproc --enable-avfilter --enable-pthreads --enable-memalign-hack --enable-runtime-cpudetect --cc=cc --extra-cflags='-I/usr/local/include/vorbis -I/usr/local/include' --extra-ldflags='-L/usr/local/lib ' --extra-libs=-pthread --disable-debug --disable-libaacplus --disable-indev=alsa --disable-outdev=alsa --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libcelt --disable-libdirac --disable-libfaac --enable-libfreetype --enable-frei0r --disable-libgsm --disable-libmp3lame --enable-libopencv --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --disable-ffplay --disable-libspeex --enable-libtheora --disable-vaapi --disable-vdpau --disable-libvo-aacenc --disable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid libavutil 50. 43. 0 / 50. 43. 0 libavcodec 52.123. 0 / 52.123. 0 libavformat 52.111. 0 / 52.111. 0 libavdevice 52. 5. 0 / 52. 5. 0 libavfilter 1. 80. 0 / 1. 80. 0 libswscale 0. 14. 1 / 0. 14. 1 libpostproc 51. 2. 0 / 51. 2. 0 [rtsp @ 0x80782d820] Estimating duration from bitrate, this may be inaccurate
Seems stream 0 codec frame rate differs from container frame rate: 16.00 (16/1) -> 8.00 (16/2) Input #0, rtsp, from 'rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream': Metadata: title : Media Presentation Duration: N/A, start: 0.004800, bitrate: N/A Stream #0.0: Video: h264 (Main), yuv420p, 1280x720, 8 fps, 8 tbr, 90k tbn, 16 tbc [buffer @ 0x8078c0b20] w:1280 h:720 pixfmt:yuv420p tb:1/1000000 sar:0/1 sws_param: [flv @ 0x80781d920] removing common factors from framerate Output #0, flv, to '/1/output_file.flv': Metadata: title : Media Presentation encoder : Lavf52.111.0 Stream #0.0: Video: flv, yuv420p, 1280x720, q=2-31, 2048 kb/s, 1k tbn, 8 tbc Stream mapping: Stream #0.0 -> #0.0 Press [q] to stop, [?] for help [h264 @ 0x80781cf20] missing picture in access unit0:17.75 bitrate=1268.5kbits/s [h264 @ 0x80781cf20] no frame! Error while decoding stream #0.0 frame= 146 fps= 10 q=2.0 Lsize= 2881kB time=00:00:18.25 bitrate=1293.2kbits/s video:2879kB audio:0kB global headers:0kB muxing overhead 0.087359% #
|
При периодическом вылете zmc в логах zoneminder через web интерфейс наблюдаем следующие сообщения:
4.Restarting capture daemon for Monitor-1, time since last capture 14 seconds (1377935432-1377935418)
3.'zmc -m 1' exited abnormally, exit status 255
2.Unable to decode frame at frame 82
1.Starting Capture
Это было c V5.0.2 с V4.0.9 ffmpeg не вылетал, по крайней мере в течении часа. Дольше не ждал. При переходе с дня на ночь и обраьно ffmpeg для V4.0.9 прошивки выдавал такие сообщения:
[h264 @ 0x80781cf20] error while decoding MB 1 21, bytestream (-12) 949.2kbits/s
|
Для ffmpeg1
#!/bin/sh
/usr/local/bin/ffmpeg1 -y -r 8 -i rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream
-b 2048k /1/output_file.flv
Ночь, ночной режим камеры, камера смотрит в помещении в сторну, картинка статичная:
# /bin/sh /123/scr/ffmp ffmpeg version 1.2.3 Copyright (c) 2000-2013 the FFmpeg developers built on Aug 31 2013 20:38:41 with gcc 4.2.1 (GCC) 20070831 patched [FreeBSD] configuration: --prefix=/usr/local --mandir=/usr/local/man --incdir=/usr/local/include/ffmpeg1 --libdir=/usr/local/lib/ffmpeg1 --shlibdir=/usr/local/lib/ffmpeg1 --datadir=/usr/local/share/ffmpeg1 --build-suffix=1 --progs-suffix=1 --enable-shared --enable-gpl --enable-postproc --enable-avfilter --enable-avresample --enable-pthreads --enable-memalign-hack --disable-libstagefright-h264 --disable-libutvideo --disable-libsoxr --cc=cc --extra-cflags='-msse -I/usr/local/include/vorbis -I/usr/local/include' --extra-ldflags='-L/usr/local/lib ' --extra-libs=-pthread --disable-debug --disable-libaacplus --disable-indev=alsa --disable-outdev=alsa --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libass --disable-libcdio --disable-libcelt --disable-libfaac --disable-libfdk-aac --enable-fontconfig --enable-libfreetype --enable-frei0r --enable-gnutls --disable-libgsm --enable-iconv --disable-libmp3lame --disable-libbluray --disable-libv4l2 --enable-libmodplug --enable-openal --enable-libopencv --enable-li libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 [rtsp @ 0x80942e420] Estimating duration from bitrate, this may be inaccurate Input #0, rtsp, from 'rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream': Metadata: title : Media Presentation Duration: N/A, start: 0.715222, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 1280x720, 8 fps, 25 tbr, 90k tbn, 16 tbc Please use -b:a or -b:v, -b is ambiguous Output #0, flv, to '/1/output_file.flv': Metadata: title : Media Presentation encoder : Lavf54.63.104 Stream #0:0: Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 1280x720, q=2-31, 2048 kb/s, 1k tbn, 8 tbc Stream mapping: Stream #0:0 -> #0:0 (h264 -> flv)
|
Press [q] to stop, [?] for help
RTP: missed 1 packets=2.0 size= 4756kB time=00:00:29.62 bitrate=1315.1kbits/s
RTP: missed 1 packets=2.0 size= 9229kB time=00:00:59.12 bitrate=1278.7kbits/s
RTP: missed 1 packets=2.0 size= 29332kB time=00:02:59.62 bitrate=1337.7kbits/s
RTP: missed 1 packets=2.0 size= 33853kB time=00:03:29.25 bitrate=1325.3kbits/s
RTP: missed 1 packets=2.0 size= 41588kB time=00:03:59.50 bitrate=1422.5kbits/s
RTP: missed 1 packets=2.0 size= 46204kB time=00:04:29.12 bitrate=1406.4kbits/s
RTP: missed 1 packets=2.0 size= 57927kB time=00:05:29.00 bitrate=1442.4kbits/s
RTP: missed 1 packets=2.0 size= 62160kB time=00:05:59.12 bitrate=1417.9kbits/s
RTP: missed 1 packets=2.0 size= 66226kB time=00:06:28.75 bitrate=1395.6kbits/s
RTP: missed 1 packets=2.0 size= 70327kB time=00:06:58.87 bitrate=1375.4kbits/s
RTP: missed 5 packets=2.0 size= 70376kB time=00:06:59.87 bitrate=1373.1kbits/s
[h264 @ 0x809527120] RTP: missed 1 packets
[h264 @ 0x809529e20] left block unavailable for requested intra mode at 0 35
[h264 @ 0x809529e20] error while decoding MB 0 35, bytestream (5115)
[h264 @ 0x809529e20] concealing 849 DC, 849 AC, 849 MV errors in I frame
RTP: missed 1 packets=2.0 size= 74360kB time=00:07:29.00 bitrate=1356.7kbits/s
RTP: missed 1 packets=1.6 size= 78368kB time=00:07:58.62 bitrate=1341.3kbits/s
RTP: missed 1 packets=2.0 size= 82283kB time=00:08:28.37 bitrate=1325.9kbits/s
RTP: missed 1 packets=2.0 size= 86131kB time=00:08:58.50 bitrate=1310.3kbits/s
RTP: missed 1 packets=2.0 size= 94015kB time=00:09:58.50 bitrate=1286.8kbits/s
RTP: missed 1 packets=2.0 size= 98196kB time=00:10:28.75 bitrate=1279.4kbits/s
RTP: missed 1 packets=2.0 size= 102635kB time=00:11:02.87 bitrate=1268.4kbits/s
[h264 @ 0x809529e20] concealing 287 DC, 287 AC, 287 MV errors in I frame
RTP: missed 1 packets=1.6 size= 106214kB time=00:11:28.62 bitrate=1263.5kbits/s
RTP: missed 1 packets=2.0 size= 110060kB time=00:11:58.12 bitrate=1255.5kbits/s
RTP: missed 1 packets=2.0 size= 122075kB time=00:13:28.25 bitrate=1237.3kbits/s
RTP: missed 1 packets=2.0 size= 126036kB time=00:13:58.37 bitrate=1231.5kbits/s
RTP: missed 1 packets=2.0 size= 138282kB time=00:15:28.50 bitrate=1220.0kbits/s
RTP: missed 1 packets=2.0 size= 142402kB time=00:15:58.12 bitrate=1217.5kbits/s
RTP: missed 4 packets=2.0 size= 143786kB time=00:16:08.87 bitrate=1215.7kbits/s
[h264 @ 0x809529920] concealing 671 DC, 671 AC, 671 MV errors in I frame
RTP: missed 1 packets=2.0 size= 146424kB time=00:16:28.25 bitrate=1213.8kbits/s
RTP: missed 1 packets=2.0 size= 154428kB time=00:17:28.12 bitrate=1207.0kbits/s
RTP: missed 1 packets=2.0 size= 170691kB time=00:19:28.00 bitrate=1197.2kbits/s
RTP: missed 1 packets=2.0 size= 175591kB time=00:19:58.37 bitrate=1200.3kbits/s
RTP: missed 1 packets=2.0 size= 181447kB time=00:20:27.87 bitrate=1210.6kbits/s
RTP: missed 1 packets=1.6 size= 185851kB time=00:20:57.12 bitrate=1211.1kbits/s
[h264 @ 0x809528020] error while decoding MB 24 35, bytestream (-13)
[h264 @ 0x809528020] Cannot use next picture in error concealment
[h264 @ 0x809528020] concealing 825 DC, 825 AC, 825 MV errors in P frame
RTP: missed 1 packets=2.0 size= 185931kB time=00:20:58.25 bitrate=1210.5kbits/s
RTP: missed 1 packets=2.0 size= 190350kB time=00:21:27.75 bitrate=1210.9kbits/s
RTP: missed 1 packets=2.0 size= 194604kB time=00:21:57.50 bitrate=1210.0kbits/s
RTP: missed 1 packets=2.0 size= 198987kB time=00:22:27.87 bitrate=1209.4kbits/s
RTP: missed 1 packets=2.0 size= 211675kB time=00:23:57.50 bitrate=1206.3kbits/s
RTP: missed 1 packets=2.0 size= 234132kB time=00:26:27.75 bitrate=1208.0kbits/s
RTP: missed 1 packets=2.0 size= 263390kB time=00:29:27.75 bitrate=1220.6kbits/s
RTP: missed 1 packets=2.0 size= 272378kB time=00:30:28.12 bitrate=1220.6kbits/s
RTP: missed 1 packets=2.0 size= 276897kB time=00:30:57.75 bitrate=1221.0kbits/s
RTP: missed 1 packets=2.0 size= 285987kB time=00:31:57.75 bitrate=1221.6kbits/s
RTP: missed 1 packets=2.0 size= 290600kB time=00:32:28.00 bitrate=1222.1kbits/s
RTP: missed 1 packets=2.0 size= 295166kB time=00:32:57.50 bitrate=1222.8kbits/s
RTP: missed 2 packets=2.0 size= 309553kB time=00:34:33.00 bitrate=1223.3kbits/s
[h264 @ 0x809528020] error while decoding MB 37 42, bytestream (-36)
[h264 @ 0x809528020] concealing 252 DC, 252 AC, 252 MV errors in I frame
RTP: missed 1 packets=2.0 size= 317871kB time=00:35:27.87 bitrate=1223.8kbits/s
RTP: missed 1 packets=2.0 size= 331372kB time=00:36:57.37 bitrate=1224.2kbits/s
RTP: missed 6 packets=2.0 size= 334972kB time=00:37:21.25 bitrate=1224.4kbits/s
[h264 @ 0x809529920] error while decoding MB 23 38, bytestream (-34)
[h264 @ 0x809529920] concealing 586 DC, 586 AC, 586 MV errors in I frame
RTP: missed 1 packets=2.0 size= 345001kB time=00:38:27.75 bitrate=1224.7kbits/s
RTP: missed 1 packets=2.0 size= 362961kB time=00:40:27.62 bitrate=1224.8kbits/s
RTP: missed 1 packets=2.0 size= 367505kB time=00:40:57.75 bitrate=1224.9kbits/s
RTP: missed 1 packets=2.0 size= 376518kB time=00:41:57.62 bitrate=1225.1kbits/s
RTP: missed 1 packets=2.0 size= 381029kB time=00:42:27.75 bitrate=1225.2kbits/s
RTP: missed 1 packets=2.0 size= 384639kB time=00:42:52.25 bitrate=1225.0kbits/s
[h264 @ 0x809528020] concealing 444 DC, 444 AC, 444 MV errors in I frame
RTP: missed 1 packets=2.0 size= 385555kB time=00:42:57.37 bitrate=1225.5kbits/s
RTP: missed 1 packets=2.0 size= 390134kB time=00:43:27.50 bitrate=1225.7kbits/s
RTP: missed 1 packets=2.0 size= 394682kB time=00:43:57.75 bitrate=1225.8kbits/s
RTP: missed 1 packets=2.0 size= 408148kB time=00:45:27.25 bitrate=1226.0kbits/s
RTP: missed 5 packets=1.6 size= 411030kB time=00:45:46.62 bitrate=1225.9kbits/s
[h264 @ 0x809529920] error while decoding MB 24 39, bytestream (-10)
[h264 @ 0x809529920] concealing 505 DC, 505 AC, 505 MV errors in I frame
RTP: missed 1 packets=1.6 size= 417140kB time=00:46:27.12 bitrate=1226.1kbits/s
RTP: missed 5 packets=2.0 size= 420338kB time=00:46:48.75 bitrate=1226.0kbits/s
[h264 @ 0x809527120] RTP: missed 1 packets
[h264 @ 0x809529e20] left block unavailable for requested intra4x4 mode -1 at 0 32
[h264 @ 0x809529e20] error while decoding MB 0 32, bytestream (9509)
[h264 @ 0x809529e20] concealing 1089 DC, 1089 AC, 1089 MV errors in I frame
RTP: missed 1 packets=2.0 size= 421591kB time=00:46:57.37 bitrate=1225.8kbits/s
RTP: missed 1 packets=2.0 size= 439551kB time=00:48:57.37 bitrate=1225.9kbits/s
RTP: missed 1 packets=2.0 size= 444088kB time=00:49:27.50 bitrate=1225.9kbits/s
RTP: missed 1 packets=1.6 size= 448569kB time=00:49:57.12 bitrate=1226.1kbits/s
RTP: missed 1 packets=2.0 size= 453095kB time=00:50:27.25 bitrate=1226.1kbits/s
RTP: missed 1 packets=2.0 size= 457673kB time=00:50:57.50 bitrate=1226.3kbits/s
RTP: missed 1 packets=1.6 size= 473269kB time=00:52:27.12 bitrate=1231.9kbits/s
RTP: missed 1 packets=2.0 size= 482419kB time=00:53:27.00 bitrate=1232.3kbits/s
RTP: missed 1 packets=2.0 size= 486964kB time=00:53:56.75 bitrate=1232.5kbits/s
RTP: missed 1 packets=2.0 size= 491755kB time=00:54:26.87 bitrate=1233.1kbits/s
RTP: missed 1 packets=2.0 size= 496275kB time=00:54:56.50 bitrate=1233.3kbits/s
RTP: missed 1 packets=2.0 size= 500752kB time=00:55:26.62 bitrate=1233.1kbits/s
RTP: missed 1 packets=2.0 size= 509745kB time=00:56:26.62 bitrate=1233.0kbits/s
RTP: missed 3 packets=2.0 size= 523349kB time=00:57:57.00 bitrate=1233.0kbits/s
RTP: missed 1 packets=2.0 size= 527759kB time=00:58:26.62 bitrate=1232.9kbits/s
RTP: missed 1 packets=2.0 size= 541291kB time=00:59:56.25 bitrate=1233.0kbits/s
RTP: missed 1 packets=2.0 size= 550231kB time=01:00:56.75 bitrate=1232.6kbits/s
RTP: missed 1 packets=2.0 size= 563725kB time=01:02:26.37 bitrate=1232.7kbits/s
RTP: missed 1 packets=2.0 size= 577105kB time=01:03:56.62 bitrate=1232.2kbits/s
RTP: missed 1 packets=2.0 size= 581597kB time=01:04:26.25 bitrate=1232.3kbits/s
RTP: missed 1 packets=2.0 size= 599575kB time=01:06:26.50 bitrate=1232.1kbits/s
RTP: missed 1 packets=2.0 size= 608581kB time=01:07:26.37 bitrate=1232.1kbits/s
RTP: missed 1 packets=2.0 size= 621916kB time=01:08:56.00 bitrate=1231.8kbits/s
RTP: missed 1 packets=2.0 size= 630895kB time=01:09:56.00 bitrate=1231.7kbits/s
RTP: missed 1 packets=2.0 size= 635407kB time=01:10:26.12 bitrate=1231.7kbits/s
RTP: missed 1 packets=2.0 size= 639825kB time=01:10:55.75 bitrate=1231.6kbits/s
RTP: missed 1 packets=2.0 size= 644334kB time=01:11:26.00 bitrate=1231.5kbits/s
RTP: missed 1 packets=1.6 size= 648775kB time=01:11:55.62 bitrate=1231.5kbits/s
RTP: missed 6 packets=2.0 size= 650879kB time=01:12:10.37 bitrate=1231.3kbits/s
[h264 @ 0x809529e20] error while decoding MB 28 38, bytestream (-34)
[h264 @ 0x809529e20] concealing 581 DC, 581 AC, 581 MV errors in I frame
RTP: missed 1 packets=2.0 size= 653261kB time=01:12:25.75 bitrate=1231.4kbits/s
RTP: missed 1 packets=1.6 size= 662121kB time=01:13:25.62 bitrate=1231.2kbits/s
RTP: missed 1 packets=2.0 size= 671123kB time=01:14:25.75 bitrate=1231.1kbits/s
RTP: missed 1 packets=2.0 size= 675483kB time=01:14:55.37 bitrate=1230.9kbits/s
RTP: missed 1 packets=1.6 size= 680308kB time=01:15:25.62 bitrate=1231.5kbits/s
RTP: missed 1 packets=2.0 size= 693684kB time=01:16:55.75 bitrate=1231.1kbits/s
RTP: missed 1 packets=1.6 size= 711546kB time=01:18:55.62 bitrate=1230.9kbits/s
RTP: missed 1 packets=2.0 size= 715886kB time=01:19:25.25 bitrate=1230.7kbits/s
RTP: missed 1 packets=1.6 size= 724994kB time=01:20:25.62 bitrate=1230.8kbits/s
RTP: missed 1 packets=2.0 size= 729311kB time=01:20:55.25 bitrate=1230.5kbits/s
RTP: missed 1 packets=2.0 size= 733775kB time=01:21:25.37 bitrate=1230.4kbits/s
RTP: missed 1 packets=2.0 size= 738234kB time=01:21:55.00 bitrate=1230.4kbits/s
RTP: missed 1 packets=2.0 size= 742760kB time=01:22:25.25 bitrate=1230.4kbits/s
RTP: missed 1 packets=2.0 size= 751683kB time=01:23:25.12 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 756125kB time=01:23:54.87 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 765041kB time=01:24:54.75 bitrate=1230.1kbits/s
RTP: missed 1 packets=2.0 size= 774021kB time=01:25:54.75 bitrate=1230.1kbits/s
RTP: missed 1 packets=2.0 size= 778658kB time=01:26:24.50 bitrate=1230.4kbits/s
RTP: missed 1 packets=2.0 size= 783182kB time=01:26:54.87 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 787722kB time=01:27:25.00 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 792154kB time=01:27:54.62 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 796634kB time=01:28:24.25 bitrate=1230.3kbits/s
RTP: missed 1 packets=2.0 size= 805549kB time=01:29:24.75 bitrate=1230.1kbits/s
RTP: missed 1 packets=2.0 size= 810011kB time=01:29:54.37 bitrate=1230.1kbits/s
RTP: missed 1 packets=2.0 size= 814483kB time=01:30:24.62 bitrate=1230.0kbits/s
RTP: missed 1 packets=2.0 size= 818958kB time=01:30:54.25 bitrate=1230.0kbits/s
RTP: missed 1 packets=2.0 size= 832332kB time=01:32:24.37 bitrate=1229.8kbits/s
RTP: missed 1 packets=2.0 size= 836840kB time=01:32:54.50 bitrate=1229.8kbits/s
RTP: missed 1 packets=1.6 size= 841295kB time=01:33:24.12 bitrate=1229.8kbits/s
RTP: missed 1 packets=2.0 size= 845851kB time=01:33:54.25 bitrate=1229.8kbits/s
RTP: missed 1 packets=2.0 size= 850163kB time=01:34:23.87 bitrate=1229.6kbits/s
RTP: missed 1 packets=2.0 size= 863765kB time=01:35:54.25 bitrate=1229.7kbits/s
RTP: missed 1 packets=1.6 size= 893263kB time=01:38:54.12 bitrate=1233.1kbits/s
RTP: missed 1 packets=2.0 size= 908883kB time=01:40:24.25 bitrate=1235.9kbits/s
RTP: missed 1 packets=2.0 size= 922206kB time=01:41:54.37 bitrate=1235.6kbits/s
frame=50215 fps=8.0 q=2.0 Lsize= 946168kB time=01:44:36.87 bitrate=1234.9kbits/s
video:945384kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.083019%
|
Тоже самое но дневная съёмка V5.0.2, камера смотрит на улицу, ошибок гораздо больше и они происходят чаще:
Input #0, rtsp, from 'rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream': Metadata: title : Media Presentation Duration: N/A, start: 0.714000, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 1280x720, 8 fps, 25 tbr, 90k tbn, 16 tbc Output #0, flv, to '/1/output_file.flv': Metadata: title : Media Presentation encoder : Lavf54.63.104 Stream #0:0: Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 1280x720, q=2-31, 4096 kb/s, 1k tbn, 8 tbc
Stream mapping: Stream #0:0 -> #0:0 (h264 -> flv) Press [q] to stop, [?] for help
|
RTP: missed 9 packets=2.7 size= 9556kB time=00:00:18.75 bitrate=4175.1kbits/s
[h264 @ 0x809529e20] concealing 1772 DC, 1772 AC, 1772 MV errors in I frame
RTP: missed 1 packets=2.1 size= 14930kB time=00:00:29.62 bitrate=4128.5kbits/s
[h264 @ 0x809529e20] Cannot use next picture in error concealment
[h264 @ 0x809529e20] concealing 3112 DC, 3112 AC, 3112 MV errors in P frame
RTP: missed 3 packets=2.0 size= 15733kB time=00:00:31.25 bitrate=4124.2kbits/s
[h264 @ 0x809528020] left block unavailable for requested intra mode at 0 27
[h264 @ 0x809528020] error while decoding MB 0 27, bytestream (52762)
[h264 @ 0x809528020] concealing 1489 DC, 1489 AC, 1489 MV errors in I frame
RTP: missed 12 packets2.0 size= 28361kB time=00:00:56.50 bitrate=4112.2kbits/s
[h264 @ 0x809529e20] left block unavailable for requested intra mode at 0 22
[h264 @ 0x809529e20] error while decoding MB 0 22, bytestream (47070)
[h264 @ 0x809529e20] concealing 1889 DC, 1889 AC, 1889 MV errors in I frame
RTP: missed 7 packets=2.2 size= 44093kB time=00:01:27.87 bitrate=4110.5kbits/s
[h264 @ 0x809528020] concealing 1800 DC, 1800 AC, 1800 MV errors in I frame
RTP: missed 1 packets=2.0 size= 44883kB time=00:01:29.62 bitrate=4102.5kbits/s
RTP: missed 21 packets2.0 size= 49887kB time=00:01:39.75 bitrate=4097.0kbits/s
[h264 @ 0x809528020] concealing 1561 DC, 1561 AC, 1561 MV errors in I frame
RTP: missed 22 packets2.0 size= 55588kB time=00:01:52.37 bitrate=4052.3kbits/s
[h264 @ 0x809529920] concealing 1708 DC, 1708 AC, 1708 MV errors in I frame
RTP: missed 6 packets=1.6 size= 58566kB time=00:01:58.62 bitrate=4044.5kbits/s
[h264 @ 0x809528020] left block unavailable for requested intra4x4 mode -1 at 0 25
[h264 @ 0x809528020] error while decoding MB 0 25, bytestream (43155)
[h264 @ 0x809528020] concealing 1649 DC, 1649 AC, 1649 MV errors in I frame
RTP: missed 1 packets=2.0 size= 58693kB time=00:01:59.12 bitrate=4036.2kbits/s
RTP: missed 8 packets=2.0 size= 61293kB time=00:02:04.75 bitrate=4024.9kbits/s
[h264 @ 0x809529920] left block unavailable for requested intra4x4 mode -1 at 0 25
[h264 @ 0x809529920] error while decoding MB 0 25, bytestream (40577)
[h264 @ 0x809529920] concealing 1649 DC, 1649 AC, 1649 MV errors in I frame
RTP: missed 6 packets=2.0 size= 67179kB time=00:02:17.37 bitrate=4006.0kbits/s
[h264 @ 0x809529e20] concealing 1639 DC, 1639 AC, 1639 MV errors in I frame
RTP: missed 7 packets=2.0 size= 69895kB time=00:02:23.62 bitrate=3986.6kbits/s
[h264 @ 0x809529920] left block unavailable for requested intra4x4 mode -1 at 0 24
[h264 @ 0x809529920] error while decoding MB 0 24, bytestream (47188)
[h264 @ 0x809529920] concealing 1729 DC, 1729 AC, 1729 MV errors in I frame
RTP: missed 1 packets=2.0 size= 72448kB time=00:02:29.37 bitrate=3973.2kbits/s
RTP: missed 6 packets=2.0 size= 79101kB time=00:02:42.37 bitrate=3990.7kbits/s
[h264 @ 0x809528020] left block unavailable for requested intra mode at 0 26
[h264 @ 0x809528020] error while decoding MB 0 26, bytestream (44087)
[h264 @ 0x809528020] concealing 1569 DC, 1569 AC, 1569 MV errors in I frame
RTP: missed 6 packets=2.0 size= 81982kB time=00:02:48.62 bitrate=3982.8kbits/s
[h264 @ 0x809529e20] concealing 1611 DC, 1611 AC, 1611 MV errors in I frame
RTP: missed 8 packets=2.0 size= 84853kB time=00:02:54.87 bitrate=3974.9kbits/s
[h264 @ 0x809527120] RTP: missed 1 packets
[h264 @ 0x809529920] left block unavailable for requested intra4x4 mode -1 at 0 23
[h264 @ 0x809529920] error while decoding MB 0 23, bytestream (45088)
[h264 @ 0x809529920] concealing 1809 DC, 1809 AC, 1809 MV errors in I frame
RTP: missed 1 packets=2.0 size= 86929kB time=00:02:59.50 bitrate=3967.2kbits/s
RTP: missed 7 packets=2.0 size= 90968kB time=00:03:07.37 bitrate=3977.1kbits/s
[h264 @ 0x809529920] concealing 1664 DC, 1664 AC, 1664 MV errors in I frame
RTP: missed 3 packets=2.0 size= 111744kB time=00:03:44.50 bitrate=4077.6kbits/s
[h264 @ 0x809529920] left block unavailable for requested intra mode at 0 24
[h264 @ 0x809529920] error while decoding MB 0 24, bytestream (54620)
[h264 @ 0x809529920] concealing 1729 DC, 1729 AC, 1729 MV errors in I frame
RTP: missed 13 packets2.0 size= 115360kB time=00:03:50.75 bitrate=4095.5kbits/s
[h264 @ 0x809528020] concealing 1785 DC, 1785 AC, 1785 MV errors in I frame
RTP: missed 1 packets=3.3 size= 119937kB time=00:03:59.37 bitrate=4104.5kbits/s
RTP: missed 4 packets=3.6 size= 122031kB time=00:04:03.25 bitrate=4109.7kbits/s
[h264 @ 0x809528020] concealing 1760 DC, 1760 AC, 1760 MV errors in I frame
RTP: missed 17 packets2.3 size= 131250kB time=00:04:22.12 bitrate=4101.9kbits/s
[h264 @ 0x809528020] concealing 1743 DC, 1743 AC, 1743 MV errors in I frame
RTP: missed 2 packets=4.7 size= 134820kB time=00:04:29.00 bitrate=4105.7kbits/s
RTP: missed 4 packets=2.3 size= 137401kB time=00:04:34.50 bitrate=4100.5kbits/s
[h264 @ 0x809528020] left block unavailable for requested intra4x4 mode -1 at 0 23
[h264 @ 0x809528020] error while decoding MB 0 23, bytestream (56125)
[h264 @ 0x809528020] concealing 1809 DC, 1809 AC, 1809 MV errors in I frame
RTP: missed 1 packets=3.2 size= 162512kB time=00:05:24.25 bitrate=4105.8kbits/s
[h264 @ 0x809529920] concealing 836 DC, 836 AC, 836 MV errors in I frame
RTP: missed 19 packets2.2 size= 171748kB time=00:05:43.12 bitrate=4100.4kbits/s
[h264 @ 0x809529920] left block unavailable for requested intra mode at 0 22
[h264 @ 0x809529920] error while decoding MB 0 22, bytestream (36911)
[h264 @ 0x809529920] concealing 1889 DC, 1889 AC, 1889 MV errors in I frame
RTP: missed 1 packets=3.7 size= 179847kB time=00:05:59.12 bitrate=4102.5kbits/s
RTP: missed 1 packets=3.9 size= 194913kB time=00:06:29.25 bitrate=4102.1kbits/s
frame= 3161 fps=8.0 q=5.1 Lsize= 197896kB time=00:06:35.12 bitrate=4102.9kbits/s
video:197847kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.025083%
|
При просмотре записанного через ffmpeg1 изображения в местах битых ключевых кадров также наблюдаем смазанную нижнюю часть. Причём длительность смазанной части изображения составляет I Frame Interval / fps или 50/8 = ~6. Из-за выпавшего одного ключевого кадра потеряными оказываются 50кадров. Можно конечно уменьшать I Frame Interval, но тогда получим сильное увеличение трафика, здесь про это есть информация. И самое важное, в выпавших кадрах может содержаться ценная информация.
Теперь наконец обращаем внимание, что обмен с IP камерой происходит через UDP, меняем на TCP
#!/bin/sh /usr/local/bin/ffmpeg1 -y -r 8 -rtsp_transport tcp \ -i rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream \ -b:v 4096k -q:v 9 /1/output_file.flv
|
И чудо, ни чиха ни пыха, проверяем ffmpeg -он также по умолчанию использует udp. Посмотрел zoneminder, там тоже UDP.
Проверяем ffmpeg 0.7 c tcp:
#!/bin/sh /usr/local/bin/ffmpeg -y -r 8 \ -i rtsp://admin:12345@192.168.6.3/h264/ch1/main/av_stream?tcp -b 4096k /1/output_file.flv
|
Всё работает стабильно, без сбоев даже с V5.0.2 прошивкой, хоть и очень криво. И оказалось всего-то нужно к адресу источника данных добавить '?tcp' или почтьать статью. Но для V4.0.9 проблем с ffmpeg по крайней мере в течении часа не наблюдалось, но установить tcp на всякий будет не лишним.
Продолжим настройку zoneminder:
Настраиваем shared memoryдля ipc, для межпроцессорного взаимодействия.
Ядро было перекомпилировано со следующими параметрами:
(Ниже параметры будут изменены)
options SHMMAXPGS=65536
options SHMMNI=384
options SHMSEG=256
Проверяем
# ipcs -abcmopqstyMQST
msginfo:
…
shminfo:
shmmax: 268435456 (max shared memory segment size)
shmmin: 1 (min shared memory segment size)
shmmni: 384 (max number of shared memory identifiers)
shmseg: 256 (max shared memory segments per process)
shmall: 65536 (max amount of shared memory in pages)
…
Пере собираем ядро с ниже приведёнными options параметрами:
Под shared memory на всякий(от незнания нюансов) выделю 1G SHMMAX = SHMMAXPGS*4096
options SHMMAXPGS=262144
options SHMMNI=512
options SHMSEG=1024
SHMMAXPGS=524288 вызывает ошибку компиляции. Возможно 524287 подойдёт. При компиляции ядра ругань по поводу выхода за разрядную сетку целого числа. Возможно используется целое 4х байтное знаковое число.
# cd /usr/src
# make buildkernel KERNCONF=YOUR_KERNEL_HERE
# make installkernel KERNCONF=YOUR_KERNEL_HERE
# shutdown -r now
Здесь SHMMAX =SHMMAXPGS*PAGE_SIZE вычисляется автоматически- максимальный размер (в байтах) на сегменте shared memory, установлен в 1 Гб. SHMALL - общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать. Количество байт в странице зависит от операционной системы; обычно 4096 байт узнать можно так:
# getconf PAGESIZE
или
# getconf PAGE_SIZE
4096
если shmall значение НЕ УСТАНОВЛЕНО, оно берется равным значению SHMMAXPGS
Пример рассчёта минимального количества Shared memory для обрабатываемых камер:
640x480 разрешение захватываемого кадра, =307200 пикселя, учитываем цветность 24 бита, умножаем всё на x24 = 7372800 бит на фрэйм/кадр. У нас например 80 фрэймов в циклическом буфере x80 = 589824000 бит на одну камеру с текущими параметрами. Для 4х камер x4 = 2359296000 бит. Добавляем 10% на всякий = 2595225600 бит /8= 324403200 байт = 316800 kB = 309.375 MB. Или SHMMAXPGS = 79200. Сколько бит в байте, байт в килобайте и т.д. напоминать не буду
Проверяем, что получилось:
# ipcs -abcmopqstyMQST
…
shminfo:
shmmax: 1073741824 (max shared memory segment size)
shmmin: 1 (min shared memory segment size)
shmmni: 512 (max number of shared memory identifiers)
shmseg: 1024 (max shared memory segments per process)
shmall: 262144 (max amount of shared memory in pages)
…
Если zm не запущен:
# ipcs -m
Shared Memory:
T ID KEY MODE OWNER GROUP
m 589825 24248330 --rw------- root wheel
m 589826 24248334 --rw------- root wheel
Если zm запущен:
# ipcs -m
Shared Memory:
T ID KEY MODE OWNER GROUP
m 65536 2053963777 --rwa------ www www
m 196609 24248330 --rw------- root wheel
m 196610 24248334 --rw------- root wheel
В колонке MODE стоит 'r', если средство доступно для чтения пользователю, группе и другим пользователям. Для разделяемой памяти и очередей сообщений 'w' означает право записи, для семафоров 'a' - право изменения.
Первую запись и создаёт zoneminder при запуске, т.е. считаем, что пока с shared memory разобрались.
В /etc/ sysctl.conf добавляем:
kern.ipc.shm_allow_removed=1
kern.ipc.shm_use_phys=1
Желательно для FreeBSD установить переменную ядра kern.ipc.shm_use_phys=1 -это запретит свопинг разделяемой памяти, что положительно повлияет на работу RDBMS.
kern.ipc.shm_allow_removed=1 Служит для улучшения общего использования памяти.
В /usr/local/etc/php.ini ищем и проверяем, чтобы было
short_open_tag = On
date.timezone = "Europe/Moscow"
# cp /usr/local/etc/zm.conf.sample /usr/local/etc/zm.conf
# chmod 0444 /usr/local/etc/zm.conf
# chown root:wheel /usr/local/etc/zm.conf
Настройка mysql. Запускаем скрипт настройки базы данных для zoneminder:
> select User from mysql.user; -показать всех пользователей mysql > drop database zm; -удаление базы данных > drop user 'a1jzmuser'@'localhost'; -удаление пользователя
# mysql -u root -p Enter password: mysql > create database zm; Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | forumantehru | | mysql | | performance_schema | | test | | zm | +--------------------+ 6 rows in set (0.00 sec)
mysql> CREATE USER 'zmuser'@'localhost' IDENTIFIED BY 'zmpass'; Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost' IDENTIFIED BY 'zmpass' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist mysql> exit Bye
Не порядок:
# mysqlcheck --check-upgrade --all-databases --auto-repair -p Enter password: mysql.columns_priv OK mysql.db OK mysql.func OK mysql.help_category error : Table upgrade required. Please do "REPAIR TABLE `help_category`" or dump/reload to fix it! mysql.help_keyword error : Table upgrade required. Please do "REPAIR TABLE `help_keyword`" or dump/reload to fix it! mysql.help_relation OK mysql.help_topic error : Table upgrade required. Please do "REPAIR TABLE `help_topic`" or dump/reload to fix it! mysql.host OK mysql.proc error : Table upgrade required. Please do "REPAIR TABLE `proc`" or dump/reload to fix it! mysql.procs_priv error : Table upgrade required. Please do "REPAIR TABLE `procs_priv`" or dump/reload to fix it! mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name error : Table upgrade required. Please do "REPAIR TABLE `time_zone_name`" or dump/reload to fix it! mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK
Repairing tables mysql.help_category OK mysql.help_keyword OK mysql.help_topic OK mysql.proc OK mysql.procs_priv OK mysql.time_zone_name OK
Проверяем: mysql> flush privileges; ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist Не помогло: mysql> exit Bye
Пробуем: # mysql _upgrade --force -p Enter password: Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck with default connection arguments Running 'mysqlcheck with default connection arguments mysql.columns_priv OK mysql.db OK mysql.func OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.host OK mysql.proc OK mysql.procs_priv OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK Running 'mysql _fix_privilege_tables'... OK
'mysql _fix_privilege_tables' -это как раз то, что нужно для фикса ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
Выбираем базу данных: mysql> USE zm Database changed mysql> SELECT DATABASE(); +------------+ | DATABASE() | +------------+ | zm | +------------+ 1 row in set (0.00 sec) mysql> SHOW TABLES; Empty set (0.00 sec) mysql> SELECT * FROM mysql.db WHERE Db = 'zm'\G; *************************** 1. row *************************** Host: localhost Db: zm User: zmuser Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: Y References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Execute_priv: Y Event_priv: Y Trigger_priv: Y 1 row in set (0.00 sec) ERROR: No query specified Смотрим, какие пользователи могут пользлваться базой данных: > select user,host from mysql.user; +--------+-----------+ | user | host | +--------+-----------+ | zmuser | % | | root | 127.0.0.1 | | | ehg.ru | | root | ehg.ru | | | localhost | | root | localhost | | zmuser | localhost | +--------+-----------+ 7 rows in set (0.00 sec) Удаляем непонятное, возможно зря > drop user ''@'localhost'; > drop user ''@'ehg.ru'; > drop user 'root'@'ehg.ru'; mysql> exit Bye
|
Заполняем базу данных используя скрипт.
# mysql -u root -p zm < /usr/ports/multimedia/zoneminder/work/ZoneMinder-1.25.0/db/zm_create.sql
|
Enter password:
Здесь /var/db/mysql/zm увидим много файлов, база данных создана.
Соответственно проверяем, чтобы в /usr/local/etc/zm.conf совпадало:
ZM_DB_USER= zmuser
ZM_DB_PASS= zmpass
ZM_DB_HOST=localhost
ZM_DB_NAME=zm
Владельцем следующих папок должен быть www:www
chown -R www:www /some_path/zoneminder/data
chown -R www:www /some_path/zoneminder/cgi-bin
Пробуем запуститься:
# service zoneminder onestart
/usr/local/etc/rc.d/zoneminder: ERROR: zoneminder: mysqltest command failed
# /usr/local/etc/rc.d/mysql-server status
mysql is running as pid 1353.
# sockstat | grep sql
mysql mysqld 1353 10 tcp4 *:3306 *:*
mysql mysqld 1353 12 stream /tmp/mysql.sock
# /usr/local/etc/rc.d/mysql-server restart
Stopping mysql.
Waiting for PIDS: 1353.
Starting mysql.
В общем победить по честному 'ERROR: zoneminder: mysqltest command failed' не удалось, из /usr/local/etc/rc.d/*zoneminder удаляем кусок скрипта отвечающего за тестирование базы данных при запуске. При ручной попытке тестирования все виснет и дальше никак. Наблюдаем такую картину:
# /usr/local/bin/mysqltest -u 'root' -p -D zm
Enter password:
После ввода пароля ничего не происходит.
Правим /usr/local/etc/rc.d/*zoneminder, точнее комментируем указанные строки функции:
zm_prestart() { #local _count=0 # # while : ; do # echo "USE zm; SELECT Username from Users where Id=1;" | \ # /usr/local/bin/mysqltest -u root zm > /dev/null 2>&1 && return # _count=$(( $_count + 1 )) # if [ $_count -gt 10 ]; then # err 1 "${name}: mysqltest command failed" # fi # # sleep 1 # done }
|
Запускаем с бог знает какого раза и:
# service zoneminder start
Starting zoneminder.
Смотрим /var/run/zm/zm.pid появился
Через # top наблюдаем за демонами запущенного zoneminder:
1373 www 1 20 0 72868K 15456K select 1 0:01 0.00% perl5.16.3
1396 www 1 20 0 87372K 24160K nanslp 0 0:00 0.00% perl5.16.3
1405 www 1 49 0 74588K 19516K nanslp 0 0:00 0.00% perl5.16.3
1402 www 1 20 0 72868K 15156K nanslp 0 0:00 0.00% perl5.16.3
1399 www 1 20 0 79020K 16500K nanslp 0 0:00 0.00% perl5.16.3
В скрипте запуска ZoneMinder startup script установлена задержка на 10 секунд, чтобы успел запуститься mysql.
Настраиваем апач для работы с zoneminder:
Проверяем, чтобы в /usr/local/etc/apache22/httpd.conf было:
LoadModule php5_module libexec/apache22/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Рабочий конфиг для дефолтного виртуального хоста. Конфиг должен размещаться самым первым в /usr/local/etc/apache22/extra/ httpd-vhosts.conf, помимо zoneminder присутствует некоторое количество работающих виртуальных хостов с делегированными доменами:
#zoneminder <VirtualHost *:80> ServerName zmn DocumentRoot "/usr/local/www/zoneminder/data" Alias /zm "/usr/local/www/zoneminder/data" <Directory "/usr/local/www/zoneminder/data"> php_value short_open_tag 1 DirectoryIndex index.php Options FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/usr/local/www/zoneminder/cgi-bin/" <Directory "/usr/local/www/zoneminder/cgi-bin/"> AddHandler cgi-script .cgi .pl Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch AllowOverride all Order allow,deny Allow from all </Directory> LogLevel warn ErrorLog "/var/log/zm/zoneminder-error_log" CustomLog "/var/log/zm/zoneminder-customlog" combined </VirtualHost>
проверка конфигурационного файла httpd.conf # apachectl configtest проверка настроек виртуального хостинга # apachectl -S
В /etc/rc.conf должно быть apache_enable="YES" mysql _enable="YES" zoneminder_enable="YES"
Запускаем/перезапускаем апач # apachectl start # apachectl restart
|
заходим на страницу и наконец пол дела сделано:
Или кому родной язык ближе, меняем в опциях на ru-ru.
# service zoneminder stop
# service zoneminder start
Starting zoneminder.
Замечаем следующую картину:
В общем нормально, на всякий возвращаемся обратно на en-gb, на русский можно перейти после всех настроек.
Чтобы через explorer можно было смотреть видео, в options->images может быть так:
Cкачиваем http://www.charliemouse.com/code/cambozola/
Устанавливаем:
# cd /usr/ports/java/openjdk7 # make && make install && make clean Затем: # cd /usr/ports/devel/apache-ant # make && make install && make clean Распаковываем cambozola-latest.tar.gz Заходим в: /<dir>/cambozola-0.93 # ant Buildfile: /dir/cambozola-0.93/build.xml init: [mkdir] Created dir: /dir/cambozola-0.93/build [mkdir] Created dir: /dir/cambozola-0.93/pkg [mkdir] Created dir: /dir/cambozola-0.93/pkg/cambozola-0.93 [mkdir] Created dir: /dir/cambozola-0.93/deploy [propertyfile] Creating new property file: /dir/cambozola-0.93/build.number compile: [echo] Compiling with JVM Version 1.7.0_25 [javac] Compiling 28 source files to /dir/cambozola-0.93/build [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.3 [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] 1 warning [copy] Copying 1 file to /dir/cambozola-0.93/build [copy] Copying 17 files to /dir/cambozola-0.93/build dist: [jar] Building jar: /dir/cambozola-0.93/dist/cambozola.jar [jar] Building jar: /dir/cambozola-0.93/dist/cambozola-server.jar [copy] Copying 1 file to /dir/cambozola-0.93/dist BUILD SUCCESSFUL Total time: 2 seconds
Копируем …/cambozola-0.93/dist/cambozola.jar в …/zoneminder/data # chmod 0755 …/zoneminder/data/cambozola.jar # chown www:www …/zoneminder/data/cambozola.jar
|
Самым "честным" браузером окажутся Explorer и Yandeх, они честно отрабатывают заданные в B/W параметры:
Проявлялось это в том, что при дефолтных Low B/W настройках Explorer и Yandex честно обновляли картинку раз в 15сек(WEB_L_REFRESH_IMAGE), согласно дефолнтым настройкам Low B/W. Тогда, когда Safari и Firefox отображали картинку с fps камеры.
Страница с нормально работающим zoneminder, с подключённой одной камерой выглядит так.
Т.е. Console должно быть Running, Function и Source должно быть зелёного цвета(IP камера правильно настроена, подключена и работает), есть какие-то события, и Name должно быть в виде ссылки, перейдя по которой можно увидеть изображение с камеры.
Если это не так, смотрим логи апача для virtual host zoneminder(настроенные ранее) и видим там например такие вещи:
[чего-то1] PHP Warning: exec() has been disabled for security reasons in [чего-то2] +
Значит в php.ini строку, по умолчанию этой строки нет:
disable_functions = system, exec, passthru
меняем на:
disable_functions = system, passthru
Следующие ошибки:
В логах zm при нажатии на кнопки паузы воспроизведения при просмотре текущего видео через веб интерфейс:
socket_sendto( /tmp/zm/zms-506821s.sock ) failed: No such file or directory
и
web_js ERR TypeError: streamStatus is undefined http://some_address/skins/classic/views/js/watch.js
И в логах апача
script not found or unable to stat: /vws/iwbs/zm.anteh.ru/zoneminder/cgi-bin/nph-zms , referer: http://...
PHP Deprecated: mysql _pconnect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /vws/iwbs/zm.anteh.ru/zoneminder/data/includes/database.php on line 32, referer: http://...
…(13)Permission denied: exec of '/vws/iwbs/zm.anteh.ru/zoneminder/cgi-bin/test-cgi' fail…
…Premature end of script headers: test-cgi
обновил c php-5.4.16 до php-5.5.0, обновлены также порты php-extensions и произведена очередная пересборка всех портов с предварительной проверкой pkgdb. +добавлены некоторые опции в php55-extenssions связанные с базой данных. Все используемые опции приведены в начале. Ничего не помогло.
ПРОВЕРИЛ fstab И ОКАЗАЛОСЬ, ЧТО РАЗДЕЛ, ГДЕ НАХОДИЛСЯ CGI-BIN ПАПКА СМОНТИРОВАН С ОПЦИЕЙ noexec. Удаляем noexec, и хотябы стал запускаться тестовый скрипт из /cgi-bin/ через браузер:
{ #!/usr/bin/perl print "Content-Type: text/html\n\n"; print "Hello!\n";
}
|
Разбираемся с shm. Требуется создать папку /dev/shm:
# mount
/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
/dev/ad4s1e on /tmp (ufs, local, soft-updates)
/dev/ad4s1f on /usr (ufs, local, soft-updates)
/dev/ad4s1d on /var (ufs, local, noexec, soft-updates)
/dev/ad4s1g on /vws (ufs, local, soft-updates)
/dev находится в devfs. Cоздадим отдельно в корне директорию /dev2/shm и /dev2/zm. И
# chown www:www /dev2/shm
# chown www:www /dev2/zm
# chmod 0700 /dev2/shm
# chmod 0700 /dev2/zm
Далее в /etc/fstab пропишем:
none /shm tmpfs rw,size=2G 0 0
Перезагружаемся и проверяем:
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 11G 9.2G 1.5G 86% /
devfs 1.0k 1.0k 0B 100% /dev
/dev/ad4s1e 9.7G 320k 8.9G 0% /tmp
/dev/ad4s1f 58G 8.9G 44G 17% /usr
/dev/ad4s1d 7.8G 1.4G 5.7G 20% /var
/dev/ad4s1g 360G 2.2G 329G 1% /vws
tmpfs 2.0G 4.0k 2G 0% /shm
Всё ок.
Ещё перед этим перекомпилировал ядро с опцией options TMPFS возможно в этом не было смысла.
Далее через web интерфейс zoneminder в Options->Paths строка PATH_MAP поправлен путь, меняем /dev/shm на /dev2/shm.
Выяснилось, что текущая версия zm не использует shared memory, а использует mmap.
Цитата:
To temporarily configure your system to allow for the successful allocation of the larger chunks of shared memory required by:
ZoneMinder versions 1.23 and older, or
ZoneMinder versions 1.24 and newer, unless the --enable--mmap=yes configuration switch has been selected
В общем говориться, что shared memory используется либо во всех версиях, либо в версиях 1.24 и выше не используется, если выбрано --enable--mmap=yes. Как понял, это опция при компиляции. Посмотрев некоторые файлы /work/ZoneMinder-1.25.0 директории обратил внимание, что везде в Makefile ENABLE_MMAP = no.
Устанавливаем perl модуль:
# cd /usr/ports/devel/p5-Sys-Mmap
Он и так был установлен. Shared memory оставляем в покое.
Если shared memory будет недостаточно, то появится сообщение:
WAR [Buffer overrun at index 31, image 902111, slow down capture, speed up analysis or increase ring buffer size]
PHP Deprecated: mysql _pconnect()
Если в файле лога zm /var/log/zm/zoneminder-error_log видим следующие записи:
[date] [error] [client a.b.c.d] PHP Deprecated: mysql _pconnect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /usr/local/www/zoneminder/data/includes/database.php on line 32, referer: http://a.b.c.d/index.php
|
то пробуем установить порт cd /usr/ports/databases/php5-mysqli
# whereis php5-mysqli php5-mysqli: /usr/ports/databases/php5-mysqli # cd /usr/ports/databases/php5-mysqli # make ===> php5-mysqli-5.4.17 cannot be installed: doesn't work with lang/php55 port (doesn't support PHP 5.2 5.3 5.5).
*** [all] Error code 1
Stop in /usr/ports/databases/php5-mysqli.
|
Порт не устанавливается. В общем не обращаем на ошибку внимания. Если нужно, то её можно отключить.
Отключаем вывод ошибок по устаревшим конструкциям:
PHP:
<?php error_reporting(E_ALL ^ E_DEPRECATED);
|
Если не отключать, то в zoneminder-error_log будет накапливаться большое количество сообщений "PHP Deprecated:".
Решение проблемы не прекращающейся записи в режиме Modect. Читать до конца, неожиданная развязка)
Это когда по детектору движения Modect запись стартует, но при прекращении движения не останавливается. Или в режиме Mocord всё пишется в один event.
Не буду описывать весь трёхдневный тернистый поиск решения проблемы. Истинную причину устанавливать не стал/смог ибо закопана глубоко, а ковыряться в дебрях незнакомого C++ кода не изобилующего комментариями весьма проблемотично.
zmc -модуль захватывающий изображение с камеры
zma -модуль анализирующий кадры на наличие движения
В общем оказалось, что по каким-то причинам zmc не прекращает запись кадров после прекращения движения. Правим исходник, в файл /usr/ports/multimedia/zoneminder/work/ZoneMinder-1.25.0/src/zma.cpp вносим следующие изменения, выделены полужирным:
... sigset_t block_set; sigemptyset( &block_set ); bool fna = false; while( !zm_terminate ) { // Process the next image sigprocmask( SIG_BLOCK, &block_set, 0 ); if ( !monitor->Analyse() ) { //time delay us usleep( monitor->Active()?ZM_SAMPLE_RATE:ZM_SUSPENDED_RATE ); //zma once restart if motion stop if(!fna) { fna = true; monitor->Reload(); zm_reload = false; } }else { fna = false; } if ( zm_reload ) { monitor->Reload(); zm_reload = false; } sigprocmask( SIG_UNBLOCK, &block_set, 0 ); } delete monitor; ...
|
В двух словах -это однократный перезапуск монитора после установления факта отсутствия движения. Не знаю почему, но иначе запись не прекращается. Далее в этой директории выполняем команду # make и вновь скомпилированный zma копируем с заменой в /usr/local/bin. Через web интерфейс перезапускаем zoneminder и тестируем modect режим. Теперь он должен работать как задуманно. На сколько получившийся костыль праведный не знаю, покажет время.
Здесь подправленный файл zma.cpp и скомпилированный zma
А теперь о действительной причине и способе её устранения. В базе данных содержится много важных параметров, без которых zoneminder работать не будет. Всё вышеописанное с редактированием исходног кода отменяется. Для устранения проблемы нужно заново создать базу данных zm. Запомнаем настройки камер, удаляем и вновь создаём zm базу данных, как было описанно выше. Затем вновь заполняем её через zm_create.sql, проверил, что лостаточно пересоздать таблицу Monitor, но для надёжности пересоздавал всю таблицу, благо камер настроено было всего 2. И чудо свершилось, не прошло и четверо суток. Eventы создаются в нужное время, правильной длительности, согласно всем настройкам. Проблема была в криво настроенной базе данных. А точнее в какой-то причине, по которой её данные были подпорчены. Точно причину или ситуацию, приводящую к некорректным записям в базе данных пока не выяснил.
Неудобство задания границ зоны, возможно приводящие к искажению записей таблицы Monitor базы данных
Если границы зоны детектирования движения будут выходить за пределы картинки, то ничего работать не будет, не будет видно даже потока с камеры. И в логах будет такое сообщение "Zone 2/All for monitor TL-SC3130 extends outside of image dimensions, 0, 191, 640, 479". Это возможно является причиной, по которой портится база данных и перестают корректно работать Mocord и Modect. Приходится пересоздавать базу данных заново. При задавать границы зоны детектирования движения нужно аккуратно и не делать границы зоны впритык к границам изображения. Думаю, при редактировании границ лучше останавливать zoneminder.
При графическом задании координат зоны можно случайно выйти за границы и вернуться обратно можно только при ручном редактировании координат:
Пробуем разобраться с сокетами, заранне говорю, что нижеописанное является заблуждением и не могу сказать со полной уверенностью, что именно разрешило проблему, но вероятнее всего это установка apache-ant со всем, что к нему прилагается(openjdk7) и компиляция cambozola-0.93 с последующим помещением заново скомпилированного cambozola.jar в …/zoneminder/data + выставление соответствующих прав доступа и владельца -всё это описано выше. Привёл всё как было, чтобы у кого-нибудь не возникло подобной идеи. А теперь описание проблемы:
Кадры с камеры пишутся, обрабатываются, но не работает текушее отображение с камеры.
При запущеном окне отображения текущего изображения с камеры наблюдаем следующее:
Открываем логи zm через web интерфейс и наблюдаем такую ошибку:
socket_sendto( /dev2/zm/zms-765054s.sock ) failed: No such file or directory
Ошибка повторяется раз в 5 секунд. Из логов апача также следует, что какие-то проблемы с сокетами. Но php модуль сокетов загружен, сокеты создаются, при просмотре папки /tmp/zm можем наблюдать наличие сокета:
Но, чтобы увидеть файл сокета нужно четез mc постоянно заходить и выходить из папки в течении секунд 5. Файл сокета после создания через некоторое время, в текущем случае, удаляется. Видим, что имя создаваемого реально сокета и имя ожидаемого сокета не совпадают! У создаваемого в конце 'w', а должна быть 's'. Файл …zoneminder/data/ajax/stream.php содержит функциональность работы с сокетами. В нём и обнаруживаем яко бы нестыковочку: Имя создаваемого сокета:
… $locSockFile = ZM_PATH_SOCKS.'/zms-'.sprintf("%06d",$_REQUEST['connkey']).'w.sock'; … $remSockFile = ZM_PATH_SOCKS.'/zms-'.sprintf("%06d",$_REQUEST['connkey']).'s.sock'; …
|
В обшем меняем 'w' на 's' и теперь сокет появляется и исчезает слишком быстро, чтобы заметить его наличие.
Теперь в логах новая ошибка:
Got unexpected message size, got 5, expected 260
Похоже через сокет приняли не совсем то, что ожидали.
В общем это предположение было от незнания и поиска способа устранения проблемы. Во всех предыдущих версиях zm должно быть w и s. Решение проблемы описано выше.
Настройка ZoneMinder Viewer
Скачиваем http://sourceforge.net/projects/zmviewer/
Распаковываем, запускаем …bin/zmviewer.exe
Session->NewSession настраиваем доступ к базе данных MySql zoneminder, находящейся на сервере. Соответственно проброс порта, если кто за NAT и прописываем соответствующие правила для файервола на сервере. В общем открываем дырищу.
Видим следуюшее сообщение. Значит до сервера через NAT и файервол добрались и MySql установленный на сервере сообщает, что с вашего IP доступ к MySql закрыт.
В MySql создаём второго пользователя для zm базы данных, но не localhost, а IP компьютера, с которого будет производиться доступ к базе данных:
mysql> CREATE USER 'zmu'@'localhost' IDENTIFIED BY 'zmpass'; Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON zm.* TO 'zmu'@'localhost' IDENTIFIED BY 'zmpass' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
mysql> CREATE USER 'zmu'@'%' IDENTIFIED BY 'zmpass'; Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON zm.* TO 'zmu'@'%' IDENTIFIED BY 'zmpass' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
> select user,host from mysql.user; +--------+-----------+ | user | host | +--------+-----------+ | zmu | % | | root | 127.0.0.1 | | root | localhost | | zmu | localhost | +--------+-----------+
|
Т.е. к zm разрешон доступ для самого zoneminder и для любого IP '%'