Эволюция добавления камер в облачный сервис
Мы переехали в новый офис и купили в магазине первые попавшиеся камеры видеонаблюдения. Наша задача - повесить несколько камер внутри офиса и несколько на улице, чтобы наблюдать за парковкой и входом в офис. Нам важно, чтобы каждая камера стала надёжным и безопасным устройством, к которому имеем доступ только мы.
Казалось бы, и что тут мудрить? Камеры есть, позовём монтажников, которые смогут их повесить и настроить нам видеонаблюдение с доступом к записям с камер. Они приезжают, устанавливают камеры в нужном месте под нужным углом и прописывают публичный IP к камере, выставляя её в интернет.
Что дальше? Нам нужно где-то хранить видео с камер, поэтому необходимо установить видеорегистратор DVR. Одной установки мало - его нужно защитить от возможной кражи или взлома. Кроме того, установка видеорегистратора сулит лишние затраты, которые хочется избежать. В итоге от идеи установки видеорегистратора мы отказались в пользу облачного сервера, который решал все наши задачи. Теперь нужно было разобраться с тем, как связать с ним камеры.
Как это сделать, если прошивка на каждой камере осталась дефолтной, а сервер вендора камер, на который по умолчанию льётся видео, слабо защищен от действий третьих лиц? HackMag пишет, что сейчас можно получить неавторизованный доступ к более чем миллиону IP-камер, о чём их владельцы даже не догадываются. Очень немногие установщики камер меняют дефолтные пароли на более надёжные, так что взломщикам достаточно просто поискать в сети данные для авторизации по названию камеры, которое прописано на корпусе. В итоге у абонента на руках оказывается пароль от его облака, куда он имеет доступ, а на камерах остается дефолтный пароль, который приглашает весь интернет посмотреть на картинку с камер.
В конце концов, зачем нам дефолтный облачный сервер вендора камер, если у нас есть свой сервер с Flussonic Watcher? К нему лишь надо подключить камеры. Но на камере нет поля, куда можно было бы вбить адрес сервера, на который пойдёт видео. Для решения этой задачи мы разработали Flussonic Agent, который входит в пакет Watcher - софта, который расширяет функциональность стандартной камеры и делает её безопасным устройством, готовым к работе с сервером. Видео с камеры попадают в наше облако видеонаблюдения. Задается уникальный защищенный пароль, канал связи шифруется, необходимость в установке и защите видеорегистратора отпадает - сэкономили кучу денег.
Подключаемся к сети
Итак, мы установили на наших камерах Flussonic Agent, который ждет команды от мобильного приложения на подключение к серверу. Чтобы мобильное приложение отправило команду, каждая камера должна быть подключена к сети. Проблему составляют те камеры, которые подключаются к сети только посредством Wi-Fi.
Соответственно, таким камерам как-то нужно сообщить логин и пароль от Wi-Fi. Можно это сделать через WPS, а для этого нам потребуется нажать на соответствующую кнопку активации данного режима на корпусе роутера. Для этого роутер должен быть под рукой, но у нас он висит под потолком, как у очень многих пользователей сейчас. Хорошо, мы полезли на стремянку и с риском сломать шею нажали заветные кнопки в офисе.
Но далее мы столкнулись с тем, что у некоторых камер не поддерживается режим подключения к Wi-Fi по WPS. Значит, логин и пароль для подключение к Wi-Fi мы должны сообщить им другим образом. Давайте разберемся, как это можно было бы сделать.
Микрофон
У некоторых наших камер есть микрофон. Мы попробовали записать особую последовательность звуковых тонов, содержащих данные для подключения камеры к серверу, и проиграть их камере с помощью мобильного телефона. Этот вариант уже лучше; он позволяет нам общаться с камерами, которые ещё не подключены к сети.
Несколько “но”: микрофоны есть не у всех наших камер. А если учитывать камеру, которая висит на уличном столбе, где дует ветер, а по парковке ездят машины, то обнаружим, что она никакого сигнала не услышит.
SD-карты
У некоторых наших камер есть SD-карточки, на которые можно записать данные для подключения к сети, но мы отмели эту затею сразу, потому что Стив Джобс некоторое время назад сказал, что надо работать с бесконтактными и беспроводными технологиями.
QR-коды
Что может делать каждая камера без исключения? Работать с видеоизображением. Мы собрали QR-код, в котором заложены данные - параметры подключения к сети. Здесь мы тоже поначалу столкнулись с некоторыми трудностями.
Во-первых, чем дешевле и проще камера (а мы взяли именно такие), тем хуже она анализирует изображение с QR-кодом. Соответственно, чем сложнее код, чем больше в нём символов, тем менее читаемым он будет для камеры. Так что мы имеем возможность записать в него строго ограниченное количество данных.
Во-вторых, как мы поймём, что наша камера увидела QR-код? В супермаркетах на кассах самообслуживания используются устройства для считывания штрих-кода и QR-кода, где световая индикация показывает, считан код или нет. На камерах купленных в магазине такой индикации нет (никто же не знал, что камере будут показывать QR код), поэтому нам нужна какая-то другая обратная связь. На нескольких камерах есть динамики, которые могут проиграть звуковой сигнал. Световая индикация на некоторых тоже есть. Чуть сложнее с охранными камерами на парковке, у которых нет ни того, ни другого, но выход мы нашли - в этом случае камера может сообщить свой промежуточный статус серверу, к которому она подключена, и мы увидим его на экране своего устройства.
Что дальше?
Все, мы определились, что хотим через QR код передавать данные для подключения к нашей сети и нашему облачному серверу камере. Теперь надо встроить в нее алгоритм распознавания QR кодов. Нам нужен поток несжатых кадров с сенсора, чтобы прогнать его через алгоритм распознавания QR-кода. В большинстве случаев у нас не было возможности получить данные с сенсора, так как всё взаимодействие между сенсором и интернетом происходит через программу, которую написал вендор этой камеры или производитель чипсета, и доступа у нас может не быть.
Для этой задачи у нас есть прошивка для IP-камер Flussonic Iris - мы получаем сырые данные с сенсора и отправляем их на аппаратный транскодер уже в сжатом виде, пригодном для передачи. Мы научили камеру считывать QR-коды, но это не единственная задача, которую может закрыть Iris. Перепрошивка камеры даёт нам полный контроль над, казалось бы, закрытым устройством - но это уже совсем другая история.