# xCam **Repository Path**: cpsoft13/x-cam ## Basic Information - **Project Name**: xCam - **Description**: 基于gb28181的远程监控方案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-21 - **Last Updated**: 2026-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xCam 视频监控平台 基于 GB28181-2016 标准实现的视频监控管理平台,支持 TP-LINK IPC 摄像头的统一接入、实时视频预览、云台控制及录像回放。 --- ## 系统架构 ``` ┌──────────────────────────────────────────────────────────────────────┐ │ 前端 (Vue 3 + Element Plus) │ │ http://localhost:3000 │ └──────────────────────────────────────────────────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────┐ ┌─────────────────────────────────┐ │ server-rs (:8084) │ │ media-server (:8080/:8081) │ │ Rust + Axum + SQLite │ │ Rust 流媒体处理 │ │ • 认证/授权 │ │ • RTP → PS → H264/H265 │ │ • 设备 CRUD │ │ • HTTP-FLV 输出 │ │ • 录像回放 API │ │ • 端口池 (10000-60000) │ └─────────────────────────────┘ └─────────────────────────────────┘ │ ▲ │ │ ▼ │ ┌──────────────────────────────────────────────────────────────────────┐ │ gb28181-server (:5066 SIP, :8082 API) │ │ Rust 原生 GB28181 实现 │ │ • SIP REGISTER (Digest 认证) │ │ • SIP INVITE/BYE/MESSAGE │ │ • 设备心跳保活 │ │ • 云台 PTZ 控制 │ └──────────────────────────────────────────────────────────────────────┘ ▲ │ │ SIP/RTP │ ┌──────────────────────────────────────────────────────────────────────┐ │ TP-LINK IPC 摄像头 │ │ (GB28181-2016 协议接入) │ └──────────────────────────────────────────────────────────────────────┘ ``` ## 核心功能 | 功能 | 状态 | 说明 | |------|------|------| | GB28181 设备注册 | ✅ | SIP Digest 认证,支持 1000+ 设备 | | 实时视频预览 | ✅ | H.264/H.265,支持 9 路同屏 | | 云台控制 (PTZ) | ✅ | 预置点/方向/变倍/聚焦 | | 设备心跳保活 | ✅ | 30s 检测间隔,180s 超时 | | 录像回放 | 🔨 | 基础 API 就绪 | | 告警中心 | ⬜ | 待开发 | | 移动/越线/入侵检测 | ✅ | IPC 端配置 | ## 端口清单 | 服务 | 端口 | 协议 | 用途 | |------|------|------|------| | frontend | 3000 | HTTP | Vite 开发服务器 | | server-rs | 8084 | HTTP | 主 API (认证/设备/录像) | | gb28181-server | 5066 | UDP/TCP | SIP 信令 | | gb28181-server | 8082 | HTTP | GB28181 控制 API | | media-server | 8080 | HTTP | HTTP-FLV 流输出 | | media-server | 8081 | HTTP | 媒体控制 API | | media-server | 10000-60000 | UDP | RTP 媒体端口池 | ## 快速开始 ### 环境要求 - Node.js 18+ - Rust 1.70+ - macOS / Linux ### 启动服务 ```bash # 启动全部服务 bash scripts/start.sh # 启动指定服务 bash scripts/start.sh gb28181 # 仅 GB28181 bash scripts/start.sh server # 仅 server-rs bash scripts/start.sh frontend # 仅前端 # 停止全部服务 bash scripts/stop.sh ``` ### 访问地址 - 前端: http://localhost:3000 - API: http://localhost:8084 - GB28181 API: http://localhost:8082 - 媒体服务: http://localhost:8080 --- ## API 参考 ### 认证 ```bash # 登录 curl -X POST http://localhost:8084/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"admin123"}' ``` ### 设备管理 ```bash # 获取设备列表 curl http://localhost:8084/api/devices # 获取 GB28181 设备 curl http://localhost:8082/api/gb28181/devices ``` ### 流媒体控制 ```bash # 启动视频流 curl -X POST http://localhost:8082/api/stream/start \ -H "Content-Type: application/json" \ -d '{"device_id":"34020000001310000001"}' # 停止视频流 curl -X POST http://localhost:8082/api/stream/stop \ -H "Content-Type: application/json" \ -d '{"stream_key":"xxx"}' ``` ### 云台控制 ```bash # PTZ 方向控制 curl -X POST http://localhost:8082/api/gb28181/control \ -H "Content-Type: application/json" \ -d '{"device_id":"34020000001310000001","command":"up","speed":5}' # PTZ 预置点 curl -X POST http://localhost:8082/api/gb28181/control \ -H "Content-Type: application/json" \ -d '{"device_id":"34020000001310000001","preset_index":1,"action":"goto"}' ``` **PTZ 命令**: `up`, `down`, `left`, `right`, `upleft`, `upright`, `downleft`, `downright`, `zoomin`, `zoomout`, `focusnear`, `focusfar`, `stop` --- ## IPC 控制脚本 `tools/ipc-control.sh` 提供 IPC 摄像头的命令行控制能力。 ```bash # 登录 ./tools/ipc-control.sh login # 获取配置 ./tools/ipc-control.sh info # 设备信息 ./tools/ipc-control.sh gb28181 # GB28181 配置 ./tools/ipc-control.sh motion # 移动侦测 ./tools/ipc-control.sh line # 越线检测 ./tools/ipc-control.sh intrusion # 入侵检测 # 配置设置 ./tools/ipc-control.sh motion-set on medium record,msg_push ./tools/ipc-control.sh line-set on both 50 ./tools/ipc-control.sh intrusion-set on 60 30 # 预置点 ./tools/ipc-control.sh preset # 获取预置点列表 ./tools/ipc-control.sh preset-set # 保存当前位置 ./tools/ipc-control.sh preset-goto # 转到预置点 # GB28181 PTZ ./tools/ipc-control.sh gb28181-ptz up 5 # 上 ./tools/ipc-control.sh gb28181-ptz stop # 停止 ``` --- ## IPC 配置参考 | 项目 | 值 | |------|-----| | 型号 | TL-IPC44AN-4 | | IP | 192.168.1.60 | | Web 管理 | http://192.168.1.60 | | GB28181 端口 | 5060 | | 设备 ID | 34020000001310000001 | | 服务器 ID | 34020000002000000001 | | 密码 | 123456 | | 域 | 3402000000 | --- ## 项目结构 ``` xCam/ ├── frontend/ # Vue 3 前端 │ ├── src/ │ │ ├── views/ # 页面组件 │ │ ├── stores/ # Pinia 状态 │ │ └── utils/ # 工具函数 │ └── vite.config.js ├── server-rs/ # 主 API 服务 │ └── src/ │ ├── routes/ # 路由 │ ├── db.rs # SQLite │ └── auth.rs # JWT ├── gb28181-server/ # GB28181 SIP 服务器 │ └── src/ │ ├── sip/ # SIP 协议栈 │ ├── device/ # 设备管理 │ └── app.rs # 核心逻辑 ├── media-server/ # 媒体处理服务器 │ └── src/ │ ├── rtp/ # RTP 接收 │ ├── ps/ # PS 解复用 │ └── flv/ # FLV 封装 ├── scripts/ # 启动脚本 │ ├── start.sh │ └── stop.sh └── docs/ # 文档 └── REQUIREMENTS.md # 详细需求文档 ``` --- ## 技术栈 | 层级 | 技术 | |------|------| | 前端 | Vue 3, Vite, Element Plus, Pinia | | 后端 | Rust, Axum, SQLite | | 流媒体 | Rust (RTP/PS/H264/H265/FLV) | | 协议 | GB28181-2016, SIP, RTP | | 视频 | flv.js, WebCodecs | --- ## 开发指南 ### 前端开发 ```bash cd frontend npm install npm run dev # 开发服务器 npm run build # 生产构建 ``` ### 后端编译 ```bash # 编译全部 cargo build --release # 单独编译 cd server-rs && cargo build --release cd gb28181-server && cargo build --release cd media-server && cargo build --release ``` ### 日志 日志文件位于 `logs/` 目录: - `server-rs.log` - 主 API 服务 - `gb28181.log` - SIP 信令 - `media-server.log` - 媒体处理 - `frontend.log` - 前端服务 --- ## 文档 - [需求文档](./docs/REQUIREMENTS.md) - 详细功能需求与架构设计 - [GB28181 问题修复记录](./docs/REQUIREMENTS.md#8-已解决问题) - 调试过程中解决的问题汇总 --- ## License Private - Internal Use Only