个人项目 · ANDROID / 流媒体

小米摄像头监控 App

在没有厂商接口文档的条件下,打通小米私有协议摄像头的本地流媒体链路,自研桥接服务与 Android 客户端,实现 实时预览 / 拍照 / 录像,全部功能真机验收通过。

演示视频(真机实录 · 47 秒)

流程:连接 RTSP 流 → 2.5K 实时预览 → 拍照 → 相册回看高清照片。

成果数据

2.5K2560×1440 HEVC 预览
< 1s端到端延迟
3 项预览 / 拍照 / 录像
0转码 CPU(纯转封装)

系统架构

小米摄像头
MJSXJ17CM · 2.5K
私有 P2P
(UDP 打洞)→
桥接服务
macOS · Python · miot SDK
ffmpeg 转封装
(零转码)→
go2rtc
RTSP 服务器
RTSP / TCP
→
Android App
Kotlin · libVLC
摄像头无本地开放接口(RTSP/ONVIF/miIO 全部关闭),视频流走小米云私有 P2P 通道。桥接服务以官方 OAuth 授权接入该通道, 将加密 HEVC 裸流转为标准 RTSP 输出 —— 之后任何标准播放器、NVR、Home Assistant 均可直接接入。

关键技术点

  1. P2P 直连链路调通 — 社区 Docker 方案全部失败,逐层定位出双根因(容器 NAT 破坏 UDP 打洞 + 镜像内 SDK 版本过旧),改用宿主机原生运行最新官方 SDK 后一次连通。
  2. HEVC 关键帧同步 — 自行解析 NALU 起始码与 H.265 类型位((byte>>1)&0x3F,随机接入点 16~20),保证 ffmpeg 从关键帧起播不花屏。
  3. 零转码链路 — 摄像头 HEVC → 客户端 HEVC 硬解,全程 -c copy 转封装,无重编码开销与画质损失。
  4. Android 端机型适配 — TextureView 截图在华为机型返回黑图,改走服务端截帧接口,反而拿到解码前 2.5K 原始帧。
  5. Scoped Storage 适配 — 录像经 MediaStore 两阶段提交(IS_PENDING)自动归档到相册 Movies/MiCam。

技术栈