Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

ВсСм ΠŸΡ€ΠΈΠ²Π΅Ρ‚!

Mesthine dudu rahasia manawa layanan pengawasan video awan wis entuk popularitas bubar. Lan jelas kenapa iki kedadeyan, video minangka konten "abot", panyimpenan sing mbutuhake infrastruktur lan panyimpenan disk sing akeh. Nggunakake sistem ndjogo video ing panggonan mbutuhake dana kanggo operate lan ndhukung, loro kanggo organisasi nggunakake atusan kamera ndjogo lan kanggo pangguna individu karo sawetara kamera.

Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

Sistem pengawasan video awan ngatasi masalah iki kanthi nyedhiyakake infrastruktur panyimpenan lan pangolahan video sing wis ana. Klien ndjogo video awan mung kudu nyambungake kamera menyang Internet lan nyambung menyang akun maya.

Ana sawetara cara teknologi kanggo nyambungake kamera menyang awan. Mesthi, cara sing paling trep lan murah yaiku kamera langsung nyambung lan bisa digunakake karo awan, tanpa partisipasi peralatan tambahan kayata server utawa perekam.

Kanggo nindakake iki, modul piranti lunak sing digunakake karo awan kudu diinstal ing kamera. Nanging, yen kita pirembagan bab kamera mirah, padha duwe sumber daya hardware winates banget, kang meh 100% dikuwasani dening firmware native vendor kamera, lan ora ana sumber daya perlu kanggo plugin maya. Pangembang saka ivideon nyedhiyakake masalah iki artikel, sing nerangake kenapa ora bisa nginstal plugin ing kamera murah. AkibatΓ©, rega minimal kamera yaiku 5000 rubel ($ 80 dolar) lan mayuta-yuta dhuwit sing digunakake kanggo peralatan.

Kita wis kasil ngatasi masalah iki. Yen sampeyan kasengsem ing carane - welcome to potong

Sawetara sejarah

Ing 2016, kita miwiti ngembangake platform pengawasan video awan kanggo Rostelecom.

Ing babagan piranti lunak kamera, ing tahap pisanan kita ngetutake jalur "standar" kanggo tugas kasebut: kita ngembangake plugin kita dhewe, sing diinstal ing perangkat kukuh standar kamera vendor lan bisa digunakake karo awan kita. Nanging, perlu dicathet yen sajrone desain kita nggunakake solusi sing paling entheng lan efisien (contone, implementasine C polos saka protobuf, libev, mbedtls lan perpustakaan sing trep nanging abot banget ditinggalake kaya boost)

Saiki, ora ana solusi integrasi universal ing pasar kamera IP: saben vendor duwe cara dhewe kanggo nginstal plugin, set API dhewe kanggo ngoperasikake perangkat kukuh, lan mekanisme nganyari sing unik.

Iki tegese kanggo saben vendor kamera perlu kanggo individu ngembangaken lapisan lengkap lunak integrasi. Lan nalika miwiti pembangunan, disaranake mung nggarap 1 vendor supaya bisa konsentrasi upaya tim kanggo ngembangake logika kanggo nggarap awan.

Vendor pisanan sing dipilih yaiku Hikvision, salah sawijining pimpinan jagad ing pasar kamera, nyedhiyakake API sing didokumentasikake kanthi apik lan dhukungan teknis teknik sing kompeten.

Kita ngluncurake proyek percontohan pertama, Video Comfort pengawasan video awan, nggunakake kamera Hikvision.

Meh sanalika sawise diluncurake, pangguna kita wiwit takon babagan kemungkinan nyambungake kamera sing luwih murah saka manufaktur liyane menyang layanan kasebut.

Aku nolak pilihan saka ngleksanakake lapisan integrasi kanggo saben vendor meh langsung - amarga iku ora keukur lan nemtokke syarat technical serius ing hardware kamera. Biaya kamera sing nyukupi syarat input iki: ~60-70$

Mulane, aku mutusake kanggo nggali luwih jero - nggawe perangkat kukuh dhewe kanggo kamera saka vendor apa wae. Pendekatan iki nyuda syarat kanggo sumber hardware kamera - amarga Lapisan kanggo nggarap awan luwih efektif digabungake karo aplikasi video, lan ora ana lemak sing ora perlu ing perangkat kukuh.

Lan sing penting yaiku nalika nggarap kamera ing tingkat sing sithik, sampeyan bisa nggunakake hardware AES, sing ndhelik data tanpa nggawe beban tambahan ing CPU kurang daya.

Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

Ing wayahe kita ora duwe apa-apa. Ora ana apa-apa.

Meh kabeh vendor padha ora siap kanggo bisa karo kita ing tingkat kurang. Ora ana informasi babagan sirkuit lan komponen, ora ana SDK resmi chipset lan dokumentasi sensor.
Uga ora ana dhukungan teknis.

Kabeh pitakonan kudu dijawab liwat reverse engineering-trial and error. Nanging kita bisa.

Model kamera pisanan sing diuji yaiku Xiaomi Yi Ants, Hikvision, Dahua, Spezvision, kamera D-Link lan sawetara kamera Cina tanpa jeneng sing murah banget.

Teknik

Kamera adhedhasar chipset Hisilicon 3518E. Karakteristik hardware kamera kaya ing ngisor iki:

Xiaomi Yi Ants Kab
Noname

SoC
Hisilicon 3518E
Hisilicon 3518E

Ram
64MB
64MB

FLASH
16MB
8MB

WiFi
mt7601/bcm43143
-

sensor
ov9732 (720p)
ov9712 (720p)

Ethernet
-
+

MicroSD
+
+

mikropon
+
+

speaker
+
+

IRLed
+
+

IRCut
+
+

Kita miwiti karo wong-wong mau.

Saiki kita ndhukung chipset Hisilicon 3516/3518, uga Ambarella S2L / S2LM. Ana puluhan model kamera.

Komposisi firmware

kapal selam

uboot punika boot loader, boots pisanan sawise daya ing, initializes hardware lan mbukak kernel linux.

Skrip loading kamera cukup sepele:

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

Salah sawijining fitur yaiku diarani kaping pindho bootm, liyane babagan iki sethitik mengko, nalika kita njaluk menyang subsistem nganyari.

Pay manungsa waΓ© menyang baris mem=38M. Ya, ya, iki dudu kesalahan ketik - kernel Linux lan kabeh, kabeh, kabeh aplikasi duwe akses menyang mung 38 megabyte RAM.

Uga ing jejere uboot ana blok khusus sing diarani reg_info, sing ngemot skrip tingkat rendah kanggo miwiti DDR lan sawetara ndhaptar sistem SoC. Isi reg_info gumantung ing model kamera, lan yen ora bener, kamera malah ora bisa mbukak uboot, nanging bakal beku ing tataran banget awal loading.

Ing wiwitan, nalika kita kerja tanpa dhukungan vendor, kita mung nyalin blok iki saka perangkat kukuh kamera asli.

Linux kernel lan rootfs

Kamera nggunakake kernel Linux, yaiku bagean saka SDK chip; biasane iki dudu kernel paling anyar saka cabang 3.x, mula kita asring kudu ngatasi kasunyatan manawa driver kanggo peralatan tambahan ora kompatibel karo kernel sing digunakake. , lan kita kudu bali-port menyang kamera kernel.

Masalah liyane yaiku ukuran kernel. Nalika ukuran FLASH mung 8MB, mula saben bait diitung lan tugas kita yaiku mateni kabeh fungsi kernel sing ora digunakake kanggo nyuda ukuran minimal.

Rootfs minangka sistem file dhasar. Iku kalebu busybox, driver modul wifi, pesawat saka perpustakaan sistem standar, kayata libld ΠΈ libc, uga piranti lunak kita, sing tanggung jawab kanggo logika kontrol LED, manajemen sambungan jaringan lan nganyari perangkat kukuh.

Sistem file root disambungake menyang kernel minangka initramfs lan minangka asil saka mbangun kita entuk siji file uImage, sing ngemot kernel lan rootfs.

Aplikasi video

Bagean perangkat kukuh sing paling rumit lan intensif sumber daya yaiku aplikasi, sing nyedhiyakake panangkepan video-audio, enkoding video, ngatur paramèter gambar, ngleksanakake analytics video, contone, detektor gerakan utawa swara, ngontrol PTZ lan tanggung jawab kanggo ngalih dina lan mode wengi.

Sing penting, aku malah ngomong kunci, fitur yaiku carane aplikasi video sesambungan karo plugin awan.

Ing solusi tradisional 'perangkat kukuh vendor + plugin maya', sing ora bisa digunakake ing hardware murah, video ing kamera dikirim liwat protokol RTSP - lan iki overhead ageng: nyalin lan ngirim data liwat soket, syscalls rasah.

Ing kene kita nggunakake mekanisme memori sing dienggo bareng - video ora disalin utawa dikirim liwat soket antarane komponen piranti lunak kamera, saΓ©ngga kanthi optimal lan kanthi ati-ati nggunakake kemampuan hardware kamera sing andhap asor.

Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

Nganyari subsistem

Titik bangga khusus yaiku subsistem toleransi kesalahan kanggo nganyari perangkat kukuh online.

Ayo kula nerangake masalah. Nganyari perangkat kukuh teknis ora operasi atom, lan yen Gagal daya ana ing tengah nganyari, banjur memori lampu kilat bakal ngemot bagΓ©an saka "ing-ditulis" perangkat kukuh anyar. Yen sampeyan ora njupuk langkah khusus, kamera banjur bakal dadi "bata" sing kudu digawa menyang pusat layanan.

Kita uga wis ngrampungake masalah iki. Sanajan kamera dipateni sajrone nganyari, bakal kanthi otomatis lan tanpa campur tangan pangguna ngundhuh perangkat kukuh saka awan lan mulihake operasi.

Ayo ndeleng teknik kasebut kanthi luwih rinci:

Titik sing paling rawan yaiku nimpa partisi nganggo kernel Linux lan sistem file root. Yen salah siji saka komponen iki rusak, kamera ora bakal boot ing kabeh ngluwihi bootloader uboot, kang ora bisa download perangkat kukuh saka maya.

Iki tegese kita kudu mesthekake yen kamera duwe kernel lan rootfs sing bisa digunakake kapan wae sajrone proses nganyari. Katon yen solusi paling gampang yaiku nyimpen rong salinan kernel kanthi rootfs ing memori lampu kilat lan, yen kernel utama rusak, muat saka salinan serep.

Solusi sing apik - Nanging, kernel karo rootfs njupuk kira-kira 3.5MB lan kanggo serep permanen sampeyan kudu nyedhiakke 3.5MB. Kamera sing paling murah mung ora duwe ruang kosong kanggo kernel serep.

Mulane, kanggo nggawe serep kernel sajrone nganyari perangkat kukuh, kita nggunakake partisi aplikasi.
Lan kanggo milih partisi sing dikarepake karo kernel, rong printah digunakake bootm ing uboot - ing wiwitan kita nyoba mbukak kernel utama lan yen rusak, banjur serep.

Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

Iki mesthekake yen ing sembarang wektu kamera bakal duwe kernel bener karo rootfs, lan bakal bisa kanggo boot lan mulihake perangkat kukuh.

Sistem CI/CD kanggo mbangun lan masang perangkat kukuh

Kanggo mbangun perangkat kukuh, kita nggunakake gitlab CI, sing kanthi otomatis mbangun perangkat kukuh kanggo kabeh model kamera sing didhukung, lan sawise mbangun perangkat kukuh, kanthi otomatis dikirim menyang layanan nganyari piranti lunak kamera.

Kepiye carane kita sinau nyambungake kamera Cina kanggo 1000 rubel menyang awan. Ora ana logger utawa SMS (lan ngirit jutaan dolar)

Saka layanan kasebut, nganyari perangkat kukuh dikirim menyang kamera uji QA, lan sawise rampung kabeh tahap tes, menyang kamera pangguna.

Keamanan Informasi

Ora dadi rahasia manawa saiki keamanan informasi minangka aspek paling penting ing piranti IoT, kalebu kamera. Botnet kaya Mirai lagi roaming ing Internet, nginfèksi jutaan kamera kanthi perangkat kukuh standar saka vendor. Kanthi kabeh babagan vendor kamera, aku ora bisa ngerteni manawa perangkat kukuh standar ngemot akeh fungsi sing ora dibutuhake kanggo nggarap awan, nanging ngemot akeh kerentanan sing dimanfaatake dening botnet.

Mulane, kabeh fungsi sing ora digunakake ing perangkat kukuh kita dipateni, kabeh port tcp/udp ditutup, lan nalika nganyari perangkat kukuh, tandha digital piranti lunak dicenthang.

Kajaba iku, perangkat kukuh ngalami tes rutin ing laboratorium keamanan informasi.

kesimpulan

Saiki perangkat kukuh kita aktif digunakake ing proyek pengawasan video. Mbok sing paling gedhe yaiku siaran voting ing dina pemilihan Presiden Federasi Rusia.
Proyek kasebut melu luwih saka 70 ewu kamera karo perangkat kukuh kita, sing dipasang ing stasiun polling ing negara kita.

Sawise ngrampungake pirang-pirang kompleks, lan ing sawetara panggonan, sanajan ing wektu iku meh ora mungkin masalah, kita, mesthi, nampa kepuasan gedhe minangka insinyur, nanging saliyane iki, kita uga ngirit jutaan dolar kanggo tuku kamera. Lan ing kasus iki, tabungan ora mung tembung lan petungan teori, nanging asil tender wis rampung kanggo tuku peralatan. Patut, yen kita ngomong babagan ndjogo video maya: ana rong pendekatan - kanthi strategis ngandelake keahlian lan pangembangan tingkat rendah, nyebabake tabungan gedhe ing peralatan, utawa nggunakake peralatan sing larang, sing, yen sampeyan ndeleng karakteristik konsumen, meh ora ana. beda karo sing padha murah.

Yagene strategis penting kanggo mutusake pilihan pendekatan integrasi sedini mungkin? Nalika ngembangake plugin, pangembang gumantung ing teknologi tartamtu (perpustakaan, protokol, standar). Lan yen pesawat saka teknologi dipilih mung kanggo peralatan larang, banjur ing mangsa nyoba kanggo pindhah menyang kamera mirah, paling kamungkinan, njupuk wektu insanely dawa utawa malah gagal lan bali menyang peralatan larang bakal kelakon.

Source: www.habr.com

Add a comment