赵府智家 · 视觉系统
运行在自有小电脑上的视频管理程序。Python 标准库负责对象、空间、配置与登录;MediaMTX 负责 RTSP 接入、HLS 实时预览、本机录像及回放;浏览器使用本地打包的 hls.js。
对象与空间
- 空间档案:家庭 / 公司 / 其他,所属家庭或单位,省、市、区县、街道、小区或园区、楼栋、单元、楼层、门牌和详细地址。
- 摄像头对象:实体设备的稳定 ID、品牌、型号、序列号、镜头数、安装位置和空间引用。
- 镜头通道:每个物理镜头一个通道,关联摄像头对象,配置主、子码流。双镜头摄像头的主、子码流不能当作两个物理镜头。
- 录像机:独立的设备与凭据档案,通道可以引用录像机获取画面。也可以直接连接摄像头。
- 录像来源:明确区分录像机原有录像与小电脑新保存的录像。
v0.1.0 功能与边界
源码包括空间 / 摄像头 / 录像机 / 镜头档案,局域网 RTSP 探测、同源 HLS 播放、本机可选持续录像、日期查询、录像时间轴、定位回放和片段下载、存储保护、管理员初始化与登录。
录像机原有历史录像回放尚未实现。 需要取得具体型号及合法设备账号,接入其录像检索和回放接口;实时 RTSP 地址不能代替录像检索接口。驱动选项目前仅表示路径模板与接入类型,不能视为某个品牌全系列已经兼容。实际通道号需要由设备确认,不能根据三台双镜头直接猜成通道 1–6。
本机录像默认关闭,用户逐通道开启。默认保留 7 天、容量 40 GB、磁盘预留 8 GB,界面可调整。保留期限到达后 MediaMTX 自动删除本机录像;配额达到后暂停录制,不删除录像机中的数据。配额每 20 秒观察一次,允许少量超出。文件路径及录像索引使用 UTC,界面按浏览器时区显示。
HLS 会有数秒延迟。此版本不转码,推荐 H.264;H.265 和不同音频编码的浏览器兼容性取决于浏览器及设备。设备状态基于 MediaMTX 实际码流状态;“正在录像”还要求观察到近期写入的本机录像文件。离线不会生成假画面或假录像。
Ubuntu x86_64 部署
先将源文件提交、公开发布,再部署同一 Git 提交的归档。建议放在 /opt/zhaovision/releases/<commit>/。Python 3.11 以上,无 pip 运行依赖。
sudo VISION_BIND=<本机的Tailscale-IPv4> bash deploy/install.sh
安装脚本校验并安装固定版本 MediaMTX v1.21.1,创建无登录权限的服务用户,数据写入 /var/lib/zhaovision,应用入口为 http://<Tailscale-IP>:8790/。视频服务的 HTTP、RTSP 与管理 API 全部仅监听回环地址,由应用进行登录鉴权并代理。
首次打开页面,读取服务器上的 /var/lib/zhaovision/setup-code.txt,输入初始化码,设置至少 10 位管理密码。初始化后码文件删除。摄像头与录像机密码在自己的界面填写。
systemctl status zhaovision zhaovision-media
journalctl -u zhaovision -u zhaovision-media --since '10 minutes ago'
程序不自动修改网络、防火墙、Tailscale 子网路由或设备密码。录像机仍按其原有设置运行。
开发
python3 app.py
# 在另一个终端运行 MediaMTX,使用首次启动生成的配置
mediamtx ./data/mediamtx.yml
访问 http://127.0.0.1:8790/。后端配置变量:VISION_BIND、VISION_PORT、VISION_DATA、VISION_RECORDINGS,HTTPS 反向代理场景可设 VISION_SECURE_COOKIE=1。当前管理 API 是单管理员模型。
数据与恢复
数据库和生成的 MediaMTX 配置含设备连接凭据,存于权限受限的本机目录,不进入 Git。系统管理员可以读取这些凭据;当前版本未提供硬盘加密。备份时停止两个服务并一并备份整个 /var/lib/zhaovision。恢复到同一路径、修正服务用户所有权后启动服务。升级时保留数据目录,发布目录按提交留存,回滚 current 符号链接并重启服务;后续涉及数据库版本变更时需遵循对应迁移说明。
本仓库不包含真实家庭地址、设备凭据、视频文件或部署主机凭据。
第三方软件
本项目源码以 MIT 许可证发布。v0.1.0 为初始版本,真实录像机的历史回放兼容性需完成型号适配后另行验证。