安装教程 —— 把安卓机顶盒变成监控录像主机

openhardwarelab · 面向普通用户/开发者。约 30–60 分钟。
用一台吃灰的安卓机顶盒 + 一个 USB 摄像头,做成:直播 + 循环录像 + 手机远程看 + 移动侦测/告警。

0. 你需要

  • 一台已 root 的安卓机顶盒(建议 Android 4.4+;本项目在 中兴微 ZX296715 实测)。
  • 一个 USB 摄像头(UVC)(普通免驱摄像头即可)。
  • 电视/显示器(看画面)、路由器(组局域网)。
  • 可选:U 盘 / SD/TF 卡(存录像)、一台手机(看监控/收告警)。

  • 1. 认清你的盒子(1 分钟)

    getprop ro.product.cpu.abi          # arm64 / armeabi-v7a
    getprop ro.build.version.release; getprop ro.build.version.sdk
    cat /proc/meminfo; df -k
    

    记下:架构 / 安卓版本 / 内存 / 分区(决定后面能不能装、swap 放哪个分区)。


    2. 打开控制通道(ADB)

    盒子开 ADB 调试 → 电脑:

    adb connect 192.168.1.100:5555     # 换成你的盒子 IP
    adb devices
    
    连不上就按你盒子的说明(有的在「运维调试」里,可能弹随机码)。串口(TTL)是备用生命线。

    3. 搭建 Linux 子系统(摄像服务跑在里面)

    摄像机服务用 Python3 + ffmpeg,建议放在盒子的 Linux chroot 里跑:

    1. 准备一个 Ubuntu 根文件系统镜像,放到盒子 /sdcard/linux.img。

    2. losetup + mount 挂到 /data/linux。

    3. 在子系统里装依赖:

    `sh

    apt-get update

    apt-get install -y python3 python3-pip ffmpeg openssh-server ntfs-3g

    # 要用「物体识别」再加: pip3 install onnxruntime

    `

    详细见 开发者资料/系统改造手册.md 的「Linux 子系统」。

    4. 部署服务(一键或手动)

    一键(电脑上,切到安装文件目录):

    ./一键安装.sh 192.168.1.100
    

    手动:把安装文件里的脚本推进子系统:

    adb push 摄像机服务.py   /data/linux/root/cam.py
    adb push 监控守护.py     /data/linux/root/monitor.py
    adb push 物体识别.py     /data/linux/root/det.py        # 可选
    adb push 画面检测.py     /data/linux/root/look.py
    adb push 局域网互传.py   /data/linux/root/transfer.py
    adb push 系统工具服务.py /data/linux/root/boxctl.py
    

    5. 插摄像头、开播

  • 把 USB 摄像头插到盒子 USB 口(这个盒子对 USB 口挑:不行就换另一个口/用带供电的 HUB)。
  • 启动服务后,浏览器打开 http://<盒子IP>:8891/ → 看到直播画面。
  • 服务无需手动开:由 3-开机自启.sh 开机拉起(见第 8 步)。
  • 盒子屏幕:安装 桌面.apk(已改为开机直进监控画面)后,开机就直接是监控界面,不再先进桌面;设置都在监控页面里(点格子进单路页可设录像/清晰度/识别)。
  • 页面能做什么:

  • 首页 = 4 宫格(多路摄像头总览)→ 点格子进单路页(录像开关 / 清晰度 / 抓拍 / 识别)。
  • 录像回看:按时间检索、网页逐帧回放。
  • 手机扫码看:页面有二维码,扫码即进(局域网 / 公网两版)。
  • 告警截图:命中目标(人/车…)自动存图 + 可推送手机。

  • 6. 录像存储(内部 / SD卡 / U盘)

  • 默认:内部存储 /mnt/sdcard/cctv,30 秒一段,空间不足自动覆盖最旧。
  • 外置盘:插 SD/TF 卡或 U 盘后,服务会优先把录像写到外置盘;首页/单路页显示
  • 💾 录像盘[标签] 总/已用/空闲 · 已录N段 ≈ 时长 · 可再录 ≈ 时长。

  • 清晰度档位(越长录像越省空间):高清 640×480 · 标准 480×360 · 省空间 320×240 · 经济 256×144 · 极省 160×120。在单路页「清晰度」里一键切换。

  • 7. 手机远程看(不在家也能看)

  • 同一局域网:手机浏览器直接开 http://<盒子IP>:8891/。
  • 公网:服务里集成了 Cloudflare 隧道,会生成一个公网地址(见「手机扫码」页的「互联网」二维码)。地址重启可能变,看页面二维码//root/tunnel.url。
  • 访问默认要账号密码(本机 127.0.0.1 免密);账号在 /root/cam.set 里改。

  • 8. 开机自启 + 兜底

    1. 把 3-开机自启.sh 放到 /data/startlinux.sh,4-开机兜底.sh 放到 /data/bootfix.sh。

    2. 在盒子 init 里加一行:

    `sh

    sh /data/startlinux.sh &

    `

    3. 重启复查:子系统已挂、cam/monitor/look/transfer/boxctl 都在跑、盒子开机直接进入监控画面(不再进桌面)。

    兜底脚本会处理「开机卡在升级弹窗」的情况,并确保监控画面在前台(不再拉桌面图标)。

    完成!日常使用

  • 手机/电脑开 http://<盒子IP>:8891/ 看直播与回放。
  • 人/车等目标出现 → 自动存告警图,可推送手机(见「告警推送」文档)。
  • 录像循环覆盖,不用手动清理。

  • 可选:物体识别 & 告警推送

  • 物体识别:本地 YOLO(CPU),命中 人/车… 就记事件 + 存告警图。用 物体识别.py + 识别模型-yolov8n_416.onnx。
  • 推送手机:改 /root/alert.cfg 填你的通知服务(ntfy / Bark / 服务号…),命中目标即推送(含告警图直链)。

  • —— openhardwarelab