Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Xin chào tất cả mọi người!

Có lẽ không có gì bí mật khi các dịch vụ giám sát video trên đám mây gần đây đang trở nên phổ biến. Và rõ ràng tại sao điều này lại xảy ra, video là nội dung “nặng”, việc lưu trữ chúng đòi hỏi cơ sở hạ tầng và dung lượng lưu trữ đĩa lớn. Việc sử dụng hệ thống giám sát video tại chỗ đòi hỏi phải có kinh phí để vận hành và hỗ trợ, cho cả một tổ chức sử dụng hàng trăm camera giám sát và cho một người dùng cá nhân có nhiều camera.

Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Hệ thống giám sát video trên đám mây giải quyết vấn đề này bằng cách cung cấp cho khách hàng cơ sở hạ tầng xử lý và lưu trữ video hiện có. Khách hàng giám sát video trên đám mây chỉ cần kết nối camera với Internet và liên kết nó với tài khoản đám mây của mình.

Có một số cách công nghệ để kết nối máy ảnh với đám mây. Không còn nghi ngờ gì nữa, phương pháp tiện lợi và rẻ nhất là camera kết nối trực tiếp và hoạt động với đám mây mà không cần sự tham gia của các thiết bị bổ sung như máy chủ hay đầu ghi.

Để làm được điều này, cần phải cài đặt một mô-đun phần mềm hoạt động với đám mây trên máy ảnh. Tuy nhiên, nếu chúng ta nói về máy ảnh giá rẻ, thì chúng có tài nguyên phần cứng rất hạn chế, gần như 100% được chiếm bởi phần sụn gốc của nhà cung cấp máy ảnh và không có tài nguyên cần thiết cho plugin đám mây. Các nhà phát triển từ ivideon đã cống hiến vấn đề này Bài viết, điều này giải thích tại sao họ không thể cài đặt plugin trên máy ảnh giá rẻ. Do đó, giá tối thiểu của máy ảnh là 5000 rúp (80 đô la) và hàng triệu tiền chi cho thiết bị.

Chúng tôi đã giải quyết thành công vấn đề này. Nếu bạn quan tâm đến cách thực hiện - chào mừng bạn đến với phần cắt

Một chút lịch sử

Năm 2016, chúng tôi bắt đầu phát triển nền tảng giám sát video trên đám mây cho Rostelecom.

Về phần mềm máy ảnh, ở giai đoạn đầu tiên, chúng tôi đã đi theo con đường “tiêu chuẩn” cho những tác vụ như vậy: chúng tôi đã phát triển plugin của riêng mình, plugin này được cài đặt trong chương trình cơ sở tiêu chuẩn của máy ảnh của nhà cung cấp và hoạt động với đám mây của chúng tôi. Tuy nhiên, điều đáng chú ý là trong quá trình thiết kế, chúng tôi đã sử dụng các giải pháp nhẹ và hiệu quả nhất (ví dụ: triển khai C đơn giản của protobuf, libev, mbedtls và các thư viện tiện lợi nhưng nặng nề như boost bị loại bỏ hoàn toàn)

Hiện tại, không có giải pháp tích hợp phổ biến nào trên thị trường camera IP: mỗi nhà cung cấp có cách cài đặt plugin riêng, bộ API riêng để vận hành chương trình cơ sở và cơ chế cập nhật riêng.

Điều này có nghĩa là đối với mỗi nhà cung cấp máy ảnh, cần phải phát triển riêng một lớp phần mềm tích hợp toàn diện. Và tại thời điểm bắt đầu phát triển, chỉ nên làm việc với 1 nhà cung cấp để tập trung nỗ lực của nhóm vào việc phát triển logic để làm việc với đám mây.

Nhà cung cấp đầu tiên được chọn là Hikvision, một trong những công ty hàng đầu thế giới trong thị trường máy ảnh, cung cấp API được ghi chép rõ ràng và hỗ trợ kỹ thuật kỹ thuật có thẩm quyền.

Chúng tôi đã khởi động dự án thí điểm đầu tiên của mình, Video Comfort giám sát video trên đám mây, sử dụng camera Hikvision.

Gần như ngay lập tức sau khi ra mắt, người dùng của chúng tôi bắt đầu đặt câu hỏi về khả năng kết nối dịch vụ của các máy ảnh rẻ hơn từ các nhà sản xuất khác.

Tôi gần như ngay lập tức từ chối tùy chọn triển khai lớp tích hợp cho từng nhà cung cấp - vì nó có khả năng mở rộng kém và đặt ra các yêu cầu kỹ thuật nghiêm trọng đối với phần cứng máy ảnh. Giá của một chiếc máy ảnh đáp ứng được các yêu cầu đầu vào này: ~60-70$

Vì vậy, tôi quyết định tìm hiểu sâu hơn - tạo phần sụn của riêng mình cho máy ảnh từ bất kỳ nhà cung cấp nào. Cách tiếp cận này làm giảm đáng kể các yêu cầu về tài nguyên phần cứng máy ảnh - bởi vì Lớp để làm việc với đám mây được tích hợp hiệu quả hơn nhiều với ứng dụng video và không có phần mỡ thừa không cần thiết trong phần sụn.

Và điều quan trọng là khi làm việc với máy ảnh ở mức độ thấp, có thể sử dụng AES phần cứng, mã hóa dữ liệu mà không tạo thêm tải cho CPU tiêu thụ điện năng thấp.

Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Lúc đó chúng tôi chẳng có gì cả. Không có gì đâu.

Hầu như tất cả các nhà cung cấp đều chưa sẵn sàng làm việc với chúng tôi ở mức độ thấp như vậy. Không có thông tin về thiết kế mạch và linh kiện, không có SDK chính thức về chipset và tài liệu cảm biến.
Cũng không có hỗ trợ kỹ thuật.

Tất cả các câu hỏi phải được trả lời thông qua kỹ thuật đảo ngược – thử và sai. Nhưng chúng tôi đã làm được.

Các mẫu máy ảnh đầu tiên chúng tôi thử nghiệm là máy ảnh Xiaomi Yi Ants, Hikvision, Dahua, Spezvision, D-Link và một số máy ảnh không tên siêu rẻ của Trung Quốc.

Kỹ thuật

Máy ảnh dựa trên chipset Hisilicon 3518E. Đặc điểm phần cứng của camera như sau:

Kiến Xiaomi Yi
noname

SoC
Hisilicon 3518E
Hisilicon 3518E

RAM
64MB
64MB

FLASH
16MB
8MB

WiFi
mt7601/bcm43143
-

cảm biến
ov9732 (720p)
ov9712 (720p)

Ethernet
-
+

MicroSD
+
+

Microphone
+
+

Loa
+
+

IRled
+
+

IRCut
+
+

Chúng tôi bắt đầu với họ.

Chúng tôi hiện hỗ trợ chipset Hisilicon 3516/3518, cũng như Ambarella S2L/S2LM. Có hàng chục mẫu máy ảnh.

Thành phần phần mềm

tàu ngầm

uboot là bộ tải khởi động, nó khởi động trước sau khi bật nguồn, khởi chạy phần cứng và tải kernel linux.

Kịch bản tải máy ảnh khá tầm thường:

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

Một trong những tính năng là nó được gọi hai lần bootm, chúng ta sẽ biết thêm về điều này sau, khi chúng ta đến hệ thống con cập nhật.

Chú ý đến dòng mem=38M. Vâng, vâng, đây không phải là một lỗi đánh máy - nhân Linux và tất cả, tất cả, tất cả các ứng dụng chỉ có quyền truy cập vào 38 megabyte RAM.

Ngoài ra bên cạnh uboot còn có một khối đặc biệt tên là reg_info, chứa tập lệnh cấp thấp để khởi tạo DDR và ​​một số thanh ghi hệ thống của SoC. Nội dung reg_info tùy thuộc vào kiểu máy ảnh và nếu không đúng, máy ảnh thậm chí sẽ không tải được uboot mà sẽ bị treo ở giai đoạn tải rất sớm.

Lúc đầu, khi chúng tôi làm việc mà không có sự hỗ trợ của nhà cung cấp, chúng tôi chỉ sao chép khối này từ chương trình cơ sở máy ảnh gốc.

Nhân Linux và rootfs

Máy ảnh sử dụng nhân Linux, là một phần SDK của chip; thông thường đây không phải là nhân mới nhất của nhánh 3.x, vì vậy chúng ta thường phải đối mặt với thực tế là trình điều khiển cho thiết bị bổ sung không tương thích với nhân được sử dụng và chúng tôi phải chuyển chúng sang máy ảnh hạt nhân.

Một vấn đề khác là kích thước của kernel. Khi kích thước FLASH chỉ còn 8MB thì mỗi byte đều có giá trị và nhiệm vụ của chúng ta là vô hiệu hóa cẩn thận tất cả các chức năng kernel không sử dụng để giảm kích thước xuống mức tối thiểu.

Rootfs là một hệ thống tập tin cơ bản. Nó bao gồm busybox, trình điều khiển mô-đun wifi, một bộ thư viện hệ thống tiêu chuẩn, chẳng hạn như libld и libc, cũng như phần mềm của chúng tôi chịu trách nhiệm về logic điều khiển đèn LED, quản lý kết nối mạng và cập nhật chương trình cơ sở.

Hệ thống tệp gốc được kết nối với kernel dưới dạng initramfs và kết quả của quá trình xây dựng là chúng tôi nhận được một tệp uImage, chứa cả kernel và rootfs.

Ứng dụng video

Phần phức tạp và tốn nhiều tài nguyên nhất của phần sụn là ứng dụng, cung cấp khả năng quay video-âm thanh, mã hóa video, định cấu hình các tham số hình ảnh, thực hiện phân tích video, ví dụ: bộ phát hiện chuyển động hoặc âm thanh, điều khiển PTZ và chịu trách nhiệm chuyển đổi ngày và giờ. chế độ ban đêm.

Một tính năng quan trọng, tôi thậm chí có thể nói là quan trọng, là cách ứng dụng video tương tác với plugin đám mây.

Trong các giải pháp truyền thống 'chương trình cơ sở của nhà cung cấp + plugin đám mây', không thể hoạt động trên phần cứng giá rẻ, video bên trong máy ảnh được truyền qua giao thức RTSP - và đây là một chi phí rất lớn: sao chép và truyền dữ liệu qua ổ cắm, các tòa nhà chọc trời không cần thiết.

Ở đây chúng tôi sử dụng cơ chế bộ nhớ dùng chung - video không được sao chép hoặc gửi qua ổ cắm giữa các thành phần phần mềm máy ảnh, từ đó sử dụng tối ưu và cẩn thận khả năng phần cứng khiêm tốn của máy ảnh.

Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Cập nhật hệ thống con

Một điểm đáng tự hào đặc biệt là hệ thống con có khả năng chịu lỗi để cập nhật chương trình cơ sở trực tuyến.

Hãy để tôi giải thích vấn đề. Cập nhật chương trình cơ sở về mặt kỹ thuật không phải là một hoạt động nguyên tử và nếu xảy ra mất điện giữa quá trình cập nhật, thì bộ nhớ flash sẽ chứa một phần chương trình cơ sở mới “được ghi chưa đầy đủ”. Nếu bạn không thực hiện các biện pháp đặc biệt, máy ảnh khi đó sẽ trở thành “cục gạch” cần được đưa đến trung tâm bảo hành.

Chúng tôi cũng đã giải quyết vấn đề này. Ngay cả khi máy ảnh bị tắt trong khi cập nhật, nó sẽ tự động tải xuống chương trình cơ sở từ đám mây mà không cần sự can thiệp của người dùng và khôi phục hoạt động.

Chúng ta hãy xem xét kỹ thuật chi tiết hơn:

Điểm dễ bị tổn thương nhất là ghi đè phân vùng bằng nhân Linux và hệ thống tệp gốc. Nếu một trong những thành phần này bị hỏng, máy ảnh sẽ không khởi động được ngoài bộ tải khởi động uboot, bộ tải khởi động này không thể tải xuống chương trình cơ sở từ đám mây.

Điều này có nghĩa là chúng ta cần đảm bảo rằng máy ảnh có kernel và rootfs đang hoạt động bất kỳ lúc nào trong quá trình cập nhật. Có vẻ như giải pháp đơn giản nhất là liên tục lưu trữ hai bản sao của kernel có rootfs trên bộ nhớ flash và nếu kernel chính bị hỏng, hãy tải nó từ bản sao lưu.

Một giải pháp tốt - tuy nhiên, kernel có rootfs chiếm khoảng 3.5 MB và để sao lưu vĩnh viễn, bạn cần phân bổ 3.5 MB. Những chiếc máy ảnh rẻ nhất đơn giản là không có nhiều dung lượng trống cho hạt nhân dự phòng.

Do đó, để sao lưu kernel trong quá trình cập nhật chương trình cơ sở, chúng tôi sử dụng phân vùng ứng dụng.
Và để chọn phân vùng mong muốn với kernel, hai lệnh được sử dụng bootm trong uboot - lúc đầu, chúng tôi cố gắng tải kernel chính và nếu nó bị hỏng thì tải kernel dự phòng.

Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Điều này đảm bảo rằng tại bất kỳ thời điểm nào, máy ảnh sẽ có đúng kernel với rootfs và nó sẽ có thể khởi động và khôi phục chương trình cơ sở.

Hệ thống CI/CD để xây dựng và triển khai firmware

Để xây dựng chương trình cơ sở, chúng tôi sử dụng gitlab CI, chương trình này tự động xây dựng chương trình cơ sở cho tất cả các mẫu máy ảnh được hỗ trợ và sau khi xây dựng chương trình cơ sở, nó sẽ tự động được triển khai cho dịch vụ cập nhật phần mềm máy ảnh.

Cách chúng tôi học cách kết nối máy ảnh Trung Quốc với giá 1000 rúp với đám mây. Không có nhật ký hoặc SMS (và tiết kiệm được hàng triệu đô la)

Từ dịch vụ, các bản cập nhật chương trình cơ sở sẽ được gửi đến máy ảnh thử nghiệm QA của chúng tôi và sau khi hoàn thành tất cả các giai đoạn thử nghiệm, máy ảnh của người dùng sẽ được gửi đến.

Bảo mật thông tin

Không có gì bí mật khi ngày nay bảo mật thông tin là khía cạnh quan trọng nhất của bất kỳ thiết bị IoT nào, bao gồm cả máy ảnh. Các botnet như Mirai đang lan truyền trên Internet, lây nhiễm hàng triệu camera bằng phần mềm tiêu chuẩn từ các nhà cung cấp. Với tất cả sự tôn trọng dành cho các nhà cung cấp máy ảnh, tôi không thể không lưu ý rằng phần sụn tiêu chuẩn chứa rất nhiều chức năng không cần thiết để làm việc với đám mây nhưng lại chứa nhiều lỗ hổng mà botnet lợi dụng.

Do đó, tất cả chức năng không sử dụng trong chương trình cơ sở của chúng tôi đều bị tắt, tất cả các cổng tcp/udp đều bị đóng và khi cập nhật chương trình cơ sở, chữ ký số của phần mềm sẽ được kiểm tra.

Và bên cạnh đó, phần sụn còn trải qua quá trình kiểm tra thường xuyên trong phòng thí nghiệm bảo mật thông tin.

Kết luận

Hiện phần mềm cơ sở của chúng tôi đang được sử dụng tích cực trong các dự án giám sát video. Có lẽ lớn nhất trong số đó là việc phát sóng cuộc bỏ phiếu vào ngày bầu cử Tổng thống Liên bang Nga.
Dự án có sự tham gia của hơn 70 nghìn máy ảnh với phần sụn của chúng tôi, được lắp đặt tại các điểm bỏ phiếu ở nước ta.

Sau khi giải quyết được một số vấn đề phức tạp và ở một số nơi, thậm chí vào thời điểm đó, những vấn đề gần như không thể giải quyết được, tất nhiên, chúng tôi nhận được sự hài lòng rất lớn với tư cách là kỹ sư, nhưng bên cạnh đó, chúng tôi cũng tiết kiệm được hàng triệu đô la khi mua máy ảnh. Và trong trường hợp này, khoản tiết kiệm không chỉ là lời nói và tính toán lý thuyết mà còn là kết quả của một cuộc đấu thầu mua thiết bị đã hoàn thành. Theo đó, nếu chúng ta nói về giám sát video trên đám mây: có hai cách tiếp cận - dựa vào chuyên môn và sự phát triển ở cấp độ thấp một cách chiến lược, dẫn đến tiết kiệm rất lớn về thiết bị hoặc sử dụng thiết bị đắt tiền, nếu bạn nhìn cụ thể vào đặc điểm của người tiêu dùng thì thực tế là không khác với những cái giá rẻ tương tự.

Tại sao việc quyết định lựa chọn phương pháp tích hợp càng sớm càng tốt lại quan trọng về mặt chiến lược? Khi phát triển plugin, nhà phát triển dựa vào một số công nghệ nhất định (thư viện, giao thức, tiêu chuẩn). Và nếu một bộ công nghệ chỉ được chọn cho các thiết bị đắt tiền, thì trong tương lai, nỗ lực chuyển sang máy ảnh giá rẻ rất có thể sẽ mất một thời gian cực kỳ dài hoặc thậm chí thất bại và việc quay trở lại với thiết bị đắt tiền sẽ xảy ra.

Nguồn: www.habr.com

Thêm một lời nhận xét