# 文档
## default
## 摄像头控制 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
- 本地开发环境: `POST` http://localhost:10050/api/camera/list
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/list
描述:获取摄像头列表
ContentType:`application/json`
#### 请求参数
##### Body Parameter
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --------- | ------ | ---- | -------- | --------------- | ----------- |
| machineId | String | 否 | - | 机器 ID(可选) | machine_001 |
#### 请求示例
```
{
"machineId": "machine_001"
}
```
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | String | 否 | - | 错误信息(失败时返回) | |
| data | array | 否 | | 响应数据 (ActualType: List) | |
| └ cameraId | String | 否 | - | 摄像头 ID | cam_001 |
| └ name | String | 否 | - | 摄像头名称 | 主摄像头 |
| └ lssId | String | 否 | - | 绑定的 LSS 节点 ID | lss_001 |
| └ model | String | 否 | - | 摄像头型号 | DS-2CD2143G2-IS |
| └ rtspUrl | String | 否 | - | RTSP 推流地址 | rtsp://admin:password@192.168.1.100:554/Streaming/Channels/101 |
| └ channelNo | String | 否 | - | 通道号 | 1 |
| └ status | String | 否 | - | 摄像头状态: online, offline, connecting, failed, error, unknown | online |
| └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
| └ ptzSupported | Boolean | 否 | - | 是否支持 PTZ | true |
| └ remark | String | 否 | - | 备注 | |
| └ enabled | Boolean | 否 | - | 是否启用 | true |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": [
{
"cameraId": "cam_001",
"name": "主摄像头",
"lssId": "lss_001",
"model": "DS-2CD2143G2-IS",
"rtspUrl": "rtsp://admin:password@192.168.1.100:554/Streaming/Channels/101",
"channelNo": "1",
"status": "online",
"capability": "ptz_enabled",
"ptzSupported": true,
"remark": "string",
"enabled": true
}
]
}
```
#### 错误码
无
### 获取摄像头信息
维护人:TG Live
#### URL
- 本地开发环境: `GET` http://localhost:10050/api/camera/{cameraId}
- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/camera/{cameraId}
描述:获取摄像头信息
ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
#### Path 参数
| 名称 | 必填 | 描述 | 示例值 |
| -------- | ---- | --------- | ---------- |
| cameraId | 是 | 摄像头 ID | camera_001 |
#### 请求参数
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | String | 否 | - | 错误信息(失败时返回) | |
| data | object | 否 | | 响应数据 (ActualType: CameraDTO) | |
| └ cameraId | String | 否 | - | 摄像头 ID | cam_001 |
| └ name | String | 否 | - | 摄像头名称 | 主摄像头 |
| └ lssId | String | 否 | - | 绑定的 LSS 节点 ID | lss_001 |
| └ model | String | 否 | - | 摄像头型号 | DS-2CD2143G2-IS |
| └ rtspUrl | String | 否 | - | RTSP 推流地址 | rtsp://admin:password@192.168.1.100:554/Streaming/Channels/101 |
| └ channelNo | String | 否 | - | 通道号 | 1 |
| └ status | String | 否 | - | 摄像头状态: online, offline, connecting, failed, error, unknown | online |
| └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
| └ ptzSupported | Boolean | 否 | - | 是否支持 PTZ | true |
| └ remark | String | 否 | - | 备注 | |
| └ enabled | Boolean | 否 | - | 是否启用 | true |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {
"cameraId": "cam_001",
"name": "主摄像头",
"lssId": "lss_001",
"model": "DS-2CD2143G2-IS",
"rtspUrl": "rtsp://admin:password@192.168.1.100:554/Streaming/Channels/101",
"channelNo": "1",
"status": "online",
"capability": "ptz_enabled",
"ptzSupported": true,
"remark": "string",
"enabled": true
}
}
```
#### 错误码
无
### 切换摄像头通道(MVP 核心)
维护人:TG Live
#### URL
- 本地开发环境: `POST` http://localhost:10050/api/camera/switch
- 开发环境: `POST` https://tg-live-game.pwtk.cc/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"
}
```
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ------------- | ------- | ---- | -------- | --------------------------------- | -------------------------------- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | 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 |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {
"channelId": "ch_001",
"name": "主通道",
"rtspUrl": "rtsp://192.168.1.100:554/stream1",
"defaultView": true,
"status": "ONLINE",
"cameraId": "cam_001"
}
}
```
#### 错误码
无
### 获取当前活动通道
维护人:TG Live
#### URL
- 本地开发环境: `GET` http://localhost:10050/api/camera/current
- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/camera/current
描述:获取当前活动通道
ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
#### 请求参数
##### Query Parameter
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| --------- | ------ | ---- | -------- | ------- | ----------- |
| machineId | string | 是 | - | 机器 ID | machine_001 |
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ------------- | ------- | ---- | -------- | --------------------------------- | -------------------------------- |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | 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 |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {
"channelId": "ch_001",
"name": "主通道",
"rtspUrl": "rtsp://192.168.1.100:554/stream1",
"defaultView": true,
"status": "ONLINE",
"cameraId": "cam_001"
}
}
```
#### 错误码
无
### 开始 PTZ 控制(后台专用)
维护人:TG Live
#### URL
- 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/start
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/{cameraId}/ptz/start
描述:开始 PTZ 控制(后台专用)
ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
#### Path 参数
| 名称 | 必填 | 描述 | 示例值 |
| -------- | ---- | --------- | ------------- |
| cameraId | 是 | 摄像头 ID | hikvision_ptz |
#### 请求参数
##### Query Parameter
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ------ | ------ | ---- | -------- | ----------- | ------ |
| action | string | 是 | - | PTZ 动作 | up |
| speed | int32 | 是 | - | 速度(1-100) | 50 |
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | String | 否 | - | 错误信息(失败时返回) | |
| data | object | 否 | - | 响应数据 (ActualType: Void) | |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {}
}
```
#### 错误码
无
### 停止 PTZ 控制(后台专用)
维护人:TG Live
#### URL
- 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/stop
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/{cameraId}/ptz/stop
描述:停止 PTZ 控制(后台专用)
ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
#### Path 参数
| 名称 | 必填 | 描述 | 示例值 |
| -------- | ---- | --------- | ------------- |
| cameraId | 是 | 摄像头 ID | hikvision_ptz |
#### 请求参数
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | String | 否 | - | 错误信息(失败时返回) | |
| data | object | 否 | - | 响应数据 (ActualType: Void) | |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {}
}
```
#### 错误码
无
### PTZ 直接控制(兼容前端 pan/tilt/zoom 方式)
与前端海康调试接口一致:直接传 pan/tilt/zoom 值
维护人:TG Live
#### URL
- 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/control
- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/{cameraId}/ptz/control
描述:PTZ 直接控制(兼容前端 pan/tilt/zoom 方式)
与前端海康调试接口一致:直接传 pan/tilt/zoom 值
ContentType:`application/json`
#### Path 参数
| 名称 | 必填 | 描述 | 示例值 |
| -------- | ---- | --------- | ------------- |
| cameraId | 是 | 摄像头 ID | hikvision_ptz |
#### 请求参数
##### Body Parameter
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ------- | ------- | ---- | -------- | ------------------------------------------------------ | ------ |
| pan | Integer | 否 | 100 | 水平移动速度
负值向左,正值向右
范围: -100 ~ 100 | 0 |
| tilt | Integer | 否 | 100 | 垂直移动速度
负值向下,正值向上
范围: -100 ~ 100 | 0 |
| zoom | Integer | 否 | 100 | 缩放速度
负值缩小,正值放大
范围: -100 ~ 100 | 0 |
| channel | Integer | 否 | - | 通道号(可选,默认 1) | 0 |
#### 请求示例
```
{
"pan": 0,
"tilt": 0,
"zoom": 0,
"channel": 0
}
```
#### 响应参数
| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
| success | Boolean | 否 | - | 请求是否成功 | true |
| errCode | String | 否 | - | 错误码(失败时返回) | |
| errMessage | String | 否 | - | 错误信息(失败时返回) | |
| data | object | 否 | - | 响应数据 (ActualType: Void) | |
#### 响应示例
```
{
"success": true,
"errCode": "string",
"errMessage": "string",
"data": {}
}
```
#### 错误码
无
### 获取预置位列表
异步获取摄像头的预置位列表,结果通过 Ably 推送返回。
预置位是摄像头保存的固定位置点,可快速跳转到该位置。
维护人:TG Live #### URL - 本地开发环境: `GET` http://localhost:10050/api/camera/control/{cameraId}/preset/list - 开发环境: `GET` https://tg-live-game.pwtk.cc/api/camera/control/{cameraId}/preset/list 描述:获取预置位列表异步获取摄像头的预置位列表,结果通过 Ably 推送返回。
预置位是摄像头保存的固定位置点,可快速跳转到该位置。
ContentType:`application/x-www-form-urlencoded;charset=UTF-8` #### Path 参数 | 名称 | 必填 | 描述 | 示例值 | | -------- | ---- | --------- | ------------- | | cameraId | 是 | 摄像头 ID | hikvision_ptz | #### 请求参数 ##### Query Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ------- | ----- | ---- | -------- | ---------------------------------------- | ------ | | channel | int32 | 否 | - | 通道号(可选,默认使用摄像头配置的通道) | 1 | #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ---------- | ------- | ---- | -------- | ----------------------------- | ------ | | success | Boolean | 否 | - | 请求是否成功 | true | | errCode | String | 否 | - | 错误码(失败时返回) | | | errMessage | String | 否 | - | 错误信息(失败时返回) | | | data | string | 否 | - | 响应数据 (ActualType: String) | | #### 响应示例 ``` { "success": true, "errCode": "string", "errMessage": "string", "data": "string" } ``` #### 错误码 无 ### 跳转到预置位控制摄像头快速移动到指定的预置位位置。
预置位编号从 1 开始,需确保该预置位已存在。
维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/control/{cameraId}/preset/goto - 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/control/{cameraId}/preset/goto 描述:跳转到预置位控制摄像头快速移动到指定的预置位位置。
预置位编号从 1 开始,需确保该预置位已存在。
ContentType:`application/json` #### Path 参数 | 名称 | 必填 | 描述 | 示例值 | | -------- | ---- | --------- | ------------- | | cameraId | 是 | 摄像头 ID | hikvision_ptz | #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ----------- | ------- | ---- | -------- | ---------- | ------ | | presetIndex | Integer | 是 | - | 预置位编号 | 1 | #### 请求示例 ``` { "presetIndex": 1 } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ---------- | ------- | ---- | -------- | ----------------------------- | ------ | | success | Boolean | 否 | - | 请求是否成功 | true | | errCode | String | 否 | - | 错误码(失败时返回) | | | errMessage | String | 否 | - | 错误信息(失败时返回) | | | data | string | 否 | - | 响应数据 (ActualType: String) | | #### 响应示例 ``` { "success": true, "errCode": "string", "errMessage": "string", "data": "string" } ``` #### 错误码 无 ### 设置预置位(保存当前位置)将摄像头当前的 PTZ 位置保存为预置位。
如果指定的预置位编号已存在,将覆盖原有设置。
维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/control/{cameraId}/preset/set - 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/control/{cameraId}/preset/set 描述:设置预置位(保存当前位置)将摄像头当前的 PTZ 位置保存为预置位。
如果指定的预置位编号已存在,将覆盖原有设置。
ContentType:`application/json` #### Path 参数 | 名称 | 必填 | 描述 | 示例值 | | -------- | ---- | --------- | ------------- | | cameraId | 是 | 摄像头 ID | hikvision_ptz | #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ----------- | ------- | ---- | -------- | ----------------------------------------- | ------ | | presetIndex | Integer | 是 | - | 预置位编号 | 1 | | presetName | String | 否 | 50 | 预置位名称(可选)删除摄像头的指定预置位。
删除后该预置位编号将不可用,直到重新设置。
维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/control/{cameraId}/preset/remove - 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/control/{cameraId}/preset/remove 描述:删除预置位删除摄像头的指定预置位。
删除后该预置位编号将不可用,直到重新设置。
ContentType:`application/json` #### Path 参数 | 名称 | 必填 | 描述 | 示例值 | | -------- | ---- | --------- | ------------- | | cameraId | 是 | 摄像头 ID | hikvision_ptz | #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ----------- | ------- | ---- | -------- | ---------- | ------ | | presetIndex | Integer | 是 | - | 预置位编号 | 1 | #### 请求示例 ``` { "presetIndex": 1 } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ---------- | ------- | ---- | -------- | ----------------------------- | ------ | | success | Boolean | 否 | - | 请求是否成功 | true | | errCode | String | 否 | - | 错误码(失败时返回) | | | errMessage | String | 否 | - | 错误信息(失败时返回) | | | data | string | 否 | - | 响应数据 (ActualType: String) | | #### 响应示例 ``` { "success": true, "errCode": "string", "errMessage": "string", "data": "string" } ``` #### 错误码 无 ### 回放记忆路线(前端用户接口)触发指定摄像头的记忆路线回放,摄像头将按录制顺序自动执行所有 PTZ 动作。
维护人:TG Live #### URL - 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/patrol/play - 开发环境: `POST` https://tg-live-game.pwtk.cc/api/camera/{cameraId}/patrol/play 描述:回放记忆路线(前端用户接口)触发指定摄像头的记忆路线回放,摄像头将按录制顺序自动执行所有 PTZ 动作。
ContentType:`application/json` #### Path 参数 | 名称 | 必填 | 描述 | 示例值 | | -------- | ---- | --------- | ------- | | cameraId | 是 | 摄像头 ID | cam_001 | #### 请求参数 ##### Body Parameter | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ----------- | ------- | ---- | -------- | ------------------------------------------------------ | -------- | | tourId | String | 是 | - | 轨迹 ID | tour_001 | | loopEnabled | Boolean | 否 | - | 覆盖循环设置:是否循环执行(可选,不传则使用轨迹配置) | true | | loopCount | Integer | 否 | - | 覆盖循环设置:循环次数(可选,不传则使用轨迹配置) | 3 | #### 请求示例 ``` { "tourId": "tour_001", "loopEnabled": true, "loopCount": 3 } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ---------- | ------- | ---- | -------- | ----------------------------- | ------ | | success | Boolean | 否 | - | 请求是否成功 | true | | errCode | String | 否 | - | 错误码(失败时返回) | | | errMessage | String | 否 | - | 错误信息(失败时返回) | | | data | string | 否 | - | 响应数据 (ActualType: String) | | #### 响应示例 ``` { "success": true, "errCode": "string", "errMessage": "string", "data": "string" } ``` #### 错误码 无