Проблема

Наш мир кишит камерами видеонаблюдения, и большинство из нас сами добровольно окружают себя этими устройствами. Камерами, которые имеют как случайные дыры в безопасности, так и намеренно внедренные компоненты которые отстукивают своему хозяину. Одни производители стараются по максимуму предвидеть и решить проблемы, другие же делают вид, что и проблем особо нет, если камера показывает изображение. Но если начать приглядываться, то лишь требование ActiveX и Internet Explorer для пользования камерой в XXI веке это нечто из пучин ада.

Решают проблемы производители каждый по своему. Как вариант, через облако, через своё приложение Android с приватными протоколами. Но через несколько лет после продажи облачной камеры, бесплатное облако вполне может стать платным, приложение обрастает рекламой до безобразия. А если проект производителя не зашел, то прописанные в ней сервера отключаются и ваша камера, возможно даже с отличным оборудованием внутри, становится бесполезным кирпичом, потому как способов использования больше нет.

В случае с зоопарком рутеров, ворох проблем заставил энтузиастов собраться с силами и создать открытую платформу OpenWRT на базе Linux. И ради тех, кто ждет решения для камер, сейчас кипит работа над аналогичным открытым проектом OpenIPC - универсальной встраиваемой платформы на базе Linux для IP камер. Проделан колоссальный труд, и есть уже ряд камер, на которые можно установить новую прошивку, получив базовый функционал.


Что даст установка OpenIPC

Возможность работать с камерой с различных ОС

Теперь не нужно устанавливать Internet Explorer и его ActiveX, Macromedia Flash и прочие пережитки девяностых.

Расширение функционала

Универсальная система позволит вам быть уверенным, что камера с OpenIPC поддерживает стандартные протоколы такие как RTSP, ONVIF, NETIP (хоть пока и частично). К примеру ваша WiFi cloud камера, к которой даже с компьютера было проблематично подключиться, сможет отображаться на видеорегистраторе и её видеопотоки будут писаться вместе со всеми стандартными камерами.

Кроме того, для таких протоколов как HLS теперь не нужен отдельный сервер или сервис: достаточно включить его на камере и можно встраивать поток на свой сайт.

Огромное количество приятных плюшек, вроде отправки изображения не только на емайл или FTP, но и в Yandex.Disk, Telegram, MQTT.

Возможность разобраться в компонентах камеры

OpenIPC - это отличное решение для тех, у кого есть желание разобраться в компонентах и програмно-аппаратной части встраиваемых устройств, а так же кому хочется разнообразить свою жизнь, самоутвердиться, улучшить ЧСВ и решить множество прочих психологических проблем, как своих так и окружающих.

Однако, если вы не любите разбираться в деталях, не ищете способы что-либо улучшить, а вам нужна просто готовая вылизанная система, то OpenIPC однозначно пока что не для вас. В ней еще очень долго будет над чем придется поработать. Но без вас этот процесс будет длиться намного дольше.

Воскрешение облачных P2P новомодных камер

Просто невероятно популярны сейчас облачные камеры за счет простоты их настройки и без сложных для домохозяек моментов вроде порт-форвардинга для доступа к камере из интернета. Но у многих скопились коробки таких облачных камер, которые вроде и не сломаны физически, но работать не могут потому что прошитое облако больше не доступно. Такие камеры становятся бесполезными потому что как правило не поддерживают стандартные протоколы, не могут быть использованы с видеорегистратором или платным видеосервисом. Оживить такую камеру может замена прошивки на OpenIPC.

Одной из камер с похожей тяжелой судьбой, которую можно вернуть к нормальной полноценной жизни с помощью OpenIPC является Switcam-HS-303.

Switcam-HS-303
Switcam-HS-303

Более эффективная работа системы

То ли от отсутствия троянов и тонн телеметрии, то ли благодаря каким-либо еще внешним силами, но одна из китайских камер, которая на стоковой прошивке при попытках использовать h.265 давала гарантированно битое изображение и на h.264 лишь изредка несмотря на заявленую поддержку, а на OpenIPC картинка стала нормальной.

Разработчики объясняют это тем, что вместо тредов они активно используют цикл событий.


Что теряем после установки OpenIPC

К сожалению, на сегодняшний день в OpenIPC пока ещё не поддерживаются ставшие стандартными функции камер PTZ и AI.

Но главное, что вы должны понимать устанавливая OpenIPC на камеру, это то, что вы не получите идеально работающую систему. Проект крайне активно развивается, и при огромном количестве поддерживаемых платформ невозможно избежать поломок. Пользование OpenIPC на сегодняшний день - это сбор информации о проблемах, формулирование, написание репортов на GitHub. Благо разработчики реагируют очень быстро и мелкие проблемы могут даже по сообщению в телеге по быстрому пофиксить.

Сейчас это далеко не самая безопасная система. Вы должны понимать на какое безумие идете, открывая доступ к ней через интернет. Но это более правильный путь, потому что рано или поздно тут решатся все проблемы, в отличие от того ада, которому и конца и края не видно с дырявыми как решето прошивками всемирно известных китайских вендоров.


С чего начать

Начать стоит с осознания, что установка OpenIPC на вашу камеру - это дорога в один конец, если предметами вашего ежедневного быта не являются такие вещи как паяльник и программатор, а также вы не знакомы с тем, что такое linux, u-boot, spi, uart, nor flash, nand flash, mtd, squashfs, jffs2. Сама установка OpenIPC через веб интерфейс камеры может занять считанные минуты. Но ровно так-же через считанные минуты ваша чудесная новая дорогая камера благодаря ошибке может превратиться в кирпич, который оживить можно будет лишь только прокачав свои скиллы. Именно от непонимания того, как устроена камера внутри ещё совсем недавно меня преследовало ощущение, что накатить назад заводскую прошивку не составит труда. Ведь вот они все выложены в публичный доступ производителем. Но каждый экземпляр камеры уникален, ведь в нем зашит MAC адрес сетевой платы, CloudID. Чтобы не было соблазна у пользователя менять это, эти данные зашифрованы в криптоблоке. Для некоторых камер уже есть программы, которые позволяют зашифровать криптоблок с измененными пользователем даными. Но далеко не для всех. Поэтому затёртый криптоблок может очень серьезно осложнить возврат даже для тех, кто уже разбирается и имеет опыт в теме.

Дальше, чтобы дорога в один конец не оказалась слишком короткой, нужно безошибочно выяснить с каким железом мы имеем дело. Тут не пройдёт номер выбрать похожий процессор, имя которого отличается лишь одной буквой, например hi3516cv100 вместо hi3516dv100. У них много общего, но небольшие различия приведут к тому, что загрузчик u-boot не сможет загрузить ядро Linux и это будет последней остановкой в путешествии вашей камеры.

Также следует принять что надписи на камере не несут никакой смысловой нагрузки: Azishn, Baovision, Besder, Cotier, Dahua, Escam, Foscam, Gadinan, Hiseeu, Imilab, LarmTek, Misecu, Powerview, Reolink, Szsinocam, Topsee, Usafeqlo, Veskys, Wanscam, Xiaomi, YI, Zjuxin, Zilink. Сегодня этот производитель использует одни платы, завтра другие.

Ещё более опрометчиво верить заявлениям продавца. Иногда продавец абсолютно точно и уверенно заявляет что в его камере будет вот такой-то процессор и вот такой сенсор лишь потому, что это хорошие ключевые слова от топовой конфигурации. Как-то раз я заказал на Али плату которая судя по заголовку имеет на борту hi3516ev300 и сенсор imx335. При получении я понял, что не так-то просто выяснить правдивость заявлений: процессор намертво заклеен радиатором, пароль root неизвестен чтобы узнать программным путем. Но в u-boot chipinfo выдал название системы FH8852V200, а в логах загрузки промелькнуло название сенсора. По этим данным я нашёл имя вендора платы Vatilon, у него на сайте и фото с характеристики чтобы открыть диспут. Несмотря на собранную информацию, продавец несколько недель пытался вводить в заблуждение арбитров Али (которые уж точно не технари) заявлениями мол "А тут не видно, что это вообще за плата, не видно как получили эту информацию, а фото не доказательство, нужно видео, плата не моя". В конце концов арбитры задолбались крутить свой диван и присудили вернуть лишь половину стоимости.

В общем, надо надо выяснить абсолютно точно какое железо внутри, а точнее процессор и сенсор (светочувствительная матрица).

Надежнее всего разобрать и посмотреть, что написано на процессоре, и это будет уже залогом что OpenIPC загрузится и к ней можно будет подключиться через ssh, чтобы выяснить какой сенсор установлен на плате. Но если процессор заклеен радиатором, то придется искать альтернативные способы. Как вариант можно найти точное название платы. Но тут важно не перепутать платы, если камера сложена как бутерброд из нескольких, которые могут оказаться модулями POE, WIFI, 3G/LTE или платой управления моторами PTZ.

Ещё один способ это запускать программы производителей платы (не путать с производителями камер, которые эти платы вкручивают внутрь корпуса и клеят свои логотипы), которые находят "свои" камеры в сети по своему протоколу и позволяют как конфигурировать их, обновлять прошивки, так и просто увидеть название платы. К примеру, для плат одного из самых популярных произодителей XiaongMai используйте программу IPCam DMS.

Немного дополнительной информации по поводу идентификации оборудования: https://openipc.github.io/wiki/en/installation.html


Способы установки OpenIPC

Есть несколько основных способов установки OpenIPC

Coupler

Этот метод годится лишь для камер производителя XiaongMai: через специально сформированный файл, формат которого производители используют для доставки своих обновлений. Такой файл может содержать образы разделов u-boot, kernel, rootfs. Этим методом можно воспользоваться либо через веб-интерфейс камеры как правило если камера все еще рабочая, если под рукой есть Windows и Internet Explorer. Если нет Windows, то такую прошивку можно прошить удаленно через сторонний софт вроде IPCam DMS, который отлично работает под wine в Linux.

Это простейший метод для тех, кто пока не имеет опыта работы с прошивками оборудования, но, к сожалению, такой выбор очень сужает спектр поддерживаемых устройств. Таким способом, как правило, не прошить WiFi и облачные камеры. Но сегодня речь пойдет именно об этом способе.

По протоколу UART через меню u-boot

u-boot - это раздел, который кроме ежедневной загрузки и запуска ядра может быть использован нами для обновления системы по сети или MMC (SD карты) и для сохранения бэкапов как всей флэшки с прошивкой, так и отдельных областей. Чтобы добраться до меню u-boot нужно иметь USB UART адаптер, найти на плате камеры неприметные контакты RX, TX подключиться к ним используя специальные прищепки или подпаяться и запустить программу терминал вроде putty для Windows или minicom под Linux.

Подключение к контактам UART: RX,TX и GND на площадке от болта
Подключение к контактам UART: RX,TX и GND на площадке от болта

Именно такой метод использовали все, кто исследовал прошивки камер.

Использование функции fastboot процессора

Некоторые процессоры могут принять прошивку даже если уничтожен раздел u-boot или он защищен паролем. Воспользоваться этим способом можно через программы HiTool (для Hisilicon), TooPlatform (для процессоров Goke) или OpenIPC утилитой Burn, написанной на python.

Программатором на флэшку

Иногда u-boot меню защищено паролем или урезан по функционалу производителем, чтобы пользователи не имели возможности лазить своими ручками там, где не следует. Для современных камер это становится массовой тенденцией. И тогда для тех, кто умеет паять самым универсальным будет снять микросхему с платы, бросить её на программатор, сделать бэкап и залить новую прошивку.


Меняем прошивку

Сегодня речь пойдет только о методе замены прошивки на OpenIPC через coupler, так как он простой и даже не требует разбирать камеру, но камера должна быть рабочая и пароль на веб интерфейс известен. В следующих частях будет рассказано и о других методах.

Есть две версии OpenIPC: Lite для камер с флэшкой 8 мегабайт и Ultimate для камер с флэшкой 16 мегабайт, в которой запланирован расширенный функционал. Какой бы ни была ваша флэшка, через этот метод пока что можно установить только версию Lite с минимальным функционалом (на сегодняшний день будет отсутствовать лишь ZeroTier) поэтому подойдет для флэшек как 8М так и 16М.

Для примера я взял завалявшуюся древнюю, но относительно неплохую камеру Escam Bolt QD410.

Escam Bolt QD410
Escam Bolt QD410

Выясняем ID устройства

Чтобы выяснить ID есть два способа:

  1. Заходим в веб интерфейс камеры и в разделе About/Info находим длинный номер под названием вроде "System".

Находим ID системы в веб-интерфейсе чтобы подобрать прошивку OpenIPC в репозитории coupler
Находим ID системы в веб-интерфейсе чтобы подобрать прошивку OpenIPC в репозитории coupler
  1. Запускаем программу IPCam DMS, выбираем сетевой интерфейс, задаем поиск камер. Видим все найденые камеры в списке. Если ваша камера защищена не пустым паролем, то самое время его вписать чтобы программа могла подключиться и считать данные. В этой программе интересующая нас строка называется "системная версия" и она абсолютно такая же, которую сообщит вам веб интерфейс.

Находим ID системы через IPCam DMS
Находим ID системы через IPCam DMS

Каждый производитель называет этот номер по своему. Нам он нужен не весь, а только четвертый его сегмент, который и является ID устройства. В данном случае этот ID такой: 00014840. По этому ID можно точно быть уверенным что плата имеет определенный процессор и сенсор.

Кроме необходимого нам ID видим в пункте "Платформа" что моя камера Escam Bolt QD410 основана на плате под названием HI3516D_83H40, по документации на который видим что плата имеет процессор Hisilicon 3516DV100 и сенсор OmniVision OV4689.

Еще одна из моих современных топовых плат для камеры имеет на борту процессор gk7205v300 и сенсор imx335. Вот к примеру что она о себе пишет: V4.02.R12.00014911.10010.143500.00000

Таким образом ее ID устройства: 00014911 .

Дальше идем на гитхаб coupler: https://github.com/OpenIPC/coupler/

Тут ищем нужный ID и смотрим если для него доступна прошивка. Если нашли для вашей камеры, то поздравляю. Можно скачивать и прошивать.

Если у вас нет подходящей камеры и вы в поиске какую камеру лучше выбрать, то берите камеру на процессоре gk7205v300 и на сенсоре Sony imx335 который выдает 5MP. Более продвинутый сенсор на 8MP Sony imx415 пока еще не поддерживается в OpenIPC. Для тех, кому сгодится 1080p: gk7205v200+imx307. Это отличное по характеристикам бюджетное оборудование по цене практически не отличается от массы устаревшего хлама, которое заполонило рынок и Aliexpress в частности. Я нашёл пока лишь один магазин на Ali, который на всем оборудовании пишет название процессора/сенсора и пока ещё не был замечен в присылании оборудования отличного от заявленого: VOLDRELI H.265 Security Store. Ещё есть CCDCAM Security Solution Store, но камеры этого производителя пока не прошить с помощью coupler'а.

Кстати, имейте в виду, что за несоответствие описанию при наличии веских доказательств можно в результате спора на Али иногда получить даже полную компенсацию.

Прошиваем

В веб интерфейсе в пункте Settings -> Advanced -> Upgrade или в IPCam DMS жмем "Прошивка из файла" и выбираем скачанный файл прошивки

Меню обновления через веб-интерфейс одной из камер
Меню обновления через веб-интерфейс одной из камер

Готово! Два клика, Карл! Ну это если конечно всё прошло без эксцессов. Колоссальный труд проделан разработчиками, чтобы можно было перешить камеру вот таким простым способом. А длиннотекст выше нужен был лишь для того, чтобы вы на этом этапе морально были готовы к сюрпризам и неожиданностям, которые дальше всегда будут преобладать в пользовании вашей камерой. Поэтому расчехляйте Telegram и подписывайтесь на канал разработчиков, вам теперь часто нужна будет их помощь в решении проблем с вашей камерой (да и им тоже наверняка не помешает фидбэк):

https://openipc.org/our-channels

Вот так, после долгих нравоучений, в два клика в вашу скучную камеру вдохнули новую жизнь, полную адреналина и приключений. Ребутим камеру, находим её в сети (например через nmap или логи роутера), заходим на неё через браузер на порт 85 используя admin:12345.

Да, OpenIPC использует для веб интерфейса нестандартый 80 порт. Но тут есть нюансы в механизмах OpenIPC, о которых я бегло упомяну. Сердцем проекта OpenIPC является Majestic streamer, который отвечает за большинство поддерживаемых протоколов таких как RTSP, ONVIF, NETIP, HLS. Веб-админка Majestic работает по умолчанию на пору 80, дублируя веб интерфейс порта 85. Но если процесс Majestic отвалился, то основной веб интерфейс все ещё будет работать. Сейчас httpd с веб интерфейсом работает на порту 85. Выглядит эта админка на обоих портах вроде одинаково, но могут быть нюансы, когда пароль к одному порту подходит, а к другому не подходит. Поэтому всегда учитывайте эту особенность.

Настройка OpenIPC

Настроить систему можно как через веб интерфейс, так и через консоль по ssh. В исключительных случаях система может заработать сразу, но так как это универсальная платформа для множества камер от разных производителей, то чаще всего ей нужно помочь.

Веб-интерйфейс OpenIPC
Веб-интерйфейс OpenIPC

Вот тут самое время посетить wiki проекта и ознакомиться с функционалом, найти как включать необходимые фичи и проверить их работоспособность: https://openipc.github.io/wiki/

И конкретно по компоненту Majestic Streamer, который отвечает за основной функционал камеры: https://openipc.github.io/wiki/en/majestic-streamer.html

Вот некоторые пути, по которым можно получать различные данные с камеры: https://openipc.org/majestic-endpoints

Итак, подставляем IP вашей камеры, который она по умолчанию получит по DHCP, и есть небольшой шанс что все заработает сразу. Но я пока такого еще не встречал без некоторых ритуалов с настройками системы. Рассказываю на примере своей свежепрошитой камеры на плате 83H40 что было дальше.

Захожу в веб интерфейс на порт 85 и вижу в разделе preview ... ничего:

Превью не заработало "искаропки"
Превью не заработало "искаропки"

Ясно, что сенсор не дает картинку. Нужно разобраться с сенсором, но выясняется что камера ещё и ребутится каждые несколько секунд. Ребутится потому, что не запускается majestic, а без него по умолчанию watchdog считает, что камера сдохла и нужно её перегрузить. И в догонку, чтобы жизнь малиной не казалась, после ребута камера иногда получает новый IP. И при этом веб админка требует сменить дефолтный пароль.

Решаю проблемы по мере важности.

  1. Чтобы можно было нормально работать подключаюсь по ssh, используя пустой пароль, и отключаю модуль ядра watchdog через команду "rmmod wdt".

Отключение watchdog через удаление модуля ядра в консоли
Отключение watchdog через удаление модуля ядра в консоли

Теперь камера не ребутится без majestic. Можно заняться настройкой.

Имейте ввиду, что если пароль был изменён в веб интерфейсе, то пароль root по ssh будет тоже таким.

  1. Идем в веб интерфейс на порт 85 и в меню "Majestic->ISP->Path to sensor configuration file" выбираем конфиг сенсора. Для моего сенсора ov4689 есть два конфига 1080p и 4M. Выбираю 4M.

Выбор конфига сенсора
Выбор конфига сенсора

Эту же операцию, как и большинство других настроек, можно сделать отредактировав файл конфига:

vi /etc/majestic.yaml
  1. Еще одна не менее важная опция, без которой хоть я и начал видеть изображение, но оно представляло собой такой черный квадрат, что Малевич обзавидовался бы. Обязательно там же нужно переключить Sensor exposure time в Auto.

Меню Majestic
Меню Majestic
  1. Теперь настало время разобраться с сетью. Когда затерт оригинальный MAC адрес сетевого адаптера OpenIPC ставит 00:00:23:34:45:66. Чтобы его заменить, нужно подключиться по ssh и задать его через переменную окружения u-boot:

fw_setent ethaddr оригинальный-MAC

Вы ведь записали старый MAC, прежде чем прошивать? Ну может там на каком-то скриншоте осталось? Нет!? Не беда! Придумайте себе любой. Например, если хотите вкусить добрых проблем с сетью, то поставьте MAC от своей материнки (шутка, не стоит так делать!).

  1. Теперь можно и задать фиксированный IP для камеры. Это можно сделать через веб интерфейс:

Сетевые настройки
Сетевые настройки
  1. Мой NVR умеет работать только по протоколу ONVIF, но даже после включения этого функционала в веб админке регистратор не увидел камеру. С моим регистратором чтобы решить проблему пришлось сделать две вещи.

Обязательно нужно включить субпоток video1 (отключен по умолчанию) и убедиться что включен RTSP. Регистраторы обычно используют основной поток для записи и суб-поток при отображении множества камер на экране.

Дело в том, что ONVIF всего лишь сообщает регистратору RTSP путь по которому можно получить видео, но сам видеопоток идет через RTSP. На сегодняшний день пока что не реализована функция передачи пользовательского пароля в RTSP URL. Пришлось установить пустой пароль root. Разработчики обещают это исправить для аутентификации RTSP в будущем. Пароль на веб интерфейс при этом остается тем, который был введен при первом логине.

Всё!

У меня на этом этапе заработали все функции камеры кроме ночного режима (подсветка сгорела). Но это был пример наименее проблемной камеры. Другие примеры могут занять гораздо больше времени для запуска и без поддержки зала в телеграмме не обойтись. Отличается ревизия камеры: вендор сменил что-то в железе и всё, сенсор работает с другими настройками, не с теми, на которой система была проверена. Чтобы выяснить настройки конфига разработчики просят вернуться на стоковую прошивку и снять их серией команд. Но это возможно если есть бэкап стоковой прошивки, если в ней включен удаленный доступ, если есть пароль root... и много других "если". Будьте готовы к такому повороту событий, особенно если ваша камера не занесена в список рекомендуемых для OpenIPC:

https://openipc.org/supported-hardware/featured

Решение проблем

Для выявления проблем в OpenIPC начинать следует с проверки запущен ли majestic и запускать его из консоли, чтобы видеть все сообщения об ошибках. Вот лог нормальной загрузки:

root@openipc-hi3516dv100:~# killall majestic
root@openipc-hi3516dv100:~# majestic -s
12:13:33 [    main] main@128                      Majestic Lite for HISILICON, version master+d10be2a, built on 2022-08-20
12:13:33 [app_conf] load_config@104               Using /etc/majestic.yaml as main configuration
12:13:33 [app_conf] parse_app_config@349          app_config.osd_template %a %e %B %Y %H:%M:%S %Z
12:13:33 [watchdog] watchdog_start@101            Detected Hisilicon Watchdog
12:13:33 [watchdog] watchdog_start@121            Watchdog timeout set to 10 seconds
12:13:33 [     sdk] start_sdk@399                 Using /etc/sensors/ov4689_i2c_4M.ini sensor configuration file
12:13:33 [     sdk] start_sdk@408                 App was built with MPP version: Hi3516A_MPP_V1.0.8.0.B070 Release
12:13:33 [     sdk] start_sdk@411                 Current MPP version: HI_VERSION=Hi3516A_MPP_V1.0.8.0 B070 Release
12:13:33 [     sdk] start_sdk@436                 sensor ov4689
12:13:33 [     sdk] start_sdk@441                   input_mode MIPI, WDR NONE
12:13:33 [     sdk] start_sdk@448                   dev [2592x1520@0x00 25fps, BGGR
12:13:33 [  sensor] try_to_load@19                trying to load /usr/lib/sensors/libsns_ov4689.so
12:13:33 [     hal] hisi_free_mem_ex@714          Free MMZ mem before allocation: 87892KB
12:13:33 [     sdk] dump_vb_configuration@2253    VB configuration:
12:13:33 [     sdk] dump_vb_configuration@2263      [0]: 5909760 x 6
12:13:33 [     sdk] dump_vb_configuration@2263      [2]: 622080 x 1
12:13:33 [     hal] hisi_free_mem_ex@714          Free MMZ mem after allocation: 52648KB
12:13:34 [     sdk] init_sensor@2443              Sensor driver loaded
12:13:34 [     sdk] init_vi@2851                  SDK is in 'online' mode
12:13:34 [    puts]                               linear mode
12:13:34 [    puts]                               -------OV4689 Sensor 4M30fps Initial OK!!-------
12:13:34 [     sdk] log_venc_chn@1299             H.265 2592x1520 25fps 4096Kbit  25 GOP
12:13:34 [     sdk] create_vpss_chn@1046            new venc: 0   vpss_grp: 0,   vpss_chn: 0
12:13:34 [     sdk] start_video@1931                venc took 15468KB of MMZ [2885]
12:13:34 [     sdk] log_venc_chn@1299             H.265 704x576 15fps 1024Kbit  15 GOP
12:13:34 [     sdk] create_vpss_chn@1046            new venc: 1   vpss_grp: 0,   vpss_chn: 1
12:13:34 [     sdk] start_video@1931                venc took 1596KB of MMZ [297]
12:13:34 [     sdk] init_chn@1334                 JPEG snapshot snapshot venc_chn 2  2592x1520
12:13:34 [     sdk] start_jpeg@1415                 jpeg_enc took 976KB of MMZ [961]
12:13:34 [     osd] init_osd@92                   OSD initialized
12:13:34 [     sdk] start_sdk@522                   OSD took 448KB of MMZ
12:13:34 [     sdk] start_sdk@548                 HiSilicon SDK started
12:13:34 [     hal] hisi_free_mem_ex@714          Free MMZ mem finally: 21392KB
12:13:34 [   httpd] new_http_server@361           HTTP server started on :::80
12:13:34 [    rtsp] rtsp_init@31                  RTSP server started on port 554
12:13:34 [   netip] netip_start@2035              NETIP server started on port 34567...

Еще один инструмент, который активно используется пользователями OpenIPC это ipctool. Эта утилита встроена в операционную систему OpenIPC как автоматически скачиваемая команда, но очень желательно до смены системы на камере уже иметь сохраненные результаты вывода этой команды. Скомпилированную под платформу arm (для запуска непосредственно на самой камере) последнюю версию этой утилиты вы всегда найдете тут:

https://github.com/OpenIPC/ipctool/releases/download/latest/ipctool

Вот так можно получить полезные данные, которые надо сохранить именно при запуске на заводской прошивке работающей камеры и после перехода на OpenIPC они смогут помочь разработчикам пофиксить возникшие проблемы:

ipctool
ipctool reginfo
ipctool gpio scan

С помощью ipctool узнают какой установлен процессор, сенсор, тип флэш памяти для прошивки, объем RAM, а так же на некоторых платформах для получения доступа к регистрам и GPIO выводам, через которые управляются внешние устройства вроде датчика освещенности, IR CUT фильтр и для многого другого. Если хотите совет от разработчиков по поводу какой-либо камеры, то желательно иметь вывод этой утилиты, как перед походом к врачу иметь на руках результаты анализов чтобы два раза не ходить туда-сюда. Чтобы ее запустить, вам понадобится telnet, ssh, UART доступ к камере и пароль root чтобы попасть в систему. Притащить ipctool на камеру можно различными способами: через USB-флэш, через MMC карту, через HTTP/FTP или просто подмонтировать с сервера NFS (Network File System):

 mount -o nolock 95.217.179.189:/srv/ro /mnt

К сожалению не на всех системах это возможно, не для всех можно легко найти в интернете пароль root, поэтому дальше все упирается в ваши знания и умения. Но если у вас возникли проблемы с прошитой камерой, и вы решили задать вопрос разработчикам в одном из каналов, то без логов и информации о процессоре, сенсоре, типе флэш-памяти, помочь вам не смогут. Ведь это даже хуже гадания на кофейной гуще. Как и доктор, вас отправят за результатами анализов.


Мой опыт

Когда я узнал о проекте OpenIPC, меня накрыл восторг и первая моя мысль была "Ура! Ведь это то, что мне нужно, сейчас перешью все свои камеры... а потом все чужие". То что в телеге ежедневно пользователи решали множество своих проблем мне казалось незначительными нюансами, ведь меня устроит и как-нибудь, я не привередлив.

Первая камера, которую я перешил была новенькая камера gk7205v300+imx335 (это было в конце 2021 года). После установки OpenIPC камера отказывалась сохранять настройки. Я ее перешивал через UART, не понимая множества действий, которые делаю, но при этом не стесняясь лезть в самые опасные манипуляции. Предсказуемым итогом, после того как я записал неверно сформированный загрузчик u-boot на флэшку, камера перестала подавать признаки жизни. Мне пришлось научиться паять, чтобы перешить эту микросхему. Кроме того, были подозрения что микросхема не самая живая, поэтому на замену была заказана пачка Winbond 25Q128 на 16 мегабайт, которые подходят и для большинства камер где установлена флэшка на 8 мегабайт. В результате я таки заставил работать систему как надо. Лишь спустя долгое время я узнал, что в современных процессорах камер есть функция fastboot, которая позволяет прошить флэш-память даже если загрузчик затерт.

Брэнд "CCTV Color Camera DIGITAL": никогда не определить что внутри
Брэнд "CCTV Color Camera DIGITAL": никогда не определить что внутри

Одной из очередных плат, куда я залил OpenIPC была древняя камера 2016 года HI3516_83H30 на процессоре 3516dv100 с сенсором AR0330, который вроде как проверен и поддерживается системой. Я рассчитывал ее прошить даже не снимая с места, где она работала последнюю пятилетку. Такой номер иногда проходил с другими камерами. Но после быстрой установки через coupler в два клика оказалось что majestic категорически не может получить кадр от сенсора. С помощью разработчиков OpenIPC выяснили, что используемый в системе драйвер этого сенсора libsns_ar0330.so не работает на моей плате и с тех пор в системе есть два драйвера для различных модификаций этого soc+sensor: libsns_ar0330_dc.so.

WIFI Smart Camera года эдак 2015 на процессоре GM8135S
WIFI Smart Camera года эдак 2015 на процессоре GM8135S

Еще одной необычной камерой, была noname облачная камера на процессоре gm8135s+sc1041, единственным способом использования которой было мобильное приложение V380. И вот вроде скоро десяток лет, как все нормально работает, но хотелось из нее сделать полноценную камеру, подключенную к домашней сети с видеорегистрацией (но без СМС) с использованием обычных протоколов ONVIF/RTSP, чтобы видеозаписи не покидали пределы моей локалки и работало это все даже без интернета. Состояние поддержки платформы gm8136 (практически то же самое что и gm8135s) в проекте заявлено как зачаточное, а значит ее особенно никто пока еще не тестировал. Но я решился. После установки пришлось подобрать драйвер wifi, настроить скрипты загрузки драйверов, подключения к wifi точке, немного поиграть с параметрами распределения памяти и система кое-как зашевелилась. Необычным было то, что на заводской прошивке в камере нет ни веб интерфейса, ни LAN, а значит недоступна классическая загрузка прошивки по сети. Прошил, добравшись через UART в меню u-boot с флэшки. Про такие более сложные варианты нужно писать отдельный пост. Камера в итоге запустилась, но с нюансами: не работает суб-поток, при ярком свете не корректно высчитывается экспозиция и многое по мелочам. Разработчики намекнули куда копать в конфигах драйвера и при наличие свободного времени буду заниматься тюнингом.

Кстати на gm8135s производят очень много автомобильных видеорегистраторов, которые в теории можно тоже превратить в wifi камеру, как это можно сделать и с видеоглазками, экшн-камерами, парковочными камерами и прочим оборудованием имеющим поддерживаемый в OpenIPC сенсор, флэшку, LAN или WiFi адаптер. Но о таком опыте пока еще никто не рассказывал.


Open Wall

В системе есть интересная фишка, которая позволяет публиковать снимки для сравнения качества изображения с разных сенсоров:

https://openipc.org/open-wall

Сообщество пользователей OpenIPC призывает включать эту функцию, если вид от лица камеры это позволяет. Включить её можно в меню Services->Send to OpenWall.

Ссылки

Проект OpenIPC: https://openipc.org/
GitHub: https://github.com/OpenIPC/
Wiki проекта : https://openipc.github.io/wiki/
IPCam DMS: https://team.openipc.org/ipcam_dms/

Комментарии (7)


  1. TheRaven
    15.09.2022 12:00
    +2

    Пойду ребятам звёздочку поставлю, отличный проект.


    1. datacompboy
      15.09.2022 12:34
      +2

      Можно еще и донатнуть.


  1. r2d
    15.09.2022 12:28

    Давно ждал когда камеры можно будет настраивать на свое домашнее облако. Буду следить за проектом


    1. SergeyNovak Автор
      15.09.2022 12:48

      А что за домашнее облако? NAS? NVR?
      Зачем следить если ждал!? Надо "я буду устанавливать все игры!"


      1. Javian
        15.09.2022 15:26

        Можно попробовать спросить @ZigFisher

        https://zftlab.org/pages/2018010700.html


  1. SubiDu
    15.09.2022 15:22

    Перед прошивкой чего-либо обычно принято делать бэкапы.

    Вы перед прошивкой своих устройств их делали? Если да, то не плохо было бы осветить этот аспект в статье.

    А так статья не плохая. Спасибо. Подписался. Буду следить за развитием проекта.


    1. SergeyNovak Автор
      15.09.2022 15:30
      +2

      Все верно. Но этот шаг подразумевает очень много деталей. А умеет ли пользователь пользоваться программатором или подпаяться/подключиться через UART? Имеет ли необходимые адаптеры? Известен ли root пароль? Не защищен ли u-boot паролем? Поддерживает ли u-boot команды для передачи по tftp?

      Со старыми камерами попроще конечно, но чем современней камера, тем больше изощренных защит используют вендоры. Эта тема - ящик пандоры, который я решил не вскрывать в этом посте. И без этого многим пост покажется антирекламой. Простой инструкцией по бэкапу тут не обойтись. Тут нужен творческий подход.

      Кстати, если опустить все "если" и предположить что все сложилось удачно, пользователь подключился через UART и зашел в u-boot, то для таких есть в инструкции под каждую платформу команды как забэкапить оригинальную прошивку:

      https://openipc.org/supported-hardware/full-list