You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RTSPtoWeb/DATABASE_README.md

275 lines
6.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 数据库集成功能说明
本项目已扩展支持MySQL和SQL Server数据库用于管理摄像头信息实现动态配置和实时预览功能。
## 功能特性
- ✅ 支持MySQL和SQL Server数据库
- ✅ 摄像头信息的增删改查
- ✅ Web界面管理摄像头
- ✅ 实时预览新增摄像头
- ✅ 数据库与配置文件双模式支持
- ✅ 自动数据库表创建
- ✅ 数据库连接状态监控
## 配置说明
### 1. 配置文件设置
`config.json` 中添加数据库配置:
```json
{
"server": {
"database_enabled": true,
// ... 其他服务器配置
},
"database": {
"enabled": true,
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "rtsp_cameras",
"table_name": "cameras"
}
}
```
### 2. 数据库类型配置
#### MySQL配置
```json
"database": {
"enabled": true,
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "rtsp_cameras",
"table_name": "cameras"
}
```
#### SQL Server配置
```json
"database": {
"enabled": true,
"type": "sqlserver",
"host": "localhost",
"port": 1433,
"username": "sa",
"password": "YourPassword123",
"database": "rtsp_cameras",
"table_name": "cameras"
}
```
## 数据库初始化
### 1. 使用提供的SQL脚本
执行 `database_init.sql` 文件来创建数据库和表:
```bash
# MySQL
mysql -u root -p < database_init.sql
# SQL Server
sqlcmd -S localhost -U sa -P YourPassword123 -i database_init.sql
```
### 2. 手动创建MySQL
```sql
CREATE DATABASE rtsp_cameras CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE rtsp_cameras;
CREATE TABLE cameras (
id VARCHAR(36) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
ip VARCHAR(45) NOT NULL,
username VARCHAR(100) DEFAULT NULL,
password VARCHAR(255) DEFAULT NULL,
rtsp_url VARCHAR(500) NOT NULL,
enabled BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 3. 手动创建SQL Server
```sql
CREATE DATABASE rtsp_cameras;
GO
USE rtsp_cameras;
GO
CREATE TABLE cameras (
id NVARCHAR(36) PRIMARY KEY,
name NVARCHAR(255) NOT NULL,
ip NVARCHAR(45) NOT NULL,
username NVARCHAR(100) NULL,
password NVARCHAR(255) NULL,
rtsp_url NVARCHAR(500) NOT NULL,
enabled BIT DEFAULT 1,
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE()
);
```
## API接口
### 摄像头管理接口
| 方法 | 路径 | 描述 |
|------|------|------|
| GET | `/cameras` | 获取所有摄像头列表 |
| POST | `/camera/add` | 添加新摄像头 |
| GET | `/camera/{id}` | 获取单个摄像头信息 |
| PUT | `/camera/{id}` | 更新摄像头信息 |
| DELETE | `/camera/{id}` | 删除摄像头 |
| POST | `/cameras/refresh` | 刷新摄像头列表 |
| GET | `/database/status` | 获取数据库状态 |
### 请求示例
#### 添加摄像头
```bash
curl -X POST http://localhost:8083/camera/add \
-H "Content-Type: application/json" \
-d '{
"name": "测试摄像头",
"ip": "192.168.1.100",
"username": "admin",
"password": "admin123",
"rtsp_url": "rtsp://192.168.1.100:554/stream1",
"enabled": true
}'
```
#### 更新摄像头
```bash
curl -X PUT http://localhost:8083/camera/{camera_id} \
-H "Content-Type: application/json" \
-d '{
"name": "更新的摄像头名称",
"ip": "192.168.1.101",
"username": "admin",
"password": "newpassword",
"rtsp_url": "rtsp://192.168.1.101:554/stream1",
"enabled": true
}'
```
## Web界面使用
### 1. 访问摄像头管理页面
打开浏览器访问:`http://localhost:8083/pages/cameras`
### 2. 功能说明
- **摄像头列表**:显示所有摄像头的基本信息和状态
- **添加摄像头**:点击"添加摄像头"按钮,填写摄像头信息
- **编辑摄像头**:点击摄像头卡片上的"编辑"按钮
- **删除摄像头**:点击摄像头卡片上的"删除"按钮
- **实时预览**:点击摄像头卡片上的"预览"按钮
- **刷新列表**:点击"刷新"按钮重新加载摄像头列表
- **数据库状态**:页面顶部显示数据库连接状态
## 运行模式
### 1. 数据库模式
`database.enabled = true` 时:
- 摄像头信息从数据库加载
- 所有配置变更保存到数据库
- 配置文件中的streams配置被忽略
### 2. 配置文件模式
`database.enabled = false` 时:
- 摄像头信息从config.json加载
- 配置变更保存到配置文件
- 数据库功能不可用
### 3. 混合模式
可以在运行时动态切换模式,但建议重启应用以确保配置生效。
## 依赖包
项目添加了以下Go依赖包
```go
// MySQL驱动
github.com/go-sql-driver/mysql v1.7.1
// SQL Server驱动
github.com/denisenkom/go-mssqldb v0.12.3
// UUID生成
github.com/google/uuid v1.3.0
```
## 安装依赖
```bash
go mod tidy
```
## 编译运行
```bash
# 编译
go build -o rtsp-to-web
# 运行
./rtsp-to-web -config config.json
```
## 故障排除
### 1. 数据库连接失败
- 检查数据库服务是否运行
- 验证连接参数(主机、端口、用户名、密码)
- 确认数据库存在
- 检查防火墙设置
### 2. 表不存在错误
- 运行数据库初始化脚本
- 检查数据库权限
- 确认表名配置正确
### 3. 摄像头无法预览
- 检查RTSP URL是否正确
- 验证摄像头网络连接
- 确认用户名密码正确
- 检查摄像头是否支持RTSP协议
### 4. Web界面无法访问
- 确认HTTP服务端口配置
- 检查防火墙设置
- 验证demo模式是否启用
## 注意事项
1. **密码安全**:数据库中的密码以明文存储,生产环境建议加密
2. **并发访问**:多个实例同时访问数据库时注意数据一致性
3. **备份恢复**:定期备份数据库数据
4. **性能优化**:大量摄像头时考虑数据库索引优化
5. **网络安全**生产环境建议使用HTTPS和数据库SSL连接
## 更新日志
- v1.0.0: 初始版本支持MySQL和SQL Server
- 添加Web界面管理功能
- 支持实时预览和动态配置