65 lines
4.8 KiB
Markdown
65 lines
4.8 KiB
Markdown
|
|
# 赵府智家 · 视觉系统
|
|||
|
|
|
|||
|
|
运行在自有小电脑上的视频管理程序。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 运行依赖。
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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 位管理密码。初始化后码文件删除。摄像头与录像机密码在自己的界面填写。
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
systemctl status zhaovision zhaovision-media
|
|||
|
|
journalctl -u zhaovision -u zhaovision-media --since '10 minutes ago'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
程序不自动修改网络、防火墙、Tailscale 子网路由或设备密码。录像机仍按其原有设置运行。
|
|||
|
|
|
|||
|
|
## 开发
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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` 符号链接并重启服务;后续涉及数据库版本变更时需遵循对应迁移说明。
|
|||
|
|
|
|||
|
|
本仓库不包含真实家庭地址、设备凭据、视频文件或部署主机凭据。
|
|||
|
|
|
|||
|
|
## 第三方软件
|
|||
|
|
|
|||
|
|
- [MediaMTX](https://github.com/bluenviron/mediamtx) v1.21.1,MIT,部署时独立安装。
|
|||
|
|
- [hls.js](https://github.com/video-dev/hls.js) v1.7.3,Apache-2.0,浏览器构建与许可证位于 `web/vendor/`。
|
|||
|
|
- 官方接口参考:[录像](https://mediamtx.org/docs/features/record)、[回放](https://mediamtx.org/docs/features/playback)、[配置](https://mediamtx.org/docs/references/configuration-file)。
|
|||
|
|
|
|||
|
|
本项目源码以 MIT 许可证发布。v0.1.0 为初始版本,真实录像机的历史回放兼容性需完成型号适配后另行验证。
|