Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

Sveiki visiem!

DroÅ”i vien nav noslēpums, ka mākoņu videonovēroÅ”anas pakalpojumi pēdējā laikā kļūst arvien populārāki. Un ir skaidrs, kāpēc tas notiek, video ir ā€œsmagsā€ saturs, kura glabāŔanai ir nepiecieÅ”ama infrastruktÅ«ra un liels diska atmiņas apjoms. Lai izmantotu lokālo videonovēroÅ”anas sistēmu, ir nepiecieÅ”ami lÄ«dzekļi darbÄ«bai un atbalstam gan organizācijai, kas izmanto simtiem novēroÅ”anas kameru, gan individuālam lietotājam ar vairākām kamerām.

Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

Mākoņu videonovēroÅ”anas sistēmas atrisina Å”o problēmu, nodroÅ”inot klientus ar esoÅ”u video uzglabāŔanas un apstrādes infrastruktÅ«ru. Mākoņa videonovēroÅ”anas klientam vienkārÅ”i jāpievieno kamera internetam un jāsaista tā ar savu mākoņa kontu.

Ir vairāki tehnoloÄ£iski veidi, kā savienot kameras ar mākoni. NeapÅ”aubāmi, ērtākā un lētākā metode ir tāda, ka kamera tieÅ”i savienojas un darbojas ar mākoni, bez papildu aprÄ«kojuma, piemēram, servera vai ierakstÄ«tāja, lÄ«dzdalÄ«bas.

Lai to izdarÄ«tu, kamerā ir jāinstalē programmatÅ«ras modulis, kas darbojas ar mākoni. Taču, ja runājam par lētām kamerām, tad tām ir ļoti ierobežoti aparatÅ«ras resursi, kurus gandrÄ«z 100% aizņem kameras pārdevēja vietējā programmaparatÅ«ra, un mākoņa spraudnim nepiecieÅ”amo resursu nav. Izstrādātāji no ivideon veltÄ«ja Å”o problēmu raksts, kas izskaidro, kāpēc viņi nevar instalēt spraudni lētajās kamerās. Rezultātā kameras minimālā cena ir 5000 rubļu (80 USD) un miljoniem naudas, kas iztērēta aprÄ«kojuma iegādei.

Mēs esam veiksmÄ«gi atrisinājuÅ”i Å”o problēmu. Ja interesē kā - laipni lÅ«dzam griezumā

Nedaudz vēstures

2016. gadā mēs sākām izstrādāt mākoņa videonovēroÅ”anas platformu Rostelecom.

Runājot par kameras programmatÅ«ru, pirmajā posmā mēs gājām pa ā€œstandartaā€ ceļu Ŕādiem uzdevumiem: izstrādājām savu spraudni, kas ir instalēts pārdevēja kameras standarta programmaparatÅ«rā un darbojas ar mÅ«su mākoni. Tomēr ir vērts atzÄ«mēt, ka projektÄ“Å”anas laikā mēs izmantojām visvieglākos un efektÄ«vākos risinājumus (piemēram, vienkārÅ”u C implementāciju protobuf, libev, mbedtls un pilnÄ«bā atteicāmies no ērtām, bet smagām bibliotēkām, piemēram, boost)

PaÅ”laik IP kameru tirgÅ« nav universālu integrācijas risinājumu: katram pārdevējam ir savs spraudņa instalÄ“Å”anas veids, savs API komplekts programmaparatÅ«ras darbÄ«bai un unikāls atjaunināŔanas mehānisms.

Tas nozÄ«mē, ka katram kameras pārdevējam ir nepiecieÅ”ams individuāli izstrādāt visaptveroÅ”u integrācijas programmatÅ«ras slāni. Un izstrādes uzsākÅ”anas brÄ«dÄ« ir ieteicams strādāt tikai ar 1 piegādātāju, lai koncentrētu komandas spēkus uz loÄ£ikas izstrādi darbam ar mākoni.

Pirmais izvēlētais piegādātājs bija Hikvision, viens no pasaules lÄ«deriem kameru tirgÅ«, kas nodroÅ”ina labi dokumentētu API un kompetentu inženiertehnisko atbalstu.

Mēs uzsākām savu pirmo pilotprojektu, mākoņa videonovēroÅ”anas Video Comfort, izmantojot Hikvision kameras.

GandrÄ«z uzreiz pēc palaiÅ”anas mÅ«su lietotāji sāka uzdot jautājumus par iespēju pakalpojumam pievienot lētākas citu ražotāju kameras.

Es noraidÄ«ju iespēju gandrÄ«z nekavējoties ieviest integrācijas slāni katram pārdevējam, jo ā€‹ā€‹tas ir slikti mērogojams un uzliek nopietnas tehniskas prasÄ«bas kameras aparatÅ«rai. Kameras izmaksas, kas atbilst Ŕīm ievades prasÄ«bām: ~60-70$

Tāpēc es nolēmu rakt dziļāk - izveidot savu programmaparatÅ«ru jebkura pārdevēja kamerām. Šāda pieeja ievērojami samazina prasÄ«bas kameras aparatÅ«ras resursiem ā€“ jo Slānis darbam ar mākoni ir daudz efektÄ«vāk integrēts video lietojumprogrammā, un programmaparatÅ«rā nav nevajadzÄ«gu neizmantotu tauku.

Un svarÄ«gi ir tas, ka, strādājot ar kameru zemā lÄ«menÄ«, ir iespējams izmantot aparatÅ«ras AES, kas Å”ifrē datus, neradot papildu slodzi mazjaudas centrālajam procesoram.

Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

Tajā brīdī mums nebija nekā. Pavisam nekas.

Gandrīz visi pārdevēji nebija gatavi strādāt ar mums tik zemā līmenī. Nav informācijas par shēmām un komponentiem, nav oficiāla mikroshēmojumu SDK un sensoru dokumentācijas.
Nav arī tehniskā atbalsta.

Uz visiem jautājumiem bija jāatbild, izmantojot reverso inženieriju ā€” izmēģinājumus un kļūdas. Bet mums izdevās.

Pirmie kameru modeļi, kurus pārbaudÄ«jām, bija Xiaomi Yi Ants, Hikvision, Dahua, Spezvision, D-Link kameras un vairākas Ä«paÅ”i lētas beznosaukuma Ä·Ä«nieÅ”u kameras.

Tehnika

Kameras, kuru pamatā ir Hisilicon 3518E mikroshēmojums. Kameras aparatÅ«ras Ä«paŔības ir Ŕādas:

Xiaomi Yi Ants
noname

SoC
Hisilicon 3518E
Hisilicon 3518E

RAM
64MB
64MB

FLASH
16MB
8MB

WiFi
mt7601/bcm43143
Sākot no

Devējs
ov9732 (720p)
ov9712 (720p)

Ethernet
Sākot no
+

MicroSD
+
+

Mikrofons
+
+

Runātājs
+
+

IRLed
+
+

IRCut
+
+

Mēs sākām ar viņiem.

PaÅ”laik mēs atbalstām Hisilicon 3516/3518 mikroshēmojumus, kā arÄ« Ambarella S2L/S2LM. Ir desmitiem kameru modeļu.

Programmaparatūras sastāvs

zemūdene

uboot ir sāknÄ“Å”anas ielādētājs, tas tiek palaists vispirms pēc ieslēgÅ”anas, inicializē aparatÅ«ru un ielādē Linux kodolu.

Kameras ielādes skripts ir diezgan triviāls:

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

Viena no iezÄ«mēm ir tā, ka to sauc divreiz bootm, vairāk par to nedaudz vēlāk, kad nonāksim pie atjaunināŔanas apakÅ”sistēmas.

Pievērsiet uzmanÄ«bu lÄ«nijai mem=38M. Jā, jā, tā nav drukas kļūda ā€“ Linux kodolam un visām, visām, visām lietojumprogrammām ir pieejama tikai 38 megabaiti RAM.

ArÄ« blakus uboot ir Ä«paÅ”s bloks, ko sauc reg_info, kas satur zema lÄ«meņa skriptu DDR inicializācijai un vairākus SoC sistēmas reÄ£istrus. Saturs reg_info ir atkarÄ«gs no kameras modeļa, un, ja tas nav pareizi, kamera pat nevarēs ielādēt uboot, bet sasalst jau ļoti agrÄ«nā ielādes stadijā.

Sākumā, kad strādājām bez pārdevēja atbalsta, mēs vienkārÅ”i nokopējām Å”o bloku no sākotnējās kameras programmaparatÅ«ras.

Linux kodols un rootfs

Kameras izmanto Linux kodolu, kas ir daļa no mikroshēmas SDK; parasti tie nav jaunākie kodoli no 3.x atzara, tāpēc bieži nākas saskarties ar faktu, ka papildu aprīkojuma draiveri nav saderīgi ar izmantoto kodolu. , un mums tie ir jāportē atpakaļ uz kodola kamerām.

Vēl viena problēma ir kodola izmērs. Ja FLASH izmērs ir tikai 8 MB, tad katrs baits ir svarīgs, un mūsu uzdevums ir rūpīgi atspējot visas neizmantotās kodola funkcijas, lai samazinātu izmēru līdz minimumam.

Rootfs ir pamata failu sistēma. Tas iekļauj busybox, wifi moduļa draiveri, standarta sistēmas bibliotēku komplekts, piemēram libld Šø libc, kā arÄ« mÅ«su programmatÅ«ra, kas ir atbildÄ«ga par LED vadÄ«bas loÄ£iku, tÄ«kla savienojuma pārvaldÄ«bu un programmaparatÅ«ras atjauninājumiem.

Saknes failu sistēma ir savienota ar kodolu kā initramfs un bÅ«vÄ“Å”anas rezultātā mēs iegÅ«stam vienu failu uImage, kurā ir gan kodols, gan saknes.

Video aplikācija

Sarežģītākā un resursietilpÄ«gākā programmaparatÅ«ras daļa ir lietojumprogramma, kas nodroÅ”ina video audio uztverÅ”anu, video kodÄ“Å”anu, konfigurē attēla parametrus, ievieÅ” video analÄ«zi, piemēram, kustÄ«bas vai skaņas detektorus, kontrolē PTZ un ir atbildÄ«ga par dienas un video pārslēgÅ”anu. nakts režīmi.

Svarīga, es pat teiktu, galvenā funkcija ir video lietojumprogrammas mijiedarbība ar mākoņa spraudni.

Tradicionālajos risinājumos "pārdevēja programmaparatÅ«ra + mākoņa spraudnis", kas nevar darboties ar lētu aparatÅ«ru, video kameras iekÅ”pusē tiek pārraidÄ«ts, izmantojot RTSP protokolu - un tas ir milzÄ«gs pieskaitÄ«jums: datu kopÄ“Å”ana un pārsÅ«tÄ«Å”ana, izmantojot ligzdu, nevajadzÄ«gas syscalls.

Å eit tiek izmantots dalÄ«tās atmiņas mehānisms ā€“ video netiek kopēts vai nosÅ«tÄ«ts pa ligzdu starp kameras programmatÅ«ras komponentiem, tādējādi optimāli un rÅ«pÄ«gi izmantojot kameras pieticÄ«gās aparatÅ«ras iespējas.

Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

Atjaunināt apakÅ”sistēmu

ÄŖpaÅ”s lepnums ir kļūmju izturÄ«ga apakÅ”sistēma tieÅ”saistes programmaparatÅ«ras atjauninājumiem.

Ä»aujiet man paskaidrot problēmu. ProgrammaparatÅ«ras atjaunināŔana tehniski nav vienkārÅ”a darbÄ«ba, un, ja atjaunināŔanas laikā rodas strāvas padeves pārtraukums, zibatmiņā bÅ«s daļa no ā€œnepierakstÄ«tāsā€ jaunās programmaparatÅ«ras. Ja neveiksit Ä«paÅ”us pasākumus, kamera kļūs par ā€œÄ·ieÄ£eliā€, kas jānogādā servisa centrā.

Mēs arÄ« esam tikuÅ”i galā ar Å”o problēmu. Pat ja atjaunināŔanas laikā kamera ir izslēgta, tā automātiski un bez lietotāja iejaukÅ”anās lejupielādēs programmaparatÅ«ru no mākoņa un atjaunos darbÄ«bu.

ApskatÄ«sim tehniku ā€‹ā€‹sÄ«kāk:

Visneaizsargātākais punkts ir nodalÄ«juma pārrakstÄ«Å”ana ar Linux kodolu un saknes failu sistēmu. Ja kāds no Å”iem komponentiem ir bojāts, kamera vispār netiks sāknēta ārpus uboot bootloader, kas nevar lejupielādēt programmaparatÅ«ru no mākoņa.

Tas nozÄ«mē, ka mums jebkurā laikā atjaunināŔanas procesa laikā ir jānodroÅ”ina, lai kamerai bÅ«tu strādājoÅ”s kodols un rootfs. Å Ä·iet, ka vienkārŔākais risinājums bÅ«tu pastāvÄ«gi glabāt divas kodola kopijas ar rootfs zibatmiņā un, ja galvenais kodols ir bojāts, ielādēt to no rezerves kopijas.

Labs risinājums - tomēr kodols ar rootfs aizņem apmēram 3.5 MB un pastāvÄ«gai dublÄ“Å”anai jāpieŔķir 3.5 MB. Lētākajās kamerās vienkārÅ”i nav tik daudz brÄ«vas vietas rezerves kodolam.

Tāpēc, lai dublētu kodolu programmaparatÅ«ras atjaunināŔanas laikā, mēs izmantojam lietojumprogrammas nodalÄ«jumu.
Un, lai izvēlētos vajadzÄ«go nodalÄ«jumu ar kodolu, tiek izmantotas divas komandas bootm in uboot - sākumā cenÅ”amies ielādēt galveno kodolu un ja tas ir bojāts, tad rezerves kodolu.

Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

Tas nodroÅ”ina, ka jebkurā brÄ«dÄ« kamerai bÅ«s pareizais kodols ar rootfs, un tā varēs palaist un atjaunot programmaparatÅ«ru.

CI/CD sistēma programmaparatÅ«ras izveidei un izvietoÅ”anai

Lai izveidotu programmaparatÅ«ru, mēs izmantojam gitlab CI, kas automātiski izveido programmaparatÅ«ru visiem atbalstÄ«tajiem kameru modeļiem, un pēc programmaparatÅ«ras izveides tā tiek automātiski izvietota kameras programmatÅ«ras atjaunināŔanas pakalpojumā.

Kā mēs iemācÄ«jāmies savienot Ä·Ä«nieÅ”u kameras par 1000 rubļiem ar mākoni. Bez reÄ£istrētājiem vai SMS (un ietaupÄ«ti miljoniem dolāru)

No pakalpojuma programmaparatÅ«ras atjauninājumi tiek piegādāti mÅ«su kvalitātes nodroÅ”ināŔanas pārbaudes kamerām un pēc visu testÄ“Å”anas posmu pabeigÅ”anas lietotāju kamerām.

Informācijas droŔība

Nav noslēpums, ka mÅ«sdienās informācijas droŔība ir vissvarÄ«gākais jebkuras IoT ierÄ«ces, tostarp kameru, aspekts. Tādi robottÄ«kli kā Mirai viesabonē internetā, inficējot miljoniem kameru ar pārdevēju standarta programmaparatÅ«ru. Visu cieņu kameru pārdevējiem, es nevaru nepiezÄ«mēt, ka standarta programmaparatÅ«ra satur daudz funkcionalitātes, kas nav nepiecieÅ”amas darbam ar mākoni, bet satur daudzas ievainojamÄ«bas, kuras izmanto robottÄ«kli.

Tāpēc visas mūsu programmaparatūras neizmantotās funkcionalitātes ir atspējotas, visi tcp/udp porti ir aizvērti, un, atjauninot programmaparatūru, tiek pārbaudīts programmatūras ciparparaksts.

Turklāt programmaparatūra tiek regulāri pārbaudīta informācijas droŔības laboratorijā.

Secinājums

Tagad mÅ«su programmaparatÅ«ra tiek aktÄ«vi izmantota videonovēroÅ”anas projektos. Iespējams, lielākā no tām ir balsoÅ”anas pārraide Krievijas Federācijas prezidenta vēlÄ“Å”anu dienā.
Projektā tika iesaistÄ«ti vairāk nekā 70 tÅ«kstoÅ”i kameru ar mÅ«su programmaparatÅ«ru, kuras tika uzstādÄ«tas mÅ«su valsts vēlÄ“Å”anu iecirkņos.

AtrisinājuÅ”i vairākas sarežģītas un dažviet pat tolaik gandrÄ«z neiespējamas problēmas, mēs, protams, kā inženieri saņēmām lielu gandarÄ«jumu, taču papildus tam ietaupÄ«jām arÄ« miljoniem dolāru, iegādājoties fotokameru. Un Å”ajā gadÄ«jumā ietaupÄ«jumi nav tikai vārdi un teorētiski aprēķini, bet jau pabeigta tehnikas iegādes konkursa rezultāti. AttiecÄ«gi, ja runājam par mākoņu videonovēroÅ”anu: ir divas pieejas ā€“ stratēģiski paļauties uz zema lÄ«meņa ekspertÄ«zi un attÄ«stÄ«bu, kā rezultātā ietaupot milzÄ«gus ietaupÄ«jumus uz iekārtām, vai arÄ« izmantot dārgas iekārtas, kas, ja skatās konkrēti uz patērētāju Ä«paŔībām, praktiski nav. atŔķiras no lÄ«dzÄ«giem lētiem.

Kāpēc ir stratēģiski svarÄ«gi pēc iespējas agrāk pieņemt lēmumu par integrācijas pieejas izvēli? Izstrādājot spraudni, izstrādātāji paļaujas uz noteiktām tehnoloÄ£ijām (bibliotēkām, protokoliem, standartiem). Un, ja tehnoloÄ£iju kopums tiek izvēlēts tikai dārgam aprÄ«kojumam, tad nākotnē mēģinājums pāriet uz lētām kamerām, visticamāk, prasÄ«s vismaz neprātÄ«gi ilgu laiku vai pat neizdosies un notiks atgrieÅ”anās pie dārga aprÄ«kojuma.

Avots: www.habr.com

Pievieno komentāru