• Zoneminder, система для видеонаблюдения

 #10815   IgorA100
 23 июл 2025, 13:27
header=0 or header=hidden in the request to hide the top bars.
navbar_type=normal - верхнее меню
navbar_type=left - новое левое меню
navbar_type=collapsed- верхнее меню минимизировано
 #10852   IgorA100
 21 янв 2026, 22:24
Установка RTSPToWeb (RTSP2Web ): https://forums.zoneminder.com/
После установки будет доступно: http://Х.Х.Х.Х:8083/pages/stream/list

Описание полного процесса установки в Ubuntu:

Код: Выделить всёcd /usr/share
git clone https://github.com/deepch/RTSPtoWeb

Рекомендуется внести изменения в соответствии со следующими PR:
https://github.com/deepch/RTSPtoWeb/pull/496
https://github.com/deepch/RTSPtoWeb/pull/485

На странице https://go.dev/dl/ мы находим нужную версию, например https://go.dev/dl/go1.24.1.linux-amd64.tar.gz
и скачать:

Код: Выделить всёwget https://go.dev/dl/go1.24.1.linux-amd64.tar.gz
sudo tar -xvf go1.24.1.linux-amd64.tar.gz
rm go1.24.1.linux-amd64.tar.gz
export GOROOT=/usr/share/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
source ~/.profile

Описание установки GO: https://go.dev/doc/install

Проверьте с помощью команды:
Код: Выделить всёgo version

Проверка работы RTSPtoWeb
Код: Выделить всёcd RTSPtoWeb/
GO111MODULE=on go run *.go

После первого выполнения этой команды будут загружены необходимые зависимости и запущен RTSPtoWeb.
Если все прошло успешно, создайте демон для автоматической загрузки.

Код: Выделить всёcat > /etc/systemd/system/rtsptoweb.service

Вставьте код в созданный файл демона (необходимо указать собственные пути!):

Код: Выделить всё[Unit]
Description=Service for RTSPtoWeb

[Service]
User=root
WorkingDirectory=/usr/share/RTSPtoWeb
ExecStart=/bin/bash -c 'cd /usr/share/RTSPtoWeb && GO111MODULE=on /usr/share/go/bin/go run *.go'
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
Type=simple
SyslogIdentifier=RTSPtoWeb

[Install]
WantedBy=multi-user.target

Нажмите Ctrl+C, и данные будут сохранены в файле. Затем выполните команды

Код: Выделить всёsystemctl enable rtsptoweb.service
systemctl start rtsptoweb.service

Проверить:
Код: Выделить всёnetstat -lnp | grep 8083


Если вносились какие-то правки в конфиг демона, то нужно выполнить:
Код: Выделить всёsystemctl daemon-reload

Правила для Iptables:

Код: Выделить всё-A PREROUTING -p tcp --dport 8083 -j DNAT --to-destination LOCAL_IP_ZM:8083  --dst WAN_IP_GW
-A POSTROUTING -p tcp --dport 8083 -j SNAT --to-source LOCAL_IP_GW  --dst LOCAL_IP_ZM
-A OUTPUT -p tcp --dport 8083 -j DNAT --to-destination LOCAL_IP_ZM:8083  --dst WAN_IP_GW
-A INPUT -p tcp -m tcp --dport 8083 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 8083 -j ACCEPT

WAN_IP_GW — внешний IP-адрес шлюза
LOCAL_IP_GW — локальный IP-адрес шлюза
LOCAL_IP_ZM — локальный IP-адрес, на котором установлен ZM

Для type=WebRTC используйте аудиокодек G.711A
Для type=MSE используйте аудиокодек AAC

Настроим логирование в отдельный файл и ротацию лога.
Создаем файл /etc/rsyslog.d/rtsptoweb.conf с содержимым:
Код: Выделить всёif $programname == 'RTSPtoWeb' then /opt/RTSPtoWeb/log/rtsptoweb.log
& stop

Где $programname должно быть указано точно как в SyslogIdentifier в демоне !

Далее выполнить:
Код: Выделить всёsystemctl restart rsyslog


Ротация логов:
Создаем файл: /etc/logrotate.d/rtsptoweb с содержимым:
Код: Выделить всё/var/log/rtsptoweb.log {
       weekly
       rotate 7
       delaycompress
       compress
       notifempty
       missingok
       size 500M
}

И выполняем:
Код: Выделить всёsystemctl restart logrotate
 #10877   IgorA100
 03 май 2026, 20:00
Проверка RTSP потока с камеры:
Код: Выделить всё/usr/bin/ffprobe -i 'rtsp://ЛОГИН:ПАРОЛЬ@192.168.111.115:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif'
/usr/bin/ffmpeg -rtsp_transport udp -i 'rtsp://ЛОГИН:ПАРОЛЬ@172.16.27.88:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif' -r 30 -vcodec copy -an -t 300 ~/output.mp4 -loglevel debug
 #10889   IgorA100
 15 июн 2026, 14:49
Установка из исходников:
Код: Выделить всёwget https://raw.githubusercontent.com/ZoneMinder/ZoneMinder/master/utils/do_debian_package.sh
chmod a+x do_debian_package.sh
sudo apt-get update
./do_debian_package.sh --snapshot=NOW --branch=master --type=local
или
./do_debian_package.sh --snapshot=stable --type=local

или
Код: Выделить всё./do_debian_package.sh --branch=fix-connkey-regeneration --fork=connortechnology --type=binary

Если не указали автоинсталяцию, то необходимо переустановить такет так:
Код: Выделить всёapt install --reinstall ./zoneminder_1.39.22~20260821100611-noble_amd64.deb

https://zoneminder.readthedocs.io/en/st ... iscouraged
 #10892   IgorA100
 22 июл 2026, 17:38
Отладка FFMEG в файле "\src\zm_ffmpeg_camera.cpp"
После строки
Код: Выделить всёret = avcodec_open2(mVideoCodecContext, mVideoCodec, &opts);

добавить:
Код: Выделить всёDebug(1,
    "Codec name = %s,  caps=0x%x, codec id=%d, thread_count=%d, thread_type=%d, active_thread_type=%d, delay=%d, gop=%d, has_b_frames=%d, max_b_frames=%d",
    mVideoCodec->name,
    mVideoCodec->capabilities,
    mVideoCodec->id,
    mVideoCodecContext->thread_count,
    mVideoCodecContext->thread_type,
    mVideoCodecContext->active_thread_type,
    mVideoCodecContext->delay,
    mVideoCodecContext->gop_size,
    mVideoCodecContext->has_b_frames,
    mVideoCodecContext->max_b_frames);
 #10896   IgorA100
 Сегодня, 17:27
Для выведения всех настроек монитора в файл необходимо через SSH выполнить код:
Код: Выделить всёmysql -u root -p --batch --raw zm -e "
SET SESSION group_concat_max_len = 100000;

SELECT GROUP_CONCAT(
    CONCAT(
        'SELECT ',
        QUOTE(COLUMN_NAME),
        ' AS \`Название настройки\`, ',
        'CAST(\`', REPLACE(COLUMN_NAME, '\`', '\`\`'),
        '\` AS CHAR) AS \`Значение\` ',
        'FROM \`zm\`.\`Monitors\` WHERE \`Id\` = 5'
    )
    ORDER BY ORDINAL_POSITION
    SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'zm'
  AND TABLE_NAME = 'Monitors';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
" > /tmp/monitor5.txt 2>/tmp/monitor5.err



или такой код (с багфиксом переноса строк):
Код: Выделить всёmysql -u root -p --batch --raw zm -e "
SET SESSION group_concat_max_len = 100000;

SELECT GROUP_CONCAT(
    CONCAT(
        'SELECT ',
        QUOTE(COLUMN_NAME),
        ' AS \`Настройка\`, ',
        'REPLACE(REPLACE(REPLACE(',
        'COALESCE(CAST(\`', REPLACE(COLUMN_NAME, '\`', '\`\`'),
        '\` AS CHAR), ''NULL''), ',
        'CHAR(9), ''\\\\t''), ',
        'CHAR(10), ''\\\\n''), ',
        'CHAR(13), ''\\\\r'') AS \`Значение\` ',
        'FROM \`zm\`.\`Monitors\` WHERE \`Id\` = 5'
    )
    ORDER BY ORDINAL_POSITION
    SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'zm'
  AND TABLE_NAME = 'Monitors';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
" > /tmp/monitor5.txt


Либо можно выполнить такой код в PhpMyAdmin, но длинные строки будут обрезаны:
Код: Выделить всёSET SESSION group_concat_max_len = 100000;

SELECT GROUP_CONCAT(
    CONCAT(
        'SELECT ',
        QUOTE(COLUMN_NAME),
        ' AS `Название настройки`, ',
        'CAST(`', REPLACE(COLUMN_NAME, '`', '``'),
        '` AS CHAR) AS `Значение` ',
        'FROM `zm`.`Monitors` WHERE `Id` = 5'
    )
    ORDER BY ORDINAL_POSITION
    SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'zm'
  AND TABLE_NAME = 'Monitors';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;