IP камера

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Chainik
Сообщения: 1455
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 246 раз
Поблагодарили: 451 раз

Re: IP камера

Сообщение Chainik » Ср янв 19, 2022 7:24 pm

Не знаю, сработает или нет, но можно попробовать автоматически обновлять страницу:

Код: Выделить всё

<div id="img_reload">
<img src="img.jpg" />
</div>
<script>

setInterval(function(){
var img_tag = '<img src="rtsp://192.168.0.100/user=user_password=password_channel=2_stream=1?img' +Math.random(0,100)+ '" />';
document.getElementById('img_reload').innerHTML = img_tag

}
,
1000);
</script>
Диаф
Сообщения: 31
Зарегистрирован: Пт сен 24, 2021 3:02 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение Диаф » Ср янв 19, 2022 7:42 pm

Моргает кадр.
Попробовал следующую конструкцию:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Image Refresh</title>
</head>

<body>

<!-- Get the initial image. -->
<img id="frame" src="/img/img.jpg" width="440" height="400">

<script>
// Use an off-screen image to load the next frame.
var img = new Image();

// When it is loaded...
img.addEventListener("load", function() {

// Set the on-screen image to the same source. This should be instant because
// it is already loaded.
document.getElementById("frame").src = img.src;

// Schedule loading the next frame.
setTimeout(function() {
img.src = "/img/img.jpg?" + (new Date).getTime();
}, 1000/15); // 15 FPS (more or less)
})

// Start the loading process.
img.src = "/img/img.jpg?" + (new Date).getTime();
</script>
</body>
</html>

Показывает хорошо но после 20 кадров останавливается.
Диаф
Сообщения: 31
Зарегистрирован: Пт сен 24, 2021 3:02 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение Диаф » Ср янв 19, 2022 7:49 pm

Заменил
1000/15
на
1000

Вроде пока нормально. погоняю сутки отпишусь :D
Диаф
Сообщения: 31
Зарегистрирован: Пт сен 24, 2021 3:02 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение Диаф » Чт янв 20, 2022 9:30 am

По ссылке
var img_tag = '<img src="rtsp://192.168.0.100/user=user_password=password_channel=2_stream=1?img' +Math.random(0,100)+ '" />';
не находит изображение.

Работает такой код

<div id="img_reload">
</div>

<script>
setInterval(function(){
var img_tag = '<img src="/img/img.jpg?img' + Math.random(0,100) + '" width="440" height="400"/>';
document.getElementById('img_reload').innerHTML = img_tag
}, 500);
</script>

Но изображение моргает.

Как бы избавится от моргания и будет все просто замечательно .
Диаф
Сообщения: 31
Зарегистрирован: Пт сен 24, 2021 3:02 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение Диаф » Пт янв 21, 2022 7:58 pm

Работает. Не идеально, но работает. Мож кому пригодится.

1. Переходим в каталог - cd /etc/init.d
2. Делаем файл - touch img.sh
3. Заполняем следующим содержимым :

#!/bin/bash
ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.100/user=user_password=password_channel=3_stream=1 -update 1 -y -vf scale=640:-1 /tmp/img.jpg

Где:
-update 1 - время обновления (1 секунда)
- y - всегда на все согласны
- -vf scale=640:-1 - размер картинки (соотношение сторон 640х524 пиксела)
/tmp/img.jpg - выходной файл

4. Делаем его исполняемым - cmod 775 img.sh
5. Переходим в каталог - /etc/systemd/system
6. Делаем файл - touch img.service
7. Заполняем следующим содержимым :

[Unit]
Description=img service
After=network.target
[Service]
ExecStart=/etc/init.d/img.sh
[Install]
WantedBy=multi-user.target

8. Запускаем - systemctl start img
9. Добавляем в автозапуск - systemctl enable img
10. Смотрим - ls /tmp
Должен появится файл img.jpg
11. Переходим в каталог - cd /var/www/html/img
12. Делаем симлинк - ln -s /tmp/img.jpg img.jpg
13. В мажордом делаем элемент тип HTML- камера
14. Дополнительный код JavaScript:

setInterval (function(){
var img_tag = "/img/img.jpg?img" + Math.random(0,1);
document.getElementById('img_reload').src = img_tag
}, 1000);

15. Код:

<div>
<img id="img_reload" src="/img/img.jpg" width="440" height="400"/>
</div>

Недостатки - запаздывает на 1 секунду от видео на DVR, иногда сбоит картинка.
За это сообщение автора Диаф поблагодарили (всего 2):
Svetлая (Ср янв 26, 2022 12:52 pm) • deemjd (Сб мар 12, 2022 10:47 pm)
Рейтинг: 2.35%
deemjd
Сообщения: 58
Зарегистрирован: Чт сен 13, 2018 10:20 pm
Благодарил (а): 30 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение deemjd » Сб мар 12, 2022 10:50 pm

Я правильно понимаю, что суть в том что скриптом через systemd регулярно создаются шоты с камеры и потом выводятся на страничку md?

А возможно ли скрипт запускать из php, настроив его внутри md, например в сценариях (например каждые 5 сек)?
Chainik
Сообщения: 1455
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 246 раз
Поблагодарили: 451 раз

Re: IP камера

Сообщение Chainik » Сб мар 12, 2022 10:58 pm

Конечно, возможно.
Проще всего это сделать с помощью таймеров (https://mjdm.ru/forum/viewtopic.php?f=4&t=1534).
Диаф
Сообщения: 31
Зарегистрирован: Пт сен 24, 2021 3:02 pm
Благодарил (а): 1 раз
Поблагодарили: 4 раза

Re: IP камера

Сообщение Диаф » Сб мар 12, 2022 11:08 pm

наверно и так можно. я не очень силен в php. делал через шел. мне так проще
Аватара пользователя
Krz
Сообщения: 22
Зарегистрирован: Сб мар 24, 2018 3:51 pm
Откуда: Сибирь
Благодарил (а): 2 раза
Поблагодарили: 16 раз

Re: IP камера

Сообщение Krz » Сб апр 30, 2022 5:50 am

deemjd писал(а):
Сб мар 12, 2022 10:50 pm
А возможно ли скрипт запускать из php, настроив его внутри md, например в сценариях (например каждые 5 сек)?
У меня реализовано так, На сцене создан HTML элемент

Код: Выделить всё

<img id="img_reload" width="571px" height="344px" src="http://X.X.X.X/webcapture.jpg?command=snap&channel=1&user=UUUUU&password=PPPPPP" />
X.X.X.X - IP камеры
UUUUU - имя пользователя
PPPPPP - пароль
А вообще строка зависит от вида камеры, в Инете к своей камере надо найти адрес получения снапшота

В строчке "Дополнительный код JavaScript"

Код: Выделить всё

setInterval(function(){document.getElementById('img_reload').src='http://X.X.X.X/webcapture.jpg?command=snap&channel=1&user=UUUUU&password=PPPPPP&math='+Math.random()}, 5000);
5000 - время 5 секунд (в миллисекундах)
Часть &math='+Math.random() камерой не учитывается, но нужна, чтобы URL адрес нового снапшота отличался от предыдущего, иначе скрипт не будет менять изображение, считая, что оно не поменялось.

Работает стабильно уже не первый год.
Для времени обновления можно создать объект с нужным свойством и тогда время обновления можно будет настраивать хоть на самой сцене.
Например

Код: Выделить всё

setInterval(function(){document.getElementById('img_reload').src='http://X.X.X.X/webcapture.jpg?command=snap&channel=1&user=UUUUU&password=PPPPPP&math='+Math.random()}, %Foto.pause%);
За это сообщение автора Krz поблагодарил:
Chainik (Сб апр 30, 2022 8:00 am)
Рейтинг: 1.18%
Изображение
Изображение
Ответить