Андрей (@echo335) February 01, 2023
На основе статьи https://telegra.ph/RTSP-web-cam-i-Fluidd-02-01
Fluidd хорошо умеет показывать только mjpeg. По сути браузер показывает набор jpeg-ов, который принимается софтом с USB камеры или IP камеры, которая выдает стримы в MJPEG. Минусы очевидны - размер и качество. Прогресс не стоит на месте и современные браузеры научились гонять медиа контент без серверов, напрямую от клиента к клиенту. А камеры из-за глобального удешевления добавили только новый кодек т.е. так и остались тупыми.
Вариант 1: есть IP-камера, для которой известен источник rtsp (h.264(5) с или без звука)
он имеет вид rtsp://192.168.0.13:554/11 (554 - порт rtsp, может быть любой)
Вариант 2: есть камера, Китай или OEM, про которую не известно ничего. Но китайская камера скорее всего поддерживает onvif - xml over http протокол, который содержит в себе информацию об устройстве. В общем-то рецепт в этом случае очень старый и только под винду: onvif device manager
качать тут: https://sourceforge.net/projects/onvifdm/
Нашли адрес стрима RTSP, что дальше?
Нужно затащить на RPI софт, который перемуксит RTP из RTSP стрима (не перекодируя видео, это важно!) в съедобный для современных браузеров формат. Этот софт написан: https://github.com/AlexxIT/go2rtc .
Дальше все происходит на RPI под root правами (sudo su)
Качаем на RPI https://github.com/AlexxIT/go2rtc/releases версию для arm или той платформы, которая у вас.
wget https://github.com/AlexxIT/go2rtc/releases/download/v1.1.1/go2rtc_linux_arm
chmod a+x go2rtc_linux_arm
mv go2rtc_linux_arm /usr/local/bin nano /etc /go2rtc.yaml
вставляем в него следующий текст:
streams:
cam:
- rtsp://адрес_камеры
осталось запустить сервис в армбиане
nano /etc/systemd/system/go2rtc.service
в него копируем
[Unit]
Description=go2rtc
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/go2rtc_linux_arm -config /etc/go2rtc.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=go2rtc
User=root
Group=root
Environment=PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
[Install]
WantedBy=multi-user.target
осталось запустить сервис
systemctl enable go2rtc.service systemctl start go2rtc.service
Если все хорошо, идем на адрес http://rockpi.local:1984/
stream - проверить камеру, links - выбрать источник
webrtc - стильно модно современно и с минимальным лагом
Осталось настроить fluidd
по мотивам https://github.com/fluidd-core/fluidd/issues/97#issuecomment-1305424971