Данный проект базируется на технологии о которой я рассказывал в предыдущих статьях: один, два, три.
Аппаратная часть
Для получения рабочего устройства на самом деле нужно всего 2 основных компонента:
Плата ARM микрокомпьютера
Модуль камеры
При желании добавить возможность использовать единственный кабель и для передачи данных и для питания понадобятся:
PoE Hat плата совместимая с вашим ARM устройством
Коммутатор (роутер) с поддержкой PoE, либо PoE инжектор
Без PoE вполне можно обойтись, если использования двух кабелей (для передачи данных и питания) вас не смущает. Мне же наличие такого функционала показалось удобным, тем более что коммутатор с поддержкой PoE уже имелся в наличии.
Из дополнительных компонентов очевидно могут понадобиться:
Блок питания
Радиатор для процессора (или корпус выполняющий функцию радиатора)
Micro SD карта - для операционной системы и дополнительного ПО (>= 8Gb)
Кардридер - для записи операционной системы
Вариантов комбинаций конкретных компонентов конечно же много. В моем случае, в качестве основы была выбрана линейка Raspberry Pi, как самая распространенная и стабильная. Привожу весь список используемых компонентов:




В процессе сборки выяснилось, что поскольку PoE модуль существенно добавляет высоты итоговой конструкции, и штатной длины шлейфа модуля камеры перестает хватать - понадобилось докупить соединительную плату и FFC шлейф:


Raspberrry Pi Zero 2W и Raspberry Pi 5 используют 22 пиновый шлейф с шагом в 0.5 мм, Raspberry Pi 3/4 - 15 пиновый с шагом в 1 мм. Существуют и переходные кабели.
Кроме того, поскольку логика крепления PoE модуля не очень сочетается с креплением модуля камеры, основной платы и радиатора - дополнительно пришлось подбирать стойки для печатных плат "по месту":

С платами типа Raspberry Pi для крепления обычно используется резьба М2,5.
Вот так выглядит то что у меня получилось в конечном итоге:

С аппаратной частью мы закончили - пора переходить к программной.
Программная часть
Первое что необходимо установить - это операционная система. Скачиваем Raspberry Pi Imager и записываем образ операционной системы на Micro SD карту.
Кучка скучных скриншотов для тех кому интересно как это выглядит...













Далее вынимаем Micro SD карту из кардридера и вставляем в соответствующий слот Raspberry Pi.
Дальнейшую настройку можно проводить как непосредственно на устройстве (для этого потребуется подключить к устройству монитор и клавиатуру), так и через SSH. Лично я предпочитаю последнее.
Для определения IP адреса под которым устройство будет зарегистрировано в локальной сети возможно потребуется заглянуть в настройки вашего роутера.
Подключаем Ethernet кабель (и возможно питание) и ждем завершения загрузки операционной системы.
Далее подключаемся с помощью ssh к устройству (если вы используете Windows, можно использовать известную утилиту PuTTY):
$ ssh pi@rpi-zero
Linux rpi-zero 6.18.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.18.34-1+rpt1 (2026-06-09) aarch64The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
SSH is enabled and the default password for the ‘pi’ user has not been changed. This is a security risk - please login as the ‘pi’ user and type ‘passwd’ to set a new password.
pi@rpi-zero:~ $
Обновляем пакеты операционной системы до последней версии:
pi@rpi-zero:~ $ sudo apt update && sudo apt upgrade -y
Устанавливаем snapd (необходимо, поскольку основное приложение распространяется в виде snap пакета):
pi@rpi-zero:~ $ sudo apt install snapd -y
Устанавливаем последнюю версию приложения для стриминга видео с подключенной CSI камеры (исходный код приложения доступен на GitHub):
pi@rpi-zero:~ $ sudo snap install webrtsp-camera-streamer --edge
Собственно на этом первичная настройка закончена. Можно открыть в браузере http://192.186.x.x:5080 (где 192.186.x.x IP адрес Raspberry Pi Zero) и насладиться результатом:

Удаленный доступ к камере
С удаленным доступом все несколько сложнее. Основных вариантов 2:
Настройка port forwarding на роутере. Поскольку данный вариант имеет определенные недостатки, его настройку я опущу, но при необходимости можно воспользоваться инструкцией на GitHub.
Установка промежуточного сервера в облаке - об этом варианте я и расскажу далее
Установка и настройка промежуточного сервера в облаке
Для реализации этого варианта очевидно необходимо приобрести VPS у одного из облачных провайдеров. Поскольку сервер в основном предназначен для обмена служебными сообщениями между сторонами, то в простых случаях достаточно самых дешевых вариантов с минимальной конфигурацией. Кроме того, потребуется доменное имя, для возможности получения сертификата Let's Encrypt.
Для начала необходимо подключиться к VPS через ssh под пользователем обладающем привилегиями администратора.
Далее необходимо его подготовить стандартным образом:
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install snapd -y
Устанавливаем приложение промежуточного сервера (исходный код приложения доступен на GitHub):
$ sudo snap install webrtsp-signaling-server --edge
Для получения Let's Encrypt сертификата необходимо привязать IP адрес сервера к вашему доменному имени, скачать bash скрипт enableTLS.sh и выполнить его:
$ ./enableTLS.sh admin@your.domain email@example.com
Скрипт подключается к серверу через ssh и выполняет первичную настройку для получения Let's Encrypt сертификата и задает конфигурацию nginx, необходимую для безопасного доступа к приложению.
Далее необходимо зарегистрировать экземпляр приложения камеры на промежуточном сервере для получения реквизитов для подключения. Для этого необходимо получить уникальный идентификатор экземпляра приложения на Raspberry Pi:
$ ssh pi@rpi-zero
pi@rpi-zero:~ $ sudo cat /var/snap/webrtsp-camera-streamer/common/id
0064b192-bbf8-4831-ae25-5fa6183e48ba
На сервере выполнить регистрацию:
$ sudo snap run webrtsp-signaling-server.SignalingServer -g 0064b192-bbf8-4831-ae25-5fa6183e48ba
Agent ID: ~64ktrzywgdgw2sg
Access token: NlT9FVCxVvLaRVynuubUnToK1p8D16JK-iD3L8S0wVI
Далее необходимо добавить параметры подключения в конфигурационный файл на Raspberry Pi. Для этого выполнить выполнить:
pi@rpi-zero:~ $ sudoedit /var/snap/webrtsp-camera-streamer/common/camera-streamer.conf
и в открывшемся конфигурационном файле добавить строчку:
signaling-server: "webrtsps://~64ktrzywgdgw2sg:NlT9FVCxVvLaRVynuubUnToK1p8D16JK-iD3L8S0wVI@signaling.webrtsp.org"
Далее в том же файле добавить пользователей для удаленного доступа:
users: ( { login: "user", pass: "pass" }, { login: "user2", pass: "pass2" } )
Далее перезапустить приложение:
pi@rpi-zero:~ $ sudo snap restart webrtsp-camera-streamer
После этого получить доступ к камере будет возможен по следующим ссылкам:
https://your.domain/view#user:pass@~64ktrzywgdgw2sg
https://your.domain/view#user2:pass2@~64ktrzywgdgw2sg
Получение доступа тестовому серверу
Очевидно что настройка собственного сервера может быть сопряжена с определенными сложностями. В связи с чем, я готов предоставить доступ до моего тестового сервера некоторому ограниченному количеству пользователей. Для этого необходимо связаться со мной любым способом (например личные сообщения Habr, или электронную почту указанную в моем GitHub аккаунте) и передать id вашего экземпляра приложения.
Заключение
На самом деле возможности технологии несколько шире. Например, на данный момент в разработке находится Android приложение для работы с IP камерами, позволяющее, с одной стороны, просматривать видео непосредственно на Android устройстве (приложение с этой частью функционала уже опубликована в RuStore), а с другой, получать удаленный доступ к этим камерам по схеме аналогичной приведенной выше. Так-же запланирована реализация аппаратного эмулятора USB веб камеры, позволяющего получать видео через интернет из произвольных источников. Это может быть как другое устройство, ретранслирующее видео с IP камеры (или USB веб камеры), так и обычный браузер. Возможно и у вас есть идеи для проектов на основе этой технологии - с удовольствием их выслушаю.
Надеюсь вам было интересно. Спасибо за внимание!
P.S.: Онлайн демо всего описанного выше доступно по ссылке (для исключения Хабр эффекта на исходном устройстве задано ограничение в 5 параллельных стримов, спасибо за понимание).
kalapanga
Можно узнать итоговую стоимость конструкции? Мне кажется, получилась дорогая камера низкого качества.