Категории

Чет я подумал, видеосервер на распбери слишком жирно для пары камер

2025-10-03 08:24:11 | Статья из категории: IOT умный дом

У вас есть своя панель умного дома на PHP — кнопки для управления светом, температурой, датчиками… А хочется ещё и «окошки» с камерами? Отличная идея! И, что самое приятное, **для этого не нужно ставить полноценный сервер видеонаблюдения** вроде Shinobi или ZoneMinder.

Большинство современных IP-камер умеют отдавать **HTTP-поток** (MJPEG или H.264 через HTTP), который можно встроить в веб-страницу буквально одной строкой HTML. В этой статье я покажу, как это сделать — быстро, безопасно и без нагрузки на Raspberry Pi.

Что нужно знать перед началом

Шаг 1: Найдите URL видеопотока вашей камеры

Каждая камера имеет свой «адрес» для HTTP-потока. Вот популярные примеры:

Reolink (серии RLC, RLC-A)

http://192.168.1.50/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password=ваш_пароль

Xiaomi / Yi Home (с прошивкой без облака, например, через Yi Hack)

http://192.168.1.60:8080/cgi-bin/mjpg/video.cgi?channel=0

ONVIF-камеры (TP-Link, Hikvision, Dahua и др.)

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».

Шаг 2: Проверьте поток в браузере

Просто вставьте найденный URL в адресную строку браузера. Если всё верно — вы увидите **живое видео** (возможно, с запросом логина/пароля).

Если браузер скачивает файл вместо показа видео — поток, скорее всего, в формате FLV или H.264 через HTTP, и его можно встроить через тег <video> (см. ниже).

Шаг 3: Встройте поток в вашу PHP-панель

Теперь откройте вашу PHP-страницу (например, index.php) и добавьте один из следующих вариантов.

Вариант A: MJPEG-поток (самый простой)

Если ваша камера отдаёт 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 — это удобно, но небезопасно. Такой способ подходит только для локальной сети без доступа из интернета.

Вариант B: H.264 через HTTP (FLV, HLS)

Некоторые камеры (например, Reolink) отдают поток в формате FLV. Современные браузеры его не поддерживают, но можно использовать тег <video> с JavaScript-библиотекой вроде Video.js. Однако для простоты в локальной сети лучше использовать **VLC-плагин** или перекодировать поток через FFmpeg (это уже сложнее).

Но есть лайфхак: многие камеры Reolink также поддерживают **MJPEG-поток**! Попробуйте:

http://192.168.1.50/mjpeg

Вариант C: Без пароля в URL (безопаснее)

Если вы не хотите светить пароль в 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 камер и в локальной сети.

Шаг 4: Сделайте панель удобной

Добавьте несколько камер в сетку:

<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

Запуск раз в минуту через cron

Добавьте в crontab:

crontab -e

И вставьте строку:

* * * * * /home/pi/take_photo.sh

Теперь каждую минуту будет делаться фото и сохраняться в папку с именем вида: 2024-06-15_14-30.jpg.

Показ последнего фото в вашей IoT-панели

Создайте 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татьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.

Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA
Кто я | HSH | Контакты и регион