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.
6.1 KiB
6.1 KiB
数据库集成功能说明
本项目已扩展支持MySQL和SQL Server数据库,用于管理摄像头信息,实现动态配置和实时预览功能。
功能特性
- ✅ 支持MySQL和SQL Server数据库
- ✅ 摄像头信息的增删改查
- ✅ Web界面管理摄像头
- ✅ 实时预览新增摄像头
- ✅ 数据库与配置文件双模式支持
- ✅ 自动数据库表创建
- ✅ 数据库连接状态监控
配置说明
1. 配置文件设置
在 config.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配置
"database": {
"enabled": true,
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "rtsp_cameras",
"table_name": "cameras"
}
SQL Server配置
"database": {
"enabled": true,
"type": "sqlserver",
"host": "localhost",
"port": 1433,
"username": "sa",
"password": "YourPassword123",
"database": "rtsp_cameras",
"table_name": "cameras"
}
数据库初始化
1. 使用提供的SQL脚本
执行 database_init.sql 文件来创建数据库和表:
# MySQL
mysql -u root -p < database_init.sql
# SQL Server
sqlcmd -S localhost -U sa -P YourPassword123 -i database_init.sql
2. 手动创建(MySQL)
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)
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 |
获取数据库状态 |
请求示例
添加摄像头
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
}'
更新摄像头
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依赖包:
// 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
安装依赖
go mod tidy
编译运行
# 编译
go build -o rtsp-to-web
# 运行
./rtsp-to-web -config config.json
故障排除
1. 数据库连接失败
- 检查数据库服务是否运行
- 验证连接参数(主机、端口、用户名、密码)
- 确认数据库存在
- 检查防火墙设置
2. 表不存在错误
- 运行数据库初始化脚本
- 检查数据库权限
- 确认表名配置正确
3. 摄像头无法预览
- 检查RTSP URL是否正确
- 验证摄像头网络连接
- 确认用户名密码正确
- 检查摄像头是否支持RTSP协议
4. Web界面无法访问
- 确认HTTP服务端口配置
- 检查防火墙设置
- 验证demo模式是否启用
注意事项
- 密码安全:数据库中的密码以明文存储,生产环境建议加密
- 并发访问:多个实例同时访问数据库时注意数据一致性
- 备份恢复:定期备份数据库数据
- 性能优化:大量摄像头时考虑数据库索引优化
- 网络安全:生产环境建议使用HTTPS和数据库SSL连接
更新日志
- v1.0.0: 初始版本,支持MySQL和SQL Server
- 添加Web界面管理功能
- 支持实时预览和动态配置