У вас есть своя панель умного дома на PHP — кнопки для управления светом, температурой, датчиками… А хочется ещё и «окошки» с камерами? Отличная идея! И, что самое приятное, **для этого не нужно ставить полноценный сервер видеонаблюдения** вроде Shinobi или ZoneMinder.
Большинство современных IP-камер умеют отдавать **HTTP-поток** (MJPEG или H.264 через HTTP), который можно встроить в веб-страницу буквально одной строкой HTML. В этой статье я покажу, как это сделать — быстро, безопасно и без нагрузки на Raspberry Pi.
Каждая камера имеет свой «адрес» для HTTP-потока. Вот популярные примеры:
http://192.168.1.50/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password=ваш_пароль
http://192.168.1.60:8080/cgi-bin/mjpg/video.cgi?channel=0
http://192.168.1.70:80/video.mjpg
http://192.168.1.70/mjpeg
http://192.168.1.70/cgi-bin/mjpg/video.cgi
Совет: Чтобы найти точный URL — зайдите в настройки камеры через браузер и ищите раздел «Поток», «Stream», «RTSP/HTTP» или «Интеграция». Также можно поискать в интернете: «[модель камеры] HTTP stream URL».
Просто вставьте найденный URL в адресную строку браузера. Если всё верно — вы увидите **живое видео** (возможно, с запросом логина/пароля).
Если браузер скачивает файл вместо показа видео — поток, скорее всего, в формате FLV или H.264 через HTTP, и его можно встроить через тег <video>
(см. ниже).
Теперь откройте вашу PHP-страницу (например, index.php
) и добавьте один из следующих вариантов.
Если ваша камера отдаёт MJPEG (обычно заканчивается на .mjpg
или .cgi
), используйте тег <img>
:
<div style="border: 1px solid #ccc; display: inline-block;">
<h3>Камера у входа</h3>
<img src="http://admin:password@192.168.1.70/mjpeg" width="640" height="360" alt="Камера">
</div>
Важно! Логин и пароль в URL — это удобно, но небезопасно. Такой способ подходит только для локальной сети без доступа из интернета.
Некоторые камеры (например, Reolink) отдают поток в формате FLV. Современные браузеры его не поддерживают, но можно использовать тег <video>
с JavaScript-библиотекой вроде Video.js. Однако для простоты в локальной сети лучше использовать **VLC-плагин** или перекодировать поток через FFmpeg (это уже сложнее).
Но есть лайфхак: многие камеры Reolink также поддерживают **MJPEG-поток**! Попробуйте:
http://192.168.1.50/mjpeg
Если вы не хотите светить пароль в HTML, можно создать прокси-скрипт на PHP:
Создайте файл camera1.php
:
<?php
// camera1.php
header('Content-Type: multipart/x-mixed-replace; boundary=--myboundary');
$stream = fopen('http://admin:password@192.168.1.70/mjpeg', 'r');
if ($stream) {
while (!feof($stream)) {
echo fread($stream, 8192);
flush();
}
fclose($stream);
}
?>
А в вашей основной странице:
<img src="camera1.php" width="640" height="360">
Предупреждение: Такой скрипт создаёт нагрузку на сервер (каждое подключение = отдельный процесс). Используйте только для 1–2 камер и в локальной сети.
Добавьте несколько камер в сетку:
<div style="display: flex; flex-wrap: wrap; gap: 20px;">
<div>
<h3>Вход</h3>
<img src="http://admin:12345@192.168.1.70/mjpeg" width="480" height="270">
</div>
<div>
<h3>Гараж</h3>
<img src="http://admin:12345@192.168.1.71/mjpeg" width="480" height="270">
</div>
</div>
Теперь у вас есть мини-панель видеонаблюдения прямо в интерфейсе умного дома!
Теперь вы можете легко добавить «живые окна» с камер в свою IoT-панель умного дома — без установки тяжёлых систем, без записи, без нагрузки на Pi. Просто HTML + HTTP-поток = мгновенный результат.
Это решение отлично подходит для:
А если в будущем понадобится запись, уведомления или AI-детекция — тогда уже смотрите в сторону Shinobi или Frigate. Но для простого просмотра — этот способ идеален.
Зачем записывать видео, если вам достаточно **одного кадра в минуту**? Для мониторинга роста растений, уровня воды в бочке или состояния компоста — фото более чем достаточно. Плюсы:

,Если у вас IP-камера с HTTP-снимком (snapshot URL), создайте скрипт:
mkdir -p /mnt/ssd/greenhouse-photos
nano ~/take_photo.sh
Содержимое скрипта:
#!/bin/bash
URL="http://admin:password@192.168.1.50/cgi-bin/snapshot.cgi"
OUTPUT="/mnt/ssd/greenhouse-photos/$(date +\%Y-\%m-\%d_\%H-\%M).jpg"
curl -s "$URL" -o "$OUTPUT"
Важно! Адрес
/cgi-bin/snapshot.cgi
— пример. Уточните URL снимка для вашей камеры (часто называется «Snapshot», «JPEG», «Still Image» в настройках).
Сделайте скрипт исполняемым:
chmod +x ~/take_photo.sh
Добавьте в crontab:
crontab -e
И вставьте строку:
* * * * * /home/pi/take_photo.sh
Теперь каждую минуту будет делаться фото и сохраняться в папку с именем вида: 2024-06-15_14-30.jpg
.
Создайте PHP-файл, например latest_greenhouse_photo.php
:
Текущее состояние теплицы';
echo '
';
} else {
echo 'Нет фото.
';
}
?>
А в корне веб-сервера выполните один раз:
sudo ln -s /mnt/ssd/greenhouse-photos /var/www/html/photos
Теперь в любой части вашей IoT-панели можно вставить:
<?php include 'latest_greenhouse_photo.php'; ?>
И вы будете видеть **самое свежее фото из теплицы** — без видео, без задержек, без лишнего трафика.
Раз в день собирайте фото в видео:
ffmpeg -framerate 10 -pattern_type glob -i "/mnt/ssd/greenhouse-photos/2024-06-15_*.jpg" -c:v libx264 -pix_fmt yuv420p timelapse_2024-06-15.mp4
Или автоматически через cron:
0 0 * * * ffmpeg -framerate 8 -pattern_type glob -i "/mnt/ssd/greenhouse-photos/$(date -d yesterday +\%Y-\%m-\%d)_*.jpg" -c:v libx264 -pix_fmt yuv420p /mnt/ssd/timelapse/$(date -d yesterday +\%Y-\%m-\%d).mp4
Готово! Теперь у вас есть и «живой» снимок, и архив роста растений.
Иногда проще — значит лучше. Особенно когда речь идёт об огурцах 😉
Удачи в автоматизации вашего дома! 🏠📹
Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!