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

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模式是否启用

注意事项

  1. 密码安全:数据库中的密码以明文存储,生产环境建议加密
  2. 并发访问:多个实例同时访问数据库时注意数据一致性
  3. 备份恢复:定期备份数据库数据
  4. 性能优化:大量摄像头时考虑数据库索引优化
  5. 网络安全生产环境建议使用HTTPS和数据库SSL连接

更新日志

  • v1.0.0: 初始版本支持MySQL和SQL Server
  • 添加Web界面管理功能
  • 支持实时预览和动态配置