1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Привет!

Бұлтты бейнебақылау қызметтері соңғы уақытта танымал бола бастағаны жасырын емес. Неліктен бұл орын алатыны түсінікті, бейне «ауыр» мазмұн, оны сақтау инфрақұрылымды және үлкен көлемдегі дискілерді сақтауды қажет етеді. Жергілікті бейнебақылау жүйесін пайдалану жүздеген бақылау камераларын пайдаланатын ұйым үшін де, бірнеше камерасы бар жеке пайдаланушы үшін де жұмыс істеу және қолдау үшін қаражатты қажет етеді.

1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Бұлтты бейнебақылау жүйелері бұл мәселені тұтынушыларға бар бейне сақтау және өңдеу инфрақұрылымымен қамтамасыз ету арқылы шешеді. Бұлтты бейнебақылау клиенті камераны Интернетке қосып, оны бұлттық тіркелгісіне байланыстыруы керек.

Камераларды бұлтқа қосудың бірнеше технологиялық жолдары бар. Ең қолайлы және ең арзан әдіс - камераның сервер немесе рекордер сияқты қосымша жабдықтың қатысуынсыз бұлтқа тікелей қосылып, жұмыс істеуі сөзсіз.

Ол үшін камерада бұлтпен жұмыс істейтін бағдарламалық модуль орнатылған болуы керек. Алайда, егер арзан камералар туралы айтатын болсақ, онда олардың аппараттық ресурстары өте шектеулі, оларды 100% дерлік камера сатушысының жергілікті микробағдарламасы алады және бұлттық плагинге қажетті ресурстар жоқ. Бұл мәселені ivideon әзірлеушілері арнады мақала, бұл плагинді арзан камераларға неге орната алмайтынын түсіндіреді. Нәтижесінде камераның ең төменгі бағасы - 5000 рубль (80 доллар) және жабдыққа миллиондаған ақша жұмсалады.

Біз бұл мәселені сәтті шештік. Егер сізді қалай қызықтыратын болсаңыз - кесуге қош келдіңіз

Біраз тарих

2016 жылы біз Ростелеком үшін бұлтты бейнебақылау платформасын әзірлеуді бастадық.

Камераны бағдарламалық қамтамасыз ету тұрғысынан, бірінші кезеңде біз осындай тапсырмалар үшін «стандартты» жолды ұстандық: біз жеткізушінің камерасының стандартты микробағдарламасында орнатылған және біздің бұлтпен жұмыс істейтін өз плагинімізді жасадық. Дегенмен, дизайн кезінде біз ең жеңіл және тиімді шешімдерді пайдаланғанымызды атап өткен жөн (мысалы, protobuf, libev, mbedtls қарапайым C енгізуі және толықтай бас тартылған ыңғайлы, бірақ күшейту сияқты ауыр кітапханалар)

Қазіргі уақытта IP камера нарығында әмбебап интеграциялық шешімдер жоқ: әрбір жеткізушінің плагинді орнатудың өзіндік тәсілі, микробағдарламаны басқаруға арналған API интерфейстерінің жеке жиынтығы және бірегей жаңарту механизмі бар.

Бұл әрбір камера жеткізушісі үшін интеграциялық бағдарламалық қамтамасыз етудің кешенді қабатын жеке әзірлеу қажет дегенді білдіреді. Ал әзірлеуді бастау кезінде топтың күш-жігерін бұлтпен жұмыс істеу логикасын дамытуға шоғырландыру үшін тек 1 жеткізушімен жұмыс істеген жөн.

Бірінші таңдалған жеткізуші Hikvision болды, ол жақсы құжатталған API және сауатты инженерлік техникалық қолдауды қамтамасыз ететін камера нарығындағы әлемдік көшбасшылардың бірі болды.

Біз Hikvision камераларын пайдалана отырып, «Video Comfort» бұлттық бейнебақылау атты алғашқы пилоттық жобамызды іске қостық.

Іске қосылғаннан кейін бірден дерлік біздің пайдаланушылар басқа өндірушілердің арзан камераларын қызметке қосу мүмкіндігі туралы сұрақтар қоя бастады.

Мен әрбір жеткізуші үшін интеграциялық қабатты енгізу опциясынан бірден бас тарттым - өйткені ол нашар масштабталады және камера аппараттық құралдарына елеулі техникалық талаптар қояды. Осы енгізу талаптарын қанағаттандыратын камера құны: ~60-70$

Сондықтан мен тереңірек зерттеуді шештім - кез келген сатушыдан камераларға арналған микробағдарлама жасау. Бұл тәсіл камераның аппараттық ресурстарына қойылатын талаптарды айтарлықтай төмендетеді - өйткені Бұлтпен жұмыс істеу қабаты бейне қосымшасымен әлдеқайда тиімді біріктірілген және микробағдарламада қажетсіз пайдаланылмаған май жоқ.

Ең бастысы, камерамен төмен деңгейде жұмыс істегенде, қуаттылығы аз процессорға қосымша жүктеме жасамай деректерді шифрлайтын AES аппараттық құралын пайдалануға болады.

1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Ол кезде бізде мүлде ештеңе болмады. Ештеңе.

Барлық дерлік сатушылар бізбен мұндай төмен деңгейде жұмыс істеуге дайын емес еді. Схемалар мен компоненттер туралы ақпарат жоқ, чипсеттердің ресми SDK және сенсорлық құжаттама жоқ.
Сондай-ақ техникалық қолдау жоқ.

Барлық сұрақтарға кері инженерия — сынақ және қателік арқылы жауап беру керек болды. Бірақ біз үлгердік.

Біз сынақтан өткізген алғашқы камера үлгілері Xiaomi Yi Ants, Hikvision, Dahua, Spezvision, D-Link камералары және бірнеше өте арзан атаусыз қытай камералары болды.

Техника

Hisilicon 3518E чипсетіне негізделген камералар. Камералардың аппараттық сипаттамалары келесідей:

Xiaomi Yi құмырсқалар
Noname

SoC
Hisilicon 3518E
Hisilicon 3518E

Жедел Жадтау Құрылғысы
64MB
64MB

FLASH
16MB
8MB

Wifi
mt7601/bcm43143
-

Сенсор
ov9732 (720p)
ov9712 (720p)

Ethernet
-
+

MicroSD
+
+

Микрофон
+
+

Спикер
+
+

IRLed
+
+

IRCut
+
+

Біз олардан бастадық.

Қазіргі уақытта біз Hisilicon 3516/3518 чипсеттерін, сондай-ақ Ambarella S2L/S2LM қолдаймыз. Ондаған камера үлгілері бар.

Микробағдарлама құрамы

сүңгуір қайық

uboot – жүктеуші, ол қуат қосылғаннан кейін алдымен жүктеледі, аппараттық құралды инициализациялайды және Linux ядросын жүктейді.

Камераны жүктеу сценарийі өте тривиальды:

bootargs=mem=38M console=ttyAMA0,115200 rootfstype=ramfs mtdparts=hi_sfc:256K(boot),64K(tech),4096K(kernel),8192K(app),-(config) hw_type=101
bootcmd=sf probe 0; sf read 0x82000000 0x50000 0x400000; bootm 0x82000000; setenv bootargs $(bootargs) bkp=1; sf read 0x82000000 0x450000 0x400000; bootm 0x82000000

Бір ерекшелігі – екі рет шақырылады bootm, бұл туралы толығырақ сәл кейінірек, жаңарту ішкі жүйесіне келгенде.

Жолға назар аударыңыз mem=38M. Иә, иә, бұл қате емес - Linux ядросы және барлығы, барлық қолданбалар тек 38 мегабайт жедел жадыға қол жеткізе алады.

Сондай-ақ uboot жанында арнайы блок бар reg_info, ол DDR инициализациялау үшін төмен деңгейлі сценарийді және SoC жүйелік регистрлерінің бірқатарын қамтиды. Мазмұны reg_info камера үлгісіне байланысты және ол дұрыс болмаса, камера тіпті uboot-ты жүктей алмайды, бірақ жүктеудің ең ерте сатысында қатып қалады.

Алдымен біз жеткізушінің қолдауынсыз жұмыс істеген кезде, біз бұл блокты камераның бастапқы микробағдарламасынан көшіріп алдық.

Linux ядросы және rootfs

Камералар чиптің SDK бөлігі болып табылатын Linux ядросын пайдаланады; әдетте бұл 3.x тармағының соңғы ядролары емес, сондықтан біз жиі қосымша жабдыққа арналған драйверлердің пайдаланылған ядромен үйлесімді еместігімен күресуге тура келеді. , және біз оларды ядролық камераларға кері портқа көшіруіміз керек.

Тағы бір мәселе - ядроның өлшемі. FLASH өлшемі небәрі 8 МБ болғанда, әрбір байт есептеледі және біздің міндетіміз өлшемді минимумға дейін азайту үшін барлық пайдаланылмаған ядро ​​функцияларын мұқият өшіру болып табылады.

Rootfs - негізгі файлдық жүйе. Оған кіреді busybox, wifi модулінің драйверлері, стандартты жүйелік кітапханалар жиынтығы, мысалы libld и libc, сонымен қатар жарық диодты басқару логикасына, желі қосылымын басқаруға және микробағдарлама жаңартуларына жауап беретін бағдарламалық құралымыз.

Түбірлік файлдық жүйе ядроға initramfs ретінде қосылған және құрастыру нәтижесінде біз бір файл аламыз uImage, оның құрамында ядро ​​да, түбірлер де бар.

Бейне қолданбасы

Микробағдарламаның ең күрделі және ресурсты көп қажет ететін бөлігі бейне-аудио түсіруді, бейне кодтауды қамтамасыз ететін, сурет параметрлерін конфигурациялайтын, бейне аналитиканы, мысалы, қозғалыс немесе дыбыс детекторларын жүзеге асыратын, PTZ-ді басқаратын және күнді ауыстыруға жауап беретін қолданба болып табылады. түнгі режимдер.

Маңызды, тіпті айтарым, негізгі функция - бұл бейне қолданбасының бұлттық плагинмен өзара әрекеттесуі.

Арзан аппараттық құралда жұмыс істей алмайтын дәстүрлі «өндіруші микробағдарламасы + бұлттық плагин» шешімдерінде камера ішіндегі бейне RTSP протоколы арқылы жіберіледі - бұл үлкен шығындар: деректерді ұяшық арқылы көшіру және беру, қажет емес жүйелік қоңыраулар.

Мұнда біз ортақ жад механизмін қолданамыз - бейне көшірілмейді немесе камера бағдарламалық құралының құрамдас бөліктері арасында ұяшық арқылы жіберілмейді, осылайша камераның қарапайым аппараттық мүмкіндіктерін оңтайлы және мұқият пайдаланады.

1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Ішкі жүйені жаңарту

Ерекше мақтаныш нүктесі - микробағдарламалық жасақтаманы онлайн жаңартуға арналған ақауларға төзімді ішкі жүйе.

Мәселені түсіндірейін. Микробағдарламаны жаңарту техникалық тұрғыдан атомдық операция болып табылмайды және жаңартудың ортасында қуат ақаулығы орын алса, флэш-жад «аз жазылған» жаңа микробағдарламаның бір бөлігін қамтиды. Арнайы шаралар қолданбасаңыз, камера «кірпішке» айналады, оны қызмет көрсету орталығына апару керек.

Біз бұл мәселемен де айналыстық. Жаңарту кезінде камера өшірілсе де, ол автоматты түрде және пайдаланушының араласуынсыз микробағдарламаны бұлттан жүктеп алып, жұмысын қалпына келтіреді.

Техниканы толығырақ қарастырайық:

Ең осал нүкте Linux ядросы мен түбірлік файлдық жүйемен бөлімді қайта жазу болып табылады. Осы құрамдастардың бірі зақымдалған болса, камера бұлттан микробағдарламаны жүктеп ала алмайтын uboot жүктеушіден тыс мүлде жүктелмейді.

Бұл жаңарту процесі кезінде кез келген уақытта камерада жұмыс істейтін ядро ​​мен rootfs бар екеніне көз жеткізуіміз керек дегенді білдіреді. Ең қарапайым шешім флэш-жадта rootfs бар ядроның екі көшірмесін үнемі сақтау және негізгі ядро ​​зақымдалған болса, оны сақтық көшірмеден жүктеп алу болып көрінетін сияқты.

Жақсы шешім - дегенмен, rootfs бар ядро ​​шамамен 3.5 МБ алады және тұрақты сақтық көшірме үшін 3.5 МБ бөлу керек. Ең арзан камераларда резервтік ядро ​​үшін сонша бос орын жоқ.

Сондықтан микробағдарламаны жаңарту кезінде ядроның сақтық көшірмесін жасау үшін біз қолданба бөлімін қолданамыз.
Ал ядромен қажетті бөлімді таңдау үшін екі команда қолданылады bootm uboot ішінде - басында біз негізгі ядроны жүктеуге тырысамыз, ал егер ол зақымдалған болса, онда сақтық көшірме.

1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Бұл кез келген уақытта камерада rootfs бар дұрыс ядро ​​болуын және микробағдарламаны жүктеу және қалпына келтіру мүмкіндігін қамтамасыз етеді.

Микробағдарламаны құру және орналастыру үшін CI/CD жүйесі

Микробағдарламаны құру үшін біз барлық қолдау көрсетілетін камера үлгілері үшін микробағдарламаны автоматты түрде құрастыратын gitlab CI қолданамыз және микробағдарламаны құрастырғаннан кейін ол камера бағдарламалық құралын жаңарту қызметіне автоматты түрде орналастырылады.

1000 рубльге қытайлық камераларды бұлтқа қосуды қалай үйрендік. Тіркеушілер немесе SMS жоқ (және миллиондаған доллар үнемделеді)

Қызметтен микробағдарлама жаңартулары QA сынақ камераларына және барлық сынақ кезеңдері аяқталғаннан кейін пайдаланушылардың камераларына жеткізіледі.

Ақпараттық қауіпсіздік

Қазіргі уақытта ақпараттық қауіпсіздік кез келген IoT құрылғысының, соның ішінде камералардың ең маңызды аспектісі екені ешкімге құпия емес. Mirai сияқты ботнеттер Интернетте роумингте жүріп, миллиондаған камераларды жеткізушілердің стандартты микробағдарламасымен жұқтырады. Камера жеткізушілерін құрметтей отырып, стандартты микробағдарламада бұлтпен жұмыс істеу үшін қажет емес, бірақ ботнеттер пайдаланатын көптеген осалдықтар бар көптеген функционалдық бар екенін атап өткім келмейді.

Сондықтан, біздің микробағдарламадағы барлық пайдаланылмаған функциялар өшірілген, барлық tcp/udp порттары жабылған және микробағдарламаны жаңарту кезінде бағдарламалық құралдың цифрлық қолтаңбасы тексеріледі.

Сонымен қатар, микробағдарлама ақпараттық қауіпсіздік зертханасында тұрақты сынақтан өтеді.

қорытынды

Қазір біздің микробағдарлама бейнебақылау жобаларында белсенді қолданылады. Мүмкін, олардың ең үлкені - Ресей Федерациясының Президентін сайлау күніндегі дауыс беру трансляциясы.
Жобаға біздің еліміздегі сайлау учаскелерінде орнатылған микробағдарламасы бар 70 мыңнан астам камера тартылды.

Бірқатар күрделі, ал кейбір жерлерде, тіпті сол кездің өзінде мүмкін емес дерлік мәселелерді шешіп, біз, әрине, инженерлер ретінде үлкен қанағаттанушылыққа ие болдық, бірақ сонымен қатар камераларды сатып алудан миллиондаған доллар үнемдедік. Және бұл жағдайда үнемдеу сөздер мен теориялық есептеулер ғана емес, жабдықты сатып алу бойынша аяқталған тендердің нәтижесі болып табылады. Тиісінше, егер бұлтты бейнебақылау туралы айтатын болсақ: екі тәсіл бар - стратегиялық тұрғыдан төмен деңгейдегі сараптама мен әзірлеуге сүйенеді, нәтижесінде жабдықты үнемдейді немесе қымбат жабдықты пайдаланыңыз, егер сіз тұтынушылық сипаттамаларына нақты қарасаңыз, іс жүзінде жоқ. ұқсас арзандардан ерекшеленеді.

Неліктен интеграциялық тәсілді таңдауды мүмкіндігінше ертерек шешу стратегиялық маңызды? Плагинді әзірлеу кезінде әзірлеушілер белгілі бір технологияларға (кітапханалар, хаттамалар, стандарттар) сүйенеді. Ал егер технологиялар жиынтығы тек қымбат жабдық үшін таңдалса, онда болашақта арзан камераларға ауысу әрекеті, ең болмағанда, өте ұзақ уақытқа созылады немесе тіпті сәтсіздікке ұшырайды және қымбат жабдыққа қайта оралуы мүмкін.

Ақпарат көзі: www.habr.com

пікір қалдыру