[Модуль] ONVIF (onvif)
Модератор: immortal
Re: [Модуль] ONVIF (onvif)
Сервер на windows 10 нетбук тоже не могу добиться толковой работы камер видеонаблюдения стоит 4 камеры от Techage с алиэкспресс изображения кусками а иногда вообще никак не грузиться
-
- Сообщения: 1463
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: [Модуль] ONVIF (onvif)
Поставьте "Линию" и не мучайтесь... (https://ab-log.ru/forum/viewtopic.php?f ... 573#p33573).
- woow
- Сообщения: 821
- Зарегистрирован: Пн июл 04, 2016 8:46 am
- Откуда: Mazeikiai
- Благодарил (а): 125 раз
- Поблагодарили: 46 раз
Re: [Модуль] ONVIF (onvif)
чего ещё не хватает, в имидж v4_44_int.7z записал этот кодек
sudo apt-get install ffmpeg
картинки всё ровно нет. Раньше этого было достаточно.
sudo apt-get install ffmpeg
картинки всё ровно нет. Раньше этого было достаточно.
Raspberry Pi 3B+
-
- Сообщения: 61
- Зарегистрирован: Пн апр 23, 2018 11:10 am
- Благодарил (а): 16 раз
- Поблагодарили: 29 раз
Re: Модуль ONVIF
Эта ошибка возникает потому что модуль передает неправильный идентификатор конфига в эту функцию. Чтобы исправить это, добавьте следующий код в 234 строке в файле modules/onvif/onvif.class.php:nick7zmail писал(а): ↑Пт мар 03, 2017 5:08 pmКод: Выделить всё
Fatal error: Uncaught exception 'Exception' with message 'GetStreamUri: Communication error'
Код: Выделить всё
try {
$mediaUri = $onvif_object->media_GetStreamUri($profileToken);
} catch(Exception $e) {
continue;
}
Re: [Модуль] ONVIF (onvif)
Прошерстил всю тему - пару раз поднимался вопрос про неотрисовку нижней полосы на изображении с камер. У меня несколько камер добавлены на сцену - периодически (часто) не отрисовывается нижняя полоса, где-то 10-15% от высоты (виден фон). Есть идеи, куда копать?
- woow
- Сообщения: 821
- Зарегистрирован: Пн июл 04, 2016 8:46 am
- Откуда: Mazeikiai
- Благодарил (а): 125 раз
- Поблагодарили: 46 раз
Re: [Модуль] ONVIF (onvif)
Безполезная затея, ни кто неможет это исправить.pavelplus писал(а): ↑Ср янв 12, 2022 3:37 pmПрошерстил всю тему - пару раз поднимался вопрос про неотрисовку нижней полосы на изображении с камер. У меня несколько камер добавлены на сцену - периодически (часто) не отрисовывается нижняя полоса, где-то 10-15% от высоты (виден фон). Есть идеи, куда копать?
Raspberry Pi 3B+
-
- Сообщения: 7
- Зарегистрирован: Ср окт 16, 2019 6:29 pm
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
-
- Сообщения: 4
- Зарегистрирован: Сб июл 23, 2022 1:05 pm
- Благодарил (а): 0
- Поблагодарили: 5 раз
Re: [Модуль] ONVIF (onvif)
В разных ветках повстречал похожие коменты с проблемой показа RTSP потоков с IP камер. И да, браузеры не поддерживают показ стрима в rtsp формате. то есть мы должны сначала такой поток перекодировать в какой-нибудь удобоваримый для браузеров стримовый формат и дальше запереть в какой-нибудь player, куда и выведем поток видео с камеры или нескольких камер
Возможно кому-то пригодится.
1. Самой популярной библиотекой на сегодня для того, чтобы издеваться над медиа ) имеем ffmpeg разберемся с ним.
Хочется сразу отметить что если ffmpeg по умолчанию не был включен в официальную сборку ос установленной на вашей машине, как например в моем случае rasbian (raspberry Pi4), то простая установка с автоматической сборкой как под это бывает под другие архитектуры - вероятно, и даже скорее всего у вас не будет работать.
То есть как бы это ни было печально, но для нас не прокатит просто выполнить вот эту заветную команду
Нам нужно собрать все это хозяйство вручную, что мы и сделаем.
Процедуру сборки FFMPEG опускаем в конец поста
2. Будем считать, что наш FFmpeg жив здоров и готов к работе .
Переходим к нашему стриму. Цель - вывести в браузер в обычном проигрывателе потоки с наших камер.
Если бы я был не новым юзером MD, то логично бы было набросать модуль который бы все сам сделал, а может и не логично.
Поэтому соорудим простую страничку HTML5 и включим ее в ваш md проект или просто вставим готовый код уже куда угодно инструментами md
а) Нам нужно забрать поток с IP камеры и передать его уже в другом формате в браузер.
Если бы мы решили RTSP поток перекодировать на лету - мы бы забрали на это действо все или почти все ресурсы нашей машины. Поэтому мы этого делать не будем, а будем на лету его копировать , делить его на сегменты плейлиста и отдавать плееру уже готовый playlist в формате m3u8, который прекрасно будет проигрываться в браузере
Для этого нам подойдет такая команда )
возможно вам нужно запускать это все от пользователя root, тогда добавим перед ffmpeg sudo. Будет
# Вам надо заменить в этом моем запросе на соответствующие своей камере следующие части
https://demr.ru/url-adresa-rtsp-i-porty ... telej.html
# замените
Команду можно обернуть в php и поместить в сценарии,( если не хотите, чтобы процесс копирования потока работал 24/7 , а запускать и останавливать его кнопкой под плеером, когда вы пришли на него полюбоваться ( про нагрузку от работы FFmpeg чуть ниже - она реально незаметна ) . Можно использовать его при перезапуске, чтобы не умирал после перезагрузки машины ваш стрим и тп
создадим сценарий например: streamConverter
и навесим его на какие-нибудь кнопки или используем куда-нибудь еще.
возможно вам нужно запускать это все от пользователя root, тогда добавим перед ffmpeg sudo. Будет
С запуском нашего стрима разобрались, теперь нам нужен плеер ( возможно он есть в готовых модулях MD) - пусть будет альтернатива еще одна :
Мне нравится Video.js - его и используем.
Есть два варианта - ничего не ставим на сервере , а берем и встраиваем нужные нам файлы с удалённых серверов, либо для гурманов можем поставить необходимое самостоятельно к себе .
Вариант с чужими серверами :
Создадим в папке, в которую попадает наш готовый файл плейлиста camera1.m3u8 новый файл index.html и скопируем в него следующий код
Нужно в коде заменить на свой адрес, где лежит ваш плейлист . Тот , что мы указали в коде командной строки
у меня он такой
Дальше можно изменить настройки размеров окна проигрывателя
и нужно забросить картинку в ту же папку. Эта картинка будет заглушкой перед тем как вы нажмете в плеере кнопку play.Укажите название файла вот здесь :
Плеер имеет множество настроек и скинов - можете экспериментировать - читайте здесь : https://videojs.com/guides
Для тех, кто хочет вместо этого поставить Video.js себе . Действуем через npm
С плеером завершаем.
Сохраним файл index.html в папку , которую вы выбрали для него
Теперь запустим поток конвертации из командной строки либо из сценария , который вы создали :
идем в терминал и запускаем
либо под рутом
либо под собой
После запуска в нашей папке с плеером начинают накапливаться сегменты, из которых собирается плейлист стрима. Это файлы по 200-500Кб Чтобы их не накопилось слишком много, сделаем какой-нибудь сценарий, который по крону запускаем например раз день ну или как часто надо.
назовем его cleanStreamFiles
Пишем что-то типа такого в сценарии
заменим
И переходим на страничку с плеером, либо туда, куда вы встроили плеер. Любуемся красотами )
у меня дачная камера показывает вот так О нагрузках. Все это вертится у меня на Raspberry Pi4 8Gb
Специально запустил два потока . Как видно сервер не замечает их присутствия
--------------------
ДЛЯ ТЕХ КОМУ НУЖНО. Возвращаясь к самому первому пункту
---- собираем FFMPEG
Итак нам понадобятся для сборки как минимум библиотеки кодеков AAC, MP3 и H264.
Обычно для установки чего либо, требуются права root. Для того, чтобы не вводить каждый раз sudo – сделаем это один раз
Для работы со звуком ставим ALSA headers и соответствующие библиотеки
после установки ALSA headers расположатся в /usr/include/alsa, а библиотеки в /usr/lib/arm-linux-gnueabihf
На всякий случай собираем YASM - assembler для H264 и ffmpeg
# скачиваем yasm
# распаковываем
# заходим в папку с yasm
# запускаем конфигуратор
# компилируем с использованием всех 4-х ядер процессора - параметр -j4 (только в том случае если у вас 4-х ядерный процессор, иначе работать не будет)
# устанавливаем
Соберем кодек H264. !важно указать параметр –disable-asm в конфигураторе.
Если еще не установили то сначала установим git
и продолжаем
Следующим собираем MP3 кодек. Библиотеки будут установлены в /usr/local/lib/libmp3lame
Собираем AAC encoder
И теперь мы готовы собрать FFMPEG. В итоге библиотеки ffmpeg будут установлены в /usr/bin/ffmpg.
Компиляция ffmpeg может занять минут 5-10-15 в зависимости от железа
Все кодеки мы установили в папку /usr/local/lib, соответственно нам надо рассказать об этом ffmpeg
Возможно кому-то пригодится.
1. Самой популярной библиотекой на сегодня для того, чтобы издеваться над медиа ) имеем ffmpeg разберемся с ним.
Хочется сразу отметить что если ffmpeg по умолчанию не был включен в официальную сборку ос установленной на вашей машине, как например в моем случае rasbian (raspberry Pi4), то простая установка с автоматической сборкой как под это бывает под другие архитектуры - вероятно, и даже скорее всего у вас не будет работать.
То есть как бы это ни было печально, но для нас не прокатит просто выполнить вот эту заветную команду
Код: Выделить всё
sudo apt-get install ffmpeg
Процедуру сборки FFMPEG опускаем в конец поста
2. Будем считать, что наш FFmpeg жив здоров и готов к работе .
Переходим к нашему стриму. Цель - вывести в браузер в обычном проигрывателе потоки с наших камер.
Если бы я был не новым юзером MD, то логично бы было набросать модуль который бы все сам сделал, а может и не логично.
Поэтому соорудим простую страничку HTML5 и включим ее в ваш md проект или просто вставим готовый код уже куда угодно инструментами md
а) Нам нужно забрать поток с IP камеры и передать его уже в другом формате в браузер.
Если бы мы решили RTSP поток перекодировать на лету - мы бы забрали на это действо все или почти все ресурсы нашей машины. Поэтому мы этого делать не будем, а будем на лету его копировать , делить его на сегменты плейлиста и отдавать плееру уже готовый playlist в формате m3u8, который прекрасно будет проигрываться в браузере
Для этого нам подойдет такая команда )
Код: Выделить всё
ffmpeg -use_wallclock_as_timestamps 1 -v info -i rtsp://admin:*****@192.168.1.123:554/live/ch00_1 -c:v copy -c:a copy -strftime 1 -bufsize 1835k -pix_fmt yuv420p -flags -global_header -reset_timestamps 1 -start_number 1 /var/www/html/cms/html/streamplayer/camera1.m3u8
Код: Выделить всё
sudo ffmpeg -use_wallclock_as_timestamps ....
Здесь укажите адрес RTSP потока вашей камеры с юзером и паролем. Для моей он такой - у вас другой. Адреса и порты для разных камер можно поискать например здесь :rtsp://admin:*****@192.168.1.123:554/live/ch00_1
https://demr.ru/url-adresa-rtsp-i-porty ... telej.html
# замените
укажите путь к папке( создайте папку где вам удобно (она у меня называется streamplayer - в нее же мы позже положим свой html файл с плеером). В эту же папку FFmpeg автоматически создаст и положит файл плейлиста для вашей камеры "camera1.m3u8" (можете назвать по-своему). Туда же будут лететь сегменты, на которые он будет делить поток во время копирования/var/www/html/cms/html/streamplayer/camera1.m3u8
Команду можно обернуть в php и поместить в сценарии,( если не хотите, чтобы процесс копирования потока работал 24/7 , а запускать и останавливать его кнопкой под плеером, когда вы пришли на него полюбоваться ( про нагрузку от работы FFmpeg чуть ниже - она реально незаметна ) . Можно использовать его при перезапуске, чтобы не умирал после перезагрузки машины ваш стрим и тп
создадим сценарий например: streamConverter
Код: Выделить всё
$CommandCamera1 = 'ffmpeg -use_wallclock_as_timestamps 1 -v info -i rtsp://admin:password@192.168.1.123:554/live/ch00_1 -c:v copy -c:a copy -strftime 1 -bufsize 1835k -pix_fmt yuv420p -flags -global_header -reset_timestamps 1 -start_number 1 /var/www/html/cms/html/streamplayer/camera1.m3u8';
shell_exec($CommandCamera1);
возможно вам нужно запускать это все от пользователя root, тогда добавим перед ffmpeg sudo. Будет
Код: Выделить всё
$CommandCamera1 = 'sudo ffmpeg -use_wallclock_as_timestamps 1 ....
Мне нравится Video.js - его и используем.
Есть два варианта - ничего не ставим на сервере , а берем и встраиваем нужные нам файлы с удалённых серверов, либо для гурманов можем поставить необходимое самостоятельно к себе .
Вариант с чужими серверами :
Создадим в папке, в которую попадает наш готовый файл плейлиста camera1.m3u8 новый файл index.html и скопируем в него следующий код
Код: Выделить всё
<!DOCTYPE html>
<html>
<head>
<link href="https://vjs.zencdn.net/7.20.1/video-js.css" rel="stylesheet" />
</head>
<body>
<video
id="my-video"
class="video-js"
controls
preload="auto"
height = "270"
width = "480"
poster="tv.jpg"
data-setup="{}"
>
<source src="http://192.168.1.188/cms/html/streamplayer/camera1.m3u8" type="application/x-mpegURL">
<p class="vjs-no-js">
Обновите браузер до версии
<a href="https://videojs.com/html5-video-support/" target="_blank">которая поддержвает HTML5 video</a>
</p>
</video>
<script src="https://vjs.zencdn.net/7.20.1/video.min.js"></script>
</body>
у меня он такой
Код: Выделить всё
http://192.168.1.188/cms/html/streamplayer/camera1.m3u8"
Код: Выделить всё
height = "270"
width = "480"
Код: Выделить всё
poster="tv.jpg"
Для тех, кто хочет вместо этого поставить Video.js себе . Действуем через npm
Код: Выделить всё
$ npm install --save-dev video.js
Сохраним файл index.html в папку , которую вы выбрали для него
Теперь запустим поток конвертации из командной строки либо из сценария , который вы создали :
идем в терминал и запускаем
либо под рутом
Код: Выделить всё
sudo ffmpeg -use_wallclock_as_timestamps 1 -v info -i rtsp://admin:*****@192.168.1.123:554/live/ch00_1 -c:v copy -c:a copy -strftime 1 -bufsize 1835k -pix_fmt yuv420p -flags -global_header -reset_timestamps 1 -start_number 1 /var/www/html/cms/html/streamplayer/camera1.m3u8
Код: Выделить всё
ffmpeg -use_wallclock_as_timestamps 1 -v info -i rtsp://admin:*****@192.168.1.123:554/live/ch00_1 -c:v copy -c:a copy -strftime 1 -bufsize 1835k -pix_fmt yuv420p -flags -global_header -reset_timestamps 1 -start_number 1 /var/www/html/cms/html/streamplayer/camera1.m3u8
После запуска в нашей папке с плеером начинают накапливаться сегменты, из которых собирается плейлист стрима. Это файлы по 200-500Кб Чтобы их не накопилось слишком много, сделаем какой-нибудь сценарий, который по крону запускаем например раз день ну или как часто надо.
назовем его cleanStreamFiles
Пишем что-то типа такого в сценарии
Код: Выделить всё
$dir = ROOT."cms/html/streamplayer/";
foreach (glob($dir."*.ts") as $file) {
if (filemtime($file) < time() - 1*1*60*60) {
@unlink($file);
}
}
на путь к своей папкеcms/html/streamplayer/
И переходим на страничку с плеером, либо туда, куда вы встроили плеер. Любуемся красотами )
у меня дачная камера показывает вот так О нагрузках. Все это вертится у меня на Raspberry Pi4 8Gb
Специально запустил два потока . Как видно сервер не замечает их присутствия
--------------------
ДЛЯ ТЕХ КОМУ НУЖНО. Возвращаясь к самому первому пункту
---- собираем FFMPEG
Итак нам понадобятся для сборки как минимум библиотеки кодеков AAC, MP3 и H264.
Обычно для установки чего либо, требуются права root. Для того, чтобы не вводить каждый раз sudo – сделаем это один раз
Код: Выделить всё
sudo su
Код: Выделить всё
apt-get update
apt-get install libasound2-dev
На всякий случай собираем YASM - assembler для H264 и ffmpeg
Код: Выделить всё
cd /usr/src
Код: Выделить всё
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
Код: Выделить всё
tar xzvf yasm-1.3.0.tar.gz
Код: Выделить всё
cd yasm-1.3.0
Код: Выделить всё
./configure
Код: Выделить всё
make -j4
Код: Выделить всё
make install
Если еще не установили то сначала установим git
Код: Выделить всё
apt-get install git
Код: Выделить всё
cd /usr/src
git clone git://git.videolan.org/x264
cd x264
./configure --disable-asm --enable-shared
компилируем с параметром -j4 (использовать все 4 ядра процессора, намного ускоряет весь процесс)
make -j4
make install
Код: Выделить всё
cd /usr/src
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.tar.gz
cd lame-3.99
./configure
make -j4
make install
Код: Выделить всё
cd /usr/src
curl -#LO https://jztkft.dl.sourceforge.net/project/faac/faac-src/faac-1.29/faac-1.29.9.2.tar.gz
tar xzvf faac-1.29.tar.gz
cd faac-1.29
./configure
make -j4
make install
Компиляция ffmpeg может занять минут 5-10-15 в зависимости от железа
Код: Выделить всё
cd /usr/src/
git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --enable-shared --enable-gpl --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-libfaac --enable-libx264 --enable-version3 --disable-mmx
make -j4
make install
Код: Выделить всё
echo "/usr/local/lib" > /etc/ld.so.conf.d/libx264.conf
ldconfig
- За это сообщение автора overflow поблагодарили (всего 4):
- xor (Сб июл 23, 2022 8:24 pm) • Samir77 (Сб июл 23, 2022 10:14 pm) • Chainik (Сб июл 23, 2022 11:18 pm) • Sapizdullin (Сб авг 20, 2022 9:02 am)
- Рейтинг: 4.65%
-
- Сообщения: 4
- Зарегистрирован: Сб июл 23, 2022 1:05 pm
- Благодарил (а): 0
- Поблагодарили: 5 раз
Re: [Модуль] ONVIF (onvif)
Скорее всего проблема кроется разрешении вашего видео. Например ваша камера стримит в fullhd 1920x1080, а вы ставите в настройках камеры ей на вывод разрешение hd 1280x720. Дальше где-то сбоит либо кодек камеры, либо железо, либо библиотеки плеера, которые выводят все это хозяйство на сцену. Либо все вместе. Как бы-то ни было проблема наверное тамpavelplus писал(а): ↑Ср янв 12, 2022 3:37 pmПрошерстил всю тему - пару раз поднимался вопрос про неотрисовку нижней полосы на изображении с камер. У меня несколько камер добавлены на сцену - периодически (часто) не отрисовывается нижняя полоса, где-то 10-15% от высоты (виден фон). Есть идеи, куда копать?
-
- Сообщения: 216
- Зарегистрирован: Ср май 28, 2014 12:42 pm
- Откуда: Санкт-Петерург
- Благодарил (а): 76 раз
- Поблагодарили: 28 раз
Re: [Модуль] ONVIF (onvif)
У меня было похожее - помогло добавление в параметры ffmpeg ключа "-rtsp_transport tcp"pavelplus писал(а): ↑Ср янв 12, 2022 3:37 pmПрошерстил всю тему - пару раз поднимался вопрос про неотрисовку нижней полосы на изображении с камер. У меня несколько камер добавлены на сцену - периодически (часто) не отрисовывается нижняя полоса, где-то 10-15% от высоты (виден фон). Есть идеи, куда копать?
- Рейтинг: 1.16%