Post

米家摄像机技术实现全解析

本文从硬件设计、软件架构、云端服务三个层面,系统梳理如何做一个工业级的米家智能摄像机产品。以云台室内机为主线,兼顾枪球一体机(双摄)等形态的差异点。

本文涉及的技术栈在之前的博客中均有专题介绍,可结合阅读:


一、硬件设计

1.1 系统框图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
                            ┌─────────────┐
                            │   镜头模组   │
                            │ (Lens+CMOS) │
                            └──────┬──────┘
                                   │ MIPI CSI
┌─────────┐    I2S     ┌──────────┴──────────┐     SDIO/USB     ┌──────────┐
│ 麦克风   │───────────►│                      │◄───────────────►│  Wi-Fi   │
│ (MIC)   │            │     主控 SoC         │                 │  模组    │
└─────────┘            │  (SigmaStar/君正)    │                 └──────────┘
                       │                      │     SPI/eMMC
┌─────────┐    PWM     │  CPU + ISP + NPU    │◄───────────────►┌──────────┐
│ 喇叭     │◄──────────│  + 视频编码器        │                 │  Flash   │
│(Speaker) │    DAC    │                      │                 │(NOR/NAND)│
└─────────┘            └──┬───┬───┬───┬──────┘                 └──────────┘
                          │   │   │   │
                    GPIO  │   │   │   │ DDR
              ┌───────────┘   │   │   └────────┐
              │               │   │            │
        ┌─────┴─────┐   ┌────┴───┴──┐    ┌────┴────┐
        │  红外灯    │   │ 云台电机   │    │  DDR    │
        │  IR LED   │   │ (PTZ)     │    │  内存   │
        │  + IR-CUT │   │ 步进/直流  │    │         │
        └───────────┘   └───────────┘    └─────────┘

1.2 主控芯片(SoC)

主控是摄像机的核心,需要在一颗芯片上集成 CPU、ISP(图像信号处理器)、视频编码引擎、NPU(AI 推理)等模块。

常见方案:

芯片厂商CPUNPU 算力视频能力适用场景
SSC337DESigmaStarCortex-A7 双核0.5~1 TOPS3MP@30fps H.265中低端云台机
SSC377SigmaStarCortex-A7 双核~2 TOPS5MP@30fps H.265中高端/双摄
T40XP北京君正MIPS XBurst2 双核3.2 TOPS5MP@30fps H.265/H.264高端/AI 增强型
T31北京君正MIPS XBurst 单核有限3MP@25fps低成本/低功耗

选型要点:

  • ISP 质量:直接决定画面效果(降噪、宽动态、3D-DNR)
  • 编码器能力:需支持多路同时编码(主码流 + 子码流 + AI 帧)
  • NPU 算力:决定能运行多少 AI 模型(人形+人脸需 ≥1 TOPS)
  • 内存带宽:视频+AI+ISP 同时工作对带宽要求高

1.3 内存(DDR)

类型容量说明
DDR264MB低端机型,仅够基础视频
DDR3/DDR3L128~256MB主流方案,满足视频+AI+P2P
LPDDR4256~512MB高端双摄或多任务场景

内存用途分配(以 128MB 为例):

  • Linux 内核 + 用户空间:~30MB
  • 视频编码缓冲(主/子码流):~40MB
  • ISP 图像 pipeline 缓冲:~20MB
  • AI 推理 tensor 缓冲:~20MB
  • P2P/网络缓冲:~10MB
  • 预留/碎片:~8MB

1.4 存储(Flash)

类型容量典型用途
SPI NOR Flash8~32MB存放 bootloader + kernel + rootfs(精简系统)
SPI NAND Flash128~256MB存放完整系统 + 模型文件 + 录像缓存
eMMC512MB~8GB高端方案,支持本地录像
TF 卡槽用户可插本地录像存储(最大 256GB)

分区设计(SPI NAND 128MB 典型方案):

1
2
3
4
┌──────────────────────────────────────────────────────┐
│ boot (1MB) │ kernel (4MB) │ rootfs (40MB) │ data (80MB) │
│  U-Boot    │   uImage     │  squashfs     │  jffs2/ubifs │
└──────────────────────────────────────────────────────┘
  • rootfs:只读的 squashfs,保证系统不会因断电损坏
  • data:可写分区,存放配置文件、AI 模型、日志等
  • 双分区 A/B 方案用于 OTA 防砖

1.5 CMOS 图像传感器

型号厂商分辨率像素尺寸适用场景
SC3336思特威(SmartSens)3MP (2304x1296)2.5μm主流家用
SC5235思特威5MP (2592x1944)2.0μm高清方案
IMX307Sony2MP (1920x1080)2.9μm星光级夜视
OS04A10OmniVision4MP (2560x1440)2.0μm中高端

选型考量:

  • 像素尺寸:越大进光量越多,夜视效果越好
  • 灵敏度:决定低照度下的画面噪点
  • 快门模式:Rolling shutter(成本低)vs Global shutter(运动无果冻效应)
  • 接口:MIPI CSI-2,2-lane 或 4-lane
  • 功耗:影响整机热设计

1.6 镜头(Lens)

参数典型值说明
焦距3.6mm / 2.8mm焦距越短视角越广
光圈F2.0 / F1.6光圈越大进光越多,夜视越好
视角水平 110°~130°家用一般要求 ≥110°
IR-CUT双滤光片切换白天滤除红外光还原真实色彩,夜间移除滤片增强红外感光
对焦定焦家用云台机一般为定焦,降低成本

镜头座规格:通常采用 M12(S-Mount),通过螺纹调焦后点胶固定。

1.7 Wi-Fi 模组

方案频段说明
RTL8189FTV2.4GHz低成本 SDIO 接口,支持 802.11 b/g/n
RTL8733BU2.4G + 5G + BLE双频+蓝牙,USB 接口,支持蓝牙配网
SSW101B2.4GHzSigmaStar 搭配方案,SDIO

选型要点:

  • 吞吐率:1080P@30fps H.265 主码流约 2~4Mbps,需要稳定的 Wi-Fi 带宽
  • 抗干扰:家庭 2.4G 频段拥挤,需支持 MIMO 或 5G 频段
  • 功耗:影响整机温度
  • 蓝牙配网:双模芯片可支持 BLE 配网,体验更好

1.8 云台电机(PTZ)

云台摄像机的机械结构,实现水平旋转(Pan)和垂直俯仰(Tilt):

参数水平(Pan)垂直(Tilt)
电机类型步进电机步进电机
旋转范围360°90°~120°
步距角通常 1/16 微步同左
减速比齿轮减速齿轮减速
归位方式光耦/霍尔传感器同左
驱动芯片如 MS41929同左

控制逻辑:

  • 上电时通过归位传感器确定零位
  • App 发送转动角度命令,转换为步进脉冲数
  • 支持预置位、巡航、跟踪等高级功能
  • 需做好噪音优化(微步驱动 + 减速比设计)

枪球一体机差异:双摄形态通常一个固定广角镜头 + 一个可变焦 PTZ 镜头,两者协同工作实现”全景追踪+特写跟拍”。

1.9 红外灯与 IR-CUT

1
2
3
4
5
6
7
8
9
10
11
白天模式:                        夜间模式:
┌─────────┐                    ┌─────────┐
│  镜头    │                    │  镜头    │
│  ↓      │                    │  ↓      │
│ IR-CUT  │ ← 滤片挡住IR       │ IR-CUT  │ ← 滤片移开
│ (挡住)  │                    │ (移开)  │
│  ↓      │                    │  ↓      │
│ CMOS    │                    │ CMOS    │ ← 感受 850nm/940nm 红外光
└─────────┘                    └─────────┘
                                   ↑
                               IR LED 补光
  • 850nm 红外灯:有微弱红光,补光距离远
  • 940nm 红外灯:肉眼完全不可见,适合隐蔽场景
  • IR-CUT 切换器:由 ISP 根据环境光照度自动控制切换

1.10 麦克风与喇叭

组件规格说明
麦克风驻极体/MEMS用于拾音、哭声检测、双向对讲
喇叭8Ω 1W~2W用于对讲回放、报警鸣笛
音频 Codec主控内置 / 外挂如 ES8388ADC(麦克风→数字)+ DAC(数字→喇叭)
回声消除软件 AEC 算法对讲时消除喇叭声音对麦克风的串扰

对讲链路:App 语音 → P2P → 设备解码 → DAC → 喇叭;设备 MIC → ADC → AEC → 编码 → P2P → App

1.11 供电设计

方案输入说明
DC 5V/2AMicro-USB / USB-C室内云台机标准供电
DC 12V/1ADC 圆口室外枪机、PoE 供电
电池供电18650 锂电池组低功耗电池机,PIR 唤醒

电源路径:

1
2
USB 5V → DCDC (3.3V/1.8V/1.2V) → SoC / DDR / Wi-Fi / Motor / IR LED
              └→ LDO (供模拟电路:CMOS sensor, Audio Codec)

注意事项:

  • 电机启动瞬间电流大,需预留余量
  • IR LED 大电流 → 独立 MOS 管开关控制
  • 数字地和模拟地分开,避免干扰音频和图像

1.12 壳料与结构

要素说明
材质ABS / PC+ABS(阻燃等级 V0)
散热主控芯片贴导热硅脂 + 散热片,或壳体本身导热
防尘镜头面板密封,防止灰尘附着
防水(室外)IP65/IP66 等级,O-ring 密封
天线布局Wi-Fi 天线远离电机和金属件,避免遮挡
TF 卡槽隐藏式卡槽 + 弹出机构
指示灯状态 LED(蓝/橙),可通过命令关闭

二、软件架构

2.1 系统整体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
┌─────────────────────────────────────────────────────────────┐
│                        App 层 / 云端                          │
│         米家 App    │    小米云存储    │    IoT 平台           │
└────────────┬────────┴────────┬────────┴────────┬────────────┘
             │ P2P (MISS)      │ HTTPS           │ MQTT
             │                 │                 │
┌────────────┴─────────────────┴─────────────────┴────────────┐
│                     设备端软件栈                               │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌─────────┐  ┌─────────────┐ │
│  │ MISS P2P │  │ 云存储    │  │ IoT     │  │  OTA Client │ │
│  │ SDK      │  │ 上传模块  │  │ SPEC    │  │             │ │
│  └────┬─────┘  └────┬─────┘  └────┬────┘  └──────┬──────┘ │
│       │              │             │               │        │
│  ┌────┴──────────────┴─────────────┴───────────────┴──────┐ │
│  │                  业务逻辑层 (C/C++)                      │ │
│  │  音视频采集 │ 编码管理 │ 存储管理 │ AI 调度 │ PTZ 控制   │ │
│  └────────────────────────┬────────────────────────────────┘ │
│                           │                                  │
│  ┌────────────────────────┴────────────────────────────────┐ │
│  │              中间件 / HAL 层                              │ │
│  │  ISP 驱动 │ 编码器 API │ Audio API │ GPIO │ Motor │ NPU │ │
│  └────────────────────────┬────────────────────────────────┘ │
│                           │                                  │
├───────────────────────────┴──────────────────────────────────┤
│                   Linux Kernel (4.9 / 5.x)                   │
│  V4L2 │ ALSA │ SPI │ I2C │ SDIO │ USB │ MTD │ NetFilter    │
├─────────────────────────────────────────────────────────────┤
│                    Bootloader (U-Boot)                        │
└─────────────────────────────────────────────────────────────┘

2.2 操作系统:Linux + Buildroot

为什么选择 Linux:

  • 成熟稳定,驱动丰富
  • 社区支持好,芯片厂商提供 BSP(Board Support Package)
  • 支持多线程/多进程,适合摄像机复杂业务
  • 开源,可定制裁剪

Buildroot 构建系统:

Buildroot 用于构建精简的嵌入式 Linux 根文件系统,相比 Yocto 更轻量,构建速度快。

1
2
3
4
5
6
7
8
9
10
11
# 典型构建流程
$ make <board>_defconfig    # 加载板级配置
$ make menuconfig           # 配置内核/用户空间包
$ make                      # 编译生成固件

# 产出物
output/images/
├── u-boot.bin              # Bootloader
├── uImage                  # Linux 内核
├── rootfs.squashfs         # 只读根文件系统
└── userdata.ubifs          # 可写数据分区

系统裁剪要点:

  • 移除不需要的内核模块(USB gadget、蓝牙协议栈等)
  • 使用 BusyBox 替代完整 coreutils
  • C 库选择 musl libc(比 glibc 小 ~2MB)
  • 关闭 kernel printk 减少串口输出开销

2.3 启动流程与快启优化

1
2
3
4
上电 → BootROM → U-Boot → Kernel → Init → 业务进程
│               │          │        │       │
│ (~10ms)       │(~500ms)  │(~2s)   │(~1s)  │(~2s)
└───────────────┴──────────┴────────┴───────┴──────── 总计 ~6s 出图

快启优化手段:

  • U-Boot: 跳过不必要的设备检测,直接加载内核
  • Kernel: 裁剪未用驱动,使用 initramfs 而非 init 脚本
  • 用户空间: ISP + 编码器优先启动,延迟加载 AI/P2P 模块
  • 目标:从上电到出第一帧画面 ≤3 秒

2.4 烧录工具

固件烧录发生在工厂生产阶段:

烧录方式说明适用场景
USB 烧录PC 通过 USB 连接设备,使用芯片厂商烧录工具工厂量产
SD 卡烧录将固件放入 TF 卡,设备上电自动烧录小批量/研发
UART 烧录通过串口 + TFTP 下载固件调试救砖
网络烧录通过网络批量下发固件大规模产线

量产烧录流程:

1
烧录固件 → 写入设备唯一信息(DID/MAC/Key) → 功能自检 → 贴标入库

每台设备在出厂时会被写入:

  • DID(Device ID):米家平台的唯一设备标识
  • MAC 地址:Wi-Fi 模组的物理地址
  • 设备密钥:用于与米家云端的安全通信

2.5 MIKE:小米 IPC 套件

小米为摄像机生态提供了一整套开发套件 MIKE(Mi IPC Kit Environment),覆盖从底层芯片适配到上层业务 API 的完整链路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                                              ┌─────────────────────────────┐
┌───────────────────────────────────────────┐ │                             │
│              MIKE 上层 API                 │ │                             │
│  (统一业务接口:音视频、AI、存储、配网等)    │ │                             │
├───────────────────────────────────────────┤ │                             │
│               中间件模块                   │ │      Tools 工具包            │
│  ┌──────┐ ┌────┐ ┌─────┐ ┌────┐ ┌─────┐ │ │                             │
│  │ MISS │ │ OT │ │云存储│ │配网 │ │录像  │ │ │  Emulator (设备模拟器)       │
│  │(P2P) │ │服务│ │     │ │    │ │     │ │ │  Monitor  (运行监控)         │
│  └──────┘ └────┘ └─────┘ └────┘ └─────┘ │ │  Auto Test(自动化测试)       │
│  ┌─────┐ ┌──────┐ ┌─────┐ ┌───────────┐ │ │  Logger Debugger(日志调试)   │
│  │ OTA │ │ 回看  │ │编解码│ │本地AI│NAS │ │ │                             │
│  └─────┘ └──────┘ └─────┘ └───────────┘ │ │  贯穿各层,支持:             │
├───────────────────────────────────────────┤ │  - 业务层功能模拟与调试       │
│            芯片平台适配层 (HAL)             │ │  - 中间件模块独立测试         │
│       SigmaStar │ 君正 │ 其他平台          │ │  - 平台适配层验证             │
└───────────────────────────────────────────┘ └─────────────────────────────┘

MIKE 各模块职责:

模块说明
MISS(P2P)流媒体传输 SDK,负责设备与 App 之间的音视频/命令通道
OT 服务设备联网心跳、在线状态维护
云存储事件录像切片加密上传
配网Wi-Fi AP 扫码 / BLE 配网流程
录像本地 TF 卡录像管理(连续/事件录像)
OTA固件升级(A/B 分区、差分升级)
回看云端/本地录像的时间线回放
编解码音视频编解码封装(H.265/Opus)
本地 AI人形/人脸/宠物/哭声等模型推理调度
NAS 存储局域网 NAS 设备的视频存储(SMB/NFS)
芯片平台适配层屏蔽不同 SoC 的 ISP/编码器/NPU 差异,提供统一 HAL
Tools贯穿业务层/中间件/平台适配层的开发调试工具集:Emulator(PC 端设备模拟器)、Monitor(运行状态监控)、Auto Test(自动化测试框架)、Logger Debugger(日志抓取与分析)

MIKE 的设计使得业务开发者无需关心底层芯片差异,通过上层 API 即可完成功能开发;同时 Tools 工具包支持在 PC 上模拟设备运行,大幅提升开发调试效率。

2.6 P2P 模块:MISS SDK

P2P 的基础原理(NAT 类型、UDP 打洞、STUN/TURN)可参考 P2P 技术介绍,此处聚焦小米摄像机的具体实现。

MISS(MIoT Streaming SDK) 是小米封装的 P2P 流媒体传输 SDK,C 语言实现,跨平台(设备端 Linux + App 端 iOS/Android),是 MIKE 套件中的核心通信模块。

架构设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──────────────────────────────────────────┐
│             MISS SDK (上层接口)            │
│  创建通道 │ 发送数据 │ 接收数据 │ 事件回调  │
├──────────────────────────────────────────┤
│            通道管理 / 调度层               │
│   连接管理 │ 重连策略 │ 流量控制 │ QoS     │
├──────────────────────────────────────────┤
│            P2P 传输层(可插拔)             │
│  ┌────────┐  ┌────────┐  ┌────────────┐ │
│  │  TUTK  │  │  尚云   │  │ 小米自研P2P │ │
│  │(Kalay) │  │        │  │            │ │
│  └────────┘  └────────┘  └────────────┘ │
├──────────────────────────────────────────┤
│              网络层 (UDP/TCP)              │
└──────────────────────────────────────────┘

P2P 连接建立流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌──────────┐         ┌──────────────┐         ┌──────────┐
│  摄像机   │         │  P2P 服务器   │         │  App     │
└─────┬────┘         └──────┬───────┘         └─────┬────┘
      │  1. 注册上线          │                      │
      │──────────────────────►│                      │
      │                       │                      │
      │                       │   2. 查询设备地址     │
      │                       │◄─────────────────────│
      │                       │                      │
      │                       │   3. 返回设备 IP/端口  │
      │                       │─────────────────────►│
      │                       │                      │
      │          4. NAT 穿透 / P2P 直连              │
      │◄════════════════════════════════════════════►│
      │                                              │
      │    5. 若 P2P 失败,走中转服务器 (Relay)        │
      │◄═══════════[ Relay Server ]═══════════════►│

数据通道类型

MISS SDK 支持多路逻辑通道复用同一条 P2P 连接:

通道用途特点
视频通道主/子码流传输高带宽,允许丢帧
音频通道对讲音频低延迟优先
命令通道控制指令(PTZ、截图等)可靠传输
文件通道录像回放/下载可靠传输,支持断点续传
报警通道事件推送低延迟

多 P2P 引擎的意义

底层可插拔设计使得:

  • TUTK(Kalay):覆盖全球节点,海外连通率高
  • 尚云:国内节点部署密集,延迟低
  • 小米自研:可控性强,持续优化
  • SDK 层自动选择最优引擎,对业务层透明

2.7 配网方式

米家摄像机支持两种配网模式:

Wi-Fi AP 配网(摄像机扫码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌───────────┐                              ┌───────────┐
│  米家 App  │                              │   摄像机   │
└─────┬─────┘                              └─────┬─────┘
      │                                          │
      │  1. App 生成二维码                         │
      │     (内含 Wi-Fi SSID + Password + Token)  │
      │     显示在手机屏幕上                        │
      │                                          │
      │                              2. 摄像机上电,│
      │                                 摄像头对准 │
      │                                 手机扫描二维码
      │                                          │
      │         3. 摄像机解析二维码,                │
      │            获取 Wi-Fi 凭证,                │
      │            连接路由器                       │
      │                                          │
      │  4. 摄像机连上路由器后,                     │
      │     通过局域网/云端与 App 握手              │
      │◄────────────────────────────────────────►│
      │                                          │
      │  5. 绑定设备到米家账号                      │
      │─────────────(云端)──────────────────────►│

优势:不需要额外硬件(蓝牙芯片),利用摄像头自身能力完成配网。

BLE + Wi-Fi 双模配网

1
2
3
4
1. App 通过 BLE 发现设备
2. BLE 通道下发 Wi-Fi SSID + Password
3. 设备连接 Wi-Fi
4. 通过云端完成绑定

优势:不依赖摄像头画面,暗光/遮挡场景也能配网。适合支持双模 Wi-Fi+BLE 芯片的方案。

2.8 米家 IoT SPEC 接入

MIoT SPEC 的数据模型(Device → Service → Property/Action/Event)与 Matter 协议的 Cluster 模型在设计哲学上非常接近,两者的详细对比参见 Matter 协议介绍

摄像机作为一个米家设备,需实现 MIoT SPEC 协议定义的 Service/Property/Action/Event。

摄像机典型 SPEC 定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Device: camera
├── Service: camera-control
│   ├── Property: on (bool)              — 摄像头开关
│   ├── Property: night-shot (enum)      — 夜视模式 (自动/开/关)
│   ├── Property: watermark (bool)       — 水印开关
│   ├── Action: start-recording          — 开始录像
│   └── Action: stop-recording           — 停止录像
│
├── Service: ptz-control
│   ├── Property: pan-position (int)     — 水平角度
│   ├── Property: tilt-position (int)    — 垂直角度
│   ├── Action: rotate (direction, speed)— 转动
│   └── Action: go-to-preset (id)       — 到预置位
│
├── Service: motion-detection
│   ├── Property: sensitivity (enum)     — 灵敏度 (低/中/高)
│   ├── Property: detection-area (struct)— 检测区域
│   └── Event: motion-detected           — 移动侦测事件
│
├── Service: ai-detection
│   ├── Property: human-detect-on (bool) — 人形检测开关
│   ├── Property: face-detect-on (bool)  — 人脸检测开关
│   ├── Property: pet-detect-on (bool)   — 宠物检测开关
│   ├── Property: cry-detect-on (bool)   — 哭声检测开关
│   ├── Event: human-detected            — 人形检测事件
│   ├── Event: face-detected             — 人脸检测事件
│   ├── Event: pet-detected              — 宠物检测事件
│   └── Event: cry-detected              — 哭声检测事件
│
├── Service: storage
│   ├── Property: sd-card-status (enum)  — TF 卡状态
│   ├── Property: cloud-storage-on (bool)— 云存储开关
│   └── Action: format-sd-card           — 格式化 TF 卡
│
└── Service: indicator-light
    └── Property: on (bool)              — 指示灯开关

设备通过 MQTT 协议与小米 IoT 云端保持长连接,上报属性变化和事件。App 下发的控制命令也通过 MQTT → 设备的链路传达。

2.9 云存储

云存储的视频分片与回放机制和 HLS 协议的设计思路类似(将视频切成小片段 + 索引清单),详见 HLS 与流媒体存储

米家云存储服务负责将摄像机的录像片段上传到云端,用户可在 App 上回看。

上传链路

1
2
3
4
5
6
7
8
9
10
11
12
摄像机端:
  ISP → YUV420 → 编码器(H.265, 20fps) → 环形缓冲区 → 事件触发 → 分片(10s/片) → HTTPS 上传

上传流程:
  1. 事件触发(移动侦测/AI 检测/用户手动)
  2. 从环形缓冲区中切取事件前后的视频片段
  3. 对片段加密(AES-128)
  4. 通过 HTTPS POST 上传到小米云存储
  5. 服务端返回索引信息,设备上报事件元数据

回放流程:
  App 请求时间线 → 云端返回视频片段列表 → App 通过 HTTPS 拉流 → 解密播放

关键设计

  • 环形缓冲区:内存中保留最近 10~30 秒视频,保证事件触发时能回溯
  • 端到端加密:视频在设备端加密,云端不可解密,用户侧密钥解密
  • 断点续传:网络波动时自动重传未完成的片段
  • 流量控制:根据带宽动态调整上传码率(子码流/主码流)

2.10 AI 算法

算法能力矩阵

算法输入推理硬件帧率说明
人形检测视频帧(子码流 640x360)NPU10~15fps判断画面中是否有人
人脸识别人形区域裁剪图NPU按需触发陌生人/家人识别
宠物检测视频帧NPU10~15fps猫/狗检测
哭声检测音频帧 (16kHz PCM)CPU/DSP实时婴儿哭声识别
移动侦测帧差法CPU主码流帧率低计算量的基础检测

部署方式

1
2
3
4
5
6
7
8
9
10
11
模型训练 (云端 GPU)
    │
    ▼ 模型量化/转换 (浮点→INT8)
    │
    ▼ 芯片厂商工具链转换 (ONNX → 芯片私有格式)
    │  - SigmaStar: IPU Toolkit → .img model
    │  - 君正: Magik → .bin model
    │
    ▼ 模型文件打包到固件 data 分区
    │
    ▼ 设备端 NPU Runtime 加载模型推理

AI Pipeline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ISP 输出 YUV 帧
    │
    ├──► 主码流编码 (1080P/1296P) ──► P2P/录像
    │
    └──► 子码流 (360P/VGA) ──► AI 前处理 (Resize/Norm)
                                    │
                                    ▼
                              NPU 推理 (人形/宠物)
                                    │
                                    ▼
                              后处理 (NMS/阈值过滤)
                                    │
                                    ├──► 检测到目标 → 触发事件上报 + 云存储
                                    ├──► 人脸区域 → 裁剪 → 人脸识别模型
                                    └──► 无目标 → 等待下一帧

音频 AI(哭声检测) 独立于视频 pipeline,在音频线程中运行:

1
MIC → ADC → 16kHz PCM → 滑窗分帧 → 特征提取(MFCC) → 分类模型 → 哭声/非哭声

2.11 OTA(空中升级)

OTA 是智能设备持续迭代的基础,需保证升级过程的安全性和可靠性。

OTA 流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌───────────┐         ┌──────────────┐         ┌───────────┐
│ 小米 OTA  │         │    摄像机     │         │  米家 App  │
│  服务器   │         │              │         │           │
└─────┬─────┘         └──────┬───────┘         └─────┬─────┘
      │                      │                       │
      │  1. 检查更新(定时/推送)                       │
      │◄─────────────────────│                       │
      │                      │                       │
      │  2. 返回新版本信息 + 下载 URL                   │
      │─────────────────────►│                       │
      │                      │                       │
      │  3. 下载固件包 (HTTPS)│                       │
      │─────────────────────►│                       │
      │                      │                       │
      │               4. 校验固件签名 (RSA/ECDSA)      │
      │                      │                       │
      │               5. 写入备用分区 (A/B)            │
      │                      │                       │
      │               6. 切换启动分区,重启             │
      │                      │                       │
      │               7. 启动成功 → 上报新版本          │
      │◄─────────────────────│                       │
      │                      │                       │
      │                      │  8. App 显示升级完成    │
      │                      │──────────────────────►│

防砖策略

机制说明
A/B 双分区新固件写入备用分区,验证通过后才切换
Watchdog启动后若未正常运行,硬件看门狗触发回滚
启动计数器连续启动失败 N 次自动回退旧分区
固件签名RSA/ECDSA 签名验证,防止篡改
断电恢复写入过程断电不影响当前运行分区

差分升级

为节省带宽和升级时间,支持差分升级(delta OTA):

  • 服务端对新旧固件做 bsdiff 生成差分包(通常只有全量包的 10%~30%)
  • 设备端收到差分包后,结合当前分区数据 patch 出完整新固件
  • 验证 hash 一致后写入

三、音视频链路详解

3.1 视频采集与编码

关于音视频数字化的基础概念(采样、量化、编码、色彩空间)参见 音视频及其数字化表示

1
2
3
4
5
光线 → 镜头 → CMOS Sensor → ISP → 编码器 → 码流输出

ISP Pipeline:
  Raw Bayer → 黑电平校正 → 坏点校正 → Demosaic → 白平衡 →
  色彩校正 → Gamma → 降噪(2D/3D-DNR) → 锐化 → YUV 输出

主流小米摄像机使用 YUV420 色彩空间(关于 YUV420 的详细解释参见音视频基础),H.265 视频编码,Opus 音频编码,视频帧率 20fps

多码流设计:

码流分辨率色彩空间帧率编码码率用途
主码流1920x1080 / 2304x1296YUV42020fpsH.2651~4 MbpsP2P 高清观看、云存储
子码流640x360YUV42015fpsH.265200~500 KbpsP2P 流畅观看(弱网)、AI 推理输入
JPEG 流1920x1080按需JPEG截图、封面

3.2 音频采集与处理

1
MIC → ADC (16kHz/16bit) → AEC(回声消除) → ANR(降噪) → AGC(增益控制) → 编码(Opus)

音频编码采用 Opus,这是一种开源、免版税的编码格式,支持从低码率语音(6kbps)到高码率音乐(510kbps)的全场景覆盖,编码延迟低至 5ms,非常适合实时对讲场景。

  • AEC(Acoustic Echo Cancellation):对讲场景必须,消除喇叭回声
  • ANR(Automatic Noise Reduction):去除环境底噪
  • AGC(Automatic Gain Control):自动调整增益,避免过大过小

3.3 本地存储(TF 卡录像)

1
2
3
4
5
6
7
8
9
10
11
12
13
录像策略:
  ├── 连续录像: 7x24 循环写入,空间满自动覆盖最旧文件
  └── 事件录像: 仅检测到事件时录像,省空间

文件组织:
  /mnt/sdcard/record/
  ├── 2024/11/10/
  │   ├── 14/            # 按小时分目录
  │   │   ├── 00.mp4     # 每分钟一个文件
  │   │   ├── 01.mp4
  │   │   └── ...
  │   └── 15/
  └── index.db           # SQLite 索引,加速时间线查询

四、生产与测试

4.1 工厂测试项

测试项方法判定标准
视频画面对准标准色卡,自动分析色彩/对比度/清晰度达标
红外夜视暗箱环境,检查 IR LED 亮度均匀照明,无暗角
云台运动全范围旋转,检测步数到位精度 ≤1°,无卡顿
麦克风播放标准音源,检测录入SNR ≥ 40dB
喇叭播放测试音频无破音,音量达标
Wi-Fi连接指定 AP,测试吞吐≥ 10Mbps
TF 卡槽插入测试卡,读写验证速度 ≥ 10MB/s
按键/Reset按压检测GPIO 电平正确翻转
功耗各场景电流测量待机 <2W,工作 <5W

4.2 可靠性测试

测试条件要求
高温老化50°C 连续运行 48h无死机、画面无异常
低温启动-10°C 冷启动正常出图
电压波动4.5V ~ 5.5V稳定工作
断电测试随机断电 1000 次系统可正常启动,文件系统无损坏
Wi-Fi 漫游信号衰减/恢复自动重连,P2P 恢复
长期运行连续运行 30 天无内存泄漏,服务不退出

五、总结

一个工业级的米家摄像机产品,从硬件到软件再到云端,涉及的技术栈非常广:

1
2
3
4
硬件: SoC选型 → 传感器 → 光学 → 结构 → 电源 → 射频
软件: OS/BSP → ISP调优 → 编码 → P2P → AI → IoT → OTA
云端: 配网 → 设备管理 → 云存储 → 消息推送 → OTA 分发
生产: 烧录 → 写号 → 自动化测试 → 老化 → 包装

核心挑战在于:在有限的硬件资源(几百 MHz CPU + 百余 MB 内存)下,同时跑通视频采集编码、AI 推理、P2P 传输、云存储上传、IoT 通信等多个实时任务,并保证 7x24 小时稳定运行。这需要精细的资源调度、严格的内存管理和完善的异常恢复机制。

本文将之前博客中分散介绍的技术知识串联到了一个完整的产品场景中:

  • 音视频数字化中的采样、YUV420、H.265 编码 → 摄像机的视频采集与编码链路
  • P2P 技术中的 NAT 穿透 → MISS SDK 的多引擎 P2P 架构
  • HLS 流媒体中的分片存储 → 云存储的切片上传与时间线回放
  • Matter 协议中的设备模型 → 米家 IoT SPEC 的 Service/Property/Action 设计

参考资料

This post is licensed under CC BY 4.0 by the author.