# 文档 ## 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 | 预置位名称(可选)
Validate[max: 50; ] | 位置 1 | #### 请求示例 ``` { "presetIndex": 1, "presetName": "位置1" } ``` #### 响应参数 | 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 | | ---------- | ------- | ---- | -------- | ----------------------------- | ------ | | success | Boolean | 否 | - | 请求是否成功 | true | | errCode | String | 否 | - | 错误码(失败时返回) | | | errMessage | String | 否 | - | 错误信息(失败时返回) | | | data | string | 否 | - | 响应数据 (ActualType: String) | | #### 响应示例 ``` { "success": true, "errCode": "string", "errMessage": "string", "data": "string" } ``` #### 错误码 无 ### 删除预置位

删除摄像头的指定预置位。

删除后该预置位编号将不可用,直到重新设置。

维护人: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" } ``` #### 错误码 无