# 文档

## 管理后台

## 摄像头扫描管理

### 触发 ONVIF 设备扫描

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/lss/{lssId}/scan
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/lss/{lssId}/scan

描述：触发 ONVIF 设备扫描

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称  | 必填 | 描述        | 示例值 |
| ----- | ---- | ----------- | ------ |
| lssId | 是   | LSS 节点 ID |        |

#### 请求参数

#### 响应参数

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码（失败时返回） |  |
| errMessage | String | 否 | - | 错误信息（失败时返回） |  |
| data | object | 否 |  | 响应数据 (ActualType: ScanResultDTO) |  |
| └ taskId | String | 否 | - | 扫描任务 ID | scan_abc12345 |
| └ lssId | String | 否 | - | LSS 节点 ID | lss_001 |
| └ status | String | 否 | - | 扫描状态: SCANNING / COMPLETED / FAILED | SCANNING |
| └ discoveredCount | Integer | 否 | - | 发现的设备数量 | 5 |
| └ newCount | Integer | 否 | - | 新发现的设备数量 | 3 |
| └ devices | List<DiscoveredCameraDTO> | 否 |  | 发现的设备列表 (ActualType: DiscoveredCameraDTO) |  |
| └ id | Long | 否 | - | ID | 1 |
| └ lssId | String | 否 | - | LSS 节点 ID | lss_001 |
| └ ip | String | 否 | - | IP 地址 | 192.168.1.100 |
| └ port | Integer | 否 | - | 端口 | 80 |
| └ uuid | String | 否 | - | 设备 UUID | uuid-1234-5678 |
| └ deviceName | String | 否 | - | 设备名称 | IP Camera |
| └ vendor | String | 否 | - | 厂商 | HIKVISION |
| └ model | String | 否 | - | 型号 | DS-2CD2T45FWD |
| └ serialNumber | String | 否 | - | 序列号 | SN123456789 |
| └ rtspUrl | String | 否 | - | RTSP URL | rtsp://admin:12345@192.168.1.100:554/stream1 |
| └ matchStatus | String | 否 | - | 匹配状态: PENDING / MATCHING / MATCHED / UNMATCHED | PENDING |
| └ matchedCredentialId | Long | 否 | - | 匹配成功的凭证 ID | 1 |
| └ matchAttempts | Integer | 否 | - | 匹配尝试次数 | 0 |
| └ lastMatchAttempt | LocalDateTime | 否 | - | 最后匹配时间 | 2026-01-27T10:00:00 |
| └ matchError | String | 否 | - | 匹配错误信息 | Authentication failed |
| └ deviceInfo | String | 否 | - | 设备详细信息 JSON | {manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5} |
| └ bound | Boolean | 否 | - | 是否已绑定到 camera_info | false |
| └ boundCameraId | Long | 否 | - | 绑定的 camera_info.id | 1 |
| └ canMatch | Boolean | 否 | - | 是否可以匹配（未超过 3 次或已过 24 小时冷却期） | true |
| └ discoveredAt | LocalDateTime | 否 | - | 发现时间 | 2026-01-27T10:00:00 |
| └ error | String | 否 | - | 错误信息 |  |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "taskId": "scan_abc12345",
        "lssId": "lss_001",
        "status": "SCANNING",
        "discoveredCount": 5,
        "newCount": 3,
        "devices": [
            {
                "id": 1,
                "lssId": "lss_001",
                "ip": "192.168.1.100",
                "port": 80,
                "uuid": "uuid-1234-5678",
                "deviceName": "IP Camera",
                "vendor": "HIKVISION",
                "model": "DS-2CD2T45FWD",
                "serialNumber": "SN123456789",
                "rtspUrl": "rtsp://admin:12345@192.168.1.100:554/stream1",
                "matchStatus": "PENDING",
                "matchedCredentialId": 1,
                "matchAttempts": 0,
                "lastMatchAttempt": "2026-01-27T10:00:00",
                "matchError": "Authentication failed",
                "deviceInfo": "{manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5}",
                "bound": false,
                "boundCameraId": 1,
                "canMatch": true,
                "discoveredAt": "2026-01-27T10:00:00"
            }
        ],
        "error": "string"
    }
}
```

#### 错误码

无

### 获取发现的设备列表

维护人：TG Live

#### URL

- 本地开发环境: `GET` http://localhost:10050/api/admin/lss/{lssId}/discovered
- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/lss/{lssId}/discovered

描述：获取发现的设备列表

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称  | 必填 | 描述        | 示例值 |
| ----- | ---- | ----------- | ------ |
| lssId | 是   | LSS 节点 ID |        |

#### 请求参数

#### 响应参数

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码（失败时返回） |  |
| errMessage | String | 否 | - | 错误信息（失败时返回） |  |
| data | array | 否 |  | 响应数据 (ActualType: List) |  |
| └ id | Long | 否 | - | ID | 1 |
| └ lssId | String | 否 | - | LSS 节点 ID | lss_001 |
| └ ip | String | 否 | - | IP 地址 | 192.168.1.100 |
| └ port | Integer | 否 | - | 端口 | 80 |
| └ uuid | String | 否 | - | 设备 UUID | uuid-1234-5678 |
| └ deviceName | String | 否 | - | 设备名称 | IP Camera |
| └ vendor | String | 否 | - | 厂商 | HIKVISION |
| └ model | String | 否 | - | 型号 | DS-2CD2T45FWD |
| └ serialNumber | String | 否 | - | 序列号 | SN123456789 |
| └ rtspUrl | String | 否 | - | RTSP URL | rtsp://admin:12345@192.168.1.100:554/stream1 |
| └ matchStatus | String | 否 | - | 匹配状态: PENDING / MATCHING / MATCHED / UNMATCHED | PENDING |
| └ matchedCredentialId | Long | 否 | - | 匹配成功的凭证 ID | 1 |
| └ matchAttempts | Integer | 否 | - | 匹配尝试次数 | 0 |
| └ lastMatchAttempt | LocalDateTime | 否 | - | 最后匹配时间 | 2026-01-27T10:00:00 |
| └ matchError | String | 否 | - | 匹配错误信息 | Authentication failed |
| └ deviceInfo | String | 否 | - | 设备详细信息 JSON | {manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5} |
| └ bound | Boolean | 否 | - | 是否已绑定到 camera_info | false |
| └ boundCameraId | Long | 否 | - | 绑定的 camera_info.id | 1 |
| └ canMatch | Boolean | 否 | - | 是否可以匹配（未超过 3 次或已过 24 小时冷却期） | true |
| └ discoveredAt | LocalDateTime | 否 | - | 发现时间 | 2026-01-27T10:00:00 |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": [
        {
            "id": 1,
            "lssId": "lss_001",
            "ip": "192.168.1.100",
            "port": 80,
            "uuid": "uuid-1234-5678",
            "deviceName": "IP Camera",
            "vendor": "HIKVISION",
            "model": "DS-2CD2T45FWD",
            "serialNumber": "SN123456789",
            "rtspUrl": "rtsp://admin:12345@192.168.1.100:554/stream1",
            "matchStatus": "PENDING",
            "matchedCredentialId": 1,
            "matchAttempts": 0,
            "lastMatchAttempt": "2026-01-27T10:00:00",
            "matchError": "Authentication failed",
            "deviceInfo": "{manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5}",
            "bound": false,
            "boundCameraId": 1,
            "canMatch": true,
            "discoveredAt": "2026-01-27T10:00:00"
        }
    ]
}
```

#### 错误码

无

### 获取发现设备详情

维护人：TG Live

#### URL

- 本地开发环境: `GET` http://localhost:10050/api/admin/discovered/{id}
- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/discovered/{id}

描述：获取发现设备详情

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称 | 必填 | 描述        | 示例值 |
| ---- | ---- | ----------- | ------ |
| id   | 是   | 发现设备 ID | 0      |

#### 请求参数

#### 响应参数

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码（失败时返回） |  |
| errMessage | String | 否 | - | 错误信息（失败时返回） |  |
| data | object | 否 |  | 响应数据 (ActualType: DiscoveredCameraDTO) |  |
| └ id | Long | 否 | - | ID | 1 |
| └ lssId | String | 否 | - | LSS 节点 ID | lss_001 |
| └ ip | String | 否 | - | IP 地址 | 192.168.1.100 |
| └ port | Integer | 否 | - | 端口 | 80 |
| └ uuid | String | 否 | - | 设备 UUID | uuid-1234-5678 |
| └ deviceName | String | 否 | - | 设备名称 | IP Camera |
| └ vendor | String | 否 | - | 厂商 | HIKVISION |
| └ model | String | 否 | - | 型号 | DS-2CD2T45FWD |
| └ serialNumber | String | 否 | - | 序列号 | SN123456789 |
| └ rtspUrl | String | 否 | - | RTSP URL | rtsp://admin:12345@192.168.1.100:554/stream1 |
| └ matchStatus | String | 否 | - | 匹配状态: PENDING / MATCHING / MATCHED / UNMATCHED | PENDING |
| └ matchedCredentialId | Long | 否 | - | 匹配成功的凭证 ID | 1 |
| └ matchAttempts | Integer | 否 | - | 匹配尝试次数 | 0 |
| └ lastMatchAttempt | LocalDateTime | 否 | - | 最后匹配时间 | 2026-01-27T10:00:00 |
| └ matchError | String | 否 | - | 匹配错误信息 | Authentication failed |
| └ deviceInfo | String | 否 | - | 设备详细信息 JSON | {manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5} |
| └ bound | Boolean | 否 | - | 是否已绑定到 camera_info | false |
| └ boundCameraId | Long | 否 | - | 绑定的 camera_info.id | 1 |
| └ canMatch | Boolean | 否 | - | 是否可以匹配（未超过 3 次或已过 24 小时冷却期） | true |
| └ discoveredAt | LocalDateTime | 否 | - | 发现时间 | 2026-01-27T10:00:00 |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "id": 1,
        "lssId": "lss_001",
        "ip": "192.168.1.100",
        "port": 80,
        "uuid": "uuid-1234-5678",
        "deviceName": "IP Camera",
        "vendor": "HIKVISION",
        "model": "DS-2CD2T45FWD",
        "serialNumber": "SN123456789",
        "rtspUrl": "rtsp://admin:12345@192.168.1.100:554/stream1",
        "matchStatus": "PENDING",
        "matchedCredentialId": 1,
        "matchAttempts": 0,
        "lastMatchAttempt": "2026-01-27T10:00:00",
        "matchError": "Authentication failed",
        "deviceInfo": "{manufacturer:HIKVISION,model:DS-2CD2T45FWD,firmwareVersion:V5.6.5}",
        "bound": false,
        "boundCameraId": 1,
        "canMatch": true,
        "discoveredAt": "2026-01-27T10:00:00"
    }
}
```

#### 错误码

无

### 删除发现设备

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/discovered/{id}/delete
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/discovered/{id}/delete

描述：删除发现设备

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称 | 必填 | 描述        | 示例值 |
| ---- | ---- | ----------- | ------ |
| id   | 是   | 发现设备 ID | 0      |

#### 请求参数

#### 响应参数

| 名称       | 类型    | 必填 | 最大长度 | 描述                        | 示例值 |
| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
| success    | Boolean | 否   | -        | 请求是否成功                | true   |
| errCode    | String  | 否   | -        | 错误码（失败时返回）        |        |
| errMessage | String  | 否   | -        | 错误信息（失败时返回）      |        |
| data       | object  | 否   | -        | 响应数据 (ActualType: Void) |        |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {}
}
```

#### 错误码

无

### 触发凭证匹配

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/lss/{lssId}/match
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/lss/{lssId}/match

描述：触发凭证匹配

ContentType：`application/json`

#### Path 参数

| 名称  | 必填 | 描述        | 示例值 |
| ----- | ---- | ----------- | ------ |
| lssId | 是   | LSS 节点 ID |        |

#### 请求参数

##### Body Parameter

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| deviceIds | List<Long> | 否 | - | 要匹配的设备 ID 列表（可选，空表示全部 PENDING 设备） (ActualType: Long) | [1, 2, 3] |
| credentialIds | List<Long> | 否 | - | 要使用的凭证 ID 列表（可选，空表示使用所有启用的凭证） (ActualType: Long) | [1, 2] |
| maxRetry | Integer | 否 | - | 最大重试次数 | 3 |

#### 请求示例

```
{
    "deviceIds": [
        1,
        2,
        3
    ],
    "credentialIds": [
        1,
        2
    ],
    "maxRetry": 3
}
```

#### 响应参数

| 名称           | 类型    | 必填 | 最大长度 | 描述                                    | 示例值         |
| -------------- | ------- | ---- | -------- | --------------------------------------- | -------------- |
| success        | Boolean | 否   | -        | 请求是否成功                            | true           |
| errCode        | String  | 否   | -        | 错误码（失败时返回）                    |                |
| errMessage     | String  | 否   | -        | 错误信息（失败时返回）                  |                |
| data           | object  | 否   |          | 响应数据 (ActualType: MatchResultDTO)   |                |
| └ taskId       | String  | 否   | -        | 匹配任务 ID                             | match_abc12345 |
| └ lssId        | String  | 否   | -        | LSS 节点 ID                             | lss_001        |
| └ status       | String  | 否   | -        | 匹配状态: MATCHING / COMPLETED / FAILED | MATCHING       |
| └ totalCount   | Integer | 否   | -        | 匹配的设备数量                          | 5              |
| └ successCount | Integer | 否   | -        | 成功匹配数量                            | 3              |
| └ failCount    | Integer | 否   | -        | 失败数量                                | 2              |
| └ error        | String  | 否   | -        | 错误信息                                |                |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "taskId": "match_abc12345",
        "lssId": "lss_001",
        "status": "MATCHING",
        "totalCount": 5,
        "successCount": 3,
        "failCount": 2,
        "error": "string"
    }
}
```

#### 错误码

无

### 重新匹配单个设备

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/discovered/{id}/retry
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/discovered/{id}/retry

描述：重新匹配单个设备

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称 | 必填 | 描述        | 示例值 |
| ---- | ---- | ----------- | ------ |
| id   | 是   | 发现设备 ID | 0      |

#### 请求参数

#### 响应参数

| 名称           | 类型    | 必填 | 最大长度 | 描述                                    | 示例值         |
| -------------- | ------- | ---- | -------- | --------------------------------------- | -------------- |
| success        | Boolean | 否   | -        | 请求是否成功                            | true           |
| errCode        | String  | 否   | -        | 错误码（失败时返回）                    |                |
| errMessage     | String  | 否   | -        | 错误信息（失败时返回）                  |                |
| data           | object  | 否   |          | 响应数据 (ActualType: MatchResultDTO)   |                |
| └ taskId       | String  | 否   | -        | 匹配任务 ID                             | match_abc12345 |
| └ lssId        | String  | 否   | -        | LSS 节点 ID                             | lss_001        |
| └ status       | String  | 否   | -        | 匹配状态: MATCHING / COMPLETED / FAILED | MATCHING       |
| └ totalCount   | Integer | 否   | -        | 匹配的设备数量                          | 5              |
| └ successCount | Integer | 否   | -        | 成功匹配数量                            | 3              |
| └ failCount    | Integer | 否   | -        | 失败数量                                | 2              |
| └ error        | String  | 否   | -        | 错误信息                                |                |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "taskId": "match_abc12345",
        "lssId": "lss_001",
        "status": "MATCHING",
        "totalCount": 5,
        "successCount": 3,
        "failCount": 2,
        "error": "string"
    }
}
```

#### 错误码

无

### 绑定发现设备到已有摄像头

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/scan/bind
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/scan/bind

描述：绑定发现设备到已有摄像头

ContentType：`application/json`

#### 请求参数

##### Body Parameter

| 名称         | 类型 | 必填 | 最大长度 | 描述                                | 示例值 |
| ------------ | ---- | ---- | -------- | ----------------------------------- | ------ |
| discoveredId | Long | 是   | -        | 发现设备 ID                         | 1      |
| cameraId     | Long | 是   | -        | 要绑定的摄像头 ID（camera_info.id） | 1      |

#### 请求示例

```
{
    "discoveredId": 1,
    "cameraId": 1
}
```

#### 响应参数

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码（失败时返回） |  |
| errMessage | String | 否 | - | 错误信息（失败时返回） |  |
| data | object | 否 |  | 响应数据 (ActualType: CameraInfoDTO) |  |
| └ id | Long | 否 | - | 主键 ID | 1 |
| └ cameraId | String | 否 | - | 摄像头 ID | cam_001 |
| └ cameraName | String | 否 | - | 设备名称 | 主摄像头 |
| └ ip | String | 否 | - | IP 地址 | 192.168.1.100 |
| └ port | Integer | 否 | - | 端口 | 80 |
| └ username | String | 否 | - | 用户名 | admin |
| └ vendorName | String | 否 | - | 厂商名称 | 海康威视 |
| └ brand | String | 否 | - | 品牌（兼容旧数据） | hikvision |
| └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
| └ status | String | 否 | - | 心跳状态: active, hold, dead | active |
| └ lssId | String | 否 | - | 绑定的 LSS 节点 ID | lss_001 |
| └ model | String | 否 | - | 摄像头型号 | DS-2CD2T47G2-LSU/SL |
| └ rtspUrl | String | 否 | - | RTSP 推流地址 | rtsp://admin:password@192.168.1.100:554/stream1 |
| └ channelNo | String | 否 | - | 通道号 | 1 |
| └ remark | String | 否 | - | 备注 |  |
| └ paramConfig | String | 否 | - | 参数配置 (JSON 格式，包含 ip, port, username, password 等) | {ip:192.168.1.100,port:80,username:admin,password:123456} |
| └ runtimeParams | String | 否 | - | 设备运行参数 (JSON 格式，通过 ONVIF 获取的摄像头参数)<br><br>现阶段：手动输入<br>TODO: 后续改为通过 ONVIF 协议扫描自动获取 | {resolution:1920x1080,fps:25,codec:H.264} |
| └ enabled | Boolean | 否 | - | 是否启用 | true |
| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
| └ streamSn | String | 否 | - | 关联的推流任务流水号 | stream_e1d710b7b8a8 |
| └ streamStatus | String | 否 | - | 推流状态: idle, streaming, stopped, error | streaming |
| └ playbackUrl | String | 否 | - | 播放地址（WHEP） | https://customer-xxx.cloudflarestream.com/xxx/webRTC/play |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "id": 1,
        "cameraId": "cam_001",
        "cameraName": "主摄像头",
        "ip": "192.168.1.100",
        "port": 80,
        "username": "admin",
        "vendorName": "海康威视",
        "brand": "hikvision",
        "capability": "ptz_enabled",
        "status": "active",
        "lssId": "lss_001",
        "model": "DS-2CD2T47G2-LSU/SL",
        "rtspUrl": "rtsp://admin:password@192.168.1.100:554/stream1",
        "channelNo": "1",
        "remark": "string",
        "paramConfig": "{ip:192.168.1.100,port:80,username:admin,password:123456}",
        "runtimeParams": "{resolution:1920x1080,fps:25,codec:H.264}",
        "enabled": true,
        "createdAt": "2026-01-07T10:00:00",
        "updatedAt": "2026-01-07T10:00:00",
        "streamSn": "stream_e1d710b7b8a8",
        "streamStatus": "streaming",
        "playbackUrl": "https://customer-xxx.cloudflarestream.com/xxx/webRTC/play"
    }
}
```

#### 错误码

无

### 从发现设备创建摄像头（已废弃）

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/discovered/create-camera
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/discovered/create-camera

描述：从发现设备创建摄像头（已废弃）

ContentType：`application/json`

#### 请求参数

##### Body Parameter

| 名称         | 类型   | 必填 | 最大长度 | 描述                                 | 示例值       |
| ------------ | ------ | ---- | -------- | ------------------------------------ | ------------ |
| discoveredId | Long   | 是   | -        | 发现设备 ID                          | 1            |
| name         | String | 否   | -        | 摄像头名称（可选，默认使用设备名称） | 前门摄像头   |
| remark       | String | 否   | -        | 备注                                 | 大门入口监控 |

#### 请求示例

```
{
    "discoveredId": 1,
    "name": "前门摄像头",
    "remark": "大门入口监控"
}
```

#### 响应参数

| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码（失败时返回） |  |
| errMessage | String | 否 | - | 错误信息（失败时返回） |  |
| data | object | 否 |  | 响应数据 (ActualType: CameraInfoDTO) |  |
| └ id | Long | 否 | - | 主键 ID | 1 |
| └ cameraId | String | 否 | - | 摄像头 ID | cam_001 |
| └ cameraName | String | 否 | - | 设备名称 | 主摄像头 |
| └ ip | String | 否 | - | IP 地址 | 192.168.1.100 |
| └ port | Integer | 否 | - | 端口 | 80 |
| └ username | String | 否 | - | 用户名 | admin |
| └ vendorName | String | 否 | - | 厂商名称 | 海康威视 |
| └ brand | String | 否 | - | 品牌（兼容旧数据） | hikvision |
| └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
| └ status | String | 否 | - | 心跳状态: active, hold, dead | active |
| └ lssId | String | 否 | - | 绑定的 LSS 节点 ID | lss_001 |
| └ model | String | 否 | - | 摄像头型号 | DS-2CD2T47G2-LSU/SL |
| └ rtspUrl | String | 否 | - | RTSP 推流地址 | rtsp://admin:password@192.168.1.100:554/stream1 |
| └ channelNo | String | 否 | - | 通道号 | 1 |
| └ remark | String | 否 | - | 备注 |  |
| └ paramConfig | String | 否 | - | 参数配置 (JSON 格式，包含 ip, port, username, password 等) | {ip:192.168.1.100,port:80,username:admin,password:123456} |
| └ runtimeParams | String | 否 | - | 设备运行参数 (JSON 格式，通过 ONVIF 获取的摄像头参数)<br><br>现阶段：手动输入<br>TODO: 后续改为通过 ONVIF 协议扫描自动获取 | {resolution:1920x1080,fps:25,codec:H.264} |
| └ enabled | Boolean | 否 | - | 是否启用 | true |
| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
| └ streamSn | String | 否 | - | 关联的推流任务流水号 | stream_e1d710b7b8a8 |
| └ streamStatus | String | 否 | - | 推流状态: idle, streaming, stopped, error | streaming |
| └ playbackUrl | String | 否 | - | 播放地址（WHEP） | https://customer-xxx.cloudflarestream.com/xxx/webRTC/play |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "id": 1,
        "cameraId": "cam_001",
        "cameraName": "主摄像头",
        "ip": "192.168.1.100",
        "port": 80,
        "username": "admin",
        "vendorName": "海康威视",
        "brand": "hikvision",
        "capability": "ptz_enabled",
        "status": "active",
        "lssId": "lss_001",
        "model": "DS-2CD2T47G2-LSU/SL",
        "rtspUrl": "rtsp://admin:password@192.168.1.100:554/stream1",
        "channelNo": "1",
        "remark": "string",
        "paramConfig": "{ip:192.168.1.100,port:80,username:admin,password:123456}",
        "runtimeParams": "{resolution:1920x1080,fps:25,codec:H.264}",
        "enabled": true,
        "createdAt": "2026-01-07T10:00:00",
        "updatedAt": "2026-01-07T10:00:00",
        "streamSn": "stream_e1d710b7b8a8",
        "streamStatus": "streaming",
        "playbackUrl": "https://customer-xxx.cloudflarestream.com/xxx/webRTC/play"
    }
}
```

#### 错误码

无

### 批量创建摄像头（已废弃）

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/discovered/batch-create
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/discovered/batch-create

描述：批量创建摄像头（已废弃）

ContentType：`application/json`

#### 请求参数

##### Body Parameter

| 名称          | 类型  | 必填 | 最大长度 | 描述                              | 示例值 |
| ------------- | ----- | ---- | -------- | --------------------------------- | ------ |
| discoveredIds | array | 否   | -        | 发现设备 ID 列表,[array of int64] | 0,0    |

#### 请求示例

```
{
    "discoveredIds": [
        0,
        0
    ]
}
```

#### 响应参数

| 名称       | 类型    | 必填 | 最大长度 | 描述                           | 示例值 |
| ---------- | ------- | ---- | -------- | ------------------------------ | ------ |
| success    | Boolean | 否   | -        | 请求是否成功                   | true   |
| errCode    | String  | 否   | -        | 错误码（失败时返回）           |        |
| errMessage | String  | 否   | -        | 错误信息（失败时返回）         |        |
| data       | int32   | 否   | -        | 响应数据 (ActualType: Integer) |        |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": 0
}
```

#### 错误码

无

### 获取凭证列表

维护人：TG Live

#### URL

- 本地开发环境: `GET` http://localhost:10050/api/admin/credentials
- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/credentials

描述：获取凭证列表

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### 请求参数

#### 响应参数

| 名称           | 类型          | 必填 | 最大长度 | 描述                        | 示例值              |
| -------------- | ------------- | ---- | -------- | --------------------------- | ------------------- |
| success        | Boolean       | 否   | -        | 请求是否成功                | true                |
| errCode        | String        | 否   | -        | 错误码（失败时返回）        |                     |
| errMessage     | String        | 否   | -        | 错误信息（失败时返回）      |                     |
| data           | array         | 否   |          | 响应数据 (ActualType: List) |                     |
| └ id           | Long          | 否   | -        | ID                          | 1                   |
| └ name         | String        | 否   | -        | 凭证名称                    | 默认凭证            |
| └ username     | String        | 否   | -        | 用户名                      | admin               |
| └ password     | String        | 否   | -        | 密码（列表时可能隐藏）      | 12345               |
| └ vendor       | String        | 否   | -        | 适用厂商（空表示通用）      | HIKVISION           |
| └ priority     | Integer       | 否   | -        | 优先级                      | 100                 |
| └ enabled      | Boolean       | 否   | -        | 是否启用                    | true                |
| └ remark       | String        | 否   | -        | 备注                        | 海康威视默认凭证    |
| └ successCount | Integer       | 否   | -        | 成功匹配次数                | 10                  |
| └ failCount    | Integer       | 否   | -        | 失败匹配次数                | 5                   |
| └ createdAt    | LocalDateTime | 否   | -        | 创建时间                    | 2026-01-27T10:00:00 |
| └ updatedAt    | LocalDateTime | 否   | -        | 更新时间                    | 2026-01-27T10:00:00 |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": [
        {
            "id": 1,
            "name": "默认凭证",
            "username": "admin",
            "password": "12345",
            "vendor": "HIKVISION",
            "priority": 100,
            "enabled": true,
            "remark": "海康威视默认凭证",
            "successCount": 10,
            "failCount": 5,
            "createdAt": "2026-01-27T10:00:00",
            "updatedAt": "2026-01-27T10:00:00"
        }
    ]
}
```

#### 错误码

无

### 添加凭证

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/credentials
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/credentials

描述：添加凭证

ContentType：`application/json`

#### 请求参数

##### Body Parameter

| 名称     | 类型    | 必填 | 最大长度 | 描述                         | 示例值           |
| -------- | ------- | ---- | -------- | ---------------------------- | ---------------- |
| name     | String  | 是   | -        | 凭证名称                     | 默认凭证         |
| username | String  | 是   | -        | 用户名                       | admin            |
| password | String  | 是   | -        | 密码                         | 12345            |
| vendor   | String  | 否   | -        | 适用厂商（空表示通用）       | HIKVISION        |
| priority | Integer | 否   | -        | 优先级（数字越小优先级越高） | 100              |
| enabled  | Boolean | 否   | -        | 是否启用                     | true             |
| remark   | String  | 否   | -        | 备注                         | 海康威视默认凭证 |

#### 请求示例

```
{
    "name": "默认凭证",
    "username": "admin",
    "password": "12345",
    "vendor": "HIKVISION",
    "priority": 100,
    "enabled": true,
    "remark": "海康威视默认凭证"
}
```

#### 响应参数

| 名称           | 类型          | 必填 | 最大长度 | 描述                                       | 示例值              |
| -------------- | ------------- | ---- | -------- | ------------------------------------------ | ------------------- |
| success        | Boolean       | 否   | -        | 请求是否成功                               | true                |
| errCode        | String        | 否   | -        | 错误码（失败时返回）                       |                     |
| errMessage     | String        | 否   | -        | 错误信息（失败时返回）                     |                     |
| data           | object        | 否   |          | 响应数据 (ActualType: CameraCredentialDTO) |                     |
| └ id           | Long          | 否   | -        | ID                                         | 1                   |
| └ name         | String        | 否   | -        | 凭证名称                                   | 默认凭证            |
| └ username     | String        | 否   | -        | 用户名                                     | admin               |
| └ password     | String        | 否   | -        | 密码（列表时可能隐藏）                     | 12345               |
| └ vendor       | String        | 否   | -        | 适用厂商（空表示通用）                     | HIKVISION           |
| └ priority     | Integer       | 否   | -        | 优先级                                     | 100                 |
| └ enabled      | Boolean       | 否   | -        | 是否启用                                   | true                |
| └ remark       | String        | 否   | -        | 备注                                       | 海康威视默认凭证    |
| └ successCount | Integer       | 否   | -        | 成功匹配次数                               | 10                  |
| └ failCount    | Integer       | 否   | -        | 失败匹配次数                               | 5                   |
| └ createdAt    | LocalDateTime | 否   | -        | 创建时间                                   | 2026-01-27T10:00:00 |
| └ updatedAt    | LocalDateTime | 否   | -        | 更新时间                                   | 2026-01-27T10:00:00 |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "id": 1,
        "name": "默认凭证",
        "username": "admin",
        "password": "12345",
        "vendor": "HIKVISION",
        "priority": 100,
        "enabled": true,
        "remark": "海康威视默认凭证",
        "successCount": 10,
        "failCount": 5,
        "createdAt": "2026-01-27T10:00:00",
        "updatedAt": "2026-01-27T10:00:00"
    }
}
```

#### 错误码

无

### 更新凭证

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/credentials/update
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/credentials/update

描述：更新凭证

ContentType：`application/json`

#### 请求参数

##### Body Parameter

| 名称     | 类型    | 必填 | 最大长度 | 描述     | 示例值           |
| -------- | ------- | ---- | -------- | -------- | ---------------- |
| id       | Long    | 是   | -        | 凭证 ID  | 1                |
| name     | String  | 否   | -        | 凭证名称 | 默认凭证         |
| username | String  | 否   | -        | 用户名   | admin            |
| password | String  | 否   | -        | 密码     | 12345            |
| vendor   | String  | 否   | -        | 适用厂商 | HIKVISION        |
| priority | Integer | 否   | -        | 优先级   | 100              |
| enabled  | Boolean | 否   | -        | 是否启用 | true             |
| remark   | String  | 否   | -        | 备注     | 海康威视默认凭证 |

#### 请求示例

```
{
    "id": 1,
    "name": "默认凭证",
    "username": "admin",
    "password": "12345",
    "vendor": "HIKVISION",
    "priority": 100,
    "enabled": true,
    "remark": "海康威视默认凭证"
}
```

#### 响应参数

| 名称           | 类型          | 必填 | 最大长度 | 描述                                       | 示例值              |
| -------------- | ------------- | ---- | -------- | ------------------------------------------ | ------------------- |
| success        | Boolean       | 否   | -        | 请求是否成功                               | true                |
| errCode        | String        | 否   | -        | 错误码（失败时返回）                       |                     |
| errMessage     | String        | 否   | -        | 错误信息（失败时返回）                     |                     |
| data           | object        | 否   |          | 响应数据 (ActualType: CameraCredentialDTO) |                     |
| └ id           | Long          | 否   | -        | ID                                         | 1                   |
| └ name         | String        | 否   | -        | 凭证名称                                   | 默认凭证            |
| └ username     | String        | 否   | -        | 用户名                                     | admin               |
| └ password     | String        | 否   | -        | 密码（列表时可能隐藏）                     | 12345               |
| └ vendor       | String        | 否   | -        | 适用厂商（空表示通用）                     | HIKVISION           |
| └ priority     | Integer       | 否   | -        | 优先级                                     | 100                 |
| └ enabled      | Boolean       | 否   | -        | 是否启用                                   | true                |
| └ remark       | String        | 否   | -        | 备注                                       | 海康威视默认凭证    |
| └ successCount | Integer       | 否   | -        | 成功匹配次数                               | 10                  |
| └ failCount    | Integer       | 否   | -        | 失败匹配次数                               | 5                   |
| └ createdAt    | LocalDateTime | 否   | -        | 创建时间                                   | 2026-01-27T10:00:00 |
| └ updatedAt    | LocalDateTime | 否   | -        | 更新时间                                   | 2026-01-27T10:00:00 |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {
        "id": 1,
        "name": "默认凭证",
        "username": "admin",
        "password": "12345",
        "vendor": "HIKVISION",
        "priority": 100,
        "enabled": true,
        "remark": "海康威视默认凭证",
        "successCount": 10,
        "failCount": 5,
        "createdAt": "2026-01-27T10:00:00",
        "updatedAt": "2026-01-27T10:00:00"
    }
}
```

#### 错误码

无

### 删除凭证

维护人：TG Live

#### URL

- 本地开发环境: `POST` http://localhost:10050/api/admin/credentials/{id}/delete
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/credentials/{id}/delete

描述：删除凭证

ContentType：`application/x-www-form-urlencoded;charset=UTF-8`

#### Path 参数

| 名称 | 必填 | 描述    | 示例值 |
| ---- | ---- | ------- | ------ |
| id   | 是   | 凭证 ID | 0      |

#### 请求参数

#### 响应参数

| 名称       | 类型    | 必填 | 最大长度 | 描述                        | 示例值 |
| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
| success    | Boolean | 否   | -        | 请求是否成功                | true   |
| errCode    | String  | 否   | -        | 错误码（失败时返回）        |        |
| errMessage | String  | 否   | -        | 错误信息（失败时返回）      |        |
| data       | object  | 否   | -        | 响应数据 (ActualType: Void) |        |

#### 响应示例

```
{
    "success": true,
    "errCode": "string",
    "errMessage": "string",
    "data": {}
}
```

#### 错误码

无
