# 文档 ## 摄像头控制 Controller MVP API 接口: - GET /camera/list 获取摄像头列表 - GET /camera/{id} 获取摄像头信息 - POST /camera/switch 切换摄像头通道 - GET /camera/current 获取当前通道 后台 PTZ 接口(可选): - POST /camera/{id}/ptz/start 开始PTZ控制 - POST /camera/{id}/ptz/stop 停止PTZ控制 ### 获取摄像头列表 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/camera/list 描述:获取摄像头列表 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | machineId | string | 否 | - | 机器ID(可选) | machine_001 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | array | 否 | | 响应数据 (ActualType: List) | | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 摄像头名称 | 主摄像头 | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE | | └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled | | └ ptzSupported | Boolean | 否 | - | 是否支持PTZ | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelDTO) | | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE | | └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": [ { "cameraId": "cam_001", "name": "主摄像头", "machineId": "machine_001", "status": "ONLINE", "capability": "ptz_enabled", "ptzSupported": true, "channels": [ { "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE", "cameraId": "cam_001" } ] } ], "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 获取摄像头信息 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/camera/{cameraId} 描述:获取摄像头信息 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### Path参数 | 名称 | 必填 | 描述 | 示例值 | | --- | --- | --- | --- | | cameraId | 是 | 摄像头ID | camera_001 | #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: CameraDTO) | | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 摄像头名称 | 主摄像头 | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE | | └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled | | └ ptzSupported | Boolean | 否 | - | 是否支持PTZ | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelDTO) | | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE | | └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "cameraId": "cam_001", "name": "主摄像头", "machineId": "machine_001", "status": "ONLINE", "capability": "ptz_enabled", "ptzSupported": true, "channels": [ { "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE", "cameraId": "cam_001" } ] }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 切换摄像头通道(MVP核心) 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/switch 描述:切换摄像头通道(MVP核心) ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | machineId | String | 是 | - | 机器ID | machine_001 | | channelId | String | 是 | - | 目标通道ID | ch_001 | #### 请求示例 ``` { "machineId": "machine_001", "channelId": "ch_001" } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: ChannelDTO) | | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE | | └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE", "cameraId": "cam_001" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 获取当前活动通道 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/camera/current 描述:获取当前活动通道 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | machineId | string | 是 | - | 机器ID | machine_001 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: ChannelDTO) | | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE | | └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE", "cameraId": "cam_001" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 开始PTZ控制(后台专用) 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/start 描述:开始PTZ控制(后台专用) ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### Path参数 | 名称 | 必填 | 描述 | 示例值 | | --- | --- | --- | --- | | cameraId | 是 | 摄像头ID | camera_001 | #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | action | string | 是 | - | PTZ动作 | up | | speed | int32 | 是 | - | 速度(1-100) | 50 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 停止PTZ控制(后台专用) 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/stop 描述:停止PTZ控制(后台专用) ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### Path参数 | 名称 | 必填 | 描述 | 示例值 | | --- | --- | --- | --- | | cameraId | 是 | 摄像头ID | camera_001 | #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ## 摄像头管理 ### 获取摄像头列表 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/list 描述:获取摄像头列表 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | machineId | string | 否 | - | 机器ID(可选),不传则返回全部 | machine_001 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | array | 否 | | 响应数据 (ActualType: List) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 名称 | 主摄像头 | | └ ip | String | 否 | - | IP地址 | 192.168.1.100 | | └ port | Integer | 否 | - | 端口 | 80 | | └ username | String | 否 | - | 用户名 | admin | | └ brand | String | 否 | - | 品牌 | hikvision | | └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ machineName | String | 否 | - | 所属机器名称 | 1号机 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": [ { "id": 1, "cameraId": "cam_001", "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "brand": "hikvision", "capability": "ptz_enabled", "status": "ONLINE", "machineId": "machine_001", "machineName": "1号机", "enabled": true, "channels": [ { "id": 1, "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE" } ], "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" } ], "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 获取摄像头详情 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/detail 描述:获取摄像头详情 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | int64 | 是 | - | 摄像头主键ID | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: CameraInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 名称 | 主摄像头 | | └ ip | String | 否 | - | IP地址 | 192.168.1.100 | | └ port | Integer | 否 | - | 端口 | 80 | | └ username | String | 否 | - | 用户名 | admin | | └ brand | String | 否 | - | 品牌 | hikvision | | └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ machineName | String | 否 | - | 所属机器名称 | 1号机 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "cameraId": "cam_001", "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "brand": "hikvision", "capability": "ptz_enabled", "status": "ONLINE", "machineId": "machine_001", "machineName": "1号机", "enabled": true, "channels": [ { "id": 1, "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE" } ], "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 添加摄像头 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/add 描述:添加摄像头 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | cameraId | String | 是 | 50 | 摄像头ID(唯一标识)
Validate[max: 50; ] | cam_001 | | name | String | 是 | 100 | 名称
Validate[max: 100; ] | 主摄像头 | | ip | String | 是 | - | IP地址
Validate[regexp: ^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$; ] | 192.168.1.100 | | port | Integer | 否 | - | 端口 | 80 | | username | String | 否 | 50 | 用户名
Validate[max: 50; ] | admin | | password | String | 否 | 100 | 密码
Validate[max: 100; ] | password123 | | brand | String | 否 | 30 | 品牌
Validate[max: 30; ] | hikvision | | capability | String | 否 | - | 能力: switch_only, ptz_enabled
Validate[regexp: ^(switch_only|ptz_enabled)$; ] | ptz_enabled | | machineId | String | 否 | - | 所属机器ID | machine_001 | | channels | List | 否 | | 通道列表 (ActualType: ChannelAddRequest) | | | └ channelId | String | 是 | - | 通道ID | ch_001 | | └ name | String | 是 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | #### 请求示例 ``` { "cameraId": "cam_001", "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "password": "password123", "brand": "hikvision", "capability": "ptz_enabled", "machineId": "machine_001", "channels": [ { "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true } ] } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: CameraInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 名称 | 主摄像头 | | └ ip | String | 否 | - | IP地址 | 192.168.1.100 | | └ port | Integer | 否 | - | 端口 | 80 | | └ username | String | 否 | - | 用户名 | admin | | └ brand | String | 否 | - | 品牌 | hikvision | | └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ machineName | String | 否 | - | 所属机器名称 | 1号机 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "cameraId": "cam_001", "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "brand": "hikvision", "capability": "ptz_enabled", "status": "ONLINE", "machineId": "machine_001", "machineName": "1号机", "enabled": true, "channels": [ { "id": 1, "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE" } ], "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 更新摄像头 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/update 描述:更新摄像头 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | Long | 否 | - | 摄像头数据库ID | 1 | | name | String | 否 | - | 名称 | 主摄像头 | | ip | String | 否 | - | IP地址 | 192.168.1.100 | | port | Integer | 否 | - | 端口 | 80 | | username | String | 否 | - | 用户名 | admin | | password | String | 否 | - | 密码(不传或为空则不修改) | password123 | | brand | String | 否 | - | 品牌 | hikvision | | capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled | | machineId | String | 否 | - | 所属机器ID | machine_001 | | enabled | Boolean | 否 | - | 启用状态 | true | | channels | List | 否 | | 通道列表 (ActualType: ChannelUpdateRequest) | | | └ id | Long | 否 | - | 通道数据库ID | 1 | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | #### 请求示例 ``` { "id": 1, "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "password": "password123", "brand": "hikvision", "capability": "ptz_enabled", "machineId": "machine_001", "enabled": true, "channels": [ { "id": 1, "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true } ] } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: CameraInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ cameraId | String | 否 | - | 摄像头ID | cam_001 | | └ name | String | 否 | - | 名称 | 主摄像头 | | └ ip | String | 否 | - | IP地址 | 192.168.1.100 | | └ port | Integer | 否 | - | 端口 | 80 | | └ username | String | 否 | - | 用户名 | admin | | └ brand | String | 否 | - | 品牌 | hikvision | | └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ machineId | String | 否 | - | 所属机器ID | machine_001 | | └ machineName | String | 否 | - | 所属机器名称 | 1号机 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ channels | List | 否 | | 通道列表 (ActualType: ChannelInfoDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ channelId | String | 否 | - | 通道ID | ch_001 | | └ name | String | 否 | - | 通道名称 | 主通道 | | └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 | | └ defaultView | Boolean | 否 | - | 是否默认视角 | true | | └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "cameraId": "cam_001", "name": "主摄像头", "ip": "192.168.1.100", "port": 80, "username": "admin", "brand": "hikvision", "capability": "ptz_enabled", "status": "ONLINE", "machineId": "machine_001", "machineName": "1号机", "enabled": true, "channels": [ { "id": 1, "channelId": "ch_001", "name": "主通道", "rtspUrl": "rtsp://192.168.1.100:554/stream1", "defaultView": true, "status": "ONLINE" } ], "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 删除摄像头 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/delete 描述:删除摄像头 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | int64 | 是 | - | 摄像头主键ID | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 检测摄像头连通性 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/check 描述:检测摄像头连通性 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | int64 | 是 | - | 摄像头主键ID | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | boolean | 否 | - | 响应数据 (ActualType: Boolean) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": false, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ## 机器管理 ### 获取机器列表 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/machines/list 描述:获取机器列表 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | array | 否 | | 响应数据 (ActualType: List) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ machineId | String | 否 | - | 机器ID | machine_001 | | └ name | String | 否 | - | 名称 | 1号机 | | └ location | String | 否 | - | 位置 | A区1楼 | | └ description | String | 否 | - | 描述 | 主力机器 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": [ { "id": 1, "machineId": "machine_001", "name": "1号机", "location": "A区1楼", "description": "主力机器", "enabled": true, "cameraCount": 3, "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" } ], "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 获取机器详情 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/machines/detail 描述:获取机器详情 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | int64 | 是 | - | 机器主键ID | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: MachineDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ machineId | String | 否 | - | 机器ID | machine_001 | | └ name | String | 否 | - | 名称 | 1号机 | | └ location | String | 否 | - | 位置 | A区1楼 | | └ description | String | 否 | - | 描述 | 主力机器 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "machineId": "machine_001", "name": "1号机", "location": "A区1楼", "description": "主力机器", "enabled": true, "cameraCount": 3, "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 添加机器 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/machines/add 描述:添加机器 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | machineId | String | 是 | 50 | 机器ID(唯一标识)
Validate[max: 50; ] | machine_001 | | name | String | 是 | 100 | 名称
Validate[max: 100; ] | 1号机 | | location | String | 否 | 200 | 位置
Validate[max: 200; ] | A区1楼 | | description | String | 否 | 500 | 描述
Validate[max: 500; ] | 主力机器 | #### 请求示例 ``` { "machineId": "machine_001", "name": "1号机", "location": "A区1楼", "description": "主力机器" } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: MachineDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ machineId | String | 否 | - | 机器ID | machine_001 | | └ name | String | 否 | - | 名称 | 1号机 | | └ location | String | 否 | - | 位置 | A区1楼 | | └ description | String | 否 | - | 描述 | 主力机器 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "machineId": "machine_001", "name": "1号机", "location": "A区1楼", "description": "主力机器", "enabled": true, "cameraCount": 3, "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 更新机器 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/machines/update 描述:更新机器 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | Long | 否 | - | 机器数据库ID | 1 | | name | String | 否 | - | 名称 | 1号机 | | location | String | 否 | - | 位置 | A区1楼 | | description | String | 否 | - | 描述 | 主力机器 | | enabled | Boolean | 否 | - | 启用状态 | true | #### 请求示例 ``` { "id": 1, "name": "1号机", "location": "A区1楼", "description": "主力机器", "enabled": true } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: MachineDTO) | | | └ id | Long | 否 | - | 主键ID | 1 | | └ machineId | String | 否 | - | 机器ID | machine_001 | | └ name | String | 否 | - | 名称 | 1号机 | | └ location | String | 否 | - | 位置 | A区1楼 | | └ description | String | 否 | - | 描述 | 主力机器 | | └ enabled | Boolean | 否 | - | 是否启用 | true | | └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 | | └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 | | └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "machineId": "machine_001", "name": "1号机", "location": "A区1楼", "description": "主力机器", "enabled": true, "cameraCount": 3, "createdAt": "2026-01-07T10:00:00", "updatedAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 删除机器 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/machines/delete 描述:删除机器 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | id | int64 | 是 | - | 机器主键ID | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ## 管理员认证 ### 登录 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/auth/login 描述:登录 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | username | String | 是 | 50 | 用户名
Validate[max: 50; ] | admin | | password | String | 是 | 100 | 密码
Validate[max: 100; ] | 123456 | #### 请求示例 ``` { "username": "admin", "password": "123456" } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: LoginResponse) | | | └ token | String | 否 | - | JWT Token | eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiJ9.xxx | | └ tokenType | String | 否 | - | Token 类型 | Bearer | | └ expiresIn | Long | 否 | - | 过期时间(秒) | 86400 | | └ admin | AdminInfoDTO | 否 | | 用户信息 | | | └ id | Long | 否 | - | 用户ID | 1 | | └ username | String | 否 | - | 用户名 | admin | | └ nickname | String | 否 | - | 昵称 | 管理员 | | └ role | String | 否 | - | 角色 | ADMIN | | └ lastLoginAt | LocalDateTime | 否 | - | 最后登录时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiJ9.xxx", "tokenType": "Bearer", "expiresIn": 86400, "admin": { "id": 1, "username": "admin", "nickname": "管理员", "role": "ADMIN", "lastLoginAt": "2026-01-07T10:00:00" } }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 登出 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/auth/logout 描述:登出 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 获取当前用户信息 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/auth/info 描述:获取当前用户信息 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: AdminInfoDTO) | | | └ id | Long | 否 | - | 用户ID | 1 | | └ username | String | 否 | - | 用户名 | admin | | └ nickname | String | 否 | - | 昵称 | 管理员 | | └ role | String | 否 | - | 角色 | ADMIN | | └ lastLoginAt | LocalDateTime | 否 | - | 最后登录时间 | 2026-01-07T10:00:00 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "id": 1, "username": "admin", "nickname": "管理员", "role": "ADMIN", "lastLoginAt": "2026-01-07T10:00:00" }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ### 修改密码 维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/admin/auth/password 描述:修改密码 ContentType:`application/json` #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | oldPassword | String | 是 | - | 旧密码 | oldpassword | | newPassword | String | 是 | 100 | 新密码(6-100字符)
Validate[max: 100; ] | newpassword | #### 请求示例 ``` { "oldPassword": "oldpassword", "newPassword": "newpassword" } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | - | 响应数据 (ActualType: Void) | | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无 ## 统计 ### 获取仪表盘统计数据 维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/admin/stats/dashboard 描述:获取仪表盘统计数据 ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### 请求参数 #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | --- | --- | --- | --- | --- | --- | | code | Integer | 否 | - | 响应码 | 200 | | message | String | 否 | - | 响应消息 | 操作成功 | | data | object | 否 | | 响应数据 (ActualType: DashboardStatsDTO) | | | └ machineTotal | Long | 否 | - | 机器总数 | 10 | | └ machineEnabled | Long | 否 | - | 启用的机器数 | 8 | | └ cameraTotal | Long | 否 | - | 摄像头总数 | 20 | | └ cameraOnline | Long | 否 | - | 在线摄像头数 | 15 | | └ cameraOffline | Long | 否 | - | 离线摄像头数 | 5 | | └ channelTotal | Long | 否 | - | 通道总数 | 40 | | timestamp | Long | 否 | - | 时间戳 | 1703145600000 | | traceId | String | 否 | - | 请求追踪ID | trace-123456 | #### 响应示例 ``` { "code": 200, "message": "操作成功", "data": { "machineTotal": 10, "machineEnabled": 8, "cameraTotal": 20, "cameraOnline": 15, "cameraOffline": 5, "channelTotal": 40 }, "timestamp": 1703145600000, "traceId": "trace-123456" } ``` #### 错误码 无