Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Hello kila mtu!

Pengine sio siri kwamba huduma za ufuatiliaji wa video za wingu zimekuwa zikipata umaarufu hivi karibuni. Na ni wazi kwa nini hii inatokea, video ni "nzito" maudhui, uhifadhi ambao unahitaji miundombinu na kiasi kikubwa cha hifadhi ya disk. Kutumia mfumo wa ufuatiliaji wa video kwenye majengo kunahitaji fedha ili kufanya kazi na usaidizi, kwa shirika linalotumia mamia ya kamera za uchunguzi na kwa mtumiaji binafsi aliye na kamera kadhaa.

Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Mifumo ya ufuatiliaji wa video za wingu hutatua tatizo hili kwa kuwapa wateja hifadhi iliyopo na miundombinu ya usindikaji. Mteja wa ufuatiliaji wa video wa wingu anahitaji tu kuunganisha kamera kwenye Mtandao na kuiunganisha na akaunti yake ya wingu.

Kuna njia kadhaa za kiteknolojia za kuunganisha kamera kwenye wingu. Bila shaka, njia rahisi na ya bei nafuu zaidi ni kwamba kamera inaunganisha moja kwa moja na kufanya kazi na wingu, bila ushiriki wa vifaa vya ziada kama seva au kinasa.

Ili kufanya hivyo, ni muhimu kwamba moduli ya programu inayofanya kazi na wingu iwe imewekwa kwenye kamera. Hata hivyo, ikiwa tunazungumzia kuhusu kamera za bei nafuu, basi zina rasilimali ndogo sana za vifaa, ambazo ni karibu 100% zinazochukuliwa na firmware ya asili ya muuzaji wa kamera, na hakuna rasilimali muhimu kwa ajili ya programu-jalizi ya wingu. Watengenezaji kutoka ivideon walitumia tatizo hili nakala, ambayo inaelezea kwa nini hawawezi kusakinisha programu-jalizi kwenye kamera za bei nafuu. Matokeo yake, bei ya chini ya kamera ni rubles 5000 (dola 80) na mamilioni ya fedha zilizotumiwa kwenye vifaa.

Tumefanikiwa kutatua tatizo hili. Ikiwa una nia ya jinsi - kuwakaribisha kwa kukata

kidogo ya historia

Mnamo 2016, tulianza kuunda jukwaa la ufuatiliaji wa video ya wingu kwa Rostelecom.

Kwa upande wa programu ya kamera, katika hatua ya kwanza tulifuata njia "ya kawaida" kwa kazi kama hizo: tulitengeneza programu-jalizi yetu wenyewe, ambayo imewekwa kwenye firmware ya kawaida ya kamera ya muuzaji na inafanya kazi na wingu letu. Walakini, inafaa kuzingatia kwamba wakati wa muundo tulitumia suluhisho nyepesi na bora (kwa mfano, utekelezaji wa C wa protobuf, libev, mbedtls na maktaba zilizoachwa rahisi lakini nzito kama kuongeza)

Hivi sasa, hakuna suluhisho za ujumuishaji wa ulimwengu wote kwenye soko la kamera ya IP: kila muuzaji ana njia yake ya kusakinisha programu-jalizi, seti yake ya API za kuendesha programu-jalizi, na utaratibu wa kipekee wa kusasisha.

Hii ina maana kwamba kwa kila muuzaji wa kamera ni muhimu kuunda safu ya kina ya programu ya kuunganisha. Na wakati wa kuanza maendeleo, inashauriwa kufanya kazi na muuzaji 1 pekee ili kuzingatia juhudi za timu katika kukuza mantiki ya kufanya kazi na wingu.

Muuzaji wa kwanza aliyechaguliwa alikuwa Hikvision, mmoja wa viongozi wa ulimwengu katika soko la kamera, akitoa API iliyohifadhiwa vizuri na usaidizi wa kiufundi wa uhandisi.

Tulizindua mradi wetu wa kwanza wa majaribio, ufuatiliaji wa video wa wingu wa Comfort, kwa kutumia kamera za Hikvision.

Karibu mara baada ya uzinduzi, watumiaji wetu walianza kuuliza maswali kuhusu uwezekano wa kuunganisha kamera za bei nafuu kutoka kwa wazalishaji wengine kwenye huduma.

Nilikataa chaguo la kutekeleza safu ya ujumuishaji kwa kila muuzaji karibu mara moja - kwani haiwezi kuongezwa vizuri na inaweka mahitaji makubwa ya kiufundi kwenye maunzi ya kamera. Gharama ya kamera inayokidhi mahitaji haya ya uingizaji: ~60-70$

Kwa hivyo, niliamua kuchimba zaidi - kutengeneza firmware yangu mwenyewe kwa kamera kutoka kwa muuzaji yeyote. Njia hii inapunguza kwa kiasi kikubwa mahitaji ya rasilimali za vifaa vya kamera - kwa sababu Safu ya kufanya kazi na wingu imeunganishwa kwa ufanisi zaidi na programu ya video, na hakuna mafuta yasiyo ya lazima yasiyotumiwa katika firmware.

Na nini muhimu ni kwamba wakati wa kufanya kazi na kamera kwa kiwango cha chini, inawezekana kutumia vifaa vya AES, ambavyo vinasimba data bila kuunda mzigo wa ziada kwenye CPU ya chini ya nguvu.

Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Wakati huo hatukuwa na kitu kabisa. Hakuna kitu kabisa.

Takriban wachuuzi wote hawakuwa tayari kufanya kazi nasi kwa kiwango cha chini kama hicho. Hakuna taarifa kuhusu mzunguko na vipengele, hakuna SDK rasmi ya chipsets na nyaraka za sensor.
Pia hakuna msaada wa kiufundi.

Maswali yote yalipaswa kujibiwa kwa njia ya uhandisi wa kinyume-jaribio na makosa. Lakini tuliweza.

Mifano za kwanza za kamera tulizofanyia majaribio zilikuwa Xiaomi Yi Ants, Hikvision, Dahua, Spezvision, D-Link kamera na kamera kadhaa za bei nafuu zisizo na majina za Kichina.

Mbinu

Kamera kulingana na chipset ya Hisilicon 3518E. Tabia za vifaa vya kamera ni kama ifuatavyo.

Xiaomi Yi Mchwa
noname

SoC
Hisilicon 3518E
Hisilicon 3518E

RAM
64MB
64MB

Kiwango cha
16MB
8MB

Wifi
mt7601/bcm43143
-

Sensor
ov9732 (720p)
ov9712 (720p)

Ethernet
-
+

MicroSD
+
+

Kipaza sauti
+
+

Spika
+
+

IRLed
+
+

IRCut
+
+

Tulianza nao.

Kwa sasa tunaauni chipsets za Hisilicon 3516/3518, pamoja na Ambarella S2L/S2LM. Kuna mifano kadhaa ya kamera.

Muundo wa firmware

manowari

uboot ni kipakiaji cha buti, huwasha kwanza baada ya kuwasha, huanzisha maunzi na kupakia kernel ya linux.

Hati ya upakiaji wa kamera ni ndogo sana:

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

Moja ya vipengele ni kwamba inaitwa mara mbili bootm, zaidi kuhusu hili baadaye kidogo, tutakapofika kwenye mfumo mdogo wa kusasisha.

Makini na mstari mem=38M. Ndiyo, ndiyo, hii sio typo - kernel ya Linux na yote, yote, maombi yote yana ufikiaji wa megabytes 38 tu za RAM.

Pia karibu na uboot kuna block maalum inaitwa reg_info, ambayo ina hati ya kiwango cha chini ya kuanzisha DDR na idadi ya rejista za mfumo wa SoC. Maudhui reg_info inategemea mfano wa kamera, na ikiwa si sahihi, kamera haitaweza hata kupakia uboot, lakini itafungia katika hatua ya awali ya upakiaji.

Mwanzoni, tulipofanya kazi bila usaidizi wa muuzaji, tulinakili kizuizi hiki kutoka kwa programu dhibiti asili ya kamera.

Linux kernel na rootfs

Kamera hutumia kinu cha Linux, ambacho ni sehemu ya SDK ya chip; kwa kawaida hizi sio punje za hivi punde kutoka kwa tawi la 3.x, kwa hivyo mara nyingi tunalazimika kushughulika na ukweli kwamba viendeshi vya vifaa vya ziada haziendani na punje inayotumika. , na inatubidi kuziweka nyuma kwa kamera za kernel.

Suala jingine ni saizi ya kernel. Wakati ukubwa wa FLASH ni 8MB pekee, basi kila baiti inahesabiwa na kazi yetu ni kuzima kwa uangalifu vitendaji vyote vya kernel ambavyo havijatumika ili kupunguza ukubwa kwa kiwango cha chini.

Rootfs ni mfumo wa msingi wa faili. Inajumuisha busybox, viendeshi vya moduli za wifi, seti ya maktaba ya mfumo wa kawaida, kama vile libld ΠΈ libc, pamoja na programu yetu, ambayo inawajibika kwa mantiki ya udhibiti wa LED, usimamizi wa uunganisho wa mtandao na sasisho za firmware.

Mfumo wa faili wa mizizi umeunganishwa kwenye kernel kama initramfs na kama matokeo ya ujenzi tunapata faili moja. uImage, ambayo ina kernel na rootfs.

Programu ya video

Sehemu ngumu zaidi na yenye rasilimali nyingi ya firmware ni programu, ambayo hutoa kukamata sauti-sauti, usimbuaji video, husanidi vigezo vya picha, kutekeleza uchanganuzi wa video, kwa mfano, vigunduzi vya mwendo au sauti, hudhibiti PTZ na inawajibika kwa kubadili siku na. modes za usiku.

Jambo muhimu, ningesema hata ufunguo, ni jinsi programu ya video inavyoingiliana na programu-jalizi ya wingu.

Katika suluhisho za kitamaduni 'firmware ya muuzaji + programu-jalizi ya wingu', ambayo haiwezi kufanya kazi kwenye maunzi ya bei nafuu, video ndani ya kamera hupitishwa kupitia itifaki ya RTSP - na hii ni kichwa kikubwa: kunakili na kusambaza data kupitia soketi, siskali zisizo za lazima.

Hapa tunatumia utaratibu wa kumbukumbu iliyoshirikiwa - video haijakiliwa au kutumwa kupitia tundu kati ya vipengele vya programu ya kamera, na hivyo kwa usahihi na kwa uangalifu kutumia uwezo wa kawaida wa vifaa vya kamera.

Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Sasisha mfumo mdogo

Jambo la kujivunia maalum ni mfumo mdogo unaostahimili makosa kwa sasisho za programu mtandaoni.

Hebu nieleze tatizo. Kusasisha firmware ni kitaalam si operesheni ya atomiki, na ikiwa kushindwa kwa nguvu hutokea katikati ya sasisho, basi kumbukumbu ya flash itakuwa na sehemu ya "chini-imeandikwa" firmware mpya. Ikiwa hautachukua hatua maalum, basi kamera itakuwa "matofali" ambayo inahitaji kupelekwa kituo cha huduma.

Tumeshughulika na tatizo hili pia. Hata ikiwa kamera imezimwa wakati wa sasisho, itapakua kiotomatiki na bila uingiliaji wa mtumiaji kutoka kwa wingu na kurejesha operesheni.

Wacha tuangalie mbinu hiyo kwa undani zaidi:

Jambo lililo hatarini zaidi ni kubatilisha kizigeu na kinu cha Linux na mfumo wa faili wa mizizi. Ikiwa moja ya vipengele hivi imeharibiwa, kamera haitafungua kabisa zaidi ya bootloader ya uboot, ambayo haiwezi kupakua firmware kutoka kwa wingu.

Hii inamaanisha kuwa tunahitaji kuhakikisha kuwa kamera ina kernel na vipakuzi vinavyofanya kazi wakati wowote wakati wa mchakato wa kusasisha. Inaweza kuonekana kuwa suluhisho rahisi zaidi itakuwa kuhifadhi nakala mbili za kernel kila wakati na mizizi kwenye kumbukumbu ya flash na, ikiwa kernel kuu imeharibiwa, pakia kutoka kwa nakala rudufu.

Suluhisho zuri - hata hivyo, punje iliyo na rootfs inachukua takriban 3.5MB na kwa nakala rudufu ya kudumu unahitaji kutenga 3.5MB. Kamera za bei rahisi zaidi hazina nafasi nyingi za bure kwa kernel ya chelezo.

Kwa hivyo, kuweka nakala rudufu ya kernel wakati wa sasisho la programu, tunatumia kizigeu cha programu.
Na kuchagua kizigeu unachotaka na kernel, amri mbili hutumiwa bootm katika uboot - mwanzoni tunajaribu kupakia kernel kuu na ikiwa imeharibiwa, basi chelezo.

Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Hii inahakikisha kwamba wakati wowote kamera itakuwa na kernel sahihi na rootfs, na itakuwa na uwezo wa boot na kurejesha firmware.

Mfumo wa CI/CD wa kujenga na kupeleka programu dhibiti

Ili kuunda programu dhibiti, tunatumia gitlab CI, ambayo hutengeneza programu kiotomatiki kwa mifano yote ya kamera inayotumika, na baada ya kuunda programu dhibiti, inatumwa kiotomatiki kwa huduma ya kusasisha programu ya kamera.

Jinsi tulijifunza kuunganisha kamera za Kichina kwa rubles 1000 kwenye wingu. Hakuna wakataji miti au SMS (na kuokoa mamilioni ya dola)

Kutoka kwa huduma, masasisho ya programu dhibiti huwasilishwa kwa kamera zetu za majaribio ya QA, na baada ya kukamilika kwa hatua zote za majaribio, kwa kamera za watumiaji.

Usalama wa Habari

Sio siri kuwa siku hizi usalama wa habari ndio sehemu muhimu zaidi ya kifaa chochote cha IoT, pamoja na kamera. Boti kama vile Mirai zinazurura kwenye Mtandao, zikiambukiza mamilioni ya kamera na programu dhibiti ya kawaida kutoka kwa wachuuzi. Kwa heshima zote kwa wachuuzi wa kamera, siwezi kusaidia lakini kumbuka kuwa firmware ya kawaida ina utendaji mwingi ambao hauhitajiki kwa kufanya kazi na wingu, lakini ina udhaifu mwingi ambao botnets huchukua faida.

Kwa hiyo, utendaji wote ambao haujatumiwa katika firmware yetu umezimwa, bandari zote za tcp/udp zimefungwa, na wakati wa kusasisha firmware, saini ya digital ya programu inakaguliwa.

Na zaidi ya hayo, firmware inakabiliwa na majaribio ya mara kwa mara katika maabara ya usalama wa habari.

Hitimisho

Sasa firmware yetu inatumika kikamilifu katika miradi ya ufuatiliaji wa video. Labda kubwa zaidi ni matangazo ya kupiga kura siku ya uchaguzi wa Rais wa Shirikisho la Urusi.
Mradi huo ulihusisha zaidi ya kamera elfu 70 na firmware yetu, ambayo iliwekwa kwenye vituo vya kupigia kura katika nchi yetu.

Baada ya kusuluhisha idadi ya magumu, na katika sehemu zingine, hata wakati huo shida zisizowezekana, sisi, kwa kweli, tulipata kuridhika sana kama wahandisi, lakini zaidi ya hayo, tuliokoa mamilioni ya dola kwa ununuzi wa kamera. Na katika kesi hii, akiba sio maneno tu na mahesabu ya kinadharia, lakini matokeo ya zabuni iliyokamilishwa tayari kwa ununuzi wa vifaa. Ipasavyo, ikiwa tunazungumza juu ya ufuatiliaji wa video ya wingu: kuna njia mbili - kimkakati hutegemea utaalam na maendeleo ya kiwango cha chini, na kusababisha akiba kubwa kwenye vifaa, au kutumia vifaa vya gharama kubwa, ambavyo, ikiwa utaangalia haswa sifa za watumiaji, sio kweli. tofauti na bei nafuu zinazofanana.

Kwa nini ni muhimu kimkakati kuamua juu ya uchaguzi wa mbinu ya ujumuishaji mapema iwezekanavyo? Wakati wa kuunda programu-jalizi, watengenezaji hutegemea teknolojia fulani (maktaba, itifaki, viwango). Na ikiwa seti ya teknolojia imechaguliwa tu kwa vifaa vya gharama kubwa, basi katika siku zijazo jaribio la kubadili kamera za bei nafuu litakuwa na uwezekano mkubwa, kwa kiwango cha chini, kuchukua muda mrefu sana au hata kushindwa na kurudi kwa vifaa vya gharama kubwa kutatokea.

Chanzo: mapenzi.com

Kuongeza maoni