150просмотров
30 апреля 2025 г.
statsScore: 165
Личный проект. Часть 3 Всем привет! Продолжу серию постов, про медицинский центр. В рамках первой и второй части, я рассказал в принципе о проекте и выборе оборудования для работы. Сегодня немного расскажу, про видеонаблюдение. Видеонаблюдение - это было первое, что я точно хотел внедрять для безопасности. Мой выбор остановился на IP камерах с хорошим обзором от компании Dahua, к плюсам отнес:
- стоимость - довольно демократичная;
- характеристики и оценки обзоров - хорошее качество картинки;
- возможность подключить к облачным сервисам хранения данных с камер. Детальнее наверное о выборе не буду расписывать, а также не буду останавливаться на тестировании и выборе онлайн сервиса для хранения информации. А сразу перейду к интересной теме - это локальное хранилище. Что стоит сразу отметить, тарификация облачных сервисов зависит от количества камер и дней хранения архива, чем больше, тем дороже. Учитывая этот факт, мне стало интересно, а могу ли я написать свою систему, которая будет хранить локально видео? Задумка была простой - в облако 3 дня, на локальное хранилище недели. Первое с чего я начал - это создание PoC (Proof of Concept), используя только мини скрипт для библиотеки ffmpeg - заработало! Вторым шагом, я начал переносить реализацию в Go CLI программу, написал обвязку для конфигурации камер, обвязку для запуска записи в горутинах, в начале это был вызов внешней программы ffmpeg. По сути довольно быстро собрал mvp (Minimum Viable Product). Этап тестирования был довольно простым, но долгим - я просто включал программу на домашнем серваке и наблюдал за записью в течении пары дней. Стоит отметить, что в рамках развития функционала, я довольно много времени потратил на реализацию автозапуска записи, если был потерян сигнал, тут надо было понимать, что конкретно случилось с камерой - просто сеть глюкнула или же камера умерла. Но в целом проблема "отвалилась сеть" была решена, через перезапуск записи с увеличивающимся интервалом и ограниченным количеством попыток. Важно отметить, что перед тем как запускать запись, я проверяю по IP адресу доступность камеры. Динамический интервал потребовался, для того, чтобы не долбить камеру каждую секунду, так как запуск камеры требует определенного времени. А ограничение попыток подключений - защита, от ситуации, когда камера больше не появляется в сети, например, из-за смены IP адреса или другой технической проблемы. Сегодня, наверное, ограничюсь такой небольшой заметкой про видонаблюдение, но планирую дальше рассказать о том, какие фичи тестировал, какие на этапе внедрения и какие проблемы пока в процессе поиска решения. #life #pet_project #business #go