# onvif-gateway **Repository Path**: edprox/onvif-gateway ## Basic Information - **Project Name**: onvif-gateway - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-19 - **Last Updated**: 2026-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ONVIF 接入网关 ONVIF 视频网关 — 面向安防运维的智能巡检网关。基于 Go 语言开发,对接 ONVIF 标准协议,集成 ZLMediaKit 流媒体引擎。 ## 核心功能 | 功能 | 说明 | |------|------| | 🔍 **设备发现** | WS-Discovery 自动扫描局域网 ONVIF 设备 | | 📹 **实时播放** | FLV 低延迟 (~1s) 播放,支持多协议输出 | | 🎯 **PTZ 控制** | 方向/变焦/预置位/绝对/相对移动 | | ⏱ **设备校时** | NTP 自动校时 / 本地时间写入 | | 🔄 **远程重启** | ONVIF SystemReboot 远程重启设备 | | 📸 **快照抓拍** | 设备画面实时抓拍 + 画廊管理 | | 📊 **仪表盘** | CPU/内存/磁盘/设备统计/在线率/告警 | | 🔑 **用户认证** | JWT 登录 + Cookie 双通道认证 | ## 快速开始 ### 前置条件 - Go 1.22+ - Docker(运行 ZLMediaKit 流媒体服务器) - 局域网内有 ONVIF 兼容的摄像头 ### 启动 ZLMediaKit ```bash cd deploy docker compose up -d ``` ### 编译运行 ```bash # 编译 make build # 运行 ./build/onvif-gateway ``` 访问 `http://localhost:8090`,默认账号密码 `admin` / `admin`。 ## 项目结构 ``` ├── cmd/server/ # 服务入口 ├── internal/ │ ├── api/ # HTTP API 处理器 │ ├── auth/ # JWT 认证 + 密码哈希 │ ├── config/ # 配置管理 │ ├── core/ # 核心业务逻辑 │ ├── logger/ # 日志系统(按小时轮转) │ ├── model/ # 数据模型 │ ├── ratelimit/ # 速率限制 │ ├── store/ # SQLite 存储层 │ └── ws/ # WebSocket 事件推送 ├── pkg/ │ └── onvif/ # ONVIF 协议客户端(完整17接口) │ ├── client.go # SOAP 客户端基类 │ ├── device.go # Device 服务(信息/能力/网络/校时/重启) │ ├── media.go # Media 服务(Profile/流/快照/视频源) │ ├── ptz.go # PTZ 服务(控制/预置位/状态) │ ├── imaging.go # Imaging 服务(图像参数设置) │ └── discovery.go # WS-Discovery 设备发现 └── web/ # 前端 ├── index.html # SPA (Vue 3) ├── css/style.css # 深色科技风 └── js/ ├── app.js # Vue 入口 ├── api.js # API 请求封装 └── components/ # 页面组件 ``` ## 技术栈 | 层 | 技术 | |----|------| | 后端语言 | Go 1.22 | | 流媒体引擎 | ZLMediaKit (Docker) | | 数据库 | SQLite (嵌入式) | | 前端框架 | Vue 3 (CDN) | | 播放器 | mpegts.js (FLV) | | 认证 | JWT + Cookie | | 协议 | ONVIF Device/Media/PTZ/Imaging (17接口) | ## API 接口 | 端点 | 方法 | 说明 | |------|------|------| | `/api/v1/auth/login` | POST | 用户登录 | | `/api/v1/auth/logout` | POST | 注销 | | `/api/v1/auth/refresh` | POST | 刷新 token | | `/api/v1/dashboard` | GET | 系统仪表盘 | | `/api/v1/devices` | GET/POST | 设备列表/添加 | | `/api/v1/devices/{id}` | GET/PUT/DELETE | 设备详情/编辑/删除 | | `/api/v1/devices/{id}/detail` | GET | 设备实时详情(MAC+流地址) | | `/api/v1/devices/{id}/onvif` | GET | ONVIF 完整驱动报告 | | `/api/v1/devices/{id}/streams` | GET | 媒体流列表 | | `/api/v1/devices/{id}/ptz` | POST | PTZ 控制 | | `/api/v1/devices/{id}/time` | GET/POST | 设备时间/校时 | | `/api/v1/devices/{id}/reboot` | POST | 远程重启 | | `/api/v1/devices/{id}/snapshot` | GET/POST | 快照 | | `/api/v1/scan` | POST | 扫描局域网设备 | ## 部署 ### Docker 部署 ```bash # 编译 make build # 启动 ZLM cd deploy && docker compose up -d # 启动网关 ./build/onvif-gateway ``` ### 配置 编辑 `config.yaml`: ```yaml server: port: 8090 zlm: enabled: true host: "127.0.0.1" api_port: 8080 ``` ## 许可证 GPL-3.0 License