Comments 19
а почему не WebRTC? задержки бы не было как минимум.
вроде не сложно, как минимум на golang с использованием https://github.com/deepch/vdk и https://github.com/pion/webrtc ;)
Посмотрите еще мою статью по теме
habr.com/ru/post/532424
(была мысль встроить Let’s Encrypt в программу, но не было времени – может это сделает кто-нибудь из вас).
Вот в этом вся проблема)) Сертификат заставляет пересматривать всю простоту по другому. То есть надо велосипедить))
А что сложного в получении сертификата?
Можно привязать сертбот к любому поддерживаемому веб-серверу, а полученные сертификаты копировать потом в нужное место. Я так делаю, чтобы получить сертификат на основной сайт на Apache, а после копирую его в cron'e (просто командой cp) на видеосервер и остальное, что висит на том же домене (на разных портах).
И получение сертификата по проверке через HTTP не единственная опция, сертбот также поддерживает проверку, например, по DNS-записям.
В конце концов, можно заказать платный сертификат у регистратора домена, если не хочется этим заниматься самостоятельно.
сертбот умеет просто получать серты без интеграции с апачем\нгинксом и тд. (это только что написали выше)
в конечном итоге, достаточно написать скрипт с параметрами (чтобы дергать по крону хоть в винде) и выбрать подтверждение через тот-же cloudlfare (плагин для сертбота), ну или через txt-файл из коробки.
потенциальная проблема - наличие домена. но бесплатный в .tk\.cf взять не проблема.
о, вспомнил, с недавнего времени можно и на внешний ip сертефикат физлицу получить. у меня это заняло около 2х часов ночью, когда спонтанно этим загорелся.
А ещё есть проект OpenIPC. Можно купить одну из дешманских камер на Ali, прошить этой прошивкой. После этого камера сможет сразу транслировать в ютуб, а также её поток можно сразу отправлять на веб, он тоже, вроде, в HLS самой камерой отдаётся.
Также предусмотрено кэширование захваченных статических снимков, по умолчанию время хранения в кэше равно одной минуте
Как это выглядит? Кэш в озу или на диске? Это когда камера делает снапшоты с интервалом?
У меня вот какая проблема, есть Synology Surveillance Station, и всё прекрасно, кроме одного, нельзя прямо сразу вытащить архив видео за последние 10 сек. У меня когда камера обнаруживает движение, скрипт запускает ffmpeg, он делает пятисекундное GIF из потока видео и отправляет в мессенжер. Но что было до наступления события не увидеть. Можно ли ffmpeg'ом постоянно циклически делать снапшоты, или писать видео, чтобы это хранилось в оперативке, а при наступлении события делать из сохранённого короткий кусок видео, с записью до события взятой из кэша?
Кэш на диске и там интервала нет. При запросе снапшота, сервер смотрит свою папку data/capture. Если он не нашел там картинки, то делает захват с камеры. Если нашел, но судя по дате изменения файла она устарела (т.е. разница с текущим временем была более минуты, по умолчанию), то также сделает захват. Иначе просто отдаст имеющееся, как обычный ресурс. Поиск идет по GUID камеры, им именуются файлы снапшотов.
Касательно вашей проблемы, циклические снапшоты с помощью ffmpeg можно делать так (в этом примере делается снапшот каждую секунду, принимая fps потока равным 12 — настройте под себя):
ffmpeg -rtsp_transport tcp -i "rtsp://адрес" -f image2 -vf fps=fps=1/12 img%03d.jpg
Но храниться это будет не в оперативке, конечно же (как вариант RAM-диск?). Касательно "видео из снапшотов", то можно тем же ffmpeg превратить картинки в GIF, например так:
ffmpeg -f image2 -i img%03d.jpg out.gif
Правда эта команда склеит в GIF вообще все картинки из папки, поэтому придется отбирать последние 10 картинок скриптом на bash, и передавать список как аргумент в ffmpeg. Здесь не подскажу, плохо разбираюсь в bash.
На саму программу я строил большие виды, но по большому счету она пока сырая - не работает. У конфигуратора окно справа не масштабируется, закрывает поля ввода. Монитор у меня маленький 1024 пикселя, но это же не должно мешать. У меня эта строчка с rtsp транспортом работет только если убрать img из img%03d.jpg (вместо %03d подставляет путь к папке)
Сервер локальный ничего не показывает в браузере. Готов тестировать до победного конца. Придётся, видимо, самому исходник копать.
"Простота хуже воровства" - это про другое, это когда некий простак, вроде Джека-простака может столько дров наломать, такой ущерб нанести, что вор столько и не натаскает. Хотя....
опоздал на пол года, но лучше поздно, чем никогда.) RAM-диск спасает положение? сколько нужно выделить, и на сколько уменьшится задержка? если конечно были эксперименты такие.
К сожалению, RAM-диск не поможет побороть задержку. Это особенность протокола HLS и соответствующей реализации. Минимальной задержки мне удалось добиться в другой моей программе (при использовании видео в MJPEG!) https://github.com/carpediem-av/rtsp2html5 . Еще на камере нужно выставить минимальный интервал ключевого кадра.
Самый простой способ разместить IP-камеру на сайте в 2022 году