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.
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
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.
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.
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.
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Ä.
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